o
    ×tBhè…  ã                   @   s2  d dl Z 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 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 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 ¡Z"d\Z#Z$e" %e#e$¡Z&dd„ Z'dd„ Z(dd„ Z)dd„ Z*dd„ Z+e j, -d g d!¢¡e j, -d"d#d$g¡e j, -d%d#d$g¡d&d'„ ƒƒƒZ.e j, -d%d#d$g¡d(d)„ ƒZ/d*d+„ Z0d,d-„ Z1d.d/„ Z2d0d1„ Z3d2d3„ Z4d4d5„ Z5d6d7„ Z6d8d9„ Z7d:d;„ Z8e j, -d g d!¢¡e j, -d"d#d$g¡e j, -d%d#d$g¡d<d=„ ƒƒƒZ9e j, -d%d#d$g¡d>d?„ ƒZ:e j, -d"d#d$g¡e j, -d%d#d$g¡d@dA„ ƒƒZ;dBdC„ Z<dDdE„ Z=dFdG„ Z>dHdI„ Z?dJdK„ Z@dLdM„ ZAdNdO„ ZBe j, -dPg d!¢¡e j, -dQd#d$g¡dRdS„ ƒƒZCe j, -dPdTdUg¡dVdW„ ƒZDdXdY„ ZEdZd[„ ZFd\d]„ ZGd^d_„ ZHd`da„ ZIdbdc„ ZJddde„ ZKdfdg„ ZLdhdi„ ZMe j, Ndj¡e j, -dkdld idmfdndoidpfdqd idrfdsdtidufdvdtidwfdxdtidyfg¡dzd{„ ƒƒZOe j, -d|g d}¢¡d~d„ ƒZPd€d„ ZQd‚dƒ„ ZRe j, -d„g d…¢¡d†d‡„ ƒZSdˆd‰„ ZTdŠd‹„ ZUe j, Ndj¡e j, -dŒeeg¡ddŽ„ ƒƒZVdd„ ZWe j, -d‘d’¡e j, -d“ejXejYf¡d”d•„ ƒƒZZe j, -d‘d’¡d–d—„ ƒZ[e j, -d d’¡e j, -d“ejXejYf¡d˜d™„ ƒƒZ\e j, -dndš¡e j, -d d’¡e j, -d›ejXejXfejYejYfej]ejYfej^ejYff¡dœd„ ƒƒƒZ_e j, -dndš¡e j, -d d’¡e j, -d›ejXejXfejYejYfej]ejYfej^ejYff¡dždŸ„ ƒƒƒZ`e j, -d dš¡e j, -d›ejXejXfejYejYfej]ejYfej^ejYff¡d¡d¢„ ƒƒZae j, -d dš¡d£d¤„ ƒZbe j, -d dš¡e j, -d›ejXejXfejYejYfej]ejYfej^ejYff¡d¥d¦„ ƒƒZce j, -d dš¡d§d¨„ ƒZde j,j-d©ee&jeƒeƒ edªd«gd¬d­„ d®d¯d°„ ƒZfdS )±é    N)Úpartial)Úclone)ÚConvergenceWarning)Úcheck_array)Úassert_allclose)Úassert_array_almost_equal)Úassert_array_equal)Úignore_warnings)Ú
TempMemmap)ÚDictionaryLearning)ÚMiniBatchDictionaryLearning)ÚSparseCoder)Údict_learning)Údict_learning_online)Úsparse_encode)Ú#check_transformer_data_not_an_array)Úcheck_transformer_general)Úcheck_transformers_unfitted)Ú_update_dict)é
   é   c            	      C   sŠ   t j d¡} g d¢}t ddgddg¡D ].\}}|  |t¡}|  |t¡}t |ddg¡D ]\}}t||||d}|j||fksAJ ‚q,qd S )Nr   )ÚompÚ
lasso_larsÚlasso_cdÚlarsÚ	thresholdé   é   é	   é   )Ú	algorithmÚn_jobs)	ÚnpÚrandomÚRandomStateÚ	itertoolsÚproductÚrandnÚ
n_featuresr   Úshape)	ÚrngÚ
algorithmsÚn_componentsÚ	n_samplesÚX_Ú
dictionaryr    r!   Úcode© r1   ú…/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/decomposition/tests/test_dict_learning.pyÚtest_sparse_encode_shapes_omp&   s   þýr3   c                  C   sv   d} t | dd t¡}|jj| tfksJ ‚d} t | dd t¡}|jj| tfks*J ‚| t¡jtjd | fks9J ‚d S )Nr   r   ©Úrandom_stater   )r   ÚfitÚXÚcomponents_r)   r(   Ú	transform©r,   Údicor1   r1   r2   Útest_dict_learning_shapes1   s   "r<   c                  C   s.   d} t | dd t¡}|jj| tfksJ ‚d S )Né   r   r4   )r   r6   r7   r8   r)   r(   r:   r1   r1   r2   Útest_dict_learning_overcomplete<   s   r>   c                     s  dd„ ‰‡fdd„‰d} d‰d}ˆ| ‰ t jt‡ ‡‡fdd	„d
D ƒƒ }t  dˆd ˆ¡}|ˆd k }d||< d|t  |¡< | dd¡}t t¡ t	|| dd}| 
|¡ W d   ƒ n1 s`w   Y  t ¡  t dt¡ t	|| dd}| 
|¡ W d   ƒ d S 1 s‡w   Y  d S )Nc                 S   sj   t  d| d | ¡}dt  d| ¡t jd   d|| d |d    t  || d  d|d   ¡ }|S )z1Discrete sub-sampled Ricker (Mexican hat) waveletr   r   é   r   g      Ð?)r"   ÚlinspaceÚsqrtÚpiÚexp)Ú
resolutionÚcenterÚwidthÚxr1   r1   r2   Úricker_functionC   s   ÿþÿz&test_max_iter.<locals>.ricker_functionc                    sp   t  d|d |¡}t  ||f¡}t|ƒD ]\}}ˆ ||| ƒ||< q|t  t j|d dd¡dd…t jf  }|S )z+Dictionary of Ricker (Mexican hat) waveletsr   r   r?   ©ÚaxisN)r"   r@   ÚemptyÚ	enumeraterA   ÚsumÚnewaxis)rF   rD   r,   ÚcentersÚDÚirE   )rH   r1   r2   Úricker_matrixM   s   *z$test_max_iter.<locals>.ricker_matrixr   i   r   c                 3   s"    | ]}ˆ|ˆˆ d  dV  qdS )r   )rF   rD   r,   Nr1   )Ú.0Úw)r,   rD   rR   r1   r2   Ú	<genexpr>]   s   € ý
ÿ
ÿz test_max_iter.<locals>.<genexpr>)r   é2   éd   iô  iè  r   r   é   g      @g      ð¿éÿÿÿÿ)Útransform_algorithmÚtransform_max_iterÚerroriÐ  )r"   Úr_Útupler@   Úlogical_notÚreshapeÚpytestÚwarnsr   r   Úfit_transformÚwarningsÚcatch_warningsÚsimplefilter)rZ   ÚsubsamplingÚD_multir7   Úfirst_quarterÚmodelr1   )r,   rD   rH   rR   r2   Útest_max_iterB   s:   
	üÿ	ÿü
ÿ"ûrk   c                  C   sP   d} d}d}t jt|d tt| |dd W d   ƒ d S 1 s!w   Y  d S )Nr   r   ú;Positive constraint not supported for 'lars' coding method.©ÚmatchT)ÚalphaÚpositive_code)ra   ÚraisesÚ
ValueErrorr   r7   )r,   ro   Úerr_msgr1   r1   r2   Ú*test_dict_learning_lars_positive_parameter{   s   "ÿrt   rZ   )r   r   r   rp   FTÚpositive_dictc                 C   s~   d}t || d||dd t¡}| t¡}|r |jdk ¡ sJ ‚n	|jdk  ¡ s)J ‚|r5|dk ¡ s3J ‚d S |dk  ¡ s=J ‚d S )Nr   r   Úcd)rZ   r5   rp   ru   Úfit_algorithm)r   r6   r7   r9   r8   ÚallÚany©rZ   rp   ru   r,   r;   r0   r1   r1   r2   Útest_dict_learning_positivityƒ   s$   úù
	r{   c                 C   sL   d}t |dd| dd t¡}| r|jdk ¡ sJ ‚d S |jdk  ¡ s$J ‚d S )Nr   r   r   rv   )rZ   r5   ru   rw   )r   r6   r7   r8   rx   ry   ©ru   r,   r;   r1   r1   r2   Ú'test_dict_learning_lars_dict_positivity£   s   ûúr}   c                  C   sh   d} t | ddddd t¡}d}| d¡}tjt|d | t¡ W d   ƒ d S 1 s-w   Y  d S )	Nr   r   r   Trv   )rZ   r5   rp   rw   ú9Positive constraint not supported for '{}' coding method.rm   )r   r6   r7   Úformatra   rq   rr   r9   )r,   r;   rs   r1   r1   r2   Ú'test_dict_learning_lars_code_positivity´   s   ûú
"ÿr€   c                  C   sj   d} t | dddd}| t¡ t¡}tt ||j¡tƒ |jdd | t¡}tt ||j¡tdd	 d S )
Nr=   r   çü©ñÒMbP?r   )rZ   Útransform_alphar5   r   ©rZ   r?   ©Údecimal©	r   r6   r7   r9   r   r"   Údotr8   Ú
set_params©r,   r;   r0   r1   r1   r2   Ú!test_dict_learning_reconstructionÄ   s   ÿ
rŠ   c                  C   sl   d} t | ddddd}| t¡ t¡}tt ||j¡tƒ |jdd | t¡}tt ||j¡td	d
 d S )Nr=   r   r   r   rX   ©rZ   r‚   r5   r!   r   rƒ   r?   r„   r†   r‰   r1   r1   r2   Ú*test_dict_learning_reconstruction_parallelÔ   s   û
rŒ   c               	   C   s–   d} t tƒ;}t| ddddd}ttd | |¡ |¡}W d   ƒ n1 s(w   Y  tt 	||j
¡|dd	 W d   ƒ d S 1 sDw   Y  d S )
Nr=   r   r   r   rX   r‹   )Úcategoryr?   r„   )r
   r7   r   r	   r   r6   r9   r   r"   r‡   r8   )r,   ÚX_read_onlyr;   r0   r1   r1   r2   Ú(test_dict_learning_lassocd_readonly_dataæ   s    
ûÿÿ"ör   c                  C   s~   d} t | dddd}| t¡ ttjdf ¡}tt |¡ƒdks"J ‚|jdd | ttjdf ¡}tt |¡ƒdks=J ‚d S )	NrX   r   r   r   )rZ   Útransform_n_nonzero_coefsr5   r   r   rƒ   )	r   r6   r7   r9   r"   rN   ÚlenÚflatnonzerorˆ   r‰   r1   r1   r2   Ú test_dict_learning_nonzero_coefs÷   s   ür“   c                  C   sJ   d} t | dd}t t¡ | t¡ W d   ƒ d S 1 sw   Y  d S )Nr   ú	<unknown>)rw   )r   ra   rq   rr   r6   r7   r:   r1   r1   r2   Ú(test_dict_learning_unknown_fit_algorithm  s
   "ÿr•   c                  C   sd   d} t | ddd}| t¡ t¡}d|_| t¡}t|d d …d | …f |d d …| d …f  |ƒ d S )Nr   r   r   )rZ   r5   T)r   r6   r7   r9   Ú
split_signr   )r,   r;   r0   Ú
split_coder1   r1   r2   Útest_dict_learning_split  s   ÿ
(ÿr˜   c                  C   sŽ   t j d¡} d}tt|dd| dd\}}|jt|fksJ ‚|j|tfks&J ‚t  ||¡jtjks2J ‚tt|dd| dd}|j|tfksEJ ‚d S )Nr   r   rX   r   T)r,   Ú
batch_sizeÚmax_iterr5   Úreturn_codeF)	r"   r#   r$   r   r7   r)   r-   r(   r‡   )r*   r,   r0   r/   r1   r1   r2   Ú test_dict_learning_online_shapes  s,   
úúrœ   c                  C   sH   d} t jt| d ttdddd W d   ƒ d S 1 sw   Y  d S )Nrl   rm   rX   r   T)r™   rš   rp   ©ra   rq   rr   r   r7   )rs   r1   r1   r2   Ú1test_dict_learning_online_lars_positive_parameter7  s   "ÿrž   c              	   C   s€   d}t |d| d||dd t¡}| t¡}|r!|jdk ¡ s J ‚n	|jdk  ¡ s*J ‚|r6|dk ¡ s4J ‚d S |dk  ¡ s>J ‚d S )Nr   rX   r   rv   )r™   rZ   r5   rp   ru   rw   )r   r6   r7   r9   r8   rx   ry   rz   r1   r1   r2   Ú-test_minibatch_dictionary_learning_positivity=  s&   ùø

rŸ   c                 C   sN   d}t |ddd| dd t¡}| r|jdk ¡ sJ ‚d S |jdk  ¡ s%J ‚d S )Nr   rX   r   r   rv   )r™   rZ   r5   ru   rw   )r   r6   r7   r8   rx   ry   r|   r1   r1   r2   Ú'test_minibatch_dictionary_learning_lars`  s   úù	r    c              
   C   s~   t j d¡}d}tt|ddd||| d\}}|r!|dk ¡ s J ‚n|dk  ¡ s)J ‚| r5|dk ¡ s3J ‚d S |dk  ¡ s=J ‚d S )Nr   r   rX   rv   r   )r,   r™   Úmethodro   r5   ru   rp   )r"   r#   r$   r   r7   rx   ry   )rp   ru   r*   r,   r0   r/   r1   r1   r2   Ú$test_dict_learning_online_positivitys  s$   
ø
r¢   c                  C   sÒ   d} ddl m} dd l}|j}zI|ƒ |_t| dddddd}| t¡ t| dddddd	}| t¡ t| ddddd
}| t¡ tt| ddddd tt| ddddd W ||_n||_w |jj	| t
fksgJ ‚d S )Nr   r   )ÚStringIOrX   r   çš™™™™™¹?)r™   rš   ÚverboseÚtolr5   r?   )r™   rš   r¥   Úmax_no_improvementr5   )r™   rš   r¥   r5   )r,   r™   ro   r¥   r5   )Úior£   ÚsysÚstdoutr   r6   r7   r   r8   r)   r(   )r,   r£   r©   Ú
old_stdoutr;   r1   r1   r2   Ú#test_dict_learning_online_verbosity  sR   ÿ
ú

ÿ
úú	r¬   c                  C   s6   d} t | dddd}| t¡ |jj| tfksJ ‚d S )Nr   rX   r   ©r™   rš   r5   ©r   r6   r7   r8   r)   r(   r:   r1   r1   r2   Ú*test_dict_learning_online_estimator_shapesÂ  s   ÿ
r¯   c                  C   s2   d} t | dddd t¡}|jj| tfksJ ‚d S )Nr=   rX   r   r   r­   r®   r:   r1   r1   r2   Ú&test_dict_learning_online_overcompleteË  s   ÿþr°   c                  C   sD   d} t j d¡}| | t¡}t| dd|dd t¡}t|j	|ƒ d S )Nr=   r   rX   )r™   rš   Ú	dict_initr5   )
r"   r#   r$   r'   r(   r   r6   r7   r   r8   )r,   r*   ÚVr;   r1   r1   r2   Ú(test_dict_learning_online_initializationÓ  s   
ÿþr³   c                  C   sF   d} t j d¡}| | t¡}|jdd t| dd|ddd t¡ d S )Nr=   r   F)ÚwriterX   r   )r™   rš   r±   r5   Úshuffle)	r"   r#   r$   r'   r(   Úsetflagsr   r6   r7   ©r,   r*   r²   r1   r1   r2   Ú1test_dict_learning_online_readonly_initializationÝ  s   úr¸   c                  C   sô   d} t j d¡}| | t¡}|t j|d ddd d …t jf  }t| dddd|d ddd		 t	¡}t| d|dd
}t
dƒD ]}t	D ]}| |t jd d …f ¡ q@q<t  tt	|jdddk¡r_J ‚t|j|jdd |j|j  krudksxJ ‚ J ‚d S )Nr=   r   r?   r   rI   r   Fç        )rš   r™   ro   rµ   r±   r§   r¦   r5   )ro   r±   r5   ©ro   r„   rW   )r"   r#   r$   r'   r(   rM   rN   r   r6   r7   ÚrangeÚpartial_fitrx   r   r8   r   Ún_steps_)r,   r*   r²   Údict1Údict2rQ   Úsampler1   r1   r2   Ú%test_dict_learning_online_partial_fitì  s6   $÷
öÿÿ$rÁ   c                  C   sn   d} t j d¡}| | t¡}|t j|d ddd d …t jf  }dD ]}tt||d}|j	t
| fks4J ‚q"d S )Nr=   r   r?   r   rI   ©r   r   r   r   r   ©r    )r"   r#   r$   r'   r(   rM   rN   r   r7   r)   r-   )r,   r*   r²   Úalgor0   r1   r1   r2   Útest_sparse_encode_shapes
  s   $þrÅ   rÄ   Úpositivec                 C   s|   d}t j d¡}| |t¡}|t j|d ddd d …t jf  }tt|| |d}|r4|dk 	¡ s2J ‚d S |dk  
¡ s<J ‚d S )Nr=   r   r?   r   rI   ©r    rÆ   )r"   r#   r$   r'   r(   rM   rN   r   r7   rx   ry   )rÄ   rÆ   r,   r*   r²   r0   r1   r1   r2   Útest_sparse_encode_positivity  s   $rÈ   r   r   c                 C   s’   d}t j d¡}| |t¡}|t j|d ddd d …t jf  }d}| | ¡}tj	t
|d tt|| dd	 W d   ƒ d S 1 sBw   Y  d S )
Nr=   r   r?   r   rI   r~   rm   TrÇ   )r"   r#   r$   r'   r(   rM   rN   r   ra   rq   rr   r   r7   )rÄ   r,   r*   r²   rs   r1   r1   r2   Ú)test_sparse_encode_unavailable_positivity"  s   $
"ÿrÉ   c                  C   s€   d} t j d¡}| | t¡}|t j|d ddd d …t jf  }ttdd}dD ]}t	t||d	}t	|||d	}t
||ƒ q(d S )
NrW   r   r?   r   rI   ÚF)ÚorderrÂ   rÃ   )r"   r#   r$   r'   r(   rM   rN   r   r7   r   r   )r,   r*   r²   ÚXfrÄ   ÚaÚbr1   r1   r2   Útest_sparse_encode_input.  s   $ýrÏ   c                  C   sŒ   d} t j d¡}| | t¡}|t j|d ddd d …t jf  }tt|dd}t  	|dk¡r0J ‚t  
t  t  ||¡t d ¡¡dk sDJ ‚d S )	Nr=   r   r?   r   rI   r   rº   r¤   )r"   r#   r$   r'   r(   rM   rN   r   r7   rx   rA   r‡   )r,   r*   r²   r0   r1   r1   r2   Útest_sparse_encode_error:  s   $,rÐ   c                  C   sJ   t j d¡} |  dd¡}|  dd¡}ttƒ||dd d}|jdks#J ‚d S )Nr   rW   é@   r?   r   )r    Ún_nonzero_coefs)rW   r?   )r"   r#   r$   r'   r	   r   r)   )r*   r7   rP   r0   r1   r1   r2   Ú)test_sparse_encode_error_default_sparsityD  s
   rÓ   c                  C   sZ   d} t j d¡}| | t¡}t t¡ tt	|dd W d   ƒ d S 1 s&w   Y  d S )Nr=   r   r”   rÃ   )
r"   r#   r$   r'   r(   ra   rq   rr   r   r7   r·   r1   r1   r2   Útest_unknown_methodL  s   "ÿrÔ   c                  C   s’   d} t j d¡}| | t¡}|t j|d ddd d …t jf  }t|ddd t	¡}t  
|dk¡r3J ‚t  t  t  ||¡t	 d ¡¡d	k sGJ ‚d S )
Nr=   r   r?   r   rI   r   r   ©r/   rZ   r‚   r¤   )r"   r#   r$   r'   r(   rM   rN   r   r9   r7   rx   rA   r‡   )r,   r*   r²   Úcoderr1   r1   r2   Útest_sparse_coder_estimatorT  s   $ÿþ,r×   c                  C   sè   d} t j d¡}| | t¡}|t j|d ddd d …t jf  }t|ddd}t|ƒ}t	|ƒt	|ƒks5J ‚t j
 |j|j¡ t	|jƒt	|jƒksJJ ‚|j|jksRJ ‚|j|jksZJ ‚t j tt¡ t j¡}t j
 | |¡| |¡¡ d S )	Nr=   r   r?   r   rI   r   r   rÕ   )r"   r#   r$   r'   r(   rM   rN   r   r   ÚidÚtestingr   r/   Ún_components_Ún_features_in_Úrandr-   ÚastypeÚfloat32r9   )r,   r*   r²   rÖ   ÚclonedÚdatar1   r1   r2   Ú!test_sparse_coder_estimator_clone`  s   $ÿrá   c                  C   sb   t j d¡} d\}}|  ||¡}tdƒd|  }t j ||¡ t j¡}t|ddd}| |¡ d S )Né	  )é(   rÑ   g    €„>ArX   r   r?   )rZ   r!   )	r"   r#   r$   rÜ   ÚintrÝ   rÞ   r   rc   )r*   r,   r(   Ú	init_dictr-   rà   Úscr1   r1   r2   Útest_sparse_coder_parallel_mmapr  s   rç   c                  C   sp   t j d¡} d\}}|  ||¡}t|ƒ}t|jj|ƒ t|jj|ƒ t	tdd}||jj|ƒ t
|jj|ƒ d S )Nrâ   )rã   r   T)Úreadonly_memmap)r"   r#   r$   rÜ   r   r   Ú	__class__Ú__name__r   r   r   )r*   r,   r(   rå   ræ   Ú check_transformer_general_memmapr1   r1   r2   Ú$test_sparse_coder_common_transformer…  s   ÿrì   c                  C   s6   t  g d¢g d¢g¡} t| ƒ}|j| jd ksJ ‚d S )N)r   r?   r   r   )r"   Úarrayr   rÛ   r)   )Údræ   r1   r1   r2   Útest_sparse_coder_n_features_in•  s   rï   z2ignore:The default value of batch_size will changezparam, matchr,   zn_components == 0, must be >= 1rw   Úwrongz#Coding method 'wrong' not supportedr™   zbatch_size == 0, must be >= 1Ún_iterrY   zn_iter == -1, must be >= 0rš   zmax_iter == -1, must be >= 0r§   z&max_no_improvement == -1, must be >= 0c                 C   sH   t jt|d tdi | ¤Ž t¡ W d   ƒ d S 1 sw   Y  d S )Nrm   r1   )ra   rq   rr   r   r6   r7   )Úparamrn   r1   r1   r2   Ú)test_minibatch_dict_learning_wrong_paramsœ  s   "ÿró   Úattr)Úiter_offset_Úinner_stats_Úrandom_state_c                 C   sd   d| › d}t ddddd}| t¡ tjt|d t|| ƒ W d   ƒ d S 1 s+w   Y  d S )	NzThe attribute `z2` is deprecated in 1.1 and will be removed in 1.3.r?   rX   r   r   )r,   r™   rš   r5   rm   )r   r6   r7   ra   rb   ÚFutureWarningÚgetattr)rô   Údepr_msgÚestr1   r1   r2   Ú2test_minibatch_dict_learning_deprecated_attributes¯  s   
ÿÿ
"ÿrü   c                  C   sT   d} t dddd}tjt| d |jtdd W d   ƒ d S 1 s#w   Y  d S )NzM'iter_offset' is deprecated in version 1.1 and will be removed in version 1.3r?   rX   r   ©r,   r™   r5   rm   )Úiter_offset)r   ra   rb   rø   r¼   r7   ©rú   rû   r1   r1   r2   Ú?test_minibatch_dict_learning_partial_fit_iter_offset_deprecatedÀ  s   ÿ"ÿr   c                  C   sR   d} t ddddd}tjt| d | t¡ W d   ƒ d S 1 s"w   Y  d S )NzH'n_iter' is deprecated in version 1.1 and will be removed in version 1.3r?   rX   r   r   )r,   r™   rñ   r5   rm   )r   ra   rb   rø   r6   r7   rÿ   r1   r1   r2   Ú.test_minibatch_dict_learning_n_iter_deprecatedÌ  s   ÿÿ"ÿr  zarg, val))rþ   r   )Úinner_statsN)Úreturn_inner_statsF)Úreturn_n_iterF)rñ   r   c                 C   s\   d| › d}t jt|d ttfddddœ| |i¤Ž W d   ƒ d S 1 s'w   Y  d S )Nú'zB' is deprecated in version 1.1 and will be removed in version 1.3.rm   r?   rX   r   rý   )ra   rb   rø   r   r7   )ÚargÚvalrú   r1   r1   r2   Ú)test_dict_learning_online_deprecated_argsÚ  s   
ÿÿÿÿ"ÿr  c                  C   s†   d} t jt| d ttddd W d   ƒ n1 sw   Y  t jt| d tddd t¡ W d   ƒ d S 1 s<w   Y  d S )Nz+The default value of batch_size will changerm   r?   r   )r,   r5   )ra   rb   rø   r   r7   r   r6   ©Úmsgr1   r1   r2   Ú,test_batch_size_default_value_future_warningò  s   ÿ"ÿr  c                  C   s¦   t j d¡} t  ddgddgg¡}t  ddgdd	gg¡}t  ||¡|  d
d
¡ }| ¡ }t|||ƒ t  |j|¡}t  |j|¡}| ¡ }t|||||ƒ t	||ƒ d S )Nr   g      à?g      à¿r¤   gÍÌÌÌÌÌì?g      ð?r¹   g333333ã?gš™™™™™é?r?   )
r"   r#   r$   rí   r‡   r'   Úcopyr   ÚTr   )r*   r0   r/   r7   Ú
newd_batchÚAÚBÚnewd_onliner1   r1   r2   Útest_update_dictý  s   r  Ú	Estimatorc                 C   sH   | dd}t jtdd | t¡ W d   ƒ d S 1 sw   Y  d S )Nr¤   rº   zdefault transform_alpharm   )ra   rb   rø   rc   r7   )r  Údlr1   r1   r2   Ú$test_warning_default_transform_alpha  s   
"ÿr  c                  C   sF   d} t jt| d ttddd W d   ƒ d S 1 sw   Y  d S )Nz8The following arguments are incompatible with 'max_iter'rm   r   T)rš   r  r   r	  r1   r1   r2   Ú+test_dict_learning_online_n_iter_deprecated  s   "ÿr  r    )r   r   r   r   r   Ú	data_typec                 C   sH   d}t j d¡}| |t¡}tt | ¡| | ¡|d}|j| ks"J ‚d S )Né   r   rÃ   )	r"   r#   r$   r'   r(   r   r7   rÝ   Údtype)r  r    r,   r*   r/   r0   r1   r1   r2   Útest_sparse_encode_dtype_match&  s   ÿr  c                 C   sn   d}d}t j d¡}| |t¡}tt t j¡| t j¡| d}tt t j	¡| t j	¡| d}t
|||d d S )Nç-Cëâ6?r  r   rÃ   ©Úrtol)r"   r#   r$   r'   r(   r   r7   rÝ   rÞ   Úfloat64r   )r    r  r,   r*   r/   Úcode_32Úcode_64r1   r1   r2   Ú(test_sparse_encode_numerical_consistency6  s   ÿÿr!  c                 C   sP   d}t j d¡}| |t¡}t| | ¡|d}| t | ¡¡}|j	| ks&J ‚d S )Nr  r   rƒ   )
r"   r#   r$   r'   r(   r   rÝ   r9   r7   r  )r  rZ   r,   r*   r/   rÖ   r0   r1   r1   r2   Útest_sparse_coder_dtype_matchH  s   
ÿr"  )r   rv   zdata_type, expected_typec                 C   sN   t d||dd}| t | ¡¡ |jj|ksJ ‚| t | ¡¡j|ks%J ‚d S )Nr   r   )r,   rw   rZ   r5   )r   r6   r7   rÝ   r8   r  r9   ©r  Úexpected_typerw   rZ   Údict_learnerr1   r1   r2   Ú$test_dictionary_learning_dtype_matchZ  s   ür&  c              	   C   s|   t dd||dddd}| t | ¡¡ |jj|ksJ ‚| t | ¡¡j|ks(J ‚|jd j|ks2J ‚|jd j|ks<J ‚d S )Nr   r   rW   r¤   r   )r,   r™   rw   rZ   rš   r¦   r5   r   )r   r6   r7   rÝ   r8   r  r9   Ú_inner_statsr#  r1   r1   r2   Ú.test_minibatch_dictionary_learning_dtype_matchy  s   ù	r(  r¡   c                 C   sN   t j d¡}d}tt | ¡|d||d\}}}|j|ksJ ‚|j|ks%J ‚d S )Nr   r   r   ©r,   ro   r5   r¡   )r"   r#   r$   r   r7   rÝ   r  )r  r$  r¡   r*   r,   r0   r/   Ú_r1   r1   r2   Útest_dict_learning_dtype_matchž  s   ûr+  c           	      C   sì   d}d}d}t t tj¡||d| d\}}}t t tj¡||d| d\}}}tt ||¡t ||¡|d tt t 	|¡¡t t 	|¡¡|d tt |d ¡t |d ¡|d t 
|dk¡dksdJ ‚t |dk¡t |dk¡kstJ ‚d S )	Ngíµ ÷Æ°>rX   r?   r   r)  r  r¹   çš™™™™™©?)r   r7   rÝ   r"   r  rÞ   r   ÚmatmulrM   ÚabsÚmeanÚcount_nonzero)	r¡   r  r,   ro   ÚU_64ÚV_64r*  ÚU_32ÚV_32r1   r1   r2   Ú(test_dict_learning_numerical_consistency·  s,   
û
û&"$r5  c                 C   sN   t j d¡}d}tt | ¡|dd||d\}}|j|ksJ ‚|j|ks%J ‚d S )Nr   r   r   r   ©r,   ro   r™   r5   r¡   )r"   r#   r$   r   r7   rÝ   r  )r  r$  r¡   r*   r,   r0   r/   r1   r1   r2   Ú%test_dict_learning_online_dtype_matchÛ  s   
úr7  c                 C   sì   d}d}d}t t tj¡||dd| d\}}t t tj¡||dd| d\}}tt ||¡t ||¡|d tt t 	|¡¡t t 	|¡¡|d tt |d ¡t |d ¡|d t 
|d	k¡d
ksdJ ‚t |d	k¡t |d	k¡kstJ ‚d S )Nr  rX   r   r   r   r6  r  r?   r¹   r,  )r   r7   rÝ   r"   r  rÞ   r   r-  rM   r.  r/  r0  )r¡   r  r,   ro   r1  r2  r3  r4  r1   r1   r2   Ú/test_dict_learning_online_numerical_consistencyõ  s0   

ú

ú&"$r8  Ú	estimatorrX   )r™   c                 C   s   | j jS )N)ré   rê   )rG   r1   r1   r2   Ú<lambda>  s    r:  )Úidsc                    sH   |   t¡ tjd }|  ¡ }| jj ¡ ‰ t|‡ fdd„t|ƒD ƒƒ dS )z1Check feature names for dict learning estimators.r   c                    s   g | ]}ˆ › |› ‘qS r1   r1   )rS   rQ   ©Úestimator_namer1   r2   Ú
<listcomp>)  s    z.test_get_feature_names_out.<locals>.<listcomp>N)	r6   r7   r)   Úget_feature_names_outré   rê   Úlowerr   r»   )r9  r,   Úfeature_names_outr1   r<  r2   Útest_get_feature_names_out  s   

þrB  )gra   rd   Únumpyr"   Ú	functoolsr   r%   Úsklearn.baser   Úsklearn.exceptionsr   Úsklearn.utilsr   Úsklearn.utils._testingr   r   r   r	   r
   Úsklearn.decompositionr   r   r   r   r   r   Úsklearn.utils.estimator_checksr   r   r   Ú$sklearn.decomposition._dict_learningr   r#   r$   Ú
rng_globalr-   r(   r'   r7   r3   r<   r>   rk   rt   ÚmarkÚparametrizer{   r}   r€   rŠ   rŒ   r   r“   r•   r˜   rœ   rž   rŸ   r    r¢   r¬   r¯   r°   r³   r¸   rÁ   rÅ   rÈ   rÉ   rÏ   rÐ   rÓ   rÔ   r×   rá   rç   rì   rï   Úfilterwarningsró   rü   r   r  r  r  r  r  r  rÞ   r  r  r!  r"  Úint32Úint64r&  r(  r+  r5  r7  r8  r  rB  r1   r1   r1   r2   Ú<module>   sf   9þ
þ
5	










úþ
þ


ÿ
ÿ
ÿÿ



üþ	ÿ



üþ	



üþ	
#



üþ	
%ý