o
    \i{w                  
   @   s  d dl Z d dlZd dlmZ d dlZd dlZd dlZd dlm	Z	 d dl
mZmZmZmZmZ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mZmZ d d	lmZmZ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g d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"d# Z4d$d% Z5d&d' Z6d(d) Z7d*d+ Z8d,d- Z9d.d/ Z:ej/0dg dej/0dddgej/0dddgd0d1 Z;ej/0dddgd2d3 Z<ej/0dddgej/0dddgd4d5 Z=d6d7 Z>d8d9 Z?d:d; Z@d<d= ZAd>d? ZBd@dA ZCdBdC ZDej/0dDg dej/0dEddgdFdG ZEej/0dDdHdIgdJdK ZFdLdM ZGdNdO ZHdPdQ ZIdRdS ZJdTdU ZKdVdW ZLdXdY ZMdZd[ ZNd\d] ZOej/0d^d_ej/0d`ejPejQfdadb ZRej/0d^d_dcdd ZSej/0dd_ej/0d`ejPejQfdedf ZTej/0dgdhej/0dd_ej/0diejPejPfejQejQfejUejQfejVejQffdjdk ZWej/0dgdhej/0dd_ej/0diejPejPfejQejQfejUejQfejVejQffdldm ZXej/0dndhej/0diejPejPfejQejQfejUejQfejVejQffdodp ZYej/0dndhdqdr ZZej/0dndhej/0diejPejPfejQejQfejUejQfejVejQffdsdt Z[ej/0dndhdudv Z\ej/j0dwee)j]e edxdydzgd{d| d}d~d Z^dd Z_dS )    N)partial)clone)DictionaryLearningMiniBatchDictionaryLearningSparseCoderdict_learningdict_learning_onlinesparse_encode)_update_dict)ConvergenceWarning)check_array)
TempMemmapassert_allcloseassert_array_almost_equalassert_array_equalignore_warnings)#check_transformer_data_not_an_arraycheck_transformer_generalcheck_transformers_unfitted)Parallel)
      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 r2   /var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/lib/python3.10/site-packages/sklearn/decomposition/tests/test_dict_learning.pytest_sparse_encode_shapes_omp(   s   r4   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-   dicor2   r2   r3   test_dict_learning_shapes3   s   "r=   c                  C   s.   d} t | ddt}|jj| tfksJ d S )N   r   r5   )r   r7   r8   r9   r*   r)   r;   r2   r2   r3   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 sw   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xr2   r2   r3   ricker_functionE   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#   rA   empty	enumeraterB   sumnewaxis)rG   rE   r-   centersDirF   )rI   r2   r3   ricker_matrixO   s   *z$test_max_iter.<locals>.ricker_matrixr   i   r@   c                 3   s"    | ]}| d  dV  qdS )r   )rG   rE   r-   Nr2   ).0w)r-   rE   rS   r2   r3   	<genexpr>_   s    

z test_max_iter.<locals>.<genexpr>)r   2   d   i    r   r      g      @g      )transform_algorithmtransform_max_itererrori  )r#   r_tuplerA   logical_notreshapepytestwarnsr   r   fit_transformwarningscatch_warningssimplefilter)r\   subsamplingD_multir8   first_quartermodelr2   )r-   rE   rI   rS   r3   test_max_iterD   s:   
		
"rm   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)rc   raises
ValueErrorr   r8   )r-   rq   err_msgr2   r2   r3   *test_dict_learning_lars_positive_parameter}   s   "rv   r\   )r   r   r   rr   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)r\   r6   rr   rw   fit_algorithm)r   r7   r8   r:   r9   allanyr\   rr   rw   r-   r<   r1   r2   r2   r3   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   rx   )r\   r6   rw   ry   )r   r7   r8   r9   rz   r{   rw   r-   r<   r2   r2   r3   '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   Trx   )r\   r6   rr   ry   9Positive constraint not supported for '{}' coding method.ro   )r   r7   r8   formatrc   rs   rt   r:   )r-   r<   ru   r2   r2   r3   'test_dict_learning_lars_code_positivity   s   
"r   c                  C   s   d} t | dddd}|tt}tt||jt t||t |j	dd |t}tt||jtdd	 t||tdd	 t
jtd
d ||d d d df  W d    d S 1 sew   Y  d S )Nr>   r   MbP?r   )r\   transform_alphar6   r   r\   r    decimalzExpected 12, got 11.ro   r[   )r   r7   r8   r:   r   r#   dotr9   inverse_transform
set_paramsrc   rs   rt   r-   r<   r1   r2   r2   r3   !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   rZ   r\   r   r6   r"   r   r   r    r   )	r   r7   r8   r:   r   r#   r   r9   r   r   r2   r2   r3   *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   rZ   r   )categoryr    r   )r   r8   r   r   r   r7   r:   r   r#   r   r9   )r-   X_read_onlyr<   r1   r2   r2   r3   (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 )	NrZ   r   r@   r   )r\   transform_n_nonzero_coefsr6   r   r   r   )	r   r7   r8   r:   r#   rO   lenflatnonzeror   r   r2   r2   r3    test_dict_learning_nonzero_coefs   s   r   c                  C   s   d} t | ddd}|tt}||}d|_|t}t|d d d | f |d d | d f  | ||}t|| d S )Nr   r   r   )r\   r6   T)r   r7   r8   r:   r   
split_signr   )r-   r<   r1   Xr
split_codeXr2r2   r2   r3   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J |j|tfks'J t ||jtjks3J tt|ddd| dd}|j|tfksGJ d S )	Nr   r   rZ   r   rx   T)r-   
batch_sizemax_itermethodr6   return_codeF)	r#   r$   r%   r   r8   r*   r.   r)   r   )r+   r-   r1   r0   r2   r2   r3    test_dict_learning_online_shapes"  s0   
		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 )Nrn   ro   rZ   r   T)r   r   rr   )rc   rs   rt   r   r8   )ru   r2   r2   r3   1test_dict_learning_online_lars_positive_parameter?  s   "r   c              
   C   s   d}t |dd| d||ddt}|t}|r"|jdk s!J n	|jdk  s+J |r7|dk s5J d S |dk  s?J d S )Nr   rZ   r   r   rx   )r   r   r\   r6   rr   rw   ry   )r   r7   r8   r:   r9   rz   r{   r|   r2   r2   r3   -test_minibatch_dictionary_learning_positivityE  s(   	
r   c              	   C   sP   d}t |dddd| ddt}| r|jdk sJ d S |jdk  s&J d S )Nr   rZ   r   r   r   rx   )r   r   r\   r6   rw   ry   )r   r7   r8   r9   rz   r{   r~   r2   r2   r3   'test_minibatch_dictionary_learning_larsi  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   rZ   rx   r   )r-   r   r   rq   r6   rw   rr   )r#   r$   r%   r   r8   rz   r{   )rr   rw   r+   r-   r1   r0   r2   r2   r3   $test_dict_learning_online_positivity}  s$   

r   c                  C   s   d} dd l }ddlm} |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   )StringIOrZ   r   皙?)r   r   verbosetolr6   r    )r   r   r   max_no_improvementr6   )r   r   r   r6   )r-   r   rq   r   r6   )sysior   stdoutr   r7   r8   r   r9   r*   r)   )r-   r   r   
old_stdoutr<   r2   r2   r3   #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   rZ   r   r   r   r6   r   r7   r8   r9   r*   r)   r;   r2   r2   r3   *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>   rZ   r   r   r   r   r;   r2   r2   r3   &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   rZ   )r   r   	dict_initr6   )
r#   r$   r%   r(   r)   r   r7   r8   r   r9   )r-   r+   Vr<   r2   r2   r3   (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)writerZ   r   )r   r   r   r6   shuffle)	r#   r$   r%   r(   r)   setflagsr   r7   r8   )r-   r+   r   r2   r2   r3   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   rJ   r   F        )r   r   rq   r   r   r   r   r6   )rq   r   r6   rq   r   rX   )r#   r$   r%   r(   r)   rN   rO   r   r7   r8   rangepartial_fitrz   r	   r9   r   n_steps_)r-   r+   r   dict1dict2rR   sampler2   r2   r3   %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   rJ   r   r   r   r   r   r!   )r#   r$   r%   r(   r)   rN   rO   r	   r8   r*   r.   )r-   r+   r   algor1   r2   r2   r3   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   rJ   r!   r   )r#   r$   r%   r(   r)   rN   rO   r	   r8   rz   r{   )r   r   r-   r+   r   r1   r2   r2   r3   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   rJ   r   ro   Tr   )r#   r$   r%   r(   r)   rN   rO   r   rc   rs   rt   r	   r8   )r   r-   r+   r   ru   r2   r2   r3   )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 )
NrX   r   r    r   rJ   F)orderr   r   )r#   r$   r%   r(   r)   rN   rO   r   r8   r	   r   )r-   r+   r   Xfr   abr2   r2   r3   test_sparse_encode_input8  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   rJ   r   r   r   )r#   r$   r%   r(   r)   rN   rO   r	   r8   rz   rB   r   )r-   r+   r   r1   r2   r2   r3   test_sparse_encode_errorD  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   rX   @   r    r   )r!   n_nonzero_coefs)rX   r    )r#   r$   r%   r(   r   r	   r*   )r+   r8   rQ   r1   r2   r2   r3   )test_sparse_encode_error_default_sparsityN  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r:J t t t ||t	 d d	k sNJ t j|t || d S )
Nr>   r   r    r   rJ   r   r   r0   r\   r   r   )r#   r$   r%   r(   r)   rN   rO   r   re   r8   r   rz   rB   r   testingr   )r-   r+   r   coderr1   r   r2   r2   r3   test_sparse_coder_estimatorV  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   rJ   r   r   r   )r#   r$   r%   r(   r)   rN   rO   r   r   idr   r   r0   n_components_n_features_in_randr.   astypefloat32r:   )r-   r+   r   r   cloneddatar2   r2   r3   !test_sparse_coder_estimator_clonee  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    >ArZ   r   r    )r\   r"   )	r#   r$   r%   r   intr   r   r   re   )r+   r-   r)   	init_dictr.   r   scr2   r2   r3   test_sparse_coder_parallel_mmapw  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_memmapr2   r2   r3   $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   r2   r2   r3   test_sparse_coder_n_features_in  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+   r1   r0   r8   
newd_batchABnewd_onliner2   r2   r3   test_update_dict  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	   r8   r   dtype)r   r!   r-   r+   r0   r1   r2   r2   r3   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	   r8   r   r   float64r   )r!   r   r-   r+   r0   code_32code_64r2   r2   r3   (test_sparse_encode_numerical_consistency  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   r:   r8   r   )r   r\   r-   r+   r0   r   r1   r2   r2   r3   test_sparse_coder_dtype_match  s   
r  ry   )r   rx   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-   ry   r\   r6   )r   r7   r8   r   r9   r   r:   r   expected_typery   r\   dict_learnerr2   r2   r3   $test_dictionary_learning_dtype_match  s   r  c              	   C   st   t dd||dddd}|t|  |jj|ksJ |t| j|ks(J |jj|ks0J |jj|ks8J d S )Nr   r   rX   r   r   )r-   r   ry   r\   r   r   r6   )	r   r7   r8   r   r9   r   r:   _A_Br  r2   r2   r3   .test_minibatch_dictionary_learning_dtype_match
  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-   rq   r6   r   )r#   r$   r%   r   r8   r   r   )r   r  r   r+   r-   r1   r0   _r2   r2   r3   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ư>rZ   r    r   r	  r   r   皙?)r   r8   r   r#   r   r   r   matmulrN   absmeancount_nonzero)	r   r   r-   rq   U_64V_64r
  U_32V_32r2   r2   r3   (test_dict_learning_numerical_consistencyH  s,   

&"$r  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-   rq   r   r6   r   )r#   r$   r%   r   r8   r   r   )r   r  r   r+   r-   r1   r0   r2   r2   r3   %test_dict_learning_online_dtype_matchl  s   
r  c                 C   s   d}d}d}t ttj|d|dd| dd d	\}}t ttj|d|dd| dd d	\}}tt||t|||d	 ttt	|tt	||d	 tt|d
 t|d
 |d	 t
|dkdksjJ t|dkt|dkkszJ d S )Nr   rZ   r   rY   r   r   r   )r-   r   rq   r   r6   r   r   r   r   r    r  )r   r8   r   r#   r   r   r   r  rN   r  r  r  )r   r   r-   rq   r  r  r  r  r2   r2   r3   /test_dict_learning_online_numerical_consistency  s<   



&"$r  	estimatorrZ   r   )r   r   c                 C   s   | j jS )N)r   r   )rH   r2   r2   r3   <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 r2   r2   )rT   rR   estimator_namer2   r3   
<listcomp>  s    z.test_get_feature_names_out.<locals>.<listcomp>N)	r7   r8   r*   get_feature_names_outr   r   lowerr   r   )r  r-   feature_names_outr2   r  r3   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   rX   )
max_nbytesr   r   r   r    rx   rW   T)r-   r6   r"   ry   r   r   )setattrsklearndecomposition_dict_learningr   r   r#   r$   r%   r(   r   r7   )monkeypatchr+   X_trainr  r2   r2   r3   %test_cd_work_on_joblib_memmapped_data  s    

r)  )`r&   rf   	functoolsr   numpyr#   rc   r$  sklearn.baser   sklearn.decompositionr   r   r   r   r   r	   $sklearn.decomposition._dict_learningr
   sklearn.exceptionsr   sklearn.utilsr   sklearn.utils._testingr   r   r   r   r   sklearn.utils.estimator_checksr   r   r   sklearn.utils.parallelr   r$   r%   
rng_globalr.   r)   r(   r8   r4   r=   r?   rm   rv   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   r   r   r   r  int32int64r  r  r  r  r  r  r   r!  r)  r2   r2   r2   r3   <module>   s$    9

5	









	



	



	
#



	
+

	