
     h)o                     
   d dl Z d dlZd dlmZ d dlZd dlmZ d dl	m
Z
 d dlmZmZ d dlmZ d dlmZ d dlmZ d dlZd dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl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e'          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*             Z0e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           d+                                     Z1ej                             ddgeddigeddigei gg          d,             Z2ej                             dd-d.g          ej                             dd'          ej                             dd          ej                             dd           d/                                                 Z3d0 Z4d1 Z5d2 Z6d3 Z7 ee          d4             Z8d5 Z9ej                             d6d7d8g          d9             Z:ej                             ddgeddigeddigei gg          d:             Z; ee          ej                             dd'          d;                         Z<d< Z=ej                             d=ej>        ej>        fej?        ej?        fej@        ej?        fejA        ej?        fg          ej                             ddgeddigeddigei gg          d>                         ZBej                             ddgeddigeddigei gg          d?             ZCej                             deeg          d@             ZDej                             d6g dA          dB             ZEdC ZFdD ZGdE ZHdS )F    N)StringIO)linalg)NMFMiniBatchNMF)non_negative_factorization)_nmf
csc_matrix)assert_array_equal)assert_array_almost_equal)assert_almost_equal)assert_allclose)ignore_warnings)squared_norm)clone)ConvergenceWarning	Estimatorsolvercdmuc                     d}t          j        d          }t          j        t          |          5   | dddi|                    |           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max_iter    )nponespytestwarnsr   fit)r   r   convergence_warningAs       `/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/sklearn/decomposition/tests/test_nmf.pytest_convergence_warningr'      s     	V  	A	(0C	D	D	D / /	''1'''++A.../ / / / / / / / / / / / / / / / / /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datar0   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)   r0   )r   r    r!   raises
ValueErrorr   r#   	transformr6   r7   reescapeformatr   )r%   msgclfr0   s       r&   test_parameter_checkingrN   0   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,   rE   )r   r+   r2   r3   r4   r5   r6   r7   r   normdotmean)r9   r%   r;   r<   errorsdevs         r&   test_initialize_closerU   S   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,   rE   r-   r.   r   r/   )	r   r+   r2   r3   r4   r5   r6   r7   r   )
r9   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>   )categoryr0   )Nr,   r-   r.   r+   alpha_W)        r@   alpha_H)rb   r@   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   )n_componentsr0   ra   rc   r1   r   )r   c_arangefit_transformcomponents_r8   )r   r   r0   ra   rc   r%   modeltransfs           r&   test_nmf_fit_nn_outputrn   n   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  )r0   r1   r   rf   rB   )rp   )r   r+   r2   r3   r4   r5   r#   reconstruction_err_)r   r   r9   pnmfXs        r&   test_nmf_fit_closert      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*   rp   r   rD     r)   r   r   )rg   r   rA   r   r1   rB   )rg   rA   
batch_sizer1   r   atol)r   r+   r2   r3   zerosr4   r5   rangerQ   r   rj   rk   rq   r   r   )	n_samples
n_featuresrg   rA   rx   r   r9   W_trueW_arrayjH_trueH_arrayrs   rl   rm   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   rp   rD   r+   r   gư>)r   rg   r0   r1   rC   rB   ry   )
r   r+   r2   r3   r4   r5   r   rj   rH   r   )r   r9   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   rp   rD   r   MbP?T)rg   r1   rC   fresh_restarts)
r   r+   r2   r3   r4   r5   r   rj   rH   r   )r9   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   rp      customr   )rg   r0   r1   rC   r;   r<   r   )	r   r+   r3   r4   r5   sqrtrR   rj   rH   )	r   r   r1   r%   rg   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+   rw   )r   rg   r0   r1   r   r   decimal)	r   r+   r3   r4   r5   r   rj   inverse_transformr   )r   r1   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)r1   r   r0   r   r   {Gz?)rtolrz   )	r   r+   r3   r4   r5   r   rj   r   r   )r9   r%   r6   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*   rv   r   r   )rg   r1   rC   )r   r+   r2   r3   r4   r5   r#   )r   r9   r%   s      r&   $test_n_components_greater_n_featuresr     sd     )

&
&r
*
*C
syyR  !!AI2A4888<<Q?????r>   c                    ddl m} 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*   r   rp   r+   d   )rg   r0   ra   rc   r1   rC   r   r   )scipy.sparser
   r   r+   r2   r3   r4   r5   ri   r   rj   rk   r   )r   r   ra   rc   r
   r9   r%   A_sparseest1est2W1W2H1H2s                 r&   test_nmf_sparse_inputr   &  s    ('''''
)

&
&r
*
*C
syyR  !!AAaaaRYq\\	z!}}H9 		 	 	 	D ;;D			A		B			H	%	%B		B		BBBr>   c                 V   t           j        j                            d          }t          j        |                    dd                    }d|d<   t          |          } | d
dddd|}|                    |          }|                    |          }t          ||d	           d S )Nr)   rD   r   r   )r   r   i  )r1   rg   r   rB   ry   r   )
r   r+   r2   r3   r4   r5   r
   rj   rH   r   )r   r   r9   r%   rl   A_fit_trA_trs          r&   test_nmf_sparse_transformr   J  s     )

&
&r
*
*C
syyAAAdG1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   rp   r   r   )r0   r   r   ra   rc   r1   rC   F)	r<   update_Hr0   r   r   ra   rc   r1   rC   )r   r+   r2   r3   r4   r5   ri   r   r   rj   rH   r   )r0   r   ra   rc   r   r9   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   rE   z/Negative values in data passed to NMF (input W)z.Array passed to NMF (input H) is full of zerosr   )r   r    r   rI   rJ   r!   rF   rG   )r%   nnmfrL   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   rQ   r   maximumsumlogsize)	rs   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>   c                     d} d}d}g d}t           j        j                            d          }|                    | |          }t          j        |dd |           t          j        |          }t          j	        ||dd	          \  }}|D ]f}	t          ||||	          }
t          j        ||||	          }t          j        ||||	          }t          |
|d
           t          |
|d
           gd S )N   r*   rp   )rb         ?r@         ?       @g      @r)   r   r   r+   r/      r   )r   r+   r2   r3   r5   clipsp
csr_matrixr6   r7   r   _beta_divergencer   )r}   r~   rg   beta_lossesr9   rs   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                  0   d} d}d}t           j        j                            d          }|                    | |          }t          j        |dd |           t          j        |          }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*   rp   rD   r)   r   r   r   )r   r+   r2   r3   r5   r   r   r   r4   r6   _special_sparse_dotnonzeroasarrayravelr   r   indicesindptrshape)r}   r~   rg   r9   rs   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>   c                  j   d} d}d}d}d}d}t           j        j                            d          }|                    | |          }t          j        |          }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*   rp   rB   r   i9  r+   r)   r/   g333333r   皙?r@   r         @r   Tr   )r0   r   r   rA   r   ra   l1_ratior1   gHz>ry   h㈵>g-C6?)r   r+   r2   r3   r5   r4   r   r   r6   r7   copyr   r   )r}   r~   rg   alphar   n_iterr9   rs   r   rW   rX   rA   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 |           t          j        |          }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   rp   rD   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   rw   )r0   rg   r   rA   r1   r   )r   r   r8   isnan)rs   rA   r;   r<   r   rg   s        r&   _assert_nmf_no_nanz7test_nmf_negative_beta_loss.<locals>._assert_nmf_no_nanM  sv    ,%
 
 
1a 6"(1++&&&&&6"(1++&&&&&&&r>   AWhen beta_loss <= 0 and X contains zeros, the solver may diverge.)g333333rb   r   r   )r   r@   g333333?r   r   )r   r+   r2   r3   r5   r   r   r   r!   rF   rG   )	r}   r~   r9   rs   r   r   rL   rA   rg   s	           @r&   test_nmf_negative_beta_lossr   A  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--B1	4B1	rA         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   rp   )r   )rA   r1   r   r   N)	r   r+   r3   normalr   r!   rF   rG   r#   )rA   r9   rs   r6   rL   s        r&   %test_minibatch_nmf_negative_beta_lossr  e  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   rp   rD   r)   r@   r   )rg   ra   r   r1   rb   r   r   )r   r+   r2   r3   r4   r5   rj   rk   finfofloat64epsr   r   rP   )r   r   r}   r~   rg   r9   rs   r   regulrl   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  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   rv   r*   rB   r   rb   r)   r+   r/   r   r   r   r   r   r   r   T)rA   r0   rg   r   ra   r   rC   r   verboser1   r   )r   r+   r2   r3   r5   r4   r6   r7   r   r|   r   r   r   )r   r}   r~   rg   r   r   rC   r9   rs   rW   rX   rA   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   r@   )r   g       )r   r+   r3   r4   r5   r6   r   r   )	r9   r}   r~   rg   rs   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   rv   F)r   r   r@   r   )ra   rc   rC   r1   r   )r   r+   r3   r5   astyper4   r#   rH   dtyperj   rk   )r   r   dtype_in	dtype_outrs   r6   s         r&   test_nmf_dtype_matchr    s     		a  &&r2..55hU5KKAF1!
)
QC$Q
Q
Q&
Q
QC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   )r1   rC   r   ry   r   )	r   r+   r3   r5   r4   rj   r  float32r   )r   r   rs   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   rv   )rv   rv   zshould have the same dtype as Xr   r   rE   )r<   r;   F)r<   r   )r   r+   r3   random_sampler  r  r!   rF   	TypeErrorr#   r   )r   r9   rs   r<   r;   s        r&    test_nmf_custom_init_dtype_errorr(  *  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   rp   r   r   )rg   rA   r   r1   rC   rb   )rg   rA   r1   rC   max_no_improvementrx   forget_factor)r   r+   r2   r3   r4   r5   r   r   r   rj   r   )rA   r9   rs   r6   mbnmfr;   mbWs          r&   !test_nmf_minibatchnmf_equivalencer/  :  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   rp   r*   r   r   r   F)rg   r0   r1   r   rx   rC   r+  r   )rg   r0   r1   r+   r   )r   r+   r2   r3   r4   r5   r   r6   r7   r#   r|   partial_fitn_steps_r   rk   )r9   rs   rg   rx   r   mbnmf1mbnmf2r;   r<   ir   s              r&   test_minibatch_nmf_partial_fitr6  V  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   rD   )rg   c                     g | ]}d | S )r6   r   ).0r5  s     r&   
<listcomp>z*test_feature_names_out.<locals>.<listcomp>  s    444a	a		444r>   N)
r   r+   r3   r4   r5   r   r#   get_feature_names_outr   r|   )r1   rs   r6   namess       r&   test_feature_names_outr=  y  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   )rC   r1   r  )	r   r+   r3   r&  r   sysstdoutr   r#   )r%   r6   
old_stdouts      r&   test_minibatch_nmf_verboserB    s}    
	a  ..y99A
4a
;
;
;CJCJ 





Z
s   *B B)IrI   r?  ior   numpyr   r   sparser   scipyr   sklearn.decompositionr   r   r   r   r6   r
   r!   sklearn.utils._testingr   r   r   r   r   sklearn.utils.extmathr   sklearn.baser   sklearn.exceptionsr   markparametrizer'   r=   filterwarningsrN   rU   r_   UserWarningrn   rt   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(  r/  r6  r=  rB  r   r>   r&   <module>rR     s   				 



                       3 3 3 3 3 3 3 3 < < < < < < - - - - - - # # # # # #  5 5 5 5 5 5 < < < < < < 6 6 6 6 6 6 2 2 2 2 2 2 2 2 2 2 2 2 . . . . . .       1 1 1 1 1 1 (	HdsXt$45b7IJ / /	 /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  J//$677  87 0/	 < (	HdsXt$45b7IJ 
/ 
/	 
/ (H!566<00J//$677,& ,& 87 0/ 10 76,&^, , ,(  <6 6 6.3 3 36 ,---K+ K+ .-K+\!- !- !-H tSk22
 
 32
 (	HdsXt$45b7IJ B- B-	 B-J ,---<001! 1! 10 .-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= = =	  	  	  	  	 r>   