From 0b526a7314dc3cc47f708702765b7aed1b55d4ab Mon Sep 17 00:00:00 2001 From: Stephen-Kamau Date: Thu, 29 Feb 2024 16:31:28 +0300 Subject: [PATCH 1/3] Fix(*): Updated base import to _base sklearn to fix importation issues --- missingpy/knnimpute.py | 17 +++++++++++++---- missingpy/missforest.py | 32 ++++++++++++++++++++++++-------- 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/missingpy/knnimpute.py b/missingpy/knnimpute.py index a7f3d1c..e8ab770 100644 --- a/missingpy/knnimpute.py +++ b/missingpy/knnimpute.py @@ -10,9 +10,8 @@ from sklearn.utils import check_array from sklearn.utils.validation import check_is_fitted from sklearn.utils.validation import FLOAT_DTYPES -from sklearn.neighbors.base import _check_weights -from sklearn.neighbors.base import _get_weights - +from sklearn.neighbors._base import _get_weights +# from sklearn.neighbors._base import _check_weights from .pairwise_external import pairwise_distances from .pairwise_external import _get_mask from .pairwise_external import _MASKED_METRICS @@ -22,6 +21,16 @@ ] +def _check_weights(weights): + """Check to make sure weights are valid""" + if weights in (None, 'uniform', 'distance'): + return weights + elif callable(weights): + return weights + else: + raise ValueError("weights not recognized: should be 'uniform', " + "'distance', or a callable function") + class KNNImputer(BaseEstimator, TransformerMixin): """Imputation for completing missing values using k-Nearest Neighbors. @@ -284,7 +293,7 @@ def transform(self, X): X = X[~bad_rows, :] mask = mask[~bad_rows] row_total_missing = mask.sum(axis=1) - row_has_missing = row_total_missing.astype(np.bool) + row_has_missing = row_total_missing.astype(bool) if np.any(row_has_missing): diff --git a/missingpy/missforest.py b/missingpy/missforest.py index d0d2843..bf35784 100644 --- a/missingpy/missforest.py +++ b/missingpy/missforest.py @@ -234,13 +234,27 @@ class MissForest(BaseEstimator, TransformerMixin): [8. , 8. , 7. ]]) """ - def __init__(self, max_iter=10, decreasing=False, missing_values=np.nan, - copy=True, n_estimators=100, criterion=('mse', 'gini'), - max_depth=None, min_samples_split=2, min_samples_leaf=1, - min_weight_fraction_leaf=0.0, max_features='auto', - max_leaf_nodes=None, min_impurity_decrease=0.0, - bootstrap=True, oob_score=False, n_jobs=-1, random_state=None, - verbose=0, warm_start=False, class_weight=None): + def __init__(self, + max_iter=10, + decreasing=False, + missing_values=np.nan, + copy=True, + n_estimators=100, + criterion= ['squared_error', 'gini'], #['squared_error', 'absolute_error', 'poisson', 'friedman_mse', 'gini', 'entropy', 'log_loss'], #{'squared_error', 'absolute_error', 'poisson', 'friedman_mse'} + max_depth=None, + min_samples_split=2, + min_samples_leaf=1, + min_weight_fraction_leaf=0.0, + max_features='sqrt', # {"sqrt", "log2", None}, int or float, + max_leaf_nodes=None, + min_impurity_decrease=0.0, + bootstrap=True, + oob_score=False, + n_jobs=-1, + random_state=None, + verbose=0, + warm_start=False, + class_weight=None): self.max_iter = max_iter self.decreasing = decreasing @@ -288,6 +302,7 @@ def _miss_forest(self, Ximp, mask): reg_criterion = self.criterion if type(self.criterion) == str \ else self.criterion[0] + # Instantiate regression model rf_regressor = RandomForestRegressor( n_estimators=self.n_estimators, @@ -323,7 +338,7 @@ def _miss_forest(self, Ximp, mask): # Classfication criterion clf_criterion = self.criterion if type(self.criterion) == str \ - else self.criterion[1] + else self.criterion[-1] # Instantiate classification model rf_classifier = RandomForestClassifier( @@ -344,6 +359,7 @@ def _miss_forest(self, Ximp, mask): warm_start=self.warm_start, class_weight=self.class_weight) + # 2. misscount_idx: sorted indices of cols in X based on missing count misscount_idx = np.argsort(col_missing_count) # Reverse order if decreasing is set to True From 21e3e45f829dee70be244d3bbaecaaaa53c677db Mon Sep 17 00:00:00 2001 From: Stephen-Kamau Date: Thu, 29 Feb 2024 16:32:00 +0300 Subject: [PATCH 2/3] Fix(*): Updated the test to run the updated imputers --- .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 169 bytes ...est_knnimpute.cpython-311-pytest-7.3.1.pyc | Bin 0 -> 22821 bytes .../test_knnimpute.cpython-311.pyc | Bin 0 -> 22754 bytes ...st_missforest.cpython-311-pytest-7.3.1.pyc | Bin 0 -> 17581 bytes .../test_missforest.cpython-311.pyc | Bin 0 -> 17405 bytes missingpy/tests/test_knnimpute.py | 11 +++++---- missingpy/tests/test_missforest.py | 22 +++++++++++------- 7 files changed, 20 insertions(+), 13 deletions(-) create mode 100644 missingpy/tests/__pycache__/__init__.cpython-311.pyc create mode 100644 missingpy/tests/__pycache__/test_knnimpute.cpython-311-pytest-7.3.1.pyc create mode 100644 missingpy/tests/__pycache__/test_knnimpute.cpython-311.pyc create mode 100644 missingpy/tests/__pycache__/test_missforest.cpython-311-pytest-7.3.1.pyc create mode 100644 missingpy/tests/__pycache__/test_missforest.cpython-311.pyc diff --git a/missingpy/tests/__pycache__/__init__.cpython-311.pyc b/missingpy/tests/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f719c6e39e9cf118abf1fbfb211d0a8f9dcf5957 GIT binary patch literal 169 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 literal 0 HcmV?d00001 diff --git a/missingpy/tests/__pycache__/test_missforest.cpython-311-pytest-7.3.1.pyc b/missingpy/tests/__pycache__/test_missforest.cpython-311-pytest-7.3.1.pyc new file mode 100644 index 0000000000000000000000000000000000000000..abaa010a08f8e281a9d0edc76ce76e7513e1410c GIT binary patch literal 17581 zcmeHPYit`=cAg=Jl7+OQglu1gS zp<>HB>@wMOm&poUwRN#d;S@yRq;jJLgrWuXufhJ=?LUq>fCU0-T@+~{6ezUFdJAm( zqvu?bGjoTeV{a2IP;@*xymRiI`@ZL#@7z27ORv|(!1dWhz^0hXEcvyht>YG!NpqKNY$e8i*#R+@6rXlpb`qX7P2m;+Egn(`rT7Y&6tw5g<+JNp5!a#Ql5ujZH`zq7dzKNNR^|56x zJuM{QHx!qogqV%RMKL}XOWc@^r-0j9<%;p7l!&Dhk`$jz^jXTDDxah)cTn%fQ|W0b zTg}2!4!;u52-E4|X)z&XPp2Shaw3@!%WX#fD~U;nmZn80({&*!NtNWAtx(HN8<5FA ze;=>Ee{mCsZSy$r#%sd_48{(BR`~n;uUQ z6mKl`tn?}2lWO>6!Mz^d(U9G9xWE?r7rt9^?Na#N58a;p$mh^hW*kZF!exRB_45yb zfIMe&Ag^<*ago$7)SM-&EpAxs@a8A*SGjUl+1f;ySWF9v%NoR#%uQ)x0!y5*(82+= z04xUUnCOLqHgUH1*~lP@DE7+UiDWjGg=r?iXs1OK6lEKk;*e}RJc*r1b|c@BOwY__ zLC`v1k5z(#gdIVqo46N~beSekC0#t5oX*5ZuHy5MY(M---vW|n9(w)x;dQSsKfJ*Q z7kUNXfk!%#uI)iekefy-I5L|Q`baAh?a z3-ZS*vxZ@@d<;YMi8f3ulXX|#K{}2yp&Vb{lsJAiq+ zA2+cVA?h$jk$9Ye`m24mP3)IV?1Tyz^V-C@`kQ?hGl{Ngu`3N?2&$2qO+ziN#oq*R zo=SD0gzc&dv4K7Zna!1Xje}Bly@tZ{Wl@|K%T}1Cu;hjAZmmL=p0cl~<6&L->OFUWc@t_6V=EHKw$kaYVZ zN9lfn&EgPNuPH5D_ZGE+rnJ>0V+ow81WVRg%aH*=D%h6orW96VipDi)@D^uWX&_*= zwWgPb78Sj|WUfg%lTAn0kY3fYbxIS`Ma^0=mMS<*rJ5vARdDlT`iknakd;X$?|rae z;;QsMm1Tl6T|^;VcH@#yO4;PN6f0XN z6WKmn+5UPA=X%-pdJJFn8m>Hq4*2%C;c2q zp83ohUc9jqEO`$p-b1SQ5a+hY80Eq`M#d5$WcqpIg<{^gBu`<lRq2=LETT7u~B{ZythV!GJap48|LFC|C zhIQ_^+1l*myvaujS2+i_UCw&Pn!$SZ2(z=O!4waB5BQ6=({ z8hL3w(u3)GFt)(BA+F~-a@GLLzXh$wIwESf=#eZ zat&03X)@7E*0A^(!MW_BCvJ|F5p^ihpRlXZzsW>au5}Z%uqPUuJ zluZ_l-?ZQar=e7i%Ht_>rk50zuPuv8rFsb-!Mp4;^@Clu7qvxOONqY-(exSuM3RfpKa0G)Uf@|tmYShHam-MJ-r^P z6PDmtSPszO4Md^dP{?UY>-i!|tGY`F(!F5@xK&XY8oSTw!mwg3ptS*9Vp$N&gM^R( zS2sHJ&tUf<6PQNylDx!WAPaxkhBPN98c(x+SN%c{bi$tiO!O+V<`dnp;Fd>fM^A#kdaOdRo zv`_)3{MC3hWDzIIJZ4JJs7sir8TZ6Ml2C-9SyZ{2nE9F6bV5vy$5Sx`x~YVC4c@|X zrGJ3QOkkqRGY?R3cZuBffeo;J!VAI0U@-_u>f<%emY;6{8;Ey-4Fn`V^eDtcIzTOi zmby#f{YrSh8s4A3_>gxM4w8TI!r^&7A6+*vt`@EqUYK_R$_Rw+@E`2D+gm*Ne*fM6 z#ZD#AqXqyes)0Vh8UEn>tq&}B`C{;W_g%N*-=q5X6fdd%z4?*PoI93=KAOngYii_ct1*SUpmG;Vwfixu?s=Gr%~T!Qmrax#;2aQlp!|SxO;w;xunTsQ zQpZQ2)ZncrSAmvBDp1F3S3u$BEP${K0#I--duSn*1rcdB$a-#b~Fy<4??$o-T5xg*q%tl8@4i!Y%y{ zatZ3W&^67q$Sp9+LF`=|<@tY}|JUrZdKTbQbpckZSMGZaX}GD@+EdYBKGb-C=AKl! z8&vxkye?iuqN!`~oA~$&l5Zg)Y8R){eU_-#O#!*zM)LbezJr8l*Ki~4Dn5ttxL~R{ zC<%To@Yc>|vN7=uWXFJjM|T>$pIkP69TYJ*NhT9zrfh|B3?!hvT4q>cEnFoy@OUI?_l@M_z6CQCVS6>(` zv#~NeUbbbXv$1hq$&2Gy66uZvh9-bWI7l@WZv3sN^Ic|~rmOSxY$}_a0fqiu$l)E# zDhgr(@EWM=_I0OgA^1V)Zn%lg{<3xYdRyeq>u-(ahYQ2tE&=T(lzjb)uV3}`gP+jX z_Q1D$&9}Qar1>k+l}Na5v&fyg3D z{vBN8?syAP@NrfdFD&wEpt}&=Xx|2ANAJ=>@-M!0_})Nqr_z2I$ny1`F8a(B75Pp9-bms1h7igQJC^b&v1I!|x3*Tw0jB zbESBxICt+#VOa4Ds-D4;XK+2z@srzsa=X}F9J$x8LNi?zA=P>+Y27!yx{lr@w~qhB2r zgAy{KUkjxkpuUxh;&L@EpcycM^{v1<#bZRjG_HQioau6mI59^#!UVVAS@xQgtxdKy zaeG;0tFA)8P%u21)fu2)TN4aTp=P?KCX)zyt8&$kwrqb2#Ouf!RAR$6Q4B<*XM?Dvqojzlk21G>7t1x(A2$FqPSMXAqi*0`uk#W#?k zxl3SdMO6|7j4Op`VQ^bs#qbp*yOE3|5s+xAOq|3=)SMDpc$zY6qRF6AiOFdSntmT% zTgCVP4rba{3r)9L!Kwch!_b{eudE6s=V`@xT6LcO%3x@8Fmg`s zBM1uk@!Okk=owm}=U7mCc&d zCxd^Sz*G|))%ZRNrZxkYe4||ItOeto2vY4Z^nIh8=($17tq=uMgMx24WSScQ6`R1+ zfDvHQaC5nZ&IPQ4mL@PYAcyq1PS-ToD!0NYhh*s8ld!PsV5(hqo6DhL?3AXPi-?2j zE}@k!(bzZO?Kkwexg4UY+bWysL}}J^Hc_C2phm87iFVewx^}K<+)I$QqGvHw;}Y#m zv@eEgT%w%`7qxSZOVl-TH??BQ+;lpb1^4qyz%IKGTFy+TlH+rgt-~qcif4i62?Hqtk`1)$VRh5gUCOE zO#Tu6q!}22FB>B3{_mg@{ohXXe*?)6fsqjmEgUSo3Ai@AZE>&|UFj)>k1OHhD&D77 zZ>ZsD{^FB@=au%7Z@1z*q54kzKY|YRuDtqbwiGAoZ3I?s5@J=)A4DCDa5zv*@U&Eg?W-rsGL) zPy=@V8s`A-nlx|@>>b^Az6c-4)uX>UCjfbuJrmY=eyf*L=)ULb0=4#b*p<9&;%VF6ImKlr$vC95){=c((^({X2AY)lhrly$a0` z(*v*#Vp+6+uRmPkd+W|8fPDtX)~fp!>w#cF0z(Z>7RVpGT#e(sQMI)P_CU_Ob%B1O_CnflF9b++FQgUsLV*14_d;+ZD7Y|E z$Q5!MZT+h)>&L$ir**?G!fD;`i(pNKUtF*(SfDN8{#EPxv6C2i3L{Tpy3W$yPGguDIyk+%%_{KKhQ~2iTlaN>gauHv< z$-_f`RY9Gabd$p(9zvh|)TEcB$Ak4|3za&CY_gB=`wXz7>o2o?)@&Dr);ORI@ibZW zg5$!Phpn;wD3~nGCTHaQW8wwKQyfF`_#JejV^IBo-qQ7r76LADSLh^2(ryy1uz>j! z#{?l!jB=U11iG>z2iKhXXC@|9!d1Nes4U9tw=2$lOoD>FBGEgEM8}iJm9xt9S1W%C zXXXHP8ZL6qZhdmfM51Ib5gN6lc*wG{4G!u@KvA5I{Db>*Q0 zz4{pp=lWXmxX#5(uome|)AWtnX)u$E7LGq_Fb+&-$Fj*8onr+je2irPYFQM7)eBvI z`d2xyykRO*U+=&qt6jP{qS~aD4iLF{KiEL9;${JSl-u;Yn+JfnUGPrYsQhu2l1uPG zyif2?VqO8r%XB&mK1&NeuBFC)q6OanogSc|n>Kdn;P@SnjrF%3nLEDfM%h zz?hH`#t=Dw7$%kOmNwv$V-P`o;ianue24nNi)2Cw(G3K;9L0<;AweD_CtN~EP6R1o z{O#`k1J89OGZS5vuVLZ4-9#6haO#p~XJ)3wY(f}-ZDNG0hV#+{(4cY_k0T-42ENFh z5dRn+L6Pl7EyDny>=1}BP1r`aN;S3-wDT(8K^^2fM56!PW%aGf=cGs zM9JXCUGTkDMVHhzN42MqhVBiQ`2MEPWGl7qYpzG0xDmR!zO-b)c$qpsE7`UzP|?mv6w&TD#otJOBP=JBlyW9z)wI3a-)wqjj!bO$C~G`9GdDo29TAmtIV@dI zCE{XcU^bgfNdqx_3(nbB&iv!VFMG-R1GNY{PFB=HDas0N|~W0S^n` zhG}HSv+NkV#Te)}*@J{-px4;l?0HCKpy%1cEcp2~l3`Ebvqpw29V8b6J@y>?O~|A% HCFArzAaT4u literal 0 HcmV?d00001 diff --git a/missingpy/tests/__pycache__/test_missforest.cpython-311.pyc b/missingpy/tests/__pycache__/test_missforest.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ab93b2049dbebc98630a5cc1831f7675124153de GIT binary patch literal 17405 zcmeG^e{37qd3WTIJpTS6iIg2DmSjh^EJdnh$BtdcsbpK0Yg?}EB1=7YETf}j$|5P> zony;Au1t}(Od+h=;G)W44@BW+@}dI5&<*-;LH}u2><^xBfCU1=JPg?&3>Z|T?tpH8 z?E42}w$day%i5iMe?4`i;a4 zU|XwLF_Dsz@pMv>5>uGlSH)NI*~-z2iHwj0LYNS3l9 z6yQ0RlB7!Z%~oj2rUSs#pTCFU?_b-*(ce4_xQW_m1A=kFpB?@_{%aOTUPfFsOarD8 zindzJ{Hr*Z+4mvO2YSAoOK}ykw7Q_!6;5Fk_BPc2KIHg7&sF5=G6Mqhz7Ms2px0c) z-qZ!Ez1SBLEUn@dn_#;}>JgI=w_hV=iFU=7b7%I*!P<8WBkO%(m}$O-S8NJ{Ew8qp z>a(RTce4=?pbW)L_dVx%LTb1&zS=RK7?)sGa8fcUh&YU!*tZ^c*_N3tJ4Ld%%HGOix+KH*Wfvk-85tr;>1tv& zS#~BQc@BOZlQY?bT()B(H<3)u^!UooOkB*~l<;>VJ0q37X;^-#%v1)}W7(BXW#Vro zW+0NdMIwP}GQQkMN@X`z7RSbwc@mvUX3FdvWp^fC%~|$l5~PlJO1M>dfr{`&@*=Ko)>ocE;h{@-TeM z!i8^tEB~!W-socIn)kVq_qp}$kfR(FhOJ4V#@ z<68Ui!fE(Ew)0`Mdo9{syuQ@E(xXO?YSE(w?|SrwhUo4C1-8(;@XeB^OXYVx^7`^) zA46A}2?Vu(+XOf2$3F%DWSPwYLC&$}O;W#6b2eGu+_2f<%MakM5^{FM-h`OgEE|cF zO=L>prgbubHBQ=S;((+cHiLa!#Fep$tG&lTCQ)=lyzHM$$#EH$nFO<)7Libt9b}0^ zw(amHK8K(S@vc;Q_J$0E*8N7j5)~vI2(sM7Zp_kQSv-||2|1O`#7U{*0A$+-f6`Y0 z|yA|wa|;jgc{nbh4$u8 zZ*ZZ7ZFhDS4=x=nbq%T9evR8-sy*UfD43co94<0ht+3B4lSNOIz%E;c4W`mGRgiAC zOoC0|6x%coCkeM<;Bt2J#K=001bSpw*l9vpF|%TOAExXBecD(?#tl^s)B5C2F@odA zEI=oLE&_RgTwPn-pS*6eJUrus4nDAnJE0k6ACjGHIxZpc>tV&`0eSoI=?u(%$3!+G zCsG*+sc2tEDl?hNq~y7dtk{w0AOx&K&SpDi65>>{1C~_Bi()^lq!5%qsxSdB;2;SX zgDD+fH*xGCX+I{BbR1~o(;mkrj@~A&)(RHO+Qd=(-M;ggB(^3E#0wfbb0ZCHy_$Fn zn83_T2h!z^D(UO*;mIB#yP@n5ke-V;OJ&dNNQqC1Vpc5MVS|Wa#5xEI>EXy2i7x@F zvMuasX-dNO;6A8qgI4P{xSfQuUWGgd;7|G~09g8M(fl|p^QFLg_ns{~8|?Wt0|01W zuqS^CNSiyd*jeItsQeC%-;p0)_niDC`wuSFb3T83gKNLHy?AM9&vNg|b(K4;afeIX z;m1zK?Vab>`B))X2wH#IOFTYXZb!uVYsTSr{RTmPc+1Cl4>cPvOv$J@pr4 zPnq|VzzR0lFEC|>jFO||2Z5FKodeQ@9G_)K%}wfbwOe1J*jX_@>%3Ux`jXqsJaYVP&82!qjJGzsntTos>Gik zH}+SLjqGN!h97_ol(?0WMBF&yAb_$P<%o0=*g=oG!X?Pkw}ZSL#@lFM6rgS=Lbvc1t(iq9rQ zc}P41)qffOq+bBYGavb*i`Q4eCI5cazhCq32cF_a{daUbV>YV1o|>`UvhZp^nA^XmO6C8qLifh1DEQ^WWvZl?)2<~MMy>N4^f@&!99h=~uv~8<3kI8{(U&VVd zl}fWyJ;C)v0);g*P3X6wPz5a;PH>xQ<)|{Av1EEnQRON+Go0yX%tsUC?a*L3qpwQy;Ui$lD_cx1I{3R6jDeg%t_sFEJvJgAGi zO5~}JY=CqVT?j9Ri($x8pRQxJf_w|eIJ^gB902)|#}OvB4ak0Esk0RAQ=@%av@d`D z5$`Dsl7ET9fq5Q8EED3*!kdMc=iQ)*gd%tNdtG<;76;$!z1zFELk)FnA7qsA>{MbkC7nVkVt++>2_lV{m$&aja&hL$Wd$e$& zFgJf?@xtQV-7EP~mD{Ir`%2ut^5 z&3UNW^&To{Zi9Xs!aNw-cm?=8n%ZQ89Rb&($KeF?^^bC1#SOoYaz3hbou*S*-T16n z)NRE_w;<jjl~N~Lm?fIfvy?=ShhQ!zETgJj4T2w5 zkyVz6D3KyEiMpT!m5?#)O2GWqK$eIUQHHMzP)gV+g>GrCMQMRq4&&(JEYJVb{J+RA z8byG))gl3c>S9jkrjgr`P;9Nm%)d{~zfIhG910N6BhWdr_!WG;h~TRT2xrB`^?)TD zbW=bqG8yp?5fC=o)`*RYeVC3bqpH=Uz|sZw+Z!11DJcu7$;m+htil9kFkvx{Ujo%*Ol-GR{01Tj-!)8ZF9ELXs&Ll9GLP0_Y(kj_ zt{zV(q-&KJu`ClDu`O3W7%H>zGCNUrWU_L6!ruC>6f;)oj9qXqWlPi;AwP)rMU<;Ng9*sO0Y+TK;> zmHgPow&(7)7x${$dbMr6Di_U<6|O>N;KftlpL#bnp8~$vwfp{_rGeE~)UFd+*NOb8 z!q~#qlJ5nT+X;mQS{7b;H$ETVVnU8S0t)PUc-s~ebi*rv!th6}(K}~<61l%^>7d#< zq;(Fh46CgNwbp}$laE5NMV9;E5|<+O5rnV z_>2}lQy5wI1%5F4{n3RB3v+j_6fYF#?q4a4s=gu3H&pTst;e?g==Pu8E_N2j?)R#( zel6Bt7=vNi-B&oZFt(UjIHUSHO1_S*ozTI@U5q2PaI@%AxxE^rdfd=bnq6br&FWpj$`~#y^2@Nz@=QC)qF4@HY8uppeaTUI? zv;^zJZRM^YaZ!>Ha6z5#;W1?MlBU?-UluXVhsJw2!}3jOuuyeXjWlbp1WOS6F`dM8 zehC^Z(K}IZHEXaH>?OqN0O}=qUq|d8Ab10TQLC=J8VnXpiu^=E1}#yPdc0OXiyXAV zONj=JT55$s61Iywh45Z5J$?h@R}gd|Xu!q9Bqku!l<;evk2PUp(5U28mQp|8hR=S6 z-~Sz~w9i)k+-e2G{Aa9c?p(UKDwN#ERrhhtef)D#HTRTwe4bs^T)oz(V} zI;X9P&dCTK&^&nyg##M=Wat^ui`OX~?Wi(z@kx3tb9G2Q5u>(vT7{ z);itNT&vOwvm8-ibdSQuuG2}Kiq~2XrIR{-uTI)Z*JvIau-KbM+*%Le)NPeRbiy=i zJex330+0{au!JY;SVNnwaa_Wk37^GS4NDj^!D6h2CES@{kvrG0gk2+cGYo(T0c9?m zPRU?W{t{ry9@HvlvoooQxyte1Rm}G-1StexLx3uC^+*u>_N1OV#Tf~#MR69V5vME6 z;x&AoL6Am}L6AjY5djGIKYj*>y5&{{)4Fqo? zxQXBvf+q?U5}st}qJ%k85i53Ebz`$wp=-zQLLp`NlV)KCK5gyTuyKdoXybOHjT=CI z1cZ!mWMQ!I7O1q*?TbUj;g#-E^spK|tl@KP^|}@v&Yyo;y?Ld*6xgK(j%a}+|F1kp z_O4v|P%eefs^PO*`0VGSJP(8914qZjTVR&Q^Wz~rKOVyKV-u*CgiuT;lF(U4b4dvI zODz}<86cN{Ri2iFKpV5TC4sXAxDYok0lu|x;2g+1hHOLR0XAn7*eMq5>L9n&f+6LY zt?l4EMaec`DTYmE*rq`i()oB*vhpl@Es~Y)!eOTHIR{m{E}x-v1{Qw07AK`s;yEzY zD&p>|^Wj>L@E3ga>{iV$$1ARBPc2u@O|`?2d8}s#w7ni@nFNrGsJ4(1_U3#bahXP@ zmb=am(XTknqoVkQ5OQ0^DVVIqfQ=xQni)4;FGyJbnF}aB`2B5;w!b5-CxPmzVg0wx zvE_U`7lQgLl2(wCsKPovMByV;J*JUrRLT=2t(Ipgi5?I0sDdmLRP1jtA}w*XfJZ^A zWu>)c!g6PAyckAkm`7=AB2Pt>7DJu_d%o#yxs9#~q_Vam9#q!_khxloQs`dgqDoZp zgJcFXL8P+(nEx+%k5L4i6j|hCu#uS4UDK_#+(nZgK@A5zj?y(MPP6ZXwGYo&c8o6D zJV$WGVX|;p>md?fyGh~`zX?qi6#z9E>;NKg`&K{>V}FdmFsQtPuirtSA6$sKAO@~l zD8W_0eux1A-47~03bd3)4mQN^VWz0n>e7eb5V?y;U_@p+jyNPx#Ng6UW;28|RQg22 zScALQbea*XNNUDGMjq1Ptl~zRSb@X>W* zS?qrA+}(3auhe|!pCrFk{MTqlh9@3?d}@N+dh4#@u-4iQ#~&x&K1aV%#~^KZ3<98f z4AP3nAOJr9V-P$83NMTma)sPRTkmSi`r%i>@izJzINnBI18FMy+JbGt27QV4uG-gM zIf{wLF!2~B9$TTyrOb^+(O&Q({_N^QU#;qO7|#2>Gv7Y5z`i~H&iF%a#~Qa|@dBJfYuwHfxAPMpyP}*z z2*AGsY(@Z@Z1<{?*d!Hh6*f+p;u_-xyU--1=@&KEFN=v5T$pt=4g^Wpvc(vkV+A){ z$}(*qWYxQ4k~iiJsuKR9_0&90G{O77GXj+Arq3N3I6mjOv47IJ zX~JSG&T|G!sb9lHjft4m7((Y!+c3=1CIj&yNTBX)8Ek=QDCRp`q!0owVR1xtIf$_f z2oMJ)5i9|uB%&^1`t8o%ftT=lS>;lh1owB79pK#5A>Ejr&5CkT=!awCFqUMvLlc&S z%vn5)fN&eQnL8=|0A7KSbs?5$A*ib2HkisOCZcq#)I+foAj z!UZ_-hwy0znapnqlfiphaObMROKN_&`rA)N?vIxE-lp%wYq#!3)?;6tKa=NRvm06< ztr`sgSKx)~;HwPY!kzT}uPU>{^u?|c|GfDfZ<$qdZ~0xw>Ria`0Ko0A5aaFF>;CD! z2Yt(Z+P)*J!zy=7Fat&zWBWe?6~p=S#JR*jRhEgSXv{^z0m2g>VaMA~ieL zPec&%W4{XAk`F450AbErf=kC^Tf{XAm6Tx#?@ zVmeCn^QbLWWS6AX;Sa_2=Xc(HeM#Q3Z)g2m3=NLB*aKUP4q98-BU_9P`g|;0u+qT` zyV-Gei!s4*c95V<@G85DJqx)^@GN_P1w*?IGVC#Y*TINw8!5#EUwMiB3KY^9k_q^4 DXnuf~ literal 0 HcmV?d00001 diff --git a/missingpy/tests/test_knnimpute.py b/missingpy/tests/test_knnimpute.py index 284d7ab..bbffc70 100644 --- a/missingpy/tests/test_knnimpute.py +++ b/missingpy/tests/test_knnimpute.py @@ -1,9 +1,10 @@ import numpy as np -from sklearn.utils.testing import assert_array_equal -from sklearn.utils.testing import assert_array_almost_equal -from sklearn.utils.testing import assert_raise_message -from sklearn.utils.testing import assert_equal +from sklearn.utils._testing import assert_array_equal +from sklearn.utils._testing import assert_array_almost_equal +from sklearn.utils._testing import assert_raise_message +# from sklearn.utils._testing import assert_equal +from numpy.testing import assert_equal from missingpy import KNNImputer from missingpy.pairwise_external import masked_euclidean_distances @@ -40,7 +41,7 @@ def test_knn_imputation_zero(): [np.nan, 2, 0, 0, 0], [np.nan, 6, 0, 5, 13], ]) - msg = "Input contains NaN, infinity or a value too large for %r." % X.dtype + msg = f"Input contains NaN." assert_raise_message(ValueError, msg, imputer.fit, X) # Test with % zeros in column > col_max_missing diff --git a/missingpy/tests/test_missforest.py b/missingpy/tests/test_missforest.py index 1c1d90a..d7b1437 100644 --- a/missingpy/tests/test_missforest.py +++ b/missingpy/tests/test_missforest.py @@ -1,9 +1,13 @@ import numpy as np from scipy.stats import mode -from sklearn.utils.testing import assert_array_equal -from sklearn.utils.testing import assert_raise_message -from sklearn.utils.testing import assert_equal +from sklearn.utils._testing import assert_array_equal +from sklearn.utils._testing import assert_raise_message +# from sklearn.utils._testing import assert_equal +# from numpy.testing import assert_array_equal +from numpy.testing import assert_equal, assert_array_almost_equal + + from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor from missingpy import MissForest @@ -55,7 +59,8 @@ def test_missforest_zero(): # Test with missing_values=0 when NaN present X = gen_array(min_val=0) - msg = "Input contains NaN, infinity or a value too large for %r." % X.dtype + # msg = "Input contains NaN, infinity or a value too large for %r." % X.dtype + msg = f"Input contains NaN." assert_raise_message(ValueError, msg, imputer.fit, X) # Test with all zeroes in a column @@ -112,14 +117,15 @@ def test_missforest_numerical_single(): [1, 0, 0, 1], [2, 1, 2, 2], [3, 2, 3, 2], - [pred_val, 4, 5, 5], + [pred_val[0], 4, 5, 5], [6, 7, 6, 7], [8, 8, 8, 8], [16, 15, 18, 19], ]) + imputer = MissForest(n_estimators=10, random_state=1337) - assert_array_equal(imputer.fit_transform(df), df_imputed) + assert_array_almost_equal(imputer.fit_transform(df), df_imputed,decimal=0) assert_array_equal(imputer.statistics_.get('col_means'), statistics_mean) @@ -170,8 +176,8 @@ def test_missforest_numerical_multiple(): # Fill in values df_imp2[bad_rows, c] = pred_val - - assert_array_equal(df_imp1, df_imp2) + + assert_array_almost_equal(df_imp1, df_imp2, decimal=0) assert_array_equal(imputer.statistics_.get('col_means'), statistics_mean) From 1bac83260e98b9b063dfbe9ee5e9e961cf8f13f3 Mon Sep 17 00:00:00 2001 From: Stephen-Kamau Date: Thu, 29 Feb 2024 16:32:44 +0300 Subject: [PATCH 3/3] Fix(*): removed out warn_on_dtype as it is no longer used --- missingpy/pairwise_external.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/missingpy/pairwise_external.py b/missingpy/pairwise_external.py index f81c207..7cabdaf 100644 --- a/missingpy/pairwise_external.py +++ b/missingpy/pairwise_external.py @@ -128,14 +128,17 @@ def check_pairwise_arrays(X, Y, precomputed=False, dtype=None, if Y is X or Y is None: X = Y = check_array(X, accept_sparse=accept_sparse, dtype=dtype, copy=copy, force_all_finite=force_all_finite, - warn_on_dtype=warn_on_dtype, estimator=estimator) + # warn_on_dtype=warn_on_dtype, + estimator=estimator) else: X = check_array(X, accept_sparse=accept_sparse, dtype=dtype, copy=copy, force_all_finite=force_all_finite, - warn_on_dtype=warn_on_dtype, estimator=estimator) + # warn_on_dtype=warn_on_dtype, + estimator=estimator) Y = check_array(Y, accept_sparse=accept_sparse, dtype=dtype, copy=copy, force_all_finite=force_all_finite, - warn_on_dtype=warn_on_dtype, estimator=estimator) + # warn_on_dtype=warn_on_dtype, + estimator=estimator) if precomputed: if X.shape[1] != Y.shape[0]: