
    {Kg˅              	          d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlm	Z	 d dl
mZ d dlmZmZmZ d dlmZ d dlmZ d dlmZmZmZmZmZ d d	lmZ d d
lmZmZ ej>                  jA                  ddgeddigeddigei gg      d        Z!d Z"ej>                  jG                  dd      d        Z$d Z%d Z& ee'      ej>                  jA                  ddgeddigeddigei gg      ej>                  jA                  dd      ej>                  jA                  dd      ej>                  jA                  dd      d                                    Z(ej>                  jA                  ddgeddigeddigei gg      d        Z)d Z*ej>                  jA                  dddg      d         Z+d! Z,ej>                  jA                  ddgeddigeddigei gg      d"        Z-ej>                  jA                  dd#      d$        Z.ej>                  jG                  d      d%        Z/ej>                  jA                  deeg      d&        Z0ej>                  jA                  ddgeddigeddigei gg      ej>                  jA                  d'eez         ej>                  jA                  dd      ej>                  jA                  dd      d(                             Z1ej>                  jA                  ddgeddigeddigei gg      ej>                  jA                  d)e      d*               Z2ej>                  jG                  d      ej>                  jA                  dd+d,g      ej>                  jA                  dd#      ej>                  jA                  dd      ej>                  jA                  dd      d-                                    Z3d. Z4d/ Z5ej>                  jA                  d0e      d1        Z6ej>                  jA                  d0e      d2        Z7 ee      ej>                  jA                  d0e      d3               Z8ej>                  jA                  d0e      d4        Z9ej>                  jG                  d      ej>                  jA                  d5d6d7g      d8               Z:ej>                  jA                  ddgeddigeddigei gg      d9        Z; ee      ej>                  jA                  dd#      d:               Z<d; Z=ej>                  jG                  d      ej>                  jA                  d<ej|                  ej|                  fej~                  ej~                  fej                  ej~                  fej                  ej~                  fg      ej>                  jA                  ddgeddigeddigei gg      d=                      ZBej>                  jG                  d      ej>                  jA                  ddgeddigeddigei gg      d>               ZCej>                  jG                  d      ej>                  jA                  deeg      d?               ZDej>                  jA                  d5g d@      dA        ZEdB ZFdC ZGej>                  jG                  d      dD        ZHej>                  jA                  deeg      dE        ZIej>                  jA                  deeg      dF        ZJdG ZKdH ZLdI ZMdJ ZNdK ZOy)L    N)StringIO)linalg)clone)NMFMiniBatchNMFnon_negative_factorization)_nmf)ConvergenceWarning)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equalignore_warnings)squared_norm)CSC_CONTAINERSCSR_CONTAINERS	Estimatorsolvercdmuc                     d}t        j                  d      }t        j                  t        |      5   | dddd|j                  |       d d d        y # 1 sw Y   y xY w)NzKMaximum number of iterations 1 reached. Increase it to improve convergence.   r   match   auto)max_itern_components )nponespytestwarnsr
   fit)r   r   convergence_warningAs       h/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/decomposition/tests/test_nmf.pytest_convergence_warningr)      sV     	V  	A	(0C	D<16<V<@@C 
E	D	Ds   AA c                  6   t         j                  j                  j                  d      } t        j                  | j                  dd            }dD ]F  }t        j                  |d|d      \  }}|dk  j                         s|dk  j                         sFJ  y )N*   
   )randomnndsvdnndsvdanndsvdarr   initrandom_state)	r!   r-   mtrandRandomStateabsrandnnmf_initialize_nmfany)rngdatar2   WHs        r(   test_initialize_nn_outputr?   &   sx    
))


&
&r
*C66#))B#$D;""4$QG1UKKMa!e[[]33 <    zbignore:The multiplicative update \('mu'\) solver cannot update zeros present in the initializationz6ignore:The default value of `n_components` will changec                     t        j                  d      } d}t        j                  t        |      5  t        dd      j                  |        d d d        d}t        j                  t        |      5  t               j                  |         d d d        t        dd	
      j                  |       }t        j                  t        |      5  |j                  |         d d d        t        j                  t        |      5  t        j                  |  dd       d d d        dD ]  }t        j                  dj                  |            }t        j                  t        |      5  t        d|      j                  |        d d d        t        j                  t        |      5  t        d|      j                  |        d d d        t        j                  t        |      5  t        j                  | d|       d d d         y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   GxY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ;xY w)Nr   zHInvalid beta_loss parameter: solver 'cd' does not handle beta_loss = 1.0r   r         ?)r   	beta_lossz!Negative values in data passed tor   皙?)tolr.   )r.   r/   r0   zLinit = '{}' can only be used when n_components <= min(n_samples, n_features)   r2   )r!   r"   r#   raises
ValueErrorr   r%   	transformr8   r9   reescapeformatr   )r'   msgclfr2   s       r(   test_parameter_checkingrP   0   s    	A
TC	z	-43'++A. 
.
-C	z	-		1" 
.
aS/

a
 C	z	-qb 
.	z	-QB8, 
. 2ii99?
 ]]:S1!!!$ 2]]:S1&**1- 2]]:S11d+ 21 2 
.	- 
.	- 
.	-	-	- 211111sS   H5HH'H4*I*I*IHH$'H14H>I
	I	I#	c                     t         j                  j                  j                  d      } t        j                  | j                  dd            }t        j                  |dd      \  }}t        j                  t        j                  ||      |z
        }t        j                  ||j                         z
        }||k  sJ y )Nr+   r,   r.   rG   )r!   r-   r4   r5   r6   r7   r8   r9   r   normdotmean)r;   r'   r=   r>   errorsdevs         r(   test_initialize_closerW   T   s     ))


&
&r
*C
syyR !Aq"84DAqKKq!q()E;;q1668|$DD==r@   c                     t         j                  j                  j                  d      } t        j                  | j                  dd            }t        j                  |dd      \  }}t        j                  |dd      \  }}t        j                  |ddd      \  }}||f||f||f||ffD ]  \  }}	t        |	|dk7     ||dk7             y )	Nr+   r,   r.   rG   r/   r0   r   r1   )	r!   r-   r4   r5   r6   r7   r8   r9   r   )
r;   r<   W0H0WaHaWarHarrefevls
             r(   test_initialize_variantsra   `   s     ))


&
&r
*C66#))B#$D  r9FB  r	:FB""4*1MHC"XCy2r(RI>SCqM3sax=9 ?r@   )categoryr2   )Nr.   r/   r0   r-   alpha_W)        rB   alpha_H)rd   rB   samec           	      ,   t         j                  dt        j                  dd      z
  dt        j                  dd      z   f   } | dd|||dd|}|j                  |      }|j                  dk  j                         s|dk  j                         rJ y )Ng      @r      r   r   )r   r2   rc   re   r3   r    )r!   c_arangefit_transformcomponents_r:   )r   r   r2   rc   re   r'   modeltransfs           r(   test_nmf_fit_nn_outputro   o   s     	cBIIaO#S299Q?%::;A  E   #F""Q&++-&1*1A1A1CDD1Cr@   c                     t         j                  j                  j                  d      } | 	 d	dddd|}t        j                  |j                  dd            }|j                  |      j                  dk  sJ y )
Nr+      r0   r   iX  )r2   r3   r   rh   rD   )rq   )r!   r-   r4   r5   r6   r7   r%   reconstruction_err_)r   r   r;   pnmfXs        r(   test_nmf_fit_closeru      sy    
 ))


&
&r
*C		
 D 	syyAA88A;**S000r@   c                     d} d}d}d}d}d}t         j                  j                  j                  d      }t        j                  | |g      }t        j
                  |j                  |             }t        |      D ]  }	||	| z     ||	| z  |	f<    t        j                  ||g      }
t        j
                  |j                  |            }t        |      D ]  }	||	|z     |
|	|z  |	f<    t        j                  ||
      }t        |d||d	
      }|j                  |      }t        j                  ||j                        }|j                  dk  sJ t        ||       t        |||d	|      }|j                  |      }t        j                  ||j                        }|j                  dk  sJ t        ||d       y )N   r,   rq   r   rF     r+   r   r   )r   r   rC   r   r3   rD   )r   rC   
batch_sizer3   r   atol)r!   r-   r4   r5   zerosr6   r7   rangerS   r   rk   rl   rr   r   r   )	n_samples
n_featuresr   rC   ry   r   r;   W_trueW_arrayjH_trueH_arrayrt   rm   rn   X_calcmbmodels                    r(   test_nmf_true_reconstructionr      s    IJLIJH
))


&
&r
*CXXy,/0FffSYYy)*G< #*1y=#9q9}a  !XX|Z01FffSYY|,-G:&-a,.>&?q<"# 
vvA!E   #FVVFE--.F$$s***Av!G ""1%FVVFG//0F&&,,,AvA&r@   c                     t         j                  j                  j                  d      }t        j                  |j                  dd            }t        | dddd      }|j                  |      }|j                  |      }t        ||d	
       y )Nr+   rh   rq   rF   r-   r   ư>)r   r   r2   r3   rE   rD   rz   )
r!   r-   r4   r5   r6   r7   r   rk   rJ   r   )r   r;   r'   mftts         r(   test_nmf_transformr      sx     ))


&
&r
*C
syyAA	A 
	B	AAB%r@   c                     t         j                  j                  j                  d      } t        j                  | j                  dd            }t        dddd      }|j                  |      }|j                  |      }t        ||       y )	Nr+   rh   rq   rF   r   MbP?T)r   r3   rE   fresh_restarts)
r!   r-   r4   r5   r6   r7   r   rk   rJ   r   )r;   r'   r   r   r   s        r(   test_minibatch_nmf_transformr      ss     ))


&
&r
*C
syyAA		A 
	B	AABr@   c                    t         j                  j                  d      }t        j                  |j	                  dd            }d}t        j
                  |j                         |z        }t        j                  ||j	                  |d      z        }t        j                  ||j	                  d|      z        } | d	|dddd|}|j                  |||       |j                  |       y )
Nr   rh   rq      customr   r   r2   r3   rE   r=   r>   r    )	r!   r-   r5   r6   r7   sqrtrT   rk   rJ   )	r   r   r3   r'   r   avgH_initW_initr   s	            r(   test_nmf_transform_custom_initr      s     99((+L
|!!!Q'(AL
''!&&(\)
*CVVC,,,\1==>FVVC,,,Q==>F 	!qd	NT	A OOA6O*KKNr@   )r   r   c                    t         j                  j                  d      }t        j                  |j	                  dd            }t        | dddd      }|j                  |      }|j                  |      }t        ||d       y )	Nr   rh   r   r-   rx   )r   r   r2   r3   r   r   decimal)	r!   r-   r5   r6   r7   r   rk   inverse_transformr   )r   r3   r'   r   r   A_news         r(   test_nmf_inverse_transformr      sx     99((+L
|!!!Q'(A	A 
	B#Ea2r@   c                     t         j                  j                  d      } t        j                  | j	                  dd            }t        | ddd      } |j                  |      } |j                  |      }t        ||dd	
       y )Nr   rh   r     r0   T)r3   r   r2   r   r   {Gz?)rtolr{   )	r!   r-   r5   r6   r7   r   rk   r   r   )r;   r'   r8   r   r   s        r(   test_mbnmf_inverse_transformr     sz     ))


"C
syyAA
	C 
		1	B!C!!"%EAu4d3r@   c                     t         j                  j                  j                  d      }t        j                  |j                  dd            } | ddd      j                  |       y )Nr+      r,   rw   r   r   )r   r3   rE   )r!   r-   r4   r5   r6   r7   r%   )r   r;   r'   s      r(   $test_n_components_greater_n_featuresr   !  sN     ))


&
&r
*C
syyR !A2A48<<Q?r@   sparse_containerc                    t         j                  j                  j                  d      }t        j                  |j                  dd            }d|d d dt        j                  d      z  f<    ||      } | d	dd||dddd|}t        |      }	|j                  |      }
|	j                  |      }|j                  }|	j                  }t        |
|       t        ||       y )
Nr+   r,   r   r   rq   r-   d   )r   r2   rc   re   r3   rE   r   r    )r!   r-   r4   r5   r6   r7   rj   r   rk   rl   r   )r   r   r   rc   re   r;   r'   A_sparseest1est2W1W2H1H2s                 r(   test_nmf_sparse_inputr   )  s     ))


&
&r
*C
syyR !AAaRYYq\	"H 		 	D ;D			A	B			H	%B			B			BBBr@   csc_containerc                 2   t         j                  j                  j                  d      }t        j                  |j                  dd            }d|d<    ||      } | d
dddd|}|j                  |      }|j                  |      }t        ||d	       y )Nr+   rF   r   r   )r   r   i  )r3   r   r   rD   rz   r    )	r!   r-   r4   r5   r6   r7   rk   rJ   r   )r   r   r   r;   r'   rm   A_fit_trA_trs           r(   test_nmf_sparse_transformr   L  s     ))


&
&r
*C
syyAAAdGaAM11sMfME""1%H??1DHd.r@   r-   r.   c                    d}t         j                  j                  j                  d      }t        j                  |j                  dd            }d|d d dt        j                  d      z  f<   t        || ||||dd	      \  }}}	t        ||d
| ||||dd
      \  }
}}	t        | ||||dd	      }|j                  |      }|j                  |      }t        ||       t        |
|       y )Nr   r+   r,   r   r   rq   r   r   )r2   r   r   rc   re   r3   rE   F)	r>   update_Hr2   r   r   rc   re   r3   rE   )r!   r-   r4   r5   r6   r7   rj   r   r   rk   rJ   r   )r2   r   rc   re   r   r;   r'   W_nmfr>   _W_nmf_2model_classW_clsW_cls_2s                 r(   +test_non_negative_factorization_consistencyr   _  s    H
))


&
&r
*C
syyR !AAaRYYq\	,		KE1a /	
MGQ K %%a(E##A&GE5!GW%r@   c                  0   t        j                  d      } t        }t        j                  d      }t        j                  t        |      5   || | |  dd       d d d        t        j                  d      }t        j                  t        |      5   || |  | dd       d d d        t        j                  d      }t        j                  t        |      5   || | d	| z  dd       d d d        y # 1 sw Y   xY w# 1 sw Y   _xY w# 1 sw Y   y xY w)
Nr   z/Negative values in data passed to NMF (input H)r   r   r   rG   z/Negative values in data passed to NMF (input W)z.Array passed to NMF (input H) is full of zerosr   )r!   r"   r   rK   rL   r#   rH   rI   )r'   nnmfrN   s      r(   (test_non_negative_factorization_checkingr     s     	A%D
))E
FC	z	-QA2qx( 
.
))E
FC	z	-QAqx( 
.
))D
EC	z	-Q1q5!(+ 
.	- 
.	- 
.	- 
.	-s$   C4D D4C= D	Dc                    t        j                  ||      }|dk(  rt        | |z
        dz  S || dk7     }| | dk7     }t        j                  |d|       |dk(  rTt        j                  |t        j
                  ||z        z        }||j	                         | j	                         z
  z  }|S |dk(  rR||z  }t        j                  |      | j                  z
  t        j                  t        j
                  |            z
  }|S ||z  j	                         }||dz
  ||z  j	                         z  z  }|||||dz
  z  z  j	                         z  z  }|||dz
  z  z  }|S )z~Compute the beta-divergence of X and W.H for dense array only.

    Used as a reference for testing nmf._beta_divergence.
    r   r   &.>outr   )r!   rS   r   maximumsumlogsize)	rt   r=   r>   betaWHWH_Xnonzero	X_nonzeroresdivs	            r(   _beta_divergence_denser     sX   
 
1BqyAF#a''Q!V*K!q&	IJJ{Dk2qyffY	K(?!@@Arvvx!%%'!! J 
+%ffSkAFF"RVVBFF3K%88 J $##%qRXNN,,,tyKD1H$=>CCEEEttax  Jr@   csr_containerc                    d}d}d}g d}t         j                  j                  j                  d      }|j	                  ||      }t        j
                  |dd |        | |      }t        j                  ||dd	      \  }}	|D ]\  }
t        |||	|
      }t        j                  |||	|
      }t        j                  |||	|
      }t        ||d
       t        ||d
       ^ y )N   r,   rq   )rd         ?rB         ?       @g      @r+   r   r   r-   r1      r   )r!   r-   r4   r5   r7   clipr8   r9   r   _beta_divergencer   )r   r~   r   r   beta_lossesr;   rt   X_csrr=   r>   r   r_   lossloss_csrs                 r(   test_beta_divergencer     s     IJL0K ))


&
&r
*C		)Z(AGGAq$A!Eq,XBODAq$Q1d3##Aq!T2''q!T:Cq1C15 r@   c                    d}d}d}t         j                  j                  j                  d      }|j	                  ||      }t        j
                  |dd |        | |      }t        j                  |j	                  ||            }t        j                  |j	                  ||            }t        j                  |||      }	t        j                  |||      }
|j                         \  }}t        j                  |	||f         j                         }t        ||
||f   d       t        |	j                  |j                         t        |	j                  |j                         t        |	j                   |j                          y )Nr,   rq   rF   r+   r   r   r   )r!   r-   r4   r5   r7   r   r6   r8   _special_sparse_dotnonzeroasarrayravelr   r   indicesindptrshape)r   r~   r   r   r;   rt   r   r=   r>   WH_safer   iijjWH_safe_datas                 r(   test_special_sparse_dotr     s/    IJL
))


&
&r
*C		)Z(AGGAq$A!E
syyL12A
syyz23A%%aE2G		 	 Aq	)B ]]_FB::gb"fo.446LlBr2vJC w6w~~u||4w}}ekk2r@   c                    d}d}d}d}d}d}t         j                  j                  j                  d      }|j	                  ||      }t        j
                  |      } | |      }	t        j                  ||dd	      \  }
}d
D ]  }|
j                         |j                         }}t        ||||ddd||||d      \  }}}|
j                         |j                         }}t        |	|||ddd||||d      \  }}}t        ||d       t        ||d       |dz  }|
j                         |j                         }}t        |	|||ddd||||d      \  }}}t        ||d       t        ||d        y )Nr   r,   rq   rD   r   i9  r-   r+   r1   g333333r   皙?rB   r         @r   Tr   )r2   r   r   rC   r   rc   l1_ratior3   gHz>rz   h㈵>g-C6?)r!   r-   r4   r5   r7   r6   r8   r9   copyr   r   )r   r~   r   r   alphar   n_iterr;   rt   r   rY   rZ   rC   r=   r>   r   r   r   r   r   W3H3s                         r(   %test_nmf_multiplicative_update_sparser     s   
 IJLEHF ))


&
&t
,C		)Z(A
q	A!E  LxbQFB2	wwy"'')1.
	B  wwy"'')1.
	B 	BT*BT* 	V	wwy"'')1.
	B 	BT*BT*u 3r@   c                   	 d}d}d	t         j                  j                  j                  d      }|j	                  ||      }t        j
                  |dd |        | |      }	fd}d}d	D ];  }t        j                  t        |
      5   |||       d d d         ||dz   |       = dD ]  } |||        |||        y # 1 sw Y   1xY w)Nrh   rq   rF   r+   r   r   c           	          t        | dd|dd      \  }}}t        j                  t        j                  |            rJ t        j                  t        j                  |            rJ y )Nr-   r   r   rx   )r2   r   r   rC   r3   r   )r   r!   r:   isnan)rt   rC   r=   r>   r   r   s        r(   _assert_nmf_no_nanz7test_nmf_negative_beta_loss.<locals>._assert_nmf_no_nanV  sa    ,%
1a 66"((1+&&&66"((1+&&&&r@   AWhen beta_loss <= 0 and X contains zeros, the solver may diverge.)g333333rd   r   r   )r   rB   g333333?r   r   )	r!   r-   r4   r5   r7   r   r#   rH   rI   )
r   r~   r   r;   rt   r   r   rN   rC   r   s
            @r(   test_nmf_negative_beta_lossr  I  s     IJL
))


&
&r
*C		)Z(AGGAq$A!E' NC 	]]:S1q), 21t8Y/ !
 /	1i(5), /	 21s   
CC	rC         rd   c                    t         j                  j                  d      }|j                  d      }d||dk  <   t	        | d      }d}t        j                  t        |      5   |j                  |       ddd       y# 1 sw Y   yxY w)zDCheck that an error is raised if beta_loss < 0 and X contains zeros.r   rh   rq   )r   )rC   r3   r   r   N)	r!   r-   r5   normalr   r#   rH   rI   r%   )rC   r;   rt   r8   rN   s        r(   %test_minibatch_nmf_negative_beta_lossr  o  sm     ))


"C


AAa!eH

;C
MC	z	-
 
.	-	-s   $B  B	c                    d}d}d}t         j                  j                  j                  d      }t        j                  |j                  ||            }d} | d
|d|dd|} | d
|d|dd|}	|j                  |      }
|	j                  |      }|j                  }|	j                  }t        j                  t         j                        j                  }|
|
|k     j                  }|||k     j                  }|||k     j                  }|||k     j                  }||kD  sJ ||kD  sJ d} | d
|d|dd|} | d
|d|dd|}	|j                  |      }
|	j                  |      }|j                  }|	j                  }t        j                  |      d	z  t        j                  |      d	z  z   t        j                  |
      d	z  t        j                  |      d	z  z   kD  sJ y )Nrh   rq   rF   r+   rB   r   )r   rc   r   r3   rd   r   r    )r!   r-   r4   r5   r6   r7   rk   rl   finfofloat64epsr   r   rR   )r   r   r~   r   r   r;   rt   r   regulrm   W_regulW_modelH_regulH_modelr
  W_regul_n_zerosW_model_n_zerosH_regul_n_zerosH_model_n_zeross                      r(   test_nmf_regularizationr  ~  s?    IJL
))


&
&r
*C
syyJ/0A H !	
 E  !	
 E !!!$G!!!$GGG
((2::

"
"Cgn-22Ogn-22Ogn-22Ogn-22O_,,,_,,, H !	
 E  !	
 E !!!$G!!!$GGGKK S(FKK,@S+HHG	LG$,L- - - -r@   c                    d}d}d}d}d}d}t         j                  j                  j                  d      }|j	                  ||      }t        j
                  ||       t        j                  ||dd	      \  }	}
d
D ]  }| dk7  r|dk7  r|	j                         |
j                         }}d }t        d      D ]  }t        ||||d|d|| ||ddd      \  }}}t        j                  ||||      ||z  |z  |j                         z  z   ||z  |z  |j                         z  z   |d|z
  z  |z  |dz  j                         z  z   |d|z
  z  |z  |dz  j                         z  z   }|||kD  sJ |}  y )Nr   rw   r,   rD   r   rd   r+   r-   r1   r   r   r   r   r   r   r   T)rC   r2   r   r   rc   r   rE   r   verboser3   r   )r!   r-   r4   r5   r7   r6   r8   r9   r   r}   r   r   r   )r   r~   r   r   r   r   rE   r;   rt   rY   rZ   rC   r=   r>   previous_lossr   r   s                    r(   test_nmf_decreasingr    s    IJLEH
C ))


&
&r
*C		)Z(AFF1aL  LxbQFB2	T>i1nwwy"'')1rA0#)!GAq!$ $$Q1i8("Z/!%%'9:("Y.89 1x<(:5A

DE 1x<(941zz|C	D  ($t+++ M9  3r@   c                     t         j                  j                  d      } d\  }}}t        j                  | j	                  ||            dz  }t        j                  | j	                  ||            dz  }t        j                  | j	                  ||            }d|d<   t        j                  |||d      }d|d<   t        j                  |||d      }t        ||       y )Nr   )r,   r   r   r,   )r   r   rB   )r   g       )r!   r-   r5   r6   r7   r8   r   r   )	r;   r~   r   r   rt   r=   r>   r_   r   s	            r(   test_nmf_underflowr    s    
))


"C*2'Iz<
syyJ/025A
syyL12R7A
syyz23AAdG


q!QS
1CAdG


q!QS
1CS!r@   zdtype_in, dtype_outc                    t         j                  j                  d      j                  dd      j	                  |d      }t        j
                  ||        | d
ddddd	|} |j                  |      j                  |      j                  |k(  sJ  |j                  |      j                  |k(  sJ |j                  j                  |k(  sJ y )Nr   r   rw   F)r   r   rB   r   )rc   re   rE   r3   r    )r!   r-   r5   r7   astyper6   r%   rJ   dtyperk   rl   )r   r   dtype_in	dtype_outrt   r8   s         r(   test_nmf_dtype_matchr     s      			a &&r2.55hU5KAFF1!
 	
 C 3771:"((I5553Q%%222??  I---r@   c                 V   t         j                  j                  d      j                  dd      }t        j                  ||        | d	ddd|}|j                  |j                  t         j                              } | d	ddd|}|j                  |      }t        ||d       y )
Nr   2   r   r   r   )r3   rE   r   rz   r    )	r!   r-   r5   r7   r6   rk   r  float32r   )r   r   rt   nmf32W32nmf64W64s          r(   $test_nmf_float32_float64_consistencyr(  .  s     			a &&r1-AFF1!91$9&9E


ahhrzz2
3C91$9&9E


a
 CC4(r@   c                    t         j                  j                  d      }|j                  d      }|j                  d      j	                  t         j
                        }|j                  d      }t        j                  t        d      5   | d      j                  |||       d d d        t        j                  t        d      5  t        ||d	
       d d d        y # 1 sw Y   <xY w# 1 sw Y   y xY w)Nr   )r   rw   )rw   rw   zshould have the same dtype as Xr   r   rG   r>   r=   F)r>   r   )r!   r-   r5   random_sampler  r#  r#   rH   	TypeErrorr%   r   )r   r;   rt   r>   r=   s        r(    test_nmf_custom_init_dtype_errorr-  @  s    
 ))


"C(#A(#**2::6A(#A	y(I	Jx $$Q!q$1 
K 
y(I	J"1E: 
K	J 
K	J 
K	Js   C"
C."C+.C7)r  r   r   r   r   r   r   c           	      \   t         j                  j                  j                  d      }t        j                  |j                  dd            }t        d| ddd      }t        d| ddd |j                  d   d      } |j                  |      }|j                  |      }t        ||       y )	Nr+   0   rq   r   r   )r   rC   r   r3   rE   rd   )r   rC   r3   rE   max_no_improvementry   forget_factor)r!   r-   r4   r5   r6   r7   r   r   r   rk   r   )rC   r;   rt   r8   mbnmfr=   mbWs          r(   !test_nmf_minibatchnmf_equivalencer4  Q  s     ))


&
&r
*C
syyQ A
C 771:E 	!A


a
 CAsr@   c            
      >   t         j                  j                  j                  d      } t        j                  | j                  dd            }d}d}d}t        |dd||dd d	      }t        |dd
      }t        j                  ||dd
      \  }}|j                  |||       t        |      D ]/  }	t        |      D ]  }
|j                  ||
|
|z    |d | |       ! 1 |j                  |j                  k(  sJ t        |j                  |j                         y )Nr+   r   rq   r,   r   r   r   F)r   r2   r3   r   ry   rE   r0  r   r   r2   r3   r-   r   )r!   r-   r4   r5   r6   r7   r   r8   r9   r%   r}   partial_fitn_steps_r   rl   )r;   rt   r   ry   r   mbnmf1mbnmf2r=   r>   ir   s              r(   test_minibatch_nmf_partial_fitr<  m  s   
))


&
&r
*C
syya !ALJH!	F |(QRSF 	8!DAq JJqAJ8_z"AqQ^4+:!L #  ??foo---F&&(:(:;r@   c                  :   t         j                  j                  d      } t        j                  | j	                  dd            }t        d      j                  |      } |j                         }t        t        d      D cg c]  }d| 	 c}|       yc c}w )z Check feature names out for NMF.r   r,   r   rF   )r   r8   N)
r!   r-   r5   r6   r7   r   r%   get_feature_names_outr   r}   )r3   rt   r8   namesr;  s        r(   test_feature_names_outr@    s|    99((+L
|!!"a()A
1

!
!!
$C%C%%'E5848a#aS	84e<4s   Bc                     t         j                  j                  d      j                  d      } t	        ddd      }t
        j                  }t               t
        _        	  |j                  |        |t
        _        y # |t
        _        w xY w)Nr   )r   r,   r   r   )rE   r3   r  )	r!   r-   r5   r+  r   sysstdoutr   r%   )r'   r8   
old_stdouts      r(   test_minibatch_nmf_verboserE    sd     			a ..y9A
4a
;CJCJ 

Z
s   !A? ?Bc                    t         j                  j                  d      }t        j                  |j	                  dd            } | dddd      }|j                  |      }t        j                  t        d	
      5  |j                          d d d        t        j                  t        d
      5  |j                  ||       d d d        t        j                  d      5  t        j                  d       |j                  |       d d d        t        j                  t        d
      5  |j                  |       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   XxY w# 1 sw Y   y xY w)Nr+   rh   rq   rF   r-   r   r   r   z$Missing required positional argumentr   z$Cannot use both X and Xt. Use X only)rt   XtT)recordrU   zXt was renamed X in version 1.5)rG  )r!   r-   r5   r6   r7   rk   r#   rH   r,  r   warningscatch_warningssimplefilterr$   FutureWarning)r   r;   r'   estrt   s        r(   )test_NMF_inverse_transform_Xt_deprecationrN    s$   
))


#C
syyAA
	C 	!A	y(N	O 
P 
y(N	Oa( 
P 
	 	 	-g&a  
. 
m+L	M# 
N	M 
P	O 
P	O 
.	- 
N	Ms0   =E	1E#'E!-E-	EE!E*-E6c                 $   t         j                  j                  d      }|j                  d      }|j                  d      }|j                  d      } | dddd      }|j	                  |||	       |j
                  |j                  d   k(  sJ y )
Nr   r  rh   r   r   rq   r   r   r   r   r   )r!   r-   r5   r+  rk   _n_componentsr   )r   r;   rt   r=   r>   rM  s         r(   test_nmf_n_components_autorS    s     ))


"C&!A&!A&!A
	C a1"
***r@   c                  <   t         j                  j                  d      } | j                  d      }| j                  d      }| j                  d      }t	        |||dd      \  }}}|j
                  |j
                  k(  sJ |j
                  |j
                  k(  sJ y )Nr   r  rP  rQ  r   r   )r=   r>   r2   r   )r!   r-   r5   r+  r   r   )r;   rt   r   r   r=   r>   r   s          r(   5test_nmf_non_negative_factorization_n_components_autorU    s     ))


"C&!Av&Fv&F(	VvH6GAq! 77fll"""77fll"""r@   c                      t         j                  j                  d      } | j                  d      }| j                  d      }t	        j
                  t        d      5  t        ||       d d d        y # 1 sw Y   y xY w)Nr   r  rQ  z4The default value of `n_components` will change fromr   )r>   )r!   r-   r5   r+  r#   r$   rL  r   )r;   rt   r>   s      r(   +test_nmf_n_components_default_value_warningrW    sd    
))


"C&!A&!A	S
 	#1*
 
 
s   A44A=c                     t         j                  j                  d      } | j                  d      }| j                  d      }t	        ||dd      \  }}}t        ||       |j                  |j                  d   |j                  d   fk(  sJ y )Nr   r  rQ  r   F)r>   r   r   )r!   r-   r5   r+  r   r   r   )r;   rt   r   r=   r>   r   s         r(   &test_nmf_n_components_auto_no_h_updaterY    s     ))


"C&!Av&F(	V&5GAq! Av77qwwqz6<<?3333r@   c                  &   t         j                  j                  d      } | j                  d      }| j                  d      }| j                  d      }t	        j
                  t        d      5  t        ||dd	       d d d        t	        j
                  t        d      5  t        |||dd
       d d d        t	        j
                  t        d      5  t        |||dd
       d d d        y # 1 sw Y   rxY w# 1 sw Y   JxY w# 1 sw Y   y xY w)Nr   r  rP  rQ  z0When init!='custom', provided W or H are ignoredr   Tr   )r>   r   r   )r=   r>   r   r   z8When update_H=False, the provided initial W is not used.F)r!   r-   r5   r+  r#   r$   RuntimeWarningr   )r;   rt   r   r   s       r(   test_nmf_w_h_not_used_warningr\    s     ))


"C&!Av&Fv&F	@
 	#1FS	
 
@
 	#6Dv	
	
 
X

 	#6E	

 

 

 

 
s$   .C/!C;D/C8;DDc                     t         j                  j                  d      } | j                  d      }| j                  d      }t	        ddd      }t        j                  t        d      5   |j                  ||| j                  d	      
       d d d        t        j                  t        d      5   |j                  ||| j                  d      
       d d d        y # 1 sw Y   RxY w# 1 sw Y   y xY w)Nr   r  rQ  r   r   r6  z'Array with wrong first dimension passedr   )rq   r   r*  z(Array with wrong second dimension passed)rh   rF   )	r!   r-   r5   r+  r   r#   rH   rI   r%   )r;   rt   r>   r8   s       r(    test_nmf_custom_init_shape_errorr^    s     ))


"C&!A&!A
18!
<C	z)R	SQ#++F34 
T 
z)S	TQ#++F34 
U	T 
T	S 
U	Ts   +%C!3%C-!C*-C6)PrK   rB  rI  ior   numpyr!   r#   scipyr   sklearn.baser   sklearn.decompositionr   r   r   r	   r8   sklearn.exceptionsr
   sklearn.utils._testingr   r   r   r   r   sklearn.utils.extmathr   sklearn.utils.fixesr   r   markparametrizer)   r?   filterwarningsrP   rW   ra   UserWarningro   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r#  r	  int32int64r   r(  r-  r4  r<  r@  rE  rN  rS  rU  rW  rY  r\  r^  r    r@   r(   <module>rn     s   	 
       O O - 1  / > (	HdsXt$45b7IJD	D4 <
,
,>	: +&(	HdsXt$45b7IJ !RSJ/$67E 8 0 T	 'E (	HdsXt$45b7IJ1	1-'` D$<0& 1&"  (	HdsXt$45b7IJ	  <03 13" TU4 V4  sL&9:@ ;@ (	HdsXt$45b7IJ +^n-LMJ/$67 8 0 N	8 (	HdsXt$45b7IJ .9
/ :	

/ TU(H!56<0J/$67,& 8 0 1 7 V
,&^,(< .96 :6. .93 :36 ,-.9K+ : .K+\ .9!- :!-J TUtSk2
 3 V
 (	HdsXt$45b7IJB-	B-J ,-<01! 1 .1!h"  TU	RZZ 	RZZ 	2::	2::	 (	HdsXt$45b7IJ.	 V.& TU(	HdsXt$45b7IJ	)	 V
	) TUsL&9:; ; V; &DE F6 <F= TU	  V	  sL&9:$ ;$2 sL&9:+ ;+"#+4
>5r@   