
    0Phlu              
          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)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>d% Z?d& Z@d' ZAd( ZBd) ZCd* ZDej/        0                    d+g d          ej/        0                    d,ddg          d-                         ZEej/        0                    d+d.d/g          d0             ZFd1 ZGd2 ZHd3 ZId4 ZJd5 ZKd6 ZLd7 ZMd8 ZNd9 ZOej/        0                    d:d;          ej/        0                    d<ejP        ejQ        f          d=                         ZRej/        0                    d:d;          d>             ZSej/        0                    dd;          ej/        0                    d<ejP        ejQ        f          d?                         ZTej/        0                    d@dA          ej/        0                    dd;          ej/        0                    dBejP        ejP        fejQ        ejQ        fejU        ejQ        fejV        ejQ        ff          dC                                     ZWej/        0                    d@dA          ej/        0                    dd;          ej/        0                    dBejP        ejP        fejQ        ejQ        fejU        ejQ        fejV        ejQ        ff          dD                                     ZXej/        0                    dEdA          ej/        0                    dBejP        ejP        fejQ        ejQ        fejU        ejQ        fejV        ejQ        ff          dF                         ZYej/        0                    dEdA          dG             ZZej/        0                    dEdA          ej/        0                    dBejP        ejP        fejQ        ejQ        fejU        ejQ        fejV        ejQ        ff          dH                         Z[ej/        0                    dEdA          dI             Z\ej/        0                    dJ ee)j]                   e             edKdLM          gdN O          dP             Z^dQ Z_dS )R    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	            n/var/www/html/test/jupyter/venv/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@   3   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_functionE   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_matrixO   s    +aa>>HlJ/00"7++ 	> 	>IAv"?:vu==AaDD	RWRVAqDq)))**111bj=99r6   r   i   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>_   sV       
 
  MJ\Q=N  
 
 
 
 
 
r6   )r   2   d   i    r   r      g      @g      )transform_algorithmtransform_max_itererrori  )r%   r_tuplerG   logical_notreshapepytestwarnsr   r   fit_transformwarningscatch_warningssimplefilter)
re   subsamplingD_multir;   first_quartermodelr/   rK   rO   rZ   s
         @@@@r4   test_max_iterrv   D   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)rl   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re   )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)re   r9   r|   r   fit_algorithm)r   r:   r;   r=   r<   allanyre   r|   r   r/   r?   r3   s         r4   test_dict_learning_positivityr      s     L/##   
c!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   )re   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   )re   r9   r|   r   9Positive constraint not supported for '{}' coding method.ry   )r   r:   r;   formatrl   r}   r~   r=   )r/   r?   r   s      r4   'test_dict_learning_lars_code_positivityr      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   )re   transform_alphar9   r   re   r"   decimal	r   r:   r;   r=   r   r%   dotr<   
set_paramsr/   r?   r3   s      r4   !test_dict_learning_reconstructionr      s    L%UV  D 88A;;  ##D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   rc   re   r   r9   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   rc   r   )categoryr"   r   )r   r;   r   r   r   r:   r=   r   r%   r   r<   )r/   X_read_onlyr?   r3   s       r4   (test_dict_learning_lassocd_readonly_datar      s]   L	A 
+! *!
 
 
 &89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 )	Nrc   r   rF   r   )re   transform_n_nonzero_coefsr9   r   r   r   )	r   r:   r;   r=   r%   rV   lenflatnonzeror   r   s      r4    test_dict_learning_nonzero_coefsr      s    L""#	  D 88A;;  2:q=!1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   )re   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   rc   r   r   T)r/   
batch_sizemax_itermethodr9   return_codeF)	r%   r&   r'   r	   r;   r,   r0   r+   r   )r-   r/   r3   r2   s       r4    test_dict_learning_online_shapesr     s    
)


"
"CL+	!  D* :)\2222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 )Nrx   ry   rc   r   T)r   r   r|   )rl   r}   r~   r	   r;   )r   s    r4   1test_dict_learning_online_lars_positive_parameterr   4  s    KG	z	1	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   rc   r   r   r   )r   r   re   r9   r|   r   r   )r   r:   r;   r=   r<   r   r   r   s         r4   -test_minibatch_dictionary_learning_positivityr   :  s     L&/##	 	 	 
c!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   rc   r   r   r   r   )r   r   re   r9   r   r   )r   r:   r;   r<   r   r   r   s      r4   'test_minibatch_dictionary_learning_larsr   ^  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   rc   r   r   )r/   r   r   r{   r9   r   r|   )r%   r&   r'   r	   r;   r   r   )r|   r   r-   r/   r3   r2   s         r4   $test_dict_learning_online_positivityr   r  s     )


"
"CL+	!##	 	 	D*  &a$$&&&&&&Q##%%%%%  	       q~~r6   c                  &   d} dd l }ddlm} |j        }	  |            |_        t	          | ddddd          }|                    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   )StringIOrc   r   皙?)r   r   verbosetolr9   r"   )r   r   r   max_no_improvementr9   )r   r   r   r9   )r/   r   r{   r   r9   )sysior   stdoutr   r:   r;   r	   r<   r,   r+   )r/   r   r   
old_stdoutr?   s        r4   #test_dict_learning_online_verbosityr     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    rc   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   rc   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   rc   )r   r   	dict_initr9   )
r%   r&   r'   r*   r+   r   r:   r;   r   r<   )r/   r-   Vr?   s       r4   (test_dict_learning_online_initializationr     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)writerc   r   )r   r   r   r9   shuffle)	r%   r&   r'   r*   r+   setflagsr   r:   r;   )r/   r-   r   s      r4   1test_dict_learning_online_readonly_initializationr     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   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   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   ry   Tr   )r%   r&   r'   r*   r+   rU   rV   r   rl   r}   r~   r
   r;   )r   r/   r-   r   r   s        r4   )test_sparse_encode_unavailable_positivityr   !  s   L
)


"
"C		,
++A11			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   r"   r   rQ   F)orderr   r   )r%   r&   r'   r*   r+   rU   rV   r   r;   r
   r   )r/   r-   r   Xfr   abs          r4   test_sparse_encode_inputr   -  s    L
)


"
"C		,
++A11			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   9  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   @   r"   r   )r#   n_nonzero_coefs)ra   r"   )r%   r&   r'   r*   r   r
   r,   )r-   r;   rX   r3   s       r4   )test_sparse_encode_error_default_sparsityr   C  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 d S )
NrB   r   r"   r   rQ   r   r   r2   re   r   r   )r%   r&   r'   r*   r+   rU   rV   r   r=   r;   r   rH   r   )r/   r-   r   coders       r4   test_sparse_coder_estimatorr   K  s    L
)


"
"C		,
++A11			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   r"   r   rQ   r   r   r   )r%   r&   r'   r*   r+   rU   rV   r   r   idtestingr   r2   n_components_n_features_in_randr0   astypefloat32r=   )r/   r-   r   r   cloneddatas         r4   !test_sparse_coder_estimator_cloner  W  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    >Arc   r   r"   )re   r$   )	r%   r&   r'   r   intr   r   r   rn   )r-   r/   r+   	init_dictr0   r  scs          r4   test_sparse_coder_parallel_mmapr
  i  s     )


$
$C%L*z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        | j        d         k    sJ d S )N)r   r"   rF   r   )r%   arrayr   r   r,   )dr	  s     r4   test_sparse_coder_n_features_inr    sI    
)))YYY'((A	QB
******r6   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_consistencyr)    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  re   r/   r-   r2   r   r3   s          r4   test_sparse_coder_dtype_matchr+    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   re   r9   )r   r:   r;   r   r<   r   r=   r  expected_typer   re   dict_learners        r4   $test_dictionary_learning_dtype_matchr0    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   ra   r   r   )r/   r   r   re   r   r   r9   )	r   r:   r;   r   r<   r   r=   _A_Br-  s        r4   .test_minibatch_dictionary_learning_dtype_matchr4    s    ( /#/  L QXXi(()))#)]::::!!!((9"5"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  r.  r   r-   r/   r3   r2   _s           r4   test_dict_learning_dtype_matchr8  !  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ư>rc   r"   r   r6  r$  r   皙?)r   r;   r   r%   r&  r   r   matmulrU   absmeancount_nonzero)	r   r%  r/   r{   U_64V_64r7  U_32V_32s	            r4   (test_dict_learning_numerical_consistencyrC  :  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  r.  r   r-   r/   r3   r2   s          r4   %test_dict_learning_online_dtype_matchrE  ^  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#  rc   r   rb   r   r   r   )r/   r   r{   r   r9   r   r   r   r$  r"   r:  )r	   r;   r   r%   r&  r   r   r;  rU   r<  r=  r>  )r   r%  r/   r{   r?  r@  rA  rB  s           r4   /test_dict_learning_online_numerical_consistencyrG  x  s    DLE%	!
 
 
JD$ &	!
 
 
JD$$ 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   	estimatorrc   r   )r   r   c                     | j         j        S )N)r  r  )rN   s    r4   <lambda>rJ    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   )rH  r/   feature_names_outrN  s      @r4   test_get_feature_names_outrS    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    r"   r   r`   T)r/   r9   r$   r   r   r   )setattrsklearndecomposition_dict_learningr   r   r%   r&   r'   r*   r   r:   )monkeypatchr-   X_trainr/  s       r4   %test_cd_work_on_joblib_memmapped_datar\    s    ,S)))   )


"
"CiiBG%  L Wr6   )`r(   ro   	functoolsr   numpyr%   rl   rW  sklearn.baser   sklearn.decompositionr   r   r   r   r	   r
   $sklearn.decomposition._dict_learningr   sklearn.exceptionsr   sklearn.utilsr   sklearn.utils._testingr   r   r   r   r   sklearn.utils.estimator_checksr   r   r   sklearn.utils.parallelr   r&   r'   
rng_globalr0   r+   r*   r;   r5   r@   rC   rv   r   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r  r   r&  r!  r)  r+  int32int64r0  r4  r8  rC  rE  rG  r  rS  r\  r\   r6   r4   <module>rl     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,    
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;	( 	( 	(= = =" " "	> 	> 	>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 AC##q2>>>
 	'&   
 
 
    r6   