a
    �ù»j<…  ã                   @   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   sZ   d}t  d¡}tjt|d��* | f dddœ|¤Ž |¡ W d   ƒ n1 sL0    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   Zconvergence_warningÚA© r#   úJE:\soccer\ml_env\Lib\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 ]6}tj|d|dd�\}}|dk  ¡ sV|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 sD0    Y  d}tjt|d�� tƒ  |  ¡ W d   ƒ n1 s„0    Y  tdd	d
� | ¡}tjt|d�� | |  ¡ W d   ƒ n1 sÐ0    Y  tjt|d��  t 	|  dd¡ W d   ƒ n1 �s0    Y  dD ]Ø}t
 d |¡¡}tjt|d��" td|d� | ¡ W d   ƒ n1 �sj0    Y  tjt|d��" td|d� | ¡ W d   ƒ n1 �s¬0    Y  tjt|d�� t 	| d|¡ W d   ƒ n1 �sê0    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!   Ú	transformr3   r4   ÚreÚescapeÚformatr   )r"   ÚmsgZclfr-   r#   r#   r$   Útest_parameter_checking.   s0    
0,*0ÿÿ22rH   c                  C   sl   t jj d¡} t  |  dd¡¡}tj|ddd�\}}t 	t  
||¡| ¡}t 	|| ¡  ¡}||kshJ ‚d S )Nr&   r'   r)   r@   )r   r(   r/   r0   r1   r2   r3   r4   r   ÚnormÚdotÚmean)r6   r"   r8   r9   ÚerrorZsdevr#   r#   r$   Útest_initialize_closeQ   s    rM   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 ƒ qzd S )	Nr&   r'   r)   r@   r*   r+   r   r,   )	r   r(   r/   r0   r1   r2   r3   r4   r   )
r6   r7   ÚW0ÚH0ZWaZHaZWarZHarÚrefZevlr#   r#   r$   Útest_initialize_variants]   s    $rQ   r-   )Nr)   r*   r+   r(   Úalpha_W)ç        r;   Úalpha_H)rS   r;   Zsamec                 C   sl   t jdt  dd¡ dt  dd¡ f }| f d|||ddœ|¤Ž}| |¡}|jdk  ¡ sd|dk  ¡ rhJ ‚d S )Ng      @r   é   r   r   )r   r-   rR   rT   r.   )r   Zc_ÚarangeÚfit_transformÚcomponents_r5   )r   r   r-   rR   rT   r"   ÚmodelÚtransfr#   r#   r$   Útest_nmf_fit_nn_outputl   s    &ûú
r[   c                 C   sN   t jj d¡}| d	ddddœ|¤Ž}t  | dd¡¡}| |¡jdk sJJ ‚d S )
Nr&   é   r+   r   iX  )r-   r.   r   rU   r=   )r\   )r   r(   r/   r0   r1   r2   r!   Úreconstruction_err_)r   r   r6   ZpnmfÚXr#   r#   r$   Útest_nmf_fit_close†   s     ÿüûr_   c                  C   sH  d} d}d}d}d}d}t jj d¡}t  | |g¡}t  | | ¡¡}t|ƒD ]}	||	|   ||	|  |	f< qLt  ||g¡}
t  | |¡¡}t|ƒD ]}	||	|  |
|	| |	f< q�t  ||
¡}t	|d||d	d
�}| 
|¡}t  ||j¡}|jdk sòJ ‚t||ƒ t|||d	|d�}| 
|¡}t  ||j¡}|jdk �s6J ‚t||dd� d S )Né   r'   r\   r   r?   éè  r&   r   r   )r   r   r<   r   r.   r=   )r   r<   Ú
batch_sizer.   r   ©Úatol)r   r(   r/   r0   Zzerosr1   r2   ÚrangerJ   r   rW   rX   r]   r
   r   )Ú	n_samplesÚ
n_featuresr   r<   rb   r   r6   ZW_trueZW_arrayÚjÚH_trueZH_arrayr^   rY   rZ   ZX_calcZmbmodelr#   r#   r$   Útest_nmf_true_reconstruction˜   sL    û

û
rj   c                 C   sX   t jj d¡}t  | dd¡¡}t| ddddd�}| |¡}| |¡}t	||d	d
� d S )Nr&   rU   r\   r?   r(   r   ç�íµ ÷Æ°>)r   r   r-   r.   r>   r=   rc   )
r   r(   r/   r0   r1   r2   r   rW   rC   r
   )r   r6   r"   ÚmÚftÚtr#   r#   r$   Útest_nmf_transformÈ   s    û

ro   c                  C   sR   t jj d¡} t  |  dd¡¡}tddddd�}| |¡}| |¡}t	||ƒ d S )	Nr&   rU   r\   r?   r   çü©ñÒMbP?T)r   r.   r>   Úfresh_restarts)
r   r(   r/   r0   r1   r2   r   rW   rC   r
   )r6   r"   rl   rm   rn   r#   r#   r$   Útest_minibatch_nmf_transformÚ   s    ü

rr   c           	      C   s–   t j d¡}t  | dd¡¡}d}t  | ¡ | ¡}t  || |d¡ ¡}t  || d|¡ ¡}| f |ddddœ|¤Ž}|j|||d� | |¡ d S )	Nr   rU   r\   é   Úcustomrp   ©r   r-   r.   r>   ©r8   r9   )	r   r(   r0   r1   r2   ÚsqrtrK   rW   rC   )	r   r   r.   r"   r   ZavgÚH_initÚW_initrl   r#   r#   r$   Útest_nmf_transform_custom_initê   s    ÿÿrz   )r   r   c                 C   sV   t j d¡}t  | dd¡¡}t| ddddd�}| |¡}| |¡}t||dd� d S )	Nr   rU   rs   r(   ra   )r   r   r-   r.   r   r   ©Údecimal)	r   r(   r0   r1   r2   r   rW   Úinverse_transformr   )r   r.   r"   rl   rm   Ú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   rU   rs   éô  r+   T)r.   r   r-   rq   rp   ç{®Gáz„?)Zrtolrd   )	r   r(   r0   r1   r2   r   rW   r}   r
   )r6   r"   r3   rm   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'   r`   r   r�   )r   r.   r>   )r   r(   r/   r0   r1   r2   r!   )r   r6   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< ||ƒ}| f dd||ddddœ|¤Ž}t|ƒ}	| |¡}
|	 |¡}|j	}|	j	}t
|
|ƒ t
||ƒ d S )	Nr&   r'   r   r   r\   r(   éd   )r   r-   rR   rT   r.   r>   r   )r   r(   r/   r0   r1   r2   rV   r   rW   rX   r
   )r   r   r…   rR   rT   r6   r"   ZA_sparseZest1Z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< ||ƒ}| f ddddœ|¤Ž}| |¡}| |¡}t||dd	� d S )
Nr&   r?   r   r   )r   r   i�  )r.   r   r   r=   rc   )	r   r(   r/   r0   r1   r2   rW   rC   r
   )r   r   rŒ   r6   r"   rY   ZA_fit_trZ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   r\   r   r�   )r-   r   r   rR   rT   r.   r>   F)	r9   Úupdate_Hr-   r   r   rR   rT   r.   r>   )r   r(   r/   r0   r1   r2   rV   r   r   rW   rC   r
   )r-   r   rR   rT   r   r6   r"   ZW_nmfr9   Ú_ZW_nmf_2Zmodel_classZW_clsZ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 sP0    Y  t d¡}tjt|d��$ || |  | ddd� W d   ƒ n1 sœ0    Y  t d¡}tjt|d��& || | d	|  ddd� W d   ƒ n1 sê0    Y  d S )
Nr   z/Negative values in data passed to NMF (input H)r   r   rt   r@   z/Negative values in data passed to NMF (input W)z.Array passed to NMF (input H) is full of zerosr   )r   r   r   rD   rE   r   rA   rB   )r"   ZnnmfrG   r#   r#   r$   Ú(test_non_negative_factorization_checking�  s    

2
2
r‘   c           	      C   s  t  ||¡}|dkr$t| | ƒd S || dk }| | dk }t j|d|d� |dkr‚t  |t  || ¡ ¡}|| ¡ |  ¡  7 }n‚|dkr´|| }t  |¡| j t  t  |¡¡ }nP||  ¡ }||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   rJ   r   ÚmaximumÚsumÚlogÚsize)	r^   r8   r9   ÚbetaÚWHZWH_XnonzeroZ	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 ]N}
t|||	|
ƒ}t 	|||	|
¡}t 	|||	|
¡}t
||d
d� t
||d
d� qbd S )Né   r'   r\   )rS   ç      à?r;   ç      ø?ç       @g      @r&   r   r“   r(   r,   é   r{   )r   r(   r/   r0   r2   Úclipr3   r4   r�   Ú_beta_divergencer   )rž   rf   rg   r   Zbeta_lossesr6   r^   ÚX_csrr8   r9   r™   rP   ÚlossZ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'   r\   r?   r&   r   r“   r{   )r   r(   r/   r0   r2   r¤   r1   r3   Z_special_sparse_dotZnonzeroZasarrayZravelr   r   ÚindicesZindptrÚshape)rž   rf   rg   r   r6   r^   r¦   r8   r9   ZWH_saferš   ÚiiZjjZ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 ]ì}|
 ¡ | ¡  }}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'   r\   r=   r    i9  r(   r&   r,   ©g333333ó¿r   çš™™™™™É?r;   r¢   ç      @rt   Tr   )r-   rŽ   r   r<   r   rR   Úl1_ratior.   gH¯¼šò×z>rc   çñhãˆµøä>g-Cëâ6?)r   r(   r/   r0   r2   r1   r3   r4   Úcopyr   r
   )rž   rf   rg   r   Úalphar°   Zn_iterr6   r^   r¦   rN   rO   r<   r8   r9   r‡   r‰   r�   rˆ   rŠ   ZW3Z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 ]J}tjt|d�� |||ƒ W d   ƒ n1 s†0    Y  ||d |ƒ qTdD ]}|||ƒ |||ƒ q¤d S )NrU   r\   r?   r&   r   r“   c              	      sH   t | dˆ d|ddd�\}}}t t |¡¡r0J ‚t t |¡¡rDJ ‚d S )Nr(   r   r   ra   )r-   r   r   r<   r.   r   )r   r   r5   Úisnan)r^   r<   r8   r9   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ã¿rS   r   r’   )r®   r;   g333333ó?r¢   r¯   )	r   r(   r/   r0   r2   r¤   r   rA   rB   )	rž   rf   rg   r6   r^   r¦   r·   rG   r<   r#   r¶   r$   Útest_nmf_negative_beta_lossE  s     (
r¹   r<   ç      à¿rS   c                 C   sp   t j d¡}|jdd�}d||dk < t| dd�}d}tjt|d�� | |¡ W d  ƒ n1 sb0    Y  dS )zDCheck that an error is raised if beta_loss < 0 and X contains zeros.r   ©rU   r\   )r˜   )r<   r.   r¸   r   N)	r   r(   r0   Únormalr   r   rA   rB   r!   )r<   r6   r^   r3   rG   r#   r#   r$   Ú%test_minibatch_nmf_negative_beta_lossj  s    r½   c                 C   st  d}d}d}t jj d¡}t  | ||¡¡}d}| f |d|ddœ|¤Ž}| f |d|ddœ|¤Ž}	| |¡}
|	 |¡}|j}|	j}t  t j	¡j
}|
|
|k j}|||k j}|||k j}|||k j}||ksÒJ ‚||ksÞJ ‚d}| f |d|ddœ|¤Ž}| f |d|ddœ|¤Ž}	| |¡}
|	 |¡}|j}|	j}t |¡d	 t |¡d	  t |
¡d	 t |¡d	  k�spJ ‚d S )
NrU   r\   r?   r&   r;   r    )r   rR   r°   r.   rS   r¢   )r   r(   r/   r0   r1   r2   rW   rX   ZfinfoÚfloat64Úepsr˜   r   rI   )r   r   rf   rg   r   r6   r^   r°   ZregulrY   ZW_regulZW_modelZH_regulZH_modelr¿   ZW_regul_n_zerosZW_model_n_zerosZH_regul_n_zerosZH_model_n_zerosr#   r#   r$   Útest_nmf_regularizationx  sx    üûüû

üûüû

þþrÀ   c                 C   sN  d}d}d}d}d}d}t jj d¡}| ||¡}t  ||¡ tj||ddd	�\}	}
d
D ]ð}| dkrn|dkrnqX|	 ¡ |
 ¡  }}d }t	dƒD ]º}t
||||d|d|| ||dddd�\}}}t ||||¡|| | | ¡   || | | ¡   |d|  | |d  ¡   |d|  | |d  ¡   }|d u�rB||k�sBJ ‚|}qŒqXd S )NrŸ   r`   r'   r=   r    rS   r&   r(   r,   r­   r   r   rƒ   rt   r   r   T)r<   r-   r   r   rR   r   r>   r°   Úverboser.   rŽ   )r   r(   r/   r0   r2   r1   r3   r4   r²   re   r   r¥   r–   )r   rf   rg   r   r³   r°   r>   r6   r^   rN   rO   r<   r8   r9   Zprevious_lossr�   r§   r#   r#   r$   Útest_nmf_decreasingÁ  sZ    òÿþýüÿ
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(   r0   r1   r2   r3   r¥   r   )	r6   rf   rg   r   r^   r8   r9   rP   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� | f ddddd	œ|¤Ž}| |¡ |¡j|ks^J ‚| 	|¡j|ksrJ ‚|j
j|ks‚J ‚d S )
Nr   rŸ   r`   F)r²   r“   r;   r�   )rR   rT   r>   r.   )r   r(   r0   r2   Úastyper1   r!   rC   ZdtyperW   rX   )r   r   Zdtype_inZ	dtype_outr^   r3   r#   r#   r$   Útest_nmf_dtype_match  s    üûrÅ   c                 C   sx   t j d¡ dd¡}t j||d� | f dddœ|¤Ž}| | t j¡¡}| f dddœ|¤Ž}| |¡}t||dd� d S )	Nr   é2   r£   r“   rp   )r.   r>   r±   rc   )	r   r(   r0   r2   r1   rW   rÄ   Úfloat32r
   )r   r   r^   Znmf32ZW32Znmf64Z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 sl0    Y  tjtdd�� t
||d	d
� W d   ƒ n1 s¨0    Y  d S )Nr   )rŸ   r`   )r`   r`   zshould have the same dtype as Xr   rt   r@   ©r9   r8   F)r9   rŽ   )r   r(   r0   Úrandom_samplerÄ   rÇ   r   rA   Ú	TypeErrorr!   r   )r   r6   r^   r9   r8   r#   r#   r$   Ú test_nmf_custom_init_dtype_error5  s    

4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   r\   r   r   )r   r<   r   r.   r>   rS   )r   r<   r.   r>   Úmax_no_improvementrb   Zforget_factor)r   r(   r/   r0   r1   r2   r   r   rª   rW   r
   )r<   r6   r^   r3   Zmbnmfr8   Z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 ]6}	t
|ƒD ](}
|j||
|
| … |d |… |d� qŒq€|j|jksÈJ ‚t|j|jƒ d S )Nr&   r†   r\   r'   r   rt   r   F)r   r-   r.   r   rb   r>   rÎ   rq   ©r   r-   r.   r(   rv   )r   r(   r/   r0   r1   r2   r   r3   r4   r!   re   Zpartial_fitZn_steps_r
   rX   )r6   r^   r   rb   r   Zmbnmf1Zmbnmf2r8   r9   Úirh   r#   r#   r$   Útest_minibatch_nmf_partial_fita  s2    ø
ÿ
(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'   rs   r?   r¶   c                 S   s   g | ]}d |› �‘qS )r3   r#   )Ú.0rÑ   r#   r#   r$   Ú
<listcomp>‹  ó    z*test_feature_names_out.<locals>.<listcomp>N)
r   r(   r0   r1   r2   r   r!   Zget_feature_names_outr   re   )r.   r^   r3   Únamesr#   r#   r$   Útest_feature_names_out„  s
    r×   c                  C   sP   t j d¡ d¡} tdddd�}tj}tƒ t_z| | ¡ W |t_n|t_0 d S )Nr   )r†   r'   r�   r   )r>   r.   rÁ   )	r   r(   r0   rÊ   r   ÚsysÚstdoutr   r!   )r"   r3   Z
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 sd0    Y  tjtdd
�� |j	||d� W d   ƒ n1 s 0    Y  t
jdd��$ t
 d¡ | 	|¡ W d   ƒ n1 sà0    Y  tjtdd
�� |j	|d� W d   ƒ n1 �s0    Y  d S )Nr&   rU   r\   r?   r(   r   rk   ru   z$Missing required positional argumentr   z$Cannot use both X and Xt. Use X only)r^   ÚXtT)ÚrecordrL   zXt was renamed X in version 1.5)rÛ   )r   r(   r0   r1   r2   rW   r   rA   rË   r}   ÚwarningsÚcatch_warningsÚsimplefilterr    ÚFutureWarning)r   r6   r"   Úestr^   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»   ©rU   r   ©r   r\   r   rt   rk   ru   rv   )r   r(   r0   rÊ   rW   Z_n_componentsrª   )r   r6   r^   r8   r9   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sRJ ‚|j|jksbJ ‚d S )Nr   r»   rã   rä   rt   r   )r8   r9   r-   r   )r   r(   r0   rÊ   r   rª   )r6   r^   ry   rx   r8   r9   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)r9   r   rŽ   )r   r(   r0   rÊ   r   r
   rª   )r6   r^   ri   r8   r9   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^0    Y  tjtdd��" t|||ddd
� W d   ƒ n1 sž0    Y  tjtdd��" t|||ddd
� W d   ƒ n1 sÞ0    Y  d S )Nr   r»   rã   rä   z0When init!='custom', provided W or H are ignoredr   Tr   )r9   rŽ   r   )r8   r9   rŽ   r   z8When update_H=False, the provided initial W is not used.F)r   r(   r0   rÊ   r   r    ÚRuntimeWarningr   )r6   r^   ry   rx   r#   r#   r$   Útest_nmf_w_h_not_used_warningã  s,    


þ.þ
ÿ$ÿ
ÿré   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 sh0    Y  tjtdd��& |j|||  d¡d
� W d   ƒ n1 s¬0    Y  d S )Nr   r»   rä   r   rt   rÐ   z'Array with wrong first dimension passedr   )r\   r   rÉ   z(Array with wrong second dimension passed)rU   r?   )	r   r(   r0   rÊ   r   r   rA   rB   r!   )r6   r^   r9   r3   r#   r#   r$   Ú test_nmf_custom_init_shape_error  s    

4rê   )MrD   rØ   rÝ   Úior   Únumpyr   r   Zscipyr   Zsklearn.baser   Zsklearn.decompositionr   r   r   r   r3   Zsklearn.exceptionsr	   Zsklearn.utils._testingr
   r   r   r   Zsklearn.utils.extmathr   Zsklearn.utils.fixesr   r   ÚmarkZparametrizer%   r:   ÚfilterwarningsrH   rM   rQ   r[   r_   rj   ro   rr   rz   r   r‚   r„   r‹   r�   r�   r‘   r�   r¨   r¬   r´   r¹   r½   rÀ   rÂ   rÃ   rÇ   r¾   Zint32Zint64rÅ   rÈ   rÌ   rÏ   rÒ   r×   rÚ   râ   rå   ræ   rç   ré   rê   r#   r#   r#   r$   Ú<module>   s  þ
		ÿ
ÿþþ
0
þ


þþ/


N
$
þ
E
4



üþ	þþ


#


