
    Pi{              
       v   d dl Z d dlZd dlmZ d dlZd dlZd dlZd dlm	Z	 d dl
mZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZmZmZ d d	lmZmZm Z  d d
l!m"Z" ej#        $                    d           Z%d\  Z&Z'e%(                    e&e'          Z)ej*        j+        d             Z,d Z-d Z.d Z/d Z0ej*        1                    dg d          ej*        1                    dddg          ej*        1                    dddg          d                                     Z2ej*        1                    dddg          d             Z3d Z4d Z5ej*        j+        d             Z6ej*        j+        d             Z7d Z8d Z9d Z:d  Z;ej*        1                    dg d          ej*        1                    dddg          ej*        1                    dddg          d!                                     Z<ej*        1                    dddg          d"             Z=ej*        1                    dddg          ej*        1                    dddg          d#                         Z>d$ Z?d% Z@d& ZAd' ZBd( ZCd) ZDd* ZEej*        1                    d+g d          ej*        1                    d,ddg          d-                         ZFej*        1                    d+d.d/g          d0             ZGd1 ZHd2 ZId3 ZJd4 ZKd5 ZLej*        j+        d6             ZMd7 ZNd8 ZOd9 ZPd: ZQej*        1                    d;d<          ej*        1                    d=ejR        ejS        f          d>                         ZTej*        1                    d;d<          d?             ZUej*        1                    dd<          ej*        1                    d=ejR        ejS        f          d@                         ZVej*        1                    dAdB          ej*        1                    dd<          ej*        1                    dCejR        ejR        fejS        ejS        fejW        ejS        fejX        ejS        ff          dD                                     ZYej*        1                    dAdB          ej*        1                    dd<          ej*        1                    dCejR        ejR        fejS        ejS        fejW        ejS        fejX        ejS        ff          dE                                     ZZej*        1                    dFdB          ej*        1                    dCejR        ejR        fejS        ejS        fejW        ejS        fejX        ejS        ff          dG                         Z[ej*        1                    dFdB          dH             Z\ej*        1                    dFdB          ej*        1                    dCejR        ejR        fejS        ejS        fejW        ejS        fejX        ejS        ff          dI                         Z]ej*        1                    dFdB          dJ             Z^ej*        1                    dK ee%_                    e'e'fL                     e             edMdNO          gdP Q          dR             Z`ej*        j+        dS             ZadS )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                  t   t           j                            d          } g d}t          j        ddgddg          D ]z\  }}|                     |t                    }|                     |t                    }t          j        |ddg          D ]'\  }}t          ||||          }|j        ||fk    sJ ({d S )Nr   )omp
lasso_larslasso_cdlars	threshold      	      )	algorithmn_jobs)	nprandomRandomState	itertoolsproductrandn
n_featuresr
   shape)	rng
algorithmsn_components	n_samplesX_
dictionaryr#   r$   codes	            /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/sklearn/decomposition/tests/test_dict_learning.pytest_sparse_encode_shapes_ompr5   *   s    
)


"
"CGGGJ#,#4aVaV#D#D ; ;iYYy*--YY|Z88
!*!2:1v!F!F 	; 	;Iv Z9VTTTD:)\!::::::	;; ;    c                     d} t          | d                              t                    }|j        j        | t
          fk    sJ d} t          | d                              t                    }|j        j        | t
          fk    sJ |                    t                    j        t          j        d         | fk    sJ d S )Nr    r   random_stater   )r   fitXcomponents_r,   r+   	transformr/   dicos     r4   test_dict_learning_shapesr@   6   s    Ll;;;??BBD!lJ%?????Ll;;;??BBD!lJ%?????>>!"qwqz<&@@@@@@@r6   c                      d} t          | d                              t                    }|j        j        | t
          fk    sJ d S )N   r   r8   )r   r:   r;   r<   r,   r+   r>   s     r4   test_dict_learning_overcompleterC   A   sI    Ll;;;??B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        |          <   |                    d	d          }t          j        t                    5  t          || d	          }|
                    |           d d d            n# 1 swxY w Y   t          j                    5  t          j        dt                     t          || d          }|
                    |           d d d            d S # 1 swxY w Y   d S )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    K:>:66"'!e)$$rud{23AJ1$uax//1f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>>HlJ/00"7++ 	> 	>IAv"?:vu==AaDD	RWRVAqDq)))**111bj=99r6   r      rF   c              3   :   K   | ]} |d z            V  dS )r    )rM   rK   r/   N ).0wr/   rK   rZ   s     r4   	<genexpr>z test_max_iter.<locals>.<genexpr>b   sV       
 
  MJ\Q=N  
 
 
 
 
 
r6   )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 e 
 
 
 
 
 
 (	
 
 
 	
 	
G 	AzA~z22A
Q&MAm'+Abn]##$			!RA 
(	)	)  )<QR
 
 
 	A	               
	 	"	"  g'9:::)<QT
 
 
 	A                 s%   2(C&&C*-C*AEEEc                      d} d}d}t          j        t          |          5  t          t          | |d           d d d            d S # 1 swxY w Y   d S )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      s    LEKG	z	1	1	1 H HaU$GGGGH H H H H H H H H H H H H H H H H Hs   AAArf   )r   r   r   r}   FTpositive_dictc                    d}t          || d||d                              t                    }|                    t                    }|r |j        dk                                    sJ n|j        dk                                     sJ |r|dk                                    sJ d S |dk                                     sJ d S )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!ff 	 >>!D , A%**,,,,,, 1$))+++++  	       q~~r6   c                     d}t          |dd| d                              t                    }| r!|j        dk                                    sJ d S |j        dk                                     sJ d S )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      s    L"#   
c!ff 	  , A%**,,,,,,, 1$))+++++++r6   c                  ,   d} t          | dddd                              t                    }d}|                    d          }t	          j        t          |          5  |                    t                     d d d            d S # 1 swxY w Y   d S )	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      s    L"   
c!ff 	 JGnnV$$G	z	1	1	1  q                 s   !B		BBc                     d} t          | ddd          }|                    t                                        t                    }t	          t          j        ||j                  t                     t	          |                    |          t                     |	                    d           |                    t                    }t	          t          j        ||j                  t          d	           t	          |                    |          t          d	           t          j        t          d
          5  |                    |d d d df                    d d d            d S # 1 swxY w Y   d S )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bfT4+;<<a@@@d44T::A>>>OOO555>>!DbfT4+;<<aKKKKd44T::AqIIII 
z)?	@	@	@ - -tAAAssF|,,,- - - - - - - - - - - - - - - - - -s   "E00E47E4c                     d} t          | dddd          }|                    t                                        t                    }t	          t          j        ||j                  t                     |                    d           |                    t                    }t	          t          j        ||j                  t          d	
           d S )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bfT4+;<<a@@@OOO555>>!DbfT4+;<<aKKKKKKr6   c                     d} t          t                    5 }t          | dddd          }t          t                    5  |                    |                              |          }d d d            n# 1 swxY w Y   t          t          j	        ||j
                  |d	           d d d            d S # 1 swxY w Y   d S )
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99 	@ 	@88K((22;??D	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@!F4)**K	
 	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s5   *B8)A6*B86A:	:B8=A:	>-B88B<?B<c                     d} t          | ddd          }|                    t                                        t          t          j        df                   }t          t	          j        |                    dk    sJ |                    d           |                    t          t          j        df                   }t          t	          j        |                    dk    sJ d S )	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22Dr~d##$$))))OOO...>>!BJM*++Dr~d##$$))))))r6   c                     d} t          | dd          }|                    t                                        t                    }|                    |          }d|_        |                    t                    }t          |d d d | f         |d d | d f         z
  |           |                    |          }t          ||           d S )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111m|m#$z!!!\]]2B'CCT   
 
 
,
,Cb#&&&&&r6   c            	         t           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 d S )	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2j999996$
##)QW4444%	!  J j9999999r6   c                      d} t          j        t          |           5  t          t          ddd           d d d            d S # 1 swxY w Y   d S )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	1	1 O OQ1rNNNNO O O O O O O O O O O O O O O O O Os   AAAc           
         d}t          |dd| d||d                              t                    }|                    t                    }|r |j        dk                                    sJ n|j        dk                                     sJ |r|dk                                    sJ d S |dk                                     sJ d S )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!ff 	 >>!D , A%**,,,,,, 1$))+++++  	       q~~r6   c           	          d}t          |dddd| d                              t                    }| r!|j        dk                                    sJ d S |j        dk                                     sJ d S )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  s    L&"#   
c!ff 	  , A%**,,,,,,, 1$))+++++++r6   c           
      d   t           j                            d          }d}t          t          |ddd|||           \  }}|r|dk                                    sJ n|dk                                     sJ | r|dk                                    sJ d S |dk                                     sJ d S )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          }|                    t                     t	          | ddddd	          }|                    t                     t	          | dddd
          }|                    t                     t          t          | dddd           t          t          | dddd           ||_        n# ||_        w xY w|j        j	        | t          fk    sJ d S )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     sm   LJJJJ) XZZ
 +QA3UV
 
 
 	* 
 
 
 	*QAA
 
 
 	 	%	
 	
 	
 	
 	%	
 	
 	
 	
  

Z
!lJ%???????s   CC, ,	C5c                      d} t          | ddd          }|                    t                     |j        j        | t
          fk    sJ d S )Nr    rd   r   r   r   r9   r   r:   r;   r<   r,   r+   r>   s     r4   *test_dict_learning_online_estimator_shapesr     sW    L&QQ  D 	HHQKKK!lJ%???????r6   c                      d} t          | ddd                              t                    }|j        j        | t
          fk    sJ d S )NrB   rd   r    r   r   r   r>   s     r4   &test_dict_learning_online_overcompleter     sV    L&QQ  	c!ff 	 !lJ%???????r6   c                      d} t           j                            d          }|                    | t                    }t          | dd|d                              t                    }t          |j	        |           d S )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     sw    L
)


"
"C		,
++A&Q!!  	c!ff 	 t'+++++r6   c                     d} t           j                            d          }|                    | t                    }|                    d           t          | dd|dd                              t                     d S )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     sz    L
)


"
"C		,
++AJJUJ   
c!fffffr6   c                     d} t           j                            d          }|                    | t                    }|t          j        |dz  d          d d t           j        f         z  }t          | dddd|d dd		  	                            t                    }t          | d|d
          }t          d          D ]5}t          D ]+}|                    |t           j        d d f                    ,6t          j        t          t          |j        d          dk              rJ t          |j        |j        d           |j        |j        cxk    rdk    sn J d S )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			aaam	,,A'
 
 
 
c!ff 
 (A  E 2YY 5 5 	5 	5FfRZ]34444	5 vmAu'8BBBaGHHHHHe/1BANNNN >U^2222s22222222r6   c                  >   d} t           j                            d          }|                    | t                    }|t          j        |dz  d          d d t           j        f         z  }dD ]-}t          t          ||          }|j	        t          | fk    sJ .d S )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			aaam	,,AF 7 7QT222zi6666667 7r6   r   positivec                 ~   d}t           j                            d          }|                    |t                    }|t          j        |dz  d          d d t           j        f         z  }t          t          || |          }|r|dk    	                                sJ d S |dk     
                                sJ d S )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			aaam	,,AAAAAD  	       q~~r6   r   r   c                    d}t           j                            d          }|                    |t                    }|t          j        |dz  d          d d t           j        f         z  }d}|                    |           }t          j	        t          |          5  t          t          || d	           d d d            d S # 1 swxY w Y   d S )
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			aaam	,,AIGnnT""G	z	1	1	1 ; ;adT::::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;s   CC	C	c                     d} t           j                            d          }|                    | t                    }|t          j        |dz  d          d d t           j        f         z  }t          t          d          }dD ];}t          t          ||	          }t          |||	          }t          ||           <d S )
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			aaam	,,A	Qc	"	"	"BF ( (!Q$///"a4000!!Q''''( (r6   c                     d} t           j                            d          }|                    | 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 d S )	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			aaam	,,AAU+++Dvdai     72626$??Q.145566<<<<<<r6   c                      t           j                            d          } |                     dd          }|                     dd          } t	          t
                    ||dd           }|j        dk    sJ d S )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  sw    
)


"
"C		#rA		!RA)?=))!Q%QUVVVD:!!!!!!r6   c                     d} t           j                            d          }|                    | t                    }|t          j        |dz  d          d d t           j        f         z  }t          |dd          }|                    t                    }|
                    |          }t          j        |dk              rJ t          j        t          j        t          j        ||          t          z
  dz                      d	k     sJ t           j                            |t          j        ||                     d S )
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			aaam	,,A,  E q!!D		 	 	&	&Bvdai     72626$??Q.145566<<<<Jr26$??33333r6   c                  .   d} t           j                            d          }|                    | t          f          }|t          j        |dz  d          d d t           j        f         z  }t          |dd	          }t          |          }t          |          t          |          k    sJ t           j
                            |j        |j                   t          |j                  t          |j                  k    sJ t           j                            t          t                                        t           j                  }t           j
                            |                    |          |                    |                     d S )
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  sG   L
)


"
"C

z2
33A11			aaam	,,A,  E 5\\Ff::E""""Jv0%2BCCCf  Bu'7$8$888889>>)Z0077
CCDJv//55ut7L7LMMMMMr6   c                  l   t           j                            d          } d\  }}|                     ||          }t	          d          d|z  z  }t           j                            ||                              t           j                  }t          |dd          }|                    |           d S )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22I CQ^,I9>>)Z0077
CCD	YE!	D	D	DBTr6   c                     t           j                            d          } d\  }}|                     ||          }t	          |          }t          |j        j        |           t          |j        j        |           t          t          d          } ||j        j        |           t          |j        j        |           d S )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22I	Y		B'(=rBBBbl3R888'.!4( ( ($ %$R\%:B??? 5r:::::r6   c                      t          j        g dg dg          } t          j        g dg          }t          |           }|                    |           |j        | j        d         k    sJ d S )N)r   r"   rF   r   )r%   arrayr   r:   n_features_in_r,   )dr;   r  s      r4   test_sparse_coder_n_features_inr    sm    
)))YYY'((A
)))A	QBFF1III
******r6   c                  |   d} t           j                            d          }|                    | t          f          }|                    t
          t          dz   f          }t          |          }t          j        t          d          5  |
                    |           d d d            d S # 1 swxY w Y   d S )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44A)Z!^455ANNE	O
 
 
   			!                 s   B11B58B5c                  $   t           j                            d          } t          j        ddgddgg          }t          j        ddgdd	gg          }t          j        ||          |                     d
d
          z   }|                                }t          |||           t          j        |j        |          }t          j        |j        |          }|                                }t          |||||           t          ||           d S )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8c4[3*-..DC:Sz233J
tZ  399Q??2A ""JQ%%% 	tvtA
qsDA//##Kaq!,,,J,,,,,r6   r#   )r   r   r   r   r   	data_typec                    d}t           j                            d          }|                    |t                    }t          t                              |           |                    |           |          }|j        | k    sJ d S )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)    s     L
)


"
"C<44J	Z..y99Y  D :""""""r6   c                    d}d}t           j                            d          }|                    |t                    }t          t                              t           j                  |                    t           j                  |           }t          t                              t           j	                  |                    t           j	                  |           }t          |||           d S )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<44J	j//
;;y  G 	j//
;;y  G GW4000000r6   c                 :   d}t           j                            d          }|                    |t                    }t          |                    |           |          }|                    t                              |                     }|j	        | k    sJ d S )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    s     L
)


"
"C<44J)$$:M  E ??188I..//D:""""""r6   r   )r   r   zdata_type, expected_typec                    t          d||d          }|                    t                              |                      |j        j        |k    sJ |                    t                              |                     j        |k    sJ d S )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    s    ( &#/	  L QXXi(()))#)]::::!!!((9"5"566<MMMMMMr6   c           	      h   t          dd||ddd          }|                    t                              |                      |j        j        |k    sJ |                    t                              |                     j        |k    sJ |j        j        |k    sJ |j        j        |k    sJ d S )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"566<MMMM? M1111? M111111r6   r   c                     t           j                            d          }d}t          t                              |           |d||          \  }}}|j        |k    sJ |j        |k    sJ d S )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  s     )


"
"CL'	!  D*a :&&&&},,,,,,r6   c                 :   d}d}d}t          t                              t          j                  ||d|           \  }}}t          t                              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k              dk    sJ t          j        |dk              t          j        |dk              k    sJ d S )	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  `  sl    DLE!	!  MD$ "	!  MD$ BIdD))29T4+@+@tLLLLBF26$<<(("&*>*>TJJJJBF47OORVD!G__4@@@@743;$&&&&DCK((B,<TS[,I,IIIIIIIr6   c                     t           j                            d          }d}t          t                              |           |dd||          \  }}|j        |k    sJ |j        |k    sJ d S )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    s     )


"
"CL+	!  D* :&&&&},,,,,,r6   c                 F   d}d}d}t          t                              t          j                  |d|dd| dd 	  	        \  }}t          t                              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k              dk    sJ t          j        |dk              t          j        |dk              k    sJ d S )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$$ BIdD))29T4+@+@tLLLLBF26$<<(("&*>*>TJJJJBF47OORVD!G__4@@@@743;$&&&&DCK((B,<TS[,I,IIIIIIIr6   	estimatorr   rd   r   )r   r   c                     | j         j        S )N)r  r  )rN   s    r4   <lambda>rR    s    !+& r6   )idsc                    |                      t                     t          j        d         }|                                 }| j        j                                        t          |fdt          |          D                        dS )z1Check feature names for dict learning estimators.r   c                     g | ]} | 	S r]   r]   )r^   rY   estimator_names     r4   
<listcomp>z.test_get_feature_names_out.<locals>.<listcomp>  s$    ===AN	A		===r6   N)	r:   r;   r,   get_feature_names_outr  r  lowerr   r   )rP  r/   feature_names_outrV  s      @r4   test_get_feature_names_outr[    s     MM!71:L!7799(17799N====|)<)<===    r6   c                 8   |                      t          j        j        dt	          t
          d                     t          j                            d          }|	                    dd          }t          ddddd	d
          }|                    |           d S )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_datard    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  r[  rd  r]   r6   r4   <module>ru     s
                                         > = = = = = 1 1 1 1 1 1 % % % % % %                      
 , + + + + +Y""1%%
 	:Y
++
 ; ; ;A A A@ @ @6 6 6rH H H     5$-885$-88    98 98  , 5$-88, , 98,    - - -0 L L L( 
 
 
"* * * ' ' '&: : ::O O O     5$-885$-88    98 98  4 5$-88, , 98,& 5$-885$-88    98 98 02@ 2@ 2@j@ @ @@ @ @, , ,  3 3 3<7 7 7 !H!H!HIIeT]33	  	  43 JI	  &%11; ; 21;	( 	( 	(= = =" " "4 4 4N N N$   &; ; ; + + +	 	 	- - -. G  rz2:&>??# # @? # G 1 1 1 Q  rz2:&>??	# 	# @? 	# .99Q  	RZ 	RZ 	2:	2:	 N N   :9N$ .99Q  	RZ 	RZ 	2:	2:	 2 2   :920 >22	RZ 	RZ 	2:	2:	 - -  32- >22 J  J 32 JF >22	RZ 	RZ 	2:	2:	 - -  32-  >22(J (J 32(JV J&&Z,D&EEFF##q2>>>
 	'&   
 
 
     r6   