
    {Kgv              
       |   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jF                  jI                  d       Z%d\  Z&Z'e%jQ                  e&e'      Z)d Z*d Z+d Z,d Z-d Z.ej^                  ja                  dg d      ej^                  ja                  dddg      ej^                  ja                  dddg      d                      Z1ej^                  ja                  dddg      d        Z2d Z3d Z4d Z5d Z6d Z7d Z8d Z9d  Z:ej^                  ja                  dg d      ej^                  ja                  dddg      ej^                  ja                  dddg      d!                      Z;ej^                  ja                  dddg      d"        Z<ej^                  ja                  dddg      ej^                  ja                  dddg      d#               Z=d$ Z>d% Z?d& Z@d' ZAd( ZBd) ZCd* ZDej^                  ja                  d+g d      ej^                  ja                  d,ddg      d-               ZEej^                  ja                  d+d.d/g      d0        ZFd1 ZGd2 ZHd3 ZId4 ZJd5 ZKd6 ZLd7 ZMd8 ZNd9 ZOej^                  ja                  d:d;      ej^                  ja                  d<ej                  ej                  f      d=               ZRej^                  ja                  d:d;      d>        ZSej^                  ja                  dd;      ej^                  ja                  d<ej                  ej                  f      d?               ZTej^                  ja                  d@dA      ej^                  ja                  dd;      ej^                  ja                  dBej                  ej                  fej                  ej                  fej                  ej                  fej                  ej                  ff      dC                      ZWej^                  ja                  d@dA      ej^                  ja                  dd;      ej^                  ja                  dBej                  ej                  fej                  ej                  fej                  ej                  fej                  ej                  ff      dD                      ZXej^                  ja                  dEdA      ej^                  ja                  dBej                  ej                  fej                  ej                  fej                  ej                  fej                  ej                  ff      dF               ZYej^                  ja                  dEdA      dG        ZZej^                  ja                  dEdA      ej^                  ja                  dBej                  ej                  fej                  ej                  fej                  ej                  fej                  ej                  ff      dH               Z[ej^                  ja                  dEdA      dI        Z\ej^                  ja                  dJ ee)j                         e        edKdLM      gdN O      dP        Z^dQ Z_dR Z`y)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                  j   t         j                  j                  d      } g d}t        j                  ddgddg      D ]s  \  }}| j                  |t              }| j                  |t              }t        j                  |ddg      D ]'  \  }}t        ||||      }|j                  ||fk(  r'J  u y )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$   codes	            r/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/decomposition/tests/test_dict_learning.pytest_sparse_encode_shapes_ompr5   (   s    
))


"CGJ#,#4#4aVaV#DiYYy*-YY|Z8
!*!2!2:1v!FIv Z9VTD::)\!:::: "G $E    c                  ~   d} t        | d      j                  t              }|j                  j                  | t
        fk(  sJ d} t        | d      j                  t              }|j                  j                  | t
        fk(  sJ |j                  t              j                  t        j                  d   | fk(  sJ y )Nr    r   random_stater   )r   fitXcomponents_r,   r+   	transformr/   dicos     r4   test_dict_learning_shapesr@   3   s    Ll;??BD!!lJ%????Ll;??BD!!lJ%????>>!""qwwqz<&@@@@r6   c                      d} t        | d      j                  t              }|j                  j                  | t
        fk(  sJ y )N   r   r8   )r   r:   r;   r<   r,   r+   r>   s     r4   test_dict_learning_overcompleterC   >   s=    Ll;??BD!!lJ%????r6   c                    	 d fd	d} dd}|z  t         j                  t        	fddD                 }t        j                  dd	z
        }|d
z  k  }d||<   d|t        j                  |      <   |j                  d	d      }t        j                  t              5  t        || d	      }|j                  |       d d d        t        j                         5  t        j                  dt               t        || d      }|j                  |       d d d        y # 1 sw Y   `xY w# 1 sw Y   y xY w)Nc                    t        j                  d| dz
  |       }dt        j                  d|z        t         j                  dz  z  z  d||z
  dz  |dz  z  z
  z  t        j                  ||z
  dz   d|dz  z  z        z  }|S )z1Discrete sub-sampled Ricker (Mexican hat) waveletr   r   r"      g      ?)r%   linspacesqrtpiexp)
resolutioncenterwidthxs       r4   ricker_functionz&test_max_iter.<locals>.ricker_functionE   s    KK:>:6"''!e)$ruud{23AJ1$uax//1ffF
q()Q\:;< 	

 r6   c                 4   t        j                  d|dz
  |      }t        j                  ||f      }t        |      D ]  \  }} |||       ||<    |t        j                  t        j
                  |dz  d            ddt         j                  f   z  }|S )z+Dictionary of Ricker (Mexican hat) waveletsr   r   r"   axisN)r%   rG   empty	enumeraterH   sumnewaxis)rM   rK   r/   centersDirL   rO   s          r4   ricker_matrixz$test_max_iter.<locals>.ricker_matrixO   s    ++aa>HHlJ/0"7+IAv":vu=AaD ,	RWWRVVAqDq)*1bjj=99r6   r   i   rF   c              3   :   K   | ]  } |d z          yw)r    )rM   rK   r/   N ).0wr/   rK   rZ   s     r4   	<genexpr>z test_max_iter.<locals>.<genexpr>_   s3      
 . J\Q=N  .s   )r   2   d   i    r   r      g      @g      )transform_algorithmtransform_max_itererrori  )r%   r_tuplerG   logical_notreshapepytestwarnsr   r   fit_transformwarningscatch_warningssimplefilter)
re   subsamplingD_multir;   first_quartermodelr/   rK   rO   rZ   s
         @@@@r4   test_max_iterrv   D   s6    %JK,L ee 
 .	
 	
G 	AzA~z2A
Q&MAm'+Abnn]#$			!RA 
(	))<QR
 	A	 
* 
	 	 	"g'9:)<QU
 	A 
#	" 
*	) 
#	"s   ) D(%:D4(D14D=c                      d} d}d}t        j                  t        |      5  t        t        | |d       d d d        y # 1 sw Y   y xY w)Nr    r   ;Positive constraint not supported for 'lars' coding method.matchT)alphapositive_code)rl   raises
ValueErrorr   r;   )r/   r{   err_msgs      r4   *test_dict_learning_lars_positive_parameterr   }   s9    LEKG	z	1aU$G 
2	1	1s	   ?Are   )r   r   r   r|   FTpositive_dictc                 T   d}t        || d||d      j                  t              }|j                  t              }|r|j                  dk\  j                         s!J |j                  dk  j                         sJ |r|dk\  j                         sJ y |dk  j                         sJ y )Nr    r   cd)re   r9   r|   r   fit_algorithm)r   r:   r;   r=   r<   allanyre   r|   r   r/   r?   r3   s         r4   test_dict_learning_positivityr      s     L/## 
c!f 	 >>!D  A%**,,,  1$))+++	   q~~r6   c                     d}t        |dd| d      j                  t              }| r |j                  dk\  j	                         sJ y |j                  dk  j                         sJ y )Nr    r   r   r   )re   r9   r   r   )r   r:   r;   r<   r   r   r   r/   r?   s      r4   'test_dict_learning_lars_dict_positivityr      sm    L"# 
c!f 	   A%**,,,  1$))+++r6   c                      d} t        | dddd      j                  t              }d}|j                  d      }t	        j
                  t        |      5  |j                  t               d d d        y # 1 sw Y   y xY w)	Nr    r   r   Tr   )re   r9   r|   r   9Positive constraint not supported for '{}' coding method.ry   )r   r:   r;   formatrl   r}   r~   r=   )r/   r?   r   s      r4   'test_dict_learning_lars_code_positivityr      sj    L" 
c!f 	 JGnnV$G	z	1q 
2	1	1s   A33A<c                     d} t        | ddd      }|j                  t              j                  t              }t	        t        j                  ||j                        t               |j                  d       |j                  t              }t	        t        j                  ||j                        t        d	       y )
NrB   r   MbP?r   )re   transform_alphar9   r   re   r"   decimal	r   r:   r;   r=   r   r%   dotr<   
set_paramsr/   r?   r3   s      r4   !test_dict_learning_reconstructionr      s    L%UVD 88A;  #DbffT4+;+;<a@OOO5>>!DbffT4+;+;<aKr6   c                     d} t        | dddd      }|j                  t              j                  t              }t	        t        j                  ||j                        t               |j                  d       |j                  t              }t	        t        j                  ||j                        t        d	
       y )NrB   r   r   r   rc   re   r   r9   r$   r   r   r"   r   r   r   s      r4   *test_dict_learning_reconstruction_parallelr      s    L!D 88A;  #DbffT4+;+;<a@OOO5>>!DbffT4+;+;<aKr6   c                  R   d} t        t              5 }t        | dddd      }t        t              5  |j                  |      j                  |      }d d d        t        t        j                  |j                        |d	       d d d        y # 1 sw Y   >xY w# 1 sw Y   y xY w)
NrB   r   r   r   rc   r   )categoryr"   r   )r   r;   r   r   r   r:   r=   r   r%   r   r<   )r/   X_read_onlyr?   r3   s       r4   (test_dict_learning_lassocd_readonly_datar      s    L	A+! *!
 &8988K(22;?D :!FF4))*K	
 
 :9 
s"   !B!B4BB	BB&c                     d} t        | ddd      }|j                  t              j                  t        t        j
                  df         }t        t	        j                  |            dk(  sJ |j                  d       |j                  t        t        j
                  df         }t        t	        j                  |            dk(  sJ y )	Nrc   r   rF   r   )re   transform_n_nonzero_coefsr9   r   r   r   )	r   r:   r;   r=   r%   rV   lenflatnonzeror   r   s      r4    test_dict_learning_nonzero_coefsr      s    L""#	D 88A;  2::q=!12Dr~~d#$)))OOO.>>!BJJM*+Dr~~d#$)))r6   c                      d} t        | dd      }|j                  t              j                  t              }d|_        |j                  t              }t        |d d d | f   |d d | d f   z
  |       y )Nr    r   r   )re   r9   T)r   r:   r;   r=   
split_signr   )r/   r?   r3   
split_codes       r4   test_dict_learning_splitr   	  ss    L+AD 88A;  #DDO"J1m|m#$z!\]2B'CCTr6   c            	         t         j                  j                  d      } d}t        t        |ddd| d      \  }}|j
                  t        |fk(  sJ |j
                  |t        fk(  sJ t        j                  ||      j
                  t        j
                  k(  sJ t        t        |ddd| d      }|j
                  |t        fk(  sJ y )	Nr   r   rc   r   r   T)r/   
batch_sizemax_itermethodr9   return_codeF)	r%   r&   r'   r	   r;   r,   r0   r+   r   )r-   r/   r3   r2   s       r4    test_dict_learning_online_shapesr     s    
))


"CL+	!D* ::)\2222j999966$
#))QWW444%	!J j9999r6   c                      d} t        j                  t        |       5  t        t        ddd       d d d        y # 1 sw Y   y xY w)Nrx   ry   rc   r   T)r   r   r|   )rl   r}   r~   r	   r;   )r   s    r4   1test_dict_learning_online_lars_positive_parameterr   4  s/    KG	z	1Q1rN 
2	1	1s	   ;Ac           
      X   d}t        |dd| d||d      j                  t              }|j                  t              }|r|j                  dk\  j                         s!J |j                  dk  j                         sJ |r|dk\  j                         sJ y |dk  j                         sJ y )Nr   rc   r   r   r   )r   r   re   r9   r|   r   r   )r   r:   r;   r=   r<   r   r   r   s         r4   -test_minibatch_dictionary_learning_positivityr   :  s     L&/##	 
c!f 	 >>!D  A%**,,,  1$))+++	   q~~r6   c           	          d}t        |dddd| d      j                  t              }| r |j                  dk\  j	                         sJ y |j                  dk  j                         sJ y )Nr   rc   r   r   r   r   )r   r   re   r9   r   r   )r   r:   r;   r<   r   r   r   s      r4   'test_minibatch_dictionary_learning_larsr   ^  ss    L&"# 
c!f 	   A%**,,,  1$))+++r6   c           
      ,   t         j                  j                  d      }d}t        t        |ddd|||       \  }}|r|dk\  j                         sJ |dk  j                         sJ | r|dk\  j                         sJ y |dk  j                         sJ y )Nr   r   rc   r   r   )r/   r   r   r{   r9   r   r|   )r%   r&   r'   r	   r;   r   r   )r|   r   r-   r/   r3   r2   s         r4   $test_dict_learning_online_positivityr   r  s     ))


"CL+	!##	D* a$$&&&Q##%%%	   q~~r6   c                     d} dd l }ddlm} |j                  }	  |       |_        t	        | ddddd      }|j                  t               t	        | ddddd	      }|j                  t               t	        | dddd
      }|j                  t               t        t        | dddd       t        t        | dddd       ||_        |j                  j                  | t        fk(  sJ y # ||_        w xY w)Nr    r   )StringIOrc   r   皙?)r   r   verbosetolr9   r"   )r   r   r   max_no_improvementr9   )r   r   r   r9   )r/   r   r{   r   r9   )sysior   stdoutr   r:   r;   r	   r<   r,   r+   )r/   r   r   
old_stdoutr?   s        r4   #test_dict_learning_online_verbosityr     s   LJ) Z
 +QA3UV
 	* 
 	*QAA
 	 	%	
 	%	
  
!!lJ%????  
s   B'C* *	C3c                      d} t        | ddd      }|j                  t               |j                  j                  | t
        fk(  sJ y )Nr    rc   r   r   r   r9   r   r:   r;   r<   r,   r+   r>   s     r4   *test_dict_learning_online_estimator_shapesr     sF    L&QQD 	HHQK!!lJ%????r6   c                      d} t        | ddd      j                  t              }|j                  j                  | t
        fk(  sJ y )NrB   rc   r    r   r   r   r>   s     r4   &test_dict_learning_online_overcompleter     sG    L&QQ	c!f 	 !!lJ%????r6   c                      d} t         j                  j                  d      }|j                  | t              }t        | dd|d      j                  t              }t        |j                  |       y )NrB   r   rc   )r   r   	dict_initr9   )
r%   r&   r'   r*   r+   r   r:   r;   r   r<   )r/   r-   Vr?   s       r4   (test_dict_learning_online_initializationr     s^    L
))


"C		,
+A&Q!!	c!f 	 t''+r6   c                      d} t         j                  j                  d      }|j                  | t              }|j                  d       t        | dd|dd      j                  t               y )NrB   r   F)writerc   r   )r   r   r   r9   shuffle)	r%   r&   r'   r*   r+   setflagsr   r:   r;   )r/   r-   r   s      r4   1test_dict_learning_online_readonly_initializationr     s^    L
))


"C		,
+AJJUJ 
c!fr6   c                     d} t         j                  j                  d      }|j                  | t              }|t        j
                  |dz  d      d d t         j                  f   z  }t        | dddd|d dd		      j                  t              }t        | d|d
      }t        d      D ]3  }t        D ](  }|j                  |t         j                  d d f          * 5 t        j                  t        t        |j                  d      dk(        rJ t        |j                  |j                  d       |j                   |j                   cxk(  rdk(  sJ  J y )NrB   r   r"   r   rQ   r   F        )r   r   r{   r   r   r   r   r9   )r{   r   r9   r{   r   ra   )r%   r&   r'   r*   r+   rU   rV   r   r:   r;   rangepartial_fitr   r
   r<   r   n_steps_)r/   r-   r   dict1dict2rY   samples          r4   %test_dict_learning_online_partial_fitr     s1   L
))


"C		,
+A11	am	,,A'
 
c!f 
 (AE 2YFfRZZ]34   vvmAu'8'8BaGHHHe//1B1BAN >>U^^2s22222r6   c                  6   d} t         j                  j                  d      }|j                  | t              }|t        j
                  |dz  d      d d t         j                  f   z  }dD ]+  }t        t        ||      }|j                  t        | fk(  r+J  y )NrB   r   r"   r   rQ   r   r   r   r   r   r#   )r%   r&   r'   r*   r+   rU   rV   r
   r;   r,   r0   )r/   r-   r   algor3   s        r4   test_sparse_encode_shapesr   	  s    L
))


"C		,
+A11	am	,,AFQT2zzi6666 Gr6   r   positivec                 V   d}t         j                  j                  d      }|j                  |t              }|t        j
                  |dz  d      d d t         j                  f   z  }t        t        || |      }|r|dk\  j                         sJ y |dk  j                         sJ y )NrB   r   r"   r   rQ   r#   r   )r%   r&   r'   r*   r+   rU   rV   r
   r;   r   r   )r   r   r/   r-   r   r3   s         r4   test_sparse_encode_positivityr     s     L
))


"C		,
+A11	am	,,AAAD	   q~~r6   r   r   c                    d}t         j                  j                  d      }|j                  |t              }|t        j
                  |dz  d      d d t         j                  f   z  }d}|j                  |       }t        j                  t        |      5  t        t        || d	       d d d        y # 1 sw Y   y xY w)
NrB   r   r"   r   rQ   r   ry   Tr   )r%   r&   r'   r*   r+   rU   rV   r   rl   r}   r~   r
   r;   )r   r/   r-   r   r   s        r4   )test_sparse_encode_unavailable_positivityr   !  s    L
))


"C		,
+A11	am	,,AIGnnT"G	z	1adT: 
2	1	1s   B55B>c                  ^   d} t         j                  j                  d      }|j                  | t              }|t        j
                  |dz  d      d d t         j                  f   z  }t        t        d      }dD ].  }t        t        ||	      }t        |||	      }t        ||       0 y )
Nra   r   r"   r   rQ   F)orderr   r   )r%   r&   r'   r*   r+   rU   rV   r   r;   r
   r   )r/   r-   r   Xfr   abs          r4   test_sparse_encode_inputr   -  s    L
))


"C		,
+A11	am	,,A	Qc	"BF!Q$/"a40!!Q' Gr6   c                     d} t         j                  j                  d      }|j                  | t              }|t        j
                  |dz  d      d d t         j                  f   z  }t        t        |d      }t        j                  |dk(        rJ t        j                  t        j
                  t        j                  ||      t        z
  dz              dk  sJ y )	NrB   r   r"   r   rQ   r   r   r   )r%   r&   r'   r*   r+   rU   rV   r
   r;   r   rH   r   )r/   r-   r   r3   s       r4   test_sparse_encode_errorr   9  s    L
))


"C		,
+A11	am	,,AAU+Dvvdai   77266266$?Q.1456<<<r6   c                      t         j                  j                  d      } | j                  dd      }| j                  dd      } t	        t
              ||dd       }|j                  dk(  sJ y )Nr   ra   @   r"   r   )r#   n_nonzero_coefs)ra   r"   )r%   r&   r'   r*   r   r
   r,   )r-   r;   rX   r3   s       r4   )test_sparse_encode_error_default_sparsityr   C  s`    
))


"C		#rA		!RA)?=)!Q%QUVD::!!!r6   c                     d} t         j                  j                  d      }|j                  | t              }|t        j
                  |dz  d      d d t         j                  f   z  }t        |dd      j                  t              }t        j                  |dk(        rJ t        j                  t        j
                  t        j                  ||      t        z
  dz              d	k  sJ y )
NrB   r   r"   r   rQ   r   r   r2   re   r   r   )r%   r&   r'   r*   r+   rU   rV   r   r=   r;   r   rH   r   )r/   r-   r   coders       r4   test_sparse_coder_estimatorr   K  s    L
))


"C		,
+A11	am	,,A,il 
 vveqj!!!77266266%+a/A567#===r6   c                  n   d} t         j                  j                  d      }|j                  | t              }|t        j
                  |dz  d      d d t         j                  f   z  }t        |dd      }t        |      }t        |      t        |      k7  sJ t         j                  j                  |j                  |j                         t        |j                        t        |j                        k7  sJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ t         j                  j                  t         t              j#                  t         j$                        }t         j                  j                  |j'                  |      |j'                  |             y )	NrB   r   r"   r   rQ   r   r   r   )r%   r&   r'   r*   r+   rU   rV   r   r   idtestingr   r2   n_components_n_features_in_randr0   astypefloat32r=   )r/   r-   r   r   cloneddatas         r4   !test_sparse_coder_estimator_cloner  W  sF   L
))


"C		,
+A11	am	,,A,E 5\Ff:E"""JJv00%2B2BCf Bu'7'7$88885#6#6666  E$8$888899>>)Z077

CDJJv//5ut7LMr6   c                  J   t         j                  j                  d      } d\  }}| j                  ||      }t	        d      d|z  z  }t         j                  j                  ||      j                  t         j                        }t        |dd      }|j                  |       y )N	  )(   r   g    >Arc   r   r"   )re   r$   )	r%   r&   r'   r   intr   r   r   rn   )r-   r/   r+   	init_dictr0   r  scs          r4   test_sparse_coder_parallel_mmapr
  i  s     ))


$C%L*z2I CQ^,I99>>)Z077

CD	YE!	DBTr6   c                     t         j                  j                  d      } d\  }}| j                  ||      }t	        |      }t        |j                  j                  |       t        |j                  j                  |       t        t        d      } ||j                  j                  |       t        |j                  j                  |       y )Nr  )r  rF   T)readonly_memmap)r%   r&   r'   r   r   r   	__class____name__r   r   r   )r-   r/   r+   r  r	   check_transformer_general_memmaps         r4   $test_sparse_coder_common_transformerr  |  s    
))


$C$L*z2I	Y	B'(=(=rBbll33R8'.!4($ %R\\%:%:B? 5 5r:r6   c                      t        j                  g dg dg      } t        |       }|j                  | j                  d   k(  sJ y )N)r   r"   rF   r   )r%   arrayr   r   r,   )dr	  s     r4   test_sparse_coder_n_features_inr    s:    
)Y'(A	QB
***r6   c                     t         j                  j                  d      } t        j                  ddgddgg      }t        j                  ddgdd	gg      }t        j                  ||      | j                  d
d
      z   }|j                         }t        |||       t        j                  |j                  |      }t        j                  |j                  |      }|j                         }t        |||||       t        ||       y )Nr   g      ?g      r   g?g      ?r   g333333?g?r"   )
r%   r&   r'   r  r   r*   copyr   Tr   )r-   r3   r2   r;   
newd_batchABnewd_onlines           r4   test_update_dictr    s     ))


"C88c4[3*-.DC:Sz23J
tZ 399Q?2A "JQ% 	tvvtA
qssDA//#Kaq!,J,r6   r#   )r   r   r   r   r   	data_typec                     d}t         j                  j                  d      }|j                  |t              }t        t        j                  |       |j                  |       |      }|j                  | k(  sJ y )N   r   r   )	r%   r&   r'   r*   r+   r
   r;   r   dtype)r  r#   r/   r-   r2   r3   s         r4   test_sparse_encode_dtype_matchr!    sf     L
))


"C<4J	Z..y9YD ::"""r6   c                    d}d}t         j                  j                  d      }|j                  |t              }t        t        j                  t         j                        |j                  t         j                        |       }t        t        j                  t         j                        |j                  t         j                        |       }t        |||       y )N-C6?r  r   r   rtol)r%   r&   r'   r*   r+   r
   r;   r   r   float64r   )r#   r%  r/   r-   r2   code_32code_64s          r4   (test_sparse_encode_numerical_consistencyr)    s    
 DL
))


"C<4J	j//

;yG 	j//

;yG GW40r6   c                    d}t         j                  j                  d      }|j                  |t              }t        |j                  |       |      }|j                  t        j                  |             }|j                  | k(  sJ y )Nr  r   r   )
r%   r&   r'   r*   r+   r   r   r=   r;   r   )r  re   r/   r-   r2   r   r3   s          r4   test_sparse_coder_dtype_matchr+    ss     L
))


"C<4J)$:ME ??188I./D::"""r6   r   )r   r   zdata_type, expected_typec                    t        d||d      }|j                  t        j                  |              |j                  j
                  |k(  sJ |j                  t        j                  |             j
                  |k(  sJ y )Nr   r   )r/   r   re   r9   )r   r:   r;   r   r<   r   r=   r  expected_typer   re   dict_learners        r4   $test_dictionary_learning_dtype_matchr0    su    ( &#/	L QXXi()##))]:::!!!((9"56<<MMMr6   c           	      x   t        dd||ddd      }|j                  t        j                  |              |j                  j
                  |k(  sJ |j                  t        j                  |             j
                  |k(  sJ |j                  j
                  |k(  sJ |j                  j
                  |k(  sJ y )Nr   r   ra   r   r   )r/   r   r   re   r   r   r9   )	r   r:   r;   r   r<   r   r=   _A_Br-  s        r4   .test_minibatch_dictionary_learning_dtype_matchr4    s    ( /#/L QXXi()##))]:::!!!((9"56<<MMM??  M111??  M111r6   r   c                     t         j                  j                  d      }d}t        t        j                  |       |d||      \  }}}|j                  |k(  sJ |j                  |k(  sJ y )Nr   r   r   r/   r{   r9   r   )r%   r&   r'   r   r;   r   r   )r  r.  r   r-   r/   r3   r2   _s           r4   test_dict_learning_dtype_matchr8  !  sn     ))


"CL'	!D*a ::&&&},,,r6   c                    d}d}d}t        t        j                  t        j                        ||d|       \  }}}t        t        j                  t        j
                        ||d|       \  }}}t        t        j                  ||      t        j                  ||      |       t        t        j                  t        j                  |            t        j                  t        j                  |            |       t        t        j                  |dz        t        j                  |dz        |       t        j                  |dk7        dkD  sJ t        j                  |dk7        t        j                  |dk7        k(  sJ y )	Ngư>rc   r"   r   r6  r$  r   皙?)r   r;   r   r%   r&  r   r   matmulrU   absmeancount_nonzero)	r   r%  r/   r{   U_64V_64r7  U_32V_32s	            r4   (test_dict_learning_numerical_consistencyrC  :  s*    DLE!	!MD$ "	!MD$ BIIdD)299T4+@tLBFF266$<("&&*>TJBFF47ORVVD!G_4@7743;$&&&DCK(B,<,<TS[,IIIIr6   c                     t         j                  j                  d      }d}t        t        j                  |       |dd||      \  }}|j                  |k(  sJ |j                  |k(  sJ y )Nr   r   r   r   )r/   r{   r   r9   r   )r%   r&   r'   r	   r;   r   r   )r  r.  r   r-   r/   r3   r2   s          r4   %test_dict_learning_online_dtype_matchrE  ^  so     ))


"CL+	!D* ::&&&},,,r6   c                 $   d}d}d}t        t        j                  t        j                        |d|dd| dd 	      \  }}t        t        j                  t        j
                        |d|dd| dd 	      \  }}t        t        j                  ||      t        j                  ||      |	       t        t        j                  t        j                  |            t        j                  t        j                  |            |	       t        t        j                  |d
z        t        j                  |d
z        |	       t        j                  |dk7        dkD  sJ t        j                  |dk7        t        j                  |dk7        k(  sJ y )Nr#  rc   r   rb   r   r   r   )r/   r   r{   r   r9   r   r   r   r$  r"   r:  )r	   r;   r   r%   r&  r   r   r;  rU   r<  r=  r>  )r   r%  r/   r{   r?  r@  rA  rB  s           r4   /test_dict_learning_online_numerical_consistencyrG  x  s>    DLE%	!
JD$ &	!
JD$$ BIIdD)299T4+@tLBFF266$<("&&*>TJBFF47ORVVD!G_4@7743;$&&&DCK(B,<,<TS[,IIIIr6   	estimatorrc   r   )r   r   c                 .    | j                   j                  S )N)r  r  )rN   s    r4   <lambda>rJ    s    !++&&r6   )idsc                    | j                  t               t        j                  d   }| j                         }| j                  j
                  j                         }t        |t        |      D cg c]  }| | 
 c}       yc c}w )z1Check feature names for dict learning estimators.r   N)	r:   r;   r,   get_feature_names_outr  r  lowerr   r   )rH  r/   feature_names_outestimator_namerY   s        r4   test_get_feature_names_outrQ    sw     MM!771:L!779((11779N).|)<=)<ANA3	)<==s   0B
c                    | j                  t        j                  j                  dt	        t
        d             t        j                  j                  d      }|j                  dd      }t        ddddd	d
      }|j                  |       y )Nr   ra   )
max_nbytesr   r   r    r"   r   r`   T)r/   r9   r$   r   r   r   )setattrsklearndecomposition_dict_learningr   r   r%   r&   r'   r*   r   r:   )monkeypatchr-   X_trainr/  s       r4   %test_cd_work_on_joblib_memmapped_datarZ    s~    ,,S) ))


"CiiBG%L Wr6   c                  ,   d} t        j                  t        |       5  t        d d      j	                  t
               d d d        t        j                  t        |       5  t        t
        d d       d d d        y # 1 sw Y   @xY w# 1 sw Y   y xY w)Nz@`max_iter=None` is deprecated in version 1.4 and will be removedry   r   )r   r9   )rl   rm   FutureWarningr   r:   r;   r	   )warn_msgs    r4   test_xxxr^    sa    QH	m8	4#TBFFqI 
5	m8	4QA> 
5	4 
5	4	4	4s   !A>"B
>B
B)ar(   ro   	functoolsr   numpyr%   rl   rU  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_globalr0   r+   r*   r;   r5   r@   rC   rv   r   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int64r0  r4  r8  rC  rE  rG  r  rQ  rZ  r^  r\   r6   r4   <module>rn     s           > 1 %  
 ,YY""1%
 	:Y
+;A@6rH  5$-85$-8  9 9 , 5$-8, 9,  
L L$
"* ::O  5$-85$-8  9 9 4 5$-8, 9,& 5$-85$-8  9 9 02@j@@,3<7 !HIeT]3	  4 J	  &%1; 2;	(="	>N$&; +-. G rzz2::&>?# @# G11 Q rzz2::&>?	# @	# .9Q 	RZZ 	RZZ 	2::	2::	N :N$ .9Q 	RZZ 	RZZ 	2::	2::	2 :20 >2	RZZ 	RZZ 	2::	2::	- 3- >2 J 3 JF >2	RZZ 	RZZ 	2::	2::	- 3-  >2(J 3(JV ACC#q2>
 	'  

0?r6   