
    _nds              
          d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlm Z  d dl!m"Z" ej#        $                    d           Z%d\  Z&Z'e%(                    e&e'          Z)d Z*d Z+d Z,d Z-d Z.e j/        0                    dg d          e j/        0                    ddd g          e j/        0                    d!dd g          d"                                     Z1e j/        0                    d!dd g          d#             Z2d$ Z3d% Z4d& Z5d' Z6d( Z7d) Z8d* Z9d+ Z:e j/        0                    dg d          e j/        0                    ddd g          e j/        0                    d!dd g          d,                                     Z;e j/        0                    d!dd g          d-             Z<e j/        0                    ddd g          e j/        0                    d!dd g          d.                         Z=d/ Z>d0 Z?d1 Z@d2 ZAd3 ZBd4 ZCd5 ZDe j/        0                    d6g d          e j/        0                    d7dd g          d8                         ZEe j/        0                    d6d9d:g          d;             ZFd< ZGd= ZHd> ZId? ZJd@ ZKdA ZLdB ZMdC ZNdD ZOe j/        0                    dEg dF          dG             ZPdH ZQdI ZRe j/        0                    dJg dK          dL             ZSdM ZTdN ZUdO ZVe j/        0                    dPdQ          e j/        0                    dRejW        ejX        f          dS                         ZYe j/        0                    dPdQ          dT             ZZe j/        0                    ddQ          e j/        0                    dRejW        ejX        f          dU                         Z[e j/        0                    dVdW          e j/        0                    ddQ          e j/        0                    dXejW        ejW        fejX        ejX        fej\        ejX        fej]        ejX        ff          dY                                     Z^e j/        0                    dVdW          e j/        0                    ddQ          e j/        0                    dXejW        ejW        fejX        ejX        fej\        ejX        fej]        ejX        ff          dZ                                     Z_e j/        0                    d[dW          e j/        0                    dXejW        ejW        fejX        ejX        fej\        ejX        fej]        ejX        ff          d\                         Z`e j/        0                    d[dW          d]             Zae j/        0                    d[dW          e j/        0                    dXejW        ejW        fejX        ejX        fej\        ejX        fej]        ejX        ff          d^                         Zbe j/        0                    d[dW          d_             Zce j/        0                    d` ee)jd                   e             edadbc          gdd e          df             Zedg Zfdh ZgdS )i    N)partial)clone)ConvergenceWarning)check_array)Parallel)assert_allclose)assert_array_almost_equal)assert_array_equal)ignore_warnings)
TempMemmap)DictionaryLearning)MiniBatchDictionaryLearning)SparseCoder)dict_learning)dict_learning_online)sparse_encode)#check_transformer_data_not_an_array)check_transformer_general)check_transformers_unfitted)_update_dict)
      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	            Nlib/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@   4   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   ?   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_functionF   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   rF   axisN)r%   rG   empty	enumeraterH   sumnewaxis)rM   rK   r/   centersDirL   rO   s          r4   ricker_matrixz$test_max_iter.<locals>.ricker_matrixP   s    +aa>>HlJ/00"7++ 	> 	>IAv"?:vu==AaDD	RWRVAqDq)))**111bj=99r6   r   i   r"   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>`   sV       
 
  MJ\Q=N  
 
 
 
 
 
r6   )r   2   d   i  i  r   r      g      @g      )transform_algorithmtransform_max_itererrori  )r%   r_tuplerG   logical_notreshapepytestwarnsr   r   fit_transformwarningscatch_warningssimplefilter)
rd   subsamplingD_multir;   first_quartermodelr/   rK   rO   rZ   s
         @@@@r4   test_max_iterru   E   sF          %JK,L e 
 
 
 
 
 
 .	
 
 
 	
 	
G 	AzA~z22A
Q&MAm'+Abn]##$			!RA 
(	)	)  )<QR
 
 
 	A	               
	 	"	"  g'9:::)<QU
 
 
 	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)rk   raises
ValueErrorr   r;   )r/   rz   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   AAArd   )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)rd   r9   r{   r   fit_algorithm)r   r:   r;   r=   r<   allanyrd   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   )rd   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   )rd   r9   r{   r   9Positive constraint not supported for '{}' coding method.rx   )r   r:   r;   formatrk   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                     |                    d           |                    t                    }t	          t          j        ||j                  t          d	           d S )
NrB   r   MbP?r   )rd   transform_alphar9   r   rd   rF   decimal	r   r:   r;   r=   r	   r%   dotr<   
set_paramsr/   r?   r3   s      r4   !test_dict_learning_reconstructionr      s    L%UV  D 88A;;  ##DbfT4+;<<a@@@OOO555>>!DbfT4+;<<aKKKKKKr6   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   rb   rd   r   r9   r$   r   r   rF   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   rb   r   )categoryrF   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 )	Nrb   r   r"   r   )rd   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
  |           d S )Nr    r   r   )rd   r9   T)r   r:   r;   r=   
split_signr	   )r/   r?   r3   
split_codes       r4   test_dict_learning_splitr   
  s    L+A  D 88A;;  ##DDO""J111m|m#$z!!!\]]2B'CCT    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   rb   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 )Nrw   rx   rb   r   T)r   r   r{   rk   r|   r}   r   r;   )r~   s    r4   1test_dict_learning_online_lars_positive_parameterr   5  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   rb   r   r   r   )r   r   rd   r9   r{   r   r   )r   r:   r;   r=   r<   r   r   r   s         r4   -test_minibatch_dictionary_learning_positivityr   ;  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   rb   r   r   r   r   )r   r   rd   r9   r   r   )r   r:   r;   r<   r   r   r   s      r4   'test_minibatch_dictionary_learning_larsr   _  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   rb   r   r   )r/   r   r   rz   r9   r   r{   )r%   r&   r'   r   r;   r   r   )r{   r   r-   r/   r3   r2   s         r4   $test_dict_learning_online_positivityr   s  s     )


"
"CL+	!##	 	 	D*  &a$$&&&&&&Q##%%%%%  	       q~~r6   c                  &   d} ddl m} dd l}|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   )StringIOrb   r   皙?)r   r   verbosetolr9   rF   )r   r   r   max_no_improvementr9   )r   r   r   r9   )r/   r   rz   r   r9   )ior   sys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    rb   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   rb   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   rb   )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)writerb   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   rF   r   rQ   r   F        )r   r   rz   r   r   r   r   r9   )rz   r   r9   rz   r   ra   )r%   r&   r'   r*   r+   rU   rV   r   r:   r;   rangepartial_fitr   r   r<   r	   n_steps_)r/   r-   r   dict1dict2rY   samples          r4   %test_dict_learning_online_partial_fitr     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   rF   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   rF   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   rF   r   rQ   r   rx   Tr   )r%   r&   r'   r*   r+   rU   rV   r   rk   r|   r}   r   r;   )r   r/   r-   r   r~   s        r4   )test_sparse_encode_unavailable_positivityr   "  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 )
Nra   r   rF   r   rQ   F)orderr   r   )r%   r&   r'   r*   r+   rU   rV   r   r;   r   r	   )r/   r-   r   Xfr   abs          r4   test_sparse_encode_inputr   .  s    L
)


"
"C		,
++A11			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   rF   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   :  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   ra   @   rF   r   )r#   n_nonzero_coefs)ra   rF   )r%   r&   r'   r*   r   r   r,   )r-   r;   rX   r3   s       r4   )test_sparse_encode_error_default_sparsityr   D  sw    
)


"
"C		#rA		!RA)?=))!Q%QUVVVD:!!!!!!r6   c                     d} t           j                            d          }|                    | t                    }t          j        t                    5  t          t          |d           d d d            d S # 1 swxY w Y   d S )NrB   r   z	<unknown>r   )
r%   r&   r'   r*   r+   rk   r|   r}   r   r;   r   s      r4   test_unknown_methodr   L  s    L
)


"
"C		,
++A	z	"	" 3 3ak22223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3s   A;;A?A?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 d S )
NrB   r   rF   r   rQ   r   r   r2   rd   r   r   )r%   r&   r'   r*   r+   rU   rV   r   r=   r;   r   rH   r   )r/   r-   r   coders       r4   test_sparse_coder_estimatorr   T  s    L
)


"
"C		,
++A11			aaam	,,A,  ill 
 veqj!!!!!72626%++a/A56677#======r6   c                  r   d} t           j                            d          }|                    | t                    }|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 |j        |j        k    sJ |j        |j        k    sJ t           j                            t           t                                        t           j                  }t           j
                            |                    |          |                    |                     d S )	NrB   r   rF   r   rQ   r   r   r   )r%   r&   r'   r*   r+   rU   rV   r   r   idtestingr   r2   n_components_n_features_in_randr0   astypefloat32r=   )r/   r-   r   r   cloneddatas         r4   !test_sparse_coder_estimator_cloner  `  sp   L
)


"
"C		,
++A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5#66666 E$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    >Arb   r   rF   )rd   r$   )	r%   r&   r'   r  intr  r  r   rm   )r-   r/   r+   	init_dictr0   r  scs          r4   test_sparse_coder_parallel_mmapr  r  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
  r"   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        | j        d         k    sJ d S )N)r   rF   r"   r   )r%   arrayr   r  r,   )dr  s     r4   test_sparse_coder_n_features_inr    sI    
)))YYY'((A	QB
******r6   attr)iter_offset_inner_stats_random_state_c                     d|  d}t          dddd          }|                    t                     t          j        t
          |          5  t          ||            d d d            d S # 1 swxY w Y   d S )	NzThe attribute `z2` is deprecated in 1.1 and will be removed in 1.3.rF   rb   r   r   )r/   r   r   r9   rx   )r   r:   r;   rk   rl   FutureWarninggetattr)r  depr_msgests      r4   2test_minibatch_dict_learning_deprecated_attributesr"    s     	S$RRR  &1qq  C GGAJJJ	m8	4	4	4  T                 s   A--A14A1c                      d} t          ddd          }t          j        t          |           5  |                    t
          d           d d d            d S # 1 swxY w Y   d S )NzM'iter_offset' is deprecated in version 1.1 and will be removed in version 1.3rF   rb   r   r/   r   r9   rx   )iter_offset)r   rk   rl   r  r   r;   r   r!  s     r4   ?test_minibatch_dict_learning_partial_fit_iter_offset_deprecatedr'    s     	X  &1QR
S
S
SC	m8	4	4	4 * *q)))* * * * * * * * * * * * * * * * * *s   AA!Ac                      d} t          dddd          }t          j        t          |           5  |                    t
                     d d d            d S # 1 swxY w Y   d S )NzH'n_iter' is deprecated in version 1.1 and will be removed in version 1.4rF   rb   r    r   )r/   r   n_iterr9   rx   )r   rk   rl   r  r:   r;   r&  s     r4   .test_minibatch_dict_learning_n_iter_deprecatedr*    s     	S  &1QQ  C 
m8	4	4	4  


                 s   AA Azarg, val))r%  r   )inner_statsN)return_inner_statsF)return_n_iterF)r)  r    c                     d|  d}t          j        t          |          5  t          t          fdddd| |i d d d            d S # 1 swxY w Y   d S )N'zB' is deprecated in version 1.1 and will be removed in version 1.3.rx   rF   rb   r   r$  )rk   rl   r  r   r;   )argvalr   s      r4   )test_dict_learning_online_deprecated_argsr2    s     	TCSSS  
m8	4	4	4 
 
	
!!	
 	
@CSz	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
r   c                  X   d} t          j        t          |           5  t          t          dd           d d d            n# 1 swxY w Y   t          j        t          |           5  t          dd                              t                     d d d            d S # 1 swxY w Y   d S )Nz+The default value of batch_size will changerx   rF   r   )r/   r9   )rk   rl   r  r   r;   r   r:   msgs    r4   ,test_batch_size_default_value_future_warningr6    sI    8C	m3	/	/	/ @ @QQQ????@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 
m3	/	/	/ K K#CCCGGJJJK K K K K K K K K K K K K K K K K Ks#   AA	A(*BB#&B#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?rF   )
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   c                      d} t          j        t          |           5  t          t          dd           d d d            d S # 1 swxY w Y   d S )Nz8The following arguments are incompatible with 'max_iter'rx   r   T)r   r,  r   r4  s    r4   +test_dict_learning_online_n_iter_deprecatedr@    s     EC	z	-	-	- F FQEEEEF F F F F F F F F F F F F F F F F Fs   AA
A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)rA  r#   r/   r-   r2   r3   s         r4   test_sparse_encode_dtype_matchrE  	  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?rC  r   r   rtol)r%   r&   r'   r*   r+   r   r;   r  r  float64r   )r#   rI  r/   r-   r2   code_32code_64s          r4   (test_sparse_encode_numerical_consistencyrM    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 )NrC  r   r   )
r%   r&   r'   r*   r+   r   r  r=   r;   rD  )rA  rd   r/   r-   r2   r   r3   s          r4   test_sparse_coder_dtype_matchrO  +  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   rd   r9   )r   r:   r;   r  r<   rD  r=   rA  expected_typer   rd   dict_learners        r4   $test_dictionary_learning_dtype_matchrT  =  s    ( &#/	  L QXXi(()))#)]::::!!!((9"5"566<MMMMMMr6   c           	         t          dd||ddd          }|                    t                              |                      |j        j        |k    sJ |                    t                              |                     j        |k    sJ |j        d         j        |k    sJ |j        d         j        |k    sJ d S )Nr   r   ra   r   r   )r/   r   r   rd   r   r   r9   r   )r   r:   r;   r  r<   rD  r=   _inner_statsrQ  s        r4   .test_minibatch_dictionary_learning_dtype_matchrW  \  s    ( /#/  L QXXi(()))#)]::::!!!((9"5"566<MMMM$Q'->>>>$Q'->>>>>>r6   r   c                     t           j                            d          }d}t          t                              |           |d||          \  }}}|j        |k    sJ |j        |k    sJ d S )Nr   r   r   r/   rz   r9   r   )r%   r&   r'   r   r;   r  rD  )rA  rR  r   r-   r/   r3   r2   _s           r4   test_dict_learning_dtype_matchr[    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 )	Ngư>rb   rF   r   rY  rH  r   皙?)r   r;   r  r%   rJ  r  r   matmulrU   absmeancount_nonzero)	r   rI  r/   rz   U_64V_64rZ  U_32V_32s	            r4   (test_dict_learning_numerical_consistencyrf    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/   rz   r   r9   r   )r%   r&   r'   r   r;   r  rD  )rA  rR  r   r-   r/   r3   r2   s          r4   %test_dict_learning_online_dtype_matchri    s     )


"
"CL+	!  D* :&&&&},,,,,,r6   c                 :   d}d}d}t          t                              t          j                  ||dd|           \  }}t          t                              t          j                  ||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 )NrG  rb   r   r   r   rh  rH  rF   r   r]  )r   r;   r  r%   rJ  r  r   r^  rU   r_  r`  ra  )r   rI  r/   rz   rb  rc  rd  re  s           r4   /test_dict_learning_online_numerical_consistencyrk    sn    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   	estimatorrb   r   )r   r   c                     | j         j        S )N)r  r  )rN   s    r4   <lambda>rn    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   )rl  r/   feature_names_outrr  s      @r4   test_get_feature_names_outrw    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   ra   )
max_nbytesr   r   r    rF   r   r`   T)r/   r9   r$   r   r   r   )setattrsklearndecomposition_dict_learningr   r   r%   r&   r'   r*   r   r:   )monkeypatchr-   X_trainrS  s       r4   %test_cd_work_on_joblib_memmapped_datar    s    ,S)))   )


"
"CiiBG%  L Wr6   c                      d} t          j        t          |           5  t          ddd                              t
                    }ddd           n# 1 swxY w Y   |j        dk    sJ dS )znCheck that we always raise a warning when `n_iter` is set even if it is
    ignored if `max_iter` is set.
    z%'n_iter' is deprecated in version 1.1rx      rF   )r   r)  r   N)rk   rl   r  r   r:   r;   n_iter_)warn_msgrt   s     r4   :test_minibatch_dictionary_learning_warns_and_ignore_n_iterr  ,  s     7H	m8	4	4	4 Y Y+s1qQQQUUVWXXY Y Y Y Y Y Y Y Y Y Y Y Y Y Y=As   +AAA)hrk   rn   numpyr%   	functoolsr   r(   r{  sklearn.baser   sklearn.exceptionsr   sklearn.utilsr   sklearn.utils.parallelr   sklearn.utils._testingr   r	   r
   r   r   sklearn.decompositionr   r   r   r   r   r   sklearn.utils.estimator_checksr   r   r   $sklearn.decomposition._dict_learningr   r&   r'   
rng_globalr0   r+   r*   r;   r5   r@   rC   ru   r   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r"  r'  r*  r2  r6  r>  r@  r  rJ  rE  rM  rO  int32int64rT  rW  r[  rf  ri  rk  r9  rw  r  r  r\   r6   r4   <module>r     s                          1 1 1 1 1 1 % % % % % % + + + + + + 2 2 2 2 2 2 < < < < < < 5 5 5 5 5 5 2 2 2 2 2 2 - - - - - - 4 4 4 4 4 4 = = = = = = - - - - - - / / / / / / 6 6 6 6 6 6 / / / / / / N N N N N N D D D D D D F F F F F F = = = = = = 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,    
L 
L 
L 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;	( 	( 	(= = =" " "3 3 3	> 	> 	>N N N$  &; ; ; + + + !R!R!RSS  TS 	* 	* 	*     	 	
 
	 	
K K K- - -0F F F 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:	 ? ?   :9?0 >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J AC##q2>>>
 	'&   
 
 
  0    r6   