From 1feeea0b2dcfa6ade737128ef84d7e72819470e7 Mon Sep 17 00:00:00 2001 From: Chuck McCallum Date: Tue, 23 Dec 2025 12:08:45 -0500 Subject: [PATCH 1/8] get mean and median accuracy... but nothing uses it --- dp_wizard/utils/code_generators/analyses/mean/__init__.py | 6 +++++- dp_wizard/utils/code_generators/analyses/median/__init__.py | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/dp_wizard/utils/code_generators/analyses/mean/__init__.py b/dp_wizard/utils/code_generators/analyses/mean/__init__.py index 72522bef..e5b47cba 100644 --- a/dp_wizard/utils/code_generators/analyses/mean/__init__.py +++ b/dp_wizard/utils/code_generators/analyses/mean/__init__.py @@ -20,13 +20,16 @@ def make_query(code_gen, identifier, accuracy_name, stats_name): - def template(GROUP_NAMES, stats_context, EXPR_NAME): + def template(GROUP_NAMES, stats_context, EXPR_NAME, confidence): groups = GROUP_NAMES QUERY_NAME = ( stats_context.query().group_by(groups).agg(EXPR_NAME).WITH_KEYS if groups else stats_context.query().select(EXPR_NAME) ) + ACCURACY_NAME = QUERY_NAME.summarize(alpha=1 - confidence)[ # noqa: F841 + "accuracy" + ] STATS_NAME = QUERY_NAME.release().collect() STATS_NAME # type: ignore @@ -46,6 +49,7 @@ def template(GROUP_NAMES, stats_context, EXPR_NAME): ) .fill_expressions( QUERY_NAME=f"{identifier}_query", + ACCURACY_NAME=accuracy_name, STATS_NAME=stats_name, EXPR_NAME=f"{identifier}_expr", ) diff --git a/dp_wizard/utils/code_generators/analyses/median/__init__.py b/dp_wizard/utils/code_generators/analyses/median/__init__.py index 121400ee..23b2c5ae 100644 --- a/dp_wizard/utils/code_generators/analyses/median/__init__.py +++ b/dp_wizard/utils/code_generators/analyses/median/__init__.py @@ -22,13 +22,16 @@ def make_query(code_gen, identifier, accuracy_name, stats_name): - def template(GROUP_NAMES, stats_context, EXPR_NAME): + def template(GROUP_NAMES, stats_context, EXPR_NAME, confidence): groups = GROUP_NAMES QUERY_NAME = ( stats_context.query().group_by(groups).agg(EXPR_NAME).WITH_KEYS if groups else stats_context.query().select(EXPR_NAME) ) + ACCURACY_NAME = QUERY_NAME.summarize(alpha=1 - confidence)[ # noqa: F841 + "accuracy" + ] STATS_NAME = QUERY_NAME.release().collect() STATS_NAME # type: ignore @@ -48,6 +51,7 @@ def template(GROUP_NAMES, stats_context, EXPR_NAME): ) .fill_expressions( QUERY_NAME=f"{identifier}_query", + ACCURACY_NAME=accuracy_name, STATS_NAME=stats_name, EXPR_NAME=f"{identifier}_expr", ) From 084a35da74d4c1f59c2915e57a599c24bc24badf Mon Sep 17 00:00:00 2001 From: Chuck McCallum Date: Tue, 23 Dec 2025 14:41:59 -0500 Subject: [PATCH 2/8] demo summarize() --- .../analyses/histogram/__init__.py | 20 ++++++++++++++++--- .../code_generators/analyses/mean/__init__.py | 20 +++++++++++++++---- .../analyses/median/__init__.py | 20 +++++++++++++++---- 3 files changed, 49 insertions(+), 11 deletions(-) diff --git a/dp_wizard/utils/code_generators/analyses/histogram/__init__.py b/dp_wizard/utils/code_generators/analyses/histogram/__init__.py index d958fee0..573aacb9 100644 --- a/dp_wizard/utils/code_generators/analyses/histogram/__init__.py +++ b/dp_wizard/utils/code_generators/analyses/histogram/__init__.py @@ -32,9 +32,23 @@ def template(BIN_NAME, GROUP_NAMES, stats_context, confidence): .agg(pl.len().dp.noise().alias("count")) # type: ignore .WITH_KEYS ) - ACCURACY_NAME = QUERY_NAME.summarize(alpha=1 - confidence)[ # noqa: F841 - "accuracy" - ].item() + + # - + + # We can summarize the statistic to get the accuracy: + + # + + + summary = QUERY_NAME.summarize(alpha=1 - confidence) + summary + + # - + + # Proceding to the DP release: + + # + + + ACCURACY_NAME = summary["accuracy"].item() STATS_NAME = QUERY_NAME.release().collect() STATS_NAME # type: ignore diff --git a/dp_wizard/utils/code_generators/analyses/mean/__init__.py b/dp_wizard/utils/code_generators/analyses/mean/__init__.py index e5b47cba..50d2c6cc 100644 --- a/dp_wizard/utils/code_generators/analyses/mean/__init__.py +++ b/dp_wizard/utils/code_generators/analyses/mean/__init__.py @@ -27,9 +27,22 @@ def template(GROUP_NAMES, stats_context, EXPR_NAME, confidence): if groups else stats_context.query().select(EXPR_NAME) ) - ACCURACY_NAME = QUERY_NAME.summarize(alpha=1 - confidence)[ # noqa: F841 - "accuracy" - ] + + # - + + # If we summarize the statistic, we see that a mean is composed + # of a sum and a length, each with their own accuracy: + + # + + + QUERY_NAME.summarize(alpha=1 - confidence) + + # - + + # Proceding to the DP release: + + # + + STATS_NAME = QUERY_NAME.release().collect() STATS_NAME # type: ignore @@ -49,7 +62,6 @@ def template(GROUP_NAMES, stats_context, EXPR_NAME, confidence): ) .fill_expressions( QUERY_NAME=f"{identifier}_query", - ACCURACY_NAME=accuracy_name, STATS_NAME=stats_name, EXPR_NAME=f"{identifier}_expr", ) diff --git a/dp_wizard/utils/code_generators/analyses/median/__init__.py b/dp_wizard/utils/code_generators/analyses/median/__init__.py index 23b2c5ae..f435a52f 100644 --- a/dp_wizard/utils/code_generators/analyses/median/__init__.py +++ b/dp_wizard/utils/code_generators/analyses/median/__init__.py @@ -29,9 +29,22 @@ def template(GROUP_NAMES, stats_context, EXPR_NAME, confidence): if groups else stats_context.query().select(EXPR_NAME) ) - ACCURACY_NAME = QUERY_NAME.summarize(alpha=1 - confidence)[ # noqa: F841 - "accuracy" - ] + + # - + + # Because the median is based on selection from candidate values, + # it does not have an accuracy, unlike histogram and mean: + + # + + + QUERY_NAME.summarize(alpha=1 - confidence) + + # - + + # Proceding to the DP release: + + # + + STATS_NAME = QUERY_NAME.release().collect() STATS_NAME # type: ignore @@ -51,7 +64,6 @@ def template(GROUP_NAMES, stats_context, EXPR_NAME, confidence): ) .fill_expressions( QUERY_NAME=f"{identifier}_query", - ACCURACY_NAME=accuracy_name, STATS_NAME=stats_name, EXPR_NAME=f"{identifier}_expr", ) From ad82015deb127963897664eb557f89bb755a7491 Mon Sep 17 00:00:00 2001 From: Chuck McCallum Date: Tue, 23 Dec 2025 15:07:41 -0500 Subject: [PATCH 3/8] update docs --- docs/index.html | 3 ++- docs/index.md | 3 ++- docs/screenshots/download-results.png | Bin 33502 -> 33508 bytes docs/screenshots/select-dataset.png | Bin 23837 -> 23907 bytes .../analyses/histogram/__init__.py | 2 +- tests/test_docs.py | 17 +++++++++-------- 6 files changed, 14 insertions(+), 11 deletions(-) diff --git a/docs/index.html b/docs/index.html index 8fd8ccc4..fd8c2e5a 100644 --- a/docs/index.html +++ b/docs/index.html @@ -827,7 +827,8 @@

Results

>>> grade_query = ( ... stats_context.query().group_by(groups).agg(pl.len().dp.noise().alias("count")) ... ) ->>> grade_accuracy = grade_query.summarize(alpha=1 - confidence)["accuracy"].item() +>>> summary = grade_query.summarize(alpha=1 - confidence) +>>> grade_accuracy = summary["accuracy"].item() >>> grade_stats = grade_query.release().collect()

If we try to run more queries at this point, it will error. Once the diff --git a/docs/index.md b/docs/index.md index 9299bf9c..6c6b1840 100644 --- a/docs/index.md +++ b/docs/index.md @@ -582,7 +582,8 @@ Query for grade: >>> grade_query = ( ... stats_context.query().group_by(groups).agg(pl.len().dp.noise().alias("count")) ... ) ->>> grade_accuracy = grade_query.summarize(alpha=1 - confidence)["accuracy"].item() +>>> summary = grade_query.summarize(alpha=1 - confidence) +>>> grade_accuracy = summary["accuracy"].item() >>> grade_stats = grade_query.release().collect() ``` diff --git a/docs/screenshots/download-results.png b/docs/screenshots/download-results.png index 7b111e3ca8b66250392f1546a5cc9af4c046c398..3c9d351c39634fc5d5e5369cc377e8278b1de910 100644 GIT binary patch literal 33508 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 literal 33502 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 tCh>pS48~+^x8~`%C}- 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 literal 23837 zcma&NbyQp3yER&%6bc1O2~fOv@Z#d6Fm|OEFZ4_0q{KD67LPg(9MvrspM8(W1h39cjl2vGdG!|An3a~S1?_8jl=OgH zDd^d1d66DCDAN*D?m5^;N&RYi7)kT9tdk+%=GAaetl#PF*Z317_brAp&{&&T1AmK| zDD+Z}cgIR)&12VIyVsc0V~0rU^>p6`;QujRIWQbKrN7oa&|SN4jrf2b^#A9Xr?=0x z6c{Q}_7B?|U7#k*XIu0;{2y$H4Kn1qss8dvqTwv6e_r<3KM@Cr3~MX*r-*u<5j1${ zqD&kL`AVhQPM@GpVzX6uEbwGGF2!kmYhR~e%N>mb%JaIeSJ%^~r^s@DxIa{yYvE)~ zpBz{85tT-KMX1?UTU}i(k;TaoR69CjhzdIMnWZI|a9p3s?7m#DkvfezAOYw(bl}+N z9WU&Yv>W}tb3iKq1|-{v@Q#{MrAHeDh=SY#YO@NwcD;^UhBI*Hic4?WvQ$@1sC>rT zeoXve9CEC36#XFT)-ZN)<$o0^{%PxG8Ou_8@Th-u$eW~WajCNIM6`pi6U_)4bQTF_ zFUYeZ-aMDO{`n8|2LFBR1P4{i**ft8dlWP!kf_Y(39|^g;JRDva!XPO2c2(!C<<5Kbgl$pd;GBjyECmvzov7$b(G8TWswCylCR>k^*K($$t~;sBI~{B3ccLc++FU8 zuKNwmNy3HXb!{&_;Zh4U5)D={d{2Eg0aaaM-Phe%dmefnd|4%WG)}SO(*^y-l=J$e zO}l;R$!E9+m|@_X6-XLrbsbMjv2Z{4STZ4i1`;@(ZOqNN30!=$HmC5sXrAAc^S!I9 zr0T}eKCB_<+Ow*f?`e#)ksmnqdeyGusSo1b9#-SOQ7e;r>tSyUc<$o$Ke7$vd!jR4V+&cW#1TOrdt7=ISNg zt5!V!!VQ#qvD2Ck$LOEq-xy5NkI4@TY*m-n+@?O;a?a1~31%|w{we9aX1N3jE@H9W zF3mlP4S4#i%;gPc`X4;sSrFDx-YQSNR_b_u%MMvFXsmXO^;|%Obn>{T`aAdGH)(Ie zA${RdhmLzvyX6ZFh&Z)k-v=<>X_GXNRGv(L;@yJF=;r#YrnMzM0kUn2mmQ;t)K;PW ze>4(zhye`)*K_`?s`XWqO*0Em*VR`WC(|V=^$jF;^Z{x|*JNxWLf0>#H7}JLj1JgvC{xwg$XD>FjIJ` zPEycpqM6#=xYng{AnGu^wbuKN>5s)FJr=zgU-{^V7^Jb~tr zY);71=sW4H%fSPsCCb_ z62}2?bZ@)zyqz0PWr5MJ?my+9Y$O728S-ltO#b#GNeKIEYzsuto^I;mOvrHXP_*Sbj( zC)#QA>;EjI85K}bK+>70uCf1*pxmYN@PrxEq9V>Uou87SmqWu(s=rN5hRS>Hgep?E zb42P}zxT(7k6`%f`<4FYAl&Z!4o#4_H`^}?6$Yy12N;K5%SfXNGZR#?3IXaYNpT3t zAr+X!Fiq6^cyiYElcRMB>C=2j&%I*Jkde+$&d}>2NGdV{CIC@;_4R?o9NLel5a_QZ zEC9s^z*u^PHYNb3)5`l?V2*A!*y&q_EH^^}NManu~pAlD=i`LExevKid78{8*;2dQ zjOCyKKzIdK1S-)Y1~(hJi)R?A%sx%$cTQwTyC)3_rs6gK#sc)6Pmd)zEbWcXv z#w$?Sh734i19V&%wkQ8`AZ$_Z|8mbD&F*k9oz#2%8#8wF0(!)(Znv<(U&T&n@ zay6B)A(z~nN_7(a&C}mGpYOXj*Qzc6KFyRox9;p<0YIUP6IeO%{>-NLMve&7B_c#K z1WZ}dLxuQz@FpM28k}O2s;IUsVFON>0MGF*Y;nF6asmeXD>L^h-njxic{uM?9_X7XQeJ$X_JjSCve?A$*dM-7Uy z(@&EaTPt3aw<%H$_0qliXVrcP-(_ruU|R*6Go2$!R+Ru3!$qWZ6iFZ@j_OOuH7aE3 zH4qszPx*xku`7m)c>kYd`FBSI9oPxBDj&?((RZT2Dxi`EMgM<(^FI#wzwE$KBH>Ht zJYJjq2L$$QPaSi6jhrxH-?~u8HMf~e$KP5&!=|eS61+OFtC}VftSt(D_Ovml{F3M5 z`JZRc`DE<{HV^w}Psf-5SBS1%#uw|&yQd(y==noBO`}EE?%~LOd&|)6$wcv%P(U);LJqNT8y*KXz`ExW2S>Q4KBq&hQVm3hON&N8gTUu zXvV5)M;9=*_vZP@!y+)8OukLWO^Dz?p?s>)MN>C`3?jcMT|OiU-bpuj_=N=);%u9$ zk*V!1Qhjp8~>z_umip){ALbNsU$X_%tI>e#0xl{*7vMeNi9xc?-{ zh2L-hWgYv++4{qGllq`h)79eq!nvawA>7Oajxu~AioNOt7W>i&(l6rtPO$Iym@eJ(pWX1Ub=>vdpMFU$B8`_W@S3dgeotQegu6mQ0_d>y^=XL_ z>=4?gc2|*t_(({$Q&;t79LGZ%s1xfW1sa}-`IyLvW{VzSCbWWkane4qdr%SAPpSiK zTh)%C@b%Z(j)Y5bs ztniD`W4&+C3e_=#q%nt9fNS5UtHi=T)YRm%B4PaT<|7^srhV0weyCxE#D64?tw z2WMB3U>O4n$|DWbrb>X|k8P`?X25$5=WwNtOnpILH>BVl4loL>)wjg=+PX{LSgxXv z%OYiN{tAGR>sznjWV{4EFe!j)v@f&Ii{_ND>S-6|Ik+D(H} zvP9%|>l5uTS2E3CGUD{{DO1T&S(3;84;noAxOOf!m65o*V#h;Vy zdv?QTe+NlALe=&?BwatY{aO(lPqn@Bey8$SJQF(6U-YG>OBb3OGltUav#ZiR@#Wur zDl<4o2Z0&OO9L9tU!n2fP4b{H>a2nht!fIJ8Jg<)*_kQzZU^Um-UUVMfC2w+U_gg9 zXTN0CD;0B+xOa|pEk$CrUgfns%&2rxUTH^bC;kDYnmZFvJ~>>DR>rdIxsTzDcL!HM zgSB@c>)`1UIu!o8?n56tOz`G0NS)_iHOXmX2m@@Vz%)x7u#I?6l|He6V z4bBZ7t$3H%jyEP{;1ADj8P+)A^x5o$jW7HF-W7c;(6M(TLWT5yUh(+~_t6($1AvsK zOt#nxLHG;}yycpwt^_2xObKE?$>q}$C{-#OH#U)`EU?KauELbk8Bsw78p+>!cIp$~ zoMWR7Y*-I0;zXpIji!~l|UqZU4#AGsKC!%4jR^Fao(>xoUQGWPqHOe0$jRnT5uS>@E ze`Au%Ebo>*+2$=%U$c0`f;Zg<8k~c3v#tmVq5^q+``rm=TECRDd!D`mI08nk6~k{a zKc(M-<>}>3pT?}8-$0JPv*Mk3m1tSqNY%2tvL`kkOcmypD#r_2cuKP+GP=!BsTP8r zBXz44aK1Ikr*5xv^ve8n8>Lmf(Bdy3WTJ+8G7!Ld)b4_HzPXyxHy5$Hr~UeA{S`_* zhO!>P2t(Mu`a)A$B*Gg2Fp5MSs|eFRE2Z`Hw*`#&XHL_zwf}K%T~)bbHx*mxfY(RC zQNScEY!H?46>F399U_=E#}<;MZgSZ-PjSSwf;=K66e@*6lq*)d*ejT?a<3%xBLg|Z zs+_N%&)PnTV88LpjO-@{+$iQJZ2)gRn5$E z8%JLwF?N)0C0k&aR%d+D@MxoSxZMyksox2N$|U8$=tn$KAI%<4qYP&hcd9z&ncp1+ znR^R@sdBGRMOXLIOK(QU%c@LJ!v#n5T)6)EhVm6Wz%c>X~wkJ7ov4Vkdjb>6|zd54}LZ^C24*$Lep zlWGVVvIqKq8-O6g1S8?xvqEF-${ll#O*@%fe*XRJI(BU=Bk(0&D}gRYT%gDwpy5XN zK3{U6I0LiS;?vXTKdr2V4{$Gf%N*3YMiKW_UkuT&dHhY98}6qh!Aznr3UeBwBbPSk zGG2^np7R@iHObHCOM5m6b|NT0P|G!nGpQ9mfmPNDrZrs7OmbT|CLdS;ZJ5r$mFZD% zZn}SLRk^f~V92EwGw&Qor@|IwbvS?Q?|v)a;Ubz^tG`=t@pPyUiwU`3-qSuro;U~N z_+rWlaF`vDm{8=Y2<$BgJkY21`UHh{6*r24gb5)ine#1H`h;Z5T&*lT^K@8#6^=3A znZP`hPc(55yBNQ&9ix7q#s}P*yc?vbSnNH~XYWFGs)sD>WR zCv7j&y_fmr&s9b^OKs%j2cLuYND$QDqjFFD;11!@&Q2^Q9Q}v7^&4C@B_aMB%f@8` zgVf4K@Hw8*KI2OW3JJU?v{Zplf4auKMwrvV?hL2O5#!=GRy~Rl*R8Uen2lVoG0R)8 zfq6U*OCfm1_dYs!d?&7>fbT^wGN@5npzD}(wstGd3l)Y_+HqrPYJZm8EiIf`P3N*I zy>6KFY9+@$`6ODjz76yy+fngs_>R+V3C{98@>`}rm+v}to(?)4`^vAMD8^Tp!gDSU zOJ*gKqyrGXB;ZYIB(?50j{gk z3mv=c-m|1Dg8kBx&RRMY>&Z%2YCP!N;R{lOO4(*TNUd*GFAk{Omlld|7Ip)kN7T22 z-H}15-=zzWy7FwFOGZFxS4g zXcJCuVgtJS%%MsY)x5!3Sv0);cPXNVlm}>j-orX1JYJ(dSI4qgC&Ke*MT z!8%X>25wtv1h_x{%o~5sgK-UYD}VUh>^H$jg0n(S8-HV?cVI2`9WsLVdwx z@`3o-9-$diC_bXKOy9I;`=Ofc4rxju%fG~1t@Cu=c4tAgdilH8-zO8P`!jiy#XDO{b*V3Irh{mM}>Ts ze0%uzKeMNs&-tbHMotTV$xbZ5C1y^N@&*dT^BqivY5N>w`xa?O7scpVcu8Z&@c?GK zHmP&W48eRBdS4+7zMUNgVJ^sqHDcMp?n9T6Hon5rRX%Pgdac%H9tk6dVY6{PIJH_$NOF9OSm zPn~{}Hk`Lvmom|?cGcZYbq5p9;N0+;Q`3`fCO2X0>4ujX|5BklpyPLjs|Ya?Pb)oA z&sMo`^r*b*CDS?r{fWg9`S3L>SOykW)?+nE=#`p%)(TheLuF!vQ|2eU< z%F=Z`omg%)-Xone`Q{HH(F$O{v4bv-4}Fu(g;&Zxycd12L-iJ=*i4Gaa#9u4^7Ld2+hO^|Va1r*0Rg~qca~QRB{%v}&m4N>{A)!zIlr<^ z4kVXvg~6EaF2nu!SuY(GIo)Z#Z(A9N)#L%+(c7RxvLYw{s2I|5{L^rq`8>ShWC%-A zI_xHssBP}(zyOK>fm%)(Vhi|^2xl)m4qGG5VK*R*7B;prlgy8XBMhFLJVRX~Wvkoz zsoZ0xRJCuG24+6~>`CPFJ)X{G*yY+W=Qa&6F6ZuWaPSE zn*-uelf?(lD<$74G5Wp}57vjPW%4SP8#<9~Rk*DNV|k*(29}n(HXS*byWU$GIpL~U zl4@tDZ4!lq7J@7VgA646>mMfQ-3G3{?|e61oFKxNbbXCG85+DXQ;r)+YoZnLG1-2sg7 zqqL)>X%Sc13UAv4|6C&XXpH7J?Nf5`YdGKKRFbJF)|KlhP7Ud2_xp;KJxl?W-AS4AXvN^oQ56|2+`EJ!d zwD~>ml)7Md_wER&7K{n(!9HaIKZsuCK6KRq0}99-r?4j9i}KhGw7D7UBL;_U;qYhg z=B}=TXHC^*0GT7)?#lE*hm6cK4nfO!5rXY@Em3y}0swK158h^oQot$%32*yk5YomX zcDicR_+J(5U$XEo|1(|rg^Dg0ac~5~?f<5R{x{RpJP7vleIj7{)IxefJ=gW@*=l^d z%74=3FF3UC5Kp6`d1<@jv`7| z+xqEmTM}5E;R53-*V)|;%O5%HHo&#q5>!lvIH|>pB2M~Ai!*Qh4)AGRZKdt}3$C^b zvao9CskD&^@I9`bU$1uN`?oXcM_+S}7tr4svA4$Hi5$HnA{tLW+~U#2UEy$A2J(0X z{GwGmM1o0(#k($klQnA+?k3trFe2kcjzd}KGxRs}LN3YAOYshL1`yl4B4#qd8+OAx zMs5IYKmhORxMT)T!)llDmgqnX8Un0+MI{x2NRUqTR&Ysl?4dLW2$t$zj?0eA_Sq~D zfvdF@*WBg2qjlx2yin{Sv;qhR9Qx^NAUCRS2s*l~Oz+KQcxyK!GtRwCx!+NuW#q4U zT`+I*He71mG)H`$2V+Jrr-j*<62Itck;9eX7Z9yfBv#*lO~y zRw9=G_7lQ$B43yE&cd5Y=_FB}%!`Jn0e;te#GkomA;-;t z_s4Q0&5WP-rJwS7XX}?FX(#ZG1h4nUrlKs=dqH111|g8;ToZM|g?ylas~VQ)Az3BG zGf9zup5A%(TVF@0AA+PH!g)IHFZ1Nga5jdUv%WfLQfqIx$MfIj2M~bB-RiYlwwMx& zb;QJfI`whN#e2|+lcXT#lt;R{e5g59Ugh9C9hQPpvP`Gn zb@b*x(WE?{X$c}k^m6QrbE?pv$}I6#l1Deo67l0J)>F0yUV}K}Nhi8(g|jeeh8>4% zDB|^^7`wD|AIB7(!0oqx6ls4aEHBv%&%R7)*kAN#%Vc=Eug@|$p#u`ws|UKRSO%UJ zccnw^&pYm~vcpDrcoo^?=SLY#gGmCL3hw^Ir1CqMKE~}iEZ^AjU8mE1CU$>RH*~sm+UMhR`K2+nb#1)a`ZDIDrMc4H-HN zLV;Ii*M7j+7a&GvK`FuHzyJZBto3pZQpq)ehk@hxm~_mp_fY+gh&$=S`&W&#liT>< zRMtgR^LkrktOB8|nD+N11ff=3E7bVV;b=8!i=#oB)aKjL@ZSAP6eD6#8OiBceK~zX zi>h1LxC2?O^WfV2etL-|Hr$o1kc_W-Cr$KdW4FEB{h#v@Yk_-Av|Dd#{c36H+Q31V z{2MpBw?G17NEnLoz;w30riJAcPyLga%`{>5Z1YtSQ#5?0!T5xH;GHjKm!01ZOYU^} zpDc{xk_hcqlT&7=NW6)DwWQ=2~7<{-y>kCtC!v0qv$QV%>&k!H)DDGXKeta58Car;yjr1V#J z*ReA|VA8lDJjY-6&9JwQAxde4FH_J__Y3yHq17*-+>D`bP+2dq#Ie=XBY^jV{LDv)zPU65^@glbG5lf&+)1>S!B3mo%AkA_6JrH^ zeGP&yDgX5$D&+hkE4Dh$kj8Wyfp%YY5pS*#I4&Ll9;Oq{6XX$Zovfb`6wo62bch&M zh&#vJ|JIrtvkNJ#N&`82HZE3QWsvhOlS6o&xL3Phqq^MaM?zdjJ7l;0sR(%q*%V6k z+ixSd@8`a;NJ(<3OG^jbD74a^h6t??Gg@Ut^P-k`AyjUOUR*tUp7{x9b;v_ zb_$l?NX_$!Q*tojTpRJp@N!B^AkEb6(wgk~r6c#viP!}3y@{u@>&%kE@y@*A zdo$nsdv06tf z=Lnt=v8al}*&90wLVT~#?(d)S23fNMNquF~FqE!R_B;H08aOpm+_^gkx}y#ZVmwh{ zC)@2)fzJ0N3(k*v;mn?eJFoy8A4?pgv6)!wUU9V47607eH#7yi>_-6d9)fl9jZ)Oq zC3}k+v?UwjmeQE*VuX!KCO=dFXj2SiP`!mbHdGCuWD^7*M z!`D9A)T;VPi1T;92d?Ezq6T4KkwQN7%6tMeVd7ARvy%3KF&QjuEo$;9%}to>O_!U) zv0dLv#H#d>R6%uXCUi)6Z-_wPuiEe5-~;@}pNo5clsWygQ}2$+Rv-rU_>cGWV-_*; zn)wWt^)GpNVC!M!AC@o+NX>pDk6}PO)+sk9LxWeM5aCL-50SH08-OK^A#HTJNk|Du z`BCLW9xLF;?p;>LTA>yI8UJ7eQx?1@{2F~NrOwmXd~|m~yKW8u4p;YI^LaUESNz;X zfkd6_*M>yw$jt-o+~0 z^nx^F;?qk6E!PSxdHK6k!1CqW7F0f>Zr1X-rn|_3^JT+_H(Ae#X}c5Rx0YzJuE5Tq z{Q{)|P5bupf*r0Bzb4{+F;hnLZMGUHcP_@gC z0HB|hE8G0`UJff>RjQ65V;jPjEjJqhwb}6~I<!`Bh6tyL{c^2qi7{u&c|LOJtY@@#Y`l8pQB8>F(M$ zwP=|wv<`SR1axW7QBk2zrg;;K4C0sh%5$OJHM9yme)TKN`*m*k*>>RPU!#r~nNR@& z1Q4O;l+92KNV}<6t&{41kD0393EDf~c5h-Nqr zajUgH2$9wNhi!Tt$7E@Wm0za&g(c}nP40*`qy}Td9^lzF1wOEIln2zsllY_uWK>Ne z^w=*ZQ(NSbm-%Y4P9xSBIoTTVlPUfmJE8B{#1^K(xcu^>wltfnLeD}<<=PW8M{X5`XkxW5RNGmlpXVv>?Y9V; z>41Sp<#TceclLr+PZn$|9D7KrQlZE}WXS(h3G=_{j{o9FfFh-rd9I06=Qg}a%jIng zjS~wF2GV!h$vIw+jh3;Z7aCr1%scW%)*MH`FX}fLwQ~R2+f6e3+TOk3K3lwQIjH@z}=4g%`ekN-c&qA6Er+U24;!` z9d4SJhnm*%o0dtjZ`6BBO9!@v)23*bYh@dwxy;Ll+gbG-HAgeFrF~LmjYcvNO)NhElIY=`AcNI*-@%F&A}aDqEfCc)W7xgB+CS%WBJ1$)66bWOETRQT@vQs$Kd0 zAa(-|t*LkSHoD0~vKRns+x{*0a8Q7>gU82z7J8ebFF3wJYpzj>qU%#|lT7f6B!?b2 zrZ^z&a`vu#deW_RH}d--I#SU2zB4OO$+>YgDoZv|)isQyuTV8dBvs*N_fdY8MrCKS zGES^^@<4nk)h-!)feE12yn6|Ql++N{Twwr~0zVYUo*iIogbUH6dVl0X?Q1bPlVmWL zZGP;)E{b*oXVhrq$PyI~oR7$!Yp8f9%4GJ)6IthggxnCygeY0%W2*~p^6lZD8d)|Z zPV5kIRG3|ljJ<5mk0IAxz60uigCN4I61U7*owrN>mC6~kYPLIau~Qqo=0ex*h<)XL zgU}Tuj0nB&jIBwsy|$TN4G~QC1~E`8<##srvdA&u4YE;>sS6{fICtOGq%&Ge=kV&z zsS@64nD|cB(R3#l-2Qmnh~{1`&3ivi>sL=i0;3}Wjo+aIFx$!N8Ik~XoRUhnz}DVY z#lh*!hY!7``ZC2ViPe)uTMyAe^Rd=MFzBRP51IVdux!mJO-H(Ec{Ed3G?&U{68IuE zESY0!vvarlOxHWURO(dHXR#Q^b<1iM!|3|}6E!jn?k35zPCc;&$lTn^qWWv^AD>B^ z7Q1uzNNk18^rVX9?KqwD;I$SmI}@@QMSm-YLZ4&@RcT%BL_K!FOPAyyyc2^JJ2v9# z@jr6oHs6Vyk#E9}Y?iVm!I!6Y_(hq#m8~MGxoz}L2EU( zq%)2mV!8yT794$NhDC;7OY~1gH={(v7T%np+xw@W)~S|Mkq{PZfqaCN z@XD{M*TvdOd1~-L0Yx#Mrdy0!#S(hZkq(rS4%tL;Kf}E(2@%q8KsUqF}5MRtkayLX^9jIdzAQs$X0iBkl zHs@e8EE&cef*z4S=(#R$?#23St`-^%O}q&w{&!@wvKv|>LnwO1-+&1 zh1=z=P{l6U#?C^fCbJ6T=Nx}?bU>-f2P+3}Nyv(YPc2vjX;l5HVWO1B@7*9iKeNVu z?*6>RgL1Kzl;L$SZWXp|B_fSa0U>|WV(-VU`m)}K7Wg|)vPuM@+Z4O;!T^Z2tIImQ zOhkckuB|V3lx&Y14`yZ`UuT%9zq0YJ6tJ+(vS12F{D)|8FmIzS@^4`8$O359BNMsK z?#2}3qN$!I5Kvk>#SlJP?C~6vK~RY8jB6~vt3EKI9PRMd*b5kDT#)b}7eT9!94&wZ1tw>&CPmt)haS**F=N}RwH>LP5 z=_TEnhgoGkJbDH`=Fi8s@@i|d=9sD0tk--;7?7I2AY@RJLEi4*jk`A1Avc_4Q~xdk zoD{t0Qd^*(mwhl^6em++4&axguBlPUO%snl=M^ZOn;PAUE0-wvI$19|o{krefG^8D zjGyfG^fNlDLh7IxRO7;Lt!eTK#M+ZoC4MA4(h=#4DdiGMEB!N#ij`jpVM0dw_4p?5 zdmD89IOsSh4rIw}kV=p@yVRDlPJxy2^j6~eNL9a;7bt9{* zjnEQ$1j1i<6IJ)s1GigS&jNZ~vAwupUl%yS>G`s`;z0@`FBRCZT%oTl;25~+iwal% z`mWq4JGCC%vi13szNcP2ilu3AxHR8p9?`Bs?(e+5d|cMW4<@?%e4_j`!;%paI92rZ zC?yMT^nBdD9Z0*bFMtVa`evoGyOcQpIF?txExAwT5t(z`fK2wWW1ZXT=b9XRFNzz< z8FmJMYl4^*@42A+uBya0T5H7Mp$00cT1duEj8huuapZeZ*}&GdqI)$DniQA#VXXj0 zWcovJr8bVC(cGr?vi-t)%H^9j3NTl|DJ2@a2*I4Ukv|_$IpmedHWUjPw1*)|bd!dH zqrcnj_W#Dn|{6FC(E??KCMKr->rCUcV)94vqcz zVIpjC=o;vW#uTWikcUPi{gc-_gxoalB{yb3pmxYM=1`MRaiB8U>pyz(q@Z6FAHX#| zx;905rPyP1QY~69CjyM=p$~oa*$PTEuisxQaxo&{%oEjR=R*F8^eVMxX)u-$N6KNE zRgC!XDx5Tn1EL?T4Y2=>iW}wi4p1_WaE`utbvdpxC)h(G?ah5@oVJPWhVRpd8hPcf z;uQizJ9qz&Yn+Sr%*ayVw6w8Q``AQTc4OFw|szq4#?^F~$Sh>f5 ztpfJ|87foT>fa?UzeAYReT}SP%PGiG@xm{tBDyKVX+3PEI33IYEmpm+ZlCBy5gJVi z9E&*hdDJ%|bn-kzR~2~e3Ez3{g4-E8oD?tL#CaVSBTPnTF(D>VNp_Vpau!wmH$Zlhw_`5aX`toB7i#0+$e;Y#3N!YiVAIg z?WF9Jk?}HvUzkjJGuEzgWurU3Abz2Ey(U>|!!FaTa0p3p=^bny{I#{wMKyA!YZoX}+hPRL+&?djcS% zdx2c$^5({e=c^Dq4n+4L#yPg_c~24Tzs?caD{=HG*SPIQ9<~|SNb8cVhijW!^7#Cr zp!8SFwuP?Y_^J1T*}NRgl+^S2A43elSNMr|?S%NYW~AJLr7SN0OB%Z8I;4U8zQrx; z=Y~%J(2A8bn3DkT?_mQ#mlvJwHm_CN+khgz8`~2Hq1OXzd^I}1#aRqD#VT%0EAdSPcWeE&PlCU zP0{r|(#1}U(Df29679SY5`6c(jSRtzgU_a4lP0i{TrK%19VlRrOTn92-); zz2p`rCyyB=Nmk}Itt&%>M8e#2Cd-h%dTGMvJnYY<`t|0xgL`$_>1#lR@Q;Z}Bi573 zvNNDwX>=#sa85ukQO-6+u)YY?*Jgi-rFRO+9EFh|vCC`NtMbICs2E`}vX*X7gjxX~=*6;v%i@;231}u_k~SzX zAccJB^hMu?I%`d{;nIa+I6+4}Gh6GV1Dtq#?noVR#v5;67XaTxY171mYZG@|T7gYT zB_0{&|Kf?oo#@K??d~mOc3^@Z>0N*UA)gLdp!p_`Fn_2myRNRu~85uV=on zeylbJ=)H%@IlGkL6X6SbvzA0d+cl))vqhoWA{=M`2y%b>m2HK?2;_9v7y8m2%#XkbeOHfs1j2{8*@v%YbWQME3ku zquYJtTCk*d+J{T4Nbn*eBVAiFC=u*~@PPtGYTH$UgGrIjA~2f2C#1gv!3;jT1kG)c z#aBg9Wm<)+h@Wa~DW8Uk)y5z~GOzF&fQbomOqNux;MoT}T>=0YK$z{} zYwTD@zC~lWgX%M5FD1q-bw6N23EcToDf5F z32h#b{`;CRn1uLgn5OgED~Q->bw2PmXPgP-6S-YDl#!Kqg^gI~9V%6u=9)SIZ59kH z&I~faLX>38SU6qdW|mM|%RidVa%;q96|-z5dv*uk!J}>)0@T!rVY{pIA4=BHAY#tq zU@k|61A)N9dKXrIW0;RaIWwY#`=jcNjD31cA}cgkSPx5q|54=cY4t*y$~>n<0!vCE zOb=`grie8GB9$Gc5G4ifp`5B$@QeGu(k4Xr^f}(1iQ~ zB?4|Bo6q-5C&jQb7mr{%8RJIo;|6Lz6`nln(ijxB3q?)+qcU+#aWPraWvfht}OJ$!H-mXP?t2!K^)-*BZ>vEZ)j^kZ;C_nYgEt> zqjFoZ$D#7k^8U}huW%C(_?m)hys9*+l?!E{g_w=7hc>ap&;DR2SY*!##gex~^c}uS zi?S;PSc?0Wq|q%{sj`lQH~P&|khGp{$eVzv=tRIQ>K8av$!1`{c)V)9S=jjQ30-?* zOQLx+@_wj0HISG$prs8YaQRYuFxl(IB~T?Cwox-1!?VueDCcm7I%dn-)m`*dYW16Q zhDH?muNmP|4lre#n#PpsXr1P_tmz!M1u{EvNlPAAvPfV`?KfH(hANki@;BZEN*^Jn zYJ66P10!R80^fynf9};Iq`|&lEC%_abSN4G%iJ_g(=gW)_BfSu3(lMBcf)lNeL70* zB&506%=Ru?tTQa$ZlKLTkVUn_co|ts{?9qD_u7+DP2_GSwX9W>u?NM0BPkB`uX9}$Bq-1`jIc{(P|r(mP18ps)dv zB1jK}UIpnzJW7I~bPx;ylp+uyNbm4=&OPVe_wG9PzWe`sS;@-En#}B(*?YeEzTbSm z-=?Bha8+?j%ME#YplP^ks*+9RI&KR?-1D;44iG+DoY@#ETwF% zve(0q8(8XQ^v@XYkHJbzHXR9Gb*leaH1%~yl`eERTwYn!TmI@ zK;P4}{pV|=Gjcykd(3s}?wvf_2+|bx4U5!(9jVA!=?i$MAC(@XUM*Zhw3<*Z#t%s-=NW z3P9>KDa9*ayry71!>BiMl9!@oVNSdSfY%N}-f8ic_ArUXrN+}bQ@mrO+6E|l3BOY~ z&7a7?9N(`bBSCxdmW=ZPV0cEe=C8`n3o;NS$^z6qo)mOkhm&zXvoBx+|)+mspL1!zK}KOQ6| zFL@gVq?K6onzJnD=MwyN;qCso=C_>-CAIae^4QR@gwrNUx9|PxV2zTxP4uzRFDNRz z1QDFN5>|=HxjK_Ah3J?_nUduPG8>X0i)aN$OZN7#g0SL|h0<$}Y?G|*-e332WRcFw zkLBjWhDIaV_|j3R+_{*6qhrm)XJnu~Jf8G{Cv4Q~i4GtV&8GDYs^=J=FBLzwMLjG6 z2eppToEr2I0pe6MucT@R7Gv!o1!IJ0ro&KpIHH*h-12rTlwvX)z(lttQ5Ag|&F0OK z&Y?5ZK=qBRPZ6K1d(yw$V8(Qx1E>8i#5rAg=$OuSoAx|tirZlwJ(}(&H>5o(xI={P z^>pJx%GW=LT<5B6b%@l6l~uRR5^+(#MF|zg$H8V+IDG?jLG$0}3Dw#jpZrqf4=x9r z=coQyYEhdy8dGN>3B$CSD=!I2F9{6)=?T@pSxW!dZ2pP){m*q8uOMqLcqzVdvju(jB8L*-R=(vH+U##Q-rMu1KP=zR{!sc{1)7NjdU9$FyYmZdd=&px< zvqJ38ZWWMzRxd0voviOD53<@vJ}fo;1YLjA*!;$@|B0;<`qQn;$3(2Jx*TeRB*{BKFfV?PMRc z-$4tP)<*GeFYb`hXg482VsJMZBv&@dR*fymeD})AKm+;aG04-^7zr+ERG3tzztOL* z^!$efWsZiixhjLTviw&?e6hFkhtn+0XsBAplObib_+y0PyxvH3Op*`r$(jR8@`upj z`CAlAyVRHmOgay}9&tcVA)@1RDnfQ8FK>gaGGTDM*Nr@5tcom8s0_B+=~{(ctPdVeLnc zV*7Hb;afKPTUdV|2DNID8tKsW59h6mEO%}Ia5}~m*1To9m>ZSF!LNpm_3s9;khcfM z0X0e=@1>bK8APX6Me|N)R9=jW;%Kr~$2>P?`YN^V$($)2%Pk)fh5_X)YKDIaTpCe` zVxXq>z;g0J`kzSml%C?t0n@`7Fdq&kIVb=PLuCy^GLmY=?;Fab5=3W_NF*kKt9kMO zSuL5=Ws&vP!WDEL*EmoM4v?hjXvu)*`c+q?t_gru0vO<;Xer+8S|ZCyV|`%I@kfsz1hnBgmSVvDhRt<~1Naj<94RFp^syg*@+pWixz$7;Bm(9z&4E*^BC zZDOXB;u%Z}kjKRm*Uc9_`Q$4X%b+grX6$s=ZBiwFivf7z;h2_~D(q&v$YFPh-JV_- z%-Dn^YGk60x$WKJfH=H5<6U&7%{jbt*ua1^2p!1vaDPL?TCFQjBIU=hdf-Sq;$UEN ze-8PdS0Gq29U5)B#u~|sibB$(|4OgnFY0h39(p1K-$~s6wKUprQdjadrXK9qt}DXA zyvK_Jn(<+I35lIq`*Nx?vgD_RM^&S-^;;>e>oxU8wuE1}gon3d?y=?+MBx z2Ya4{&E_KfxMbwNZ*Mtl#KtPexut=mTT~ONFfqzqOf|S^!Sd2tKT6ge)H%)c9V?puyvPvNZRulgc+tQ}-VIJpEBh5-8aZcRRDovjUBei$1= zz|z6Ym1wjnB|6GrnlBY5ZnMATB7P$JTXqnG>+>#f=$d4ISfiVe0$!WismZ~#br3TUk_MiISQL2t!C~4B! zaJ6?pTKH>2GV*cf5Ef8K3}5GCC3L6V)L8Yi_N>N@kUR>GW{NhDmamuIiML*+BhPf! zz7yt!KrPU@W$-TY`!y<8T~H7CFuRF-UD+&rrQ z#z@vPeONuD49pa?RkgnDGEbisYt&N;f-IndL>yj67Gd#5V1Yhd1rMgeX*AhGVq`61 zZC_HDFS%&u+HN!4o%#KH8H~zk(tI|p6fZZleY(_ z0cO0U&w^{g?lR9lN9v?sDq^|Z_ll*7HSJCF<5gV&BVqR8EFJgt=)tAJ)p)tE*oFJ^ zGhKAc>s4%}W}l%9?4&B!JsDbv{48NAO|fVRr@ zTj<@AskUeF23{GHdU0fM$B`jwpr>Tg0Hi0jO1<3f&08R9Yo|5G#_$`!e0?p&i)_g- zgBpxr!u^%Mk>`a7$%@sTg~3Mh#XY8Vi~&@bXAVAoh9y-K-;X` zge-}CxUn_w_uudO)JlAbDdcBsPL8{?J-9>maMRzL-k${m)pAr@3dK8FQ2XlFv6K4f zUe?t~f(xu?lSjNfzUaQ9S3{;|8zSUhMrUic-6}!t!kvOI!$Tbqul7Q)TFrNCLx0u^ zGhBkQyzZg1 zmf^n0yuVhH^)~CfY?pGHRM`p-UUoy#-y8w$$qk&=6XPp`g-gQBS|&yao*MH@jksxKC^I;v&3iQGCyu}iTQ3vxytR$XI z2+ZGM?)85ww~xKDvYbGMl{Z-_uazObhJWJ$fBh{0iyYCWnEt z$mi4iI0b4tO`hH#KVs7HPjLUnE!O+sAsN=zYmH&wa!2Za|Z2o zK9+b^EUu~kXZ>w<%BsQ_Ve*9=F%hTH3zz03jAZ-HfVXKLnYjn+!>q(yYXsQP3zA}R zLdQ&gY@SaXv|-Qi4J!!;WMg!+#Ah2L%{OMe)YjhTmpDu z`j6eKKNt94wMHH{?Ml9rU?>f#Am16tzTpHhVZy8Hr{4HIghE#cJ3*`kThXSpm=Cf$ zfo(65g2C0_LHlZaBc84u=^1WUWlqhENo-GM9H!Jil9u$9`$u2}wykp09Sp02iVBEZ(v!qT*x2K*L$ z6K_2BBrjr(j=bP7-q+j&9qnTTO&}?UK zT1taj^;np>?62Vqz!OQg(ejE@0C`-VuwpvVX8fzo=dS~NqXjKaFy_O2X1*I=Vl?Il zn)cOJ4)D$b;um1q+e5j?(F1w$C4pF3v_j8&>C}kfi+&??yS4Idsw)E^cm1o);*{Rk zpxJp)mSbz6aDZQ=KJ1&1KZBpkQGQIb8PBzp3%klHcFR=yGcUP%K8sI0X%!&JSz(Ro z8l11Baj}9(U5;;pk02Jjnq`Q*M{!nTfAK6OK($|ro&R&`UQ@!22Hm0Y&+B|xYCUZ}FZ^9hE zn?bqB8_nNN)RvV5B*nyUQ0Vzo z)3fMdi;r7w{T?xBWS50arO3$E>W*0x9h$F2RcT-h zQu4MlD9Ft;quj?!edH&#yU!=R3ctF;A>|${?hWME3)2YOTn>~_)dRhSe6^p_H`=UXBC^K$9eI!ph^*P*#z`Q#s@snGEE)sejRoGGJ;ePP)vy&Q}5Zd zgijCzs3tA|YI<8sY4$^^LZo0^+iLKx`}LWU?v*5d*UVIpb4=H})O15)nv|IWb0sRh zjpch_uk7dTA+nzrKv5J_s?cItd?DJ1`1&)uJ*4D`de+x3bc@az3gzjjX;VWm3>Yuw zG5ZZlYxj^0;;PCnA~BA&@ro1-!jiL}kCKfmogv zJxIJ{ZgxpX^<^=zyP%UGY0Nl3hr6{_>G?dhhmqfX=ysmA-g>+O4|;bM@pF8ZTY2DJ zF>QaJX|2r*!IUo8Lvq1ma~*GQWg%u3GH?@3;7>`bYSM>_cOR~8%HQ|5K$Lt1~QE?v?1%BE7j^3Sb@8Yal zOiH_NAb~I{@Ay(bXDr>+*vlBLp2xhB`N{5?|(d0QCZ!Vt# zD2=8dD{tDv@3m|a)eoP-zUmQH>Nbg1D^xApGtG1j@@9?(h-HO0#fYaw8DR5kO+7;k z?XqZXRx&PdR(33Z1!s*MEtmJY)4qx-s|d5E#kk8No?gC$@$(pwSX?={aA+{DO33k- z54M;eT*iGr`B5{0*fo+Lr?e}pQBWC&X12icQo6TVHz>;q9Nay&2@EQSV_BGTwp;<=XQO9&*5;bu6 zbh3sq=hxDvS?D`|idN}i!M?`p(EYq8;Q10@Ke4psXQZuS-7qA;U3+^%X z-|C}QF7}5$wO#8x3*j2$0_9C1Tz^WOf<6%Z98~$D_fN&AcWf`7Rr>$;|EU>hH#mU> X%0_OhIVjvc1->-lx~i4R_a6TjLu_0j diff --git a/dp_wizard/utils/code_generators/analyses/histogram/__init__.py b/dp_wizard/utils/code_generators/analyses/histogram/__init__.py index 573aacb9..1c7db214 100644 --- a/dp_wizard/utils/code_generators/analyses/histogram/__init__.py +++ b/dp_wizard/utils/code_generators/analyses/histogram/__init__.py @@ -48,7 +48,7 @@ def template(BIN_NAME, GROUP_NAMES, stats_context, confidence): # + - ACCURACY_NAME = summary["accuracy"].item() + ACCURACY_NAME = summary["accuracy"].item() # noqa: F841 STATS_NAME = QUERY_NAME.release().collect() STATS_NAME # type: ignore diff --git a/tests/test_docs.py b/tests/test_docs.py index 04a95789..7419a8cf 100644 --- a/tests/test_docs.py +++ b/tests/test_docs.py @@ -57,12 +57,13 @@ def test_doc_examples_up_to_date(): ) expected_code = NotebookGenerator(plan, "Note goes here!").make_py(reformat=True) - if any( - # csv_path is expanded to an absolute path, so ignore it: - line not in expected_code and csv_path not in line + unexpected_lines = [ + line for line in doc_code.splitlines() - ): - # It's fine for the docs to be a subset of the generated code, - # but if a line is missing, the "pytest -vv" diff - # will give us context to fix it. - assert expected_code == doc_code # pragma: no cover + # csv_path is absolute and it will have local information + # that shouldn't be checked in. + if line not in expected_code and csv_path not in line + ] + assert ( + not unexpected_lines + ), f"These lines are missing from {index_md}:\n" + "\n".join(unexpected_lines) From 8b6c1f465ab8f90dffe2e765152a59db3a92892f Mon Sep 17 00:00:00 2001 From: Chuck McCallum Date: Tue, 23 Dec 2025 15:24:01 -0500 Subject: [PATCH 4/8] upgrade dp-wizard-templates --- pyproject.toml | 4 ++-- requirements-dev.txt | 2 +- requirements.in | 2 +- requirements.txt | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 9deebcbd..a99b1c1d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,7 +14,7 @@ classifiers = [ keywords = ["differential privacy"] dynamic = ["version", "description"] dependencies = [ - "dp-wizard-templates>=0.5.0", + "dp-wizard-templates>=0.6.0", "faicons", "fonttools>=4.60.2", "matplotlib", @@ -83,7 +83,7 @@ app = [ "decorator==5.2.1", "defusedxml==0.7.1", "deprecated==1.2.18", - "dp-wizard-templates==0.5.0", + "dp-wizard-templates==0.6.0", "exceptiongroup==1.3.0", "executing==2.2.0", "faicons==0.2.2", diff --git a/requirements-dev.txt b/requirements-dev.txt index b169b0de..c03e0f27 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -76,7 +76,7 @@ distlib==0.3.9 # via virtualenv docutils==0.21.2 # via flit -dp-wizard-templates==0.5.0 +dp-wizard-templates==0.6.0 # via -r .../dp-wizard/requirements.in exceptiongroup==1.3.0 # via diff --git a/requirements.in b/requirements.in index 6719c5d9..1891ac00 100644 --- a/requirements.in +++ b/requirements.in @@ -4,7 +4,7 @@ opendp[mbi]==0.14.1 # Templating and notebook generation: -dp-wizard-templates>=0.5.0 +dp-wizard-templates>=0.6.0 # Shiny: shiny diff --git a/requirements.txt b/requirements.txt index b9135caf..9839549c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -58,7 +58,7 @@ defusedxml==0.7.1 # via nbconvert deprecated==1.2.18 # via opendp -dp-wizard-templates==0.5.0 +dp-wizard-templates==0.6.0 # via -r requirements.in exceptiongroup==1.3.0 # via From 757d1dfbb0ab20ccf942d751b839d6b6064c329e Mon Sep 17 00:00:00 2001 From: Chuck McCallum Date: Mon, 12 Jan 2026 10:01:14 -0500 Subject: [PATCH 5/8] add API link --- .../utils/code_generators/analyses/histogram/__init__.py | 3 ++- dp_wizard/utils/code_generators/analyses/mean/__init__.py | 3 ++- dp_wizard/utils/code_generators/analyses/median/__init__.py | 3 ++- pyproject.toml | 4 ---- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/dp_wizard/utils/code_generators/analyses/histogram/__init__.py b/dp_wizard/utils/code_generators/analyses/histogram/__init__.py index 1c7db214..b32b715e 100644 --- a/dp_wizard/utils/code_generators/analyses/histogram/__init__.py +++ b/dp_wizard/utils/code_generators/analyses/histogram/__init__.py @@ -35,7 +35,8 @@ def template(BIN_NAME, GROUP_NAMES, stats_context, confidence): # - - # We can summarize the statistic to get the accuracy: + # We can summarize the statistic to get the accuracy. + # More on [`summarize()` in the OpenDP docs](https://docs.opendp.org/en/stable/api/python/opendp.extras.polars.html#opendp.extras.polars.LazyFrameQuery.summarize). # + diff --git a/dp_wizard/utils/code_generators/analyses/mean/__init__.py b/dp_wizard/utils/code_generators/analyses/mean/__init__.py index 50d2c6cc..a847d173 100644 --- a/dp_wizard/utils/code_generators/analyses/mean/__init__.py +++ b/dp_wizard/utils/code_generators/analyses/mean/__init__.py @@ -31,7 +31,8 @@ def template(GROUP_NAMES, stats_context, EXPR_NAME, confidence): # - # If we summarize the statistic, we see that a mean is composed - # of a sum and a length, each with their own accuracy: + # of a sum and a length, each with their own accuracy. + # More on [`summarize()` in the OpenDP docs](https://docs.opendp.org/en/stable/api/python/opendp.extras.polars.html#opendp.extras.polars.LazyFrameQuery.summarize). # + diff --git a/dp_wizard/utils/code_generators/analyses/median/__init__.py b/dp_wizard/utils/code_generators/analyses/median/__init__.py index f435a52f..2c9768e7 100644 --- a/dp_wizard/utils/code_generators/analyses/median/__init__.py +++ b/dp_wizard/utils/code_generators/analyses/median/__init__.py @@ -33,7 +33,8 @@ def template(GROUP_NAMES, stats_context, EXPR_NAME, confidence): # - # Because the median is based on selection from candidate values, - # it does not have an accuracy, unlike histogram and mean: + # it does not have an accuracy, unlike histogram and mean. + # More on [`summarize()` in the OpenDP docs](https://docs.opendp.org/en/stable/api/python/opendp.extras.polars.html#opendp.extras.polars.LazyFrameQuery.summarize). # + diff --git a/pyproject.toml b/pyproject.toml index be0af2dd..7914b9ba 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,11 +14,7 @@ classifiers = [ keywords = ["differential privacy"] dynamic = ["version", "description"] dependencies = [ -<<<<<<< HEAD - "dp-wizard-templates>=0.6.0", -======= "dp-wizard-templates>=0.7.0", ->>>>>>> main "faicons", "fonttools>=4.60.2", "matplotlib", From 078b09fb804238ae48fb18daf35006772322e361 Mon Sep 17 00:00:00 2001 From: Chuck McCallum Date: Mon, 12 Jan 2026 10:30:34 -0500 Subject: [PATCH 6/8] pin version in doc link. checkpoint --- .../utils/code_generators/analyses/histogram/__init__.py | 3 ++- dp_wizard/utils/code_generators/analyses/mean/__init__.py | 4 +++- dp_wizard/utils/code_generators/analyses/median/__init__.py | 4 +++- tests/utils/test_code_generators.py | 1 + 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/dp_wizard/utils/code_generators/analyses/histogram/__init__.py b/dp_wizard/utils/code_generators/analyses/histogram/__init__.py index b32b715e..99164cbe 100644 --- a/dp_wizard/utils/code_generators/analyses/histogram/__init__.py +++ b/dp_wizard/utils/code_generators/analyses/histogram/__init__.py @@ -36,7 +36,8 @@ def template(BIN_NAME, GROUP_NAMES, stats_context, confidence): # - # We can summarize the statistic to get the accuracy. - # More on [`summarize()` in the OpenDP docs](https://docs.opendp.org/en/stable/api/python/opendp.extras.polars.html#opendp.extras.polars.LazyFrameQuery.summarize). + # More on [`summarize()` in the OpenDP + # docs](https://docs.opendp.org/en/OPENDP_V_VERSION/api/python/opendp.extras.polars.html#opendp.extras.polars.LazyFrameQuery.summarize). # + diff --git a/dp_wizard/utils/code_generators/analyses/mean/__init__.py b/dp_wizard/utils/code_generators/analyses/mean/__init__.py index a847d173..21d77448 100644 --- a/dp_wizard/utils/code_generators/analyses/mean/__init__.py +++ b/dp_wizard/utils/code_generators/analyses/mean/__init__.py @@ -32,7 +32,8 @@ def template(GROUP_NAMES, stats_context, EXPR_NAME, confidence): # If we summarize the statistic, we see that a mean is composed # of a sum and a length, each with their own accuracy. - # More on [`summarize()` in the OpenDP docs](https://docs.opendp.org/en/stable/api/python/opendp.extras.polars.html#opendp.extras.polars.LazyFrameQuery.summarize). + # More on [`summarize()` in the OpenDP + # docs](https://docs.opendp.org/en/OPENDP_V_VERSION/api/python/opendp.extras.polars.html#opendp.extras.polars.LazyFrameQuery.summarize). # + @@ -65,6 +66,7 @@ def template(GROUP_NAMES, stats_context, EXPR_NAME, confidence): QUERY_NAME=f"{identifier}_query", STATS_NAME=stats_name, EXPR_NAME=f"{identifier}_expr", + OPENDP_V_VERSION=f"v{opendp_version}", ) .finish() ) diff --git a/dp_wizard/utils/code_generators/analyses/median/__init__.py b/dp_wizard/utils/code_generators/analyses/median/__init__.py index 2c9768e7..96fd8e6b 100644 --- a/dp_wizard/utils/code_generators/analyses/median/__init__.py +++ b/dp_wizard/utils/code_generators/analyses/median/__init__.py @@ -34,7 +34,8 @@ def template(GROUP_NAMES, stats_context, EXPR_NAME, confidence): # Because the median is based on selection from candidate values, # it does not have an accuracy, unlike histogram and mean. - # More on [`summarize()` in the OpenDP docs](https://docs.opendp.org/en/stable/api/python/opendp.extras.polars.html#opendp.extras.polars.LazyFrameQuery.summarize). + # More on [`summarize()` in the OpenDP + # docs](https://docs.opendp.org/en/OPENDP_V_VERSION/api/python/opendp.extras.polars.html#opendp.extras.polars.LazyFrameQuery.summarize). # + @@ -67,6 +68,7 @@ def template(GROUP_NAMES, stats_context, EXPR_NAME, confidence): QUERY_NAME=f"{identifier}_query", STATS_NAME=stats_name, EXPR_NAME=f"{identifier}_expr", + OPENDP_V_VERSION=f"v{opendp_version}", ) .finish() ) diff --git a/tests/utils/test_code_generators.py b/tests/utils/test_code_generators.py index 4a8e7a6b..a9f81db8 100644 --- a/tests/utils/test_code_generators.py +++ b/tests/utils/test_code_generators.py @@ -188,6 +188,7 @@ def id_for_plan(plan: AnalysisPlan): expected_urls = [ "https://docs.opendp.org/", "https://github.com/opendp/dp-wizard", + "https://docs.opendp.org/en/v0.14.1/api/python/opendp.extras.polars.html#opendp.extras.polars.LazyFrameQuery.summarize" "https://docs.opendp.org/en/v0.14.1/api/python/opendp.extras.mbi.html#opendp.extras.mbi.ContingencyTable.synthesize", "https://docs.opendp.org/en/v0.14.1/api/python/opendp.extras.mbi.html#opendp.extras.mbi.ContingencyTable.project_melted", ] From c4b7cbc3e3dde4ba81f3ef09d91291cb2849e378 Mon Sep 17 00:00:00 2001 From: Chuck McCallum Date: Fri, 30 Jan 2026 11:09:45 -0500 Subject: [PATCH 7/8] Apply suggestions from code review --- .../code_generators/analyses/histogram/__init__.py | 12 +++++------- .../utils/code_generators/analyses/mean/__init__.py | 12 +++++------- .../code_generators/analyses/median/__init__.py | 12 +++++------- 3 files changed, 15 insertions(+), 21 deletions(-) diff --git a/dp_wizard/utils/code_generators/analyses/histogram/__init__.py b/dp_wizard/utils/code_generators/analyses/histogram/__init__.py index 003a1095..1428c8c0 100644 --- a/dp_wizard/utils/code_generators/analyses/histogram/__init__.py +++ b/dp_wizard/utils/code_generators/analyses/histogram/__init__.py @@ -33,22 +33,20 @@ def template(BIN_NAME, GROUP_NAMES, stats_context, confidence): .WITH_KEYS ) - # - - + # + [markdown] tags=["tutorial"] # We can summarize the statistic to get the accuracy. # More on [`summarize()` in the OpenDP # docs](https://docs.opendp.org/en/OPENDP_V_VERSION/api/python/opendp.extras.polars.html#opendp.extras.polars.LazyFrameQuery.summarize). + # - - # + - + # + tags=["tutorial"] summary = QUERY_NAME.summarize(alpha=1 - confidence) summary - # - + # + [markdown] tags=["tutorial"] # Proceding to the DP release: - - # + + # - ACCURACY_NAME = summary["accuracy"].item() # noqa: F841 STATS_NAME = QUERY_NAME.release().collect() diff --git a/dp_wizard/utils/code_generators/analyses/mean/__init__.py b/dp_wizard/utils/code_generators/analyses/mean/__init__.py index 6c6a2269..12944804 100644 --- a/dp_wizard/utils/code_generators/analyses/mean/__init__.py +++ b/dp_wizard/utils/code_generators/analyses/mean/__init__.py @@ -27,22 +27,20 @@ def template(GROUP_NAMES, stats_context, EXPR_NAME, confidence): else stats_context.query().select(EXPR_NAME) ) - # - - + # + [markdown] tags=["tutorial"] # If we summarize the statistic, we see that a mean is composed # of a sum and a length, each with their own accuracy. # More on [`summarize()` in the OpenDP # docs](https://docs.opendp.org/en/OPENDP_V_VERSION/api/python/opendp.extras.polars.html#opendp.extras.polars.LazyFrameQuery.summarize). + # - - # + - + # + tags=["tutorial"] QUERY_NAME.summarize(alpha=1 - confidence) - # - + # + [markdown] tags=["tutorial"] # Proceding to the DP release: - - # + + # - STATS_NAME = QUERY_NAME.release().collect() STATS_NAME # type: ignore diff --git a/dp_wizard/utils/code_generators/analyses/median/__init__.py b/dp_wizard/utils/code_generators/analyses/median/__init__.py index 7ad43bb0..b4324844 100644 --- a/dp_wizard/utils/code_generators/analyses/median/__init__.py +++ b/dp_wizard/utils/code_generators/analyses/median/__init__.py @@ -29,22 +29,20 @@ def template(GROUP_NAMES, stats_context, EXPR_NAME, confidence): else stats_context.query().select(EXPR_NAME) ) - # - - + # + tags=["tutorial"] # Because the median is based on selection from candidate values, # it does not have an accuracy, unlike histogram and mean. # More on [`summarize()` in the OpenDP # docs](https://docs.opendp.org/en/OPENDP_V_VERSION/api/python/opendp.extras.polars.html#opendp.extras.polars.LazyFrameQuery.summarize). + # - - # + - + # + tags=["tutorial"] QUERY_NAME.summarize(alpha=1 - confidence) - # - + # + tags=["tutorial"] # Proceding to the DP release: - - # + + # - STATS_NAME = QUERY_NAME.release().collect() STATS_NAME # type: ignore From 65f41d30b5a554afa9c5a443e1eecd8b1dc54489 Mon Sep 17 00:00:00 2001 From: Chuck McCallum Date: Fri, 30 Jan 2026 14:32:00 -0500 Subject: [PATCH 8/8] fix typos and tests. Coverage fails. --- dp_wizard/utils/code_generators/analyses/mean/__init__.py | 1 - dp_wizard/utils/code_generators/analyses/median/__init__.py | 1 - dp_wizard/utils/code_generators/script_generator.py | 4 +++- tests/utils/test_code_generators.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dp_wizard/utils/code_generators/analyses/mean/__init__.py b/dp_wizard/utils/code_generators/analyses/mean/__init__.py index 12944804..c912c228 100644 --- a/dp_wizard/utils/code_generators/analyses/mean/__init__.py +++ b/dp_wizard/utils/code_generators/analyses/mean/__init__.py @@ -63,7 +63,6 @@ def template(GROUP_NAMES, stats_context, EXPR_NAME, confidence): QUERY_NAME=f"{identifier}_query", STATS_NAME=stats_name, EXPR_NAME=f"{identifier}_expr", - OPENDP_V_VERSION=f"v{opendp_version}", ) .finish() ) diff --git a/dp_wizard/utils/code_generators/analyses/median/__init__.py b/dp_wizard/utils/code_generators/analyses/median/__init__.py index b4324844..6b303ef9 100644 --- a/dp_wizard/utils/code_generators/analyses/median/__init__.py +++ b/dp_wizard/utils/code_generators/analyses/median/__init__.py @@ -65,7 +65,6 @@ def template(GROUP_NAMES, stats_context, EXPR_NAME, confidence): QUERY_NAME=f"{identifier}_query", STATS_NAME=stats_name, EXPR_NAME=f"{identifier}_expr", - OPENDP_V_VERSION=f"v{opendp_version}", ) .finish() ) diff --git a/dp_wizard/utils/code_generators/script_generator.py b/dp_wizard/utils/code_generators/script_generator.py index 98ca4b17..7bec5326 100644 --- a/dp_wizard/utils/code_generators/script_generator.py +++ b/dp_wizard/utils/code_generators/script_generator.py @@ -10,7 +10,9 @@ def _get_notebook_or_script(self): def _clean_up_py(self, py: str): # The output is passed through black, so we don't need to overdo this regex. - py = re.sub(r"# [+-]", "", py) + # Strip jupytext light annotations. + py = re.sub(r"# \+.*", "", py) + py = re.sub(r"# -$", "", py, flags=re.MULTILINE) return py def _make_columns(self): diff --git a/tests/utils/test_code_generators.py b/tests/utils/test_code_generators.py index 410f8ee5..82d71a2e 100644 --- a/tests/utils/test_code_generators.py +++ b/tests/utils/test_code_generators.py @@ -189,7 +189,7 @@ def id_for_plan(plan: AnalysisPlan): expected_urls = [ "https://docs.opendp.org/", "https://github.com/opendp/dp-wizard", - "https://docs.opendp.org/en/v0.14.1/api/python/opendp.extras.polars.html#opendp.extras.polars.LazyFrameQuery.summarize" + "https://docs.opendp.org/en/v0.14.1/api/python/opendp.extras.polars.html#opendp.extras.polars.LazyFrameQuery.summarize", "https://docs.opendp.org/en/v0.14.1/api/python/opendp.extras.mbi.html#opendp.extras.mbi.ContingencyTable.synthesize", "https://docs.opendp.org/en/v0.14.1/api/python/opendp.extras.mbi.html#opendp.extras.mbi.ContingencyTable.project_melted", ]