o
    Ü?Hh.  ã                   @   sV  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d„ ƒZ dd„ Z!ej "d¡dd„ ƒZ#dd„ Z$d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 d!„ ƒƒƒƒƒZ&ej ddgeddigeddigei gg¡d"d#„ ƒZ'd$d%„ Z(ej dddg¡d&d'„ ƒZ)d(d)„ Z*ej ddgeddigeddigei gg¡d*d+„ ƒZ+ej dd,¡d-d.„ ƒZ,d/d0„ Z-ej deeg¡d1d2„ ƒZ.ej ddgeddigeddigei gg¡ej d3ee ¡ej dd¡ej dd¡d4d5„ ƒƒƒƒZ/ej ddgeddigeddigei gg¡ej d6e¡d7d8„ ƒƒZ0ej dd9d:g¡ej dd,¡ej dd¡ej dd¡d;d<„ ƒƒƒƒZ1d=d>„ Z2d?d@„ Z3ej dAe¡dBdC„ ƒZ4ej dAe¡dDdE„ ƒZ5ej "dF¡ej dAe¡dGdH„ ƒƒZ6ej dAe¡dIdJ„ ƒZ7ej dKdLdMg¡dNdO„ ƒZ8ej ddgeddigeddigei gg¡dPdQ„ ƒZ9ej "dF¡ej dd,¡dRdS„ ƒƒZ:dTdU„ Z;ej dVe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¡dWdX„ ƒƒZ@ej ddgeddigeddigei gg¡dYdZ„ ƒZAej deeg¡d[d\„ ƒZBej dKg d]¢¡d^d_„ ƒZCd`da„ ZDdbdc„ ZEddde„ ZFej deeg¡dfdg„ ƒZGej deeg¡dhdi„ ƒZHdjdk„ ZIdldm„ ZJdndo„ ZKdpdq„ ZLdS )ré    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                 C   s\   d}t  d¡}tjt|d | ddddœ|¤Ž |¡ W d   ƒ d S 1 s'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ÚAr   r   úd/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/sklearn/decomposition/tests/test_nmf.pyÚtest_convergence_warning   s   ÿ
"ÿr&   c                  C   s`   t jj d¡} t  |  dd¡¡}dD ]}tj|d|dd\}}|dk  ¡ s+|dk  ¡ r-J ‚qd S )Né*   é
   )ÚrandomÚnndsvdÚnndsvdaÚnndsvdarr   ©ÚinitÚrandom_state)	r   r)   ÚmtrandÚRandomStateÚabsÚrandnÚnmfÚ_initialize_nmfÚany)ÚrngÚdatar.   ÚWÚHr   r   r%   Útest_initialize_nn_output%   s   þr;   zbignore:The multiplicative update \('mu'\) solver cannot update zeros present in the initializationc               	   C   sò  t  d¡} d}tjt|d tddd | ¡ W d   ƒ n1 s"w   Y  d}tjt|d tƒ  |  ¡ W d   ƒ n1 sBw   Y  tdd	d
 | ¡}tjt|d | |  ¡ W d   ƒ n1 shw   Y  tjt|d t 	|  dd¡ W d   ƒ n1 s‡w   Y  dD ]h}t
 d |¡¡}tjt|d td|d | ¡ W d   ƒ n1 s³w   Y  tjt|d td|d | ¡ W d   ƒ n1 sÓw   Y  tjt|d t 	| d|¡ W d   ƒ n1 sñw   Y  qŽ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)é   ©r.   )r   r   r    ÚraisesÚ
ValueErrorr   r"   Ú	transformr4   r5   ÚreÚescapeÚformatr   )r$   ÚmsgÚclfr.   r   r   r%   Útest_parameter_checking.   s@   
ÿÿÿÿþÿÿÿ€÷rJ   c                  C   sl   t jj d¡} t  |  dd¡¡}tj|ddd\}}t 	t  
||¡| ¡}t 	|| ¡  ¡}||ks4J ‚d S )Nr'   r(   r*   rA   )r   r)   r0   r1   r2   r3   r4   r5   r   ÚnormÚdotÚmean)r7   r$   r9   r:   ÚerrorÚsdevr   r   r%   Útest_initialize_closeQ   s   rP   c            
      C   s¢   t jj d¡} t  |  dd¡¡}tj|ddd\}}tj|ddd\}}tj|dddd\}}||f||f||f||ffD ]\}}	t|	|dk ||dk ƒ q=d S )	Nr'   r(   r*   rA   r+   r,   r   r-   )	r   r)   r0   r1   r2   r3   r4   r5   r   )
r7   r8   ÚW0ÚH0ÚWaÚHaÚWarÚHarÚrefÚevlr   r   r%   Útest_initialize_variants]   s   $ÿrY   r.   )Nr*   r+   r,   r)   Úalpha_W)ç        r<   Úalpha_H)r[   r<   Úsamec                 C   sl   t jdt  dd¡ dt  dd¡ f }| dd|||ddœ|¤Ž}| |¡}|jdk  ¡ s2|dk  ¡ r4J ‚d S )Ng      @r   é   r   r   )r   r.   rZ   r\   r/   r   )r   Úc_ÚarangeÚfit_transformÚcomponents_r6   )r   r   r.   rZ   r\   r$   ÚmodelÚtransfr   r   r%   Útest_nmf_fit_nn_outputl   s   &ûú
"re   c                 C   sP   t jj d¡}| 	d	ddddœ|¤Ž}t  | dd¡¡}| |¡jdk s&J ‚d S )
Nr'   é   r,   r   iX  )r.   r/   r   r^   r>   )rf   )r   r)   r0   r1   r2   r3   r"   Úreconstruction_err_)r   r   r7   ÚpnmfÚXr   r   r%   Útest_nmf_fit_close†   s   ÿüûrj   c                  C   sF  d} d}d}d}d}d}t jj d¡}t  | |g¡}t  | | ¡¡}t|ƒD ]}	||	|   ||	|  |	f< q&t  ||g¡}
t  | |¡¡}t|ƒD ]}	||	|  |
|	| |	f< qHt  ||
¡}t	|d||d	d
}| 
|¡}t  ||j¡}|jdk syJ ‚t||ƒ t|||d	|d}| 
|¡}t  ||j¡}|jdk sšJ ‚t||dd d S )Né   r(   rf   r   r@   éè  r'   r   r   )r   r   r=   r   r/   r>   )r   r=   Ú
batch_sizer/   r   ©Úatol)r   r)   r0   r1   Úzerosr2   r3   ÚrangerL   r   ra   rb   rg   r
   r   )Ú	n_samplesÚ
n_featuresr   r=   rm   r   r7   ÚW_trueÚW_arrayÚjÚH_trueÚH_arrayri   rc   rd   ÚX_calcÚmbmodelr   r   r%   Útest_nmf_true_reconstruction˜   sL   û

û
r{   c                 C   sX   t jj d¡}t  | dd¡¡}t| ddddd}| |¡}| |¡}t	||d	d
 d S )Nr'   r^   rf   r@   r)   r   çíµ ÷Æ°>)r   r   r.   r/   r?   r>   rn   )
r   r)   r0   r1   r2   r3   r   ra   rD   r
   )r   r7   r$   ÚmÚftÚtr   r   r%   Útest_nmf_transformÈ   s   û

r€   c                  C   sR   t jj d¡} t  |  dd¡¡}tddddd}| |¡}| |¡}t	||ƒ d S )	Nr'   r^   rf   r@   r   çü©ñÒMbP?T)r   r/   r?   Úfresh_restarts)
r   r)   r0   r1   r2   r3   r   ra   rD   r
   )r7   r$   r}   r~   r   r   r   r%   Útest_minibatch_nmf_transformÚ   s   ü

rƒ   c           	      C   s–   t j d¡}t  | dd¡¡}d}t  | ¡ | ¡}t  || |d¡ ¡}t  || d|¡ ¡}| d	|ddddœ|¤Ž}|j|||d | |¡ d S )
Nr   r^   rf   é   Úcustomr   ©r   r.   r/   r?   ©r9   r:   r   )	r   r)   r1   r2   r3   ÚsqrtrM   ra   rD   )	r   r   r/   r$   r   ÚavgÚH_initÚW_initr}   r   r   r%   Útest_nmf_transform_custom_initê   s   ÿÿrŒ   )r   r   c                 C   sV   t j d¡}t  | dd¡¡}t| ddddd}| |¡}| |¡}t||dd d S )	Nr   r^   r„   r)   rl   )r   r   r.   r/   r   r   ©Údecimal)	r   r)   r1   r2   r3   r   ra   Úinverse_transformr   )r   r/   r$   r}   r~   ÚA_newr   r   r%   Útest_nmf_inverse_transformþ   s   û

r‘   c                  C   sV   t j d¡} t  |  dd¡¡}t| dddd}| |¡}| |¡}t||dd	d
 d S )Nr   r^   r„   éô  r,   T)r/   r   r.   r‚   r   ç{®Gáz„?)Úrtolro   )	r   r)   r1   r2   r3   r   ra   r   r
   )r7   r$   r4   r~   r   r   r   r%   Útest_mbnmf_inverse_transform  s   ü

r•   c                 C   s8   t jj d¡}t  | dd¡¡}| dddd |¡ d S )Nr'   é   r(   rk   r   r“   )r   r/   r?   )r   r)   r0   r1   r2   r3   r"   )r   r7   r$   r   r   r%   Ú$test_n_components_greater_n_features  s   r—   Úsparse_containerc              
   C   s    t jj d¡}t  | dd¡¡}d|d d …dt  d¡ f< ||ƒ}| d	dd||ddddœ|¤Ž}t|ƒ}	| |¡}
|	 |¡}|j	}|	j	}t
|
|ƒ t
||ƒ d S )
Nr'   r(   r   r   rf   r)   éd   )r   r.   rZ   r\   r/   r?   r   r   )r   r)   r0   r1   r2   r3   r`   r   ra   rb   r
   )r   r   r˜   rZ   r\   r7   r$   ÚA_sparseÚest1Úest2ÚW1ÚW2ÚH1ÚH2r   r   r%   Útest_nmf_sparse_input'  s,   	ùø



r¡   Úcsc_containerc                 C   sl   t jj d¡}t  | dd¡¡}d|d< ||ƒ}| d
ddddœ|¤Ž}| |¡}| |¡}t||dd	 d S )Nr'   r@   r   r   )r   r   i  )r/   r   r   r>   rn   r   )	r   r)   r0   r1   r2   r3   ra   rD   r
   )r   r   r¢   r7   r$   rc   ÚA_fit_trÚA_trr   r   r%   Útest_nmf_sparse_transformJ  s   

r¥   r)   r*   c                 C   sÀ   d}t jj d¡}t  | dd¡¡}d|d d …dt  d¡ f< t|| ||||ddd	\}}}	t||d
| ||||ddd
\}
}}	t| ||||ddd	}| 	|¡}| 
|¡}t||ƒ t|
|ƒ d S )Nr’   r'   r(   r   r   rf   r   r“   )r.   r   r   rZ   r\   r/   r?   F)	r:   Úupdate_Hr.   r   r   rZ   r\   r/   r?   )r   r)   r0   r1   r2   r3   r`   r   r   ra   rD   r
   )r.   r   rZ   r\   r   r7   r$   ÚW_nmfr:   Ú_ÚW_nmf_2Úmodel_classÚW_clsÚW_cls_2r   r   r%   Ú+test_non_negative_factorization_consistency\  sN   ø
öù
	

r­   c                  C   sú   t  d¡} t}t d¡}tjt|d || | |  ddd W d   ƒ n1 s(w   Y  t d¡}tjt|d || |  | ddd W d   ƒ n1 sNw   Y  t d¡}tjt|d || | d	|  ddd W d   ƒ d S 1 svw   Y  d S )
Nr   z/Negative values in data passed to NMF (input H)r   r   r…   rA   z/Negative values in data passed to NMF (input W)z.Array passed to NMF (input H) is full of zerosr   )r   r   r   rE   rF   r    rB   rC   )r$   ÚnnmfrH   r   r   r%   Ú(test_non_negative_factorization_checking  s   

ÿ
ÿ
"ÿr¯   c           	      C   s  t  ||¡}|dkrt| | ƒd S || dk }| | dk }t j|d|d |dkrBt  |t  || ¡ ¡}|| ¡ |  ¡  7 }|S |dkr\|| }t  |¡| j t  t  |¡¡ }|S ||  ¡ }||d ||  ¡  7 }|||||d    ¡  8 }|||d   }|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   rL   r   ÚmaximumÚsumÚlogÚsize)	ri   r9   r:   ÚbetaÚWHÚWH_XnonzeroÚ	X_nonzeroÚresÚdivr   r   r%   Ú_beta_divergence_dense£  s&   ÷ ûr½   Úcsr_containerc                 C   s¶   d}d}d}g d¢}t jj d¡}| ||¡}t j|dd |d | |ƒ}tj||ddd	\}}	|D ]'}
t|||	|
ƒ}t 	|||	|
¡}t 	|||	|
¡}t
||d
d t
||d
d q1d S )Né   r(   rf   )r[   ç      à?r<   ç      ø?ç       @g      @r'   r   r±   r)   r-   é   r   )r   r)   r0   r1   r3   Úclipr4   r5   r½   Ú_beta_divergencer   )r¾   rr   rs   r   Úbeta_lossesr7   ri   ÚX_csrr9   r:   r·   rW   ÚlossÚloss_csrr   r   r%   Útest_beta_divergenceÁ  s    úrÊ   c                 C   sæ   d}d}d}t jj d¡}| ||¡}t j|dd |d | |ƒ}t  | ||¡¡}t  | ||¡¡}t |||¡}	t |||¡}
| 	¡ \}}t  
|	||f ¡ ¡ }t||
||f dd t|	j|jƒ t|	j|jƒ t|	j|jƒ d S )Nr(   rf   r@   r'   r   r±   r   )r   r)   r0   r1   r3   rÄ   r2   r4   Ú_special_sparse_dotÚnonzeroÚasarrayÚravelr   r   ÚindicesÚindptrÚshape)r¾   rr   rs   r   r7   ri   rÇ   r9   r:   ÚWH_safer¸   ÚiiÚjjÚWH_safe_datar   r   r%   Útest_special_sparse_dotÙ  s"   rÖ   z-ignore::sklearn.exceptions.ConvergenceWarningc                 C   sP  d}d}d}d}d}d}t jj d¡}| ||¡}t  |¡}| |ƒ}	tj||ddd	\}
}d
D ]v}|
 ¡ | ¡ }}t	||||ddd||||dd\}}}|
 ¡ | ¡ }}t	|	|||ddd||||dd\}}}t
||dd t
||dd |d8 }|
 ¡ | ¡ }}t	|	|||ddd||||dd\}}}t
||dd t
||dd q/d S )Nr¿   r(   rf   r>   rÀ   i9  r)   r'   r-   ©g333333ó¿r   çš™™™™™É?r<   rÂ   ç      @r…   Tr   )r.   r¦   r   r=   r   rZ   Úl1_ratior/   gH¯¼šò×z>rn   çñhãˆµøä>g-Cëâ6?)r   r)   r0   r1   r3   r2   r4   r5   Úcopyr   r
   )r¾   rr   rs   r   ÚalpharÚ   Ún_iterr7   ri   rÇ   rQ   rR   r=   r9   r:   r   rŸ   r¨   rž   r    ÚW3ÚH3r   r   r%   Ú%test_nmf_multiplicative_update_sparseõ  s~   
ôôôÆrá   c           	   	      sÂ   d}d}d‰ t jj d¡}| ||¡}t j|dd |d | |ƒ}‡ fdd„}d	}d
D ]%}tjt|d |||ƒ W d   ƒ n1 sCw   Y  ||d |ƒ q*dD ]}|||ƒ |||ƒ qRd S )Nr^   rf   r@   r'   r   r±   c              	      sH   t | dˆ d|ddd\}}}t t |¡¡rJ ‚t t |¡¡r"J ‚d S )Nr)   r   r   rl   )r.   r   r   r=   r/   r   )r   r   r6   Úisnan)ri   r=   r9   r:   r¨   ©r   r   r%   Ú_assert_nmf_no_nanR  s   ù	z7test_nmf_negative_beta_loss.<locals>._assert_nmf_no_nanúAWhen beta_loss <= 0 and X contains zeros, the solver may diverge.)g333333ã¿r[   r   r°   )rØ   r<   g333333ó?rÂ   rÙ   )	r   r)   r0   r1   r3   rÄ   r    rB   rC   )	r¾   rr   rs   r7   ri   rÇ   rä   rH   r=   r   rã   r%   Útest_nmf_negative_beta_lossE  s$   ÿ
þræ   r=   ç      à¿r[   c                 C   sr   t j d¡}|jdd}d||dk < t| dd}d}tjt|d | |¡ W d  ƒ dS 1 s2w   Y  dS )zDCheck that an error is raised if beta_loss < 0 and X contains zeros.r   ©r^   rf   )r¶   )r=   r/   rå   r   N)	r   r)   r1   Únormalr   r    rB   rC   r"   )r=   r7   ri   r4   rH   r   r   r%   Ú%test_minibatch_nmf_negative_beta_lossj  s   "ÿrê   c                 C   sr  d}d}d}t jj d¡}t  | ||¡¡}d}| d
|d|ddœ|¤Ž}| d
|d|ddœ|¤Ž}	| |¡}
|	 |¡}|j}|	j}t  t j	¡j
}|
|
|k j}|||k j}|||k j}|||k j}||ksiJ ‚||ksoJ ‚d}| d
|d|ddœ|¤Ž}| d
|d|ddœ|¤Ž}	| |¡}
|	 |¡}|j}|	j}t |¡d	 t |¡d	  t |
¡d	 t |¡d	  ks·J ‚d S )Nr^   rf   r@   r'   r<   rÀ   )r   rZ   rÚ   r/   r[   rÂ   r   )r   r)   r0   r1   r2   r3   ra   rb   ÚfinfoÚfloat64Úepsr¶   r   rK   )r   r   rr   rs   r   r7   ri   rÚ   Úregulrc   ÚW_regulÚW_modelÚH_regulÚH_modelrí   ÚW_regul_n_zerosÚW_model_n_zerosÚH_regul_n_zerosÚH_model_n_zerosr   r   r%   Útest_nmf_regularizationx  sx   üûüû

üûüû

þþr÷   c                 C   sJ  d}d}d}d}d}d}t jj d¡}| ||¡}t  ||¡ tj||ddd	\}	}
d
D ]v}| dkr7|dkr7q,|	 ¡ |
 ¡ }}d }t	dƒD ][}t
||||d|d|| ||dddd\}}}t ||||¡|| | | ¡   || | | ¡   |d|  | |d  ¡   |d|  | |d  ¡   }|d urŸ||ksŸJ ‚|}qFq,d S )Nr¿   rk   r(   r>   rÀ   r[   r'   r)   r-   r×   r   r   r–   r…   r   r   T)r=   r.   r   r   rZ   r   r?   rÚ   Úverboser/   r¦   )r   r)   r0   r1   r3   r2   r4   r5   rÜ   rq   r   rÅ   r´   )r   rr   rs   r   rÝ   rÚ   r?   r7   ri   rQ   rR   r=   r9   r:   Úprevious_lossr¨   rÈ   r   r   r%   Útest_nmf_decreasingÁ  s^   òÿþýüÿäúrú   c            	      C   s–   t j d¡} d\}}}t  |  ||¡¡d }t  |  ||¡¡d }t  |  ||¡¡}d|d< tj|||dd}d|d< tj|||dd}t||ƒ d S )Nr   )r(   r   r   r(   )r   r   r<   )r·   g       )r   r)   r1   r2   r3   r4   rÅ   r   )	r7   rr   rs   r   ri   r9   r:   rW   r»   r   r   r%   Útest_nmf_underflow÷  s   
rû   zdtype_in, dtype_outc                 C   s†   t j d¡ dd¡j|dd}t j||d | d
ddddd	œ|¤Ž}| |¡ |¡j|ks/J ‚| 	|¡j|ks9J ‚|j
j|ksAJ ‚d S )Nr   r¿   rk   F)rÜ   r±   r<   r“   )rZ   r\   r?   r/   r   )r   r)   r1   r3   Úastyper2   r"   rD   Údtypera   rb   )r   r   Údtype_inÚ	dtype_outri   r4   r   r   r%   Útest_nmf_dtype_match  s   üûr   c                 C   sx   t j d¡ dd¡}t j||d | d	dddœ|¤Ž}| | t j¡¡}| d	dddœ|¤Ž}| |¡}t||dd d S )
Nr   é2   rÃ   r±   r   )r/   r?   rÛ   rn   r   )	r   r)   r1   r3   r2   ra   rü   Úfloat32r
   )r   r   ri   Únmf32ÚW32Únmf64ÚW64r   r   r%   Ú$test_nmf_float32_float64_consistency%  s   
r  c                 C   s¸   t j d¡}| d¡}| d¡ t j¡}| d¡}tjtdd | ddj	|||d W d   ƒ n1 s6w   Y  tjtdd t
||d	d
 W d   ƒ d S 1 sUw   Y  d S )Nr   )r¿   rk   )rk   rk   zshould have the same dtype as Xr   r…   rA   ©r:   r9   F)r:   r¦   )r   r)   r1   Úrandom_samplerü   r  r    rB   Ú	TypeErrorr"   r   )r   r7   ri   r:   r9   r   r   r%   Ú test_nmf_custom_init_dtype_error5  s   

ÿ"ÿr  )rç   r   rÀ   r   rÁ   r   rÙ   c              	   C   sp   t jj d¡}t  | dd¡¡}td| dddd}td| ddd |jd dd}| 	|¡}| 	|¡}t
||ƒ d S )	Nr'   é0   rf   r   r   )r   r=   r   r/   r?   r[   )r   r=   r/   r?   Úmax_no_improvementrm   Úforget_factor)r   r)   r0   r1   r2   r3   r   r   rÑ   ra   r
   )r=   r7   ri   r4   Úmbnmfr9   ÚmbWr   r   r%   Ú!test_nmf_minibatchnmf_equivalenceE  s*   ûù
	
r  c               
   C   sÚ   t jj d¡} t  |  dd¡¡}d}d}d}t|dd||dd dd	}t|ddd
}tj||ddd
\}}|j	|||d t
|ƒD ]}	t
|ƒD ]}
|j||
|
| … |d |… |d qFq@|j|jksdJ ‚t|j|jƒ d S )Nr'   r™   rf   r(   r   r…   r   F)r   r.   r/   r   rm   r?   r  r‚   ©r   r.   r/   r)   r‡   )r   r)   r0   r1   r2   r3   r   r4   r5   r"   rq   Úpartial_fitÚn_steps_r
   rb   )r7   ri   r   rm   r   Úmbnmf1Úmbnmf2r9   r:   Úirv   r   r   r%   Útest_minibatch_nmf_partial_fita  s4   ø

ÿ&ÿr  c                  C   sR   t j d¡} t  |  dd¡¡}tdd |¡}| ¡ }tdd„ t	dƒD ƒ|ƒ dS )	z Check feature names out for NMF.r   r(   r„   r@   rã   c                 S   s   g | ]}d |› ‘qS )r4   r   )Ú.0r  r   r   r%   Ú
<listcomp>‹  s    z*test_feature_names_out.<locals>.<listcomp>N)
r   r)   r1   r2   r3   r   r"   Úget_feature_names_outr   rq   )r/   ri   r4   Únamesr   r   r%   Útest_feature_names_out„  s
   r  c                  C   sN   t j d¡ d¡} tdddd}tj}tƒ t_z| | ¡ W |t_d S |t_w )Nr   )r™   r(   r“   r   )r?   r/   rø   )	r   r)   r1   r	  r   ÚsysÚstdoutr   r"   )r$   r4   Ú
old_stdoutr   r   r%   Útest_minibatch_nmf_verboseŽ  s   r!  c                 C   s*  t j d¡}t  | dd¡¡}| ddddd}| |¡}tjtd	d
 | 	¡  W d   ƒ n1 s2w   Y  tjtdd
 |j	||d W d   ƒ n1 sPw   Y  t
jdd t
 d¡ | 	|¡ W d   ƒ n1 spw   Y  tjtdd
 |j	|d W d   ƒ d S 1 sŽw   Y  d S )Nr'   r^   rf   r@   r)   r   r|   r†   z$Missing required positional argumentr   z$Cannot use both X and Xt. Use X only)ri   ÚXtT)ÚrecordrN   zXt was renamed X in version 1.5)r"  )r   r)   r1   r2   r3   ra   r    rB   r
  r   ÚwarningsÚcatch_warningsÚsimplefilterr!   ÚFutureWarning)r   r7   r$   Úestri   r   r   r%   Ú)test_NMF_inverse_transform_Xt_deprecation›  s,   ü

ÿÿ
þ"ÿr)  c                 C   sb   t j d¡}| d¡}| d¡}| d¡}| ddddd}|j|||d	 |j|jd ks/J ‚d S )
Nr   rè   ©r^   r   ©r   rf   r   r…   r|   r†   r‡   )r   r)   r1   r	  ra   Ú_n_componentsrÑ   )r   r7   ri   r9   r:   r(  r   r   r%   Útest_nmf_n_components_autoµ  s   


ür-  c                  C   sf   t j d¡} |  d¡}|  d¡}|  d¡}t|||ddd\}}}|j|jks)J ‚|j|jks1J ‚d S )Nr   rè   r*  r+  r…   r   )r9   r:   r.   r   )r   r)   r1   r	  r   rÑ   )r7   ri   r‹   rŠ   r9   r:   r¨   r   r   r%   Ú5test_nmf_non_negative_factorization_n_components_autoÇ  s   



ÿr.  c                  C   sb   t j d¡} |  d¡}|  d¡}t||ddd\}}}t||ƒ |j|jd |jd fks/J ‚d S )Nr   rè   r+  r   F)r:   r   r¦   )r   r)   r1   r	  r   r
   rÑ   )r7   ri   rw   r9   r:   r¨   r   r   r%   Ú&test_nmf_n_components_auto_no_h_updateÕ  s   

ÿ
"r/  c                  C   sî   t j d¡} |  d¡}|  d¡}|  d¡}tjtdd t||ddd	 W d   ƒ n1 s/w   Y  tjtdd t|||ddd
 W d   ƒ n1 sOw   Y  tjtdd t|||ddd
 W d   ƒ d S 1 spw   Y  d S )Nr   rè   r*  r+  z0When init!='custom', provided W or H are ignoredr   Tr   )r:   r¦   r   )r9   r:   r¦   r   z8When update_H=False, the provided initial W is not used.F)r   r)   r1   r	  r    r!   ÚRuntimeWarningr   )r7   ri   r‹   rŠ   r   r   r%   Útest_nmf_w_h_not_used_warningã  s2   


þüþ
ÿüÿ
ÿ"ûr1  c                  C   s¼   t j d¡} |  d¡}|  d¡}tdddd}tjtdd |j|||  d	¡d
 W d   ƒ n1 s4w   Y  tjtdd |j|||  d¡d
 W d   ƒ d S 1 sWw   Y  d S )Nr   rè   r+  r   r…   r  z'Array with wrong first dimension passedr   )rf   r   r  z(Array with wrong second dimension passed)r^   r@   )	r   r)   r1   r	  r   r    rB   rC   r"   )r7   ri   r:   r4   r   r   r%   Ú test_nmf_custom_init_shape_error  s   

ÿ"ÿr2  )MrE   r  r$  Úior   Únumpyr   r    Úscipyr   Úsklearn.baser   Úsklearn.decompositionr   r   r   r   r4   Úsklearn.exceptionsr	   Úsklearn.utils._testingr
   r   r   r   Úsklearn.utils.extmathr   Úsklearn.utils.fixesr   r   ÚmarkÚparametrizer&   r;   ÚfilterwarningsrJ   rP   rY   re   rj   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  r  r  r!  r)  r-  r.  r/  r1  r2  r   r   r   r%   Ú<module>   s   þ
		ÿ
ÿþþ
0
þ


þþ/


N
$
þ

E4



üþ	þþ


#


