
    ri{              
          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)ejT                  jV                  d        Z,d Z-d Z.d Z/d Z0ejT                  jc                  dg d      ejT                  jc                  dddg      ejT                  jc                  dddg      d                      Z2ejT                  jc                  dddg      d        Z3d Z4d Z5ejT                  jV                  d        Z6ejT                  jV                  d        Z7d Z8d Z9d Z:d  Z;ejT                  jc                  dg d      ejT                  jc                  dddg      ejT                  jc                  dddg      d!                      Z<ejT                  jc                  dddg      d"        Z=ejT                  jc                  dddg      ejT                  jc                  dddg      d#               Z>d$ Z?d% Z@d& ZAd' ZBd( ZCd) ZDd* ZEejT                  jc                  d+g d      ejT                  jc                  d,ddg      d-               ZFejT                  jc                  d+d.d/g      d0        ZGd1 ZHd2 ZId3 ZJd4 ZKd5 ZLejT                  jV                  d6        ZMd7 ZNd8 ZOd9 ZPd: ZQejT                  jc                  d;d<      ejT                  jc                  d=ej                  ej                  f      d>               ZTejT                  jc                  d;d<      d?        ZUejT                  jc                  dd<      ejT                  jc                  d=ej                  ej                  f      d@               ZVejT                  jc                  dAdB      ejT                  jc                  dd<      ejT                  jc                  dCej                  ej                  fej                  ej                  fej                  ej                  fej                  ej                  ff      dD                      ZYejT                  jc                  dAdB      ejT                  jc                  dd<      ejT                  jc                  dCej                  ej                  fej                  ej                  fej                  ej                  fej                  ej                  ff      dE                      ZZejT                  jc                  dFdB      ejT                  jc                  dCej                  ej                  fej                  ej                  fej                  ej                  fej                  ej                  ff      dG               Z[ejT                  jc                  dFdB      dH        Z\ejT                  jc                  dFdB      ejT                  jc                  dCej                  ej                  fej                  ej                  fej                  ej                  fej                  ej                  ff      dI               Z]ejT                  jc                  dFdB      dJ        Z^ejT                  jc                  dK ee%j                  e'e'fL             e        edMdNO      gdP Q      dR        Z`ejT                  jV                  dS        Zay)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                  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	            l/var/www/auto_recruiter/arenv/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::)\!::::	;;    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@   6   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   A   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_functionH   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_matrixR   s    ++aa>HHlJ/0"7+ 	>IAv":vu=AaD	>	RWWRVVAqDq)*1bjj=99r6   r      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>b   s1      
  J\Q=N 
s   )r   2   d     r   r      g      @g      )transform_algorithmtransform_max_itererrorrc   )r%   r_tuplerG   logical_notreshapepytestwarnsr   r   fit_transformwarningscatch_warningssimplefilter)
rf   subsamplingD_multir;   first_quartermodelr/   rK   rO   rZ   s
         @@@@r4   test_max_iterrw   G   sF    %JK,L ee 
 (	
 	
G 	AzA~z2A
Q&MAm'+Abnn]#$			!RA 
(	) )<QR
 	A	 
	 	 	" g'9:)<QT
 	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)rm   raises
ValueErrorr   r;   )r/   r|   err_msgs      r4   *test_dict_learning_lars_positive_parameterr      sF    LEKG	z	1 HaU$GH H Hs	   ?Arf   )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)rf   r9   r}   r   fit_algorithm)r   r:   r;   r=   r<   allanyrf   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   )rf   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   )rf   r9   r}   r   9Positive constraint not supported for '{}' coding method.rz   )r   r:   r;   formatrm   r~   r   r=   )r/   r?   r   s      r4   'test_dict_learning_lars_code_positivityr      ss    L" 
c!f 	 JGnnV$G	z	1 q  s   A33A<c                     d} t        | ddd      }|j                  t              j                  t              }t	        t        j                  ||j                        t               t	        |j                  |      t               |j                  d       |j                  t              }t	        t        j                  ||j                        t        d	       t	        |j                  |      t        d	       t        j                  t        d
      5  |j                  |d d d df          d d d        y # 1 sw Y   y xY w)NrB   r   MbP?r   )rf   transform_alphar9   r   rf   r"   decimalzExpected 12, got 11.rz   re   )r   r:   r;   r=   r   r%   dotr<   inverse_transform
set_paramsrm   r~   r   r/   r?   r3   s      r4   !test_dict_learning_reconstructionr      s    L%UVD 88A;  #DbffT4+;+;<a@d44T:A>OOO5>>!DbffT4+;+;<aKd44T:AqI 
z)?	@ -tAssF|,- - -s   D>>E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   rd   rf   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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   rd   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	

 
	@ 	@
 
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 )	Nrd   r   rF   r   )rf   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                  J   d} t        | dd      }|j                  t              j                  t              }|j	                  |      }d|_        |j                  t              }t        |d d d | f   |d d | d f   z
  |       |j	                  |      }t        ||       y )Nr    r   r   )rf   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            	         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   rd   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)Nry   rz   rd   r   T)r   r   r}   )rm   r~   r   r	   r;   )r   s    r4   1test_dict_learning_online_lars_positive_parameterr   H  s<    KG	z	1 OQ1rNO O Os	   ;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   rd   r   r   r   )r   r   rf   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           	          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   rd   r   r   r   r   )r   r   rf   r9   r   r   )r   r:   r;   r<   r   r   r   s      r4   'test_minibatch_dictionary_learning_larsr   r  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   rd   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                     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   )StringIOrd   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    rd   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   rd   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   rd   )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)writerd   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   rb   )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     s;   L
))


"C		,
+A11	am	,,A'
 
c!f 
 (AE 2Y 5 	5FfRZZ]34	55 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 7QT2zzi66667r6   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   rz   Tr   )r%   r&   r'   r*   r+   rU   rV   r   rm   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dT:; ; ;s   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 )
Nrb   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   A  s    L
))


"C		,
+A11	am	,,A	Qc	"BF (!Q$/"a40!!Q'(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   M  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   rb   @   r"   r   )r#   n_nonzero_coefs)rb   r"   )r%   r&   r'   r*   r   r
   r,   )r-   r;   rX   r3   s       r4   )test_sparse_encode_error_default_sparsityr   W  s`    
))


"C		#rA		!RA)?=)!Q%QUVD::!!!r6   c                  p   d} t         j                  j                  d      }|j                  | t              }|t        j
                  |dz  d      d d t         j                  f   z  }t        |dd      }|j                  t              }|j                  |      }t        j                  |dk(        rJ t        j                  t        j
                  t        j                  ||      t        z
  dz              d	k  sJ t         j                  j                  |t        j                  ||             y )
NrB   r   r"   r   rQ   r   r   r2   rf   r   r   )r%   r&   r'   r*   r+   rU   rV   r   ro   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                     d} t         j                  j                  d      }|j                  | t        f      }|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 t         j                  j                  t        t              j                  t         j                         }t         j                  j                  |j#                  |      |j#                  |             y )
NrB   r   sizer"   r   rQ   r   r   r   )r%   r&   r'   normalr+   rU   rV   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                  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    >Ard   r   r"   )rf   r$   )	r%   r&   r'   r  intr  r  r   ro   )r-   r/   r+   	init_dictr0   r  scs          r4   test_sparse_coder_parallel_mmapr    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                  g dg      }t        |       }|j                  |       |j                  | j
                  d   k(  sJ y )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                  L   d} t         j                  j                  d      }|j                  | t        f      }|j                  t
        t        dz   f      }t        |      }t        j                  t        d      5  |j                  |       d d d        y # 1 sw Y   y xY w)Nr   r   r   r   z3Dictionary and X have different numbers of featuresrz   )r%   r&   r'   uniformr+   r0   r   rm   r~   r   r:   )r/   r-   rX   r;   r   s        r4   (test_sparse_encoder_feature_number_errorr    s    L
))


"C,
34A)Z!^45ANE	O
  			!  s   ?BB#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_consistencyr1    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%  rf   r/   r-   r2   r   r3   s          r4   test_sparse_coder_dtype_matchr3    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   rf   r9   )r   r:   r;   r  r<   r(  r=   r%  expected_typer   rf   dict_learners        r4   $test_dictionary_learning_dtype_matchr8    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   rb   r   r   )r/   r   r   rf   r   r   r9   )	r   r:   r;   r  r<   r(  r=   _A_Br5  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                     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%  r6  r   r-   r/   r3   r2   _s           r4   test_dict_learning_dtype_matchr@  G  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 )	Nr+  rd   r"   r   r>  r,  r   皙?)r   r;   r  r%   r.  r  r   matmulrU   absmeancount_nonzero)	r   r-  r/   r|   U_64V_64r?  U_32V_32s	            r4   (test_dict_learning_numerical_consistencyrK  `  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%  r6  r   r-   r/   r3   r2   s          r4   %test_dict_learning_online_dtype_matchrM    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+  rd   r   i  r   r   r   )r/   r   r|   r   r9   r   r   r   r,  r"   rB  )r	   r;   r  r%   r.  r  r   rC  rU   rD  rE  rF  )r   r-  r/   r|   rG  rH  rI  rJ  s           r4   /test_dict_learning_online_numerical_consistencyrO    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   	estimatorr   rd   r   )r   r   c                 .    | j                   j                  S )N)r  r  )rN   s    r4   <lambda>rR    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   )rP  r/   feature_names_outestimator_namerY   s        r4   test_get_feature_names_outrY    sq     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   rb   )
max_nbytesr   r   r    r"   r   ra   T)r/   r9   r$   r   r   r   )setattrsklearndecomposition_dict_learningr   r   r%   r&   r'   r*   r   r:   )monkeypatchr-   X_trainr7  s       r4   %test_cd_work_on_joblib_memmapped_datarb    s~    ,,S) ))


"CiiBG%L Wr6   )br(   rp   	functoolsr   numpyr%   rm   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   rw   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  r.  r)  r1  r3  int32int64r8  r<  r@  rK  rM  rO  r  rY  rb  r]   r6   r4   <module>rs     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   