
    /Цi{              
       t   S SK r S SKrS SKJr  S SKrS SKrS SKrS SKJ	r	  S SK
JrJrJrJrJrJr  S SKJr  S SKJr  S SKJr  S SKJrJrJrJrJr  S S	KJrJrJ r   S S
K!J"r"  \RF                  RI                  S 5      r%Su  r&r'\%RQ                  \&\'5      r)\RT                  RV                  S 5       r,S r-S r.S r/S r0\RT                  Rc                  S/ SQ5      \RT                  Rc                  SSS/5      \RT                  Rc                  SSS/5      S 5       5       5       r2\RT                  Rc                  SSS/5      S 5       r3S r4S r5\RT                  RV                  S 5       r6\RT                  RV                  S 5       r7S r8S r9S r:S  r;\RT                  Rc                  S/ SQ5      \RT                  Rc                  SSS/5      \RT                  Rc                  SSS/5      S! 5       5       5       r<\RT                  Rc                  SSS/5      S" 5       r=\RT                  Rc                  SSS/5      \RT                  Rc                  SSS/5      S# 5       5       r>S$ r?S% r@S& rAS' rBS( rCS) rDS* rE\RT                  Rc                  S+/ SQ5      \RT                  Rc                  S,SS/5      S- 5       5       rF\RT                  Rc                  S+S.S//5      S0 5       rGS1 rHS2 rIS3 rJS4 rKS5 rL\RT                  RV                  S6 5       rMS7 rNS8 rOS9 rPS: rQ\RT                  Rc                  S;S<5      \RT                  Rc                  S=\R                  \R                  45      S> 5       5       rT\RT                  Rc                  S;S<5      S? 5       rU\RT                  Rc                  SS<5      \RT                  Rc                  S=\R                  \R                  45      S@ 5       5       rV\RT                  Rc                  SASB5      \RT                  Rc                  SS<5      \RT                  Rc                  SC\R                  \R                  4\R                  \R                  4\R                  \R                  4\R                  \R                  445      SD 5       5       5       rY\RT                  Rc                  SASB5      \RT                  Rc                  SS<5      \RT                  Rc                  SC\R                  \R                  4\R                  \R                  4\R                  \R                  4\R                  \R                  445      SE 5       5       5       rZ\RT                  Rc                  SFSB5      \RT                  Rc                  SC\R                  \R                  4\R                  \R                  4\R                  \R                  4\R                  \R                  445      SG 5       5       r[\RT                  Rc                  SFSB5      SH 5       r\\RT                  Rc                  SFSB5      \RT                  Rc                  SC\R                  \R                  4\R                  \R                  4\R                  \R                  4\R                  \R                  445      SI 5       5       r]\RT                  Rc                  SFSB5      SJ 5       r^\RT                  Rc                  SK\" \%R                  \'\'4SL95      \" 5       \" SMSNSO9/SP SQ9SR 5       r`\RT                  RV                  SS 5       rag)T    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            	      h   [         R                  R                  S5      n / SQn[        R                  " SS/SS/5       Hp  u  p#U R                  U[        5      nU R                  U[        5      n[        R                  " USS/5       H"  u  pg[        XEXgS9nUR                  X24:X  a  M"   e   Mr     g )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	            m/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/sklearn/decomposition/tests/test_dict_learning.pytest_sparse_encode_shapes_ompr5   *   s    
))


"CGJ#,#4#4aVaV#DYYy*-YY|Z8
!*!2!2:1v!FI 9TD::)!:::: "G $E    c                  x   Sn [        U SS9R                  [        5      nUR                  R                  U [
        4:X  d   eSn [        U SS9R                  [        5      nUR                  R                  U [
        4:X  d   eUR                  [        5      R                  [        R                  S   U 4:X  d   eg )Nr    r   random_stater   )r   fitXcomponents_r,   r+   	transformr/   dicos     r4   test_dict_learning_shapesr@   6   s    Ll;??BD!!lJ%????Ll;??BD!!lJ%????>>!""qwwqz<&@@@@r6   c                      Sn [        U SS9R                  [        5      nUR                  R                  U [
        4:X  d   eg )N   r   r8   )r   r:   r;   r<   r,   r+   r>   s     r4   test_dict_learning_overcompleterC   A   s=    Ll;??BD!!lJ%????r6   c                    ^^^^	 S mU4S jm	Sn SmSnTU-  m[         R                  [        UUU	4S jS 5       5         n[         R                  " STS	-
  T5      nUTS
-  :  nSX4'   SU[         R                  " U5      '   UR                  S	S5      n[        R                  " [        5         [        X S	S9nUR                  U5        S S S 5        [        R                  " 5          [        R                  " S[        5        [        X SS9nUR                  U5        S S S 5        g ! , (       d  f       Nc= f! , (       d  f       g = f)Nc                 
   [         R                  " SU S-
  U 5      nS[         R                  " SU-  5      [         R                  S-  -  -  SX1-
  S-  US-  -  -
  -  [         R                  " X1-
  S-  * SUS-  -  -  5      -  nU$ )z1Discrete sub-sampled Ricker (Mexican hat) waveletr   r   r"      g      ?)r%   linspacesqrtpiexp)
resolutioncenterwidthxs       r4   ricker_function&test_max_iter.<locals>.ricker_functionH   s    KK:>:6"''!e)$ruud{23AJ1$uax//1ff
q()Q\:;< 	

 r6   c                 2  > [         R                  " SUS-
  U5      n[         R                  " X!45      n[        U5       H  u  pVT" XU 5      XE'   M     U[         R                  " [         R
                  " US-  SS95      SS2[         R                  4   -  nU$ )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_matrix$test_max_iter.<locals>.ricker_matrixR   s}    ++aa>HHl/0"7+IA":u=AD ,	RWWRVVAqDq)*1bjj=99r6   r      rF   c              3   :   >#    U  H  nT" UTTS -  S9v   M     g7f)r    )rM   rK   r/   N ).0wr/   rK   r[   s     r4   	<genexpr> test_max_iter.<locals>.<genexpr>b   s-      
 ( J\Q=N (s   )r   2   d     r   r      g      @g      )transform_algorithmtransform_max_itererrorrf   )r%   r_tuplerG   logical_notreshapepytestwarnsr   r   fit_transformwarningscatch_warningssimplefilter)
ri   subsamplingD_multir;   first_quartermodelr/   rK   rO   r[   s
         @@@@r4   test_max_iterrz   G   s.    %JK,L ee 
 (	
 	
G 	AzA~z2A
Q&MA'+Abnn]#$			!RA 
(	)QR
 	A	 
* 
	 	 	"g'9:QT
 	A 
#	" 
*	) 
#	"s   -D&&7D7&
D47
Ec                      Sn SnSn[         R                  " [        US9   [        [        XSS9  S S S 5        g ! , (       d  f       g = f)Nr    r   ;Positive constraint not supported for 'lars' coding method.matchT)alphapositive_code)rp   raises
ValueErrorr   r;   )r/   r   err_msgs      r4   *test_dict_learning_lars_positive_parameterr      s7    LEKG	z	1a$G 
2	1	1s	   9
Ari   )r   r   r   r   FTpositive_dictc           	         Sn[        UU SUUSS9R                  [        5      nUR                  [        5      nU(       a%  UR                  S:  R                  5       (       d   eO$UR                  S:  R                  5       (       d   eU(       a  US:  R                  5       (       d   eg US:  R                  5       (       d   eg )Nr    r   cd)ri   r9   r   r   fit_algorithm)r   r:   r;   r=   r<   allanyri   r   r   r/   r?   r3   s         r4   test_dict_learning_positivityr      s     L/## 
c!f 	 >>!D  A%**,,,,  1$))++++	    q~~r6   c                     Sn[        USSU SS9R                  [        5      nU (       a%  UR                  S:  R	                  5       (       d   eg UR                  S:  R                  5       (       d   eg )Nr    r   r   r   )ri   r9   r   r   )r   r:   r;   r<   r   r   r   r/   r?   s      r4   'test_dict_learning_lars_dict_positivityr      ss    L"# 
c!f 	   A%**,,,,  1$))++++r6   c                      Sn [        U SSSSS9R                  [        5      nSnUR                  S5      n[        R
                  " [        US9   UR                  [        5        S S S 5        g ! , (       d  f       g = f)	Nr    r   r   Tr   )ri   r9   r   r   9Positive constraint not supported for '{}' coding method.r}   )r   r:   r;   formatrp   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   A..
A<c                     Sn [        U SSSS9nUR                  [        5      R                  [        5      n[	        [
        R                  " X!R                  5      [        5        [	        UR                  U5      [        5        UR                  SS9  UR                  [        5      n[	        [
        R                  " X!R                  5      [        SS	9  [	        UR                  U5      [        SS	9  [        R                  " [        S
S9   UR                  US S 2S S24   5        S S S 5        g ! , (       d  f       g = f)NrB   r   MbP?r   )ri   transform_alphar9   r   ri   r"   decimalzExpected 12, got 11.r}   rh   )r   r:   r;   r=   r   r%   dotr<   inverse_transform
set_paramsrp   r   r   r/   r?   r3   s      r4   !test_dict_learning_reconstructionr      s    L%UVD 88A;  #DbffT+;+;<a@d44T:A>OOO5>>!DbffT+;+;<aKd44T:AqI 
z)?	@tAssF|, 
A	@	@s   D00
D>c                  p   Sn [        U SSSSS9nUR                  [        5      R                  [        5      n[	        [
        R                  " X!R                  5      [        5        UR                  SS9  UR                  [        5      n[	        [
        R                  " X!R                  5      [        S	S
9  g )NrB   r   r   r   rg   ri   r   r9   r$   r   r   r"   r   )	r   r:   r;   r=   r   r%   r   r<   r   r   s      r4   *test_dict_learning_reconstruction_parallelr      s     L!D 88A;  #DbffT+;+;<a@OOO5>>!DbffT+;+;<aKr6   c            	      V   Sn [        [        5       n[        U SSSSS9n[        [        S9   UR                  U5      R                  U5      nS S S 5        [        [        R                  " WUR                  5      USS	9  S S S 5        g ! , (       d  f       NA= f! , (       d  f       g = f)
NrB   r   r   r   rg   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	2B	
B	B
B(c                     Sn [        U SSSS9nUR                  [        5      R                  [        [        R
                  S4   5      n[        [        R                  " U5      5      S:X  d   eUR                  SS9  UR                  [        [        R
                  S4   5      n[        [        R                  " U5      5      S:X  d   eg )	Nrg   r   rF   r   )ri   transform_n_nonzero_coefsr9   r   r   r   )	r   r:   r;   r=   r%   rW   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                  B   Sn [        U SSS9nUR                  [        5      R                  [        5      nUR	                  U5      nSUl        UR                  [        5      n[        US S 2S U 24   US S 2U S 24   -
  U5        UR	                  U5      n[        X55        g )Nr    r   r   )ri   r9   T)r   r:   r;   r=   r   
split_signr   )r/   r?   r3   Xr
split_codeXr2s         r4   test_dict_learning_splitr     s    L+AD 88A;  #D				%BDO"J1m|m#$z!\]2B'CCT 
 
 
,Cb&r6   c            
         [         R                  R                  S5      n Sn[        [        USSSU SS9u  p#UR
                  [        U4:X  d   eUR
                  U[        4:X  d   e[         R                  " X#5      R
                  [        R
                  :X  d   e[        [        USSSU SS9nUR
                  U[        4:X  d   eg )	Nr   r   rg   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                      Sn [         R                  " [        U S9   [        [        SSSS9  S S S 5        g ! , (       d  f       g = f)Nr|   r}   rg   r   T)r   r   r   )rp   r   r   r	   r;   )r   s    r4   1test_dict_learning_online_lars_positive_parameterr   H  s/    KG	z	1Q1rN 
2	1	1s	   6
Ac                    Sn[        USSU SUUSS9R                  [        5      nUR                  [        5      nU(       a%  UR                  S:  R                  5       (       d   eO$UR                  S:  R                  5       (       d   eU(       a  US:  R                  5       (       d   eg US:  R                  5       (       d   eg )Nr   rg   r   r   r   )r   r   ri   r9   r   r   r   )r   r:   r;   r=   r<   r   r   r   s         r4   -test_minibatch_dictionary_learning_positivityr   N  s     L&/##	 
c!f 	 >>!D  A%**,,,,  1$))++++	    q~~r6   c           
          Sn[        USSSSU SS9R                  [        5      nU (       a%  UR                  S:  R	                  5       (       d   eg UR                  S:  R                  5       (       d   eg )Nr   rg   r   r   r   r   )r   r   ri   r9   r   r   )r   r:   r;   r<   r   r   r   s      r4   'test_minibatch_dictionary_learning_larsr   r  sy    L&"# 
c!f 	   A%**,,,,  1$))++++r6   c                 b   [         R                  R                  S5      nSn[        [        USSSUUU S9u  pEU(       a  US:  R                  5       (       d   eOUS:  R                  5       (       d   eU (       a  US:  R                  5       (       d   eg US:  R                  5       (       d   eg )Nr   r   rg   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     s     ))


"CL+	!##	D a$$&&&&Q##%%%%	    q~~r6   c            	         Sn SS K nSSKJn  UR                  n U" 5       Ul        [	        U SSSSSS9nUR                  [        5        [	        U SSSSSS	9nUR                  [        5        [	        U SSSSS
9nUR                  [        5        [        [        U SSSSS9  [        [        U SSSSS9  X1l        UR                  R                  U [        4:X  d   eg ! X1l        f = f)Nr    r   )StringIOrg   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 C#c                      Sn [        U SSSS9nUR                  [        5        UR                  R                  U [
        4:X  d   eg )Nr    rg   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                      Sn [        U SSSS9R                  [        5      nUR                  R                  U [
        4:X  d   eg )NrB   rg   r    r   r   r   r>   s     r4   &test_dict_learning_online_overcompleter     sG    L&QQ	c!f 	 !!lJ%????r6   c                      Sn [         R                  R                  S5      nUR                  U [        5      n[        U SSUSS9R                  [        5      n[        UR                  U5        g )NrB   r   rg   )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            	          Sn [         R                  R                  S5      nUR                  U [        5      nUR                  SS9  [        U SSUSSS9R                  [        5        g )NrB   r   F)writerg   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                     Sn [         R                  R                  S5      nUR                  U [        5      nU[         R
                  " US-  SS9S S 2[         R                  4   -  n[        U SSSSUS SSS	9	R                  [        5      n[        U SUSS
9n[        S5       H6  n[         H)  nUR                  U[         R                  S S 24   5        M+     M8     [         R                  " [        [        UR                  SS9S:H  5      (       a   e[        UR                  UR                  SS9  UR                   UR                   s=:X  a  S:X  d   e   eg )NrB   r   r"   r   rR   r   F        )r   r   r   r   r   r   r   r9   )r   r   r9   r   r   re   )r%   r&   r'   r*   r+   rV   rW   r   r:   r;   rangepartial_fitr   r
   r<   r   n_steps_)r/   r-   r   dict1dict2rZ   samples          r4   %test_dict_learning_online_partial_fitr     s4   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He//1B1BAN >>U^^2s22222r6   c                  0   Sn [         R                  R                  S5      nUR                  U [        5      nU[         R
                  " US-  SS9S S 2[         R                  4   -  nS H)  n[        [        X#S9nUR                  [        U 4:X  a  M)   e   g )NrB   r   r"   r   rR   r   r   r   r   r   r#   )r%   r&   r'   r*   r+   rV   rW   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2zzi6666 Gr6   r   positivec                 h   Sn[         R                  R                  S5      nUR                  U[        5      nU[         R
                  " US-  SS9S S 2[         R                  4   -  n[        [        X@US9nU(       a  US:  R                  5       (       d   eg US:  R                  5       (       d   eg )NrB   r   r"   r   rR   r#   r   )r%   r&   r'   r*   r+   rV   rW   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                 |   Sn[         R                  R                  S5      nUR                  U[        5      nU[         R
                  " US-  SS9S S 2[         R                  4   -  nSnUR                  U 5      n[        R                  " [        US9   [        [        X0SS	9  S S S 5        g ! , (       d  f       g = f)
NrB   r   r"   r   rR   r   r}   Tr   )r%   r&   r'   r*   r+   rV   rW   r   rp   r   r   r
   r;   )r   r/   r-   r   r   s        r4   )test_sparse_encode_unavailable_positivityr   5  s    L
))


"C		,
+A11	am	,,AIGnnT"G	z	1aT: 
2	1	1s   B--
B;c                  F   Sn [         R                  R                  S5      nUR                  U [        5      nU[         R
                  " US-  SS9S S 2[         R                  4   -  n[        [        SS9nS H&  n[        [        X$S	9n[        X2US	9n[        XV5        M(     g )
Nre   r   r"   r   rR   F)orderr   r   )r%   r&   r'   r*   r+   rV   rW   r   r;   r
   r   )r/   r-   r   Xfr   abs          r4   test_sparse_encode_inputr   A  s    L
))


"C		,
+A11	am	,,A	Qc	"BF!Q/"40!!' Gr6   c                     Sn [         R                  R                  S5      nUR                  U [        5      nU[         R
                  " US-  SS9S S 2[         R                  4   -  n[        [        USS9n[         R                  " US:H  5      (       a   e[         R                  " [         R
                  " [         R                  " X25      [        -
  S-  5      5      S:  d   eg )	NrB   r   r"   r   rR   r   r   r   )r%   r&   r'   r*   r+   rV   rW   r
   r;   r   rH   r   )r/   r-   r   r3   s       r4   test_sparse_encode_errorr   M  s    L
))


"C		,
+A11	am	,,AAU+Dvvdai    77266266$?Q.1456<<<r6   c                      [         R                  R                  S5      n U R                  SS5      nU R                  SS5      n[	        [
        5      " XSS S9nUR                  S:X  d   eg )Nr   re   @   r"   r   )r#   n_nonzero_coefs)re   r"   )r%   r&   r'   r*   r   r
   r,   )r-   r;   rY   r3   s       r4   )test_sparse_encode_error_default_sparsityr   W  s\    
))


"C		#rA		!RA=)!%QUVD::!!!r6   c                  x   Sn [         R                  R                  S5      nUR                  U [        5      nU[         R
                  " US-  SS9S S 2[         R                  4   -  n[        USSS9nUR                  [        5      nUR                  U5      n[         R                  " US:H  5      (       a   e[         R                  " [         R
                  " [         R                  " XB5      [        -
  S-  5      5      S	:  d   e[         R                  R                  U[         R                  " XB5      5        g )
NrB   r   r"   r   rR   r   r   r2   ri   r   r   )r%   r&   r'   r*   r+   rV   rW   r   rr   r;   r   r   rH   r   testingr   )r/   r-   r   coderr3   r   s         r4   test_sparse_coder_estimatorr   _  s    L
))


"C		,
+A11	am	,,A,E q!D		 	 	&Bvvdai    77266266$?Q.1456<<<JJr266$?3r6   c                     Sn [         R                  R                  S5      nUR                  U [        4S9nU[         R
                  " US-  SS9S S 2[         R                  4   -  n[        USSS	9n[        U5      n[        U5      [        U5      :w  d   e[         R                  R                  UR                  UR                  5        [        UR                  5      [        UR                  5      :w  d   e[         R                  R                  [        [        5      R                  [         R                   5      n[         R                  R                  UR#                  U5      UR#                  U5      5        g )
NrB   r   sizer"   r   rR   r   r   r   )r%   r&   r'   normalr+   rV   rW   r   r   idr   r   r2   randr0   astypefloat32r=   )r/   r-   r   r   cloneddatas         r4   !test_sparse_coder_estimator_cloner
  n  s   L
))


"C

z2
3A11	am	,,A,E 5\Ff:E"""JJv00%2B2BCf Bu'7'7$888899>>)Z077

CDJJv//5ut7LMr6   c                  >   [         R                  R                  S5      n Su  pU R                  X5      n[	        S5      SU-  -  n[         R                  R                  XB5      R                  [         R                  5      n[        USSS9nUR                  U5        g )N	  )(   r   g    >Arg   r   r"   )ri   r$   )	r%   r&   r'   r  intr  r  r   rr   )r-   r/   r+   	init_dictr0   r	  scs          r4   test_sparse_coder_parallel_mmapr    s     ))


$C%L2I CQ^,I99>>)077

CD	YE!	DBTr6   c                     [         R                  R                  S5      n Su  pU R                  X5      n[	        U5      n[        UR                  R                  U5        [        UR                  R                  U5        [        [        SS9nU" UR                  R                  U5        [        UR                  R                  U5        g )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2I	Y	B'(=(=rBbll33R8'.!4($ %R\\%:%:B? 5 5r:r6   c                      [         R                  " / SQ/ SQ/5      n [         R                  " / SQ/5      n[        U 5      nUR                  U5        UR                  U R
                  S   :X  d   eg )N)r   r"   rF   r   )r%   arrayr   r:   n_features_in_r,   )dr;   r  s      r4   test_sparse_coder_n_features_inr    sU    
)Y'(A
)A	QBFF1I
***r6   c                  F   Sn [         R                  R                  S5      nUR                  U [        4S9nUR                  [
        [        S-   4S9n[        U5      n[        R                  " [        SS9   UR                  U5        S S S 5        g ! , (       d  f       g = f)Nr   r   r  r   z3Dictionary and X have different numbers of featuresr}   )r%   r&   r'   uniformr+   r0   r   rp   r   r   r:   )r/   r-   rY   r;   r   s        r4   (test_sparse_encoder_feature_number_errorr    s    L
))


"C,
34A)Z!^45ANE	O
 			!
 
 
s   7B
B c                     [         R                  R                  S5      n [         R                  " SS/SS//5      n[         R                  " SS/SS	//5      n[         R                  " X5      U R                  S
S
5      -   nUR                  5       n[        XCU5        [         R                  " UR                  U5      n[         R                  " UR                  U5      nUR                  5       n[        XsXU5        [        XG5        g )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
t 399Q?2A "J% 	tvvtA
qssDA//#K!,J,r6   r#   )r   r   r   r   r   	data_typec                     Sn[         R                  R                  S5      nUR                  U[        5      n[        [        R                  U 5      UR                  U 5      US9nUR                  U :X  d   eg )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                    SnSn[         R                  R                  S5      nUR                  U[        5      n[        [        R                  [         R                  5      UR                  [         R                  5      U S9n[        [        R                  [         R                  5      UR                  [         R                  5      U S9n[        XVUS9  g )N-C6?r*  r   r   rtol)r%   r&   r'   r*   r+   r
   r;   r  r  float64r   )r#   r0  r/   r-   r2   code_32code_64s          r4   (test_sparse_encode_numerical_consistencyr4    s    
 DL
))


"C<4J	j//

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

;yG G40r6   c                    Sn[         R                  R                  S5      nUR                  U[        5      n[        UR                  U 5      US9nUR                  [        R                  U 5      5      nUR                  U :X  d   eg )Nr*  r   r   )
r%   r&   r'   r*   r+   r   r  r=   r;   r+  )r(  ri   r/   r-   r2   r   r3   s          r4   test_sparse_coder_dtype_matchr6    ss     L
))


"C<4J)$:ME ??188I./D::"""r6   r   )r   r   zdata_type, expected_typec                    [        SUUSS9nUR                  [        R                  U 5      5        UR                  R
                  U:X  d   eUR                  [        R                  U 5      5      R
                  U:X  d   eg )Nr   r   )r/   r   ri   r9   )r   r:   r;   r  r<   r+  r=   r(  expected_typer   ri   dict_learners        r4   $test_dictionary_learning_dtype_matchr;    su    ( &#/	L QXXi()##))]:::!!!((9"56<<MMMr6   c           
      z   [        SSUUSSSS9nUR                  [        R                  U 5      5        UR                  R
                  U:X  d   eUR                  [        R                  U 5      5      R
                  U:X  d   eUR                  R
                  U:X  d   eUR                  R
                  U:X  d   eg )Nr   r   re   r   r   )r/   r   r   ri   r   r   r9   )	r   r:   r;   r  r<   r+  r=   _A_Br8  s        r4   .test_minibatch_dictionary_learning_dtype_matchr?  "  s    ( /#/L QXXi()##))]:::!!!((9"56<<MMM??  M111??  M111r6   r   c                     [         R                  R                  S5      nSn[        [        R                  U 5      USUUS9u  pVnUR                  U:X  d   eUR                  U:X  d   eg )Nr   r   r   r/   r   r9   r   )r%   r&   r'   r   r;   r  r+  )r(  r9  r   r-   r/   r3   r2   _s           r4   test_dict_learning_dtype_matchrC  G  sl     ))


"CL'	!Da ::&&&},,,r6   c                    SnSnSn[        [        R                  [        R                  5      UUSU S9u  pEn[        [        R                  [        R
                  5      UUSU S9u  pxn[        [        R                  " XE5      [        R                  " Xx5      US9  [        [        R                  " [        R                  " U5      5      [        R                  " [        R                  " U5      5      US9  [        [        R                  " US-  5      [        R                  " US-  5      US9  [        R                  " US:g  5      S:  d   e[        R                  " US:g  5      [        R                  " US:g  5      :X  d   eg )	Nr.  rg   r"   r   rA  r/  r   皙?)r   r;   r  r%   r1  r  r   matmulrV   absmeancount_nonzero)	r   r0  r/   r   U_64V_64rB  U_32V_32s	            r4   (test_dict_learning_numerical_consistencyrN  `  s"    DLE!	!MD "	!MD BIId)299T+@tLBFF266$<("&&*>TJBFF47ORVVD!G_4@7743;$&&&DCK(B,<,<TS[,IIIIr6   c           	          [         R                  R                  S5      nSn[        [        R                  U 5      USSUUS9u  pVUR                  U:X  d   eUR                  U:X  d   eg )Nr   r   r   r   )r/   r   r   r9   r   )r%   r&   r'   r	   r;   r  r+  )r(  r9  r   r-   r/   r3   r2   s          r4   %test_dict_learning_online_dtype_matchrP    sm     ))


"CL+	!D ::&&&},,,r6   c                    SnSnSn[        [        R                  [        R                  5      USUSSU SS S9	u  pE[        [        R                  [        R
                  5      USUSSU SS S9	u  pg[        [        R                  " XE5      [        R                  " Xg5      US	9  [        [        R                  " [        R                  " U5      5      [        R                  " [        R                  " U5      5      US	9  [        [        R                  " US
-  5      [        R                  " US
-  5      US	9  [        R                  " US:g  5      S:  d   e[        R                  " US:g  5      [        R                  " US:g  5      :X  d   eg )Nr.  rg   r   i  r   r   r   )r/   r   r   r   r9   r   r   r   r/  r"   rE  )r	   r;   r  r%   r1  r  r   rF  rV   rG  rH  rI  )r   r0  r/   r   rJ  rK  rL  rM  s           r4   /test_dict_learning_online_numerical_consistencyrR    s6    DLE%	!
JD &	!
JD$ BIId)299T+@tLBFF266$<("&&*>TJBFF47ORVVD!G_4@7743;$&&&DCK(B,<,<TS[,IIIIr6   	estimatorr  rg   r   )r   r   c                 .    U R                   R                  $ )N)r  r  )rN   s    r4   <lambda>rU    s    !++&&r6   )idsc                    U R                  [        5        [        R                  S   nU R                  5       nU R                  R
                  R                  5       n[        U[        U5       Vs/ s H  oC U 3PM
     sn5        gs  snf )z1Check feature names for dict learning estimators.r   N)	r:   r;   r,   get_feature_names_outr  r  lowerr   r   )rS  r/   feature_names_outestimator_namerZ   s        r4   test_get_feature_names_outr\    su     MM!771:L!779((11779N).|)<=)<AA3	)<==s   0B
c           	         U R                  [        R                  R                  S[	        [
        SS95        [        R                  R                  S5      nUR                  SS5      n[        SSSSS	S
S9nUR                  U5        g )Nr   re   )
max_nbytesr   r   r    r"   r   rd   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_datare    s~    ,,S) ))


"CiiBG%L Wr6   )br(   rs   	functoolsr   numpyr%   rp   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_globalr0   r+   r*   r;   markthread_unsafer5   r@   rC   rz   r   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  r1  r,  r4  r6  int32int64r;  r?  rC  rN  rP  rR  r  r\  re  r_   r6   r4   <module>rv     s<           > 1 %  
 ,YY""1%
 	:Y
+
 ; ;A@6rH  5$-85$-8  9 9 , 5$-8, 9,  -0 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;	(="4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 J&&Z,D&EF#q2>
 	'  

  r6   