`L i}h ddlZddlZddlmZddlZddlZddlmZddl m Z ddl m Z m Z mZddl mZddlmZddlmZmZmZmZdd lmZdd lmZmZej:j=d d ge d d ige d dige iggdZdZ ej:jCddZ"dZ#dZ$ej:jCdej:j=d d ge d d ige d dige iggej:j=ddej:j=ddej:j=dddZ%ej:j=d d ge d d ige d dige iggdZ&dZ'ej:j=d d dgdZ(dZ)ej:j=d d ge d d ige d dige iggd Z*ej:j=d d!d"Z+d#Z,ej:j=d e e gd$Z-ej:j=d d ge d d ige d dige iggej:j=d%eezej:j=ddej:j=ddd&Z.ej:j=d d ge d d ige d dige iggej:j=d'ed(Z/ej:j=dd)d*gej:j=d d!ej:j=ddej:j=ddd+Z0d,Z1d-Z2ej:j=d.ed/Z3ej:j=d.ed0Z4ej:jCd1ej:j=d.ed2Z5ej:j=d.ed3Z6ej:j=d4d5d6gd7Z7ej:j=d d ge d d ige d dige iggd8Z8ej:jCd1ej:j=d d!d9Z9d:Z:ej:j=d;ejvejvfejxejxfejzejxfej|ejxfgej:j=d d ge d d ige d dige iggd<Z?ej:j=d d ge d d ige d dige iggd=Z@ej:j=d e e gd>ZAej:j=d4gd?d@ZBdAZCdBZDdCZEej:j=d e e gdDZFdEZGdFZHdGZIdHZJy)IN)StringIO)linalg)clone)NMF MiniBatchNMFnon_negative_factorization)_nmf)ConvergenceWarning)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equal) squared_norm)CSC_CONTAINERSCSR_CONTAINERS Estimatorsolvercdmucd}tjd}tjt|5|dddd|j |dddy#1swYyxYw)NzKMaximum number of iterations 1 reached. Increase it to improve convergence.rmatchauto)max_iter n_components)nponespytestwarnsr fit)rrconvergence_warningAs j/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sklearn/decomposition/tests/test_nmf.pytest_convergence_warningr(sb V A (0C DD<16$s} ))   & &r *C 66#))B# $D;4""4$QG1UKKMa!e[[]334zbignore:The multiplicative update \('mu'\) solver cannot update zeros present in the initializationctjd}d}tjt|5t ddj |dddd}tjt|5t j | dddt dd j |}tjt|5|j| dddtjt|5tj| dd dddd D]}tjd j|}tjt|5t d|j |dddtjt|5td|j |dddtjt|5tj|d|dddy#1swYxYw#1swYxYw#1swYGxYw#1swYxYw#1swYxYw#1swYxYw#1swY;xYw)NrzHInvalid beta_loss parameter: solver 'cd' does not handle beta_loss = 1.0rr?)r beta_lossz!Negative values in data passed tor皙?)tolr-)r-r.r/zLinit = '{}' can only be used when n_components <= min(n_samples, n_features)r1)r r!r"raises ValueErrorrr$ transformr7r8reescapeformatr)r&msgclfr1s r'test_parameter_checkingrO-s A TC z -/ 43'++A./ -C z -  1"  aS/  a C z - qb z -- QB8,-2 ,ii 99? ]]:S 1 %   ! !! $ % ]]:S 1 .  & * *1 - . ]]:S 1 ,   1d + , , ,//-- % % . . , ,sSH 5HH'H4*I*I *I HH$'H14H>I I I# ctjjjd}tj|j dd}t j|dd\}}tjtj|||z }tj||jz }||ksJy)Nr*r+r-rF) r r,r3r4r5r6r7r8rnormdotmean)r:r&r<r=errorsdevs r'test_initialize_closerVPs ))   & &r *C syyR !A   q"8 4DAq KKq! q( )E ;;q1668| $D D==r?ctjjjd}tj|j dd}t j|dd\}}t j|dd\}}t j|ddd\}}||f||f||f||ffD]\}} t| |dk7||dk7y) Nr*r+r-rFr.r/rr0) r r,r3r4r5r6r7r8r ) r:r;W0H0WaHaWarHarrefevls r'test_initialize_variantsr`\s ))   & &r *C 66#))B# $D  r 9FB  r :FB""4*1MHC"XCy2r(RI>:SCqM3sax=9:r?r1)Nr-r.r/r,alpha_W)rAalpha_H)rbrAsamec ,tjdtjddz dtjddzf}|dd|||dd|}|j|}|jdkj s|dkj rJy)Ng@rrr)rr1rarcr2r)r c_arange fit_transform components_r9)rrr1rarcr&modeltransfs r'test_nmf_fit_nn_outputrmks cBIIaO#S299Q?%::;A        E  #F""Q&++-&1*1A1A1CD D1Cr?ctjjjd}| d dddd|}tj|j dd}|j |jdksJy) Nr*r/riX)r1r2rrfrC)ro)r r,r3r4r5r6r$reconstruction_err_)rrr:pnmfXs r'test_nmf_fit_closerssy ))   & &r *C         D syyAA 88A; * *S 00 0r?cd}d}d}d}d}d}tjjjd}tj||g}tj |j |}t|D]} || |z|| |z| f<tj||g} tj |j |} t|D]} | | |z| | |z| f<tj|| } t|d||d } | j| }tj|| j}| jd ksJt| |t|||d | }|j| }tj||j}|jd ksJt| |d y)Nr+rorrEr*rr)rrrBrr2rC)rrB batch_sizer2ratol)r r,r3r4zerosr5r6rangerRrrirjrpr r) n_samples n_featuresrrBrwrr:W_trueW_arrayjH_trueH_arrayrrrkrlX_calcmbmodels r'test_nmf_true_reconstructionrsIJLIJH ))   & &r *C XXy,/ 0FffSYYy)*G < :#*1y=#9q9}a : XX|Z0 1FffSYY|,-G : @&-a,.>&?q<"#@ vvA !  E  #F VVFE-- .F  $ $s ** *Av! G " "1 %F VVFG// 0F  & & ,, ,AvA&r?c tjjjd}tj|j dd}t |dddd}|j|}|j|}t||d y) Nr*rfrorEr,rư>)rrr1r2rDrCrx) r r,r3r4r5r6rrirIr )rr:r&mftts r'test_nmf_transformrsx ))   & &r *C syyAA     A  B AAB%r?ctjjjd}tj|j dd}t dddd}|j|}|j|}t||y) Nr*rfrorErMbP?T)rr2rDfresh_restarts) r r,r3r4r5r6rrirIr )r:r&rrrs r'test_minibatch_nmf_transformrss ))   & &r *C syyAA   A  B AABr?ctjjd}tj|j dd}d}tj |j |z }tj||j |dz}tj||j d|z}|d |dddd|}|j||||j|y) Nrrfrocustomrrr1r2rDr<r=r) r r,r4r5r6sqrtrSrirI) rrr2r&ravgH_initW_initrs r'test_nmf_transform_custom_initrs 99((+L |!!!Q'(AL ''!&&(\) *C VVC,,,\1== >F VVC,,,Q == >F !qd NT AOOA6O*KKNr?)rrc tjjd}tj|j dd}t |dddd}|j |}|j|}t||dy) Nrrfrr,rv)rrr1r2rrdecimal) r r,r4r5r6rriinverse_transformr )rr2r&rrA_news r'test_nmf_inverse_transformrsx99((+L |!!!Q'(A    A  B   #Ea2r?ctjjd}tj|j dd}t |ddd}|j |}|j|}t||dd y) Nrrfrr/T)r2rr1rr{Gz?)rtolry) r r,r4r5r6rrirr )r:r&r7rrs r'test_mbnmf_inverse_transformrsz ))   "C syyAA    C   1 B !C ! !" %EAu4d3r?ctjjjd}tj|j dd}|dddj |y)Nr*r+rurr)rr2rD)r r,r3r4r5r6r$)rr:r&s r'$test_n_components_greater_n_featuresrsN ))   & &r *C syyR !A 2A48<outr)r rRrmaximumsumlogsize) rrr<r=betaWH WH_Xnonzero X_nonzeroresdivs r'_beta_divergence_densersX 1B qyAF#a''Q!V*K!q& IJJ{Dk2 qyffY K(?!@@A rvvx!%%'!! J +%ffSkAFF"RVVBFF3K%88 J $##% qRXNN,,, tyKD1H$=>CCEEE ttax   Jr? csr_containercd}d}d}gd}tjjjd}|j ||}tj |dd|||}t j||dd \}} |D]\} t||| | } t j||| | } t j||| | } t| | d t| | d ^y) Nr+ro)rb?rA?@g@r*rrr,r0r) r r,r3r4r6clipr7r8r_beta_divergencer )rr|r}r beta_lossesr:rrX_csrr<r=rr^lossloss_csrs r'test_beta_divergencersIJL0K ))   & &r *C )Z(AGGAq$A ! E   q,XB ODAq6$Q1d3##Aq!T2''q!T:Cq1C15 6r?cd}d}d}tjjjd}|j ||}tj |dd|||}tj |j ||}tj |j ||}tj|||} tj|||} |j\} } tj| | | fj} t| | | | fdt| j|jt| j|jt| j |j y)Nr+rorEr*rrr)r r,r3r4r6rr5r7_special_sparse_dotnonzeroasarrayravelr rindicesindptrshape)rr|r}rr:rrrr<r=WH_saferiijj WH_safe_datas r'test_special_sparse_dotrs/IJL ))   & &r *C )Z(AGGAq$A ! E syyL12A syyz23A%%aE2G Aq )B]]_FB::gb"fo.446LlBr2vJCw 6w~~u||4w}}ekk2r?z-ignore::sklearn.exceptions.ConvergenceWarningcd}d}d}d}d}d}tjjjd}|j ||}tj |}||} t j||dd \} } d D]} | j| j}} t|| ||d d d | |||d \}}}| j| j}} t| | ||d d d | |||d \}}}t||dt||d| dz} | j| j}} t| | ||d d d | |||d \}}}t||dt||dy)Nrr+rorCri9r,r*r0g333333r皙?rAr@rTr)r1rrrBrral1_ratior2gHz>rxh㈵>g-C6?) r r,r3r4r6r5r7r8copyrr )rr|r}ralpharn_iterr:rrrrXrYrBr<r=rrrrrW3H3s r'%test_nmf_multiplicative_update_sparsers IJL EH F ))   & &t ,C )Z(A q A ! E  Lxb QFB2:+ wwy"'')1.   B wwy"'')1.    B BT*BT* V wwy"'')1.    B BT*BT*u:+r?c d}d}d tjjjd}|j ||}tj |dd|||} fd}d}d D];}t jt| 5|||ddd||d z|=d D]}||||||y#1swY1xYw) NrfrorEr*rrc t|dd|dd\}}}tjtj|rJtjtj|rJy)Nr,rrrv)r1rrrBr2r)rr r9isnan)rrrBr<r=rrs r'_assert_nmf_no_nanz7test_nmf_negative_beta_loss.._assert_nmf_no_nanQsa, % 1a66"((1+&&&66"((1+&&&&r?AWhen beta_loss <= 0 and X contains zeros, the solver may diverge.)g333333rbrr)rrAg333333?rr) r r,r3r4r6rr"rGrH) rr|r}r:rrrrrMrBrs @r'test_nmf_negative_beta_lossrDsIJL ))   & &r *C )Z(AGGAq$A ! E ' NC 0 ]]:S 1 - q) , -1t8Y/0 /- 1i(5),-  - -s CC rBrbctjjd}|jd}d||dk<t |d}d}t j t|5|j|dddy#1swYyxYw)zDCheck that an error is raised if beta_loss < 0 and X contains zeros.rrfro)r)rBr2rrN) r r,r4normalrr"rGrHr$)rBr:rrr7rMs r'%test_minibatch_nmf_negative_beta_lossrisv ))   "C  AAa!eH  ;C MC z - s $BB cd}d}d}tjjjd}tj|j ||}d}|d |d|dd|}|d |d|dd|} |j |} | j |} |j} | j} tjtjj}| | |kj}| | |kj}| | |kj}| | |kj}||kDsJ||kDsJd}|d |d|dd|}|d |d|dd|} |j |} | j |} |j} | j} tj| d ztj| d zztj| d ztj| d zzkDsJy) NrfrorEr*rAr)rrarr2rbrr)r r,r3r4r5r6rirjfinfofloat64epsrrrQ)rrr|r}rr:rrrregulrkW_regulW_modelH_regulH_modelrW_regul_n_zerosW_model_n_zerosH_regul_n_zerosH_model_n_zeross r'test_nmf_regularizationrws? IJL ))   & &r *C syyJ/0AH  !     E  !     E!!!$G!!!$GGG ((2::  " "Cgn-22Ogn-22Ogn-22Ogn-22O _ ,, , _ ,, ,H  !     E  !     E!!!$G!!!$GGG KK S (FKK,@S+H H G L  G$,L- -- -r?cd}d}d}d}d}d}tjjjd}|j ||}tj ||t j||dd \} } d D]} |d k7r| d k7r| j| j} } d}td D]}t|| | | d|d||||ddd\} } }t j|| | | ||z|z| jzz||z|z| jzz|d|z z|z| d zjzz|d|z z|z| d zjzz}|||kDsJ|}y)Nrrur+rCrrbr*r,r0rrrrrrrT) rBr1rrrarrDrverboser2r) r r,r3r4r6r5r7r8rr{rrr)rr|r}rrrrDr:rrrXrYrBr<r= previous_lossrrs r'test_nmf_decreasingrsIJL EH C ))   & &r *C )Z(AFF1aL  Lxb QFB2"! T>i1n wwy"'')1 r !A0#)!GAq!$$$Q1i8("Z/!%%'9:("Y.891x<(:5A DE1x<(941zz|C D ($t+++ M9 ! "!r?ctjjd}d\}}}tj|j ||dz}tj|j ||dz}tj|j ||}d|d<t j |||d}d|d<t j |||d}t||y)Nr)r+rrr+)rrrA)rg)r r,r4r5r6r7rr ) r:r|r}rrrr<r=r^rs r'test_nmf_underflowrs ))   "C*2'Iz< syyJ/025A syyL12R7A syyz23AAdG  q!QS 1CAdG  q!QS 1CS!r?zdtype_in, dtype_outctjjdjddj |d}tj |||d ddddd |}|j |j|j|k(sJ|j|j|k(sJ|jj|k(sJy) NrrruF)rrrAr)rarcrDr2r) r r,r4r6astyper5r$rIdtyperirj)rrdtype_in dtype_outrrr7s r'test_nmf_dtype_matchrs a &&r2.55hU5KAFF1!        C 3771:   " ( (I 55 5 3  Q  % % 22 2 ?? I -- -r?cVtjjdjdd}tj|||d ddd|}|j |j tj}|d ddd|}|j |}t||dy) Nr2rrr)r2rDrrxr) r r,r4r6r5rirfloat32r )rrrrnmf32W32nmf64W64s r'$test_nmf_float32_float64_consistencyr&$s a &&r1-AFF1!  91$ 9& 9E   ahhrzz2 3C  91$ 9& 9E   a CC4(r?ctjjd}|jd}|jdj tj }|jd}t jtd5|dj|||dddt jtd5t||d dddy#1swYtjjjd}tj|j dd}d}d}d}t |dd||ddd }t |dd }tj||d d \}}|j||| t|D]/} t|D]} |j|| | |z|d|| !1|j|jk(sJt|j|jy) Nr*rror+rrrF)rr1r2rrwrDr.rrr1r2r,r)r r,r3r4r5r6rr7r8r$r{ partial_fitn_steps_r rj) r:rrrrwrmbnmf1mbnmf2r<r=irs r'test_minibatch_nmf_partial_fitr:`s) ))   & &r *C syya !ALJH !   F|(QR SF    8! DAq JJqAJ 8_Mz" MA   qQ^4+:!  L MM ??foo -- -F&&(:(:;r?c:tjjd}tj|j dd}t dj |}|j}ttdDcgc]}d| c}|ycc}w)z Check feature names out for NMF.rr+rrE)rr7N) r r,r4r5r6rr$get_feature_names_outrr{)r2rrr7namesr9s r'test_feature_names_outr>sx99((+L |!!"a()A 1  ! !! $C %C % % 'E584a#aS 4e<4s Bctjjdjd}t ddd}t j }tt _ |j||t _y#|t _wxYw)Nr)rr+rr)rDr2r) r r,r4r)rsysstdoutrr$)r&r7 old_stdouts r'test_minibatch_nmf_verboserCsb a ..y9A 4a ;CJCJ   Z s !A?? B c$tjjd}|jd}|jd}|jd}|dddd}|j ||| |j |j dk(sJy) Nrrrfrrrorrrrr)r r,r4r)ri _n_componentsr)rr:rrr<r=ests r'test_nmf_n_components_autorIs ))   "C &!A &!A &!A     C a1"    ** *r?c<tjjd}|jd}|jd}|jd}t |||dd\}}}|j |j k(sJ|j |j k(sJy)NrrrErFrr)r<r=r1r)r r,r4r)rr)r:rrrrr<r=rs r'5test_nmf_non_negative_factorization_n_components_autorKs ))   "C &!A   v &F   v &F( VvH6GAq! 77fll "" " 77fll "" "r?ctjjd}|jd}|jd}t ||dd\}}}t |||j |j d|j dfk(sJy)NrrrFrF)r=rr)r r,r4r)rr r)r:rrrr<r=rs r'&test_nmf_n_components_auto_no_h_updaterMs ))   "C &!A   v &F( V&5GAq!Av 77qwwqz6<<?3 33 3r?c&tjjd}|jd}|jd}|jd}t j t d5t||dd dddt j t d5t|||dd dddt j t d 5t|||d d dddy#1swYrxYw#1swYJxYw#1swYyxYw) NrrrErFz0When init!='custom', provided W or H are ignoredrTr)r=rr)r<r=rrz8When update_H=False, the provided initial W is not used.F)r r,r4r)r"r#RuntimeWarningr)r:rrrrs r'test_nmf_w_h_not_used_warningrPs ))   "C &!A   v &F   v &F @ T #1FS T @   # 6Dv   X  # 6E   TT     s$.C/!C;D/C8;DDctjjd}|jd}|jd}t ddd}t j td5|j|||jd  dddt j td 5|j|||jd  dddy#1swYRxYw#1swYyxYw) NrrrFrrr4z'Array with wrong first dimension passedr)rorr(z(Array with wrong second dimension passed)rfrE) r r,r4r)rr"rGrHr$)r:rrr=r7s r' test_nmf_custom_init_shape_errorrRs ))   "C &!A &!A 18! filterwarningsrOrVr`rmrsrrrrrrrrrrrrrrrrrrrrr!rint32int64rr&r+r2r:r>rCrIrKrMrPrRrr?r'ras;  OO-1 />( Hd sXt$45 b7IJD D4, ,>  :( Hd sXt$45 b7IJ!RSJ/$67 E80T   E( Hd sXt$45 b7IJ 1  1-'`D$<0&1&"  ( Hd sXt$45 b7IJ    <0 31 3 4 sL&9:@;@( Hd sXt$45 b7IJ+^n-LMJ/$6780N 8( Hd sXt$45 b7IJ.9 /:  /(H!56<0J/$67,&8017,&^,(<.96:6..93:36KL.9K+:MK+\.9!-:!-HtSk2 3 ( Hd sXt$45 b7IJB- B-JKL<01!1M1!h " RZZ RZZ 2:: 2:: ( Hd sXt$45 b7IJ. .$( Hd sXt$45 b7IJ )  )sL&9: ;; ;&DEF6  5r?