o
    ×tBh9w  ã                	   @   sj  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d„ ƒZ!dd„ Z"ej #d¡dd„ ƒZ$ej  ddd idfddid fd!did"fd#d$id%fd&d$id'fg¡ej  deeg¡d(d)„ ƒƒZ%ej  ddd$id*fg¡d+d,„ ƒZ&ej  dd-d id.fg¡d/d0„ ƒZ'd1d2„ Z(d3d4„ Z)ee*d5ej  ddgeddigeddigei gg¡ej  d#d6¡ej  d7d8¡ej  d9d:¡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¡dAdB„ ƒZ.dCdD„ Z/ej  ddgeddigeddigei gg¡dEdF„ ƒZ0ej  ddG¡dHdI„ ƒZ1dJdK„ Z2ej  deeg¡dLdM„ ƒZ3ej  ddgeddigeddigei gg¡ej  d7d8¡ej  d9d:¡dNdO„ ƒƒƒZ4ej  ddgeddigeddigei gg¡dPdQ„ ƒZ5ej  d#dRdSg¡ej  ddG¡ej  d7d8¡ej  d9d:¡dTdU„ ƒƒƒƒZ6dVdW„ Z7dXdY„ Z8dZd[„ Z9d\d]„ Z:eed5d^d_„ ƒZ;d`da„ Z<ej  d&dbdcg¡ddde„ ƒZ=ej  ddgeddigeddigei gg¡dfdg„ ƒZ>eed5ej  ddG¡dhdi„ ƒƒZ?djdk„ Z@ej  dlejAejAfejBejBfejCejBfejDejBfg¡ej  ddgeddigeddigei gg¡dmdn„ ƒƒZEej  ddgeddigeddigei gg¡dodp„ ƒZFej  deeg¡dqdr„ ƒZGej  d&g ds¢¡dtdu„ ƒZHdvdw„ ZIdxdy„ ZJdzd{„ ZKdS )|é    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                 C   sZ   d}t  d¡}tjt|d | dddi|¤Ž |¡ W d   ƒ d S 1 s&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ÚAr   r   ú{/var/www/html/riverr-enterprise-integrations-main/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   sf  t  d¡} d}ttd) d}tjt|d t|d | ¡ W d   ƒ n1 s)w   Y  W d   ƒ n1 s8w   Y  d}tjt|d tdd	d
 | ¡ W d   ƒ n1 sZw   Y  d}tjt|d tƒ  |  ¡ W d   ƒ n1 szw   Y  tddd | ¡}tjt|d | 	|  ¡ W d   ƒ n1 s w   Y  tjt|d t
 |  dd¡ W d   ƒ n1 s¿w   Y  dD ]j}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   Úspam©Úcategoryú>Invalid regularization parameter: got 'spam' instead of one ofr   )ÚregularizationzHInvalid beta_loss parameter: solver 'cd' does not handle beta_loss = 1.0r   ç      ð?)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   ÚFutureWarningr   ÚraisesÚ
ValueErrorr   r!   Ú	transformr3   r4   ÚreÚescapeÚformatr   )r#   ÚnameÚmsgÚclfr-   r   r   r$   Útest_parameter_checking0   sP   
ÿ€ýÿÿÿÿþÿÿÿ€÷rP   zparam, matchÚn_componentsz/Number of components must be a positive integerr   éÿÿÿÿz7Maximum number of iterations must be a positive integerrC   z0Tolerance for stopping criteria must be positiver-   ÚwrongzInvalid init parameterrA   zInvalid beta_loss parameterc                 C   sR   t  d¡}tjt|d | di |¤Ž |¡ W d   ƒ d S 1 s"w   Y  d S ©Nr   r   r   )r   r   r   rG   rH   r!   )r   Úparamr   r#   r   r   r$   Útest_nmf_common_wrong_paramsW   s   
"ÿrV   zInvalid solver parameterc                 C   óR   t  d¡}tjt|d tdi | ¤Ž |¡ W d   ƒ d S 1 s"w   Y  d S rT   )r   r   r   rG   rH   r   r!   ©rU   r   r#   r   r   r$   Útest_nmf_wrong_paramsj   ó   
	"ÿrY   Ú
batch_sizez%batch_size must be a positive integerc                 C   rW   rT   )r   r   r   rG   rH   r   r!   rX   r   r   r$   Útest_minibatch_nmf_wrong_paramsx   rZ   r\   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)   rE   )r   r(   r/   r0   r1   r2   r3   r4   r   ÚnormÚdotÚmean)r6   r#   r8   r9   ÚerrorÚsdevr   r   r$   Útest_initialize_close†   s   rb   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)   rE   r*   r+   r   r,   )	r   r(   r/   r0   r1   r2   r3   r4   r   )
r6   r7   ÚW0ÚH0ÚWaÚHaÚWarÚHarÚrefÚevlr   r   r$   Útest_initialize_variants’   s   $ÿrk   r<   )Nr)   r*   r+   r(   Úalpha_W)ç        r@   Úalpha_H)rm   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   )rQ   r-   rl   rn   r.   r   )r   Úc_ÚarangeÚfit_transformÚcomponents_r5   )r   r   r-   rl   rn   r#   ÚmodelÚtransfr   r   r$   Útest_nmf_fit_nn_output¡   s   &
ûú
"rw   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   rp   rB   )rx   )r   r(   r/   r0   r1   r2   r!   Úreconstruction_err_)r   r   r6   ÚpnmfÚXr   r   r$   Útest_nmf_fit_close¸   s   ÿüûr|   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'   rx   r   rD   éè  r&   r   r   )rQ   r   rA   r   r.   rB   )rQ   rA   r[   r.   r   ©Úatol)r   r(   r/   r0   Úzerosr1   r2   Úranger^   r   rs   rt   ry   r   r   )Ú	n_samplesÚ
n_featuresrQ   rA   r[   r   r6   ÚW_trueÚW_arrayÚjÚH_trueÚH_arrayr{   ru   rv   Ú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&   rp   rx   rD   r(   r   gíµ ÷Æ°>)r   rQ   r-   r.   rC   rB   r   )
r   r(   r/   r0   r1   r2   r   rs   rI   r   )r   r6   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&   rp   rx   rD   r   çü©ñÒMbP?T)rQ   r.   rC   Úfresh_restarts)
r   r(   r/   r0   r1   r2   r   rs   rI   r   )r6   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   rp   rx   é   Úcustomr‘   )rQ   r-   r.   rC   ©r8   r9   r   )	r   r(   r0   r1   r2   Úsqrtr_   rs   rI   )	r   r   r.   r#   rQ   Ú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   rp   r”   r(   r~   )r   rQ   r-   r.   r   r   ©Údecimal)	r   r(   r0   r1   r2   r   rs   Úinverse_transformr   )r   r.   r#   r   rŽ   ÚA_newr   r   r$   Útest_nmf_inverse_transform0  s   û

r    c                  C   sV   t j d¡} t  |  dd¡¡}t| dddd}| |¡}| |¡}t||dd	d
 d S )Nr   rp   r”   éô  r+   T)r.   r   r-   r’   r‘   ç{®Gáz„?)Úrtolr€   )	r   r(   r0   r1   r2   r   rs   rž   r   )r6   r#   r3   rŽ   rŸ   r   r   r$   Útest_mbnmf_inverse_transformA  s   ü

r¤   c                 C   s8   t jj d¡}t  | dd¡¡}| dddd |¡ d S )Nr&   é   r'   r}   r   r¢   )rQ   r.   rC   )r   r(   r/   r0   r1   r2   r!   )r   r6   r#   r   r   r$   Ú$test_n_components_greater_n_featuresQ  s   r¦   c              
   C   s¬   ddl m} 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'   r   rx   r(   éd   )rQ   r-   rl   rn   r.   rC   r   r   )Úscipy.sparser	   r   r(   r/   r0   r1   r2   rr   r   rs   rt   r   )r   r   rl   rn   r	   r6   r#   ÚA_sparseÚest1Úest2ÚW1ÚW2ÚH1ÚH2r   r   r$   Útest_nmf_sparse_inputY  s.   ùø



r°   c                 C   sl   t jj d¡}t  | dd¡¡}d|d< t|ƒ}| d
ddddœ|¤Ž}| |¡}| |¡}t	||dd	 d S )Nr&   rD   r   r   )r   r   i  )r.   rQ   r   rB   r   r   )
r   r(   r/   r0   r1   r2   r	   rs   rI   r   )r   r   r6   r#   ru   ÚA_fit_trÚA_trr   r   r$   Útest_nmf_sparse_transform}  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   rx   r   r¢   )r-   r   r   rl   rn   r.   rC   F)	r9   Úupdate_Hr-   r   r   rl   rn   r.   rC   )r   r(   r/   r0   r1   r2   rr   r   r   rs   rI   r   )r-   r   rl   rn   r   r6   r#   ÚW_nmfr9   Ú_Ú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 sLw   Y  t d	¡}tjt|d || | |  d
dd W d   ƒ n1 srw   Y  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d W d   ƒ n1 s¿w   Y  tt	d6 d}tjt|d || | d|  d
ddd W d   ƒ n1 sêw   Y  W d   ƒ d S W d   ƒ d S 1 sw   Y  d S )Nr   zGNumber of components must be a positive integer; got (n_components=1.5)r   ç      ø?r(   rE   zGNumber of components must be a positive integer; got (n_components='2')Ú2z/Negative values in data passed to NMF (input H)r   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;   )r-   r?   )
r   r   r   rJ   rK   r   rG   rH   r   rF   )r#   ÚnnmfrN   r   r   r$   Ú(test_non_negative_factorization_checkingÁ  sD   
ÿÿÿÿ
ÿ
ÿ
ÿÿý$ý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   r^   r   ÚmaximumÚsumÚlogÚsize)	r{   r8   r9   ÚbetaÚWHÚWH_XnonzeroÚ	X_nonzeroÚresÚdivr   r   r$   Ú_beta_divergence_denseà  s&   ÷ ûrÍ   c                  C   s¸   d} d}d}g d¢}t jj d¡}| | |¡}t j|dd |d t |¡}tj	||ddd	\}}|D ]'}	t
||||	ƒ}
t ||||	¡}t ||||	¡}t|
|d
d t|
|d
d q2d S )Né   r'   rx   )rm   ç      à?r@   r¼   ç       @g      @r&   r   rÁ   r(   r,   é   rœ   )r   r(   r/   r0   r2   ÚclipÚspÚ
csr_matrixr3   r4   rÍ   Ú_beta_divergencer   )rƒ   r„   rQ   Úbeta_lossesr6   r{   ÚX_csrr8   r9   rÇ   ri   Ú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	 
|||¡}	| ¡ \}
}t  ||
|f ¡ ¡ }t||	|
|f dd t|j|jƒ t|j|jƒ t|j|jƒ d S )Nr'   rx   rD   r&   r   rÁ   rœ   )r   r(   r/   r0   r2   rÒ   rÓ   rÔ   r1   r3   Ú_special_sparse_dotÚnonzeroÚasarrayÚravelr   r
   ÚindicesÚindptrÚshape)rƒ   r„   rQ   r6   r{   r×   r8   r9   ÚWH_saferÈ   ÚiiÚjjÚWH_safe_datar   r   r$   Útest_special_sparse_dot  s"   
ræ   c                  C   sR  d} d}d}d}d}d}t jj d¡}| | |¡}t  |¡}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 q0d S )NrÎ   r'   rx   rB   rÏ   i9  r(   r&   r,   ©g333333ó¿r   çš™™™™™É?r@   rÐ   ç      @r•   Tr   )r-   r´   r   rA   r   rl   Úl1_ratior.   gH¯¼šò×z>r   çñhãˆµøä>g-Cëâ6?)r   r(   r/   r0   r2   r1   rÓ   rÔ   r3   r4   Úcopyr   r   )rƒ   r„   rQ   Úalpharê   Ún_iterr6   r{   r×   rc   rd   rA   r8   r9   r¬   r®   r¶   r­   r¯   ÚW3ÚH3r   r   r$   Ú%test_nmf_multiplicative_update_sparse0  s~   

ôôôÆrñ   c               	      sÄ   d} d}d‰ t jj d¡}| | |¡}t j|dd |d t |¡}‡ fdd„}d	}d
D ]%}tj	t
|d |||ƒ W d   ƒ n1 sDw   Y  ||d |ƒ q+dD ]}|||ƒ |||ƒ qSd S )Nrp   rx   rD   r&   r   rÁ   c              	      sH   t | dˆ d|ddd\}}}t t |¡¡rJ ‚t t |¡¡r"J ‚d S )Nr(   r   r   r~   )r-   rQ   r   rA   r.   r   )r   r   r5   Úisnan)r{   rA   r8   r9   r¶   ©rQ   r   r$   Ú_assert_nmf_no_nan‹  s   ù	z7test_nmf_negative_beta_loss.<locals>._assert_nmf_no_nanúAWhen beta_loss <= 0 and X contains zeros, the solver may diverge.)g333333ã¿rm   r   rÀ   )rè   r@   g333333ó?rÐ   ré   )r   r(   r/   r0   r2   rÒ   rÓ   rÔ   r   rG   rH   )rƒ   r„   r6   r{   r×   rô   rN   rA   r   ró   r$   Útest_nmf_negative_beta_loss  s$   
ÿ
þrö   ç      à¿rm   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   )rp   rx   )rÆ   )rA   r.   rõ   r   N)	r   r(   r0   Únormalr   r   rG   rH   r!   )rA   r6   r{   r3   rN   r   r   r$   Ú%test_minibatch_nmf_negative_beta_loss£  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 )Nrp   rx   rD   r&   r@   rÏ   )rQ   rl   rê   r.   rm   rÐ   r   )r   r(   r/   r0   r1   r2   rs   rt   ÚfinfoÚfloat64ÚepsrÆ   r   r]   )r   r   rƒ   r„   rQ   r6   r{   rê   Úregulru   Ú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_regularization±  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Î   r}   r'   rB   rÏ   rm   r&   r(   r,   rç   r   r   r¥   r•   r   r   T)rA   r-   rQ   r   rl   r   rC   rê   Úverboser.   r´   )r   r(   r/   r0   r2   r1   r3   r4   rì   r‚   r   rÕ   rÄ   )r   rƒ   r„   rQ   rí   rê   rC   r6   r{   rc   rd   rA   r8   r9   Ú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(   r0   r1   r2   r3   rÕ   r   )	r6   rƒ   r„   rQ   r{   r8   r9   ri   rË   r   r   r$   Útest_nmf_underflow0  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Î   r}   F)rì   rÁ   r@   r¢   )rl   rn   rC   r.   r   )r   r(   r0   r2   Úastyper1   r!   rI   Údtypers   rt   )r   r   Údtype_inÚ	dtype_outr{   r3   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.   rC   rë   r   r   )	r   r(   r0   r2   r1   rs   r  Úfloat32r   )r   r   r{   Únmf32ÚW32Únmf64ÚW64r   r   r$   Ú$test_nmf_float32_float64_consistencyX  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Î   r}   )r}   r}   zshould have the same dtype as Xr   r•   rE   )r9   r8   F)r9   r´   )r   r(   r0   Úrandom_sampler  r  r   rG   Ú	TypeErrorr!   r   )r   r6   r{   r9   r8   r   r   r$   Ú test_nmf_custom_init_dtype_errorh  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   rx   r   r   )rQ   rA   r   r.   rC   rm   )rQ   rA   r.   rC   Úmax_no_improvementr[   Úforget_factor)r   r(   r/   r0   r1   r2   r   r   rá   rs   r   )rA   r6   r{   r3   Úmbnmfr8   ÚmbWr   r   r$   Ú!test_nmf_minibatchnmf_equivalencex  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§   rx   r'   r   r•   r   F)rQ   r-   r.   r   r[   rC   r  r’   )rQ   r-   r.   r(   r–   )r   r(   r/   r0   r1   r2   r   r3   r4   r!   r‚   Úpartial_fitÚn_steps_r   rt   )r6   r{   rQ   r[   r   Úmbnmf1Úmbnmf2r8   r9   Úir‡   r   r   r$   Útest_minibatch_nmf_partial_fit”  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”   rD   ró   c                 S   s   g | ]}d |› ‘qS )r3   r   )Ú.0r$  r   r   r$   Ú
<listcomp>¾  s    z*test_feature_names_out.<locals>.<listcomp>N)
r   r(   r0   r1   r2   r   r!   Úget_feature_names_outr
   r‚   )r.   r{   r3   Ú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   )rC   r.   r  )	r   r(   r0   r  r   ÚsysÚstdoutr   r!   )r#   r3   Ú
old_stdoutr   r   r$   Útest_minibatch_nmf_verboseÁ  s   r.  )LrJ   r+  Úior   Únumpyr   r¨   ÚsparserÓ   Úscipyr   Úsklearn.decompositionr   r   r   r   r3   r	   r   Úsklearn.utils._testingr
   r   r   r   r   Úsklearn.utils.extmathr   Úsklearn.baser   Úsklearn.exceptionsr   ÚmarkÚparametrizer%   r:   ÚfilterwarningsrP   rV   rY   r\   rb   rk   ÚUserWarningrw   r|   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$   Ú<module>   s   þ
		ÿ
#




ûþ

ÿþ

ÿþ
þþ
0
þ


þþ
/
N$
þ
E4



üþ	þþ


#
