§
    ¦˜ºh¡q  ã                   ó~
  — 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 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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$„ Z0ej          !                    deeg¦  «        d%„ ¦   «         Z1e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&„ ¦   «         ¦   «         ¦   «         Z2ej          !                    ddgeddigeddigei gg¦  «        d'„ ¦   «         Z3ej          !                    dd(d)g¦  «        ej          !                    dd"¦  «        ej          !                    dd¦  «        ej          !                    dd¦  «        d*„ ¦   «         ¦   «         ¦   «         ¦   «         Z4d+„ Z5d,„ Z6d-„ Z7d.„ Z8 ee¬¦  «        d/„ ¦   «         Z9d0„ Z:ej          !                    d1d2d3g¦  «        d4„ ¦   «         Z;ej          !                    ddgeddigeddigei gg¦  «        d5„ ¦   «         Z< ee¬¦  «        ej          !                    dd"¦  «        d6„ ¦   «         ¦   «         Z=d7„ Z>ej          !                    d8ej?        ej?        fej@        ej@        fejA        ej@        fejB        ej@        fg¦  «        ej          !                    ddgeddigeddigei gg¦  «        d9„ ¦   «         ¦   «         ZCej          !                    ddgeddigeddigei gg¦  «        d:„ ¦   «         ZDej          !                    deeg¦  «        d;„ ¦   «         ZEej          !                    d1g d<¢¦  «        d=„ ¦   «         ZFd>„ ZGd?„ ZHd@„ ZIdA„ ZJdS )Bé    N)ÚStringIO)Úlinalg©Ú
csc_matrix)Úclone)ÚNMFÚMiniBatchNMFÚnon_negative_factorization)Ú_nmf)ÚConvergenceWarning)Úassert_allcloseÚassert_almost_equalÚassert_array_almost_equalÚassert_array_equalÚignore_warnings)Úsquared_normÚ	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       úl/var/www/html/services/rag-service/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Ø˜’U—K’K‘M”MÐ3 a¨!¢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à
T€CÝ	Œ•z¨Ð	-Ñ	-Ô	-ð /ð /Ý�4 3Ð'Ñ'Ô'×+Ò+¨AÑ.Ô.Ð.ð/ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /à
-€CÝ	Œ•z¨Ð	-Ñ	-Ô	-ð ð Ý‰Œ�	Š	�1�"‰Œˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð å
ˆa�Sˆ/‰/Œ/×
Ò
˜aÑ
 Ô
 €CÝ	Œ•z¨Ð	-Ñ	-Ô	-ð ð Ø�Š�q�bÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð å	Œ•z¨Ð	-Ñ	-Ô	-ð -ð -ÝÔ˜Q˜B  8Ñ,Ô,Ð,ð-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -ð 2ð 
,ñ 
,ˆÝŒið9ß9?ºÀ¹¼ñ
ô 
ˆõ Œ]�:¨SÐ1Ñ1Ô1ð 	%ð 	%Ý�˜ÐÑÔ×!Ò! !Ñ$Ô$Ð$ð	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%åŒ]�:¨SÐ1Ñ1Ô1ð 	.ð 	.Ý˜ Ð&Ñ&Ô&×*Ò*¨1Ñ-Ô-Ð-ð	.ð 	.ð 	.ñ 	.ô 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.øøøð 	.ð 	.ð 	.ð 	.åŒ]�:¨SÐ1Ñ1Ô1ð 	,ð 	,ÝÔ  1 dÑ+Ô+Ð+ð	,ð 	,ð 	,ñ 	,ô 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,øøøð 	,ð 	,ð 	,ð 	,ùð
,ð 
,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Ý
Œˆs�yŠy˜˜RÑ Ô Ñ!Ô!€AÝÔ˜q "¨8Ð4Ñ4Ô4�D€A€qÝŒK�œ˜q !™œ qÑ(Ñ)Ô)€EÝŒ;�q˜1Ÿ6š6™8œ8‘|Ñ$Ô$€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Ô9�F€BˆÝÔ   r°	Ð:Ñ:Ô:�F€BˆÝÔ" 4¨°*È1ÐMÑMÔM�H€Cˆà˜"�X  C˜y¨2¨r¨(°R¸°IÐ>ð :ð :‰ˆˆSÝ˜C  q¢œM¨3¨s°aªx¬=Ñ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·   € õ 	Œˆc•B”I˜a ‘O”OÑ# S­2¬9°Q¸©?¬?Ñ%:Ð:Ô;€AØˆIð ØØØØØðð ð ðð €Eð × Ò  Ñ#Ô#€FØÔ" QÒ&×+Ò+Ñ-Ô-ÐD°&¸1²*×1AÒ1AÑ1CÔ1CÐ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õ 	Œˆs�yŠy˜˜A‰ŒÑÔ€AØ�8Š8�A‰;Œ;Ô*¨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ÝŒX�y ,Ð/Ñ0Ô0€FÝŒf�S—Y’Y˜yÑ)Ô)Ñ*Ô*€GÝ�<Ñ Ô ð :ð :ˆØ#*¨1¨y©=Ô#9ˆˆq�9‰}˜aÐÑ Ð ÝŒX�| ZÐ0Ñ1Ô1€FÝŒf�S—Y’Y˜|Ñ,Ô,Ñ-Ô-€GÝ�:ÑÔð @ð @ˆØ&-¨a°,Ñ.>Ô&?ˆˆq�<Ñ Ð"Ñ#Ð#Ý
Œˆv�vÑÔ€AåØ!ØØØØðñ ô €Eð × Ò  Ñ#Ô#€FÝŒV�F˜EÔ-Ñ.Ô.€FàÔ$ sÒ*Ð*Ð*Ð*Ý�A�vÑÔÐåØ!ØØØØðñ ô €Gð ×"Ò" 1Ñ%Ô%€FÝŒV�F˜GÔ/Ñ0Ô0€FàÔ&¨Ò,Ð,Ð,Ð,Ý�A�v AÐ&Ñ&Ô&Ð&Ð&Ð&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   ç�íµ ÷Æ°>)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Ý
Œˆs�yŠy˜˜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Ý
Œˆs�yŠy˜˜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ÝŒV�C˜,×,Ò,¨\¸1Ñ=Ô=Ñ=Ñ>Ô>€FÝŒV�C˜,×,Ò,¨Q°Ñ=Ô=Ñ=Ñ>Ô>€Fàˆ	ð 	Ø!¨¸qÀdð	ð 	ØNTð	ð 	€Að ‡O‚O�A˜ 6€OÑ*Ô*Ð*Ø‡K‚K��N„N€N€N€Nr>   )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Ž   ç{®Gáz„?)Úrtolrz   )	r   r+   r3   r4   r5   r	   rj   rž   r   )r9   r%   r6   rŠ   rŸ   s        r&   Útest_mbnmf_inverse_transformr¥     s—   € õ Œ)×
Ò
 Ñ
"Ô
"€CÝ
Œˆs�yŠy˜˜A‰ŒÑÔ€AÝ
ØØØØð	ñ ô €Cð 
ˆÔ	˜1Ñ	Ô	€BØ!ˆCÔ! "Ñ%Ô%€EÝ�A�u 4¨dÐ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Ý
Œˆs�yŠy˜˜RÑ Ô Ñ!Ô!€AØ€I˜2¨A°4Ð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Ý
Œˆs�yŠy˜˜RÑ Ô Ñ!Ô!€AØ€A€a€a€aˆ�RŒY�q‰\Œ\Ñ	ÐÑØˆ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Ý
Œˆs�yŠy˜˜A‰ŒÑÔ€AØ€A€d�GÝ�1‰Œ€AàˆIÐM 1°1¸sÐMÐMÀfÐMÐM€EØ×"Ò" 1Ñ%Ô%€HØ�?Š?˜1ÑÔ€DÝ�H˜d¨Ð.Ñ.Ô.Ð.Ð.Ð.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Ý
Œˆs�yŠy˜˜RÑ Ô Ñ!Ô!€AØ€A€a€a€aˆ�RŒY�q‰\Œ\Ñ	ÐÑå,Ø	ØØØØØØØð	ñ 	ô 	�K€Eˆ1ˆaõ /Ø	Ø
ØØØØØØØØðñ ô �M€GˆQ�õ ØØØØØØØðñ ô €Kð ×%Ò% aÑ(Ô(€EØ×#Ò# AÑ&Ô&€Gå�E˜5Ñ!Ô!Ð!Ý�G˜WÑ%Ô%Ð%Ð%Ð%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Ô
F€CÝ	Œ•z¨Ð	-Ñ	-Ô	-ð )ð )ØˆˆQ��A�2�q˜xÐ(Ñ(Ô(Ð(ð)ð )ð )ñ )ô )ð )ð )ð )ð )ð )ð )øøøð )ð )ð )ð )å
Œ)ÐEÑ
FÔ
F€CÝ	Œ•z¨Ð	-Ñ	-Ô	-ð )ð )ØˆˆQ���A�q˜xÐ(Ñ(Ô(Ð(ð)ð )ð )ñ )ô )ð )ð )ð )ð )ð )ð )øøøð )ð )ð )ð )å
Œ)ÐDÑ
EÔ
E€CÝ	Œ•z¨Ð	-Ñ	-Ô	-ð ,ð ,ØˆˆQ��1�q‘5˜! (Ð+Ñ+Ô+Ð+ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,ð ,ð ,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àˆq‚y€yÝ˜A ™FÑ#Ô# aÑ'Ð'à�Q˜!’V”*€KØ�!�q’&”	€IÝ„Jˆ{˜D kÐ2Ñ2Ô2Ð2àˆq‚y€yÝŒf�Y¥¤¨	°KÑ(?Ñ!@Ô!@Ñ@ÑAÔAˆØˆr�vŠv‰xŒx˜!Ÿ%š%™'œ'Ñ!Ñ!ˆˆà	�ŠˆØ˜+Ñ%ˆÝŒf�S‰kŒk˜AœFÑ"¥R¤V­B¬F°3©K¬KÑ%8Ô%8Ñ8ˆˆà˜$‰×#Ò#Ñ%Ô%ˆØ��q‘˜R ™XŸNšNÑ,Ô,Ñ,Ñ,ˆØˆt�y K°D¸1±HÑ$=Ñ>×CÒCÑEÔEÑEÑEˆØˆt�t˜a‘xÑ Ñ ˆà€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Ð0€Kõ Œ)Ô
×
&Ò
& rÑ
*Ô
*€CØ�	Š	�)˜ZÑ(Ô(€AÝ„GˆAˆq�$˜AÐÑÔÐÝŒM˜!ÑÔ€EÝÔ˜q ,°XÈBÐOÑOÔO�D€A€qàð 6ð 6ˆÝ$ Q¨¨1¨dÑ3Ô3ˆÝÔ# A q¨!¨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Ý„GˆAˆq�$˜AÐÑÔÐÝŒM˜!ÑÔ€Eå
Œˆs�yŠy˜ LÑ1Ô1Ñ2Ô2€AÝ
Œˆs�yŠy˜ zÑ2Ô2Ñ3Ô3€AåÔ% a¨¨EÑ2Ô2€GÝ	Ô	   A qÑ	)Ô	)€Bð �]Š]‰_Œ_�F€BˆÝ”:˜g b¨" fœoÑ.Ô.×4Ò4Ñ6Ô6€LÝ˜l¨B¨r°2¨v¬JÀÐCÑCÔCÐCõ �w”¨¬Ñ6Ô6Ð6Ý�w”~ u¤|Ñ4Ô4Ð4Ý�w”} e¤kÑ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/   ©g333333ó¿r   çš™™™™™É?r@   r×   ç      @r“   Tr   )r0   r¹   r   rA   r   ra   Úl1_ratior1   gH¯¼šò×z>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ÝÔ   L°xÈbÐQÑQÔQ�F€Bˆà2ð :+ñ :+ˆ	à�wŠw‰yŒy˜"Ÿ'š'™)œ)ˆ1ˆÝ.ØØØØØØØØØØØØð
ñ 
ô 
‰	ˆˆB�ð  �wŠw‰yŒy˜"Ÿ'š'™)œ)ˆ1ˆÝ.ØØØØØØØØØØØØð
ñ 
ô 
‰	ˆˆB�õ 	˜˜B TÐ*Ñ*Ô*Ð*Ý˜˜B TÐ*Ñ*Ô*Ð*ð 	�VÑˆ	Ø�wŠw‰yŒy˜"Ÿ'š'™)œ)ˆ1ˆÝ.ØØØØØØØØØØØØð
ñ 
ô 
‰	ˆˆB�õ 	˜˜B TÐ*Ñ*Ô*Ð*Ý˜˜B TÐ*Ñ*Ô*Ð*Ñ*ð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   ø€ Ý,ØØØ%ØØØØð
ñ 
ô 
‰ˆˆ1ˆaõ ”6�"œ( 1™+œ+Ñ&Ô&Ð&Ð&Ð&Ý”6�"œ( 1™+œ+Ñ&Ô&Ð&Ð&Ð&Ð&Ð&r>   úAWhen beta_loss <= 0 and X contains zeros, the solver may diverge.)g333333ã¿rb   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Ý„GˆAˆq�$˜AÐÑÔÐÝŒM˜!ÑÔ€Eð'ð 'ð 'ð 'ð 'ð N€CØ ð 0ð 0ˆ	ÝŒ]�:¨SÐ1Ñ1Ô1ð 	-ð 	-ØÐ˜q )Ñ,Ô,Ð,ð	-ð 	-ð 	-ñ 	-ô 	-ð 	-ð 	-ð 	-ð 	-ð 	-ð 	-øøøð 	-ð 	-ð 	-ð 	-àÐ˜1˜t™8 YÑ/Ô/Ð/Ð/à.ð -ð -ˆ	ØÐ˜1˜iÑ(Ô(Ð(ØÐ˜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Ø€A€aˆ!‚e�Hå
 ¸Ð
;Ñ
;Ô
;€Cà
M€CÝ	Œ•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Ý
Œˆs�yŠy˜ JÑ/Ô/Ñ0Ô0€Að €HØˆIð Ø!ØØØð	ð ð
 ðð €Eð ˆIð Ø!ØØØð	ð ð
 ðð €Eð ×!Ò! !Ñ$Ô$€GØ×!Ò! !Ñ$Ô$€GàÔ€GØÔ€Gå
Œ(•2”:Ñ
Ô
Ô
"€CØ˜g¨šnÔ-Ô2€OØ˜g¨šnÔ-Ô2€OØ˜g¨šnÔ-Ô2€OØ˜g¨šnÔ-Ô2€Oà˜_Ò,Ð,Ð,Ð,Ø˜_Ò,Ð,Ð,Ð,ð €HØˆIð Ø!ØØØð	ð ð
 ðð €Eð ˆIð Ø!ØØØð	ð ð
 ðð €Eð ×!Ò! !Ñ$Ô$€GØ×!Ò! !Ñ$Ô$€GàÔ€GØÔ€GåŒK˜Ñ Ô  SÑ(­F¬K¸Ñ,@Ô,@À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Ý„Fˆ1ˆa�L„L€LÝÔ   L°xÈbÐQÑQÔQ�F€Bˆà2ð "!ñ "!ˆ	Ø�TŠ>ˆ>˜i¨1šn˜nàØ�wŠw‰yŒy˜"Ÿ'š'™)œ)ˆ1ˆØˆÝ�r‘”ð 	!ð 	!ˆAå0ØØØØ#ØØ)ØØØØØ!ØØØðñ ô ‰GˆAˆq�!õ$ Ô$ Q¨¨1¨iÑ8Ô8Ø˜(Ñ" ZÑ/°!·%²%±'´'Ñ9ñ:à˜(Ñ" YÑ.°·²±´Ñ8ñ9ð ˜1˜x™<Ñ(¨:Ñ5¸¸A¹¿
º
¹¼ÑDñEð ˜1˜x™<Ñ(¨9Ñ4¸¸1¹·z²z±|´|ÑCñ	Dð ð Ð(Ø$ tÒ+Ð+Ð+Ð+Ø ˆMˆMñ9	!ð"!ð "!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Ñ'€Iˆz˜<Ý
Œˆs�yŠy˜ JÑ/Ô/Ñ0Ô0°2Ñ5€AÝ
Œˆs�yŠy˜ LÑ1Ô1Ñ2Ô2°RÑ7€AÝ
Œˆs�yŠy˜ zÑ2Ô2Ñ3Ô3€Aà€A€d�GÝ
Ô
˜q ! Q¨SÐ
1Ñ
1Ô
1€CØ€A€d�GÝ
Ô
˜q ! Q¨SÐ
1Ñ
1Ô
1€CÝ˜˜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Ñ Ô ×&Ò& r¨2Ñ.Ô.×5Ò5°hÀUÐ5ÑKÔK€AÝ„Fˆ1�!ÐÑÔÐà
ˆ)Ð
Q˜C¨°$ÀQÐ
QÐ
QÈ&Ð
QÐ
Q€Càˆ3Œ7�1‰:Œ:×Ò Ñ"Ô"Ô(¨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Ñ Ô ×&Ò& r¨1Ñ-Ô-€AÝ„Fˆ1�!ÐÑÔÐØˆIÐ9 1¨$Ð9Ð9°&Ð9Ð9€EØ
×
Ò
˜aŸhšh¥r¤zÑ2Ô2Ñ
3Ô
3€CØˆIÐ9 1¨$Ð9Ð9°&Ð9Ð9€EØ
×
Ò
˜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Ô6€AØ×Ò˜(Ñ#Ô#€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_equivalencer1  :  sÊ   € õ Œ)Ô
×
&Ò
& rÑ
*Ô
*€CÝ
Œˆs�yŠy˜˜QÑÔÑ Ô €Aå
ØØØØØðñ ô €Cõ ØØØØØØ”7˜1”:Øðñ ô €Eð 	ˆÔ˜!ÑÔ€AØ
×
Ò
˜aÑ
 Ô
 €CÝ�A�sÑÔÐÐÐ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_fitr8  V  sf  € å
Œ)Ô
×
&Ò
& rÑ
*Ô
*€CÝ
Œˆs�yŠy˜˜aÑ Ô Ñ!Ô!€Aà€LØ€JØ€HåØ!ØØØØØØØð	ñ 	ô 	€Fõ  |¸(ÐQRÐSÑSÔS€Fõ ÔØ	˜¨8À!ðñ ô �D€A€qð ‡J‚Jˆq�A˜€JÑÔÐÝ�8‰_Œ_ð Mð MˆÝ�zÑ"Ô"ð 	Mð 	MˆAØ×Ò˜q  Q¨¡^Ð!3Ô4¸¸+¸:¸+¼È!ÐÑLÔLÐLÐLð	Mð Œ?˜fœoÒ-Ð-Ð-Ð-Ý�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   )Ú.0r7  s     r&   ú
<listcomp>z*test_feature_names_out.<locals>.<listcomp>€  s   € Ð4Ð4Ð4 a˜	˜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Ð4­5°©8¬8Ð4Ñ4Ô4°eÑ<Ô<Ð<Ð<Ð<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_verboserD  ƒ  s}   € å
Œ	×Ò˜aÑ Ô ×.Ò.¨yÑ9Ô9€AÝ
˜4¨a¸Ð
;Ñ
;Ô
;€CÝ”€JÝ‘”…C„Jð ØˆŒ�‰
Œ
ˆ
à�Œ
ˆ
ˆ
ø�Z�Œ
ÐÐÐÐs   Á*B ÂBc                  óP  — t           j        j                             d¦  «        } t          j        |                      dd¦  «        ¦  «        }t          dddd¬¦  «        }|                     |¦  «        }t          j	        t          d	¬
¦  «        5  |                     ¦   «          d d d ¦  «         n# 1 swxY w Y   t          j	        t          d¬
¦  «        5  |                     ||¬¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        d¬¦  «        5  t          j        d¦  «         |                     |¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        t"          d¬
¦  «        5  |                     |¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr)   rf   rp   rD   r+   r   rˆ   r”   z$Missing required positional argumentr   zPlease provide only)ÚXtr;   T)ÚrecordrS   z&Input argument `W` was renamed to `Xt`)r;   )r   r+   r2   r3   r4   r5   r   rj   r!   rF   r)  rž   rG   ÚwarningsÚcatch_warningsÚsimplefilterr"   ÚFutureWarning)r9   r%   ÚestrF  s       r&   Ú(test_NMF_inverse_transform_W_deprecationrM  �  s�  € Ý
Œ)Ô
×
&Ò
& rÑ
*Ô
*€CÝ
Œˆs�yŠy˜˜A‰ŒÑÔ€AÝ
ØØØØð	ñ ô €Cð 
×	Ò	˜1Ñ	Ô	€Bå	Œ•yÐ(NÐ	OÑ	OÔ	Oð  ð  Ø×ÒÑÔÐð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  õ 
Œ•zÐ)>Ð	?Ñ	?Ô	?ð +ð +Ø×Ò  rÐÑ*Ô*Ð*ð+ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +õ 
Ô	 ¨Ð	-Ñ	-Ô	-ð "ð "ÝÔ˜gÑ&Ô&Ð&Ø×Ò˜bÑ!Ô!Ð!ð"ð "ð "ñ "ô "ð "ð "ð "ð "ð "ð "øøøð "ð "ð "ð "õ 
Œ•mÐ+SÐ	TÑ	TÔ	Tð $ð $Ø×Ò ÐÑ#Ô#Ð#ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð $ð $sH   ÂB1Â1B5Â8B5ÃC;Ã;C?ÄC?Ä*EÅEÅEÅ7FÆFÆ"F)KrI   rA  rH  Úior   Únumpyr   r!   r«   ÚsparserÚ   Úscipyr   r   Úsklearn.baser   Úsklearn.decompositionr   r	   r
   r   r6   Úsklearn.exceptionsr   Úsklearn.utils._testingr   r   r   r   r   Úsklearn.utils.extmathr   Ú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*  r1  r8  r?  rD  rM  r   r>   r&   ú<module>r]     sÔ  ðØ 	€	€	€	Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #à Ð Ð Ð Ð Ð Ø OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OØ -Ð -Ð -Ð -Ð -Ð -Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1ðð ð ð ð ð ð ð ð ð ð ð ð ð ð /Ð .Ð .Ð .Ð .Ð .ð „×ÒØ�(ÐØ	ˆH�dÐÐ˜s X¨tÐ$4Ð5¸ÀbÐ7IÐJñô ð/ð /ñ	ô ð/ð4ð 4ð 4ð „×Òðñô ð,ð ,ñ	ô ð,ð>	ð 	ð 	ð:ð :ð :ð €˜+Ð&Ñ&Ô&Ø„×ÒØ�(ÐØ	ˆH�dÐÐ˜s X¨tÐ$4Ð5¸ÀbÐ7IÐJñô ð „×Ò˜Ð!RÑSÔSØ„×Ò˜ JÑ/Ô/Ø„×Ò˜Ð$6Ñ7Ô7ðEð Eñ 8Ô7ñ 0Ô/ñ TÔSñ	ô ñ 'Ô&ðEð „×ÒØ�(ÐØ	ˆH�dÐÐ˜s X¨tÐ$4Ð5¸ÀbÐ7IÐJñô ð1ð 1ñ	ô ð1ð-'ð -'ð -'ð` „×Ò˜ D¨$ <Ñ0Ô0ð&ð &ñ 1Ô0ð&ð"ð ð ð  „×ÒØ�(ÐØ	ˆH�dÐÐ˜s X¨tÐ$4Ð5¸ÀbÐ7IÐJñô ðð ñ	ô ðð  „×Ò˜ <Ñ0Ô0ð3ð 3ñ 1Ô0ð3ð 4ð 4ð 4ð  „×Ò˜ s¨LÐ&9Ñ:Ô:ð@ð @ñ ;Ô:ð@ð „×ÒØ�(ÐØ	ˆH�dÐÐ˜s X¨tÐ$4Ð5¸ÀbÐ7IÐJñô ð „×Ò˜ JÑ/Ô/Ø„×Ò˜Ð$6Ñ7Ô7ðð ñ 8Ô7ñ 0Ô/ñ	ô ðð< „×ÒØ�(ÐØ	ˆH�dÐÐ˜s X¨tÐ$4Ð5¸ÀbÐ7IÐJñô ð
/ð 
/ñ	ô ð
/ð „×Ò˜ (¨HÐ!5Ñ6Ô6Ø„×Ò˜ <Ñ0Ô0Ø„×Ò˜ JÑ/Ô/Ø„×Ò˜Ð$6Ñ7Ô7ð,&ð ,&ñ 8Ô7ñ 0Ô/ñ 1Ô0ñ 7Ô6ð,&ð^,ð ,ð ,ð(ð ð ð<6ð 6ð 6ð.3ð 3ð 3ð6 €Ð,Ð-Ñ-Ô-ðK+ð K+ñ .Ô-ðK+ð\!-ð !-ð !-ðH „×Ò˜ t¨S kÑ2Ô2ð
ð 
ñ 3Ô2ð
ð „×ÒØ�(ÐØ	ˆH�dÐÐ˜s X¨tÐ$4Ð5¸ÀbÐ7IÐJñô ðB-ð B-ñ	ô ðB-ðJ €Ð,Ð-Ñ-Ô-Ø„×Ò˜ <Ñ0Ô0ð1!ð 1!ñ 1Ô0ñ .Ô-ð1!ðh"ð "ð "ð „×ÒØà	Œ�R”ZÐ Ø	Œ�R”ZÐ Ø	Œ�2”:ÐØ	Œ�2”:Ðð	ñô ð „×ÒØ�(ÐØ	ˆH�dÐÐ˜s X¨tÐ$4Ð5¸ÀbÐ7IÐJñô ð	.ð 	.ñ	ô ñô ð	.ð „×ÒØ�(ÐØ	ˆH�dÐÐ˜s X¨tÐ$4Ð5¸ÀbÐ7IÐJñô ð	)ð 	)ñ	ô ð	)ð „×Ò˜ s¨LÐ&9Ñ:Ô:ð;ð ;ñ ;Ô:ð;ð „×Ò˜Ð&DÐ&DÐ&DÑEÔEðð ñ FÔEðð6 <ð  <ð  <ðF=ð =ð =ð	 ð 	 ð 	 ð$ð $ð $ð $ð $r>   