U
    ½mœds„  ã                
   @   sÚ  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 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/ 0d!d"d#d$g¡e j/ 0d%d&d'g¡e j/ 0d(d&d'g¡d)d*„ ƒƒƒZ1e j/ 0d(d&d'g¡d+d,„ ƒZ2d-d.„ Z3d/d0„ Z4d1d2„ Z5d3d4„ Z6d5d6„ Z7d7d8„ Z8d9d:„ Z9d;d<„ Z:e j/ 0d!d"d#d$g¡e j/ 0d%d&d'g¡e j/ 0d(d&d'g¡d=d>„ ƒƒƒZ;e j/ 0d(d&d'g¡d?d@„ ƒZ<e j/ 0d%d&d'g¡e j/ 0d(d&d'g¡dAdB„ ƒƒZ=dCdD„ Z>dEdF„ Z?dGdH„ Z@dIdJ„ ZAdKdL„ ZBdMdN„ ZCdOdP„ ZDe j/ 0dQd"d#d$g¡e j/ 0dRd&d'g¡dSdT„ ƒƒZEe j/ 0dQdUdVg¡dWdX„ ƒZFdYdZ„ ZGd[d\„ ZHd]d^„ ZId_d`„ ZJdadb„ ZKdcdd„ ZLdedf„ ZMdgdh„ ZNdidj„ ZOe j/ 0dkdldmdng¡dodp„ ƒZPdqdr„ ZQdsdt„ ZRe j/ 0dudvdwdxdydzg¡d{d|„ ƒZSd}d~„ ZTdd€„ ZUd�d‚„ ZVe j/ 0dƒd„¡e j/ 0d…ejWejXf¡d†d‡„ ƒƒZYe j/ 0dƒd„¡dˆd‰„ ƒZZe j/ 0d!d„¡e j/ 0d…ejWejXf¡dŠd‹„ ƒƒZ[e j/ 0dŒd�¡e j/ 0d!d„¡e j/ 0dŽejWejWfejXejXfej\ejXfej]ejXff¡d�d�„ ƒƒƒZ^e j/ 0dŒd�¡e j/ 0d!d„¡e j/ 0dŽejWejWfejXejXfej\ejXfej]ejXff¡d‘d’„ ƒƒƒZ_e j/ 0d“d�¡e j/ 0dŽejWejWfejXejXfej\ejXfej]ejXff¡d”d•„ ƒƒZ`e j/ 0d“d�¡d–d—„ ƒZae j/ 0d“d�¡e j/ 0dŽejWejWfejXejXfej\ejXfej]ejXff¡d˜d™„ ƒƒZbe j/ 0d“d�¡dšd›„ ƒZce j/j0dœee)jdƒeƒ ed�dždŸ�gd d¡„ d¢�d£d¤„ ƒZed¥d¦„ Zfd§d¨„ ZgdS )©é    N)Úpartial)Úclone)ÚConvergenceWarning)Úcheck_array)ÚParallel)Ú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¡} dddddg}t ddgdd	g¡D ]\\}}|  |t¡}|  |t¡}t |dd
g¡D ]*\}}t||||d�}|j||fks^t	‚q^q.d S )Nr   ÚompÚ
lasso_larsÚlasso_cdÚlarsÚ	thresholdé   é   é	   é   )Ú	algorithmÚn_jobs)
ÚnpÚrandomÚRandomStateÚ	itertoolsÚproductÚrandnÚ
n_featuresr   ÚshapeÚAssertionError)	ÚrngZ
algorithmsÚn_componentsÚ	n_samplesZX_Ú
dictionaryr!   r"   Úcode© r1   úg/home/sam/Atlas/atlas_env/lib/python3.8/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*t‚d} t | dd� t¡}|jj| tfksTt‚| t¡jtjd | fksrt‚d S )Nr   r   ©Úrandom_stater   )r   ÚfitÚXÚcomponents_r*   r)   r+   Ú	transform©r-   Údicor1   r1   r2   Útest_dict_learning_shapes4   s    r<   c                  C   s.   d} t | dd� t¡}|jj| tfks*t‚d S )Né   r   r4   )r   r6   r7   r8   r*   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 5 Q R X t ¡ �* t dt¡ t	|| dd�}| 
|¡ W 5 Q R X 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_functionF   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?   ©ZaxisN)r#   r@   ÚemptyÚ	enumeraterA   ÚsumÚnewaxis)rF   rD   r-   ZcentersÚDÚirE   )rH   r1   r2   Úricker_matrixP   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   rP   r1   r2   Ú	<genexpr>`   s   ý  ÿz test_max_iter.<locals>.<genexpr>)r   é2   éd   iô  iè  r   r   é   g      @g      ð¿éÿÿÿÿ)Útransform_algorithmZtransform_max_iterÚerroriÐ  )r#   Zr_Útupler@   Zlogical_notZreshapeÚpytestÚwarnsr   r   Úfit_transformÚwarningsÚcatch_warningsÚsimplefilter)rX   ZsubsamplingZD_multir7   Zfirst_quarterÚmodelr1   )r-   rD   rH   rP   r2   Útest_max_iterE   s>    
	üÿ	  ÿ
  ÿrb   c               	   C   s:   d} d}d}t jt|d�� tt| |dd� W 5 Q R X d S )Nr   r   ú;Positive constraint not supported for 'lars' coding method.©ÚmatchT)ÚalphaÚpositive_code)r[   ÚraisesÚ
ValueErrorr   r7   )r-   rf   Úerr_msgr1   r1   r2   Ú*test_dict_learning_lars_positive_parameter~   s
    rk   rX   r   r   r   rg   FTÚpositive_dictc                 C   s|   d}t || d||dd� t¡}| t¡}|r@|jdk ¡ sRt‚n|jdk  ¡ sRt‚|rh|dk ¡ sxt‚n|dk  ¡ sxt‚d S )Nr   r   Úcd)rX   r5   rg   rl   Úfit_algorithm)r   r6   r7   r9   r8   Úallr+   Úany©rX   rg   rl   r-   r;   r0   r1   r1   r2   Útest_dict_learning_positivity†   s$    úù	
rr   c                 C   sJ   d}t |dd| dd� t¡}| r4|jdk ¡ sFt‚n|jdk  ¡ sFt‚d S )Nr   r   r   rm   )rX   r5   rl   rn   )r   r6   r7   r8   ro   r+   rp   ©rl   r-   r;   r1   r1   r2   Ú'test_dict_learning_lars_dict_positivity¦   s    ûúrt   c               	   C   sR   d} t | ddddd� t¡}d}| d¡}tjt|d�� | t¡ W 5 Q R X d S )	Nr   r   r   Trm   )rX   r5   rg   rn   ú9Positive constraint not supported for '{}' coding method.rd   )r   r6   r7   Úformatr[   rh   ri   r9   )r-   r;   rj   r1   r1   r2   Ú'test_dict_learning_lars_code_positivity·   s    ûú
rw   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   )rX   Útransform_alphar5   r   ©rX   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   rx   r   rV   ©rX   ry   r5   r"   r   rz   r?   r{   r}   r€   r1   r1   r2   Ú*test_dict_learning_reconstruction_parallel×   s    û
rƒ   c               
   C   sl   d} t tƒ�V}t| ddddd�}ttd�� | |¡ |¡}W 5 Q R X tt 	||j
¡|dd	� W 5 Q R X d S )
Nr=   r   rx   r   rV   r‚   )Úcategoryr?   r{   )r   r7   r   r
   r   r6   r9   r   r#   r~   r8   )r-   Z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sDt‚|j	dd� | ttjdf ¡}tt |¡ƒdkszt‚d S )	NrV   r   r    r   )rX   Ztransform_n_nonzero_coefsr5   r   r   rz   )
r   r6   r7   r9   r#   rM   ÚlenZflatnonzeror+   r   r€   r1   r1   r2   Ú test_dict_learning_nonzero_coefsú   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   )rX   r5   T)r   r6   r7   r9   Z
split_signr   )r-   r;   r0   Z
split_coder1   r1   r2   Útest_dict_learning_split
  s      ÿ
& ÿrˆ   c               	   C   s’   t j d¡} d}tt|ddd| dd�\}}|jt|fks<t‚|j|tfksNt‚t  	||¡jtjksft‚tt|ddd| dd�}|j|tfksŽt‚d S )	Nr   r   rV   r   rm   T)r-   Ú
batch_sizeÚmax_iterÚmethodr5   Zreturn_codeF)
r#   r$   r%   r   r7   r*   r.   r+   r)   r~   )r,   r-   r0   r/   r1   r1   r2   Ú test_dict_learning_online_shapes  s0    ù
	ù	rŒ   c               	   C   s2   d} t jt| d�� ttdddd� W 5 Q R X d S )Nrc   rd   rV   r   T)r‰   rŠ   rg   ©r[   rh   ri   r   r7   )rj   r1   r1   r2   Ú1test_dict_learning_online_lars_positive_parameter5  s    rŽ   c              
   C   s€   d}t |dd| d||dd� t¡}| t¡}|rD|jdk ¡ sVt‚n|jdk  ¡ sVt‚|rl|dk ¡ s|t‚n|dk  ¡ s|t‚d S )Nr   rV   r   r   rm   )r‰   rŠ   rX   r5   rg   rl   rn   )r   r6   r7   r9   r8   ro   r+   rp   rq   r1   r1   r2   Ú-test_minibatch_dictionary_learning_positivity;  s(    ø	÷
r�   c              	   C   sN   d}t |dddd| dd� t¡}| r8|jdk ¡ sJt‚n|jdk  ¡ sJt‚d S )Nr   rV   r   r   r   rm   )r‰   rŠ   rX   r5   rl   rn   )r   r6   r7   r8   ro   r+   rp   rs   r1   r1   r2   Ú'test_minibatch_dictionary_learning_lars_  s    ùø
r�   c              
   C   s|   t j d¡}d}tt|ddd||| d�\}}|rB|dk ¡ sRt‚n|dk  ¡ sRt‚| rh|dk ¡ sxt‚n|dk  ¡ sxt‚d S )Nr   r   rV   rm   r   )r-   r‰   r‹   rf   r5   rl   rg   )r#   r$   r%   r   r7   ro   r+   rp   )rg   rl   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}zŒ|ƒ |_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 5 ||_X |jj	| t
fksÈt‚d S )Nr   r   )ÚStringIOrV   r   çš™™™™™¹?)r‰   rŠ   ÚverboseÚtolr5   r?   )r‰   rŠ   r”   Úmax_no_improvementr5   )r‰   rŠ   r”   r5   )r-   r‰   rf   r”   r5   )Úior’   ÚsysÚstdoutr   r6   r7   r   r8   r*   r)   r+   )r-   r’   r˜   Z
old_stdoutr;   r1   r1   r2   Ú#test_dict_learning_online_verbosity�  sd         ÿ
ú
    ÿ
úú
	rš   c                  C   s6   d} t | dddd�}| t¡ |jj| tfks2t‚d S )Nr   rV   r   ©r‰   rŠ   r5   ©r   r6   r7   r8   r*   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.t‚d S )Nr=   rV   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   rV   )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)ÚwriterV   r   )r‰   rŠ   rŸ   r5   Úshuffle)	r#   r$   r%   r(   r)   Z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€qxt  tt	|jdd�dk¡r¾t‚t|j|jdd� |j|j  krèdksîn t‚d S )Nr=   r   r?   r   rI   r   Fç        )rŠ   r‰   rf   r£   rŸ   r–   r•   r5   )rf   rŸ   r5   ©rf   r{   rU   )r#   r$   r%   r(   r)   rL   rM   r   r6   r7   ÚrangeÚpartial_fitro   r   r8   r+   r   Zn_steps_)r-   r,   r    Zdict1Zdict2rO   Úsampler1   r1   r2   Ú%test_dict_learning_online_partial_fitì  s:    $÷
ö   ÿ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sDt‚qDd S )Nr=   r   r?   r   rI   ©r   r   r   r   r   ©r!   )r#   r$   r%   r(   r)   rL   rM   r   r7   r*   r.   r+   )r-   r,   r    Úalgor0   r1   r1   r2   Útest_sparse_encode_shapes
  s    $r¯   r®   Úpositivec                 C   sz   d}t j d¡}| |t¡}|t j|d dd�d d …t jf  }tt|| |d�}|rf|dk 	¡ svt
‚n|dk  ¡ svt
‚d S )Nr=   r   r?   r   rI   ©r!   r°   )r#   r$   r%   r(   r)   rL   rM   r   r7   ro   r+   rp   )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 5 Q R X d S )
Nr=   r   r?   r   rI   ru   rd   Tr±   )r#   r$   r%   r(   r)   rL   rM   rv   r[   rh   ri   r   r7   )r®   r-   r,   r    rj   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
||ƒ qPd S )
NrU   r   r?   r   rI   ÚF)Úorderr¬   r­   )r#   r$   r%   r(   r)   rL   rM   r   r7   r   r   )r-   r,   r    Z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¡r`t
‚t  t  t  ||¡t d ¡¡dk sˆt
‚d S )	Nr=   r   r?   r   rI   rx   r§   r“   )r#   r$   r%   r(   r)   rL   rM   r   r7   ro   r+   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sFt‚d S )Nr   rU   é@   r?   r   )r!   Zn_nonzero_coefs)rU   r?   )r#   r$   r%   r(   r
   r   r*   r+   )r,   r7   rN   r0   r1   r1   r2   Ú)test_sparse_encode_error_default_sparsityD  s
    r»   c               	   C   sD   d} t j d¡}| | t¡}t t¡� tt	|dd� W 5 Q R X d S )Nr=   r   z	<unknown>r­   )
r#   r$   r%   r(   r)   r[   rh   ri   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¡rft‚t  t  t  ||¡t	 d ¡¡d	k sŽt‚d S )
Nr=   r   r?   r   rI   r   rx   ©r/   rX   ry   r“   )r#   r$   r%   r(   r)   rL   rM   r   r9   r7   ro   r+   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sjt
‚t j |j|j¡ t	|jƒt	|jƒks”t
‚|j|jks¤t
‚|j|jks´t
‚t j tt¡ t j¡}t j | |¡| |¡¡ d S )	Nr=   r   r?   r   rI   r   rx   r½   )r#   r$   r%   r(   r)   rL   rM   r   r   Úidr+   Útestingr   r/   Zn_components_Ún_features_in_Úrandr.   ÚastypeÚfloat32r9   )r-   r,   r    r¾   Z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    €„>ArV   r   r?   )rX   r"   )	r#   r$   r%   rÃ   ÚintrÄ   rÅ   r   r]   )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)Zreadonly_memmap)r#   r$   r%   rÃ   r   r   Ú	__class__Ú__name__r   r   r   )r,   r-   r)   rË   rÌ   Z check_transformer_general_memmapr1   r1   r2   Ú$test_sparse_coder_common_transformer…  s     ÿrÐ   c                  C   s:   t  dddgdddgg¡} t| ƒ}|j| jd ks6t‚d S )Nr   r?   r    )r#   Úarrayr   rÂ   r*   r+   )ÚdrÌ   r1   r1   r2   Útest_sparse_coder_n_features_in•  s    rÓ   ÚattrZiter_offset_Zinner_stats_Zrandom_state_c              	   C   sN   d| › d�}t ddddd�}| t¡ tjt|d�� t|| ƒ W 5 Q R X d S )	NzThe attribute `z2` is deprecated in 1.1 and will be removed in 1.3.r?   rV   r   r   )r-   r‰   rŠ   r5   rd   )r   r6   r7   r[   r\   ÚFutureWarningÚgetattr)rÔ   Údepr_msgÚestr1   r1   r2   Ú2test_minibatch_dict_learning_deprecated_attributes›  s    
ÿ   ÿ
rÙ   c               	   C   s>   d} t dddd�}tjt| d�� |jtdd� W 5 Q R X d S )NzM'iter_offset' is deprecated in version 1.1 and will be removed in version 1.3r?   rV   r   ©r-   r‰   r5   rd   )Úiter_offset)r   r[   r\   rÕ   r©   r7   ©r×   rØ   r1   r1   r2   Ú?test_minibatch_dict_learning_partial_fit_iter_offset_deprecated¬  s
    ÿrÝ   c               	   C   s<   d} t ddddd�}tjt| d�� | t¡ W 5 Q R X d S )NzH'n_iter' is deprecated in version 1.1 and will be removed in version 1.4r?   rV   r   r   )r-   r‰   Ún_iterr5   rd   )r   r[   r\   rÕ   r6   r7   rÜ   r1   r1   r2   Ú.test_minibatch_dict_learning_n_iter_deprecated¸  s    ÿ   ÿrß   zarg, val)rÛ   r   )Zinner_statsN)Úreturn_inner_statsF)Zreturn_n_iterF)rÞ   r   c              	   C   sF   d| › d�}t jt|d��" ttfddddœ| |i—Ž W 5 Q R X d S )Nú'zB' is deprecated in version 1.1 and will be removed in version 1.3.rd   r?   rV   r   rÚ   )r[   r\   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 5 Q R X t jt| d�� tddd� t¡ W 5 Q R X d S )Nz+The default value of batch_size will changerd   r?   r   )r-   r5   )r[   r\   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   Z
newd_batchÚAÚBZnewd_onliner1   r1   r2   Útest_update_dicté  s    rì   c               	   C   s0   d} t jt| d�� ttddd� W 5 Q R X d S )Nz8The following arguments are incompatible with 'max_iter'rd   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sDt	‚d S )Né   r   r­   )
r#   r$   r%   r(   r)   r   r7   rÄ   Údtyper+   )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/   Zcode_32Zcode_64r1   r1   r2   Ú(test_sparse_encode_numerical_consistency  s    
 
 ÿ
 
 ÿrö   c                 C   sP   d}t j d¡}| |t¡}t| | ¡|d�}| t | ¡¡}|j	| ksLt
‚d S )Nrï   r   rz   )r#   r$   r%   r(   r)   r   rÄ   r9   r7   rð   r+   )rî   rX   r-   r,   r/   r¾   r0   r1   r1   r2   Útest_sparse_coder_dtype_match+  s     ÿr÷   rn   )r   rm   zdata_type, expected_typec                 C   sN   t d||dd�}| t | ¡¡ |jj|ks0t‚| t | ¡¡j|ksJt‚d S )Nr   r   )r-   rn   rX   r5   )r   r6   r7   rÄ   r8   rð   r+   r9   ©rî   Úexpected_typern   rX   Údict_learnerr1   r1   r2   Ú$test_dictionary_learning_dtype_match=  s    ürû   c              	   C   s|   t dd||dddd�}| t | ¡¡ |jj|ks6t‚| t | ¡¡j|ksPt‚|jd j|ksdt‚|jd j|ksxt‚d S )Nr   r   rU   r“   r   )r-   r‰   rn   rX   rŠ   r•   r5   r   )	r   r6   r7   rÄ   r8   rð   r+   r9   Z_inner_statsrø   r1   r1   r2   Ú.test_minibatch_dictionary_learning_dtype_match\  s    ù	rü   r‹   c                 C   sN   t j d¡}d}tt | ¡|d||d�\}}}|j|ks<t‚|j|ksJt‚d S )Nr   r   r   ©r-   rf   r5   r‹   )r#   r$   r%   r   r7   rÄ   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sÈt‚t |dk¡t |dk¡ksèt‚d S )	Ng�íµ ÷Æ°>rV   r?   r   rý   ró   r¦   çš™™™™™©?)r   r7   rÄ   r#   rõ   rÅ   r   ÚmatmulrL   ÚabsÚmeanr+   Úcount_nonzero)	r‹   rô   r-   rf   ÚU_64ÚV_64rþ   ÚU_32ÚV_32r1   r1   r2   Ú(test_dict_learning_numerical_consistencyš  s,    
û
û&"r	  c                 C   sN   t j d¡}d}tt | ¡|dd||d�\}}|j|ks<t‚|j|ksJt‚d S )Nr   r   r   r   ©r-   rf   r‰   r5   r‹   )r#   r$   r%   r   r7   rÄ   rð   r+   )rî   rù   r‹   r,   r-   r0   r/   r1   r1   r2   Ú%test_dict_learning_online_dtype_match¾  s    ú
r  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sÈt‚t |d	k¡t |d	k¡ksèt‚d S )Nrò   rV   r   r   r   r
  ró   r?   r¦   r   )r   r7   rÄ   r#   rõ   rÅ   r   r  rL   r  r  r+   r  )r‹   rô   r-   rf   r  r  r  r  r1   r1   r2   Ú/test_dict_learning_online_numerical_consistencyØ  s0    
ú

ú
&"r  Ú	estimatorrV   r   )r‰   rŠ   c                 C   s   | j jS )N)rÎ   rÏ   )rG   r1   r1   r2   Ú<lambda>  ó    r  )Z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   )rQ   rO   ©Zestimator_namer1   r2   Ú
<listcomp>  s     z.test_get_feature_names_out.<locals>.<listcomp>N)	r6   r7   r*   Zget_feature_names_outrÎ   rÏ   Úlowerr	   r¨   )r  r-   Zfeature_names_outr1   r  r2   Útest_get_feature_names_outþ  s    

þr  c                 C   sT   |   tjjdttdd�¡ tj d¡}| 	dd¡}t
ddddd	d
d�}| |¡ d S )Nr   rU   )Z
max_nbytesr   r   r   r?   rm   rT   T)r-   r5   r"   rn   rŠ   r”   )ÚsetattrÚsklearnÚdecompositionZ_dict_learningr   r   r#   r$   r%   r(   r   r6   )Zmonkeypatchr,   ZX_trainrú   r1   r1   r2   Ú%test_cd_work_on_joblib_memmapped_data  s     
ýú
r  c               	   C   sD   d} t jt| d�� tdddd� t¡}W 5 Q R X |jdks@t‚dS )znCheck that we always raise a warning when `n_iter` is set even if it is
    ignored if `max_iter` is set.
    z%'n_iter' is deprecated in version 1.1rd   é   r?   )r‰   rÞ   rŠ   N)r[   r\   rÕ   r   r6   r7   Zn_iter_r+   )Zwarn_msgra   r1   r1   r2   Ú:test_minibatch_dictionary_learning_warns_and_ignore_n_iter,  s    r  )hr[   r^   Únumpyr#   Ú	functoolsr   r&   r  Zsklearn.baser   Zsklearn.exceptionsr   Zsklearn.utilsr   Zsklearn.utils.parallelr   Zsklearn.utils._testingr   r   r	   r
   r   Zsklearn.decompositionr   r   r   r   r   r   Zsklearn.utils.estimator_checksr   r   r   Z$sklearn.decomposition._dict_learningr   r$   r%   Z
rng_globalr.   r)   r(   r7   r3   r<   r>   rb   rk   ÚmarkZparametrizerr   rt   rw   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ß   rä   rç   rì   rí   rÅ   rõ   rñ   rö   r÷   Zint32Zint64rû   rü   rÿ   r	  r  r  ré   r  r  r  r1   r1   r1   r2   Ú<module>   sr  9ýþ
ýþ
5	




ûþ

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