
    0Ph.                        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 d d	lmZ d d
lmZmZ ej                            ddgeddigeddigei gg          d             Z d Z!ej        "                    d          d             Z#d Z$d Z%ej        "                    d          ej                            ddgeddigeddigei gg          ej                            dd          ej                            dd          ej                            dd          d                                                             Z&ej                            ddgeddigeddigei gg          d             Z'd Z(ej                            dddg          d             Z)d Z*ej                            ddgeddigeddigei gg          d              Z+ej                            dd!          d"             Z,d# Z-ej                            deeg          d$             Z.ej                            ddgeddigeddigei gg          ej                            d%eez             ej                            dd          ej                            dd          d&                                                 Z/ej                            ddgeddigeddigei gg          ej                            d'e          d(                         Z0ej                            dd)d*g          ej                            dd!          ej                            dd          ej                            dd          d+                                                 Z1d, Z2d- Z3ej                            d.e          d/             Z4ej                            d.e          d0             Z5ej        "                    d1          ej                            d.e          d2                         Z6ej                            d.e          d3             Z7ej                            d4d5d6g          d7             Z8ej                            ddgeddigeddigei gg          d8             Z9ej        "                    d1          ej                            dd!          d9                         Z:d: Z;ej                            d;ej<        ej<        fej=        ej=        fej>        ej=        fej?        ej=        fg          ej                            ddgeddigeddigei gg          d<                         Z@ej                            ddgeddigeddigei gg          d=             ZAej                            deeg          d>             ZBej                            d4g d?          d@             ZCdA ZDdB ZEdC ZFej                            deeg          dD             ZGej                            deeg          dE             ZHdF ZIdG ZJdH ZKdI ZLdS )J    N)StringIO)linalg)clone)NMFMiniBatchNMFnon_negative_factorization)_nmf)ConvergenceWarning)assert_allcloseassert_almost_equalassert_array_almost_equalassert_array_equal)squared_norm)CSC_CONTAINERSCSR_CONTAINERS	Estimatorsolvercdmuc                     d}t          j        d          }t          j        t          |          5   | dddd|                    |           d d d            d S # 1 swxY w Y   d S )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       d/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/decomposition/tests/test_nmf.pytest_convergence_warningr(      s     	V  	A	(0C	D	D	D D D	<16<<V<<@@CCCD D D D D D D D D D D D D D D D D Ds   AA"%A"c                  B   t           j        j                            d          } t          j        |                     dd                    }dD ]O}t          j        |d|d          \  }}|dk                                     s|dk                                     rJ Pd S )N*   
   )randomnndsvdnndsvdanndsvdarr   initrandom_state)	r    r,   mtrandRandomStateabsrandnnmf_initialize_nmfany)rngdatar1   WHs        r'   test_initialize_nn_outputr>   %   s    
)

&
&r
*
*C6#))B##$$D; 4 4"4$QGGG1UKKMM3a!e[[]]33334 4    zbignore:The multiplicative update \('mu'\) solver cannot update zeros present in the initializationc                  F   t          j        d          } d}t          j        t          |          5  t          dd                              |            d d d            n# 1 swxY w Y   d}t          j        t          |          5  t                                          |             d d d            n# 1 swxY w Y   t          dd	
                              |           }t          j        t          |          5  |                    |             d d d            n# 1 swxY w Y   t          j        t          |          5  t          j	        |  dd           d d d            n# 1 swxY w Y   dD ]!}t          j        d                    |                    }t          j        t          |          5  t          d|                              |            d d d            n# 1 swxY w Y   t          j        t          |          5  t          d|                              |            d d d            n# 1 swxY w Y   t          j        t          |          5  t          j	        | d|           d d d            n# 1 swxY w Y   #d S )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.   r/   zLinit = '{}' can only be used when n_components <= min(n_samples, n_features)   r1   )r    r!   r"   raises
ValueErrorr   r$   	transformr7   r8   reescapeformatr   )r&   msgclfr1   s       r'   test_parameter_checkingrO   .   s    	A
TC	z	-	-	- / /43'''++A.../ / / / / / / / / / / / / / /
-C	z	-	-	-  		1"              
aS///

a
 
 C	z	-	-	-  qb              	z	-	-	- - -QB8,,,- - - - - - - - - - - - - - - 2 
, 
,i99?
 
 ]:S111 	% 	%!!!$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%]:S111 	. 	.&&&**1---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.]:S111 	, 	,1d+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,
, 
,s}   %A##A'*A'#B::B>B>D''D+.D+E11E58E5%G44G8	;G8	%II	I	1JJ	J	c                     t           j        j                            d          } t          j        |                     dd                    }t          j        |dd          \  }}t          j	        t          j
        ||          |z
            }t          j	        ||                                z
            }||k    sJ d S )Nr*   r+   r-   rF   )r    r,   r3   r4   r5   r6   r7   r8   r   normdotmean)r:   r&   r<   r=   errorsdevs         r'   test_initialize_closerV   Q   s     )

&
&r
*
*C
syyR  !!Aq"8444DAqKq!q())E;q16688|$$DD======r?   c                     t           j        j                            d          } t          j        |                     dd                    }t          j        |dd          \  }}t          j        |dd          \  }}t          j        |ddd          \  }}||f||f||f||ffD ])\  }}	t          |	|dk             ||dk                        *d S )	Nr*   r+   r-   rF   r.   r/   r   r0   )	r    r,   r3   r4   r5   r6   r7   r8   r   )
r:   r;   W0H0WaHaWarHarrefevls
             r'   test_initialize_variantsr`   ]   s     )

&
&r
*
*C6#))B##$$D r999FB r	:::FB"4*1MMMHC"XCy2r(RI> : :SCqM3sax=9999: :r?   r1   )Nr-   r.   r/   r,   alpha_W)        rA   alpha_H)rb   rA   samec           	      :   t           j        dt          j        dd          z
  dt          j        dd          z   f         } | dd|||dd|}|                    |          }|j        dk                                     s|dk                                     rJ d S )Ng      @r      r   r   )r   r1   ra   rc   r2   r   )r    c_arangefit_transformcomponents_r9   )r   r   r1   ra   rc   r&   modeltransfs           r'   test_nmf_fit_nn_outputrm   l   s     	cBIaOO#S29Q??%::;AI    E   ##F"Q&++--D&1*1A1A1C1CDDDDDr?   c                     t           j        j                            d          } | 	 d	dddd|}t          j        |                    dd                    }|                    |          j        dk     sJ d S )
Nr*      r/   r   iX  )r1   r2   r   rf   rC   )ro   )r    r,   r3   r4   r5   r6   r$   reconstruction_err_)r   r   r:   pnmfXs        r'   test_nmf_fit_closers      s    
 )

&
&r
*
*C9		 
  D 	syyAA88A;;*S000000r?   c                     d} d}d}d}d}d}t           j        j                            d          }t          j        | |g          }t          j        |                    |                     }t          |          D ]}	||	| z           ||	| z  |	f<   t          j        ||g          }
t          j        |                    |                    }t          |          D ]}	||	|z           |
|	|z  |	f<   t          j        ||
          }t          |d||d	
          }|
                    |          }t          j        ||j                  }|j        dk     sJ t          ||           t          |||d	|          }|
                    |          }t          j        ||j                  }|j        dk     sJ t          ||d           d S )N   r+   ro   r   rE     r*   r   r   )r   r   rB   r   r2   rC   )r   rB   
batch_sizer2   r   atol)r    r,   r3   r4   zerosr5   r6   rangerR   r   ri   rj   rp   r   r   )	n_samples
n_featuresr   rB   rw   r   r:   W_trueW_arrayjH_trueH_arrayrr   rk   rl   X_calcmbmodels                    r'   test_nmf_true_reconstructionr      s    IJLIJH
)

&
&r
*
*CXy,/00FfSYYy))**G<   : :#*1y=#9q9}a  X|Z011FfSYY|,,--G: @ @&-a,.>&?q<"##
vvA!  E   ##FVFE-..F$s****Av!  G ""1%%FVFG/00F&,,,,AvA&&&&&&r?   c                 >   t           j        j                            d          }t          j        |                    dd                    }t          | dddd          }|                    |          }|                    |          }t          ||d	
           d S )Nr*   rf   ro   rE   r,   r   ư>)r   r   r1   r2   rD   rC   rx   )
r    r,   r3   r4   r5   r6   r   ri   rI   r   )r   r:   r&   mftts         r'   test_nmf_transformr      s     )

&
&r
*
*C
syyAA	 	 	A 
		B	AAB%%%%%%r?   c                  8   t           j        j                            d          } t          j        |                     dd                    }t          dddd          }|                    |          }|                    |          }t          ||           d S )	Nr*   rf   ro   rE   r   MbP?T)r   r2   rD   fresh_restarts)
r    r,   r3   r4   r5   r6   r   ri   rI   r   )r:   r&   r   r   r   s        r'   test_minibatch_nmf_transformr      s     )

&
&r
*
*C
syyAA		 	 	A 
		B	AABr?   c                 
   t           j                            d          }t          j        |                    dd                    }d}t          j        |                                |z            }t          j        ||                    |d          z            }t          j        ||                    d|          z            } | d	|dddd|}|                    |||           |                    |           d S )
Nr   rf   ro      customr   r   r1   r2   rD   r<   r=   r   )	r    r,   r4   r5   r6   sqrtrS   ri   rI   )	r   r   r2   r&   r   avgH_initW_initr   s	            r'   test_nmf_transform_custom_initr      s     9((++L
|!!!Q''((AL
'!&&((\)
*
*CVC,,,\1===>>FVC,,,Q===>>F	 	!qd	 	NT	 	A OOA6O***KKNNNNNr?   )r   r   c                 4   t           j                            d          }t          j        |                    dd                    }t          | dddd          }|                    |          }|                    |          }t          ||d           d S )	Nr   rf   r   r,   rv   )r   r   r1   r2   r   r   decimal)	r    r,   r4   r5   r6   r   ri   inverse_transformr   )r   r2   r&   r   r   A_news         r'   test_nmf_inverse_transformr      s     9((++L
|!!!Q''((A	 	 	A 
		B##Ea222222r?   c                      t           j                            d          } t          j        |                     dd                    }t          | ddd          } |j        |          } |j        |          }t          ||dd	
           d S )Nr   rf   r     r/   T)r2   r   r1   r   r   {Gz?)rtolry   )	r    r,   r4   r5   r6   r   ri   r   r   )r:   r&   r7   r   r   s        r'   test_mbnmf_inverse_transformr     s     )


"
"C
syyAA
	  C 
	1		B!C!"%%EAu4d333333r?   c                     t           j        j                            d          }t          j        |                    dd                    } | ddd                              |           d S )Nr*      r+   ru   r   r   )r   r2   rD   )r    r,   r3   r4   r5   r6   r$   )r   r:   r&   s      r'   $test_n_components_greater_n_featuresr     sd     )

&
&r
*
*C
syyR  !!AI2A4888<<Q?????r?   sparse_containerc                    t           j        j                            d          }t          j        |                    dd                    }d|d d dt          j        d          z  f<    ||          } | d	dd||dddd|}t          |          }	|                    |          }
|	                    |          }|j	        }|	j	        }t          |
|           t          ||           d S )
Nr*   r+   r   r   ro   r,   d   )r   r1   ra   rc   r2   rD   r   r   )r    r,   r3   r4   r5   r6   rh   r   ri   rj   r   )r   r   r   ra   rc   r:   r&   A_sparseest1est2W1W2H1H2s                 r'   test_nmf_sparse_inputr   '  s    )

&
&r
*
*C
syyR  !!AAaaaRYq\\	""H9 		 	 	 	D ;;D			A		B			H	%	%B		B		BBBr?   csc_containerc                 N   t           j        j                            d          }t          j        |                    dd                    }d|d<    ||          } | d
dddd|}|                    |          }|                    |          }t          ||d	           d S )Nr*   rE   r   r   )r   r   i  )r2   r   r   rC   rx   r   )	r    r,   r3   r4   r5   r6   ri   rI   r   )r   r   r   r:   r&   rk   A_fit_trA_trs           r'   test_nmf_sparse_transformr   J  s     )

&
&r
*
*C
syyAAAdGaAIM11sMMfMME""1%%H??1DHd......r?   r,   r-   c                    d}t           j        j                            d          }t          j        |                    dd                    }d|d d dt          j        d          z  f<   t          || ||||dd	          \  }}}	t          ||d
| ||||dd
  
        \  }
}}	t          | ||||dd	          }|	                    |          }|
                    |          }t          ||           t          |
|           d S )Nr   r*   r+   r   r   ro   r   r   )r1   r   r   ra   rc   r2   rD   F)	r=   update_Hr1   r   r   ra   rc   r2   rD   )r    r,   r3   r4   r5   r6   rh   r   r   ri   rI   r   )r1   r   ra   rc   r   r:   r&   W_nmfr=   _W_nmf_2model_classW_clsW_cls_2s                 r'   +test_non_negative_factorization_consistencyr   \  sC    H
)

&
&r
*
*C
syyR  !!AAaaaRYq\\	,		 	 	KE1a /	
  MGQ   K %%a((E##A&&GE5!!!GW%%%%%r?   c                  R   t          j        d          } t          }t          j        d          }t          j        t          |          5   || | |  dd           d d d            n# 1 swxY w Y   t          j        d          }t          j        t          |          5   || |  | dd           d d d            n# 1 swxY w Y   t          j        d          }t          j        t          |          5   || | d	| z  dd           d d d            d S # 1 swxY w Y   d S )
Nr   z/Negative values in data passed to NMF (input H)r   r   r   rF   z/Negative values in data passed to NMF (input W)z.Array passed to NMF (input H) is full of zerosr   )r    r!   r   rJ   rK   r"   rG   rH   )r&   nnmfrM   s      r'   (test_non_negative_factorization_checkingr     s    	A%D
)E
F
FC	z	-	-	- ) )QA2qx(((() ) ) ) ) ) ) ) ) ) ) ) ) ) )
)E
F
FC	z	-	-	- ) )QAqx(((() ) ) ) ) ) ) ) ) ) ) ) ) ) )
)D
E
EC	z	-	-	- , ,Q1q5!(++++, , , , , , , , , , , , , , , , , ,s6   A))A-0A-#CCC;DD #D c                    t          j        ||          }|dk    rt          | |z
            dz  S || dk             }| | dk             }t          j        |d|           |dk    rYt          j        |t          j        ||z            z            }||                                |                                 z
  z  }n|dk    rI||z  }t          j        |          | j        z
  t          j        t          j        |                    z
  }ne||z                                  }||dz
  ||z                                  z  z  }|||||dz
  z  z                                  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    rR   r   maximumsumlogsize)	rr   r<   r=   betaWHWH_Xnonzero	X_nonzeroresdivs	            r'   _beta_divergence_denser     sh   
 
1BqyyAF##a''Q!V*K!q&	IJ{Dk2222qyyfY	K(?!@!@@AArvvxx!%%''!!	+%fSkkAF"RVBF3KK%8%88$##%%qRXNN,,,,tyKD1H$=>CCEEEEttax  Jr?   csr_containerc                    d}d}d}g d}t           j        j                            d          }|                    ||          }t          j        |dd |            | |          }t          j        ||dd	          \  }}	|D ]f}
t          |||	|
          }t          j	        |||	|
          }t          j	        |||	|
          }t          ||d
           t          ||d
           gd S )N   r+   ro   )rb         ?rA         ?       @g      @r*   r   r   r,   r0      r   )r    r,   r3   r4   r6   clipr7   r8   r   _beta_divergencer   )r   r|   r}   r   beta_lossesr:   rr   X_csrr<   r=   r   r^   lossloss_csrs                 r'   test_beta_divergencer     s    IJL000K )

&
&r
*
*C		)Z((AGAq$AM!Eq,XBOOODAq 6 6$Q1d33#Aq!T22'q!T::Cq1111C1555556 6r?   c                    d}d}d}t           j        j                            d          }|                    ||          }t          j        |dd |            | |          }t          j        |                    ||                    }t          j        |                    ||                    }t          j        |||          }	t          j        |||          }
|	                                \  }}t          j
        |	||f                                                   }t          ||
||f         d           t          |	j        |j                   t          |	j        |j                   t          |	j        |j                   d S )Nr+   ro   rE   r*   r   r   r   )r    r,   r3   r4   r6   r   r5   r7   _special_sparse_dotnonzeroasarrayravelr   r   indicesindptrshape)r   r|   r}   r   r:   rr   r   r<   r=   WH_safer   iijjWH_safe_datas                 r'   test_special_sparse_dotr     s_    IJL
)

&
&r
*
*C		)Z((AGAq$AM!E
syyL1122A
syyz2233A%aE22G		 Aq	)	)B ]]__FB:gb"fo..4466LlBr2vJCCCC w666w~u|444w}ek22222r?   z-ignore::sklearn.exceptions.ConvergenceWarningc                 X   d}d}d}d}d}d}t           j        j                            d          }|                    ||          }t          j        |          } | |          }	t          j        ||dd	          \  }
}d
D ]%}|
                                |                                }}t          ||||ddd||||d          \  }}}|
                                |                                }}t          |	|||ddd||||d          \  }}}t          ||d           t          ||d           |dz  }|
                                |                                }}t          |	|||ddd||||d          \  }}}t          ||d           t          ||d           'd S )Nr   r+   ro   rC   r   i9  r,   r*   r0   g333333r   皙?rA   r         @r   Tr   )r1   r   r   rB   r   ra   l1_ratior2   gHz>rx   h㈵>g-C6?)r    r,   r3   r4   r6   r5   r7   r8   copyr   r   )r   r|   r}   r   alphar   n_iterr:   rr   r   rX   rY   rB   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M!E LxbQQQFB2 :+ :+	wwyy"''))1.
 
 
	B  wwyy"''))1.
 
 
	B 	BT****BT**** 	V	wwyy"''))1.
 
 
	B 	BT****BT*****u:+ :+r?   c                   	 d}d}d	t           j        j                            d          }|                    ||          }t          j        |dd |            | |          }	fd}d}d	D ]P}t          j        t          |
          5   |||           d d d            n# 1 swxY w Y    ||dz   |           QdD ]} |||            |||           d S )Nrf   ro   rE   r*   r   r   c           	          t          | dd|dd          \  }}}t          j        t          j        |                    rJ t          j        t          j        |                    rJ d S )Nr,   r   r   rv   )r1   r   r   rB   r2   r   )r   r    r9   isnan)rr   rB   r<   r=   r   r   s        r'   _assert_nmf_no_nanz7test_nmf_negative_beta_loss.<locals>._assert_nmf_no_nanR  sv    ,%
 
 
1a 6"(1++&&&&&6"(1++&&&&&&&r?   AWhen beta_loss <= 0 and X contains zeros, the solver may diverge.)g333333rb   r   r   )r   rA   g333333?r   r   )	r    r,   r3   r4   r6   r   r"   rG   rH   )
r   r|   r}   r:   rr   r   r   rM   rB   r   s
            @r'   test_nmf_negative_beta_lossr   E  sp    IJL
)

&
&r
*
*C		)Z((AGAq$AM!E' ' ' ' ' NC  0 0	]:S111 	- 	-q),,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-1t8Y////. - -	1i(((5),,,,- -s   B$$B(	+B(	rB         rb   c                 0   t           j                            d          }|                    d          }d||dk     <   t	          | d          }d}t          j        t          |          5   |j        |           ddd           dS # 1 swxY w Y   dS )zDCheck that an error is raised if beta_loss < 0 and X contains zeros.r   rf   ro   )r   )rB   r2   r   r   N)	r    r,   r4   normalr   r"   rG   rH   r$   )rB   r:   rr   r7   rM   s        r'   %test_minibatch_nmf_negative_beta_lossr  j  s     )


"
"C


AAa!eH

;
;
;C
MC	z	-	-	-  


                 s   -BBBc                    d}d}d}t           j        j                            d          }t          j        |                    ||                    }d} | d
|d|dd|} | d
|d|dd|}	|                    |          }
|	                    |          }|j        }|	j        }t          j        t           j	                  j
        }|
|
|k             j        }|||k             j        }|||k             j        }|||k             j        }||k    sJ ||k    sJ d} | d
|d|dd|} | d
|d|dd|}	|                    |          }
|	                    |          }|j        }|	j        }t          j        |          d	z  t          j        |          d	z  z   t          j        |
          d	z  t          j        |          d	z  z   k    sJ d S )Nrf   ro   rE   r*   rA   r   )r   ra   r   r2   rb   r   r   )r    r,   r3   r4   r5   r6   ri   rj   finfofloat64epsr   r   rQ   )r   r   r|   r}   r   r:   rr   r   regulrk   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  x  sz    IJL
)

&
&r
*
*C
syyJ//00A HI !	 
  E I !	 
  E !!!$$G!!!$$GGG
(2:


"Cgn-2Ogn-2Ogn-2Ogn-2O_,,,,_,,,, HI !	 
  E I !	 
  E !!!$$G!!!$$GGGK  S(FK,@,@S+HHG	LG$$,L- - - - - - -r?   c                 "   d}d}d}d}d}d}t           j        j                            d          }|                    ||          }t          j        ||           t          j        ||dd	          \  }	}
d
D ]}| dk    r|dk    r|	                                |
                                }}d }t          d          D ]}t          ||||d|d|| ||ddd          \  }}}t          j        ||||          ||z  |z  |                                z  z   ||z  |z  |                                z  z   |d|z
  z  |z  |dz                                  z  z   |d|z
  z  |z  |dz                                  z  z   }|||k    sJ |}ːd S )Nr   ru   r+   rC   r   rb   r*   r,   r0   r   r   r   r   r   r   r   T)rB   r1   r   r   ra   r   rD   r   verboser2   r   )r    r,   r3   r4   r6   r5   r7   r8   r   r{   r   r   r   )r   r|   r}   r   r   r   rD   r:   rr   rX   rY   rB   r<   r=   previous_lossr   r   s                    r'   test_nmf_decreasingr    s    IJLEH
C )

&
&r
*
*C		)Z((AF1aLLL LxbQQQFB2 "! "!	T>>i1nnwwyy"''))1r 	! 	!A0#)!  GAq!$ $Q1i88("Z/!%%''9:("Y.89 1x<(:5A

DE 1x<(941zz||C	D  ($t++++ MM9	!"! "!r?   c                     t           j                            d          } d\  }}}t          j        |                     ||                    dz  }t          j        |                     ||                    dz  }t          j        |                     ||                    }d|d<   t          j        |||d          }d|d<   t          j        |||d          }t          ||           d S )Nr   )r+   r   r   r+   )r   r   rA   )r   g       )r    r,   r4   r5   r6   r7   r   r   )	r:   r|   r}   r   rr   r<   r=   r^   r   s	            r'   test_nmf_underflowr    s    
)


"
"C*2'Iz<
syyJ//0025A
syyL1122R7A
syyz2233AAdG

q!QS
1
1
1CAdG

q!QS
1
1
1CS!!!!!r?   zdtype_in, dtype_outc                    t           j                            d                              dd                              |d          }t          j        ||            | d
ddddd	|} |j        |                              |          j        |k    sJ  |j	        |          j        |k    sJ |j
        j        |k    sJ d S )Nr   r   ru   F)r   r   rA   r   )ra   rc   rD   r2   r   )r    r,   r4   r6   astyper5   r$   rI   dtyperi   rj   )r   r   dtype_in	dtype_outrr   r7   s         r'   test_nmf_dtype_matchr    s     		a  &&r2..55hU5KKAF1!
) 	 
  C 371::""(I55553Q%2222? I------r?   c                 v   t           j                            d                              dd          }t          j        ||            | d	ddd|}|                    |                    t           j                            } | d	ddd|}|                    |          }t          ||d           d S )
Nr   2   r   r   r   )r2   rD   r   rx   r   )	r    r,   r4   r6   r5   ri   r  float32r   )r   r   rr   nmf32W32nmf64W64s          r'   $test_nmf_float32_float64_consistencyr&  %  s     		a  &&r1--AF1!I91$99&99E


ahhrz22
3
3CI91$99&99E


a
 
 CC4((((((r?   c                 2   t           j                            d          }|                    d          }|                    d                              t           j                  }|                    d          }t          j        t          d          5   | d          	                    |||           d d d            n# 1 swxY w Y   t          j        t          d          5  t          ||d	
           d d d            d S # 1 swxY w Y   d S )Nr   )r   ru   )ru   ru   zshould have the same dtype as Xr   r   rF   r=   r<   F)r=   r   )r    r,   r4   random_sampler  r!  r"   rG   	TypeErrorr$   r   )r   r:   rr   r=   r<   s        r'    test_nmf_custom_init_dtype_errorr+  5  s    )


"
"C(##A(##**2:66A(##A	y(I	J	J	J 2 2	x   $$Q!q$1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 
y(I	J	J	J ; ;"1E::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;s$   #CC
C
,DDD)r   r   r   r   r   r   r   c           	      r   t           j        j                            d          }t          j        |                    dd                    }t          d| ddd          }t          d| ddd |j        d         d          } |j	        |          }|	                    |          }t          ||           d S )	Nr*   0   ro   r   r   )r   rB   r   r2   rD   rb   )r   rB   r2   rD   max_no_improvementrw   forget_factor)r    r,   r3   r4   r5   r6   r   r   r   ri   r   )rB   r:   rr   r7   mbnmfr<   mbWs          r'   !test_nmf_minibatchnmf_equivalencer2  E  s     )

&
&r
*
*C
syyQ  A
  C 71:  E 	!A


a
 
 CAsr?   c            
      X   t           j        j                            d          } t          j        |                     dd                    }d}d}d}t          |dd||dd d	          }t          |dd
          }t          j        ||dd
          \  }}|	                    |||           t          |          D ]?}	t          |          D ]-}
|                    ||
|
|z            |d |         |           .@|j        |j        k    sJ t          |j        |j                   d S )Nr*   r   ro   r+   r   r   r   F)r   r1   r2   r   rw   rD   r.  r   r   r1   r2   r,   r   )r    r,   r3   r4   r5   r6   r   r7   r8   r$   r{   partial_fitn_steps_r   rj   )r:   rr   r   rw   r   mbnmf1mbnmf2r<   r=   ir   s              r'   test_minibatch_nmf_partial_fitr:  a  sf   
)

&
&r
*
*C
syya  !!ALJH!	 	 	F |(QRSSSF 	8!  DAq JJqAJ8__ M Mz"" 	M 	MAqQ^!34+:+!LLLL	M ?fo----F&(:;;;;;r?   c                  F   t           j                            d          } t          j        |                     dd                    }t          d                              |          } |j                    }t          d t          d          D             |           dS )z Check feature names out for NMF.r   r+   r   rE   )r   c                     g | ]}d | S )r7   r   ).0r9  s     r'   
<listcomp>z*test_feature_names_out.<locals>.<listcomp>  s    444a	a		444r?   N)
r    r,   r4   r5   r6   r   r$   get_feature_names_outr   r{   )r2   rr   r7   namess       r'   test_feature_names_outrA    s    9((++L
|!!"a(())A
1



!
!!
$
$C%C%''E44588444e<<<<<r?   c                  2   t           j                            d                              d          } t	          ddd          }t
          j        }t                      t
          _        	  |j        |            |t
          _        d S # |t
          _        w xY w)Nr   )r   r+   r   r   )rD   r2   r  )	r    r,   r4   r)  r   sysstdoutr   r$   )r&   r7   
old_stdouts      r'   test_minibatch_nmf_verboserF    s}    
	a  ..y99A
4a
;
;
;CJCJ 





Z
s   *B Bc                 >   t           j                            d          }t          j        |                    dd                    } | dddd          }|                    |          }t          j        t          d	
          5  |	                                 d d d            n# 1 swxY w Y   t          j        t          d
          5  |	                    ||           d d d            n# 1 swxY w Y   t          j        d          5  t          j        d           |	                    |           d d d            n# 1 swxY w Y   t          j        t          d
          5  |	                    |           d d d            d S # 1 swxY w Y   d S )Nr*   rf   ro   rE   r,   r   r   r   z$Missing required positional argumentr   z$Cannot use both X and Xt. Use X only)rr   XtT)recordrT   zXt was renamed X in version 1.5)rH  )r    r,   r4   r5   r6   ri   r"   rG   r*  r   warningscatch_warningssimplefilterr#   FutureWarning)r   r:   r&   estrr   s        r'   )test_NMF_inverse_transform_Xt_deprecationrO    s   
)


#
#C
syyAA
)	  C 	!A	y(N	O	O	O                                  
y(N	O	O	O ) )a((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) 
	 	-	-	- ! !g&&&a   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 
m+L	M	M	M $ $###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $sH   B((B,/B,C22C69C6*EEE.FFFc                 @   t           j                            d          }|                    d          }|                    d          }|                    d          } | dddd          }|                    |||	           |j        |j        d         k    sJ d S )
Nr   r  rf   r   r   ro   r   r   r   r   r   )r    r,   r4   r)  ri   _n_componentsr   )r   r:   rr   r<   r=   rN  s         r'   test_nmf_n_components_autorT    s     )


"
"C&!!A&!!A&!!A
)	  C a1"""
******r?   c                  :   t           j                            d          } |                     d          }|                     d          }|                     d          }t	          |||dd          \  }}}|j        |j        k    sJ |j        |j        k    sJ d S )Nr   r  rQ  rR  r   r   )r<   r=   r1   r   )r    r,   r4   r)  r   r   )r:   rr   r   r   r<   r=   r   s          r'   5test_nmf_non_negative_factorization_n_components_autorV    s     )


"
"C&!!Av&&Fv&&F(	VvH6  GAq! 7fl""""7fl""""""r?   c                  0   t           j                            d          } |                     d          }|                     d          }t	          ||dd          \  }}}t          ||           |j        |j        d         |j        d         fk    sJ d S )Nr   r  rR  r   F)r=   r   r   )r    r,   r4   r)  r   r   r   )r:   rr   r   r<   r=   r   s         r'   &test_nmf_n_components_auto_no_h_updaterX    s     )


"
"C&!!Av&&F(	V&5  GAq! Av7qwqz6<?3333333r?   c                  l   t           j                            d          } |                     d          }|                     d          }|                     d          }t	          j        t          d          5  t          ||dd	           d d d            n# 1 swxY w Y   t	          j        t          d          5  t          |||dd
           d d d            n# 1 swxY w Y   t	          j        t          d          5  t          |||dd
           d d d            d S # 1 swxY w Y   d S )Nr   r  rQ  rR  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,   r4   r)  r"   r#   RuntimeWarningr   )r:   rr   r   r   s       r'   test_nmf_w_h_not_used_warningr[    s-    )


"
"C&!!Av&&Fv&&F	@
 
 
 T T 	#1FSSSS	T T T T T T T T T T T T T T T 
@
 
 
 
 
 	#6Dv	
 	
 	
 	
	
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
X
 
 
 
 

 	#6E	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s6   :BB!B C!!C%(C%D))D-0D-c                  "   t           j                            d          } |                     d          }|                     d          }t	          ddd          }t          j        t          d          5   |j        |||                     d	          
           d d d            n# 1 swxY w Y   t          j        t          d          5   |j        |||                     d          
           d d d            d S # 1 swxY w Y   d S )Nr   r  rR  r   r   r4  z'Array with wrong first dimension passedr   )ro   r   r(  z(Array with wrong second dimension passed)rf   rE   )	r    r,   r4   r)  r   r"   rG   rH   r$   )r:   rr   r=   r7   s       r'    test_nmf_custom_init_shape_errorr]    s    )


"
"C&!!A&!!A
18!
<
<
<C	z)R	S	S	S 5 5Q#++F3344445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 
z)S	T	T	T 5 5Q#++F3344445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5s$   7'B**B.1B.'DDD)MrJ   rC  rJ  ior   numpyr    r"   scipyr   sklearn.baser   sklearn.decompositionr   r   r   r	   r7   sklearn.exceptionsr
   sklearn.utils._testingr   r   r   r   sklearn.utils.extmathr   sklearn.utils.fixesr   r   markparametrizer(   r>   filterwarningsrO   rV   r`   rm   rs   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+  r2  r:  rA  rF  rO  rT  rV  rX  r[  r]  r   r?   r'   <module>rl     s'
   				 



                         O O O O O O O O O O - - - - - - 1 1 1 1 1 1            / . . . . . > > > > > > > > (	HdsXt$45b7IJ D D	 D4 4 4  , ,	 ,>	 	 	: : :   (	HdsXt$45b7IJ  !RSSJ//$677E E 87 0/ TS	 	 E (	HdsXt$45b7IJ 1 1	 1-' -' -'` D$<00& & 10&"    (	HdsXt$45b7IJ  	   <003 3 103 4 4 4  sL&9::@ @ ;:@ (	HdsXt$45b7IJ  +^n-LMMJ//$677  87 0/ NM	 8 (	HdsXt$45b7IJ  .99
/ 
/ :9	 

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