From 04fca597a6a062737740ebc112ae0f139d89e3f6 Mon Sep 17 00:00:00 2001 From: Alexander Fischer Date: Sun, 6 Nov 2022 09:27:42 +0100 Subject: [PATCH] first attempt --- dist/wildboottest-0.1.0.tar.gz | Bin 12496 -> 12503 bytes wildboottest/wildboottest.py | 44 +++++++++++++++++++-------------- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/dist/wildboottest-0.1.0.tar.gz b/dist/wildboottest-0.1.0.tar.gz index 481b28f4a5024d1b641ab3cb18d9dea0380149e6..a005e05d725390b52e429610d12fd35b090e0480 100644 GIT binary patch literal 12503 zcmV;|FeuL-iwFpLqGn?P|95F@WMXe`baZ8NbS*G0F)lDJbYXG;?S1`s;yAMC{>(Y~ zAGGA$2TX&5%~!%3W+$CacW1Xd=||E#-OJ0R4H)8WW3#qN!p@ufx4){AY)i&K(jVD- zcg&edgH$S&q>@x6Rh6^@?cnEk=KX8SoLK%JzRRc1Kb!uo*Bi~`JErS(LpT1w?*H%v zpJfo5K2-mQ-{;3TWb@FTTRpwq?zB7gcJoMU9U4vDXchjDfBx-1ceXPbd0rS=L0GG6 zx>i51>|=@Lg{<8hXpn^^O7aU)S5sKd@Fl|G)c3`|q&+8}0S=zmc#1PqO|S z$@<@F*E@$t4XvK9{J-b*|IOLS>G|d9x1Im(c6-zOH}rZ3*MCEA8}PRU^WV@ru>RNc z`TyNNZ_lpS8+&ZIfwfoIE1YZyMg2z6H<|W(I*bwoO3DCf;~Cx7^SSvBIhCSOF`CHx?^iiW0>N)iSY6 zXRlzp3^SuVc4vn--ZEr9@VIY}5lNNV?$}vQkcueVvFEm^0*g~O1bYQQy9}TaNNSbM zy@@@=e=Ta+VmWf`;HJtZHsT&FLr4rTk-D^sEjjRf7FZ4t1}JPGotm4_M?gsZ0y{Mn z-4tNT-HkU_+hPMn)1~i1r4|*Mc+hQB=ijYyh$#p^^&H2$!`6*GcVc6sf-Vl+6=a$t z@7ALB@S%3S5Xj|J;4mzb!4+A-jp;aSWQksbnxT(Pxk)}!08_~gZPQ^3&!;NWP1T5m z*Qf0A;^oyZ$Nf`wcFErLFaCP=;`9Y89$&)mVwL@JcJ=z={S^a<{_*+MM|Sa&9iM+> ze>ppUQDvte-t|u}FWE(ZuW915Oa09T&@Zv)n=3x+ic zTxX}3i0$oZ|Kv6NJbr%m=IrWYb+7R9?CKn`zP#wOWA^U2e|2{9{>^cpy?ft(cX4?N z1iS#e=V#|H`%um4+tc$a4XTAScKTQN!7g7Pzj=do?G=vSLj(FqB0ITw_pyKW>h%?S zeeveSDI`8W1=^0Ezd7Y~LAy@g9G|_dvKPm1k6)cqsS7{@%|kd&Ap7O@DW+kK$ME0D z)!D^4w&djE{HhN>tI*K?Rb2L$v&+*eJMN!dVxPS1U%Z7jVxK~h3&H{g&rdlT>~E$F z3xMG7_m`(JM)ubO(UPu zzgPMH-CthSV3)giD*33fB9b8dB+ z%p7}#7=qXYw*TdPZu+Y(`vt(*i32?eO2Tu12T|BuurqfGdVxDeY19WL!?jGGz4a!R z6QKC`ZUthuyH|Ma&8^zPoI!mzVYmpo2M05d$d@B+?9C5?hUrW}?>JCtIbK3xzsm-t zHT9%aWtjLmfK;f@9^Wh{X6ZUAQ?ur#?O;hWDp{NIlKNp?|2eFAt^>4c6ALk!bB^HW z85Tp55S7rFx(r0jy}}DC82k1DCEnVJ2P%*o)~;3y$PTUh@BljL^TfMz<6^a!puu#R z(6dn_-rrC4HAuED7sh>S0pk4~i0Ag4t2noo<1IjU;vL9t`LINyHsWDpF&KM=Q9K+b z^!j|^Sg1&G0sa!S9kUd$K~(Q`Ib#GSzUNKmrh5=UfvVNVQd6u-)P#ANrQ`8SLsw8| z*em>b>DWXAG7<9571R)De|NUil7_DA6`*}4C?2qkL7F}1iX0T0qh5m?IDnZR26JM- zY+93i`Fn*lqrJkwAr{_(U}Oe2A#n163|Y|_jpvlDyk%(uYUXDP2XgFrplF$>Fj|1Z zLM0LESwb^htd02ey1bK1sUxwSFs@9fzM#D=K`RR^Qg;7{^%Ikw-kZn*M9{ex0uur^ z`M^i0DWU=%+MwrQ5}Pl_H|);yKO@eC@6AAa4tP^Oefsq4f|&0&P)2=FQDx@U+-teFcNIW(BZx$bhlSYevGh|?C(6FAPGqfV$vZ0uXmg$$Rly@I>Ye1P!g zT3}g|vTii!KVXh?)?+&CHG756^lh*3O8ol){!PlcoZD%9TF^;eh}6mSo}NCn_Baz z-ac#~cB66BZlz!w1lvHgx}miVjt*O`qbB@+RBs*W zDcBalwulBG!Duy`M*FDQX*Z5qoCf`{0mTuvO|bNL(9vLu)%8~65QIFC<%|^G4#9Sa zhNiAHIt`=VsCNvYrIm&~Bv|@8&^sF7J*qbko1I3p)k*im5y2i2-Uh-R9kq3%Rd08o znF=f{SNQ=&e*c%t|GV!0Iy$U34I{t*`+e*G{nO(YZ%?)Pe5hustB zztL>zx&HqYpIr0IHP2l0%r(zk^UO8RT=V?>X`Z?Mm+ODY{crO~ujlrkzjOU>u>zqB zjmfmon>*iM|AV>SSldZ|C~oQ+x)Y=Q-NKvqFD$4RS09k|<2cY*E}R zM4BGt5RX98B)Rm&7qKa^NqnTNDD;7mn#^zIWGreHnA3<5Q0{Rpg<~U zIup(p@!3!jQ$gpoL(gCJiVwZHFLH%Y<~l8^ZERZsRL1qYUh$`1Lp!Yg*wAzxN`X!` zGJC*%t+v+SzZWY6(m^_`{-|q)0jXR|>lObK1j!GH5mT3eISdpL6;mI7@4VaT5`ks_4Qla71 z$9G6tQSnNllbW;h%d6uzZ-)KT|MUK=e|njmKQdOLldMuT{>{&@pyOnSktspg&^%(F z5*;7z6^MPxc(~k?hdnMKj+uIbP2zOvkhv$dJI;4J7lc#^DBVLFA%|n`s51;#3#+I0 zQCx_hO7}QdC8+o@YEKMy3VKM^Gd-CTV~C~i^nk76-?j^jkK+uZqr6^v9Ae05&h?ZT zh{MbCD_<&~=jT89`On(__a>ygBro9$fFQTbjOy?CV!jw<~Dp5j- z{H7>_T(8!unqeI8Yt*wqf(6g<9U-n^SFj8p1 zo&5s)pBAhA#HLF~vtXpi-V{B&7<;_;883$&szhISKzSl}h*zEgEBQj@Ls0i~WQb7|^yBJHQ2W8PX>gSYhmp zg~h}PB8Ss7Z?Ul%SQ>jz_eF6gzpNlHWwGweO^gK$^;1+`GMyA}`7JF>9+57xao4xQBxa$PoeoDR_FUYR&!&-b|p zEmaO93Ekt^)`VPo91ViVI~?nvRki#l@&h&}6Z9DOy~%QHqnWTWa{S&U z5QwHYos``Gmhc-~!!g(}@#fSNw_&ntwCvo>Q9=Jkm0DdEK<@a4iedB7HQ9!($X~kH z6)ft4Ii*m`$i-L$qC-suc zVX)*!UZ&5N71Q_4Re695QT@8YC)+*~8v;&x3ZV_qNXZme1%#jxRJV?@?`bd}&7~6# z<3w1=;tffQQ~A7vNzIoWD46U^FdznuZh0~l#Q4M5DHjJsbLQpZNA_RnllqK(Fp5>8 ztcSQNTiV6D6^DHoMmyGkIwHNN4YPm<5JorVRl2^zK^&BH>gR_1w^6$8id#x7g<8sk!+WWos48vj$-mZ7ij}Y|{*5peeRE>XO}s2G zt{0+(w!EGWi<&pjNDuK_M*8j8yUhZ}@yOT><@Vns3^^uT0HO(a6CP#Ns8i^o+J|R|U$W1qlD!`_p=OP9rJH*A}GQ8#i?NA!y3-y7v3|6Z(A6ol*Y3#JS)GG72rwIFElhc^`f0H=>m2OJ8q9FpUT%O2GvnS~m7sB3hAs#5lMu z7jew@dZ-&ik>C1WjA?SKZ`yK1au+PkQXkGRy|^ggxpFMWzJr`qTN9MmMc=(;{R1p z75nlpYH}88xi8j`^Y#$ifcQCwZoaRwRlKKhK^1y_ZkaBQz{0zOh3lTx*s98mO1u}D zL4aEbpld%q3a`^RF#f!|D9h@B)g;Vy@EI2Noa+uE zsz`t@nz&QcMk1LT((zrDky&BEjkk0r^x{XPu3*{n#GXdga$ymVOkfGAi&#A)b7VVq zxT=r{eeSt6RlURZNIFtdjZlx6^^YZJMp$@e-&*bl{m7jB9TrjCw7LE!w4=D^)?|0% zDTQ|yt+oGt@;gUH+tz~EWxMz;!#siPj)00ZOUM&>wp1<6O$=9sHQZUF5hUOdP$@yd zktA{^VMruREJ!RW{r(C6{HWkaM5_m=6#oLX;ybAp4^c1VpV}BBZagri{Tb^iW>b@+7#7* zr_e%Z?hQ(Wv~->7mv}VXiFMxt^lxFmu`%$&y@vM{Lw=+dmIvA8*v2)xy0L(~VsD0e z&}zM<_`{a!?DE%%R`BH7;x+}559`B6H6Pc^agEj3&>KeH4~mvb`sRA3qyvBmii2eb zW5*+PK#OE)DjWX@J*Ni}zfomo^p)SR#nQj!`<_3%GkuJ$5eUg&miogRGh_r6kZd1; zlDr$<_&^`Ky8#K=#3(P&06dwWQe;zHkwLH|(K$Iim(JD2{e>cKu(<^?%B0FHZAQX- zjgtUUD^Y=$5OTG?MR7TC`HQYpkg{dK#qb&}iXKH5r68Xm>@OD!I%Z&_m2#Q&4MzN|aHxz@&SI0INR1G*YdDK2#7$S-^K zD&2iYJw|#5T}TGqC%Y&J9)3wsq-{u*-$gvw2MX=~<1PZ^aojGF%cBm9yiF06VC%f3 z?`0Vgm71Fil9!bt+8hrh*}+;eo<3Hj9fTMEvBxwWgp9fQ8P@0}tZ)d(%uxVaJgnmj z&$1d-mk^2iXm{cmpn`|n}@o5z36?SEzaUm*s3r4Pui_dhy%Cl&v- z)igS}{qMiP{&%OHF3PhneDm(*(k1(}(|Z)U;Y*c~S*ZZ8W*YQ9%#Qe%tQQ*|V&?lW zGgq_;9HLDiiudy2#a_Xk4J8RY#ugcPg3Mn9!3&Ylxs1)l^fXMp+N{^Py8p9KwWjuc z2vVM8UmK|o!j6{zKs#E4e|-htMCzAV%09$8R@ldi#~yT^w8K7@u~p`i5Aj*@^ABp)s+y@-RY{dnlu*}mt)ap*@%UsY%p0db zMY;i!Cqwxh@K+h8gPh4rf8ozG;cwR`JRN70uPUQ(5MxXd^|gosY+C$n7TV3 z181P7^>DiWiW-)3q_9TFK)>Eub#&L9Xr(xFB9vlo>=U7p{iY`UTQdaeF3di}Qhx6QY2oA2H>-n?zTcYCysua4#5?ppM<(D79j z|8YvbTBai>`JJtW>q=RoY{~s6srO~N( z^7t?L`CmT%PkH{A$A8V&|MdF*EyBR;j{lO5|JttWx&Qx@eDd47-}fiq|MUGnzyHhk z|4sY<$a2RwXb|}omw>zCzc)MW)cs$(sWf1a%zTpOH?e;0Tc~XL+Ap3+v>@R#6kGe5-;KHADl72V(PFD!) zwv~6IFTFGnCFA3N@jE{Bhu@S(-zYVPiI4x`H#b_3v!e6=2r@eL7r%F(^$VBbi`Dzg+&?B>#O23$PvXU%Od1()M4SW+RvXp5j9$S+Mb-jq5H$?t*Wq1GbCZ)P--L?^}n0T)2Wy!kI{1Hea$4kiL-=cK#zl2o$H%cSdOi06j z_X@&HN|-Rpwp<~=&`L1?O`{qwAJO98kN4uVh0@nqFMvA)Cr%y3xur zNG4qsbD}^C#bOcZkOCJ9iXwxqV}B-Fa)qo6VE=C{=&N*T0+7<-O_kV?6B~{4MoXkw zW2ZKGF)ALcOmbo6eFu|@_gGTl*_3?>KT-5XHjWq7IZnNi1!+^U8e;Y6hj?rHHi!A- ze&SIk1yh>r)*6RU1wc|zRREA8R;0R_q1xv_`$TvZ#g}J2U?xUinJ*k~#a%4Oxnu}Y=?kJi>n~cV-PmPv`PFi-MFDP{9Jz|-FB>eXitj_{VWHliRKSbxus>HR3glv zc_+O%U!w^cQ=1SHtRqW|UCYyANIZmP$*31wl}vnOoEbFwSL_RD$8QndedLw3X-NYf zFFEnrWN(@~9Mf~y?ZzvHAv* z%7GO!%k&*v1Sux|Szr9+rMSoH7=jj^x5=^G=HcjoaH!-@5~zq%o1Wh|=s}eM-%>=o zu{R&tu4o#xnM-%YOKFw{^bVXN1|HBg8m}0v90>DJ&Dc z6p58Ml1GYf_IU!A!Dt7g7D}YC8VYLT8=TKDo4vU@b~36t4gvGV~j^Ft#_(z2zeYiy){X<=c9d(Lr<^1Uuqvv7g>bWasz4`T1Xd z{+GZ1lAr%&p8u&)+P}m3U!!Bh_P^2lFP(aR|NEr(zq{Ql>71|66@z?j+hwT$tta&20tQLqZ@ZxE zsYF#ml@5he5p|V9A1%jYJdV4yPVd@KRljSSp z3dix~zGdl);y6X}4@+MR$0>#g2;YouR@E~PyGmZz73Fw>>*sNJD^SmWwSPkn z!jlI&fWtCHDY&DG6bLEHVfw0x!(c_O2?toC87P8rMOi7mFM&(D2c~QO_?Vh0n$!bo zCb(TS$K5VhzgA@uHB`WBOV|DfPT4F#dB9V2s+B8hNFqWiw~3IA)-(_3xTGS` zFa>`3Nv4f-CE)V0z(Xn9HB`7z(0O=8Jt&pm>%u=0e^Z5NwZF$4%PptLuP9|+F&QiY zQ4!M=;EH+uTFLq>W$9`bZAnTB?Nu2I44*%V=Ksf@fRF23JDhva?q9r8PNseDF5ZH9 zU_^dK1WWeBv-r7XaqS6>4-^+L4u?&V64sN#53>)m%;Z&O@(0-njd%X%s_4=rPHgyL zCBupAwYN@8#~CWtaa)*EUY2Lr8)^RNuCpgS|F(d>Wgloa{fNR2VXv&Q^oJqd$MF%x z`<**H`z^0eh#s3&q^O=BlVTqqQH;7heWnK_RM^i*i2}IV1o%+~8jY zRPquAi1I0=k|H4uu~H$BE%5I%j!({7QPzrQt!C-*v;N!cEvd#NN%Px)8IGs&Ifg^>dSyIcjrr|+^@Lm6xMz2~ccG75TO>Viut`abDRHC%=j>Rfs`Sf{aJ%l)_p}x!fUa z1HEfpQ!q!pv?iDMx3Rhg-}PcDKM2N2q#TaDOjWCOua$_u{=mv&W3S;mk_Xby)E+~) zmF7LX4k2Jf*k4g)i9EKYOB%bnq>c?O#s%MZlG=belk$h2;HaB*|lED7qxKY;Tx*k=phig5YXKbE$S_q*bKT&$O8;-bUn5&K^ZPX$UrTG-3b zT`9WyeeqgWEv0Qa7AmAP9e27xw;BnTJyyS#v)2VL+(`8q{I@Asg($h>A{?qT z#qkg9`)d-vq@QU#tB0eJWS0z7+bNP{q6pnKvS=Xrzt5EBB5(?pOEmgQK(4X@r9%>& zW`HiVor#s=p|2cn1+~-?CP`1k1l7^RN31q;g2_4f?D4~lAW=IpOaF4uytQKm9Fg*lEnd8v^53cLsFd;w3hkI z?%6ArrH%5t6~voX5%$r*cD!`>L)`M~ir68e;$^sSve!H#> z@oS$fVxxJN$mNl)k^*Gx^}2ZUN(e`+yCQo+_iMmFcpec7Tt=9 zkUi_M+W{6GUBf1v@LC%9Z!^wRJ$53#{Xhk0Sg;0|Hf@;VjWloKb+Pl+4C?T~h&Y?{ ze{_>r&XXs4|2C@{mC9z^!h}yaAZNi4*GB`ZGKyHth+EQ=IXa<=R-LMPa)oS^wU1@5 zaE)T-zC*AuH-|7qhtaY0SBtFcSiekk&0u?_FI9bX(@a^PCldJf-FOx~c(`FF_^dL< z?J!y&Z((U0U2mGTkKF)Lj|j@N5&w7Nbvd=R@;Nf3*^)(!08bi;oUh=oGGVh?uc*tE z1A^yhh{j6mXD|uYtV(%VjHdjcj{Odu7ga7dzn0mr>9r!FJn8oGrka@0CzN>*Z;J^T zHKj8vKm1^9##m9GeGIHpur}}H1uZ$%6l0sTKpNQ8i3%M_>6JBxkwq+SN0TLD#cza4 zLfb*?dzMhBUXsM6_?Lm+6>}PPv}<%o@Vy0_+CIoDmJ`{eb6fKfJ@PhPI`LVa#=NO` zb6Jo}Mn3D*?i2^r4wzeJm~{b~=GZUcQeud-pst<-%_Lp^qarTXEi4SGeNP%!H^VX`N?-}|ak)kUdKTvc2 zZjL`cXx;ddQHX2EoZpN+X8W409lh)v+w{;%<5pQyWbp9(#th6b^u@(bF&gjUTAQ{X zm8*kJ1u)`wqHaYv(xAv1jR)BTeDP>-LdXVfZFFifh~y$dRLM-PV5+K!w=zA)mDcu@ zm5|H@<+Vk=X%xF^y!1&|OtA_@RsGDe&bkC`_$Y%(uZgIKK6qCo-Dz?#T0{wc zFN_;G2W<>{lU_C@KowHGALhu#)i*|>$D@alkk>es74{>OlE^$mcC=G#k{?=4>RLEb z6>?YnDDN)uKre1Kfd7;UuC@ey$3Y=2FC6Huo6VH|w5uz2(V20-y%k5A_}KAWHq7PE zaVOS{pjeR940?WGm5JFgSQ8{#kMqqj^G=5=L^htb9N0^00JpNWajk9VH81QH0 z#I1=JYJ~Um)lTncJQDGj!rNbF3(?ps$yt5P<$br8I``&BFLfR-p`@`*uPv)#1V$?+ zq9uqXNo-kmyqOK+1dta;pulzl!``eG`1)@EGA}<5^P+=q<it0A=UL)?O6S1Iw>Hur_M0#2c3-Fq`;IvDm~g?{bM66VR=hE0JM zS~T4LQ}haSQi7w2mUsYlR#lqn6ARD8P?wDsX>?S;^LUs#CCKt-mTP&-pcK6tEs$ak z#~OJrp)#H%n7hizUB$WN zs3hD}q9epG5?cq?vMUO<3Wa|zrIu+tBPk*E%o^Hwa|$Z)gKPY^W<%HAi^9?qZ2Rob z6iW!#4LbP)_UzSF&u{2uJ51sbz@j&`!tu?ftux^36Xq^_s|E`s`b)tWVHdI7S1*SgPJ2030G>GmR2Ud=mGD|+eh{r-d3y+?R@TQ ziZ&8L8pFZ7<| z3`E=@2wYWBCaDH>3tIEk03yiU_oz+t36W?+DjqbdQYYMfMG{>hJDK97$4EXM1fj%l z*@>J_NRBKv73AIza$FMv`$X#&@RtwbG%Q)E2q)qtbSaz^l`3^P@AQwgwbbZbJA`L0IyZ;n?5i zznna0@NcwS@EpE#PHk9p@Hl>M`m1tf69$;-eQ$)D*%myotZ^&-QpzWkmgZ75y#XNn z=er3_s*(W5plWIJ^Gr4DIYQDSkz2v!l^jbbI^fol(yoC8`4Pj`66!8QwUH9EwGhra z1jWVlH+3ZP2n>1rmwKbI9{)wpdGXETf7P3fmc0J!^!^iU z7kT`zC-}UzLK8Le+FyB;;x02ZeXnp1ntC^N0Te?Jo9q=Xxf<7{BT{xEjvb!I_i1PD z)bcHNY|$yf8@ljiZ~5h}?Xq`dO1@Wk4T^tlVa}kwn=o7i-GhUf9o{TQ+Sr>P1P#-f z+QIlhrR8`Dh5arYl#U(i-gIH_VlM$qTzf*|=KxZnK6`w#oR}Ehh?l8>W^6lH(u_*h zro5znSl53JYo3dj)7r#BOy-;;_<4rKkR(L)#vWTPnhU%=yV@(fu!6B~(@9(H#B)Q- z4Qm*7sLMj@K0LtJ((+9-1v5nl#^I%-80PZjAb;J84~I!H*SIks8rr+;GK7II1#A%2dtJ^Lfr;;V zley_0L{OC~>tm^ORIJR>@%W{oD|lJDSNQYNv55v`BIF$m*%D}fcec}#hOX=t`2C9q z%b4_36cn0cfCc2hfpm75O>2@bf3Hx8hP}c-ju)1RU}Oe2A#n163|Yb3SQyVKTY1aU zggN$Sx&j${-hvKttIXop$$ax1iOXOj=-dl|34xn@;3Ine0}6x~lpK@Td^x^hcb@;5VxRjS8DsFKeERh1R~`-h zx6BBCJFk+rpXEL{Bq6@hHRb{Ma0%NhY(D2r&UmBq-RS1{@dvw^H^z^i z>g~e@VmBH`?N$o5L9h)(s~cL|Fb?a7I*3iJR!eWEV4DQnBpUQ1?dY)8I%>lINA=c` zo`P)=Y>Q|B5{y=}X|#`;op$4>#c9wF8&Di!+XPF02OSNj7-;N`LlE*nmNQa#I|SPy z8k)M+=roLaquw!qmR1_}kYMTWK<{XP_o&`HY<3#WRwvyLM+AFBcpC_Nbkx?3R=wSU zW-73-T;=D?x&EKa|GEC3f4*4%zr1+gKRLbB!u#+W>;JfIr1bxe(az(4KgmZZp@shG z@r$>o+I&)2tU%gFduuK9=1w87!sS9+tP02u!9f((I7z|3WCL$HGcT2#ydJ5@W(tdI(|F1V% zY5l*`$@l*!`Oqy}f#0hYD9T$Qe$6Xi2J-zs-~aRdKmX+W|JR&Y?%e;4MoRy$>qaZz h|DWPRhxN)Kbw2s?PyWe2`RDiW`Tuys!?FNC0RWiD=7<0Q literal 12496 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 diff --git a/wildboottest/wildboottest.py b/wildboottest/wildboottest.py index bf76b7b..3b5038f 100644 --- a/wildboottest/wildboottest.py +++ b/wildboottest/wildboottest.py @@ -262,37 +262,45 @@ def compute_denom(Cg, H, bootclustid, B, G, v, ssc): elif self.crv_type == "crv3": - self.inv_tXX_tXgXg = [] + self.inv_tXX_tXgXg = np.zeros((self.N_G_bootcluster, self.k, self.k)) for ix, g in enumerate(self.bootclustid): - self.inv_tXX_tXgXg.append(np.linalg.pinv(self.tXX - self.tXgXg_list[ix])) - - self.denom = np.zeros(self.B + 1) - - for b in range(0, self.B + 1): + self.inv_tXX_tXgXg[ix,:,:] = (np.linalg.pinv(self.tXX - self.tXgXg_list[ix])) + + @jit + def compute_denom3(B, G, k, v, scores_mat, tXXinv, bootclustid, inv_tXX_tXgXg, ssc): + + denom = np.zeros((B + 1, k)) + for b in range(0, B + 1): - scores_g_boot = np.zeros((self.G, self.k)) - v_ = self.v[:,b] + scores_g_boot = np.zeros((G, k)) + v_ = v[:,b] - for ixg, g in enumerate(self.bootclustid): + for ixg, g in enumerate(bootclustid): - scores_g_boot[ixg,:] = self.scores_mat[:,ixg] * v_[ixg] + scores_g_boot[ixg,:] = scores_mat[:,ixg] * v_[ixg] - scores_boot = np.sum(scores_g_boot, axis = 0) - delta_b_star = self.tXXinv @ scores_boot + scores_boot = np.sum(scores_g_boot, axis = 0) + delta_b_star = tXXinv @ scores_boot - delta_diff = np.zeros((self.G, self.k)) + delta_diff = np.zeros((G, k)) - for ixg, g in enumerate(self.bootclustid): + for ixg, g in enumerate(bootclustid): - score_diff = scores_boot - scores_g_boot[ixg,:] - delta_diff[ixg,:] = ( + score_diff = scores_boot - scores_g_boot[ixg,:] + delta_diff[ixg,:] = ( - (self.inv_tXX_tXgXg[ixg] @ score_diff - delta_b_star)**2 + (inv_tXX_tXgXg[ixg,:,:] @ score_diff - delta_b_star)**2 ) # se's - self.denom[b] = self.ssc * np.sum(delta_diff, axis = 0)[np.where(self.R == 1)] + denom[b,:] = ssc * np.sum(delta_diff, axis = 0) + return denom + + self.denom = compute_denom3( + self.B, self.G, self.k, self.v, self.scores_mat, self.tXXinv, self.bootclustid, self.inv_tXX_tXgXg, self.ssc + )[:,self.R != 0] + def get_tboot(self):