
    _nd'              	          d dl 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
mZmZmZmZ d dlmZ d dlmZ d	\  ZZZZ eeeeed d
          \  ZZZedz  Zedz  Z ej        ej        e           ej        ej        e          cZZej                            deeg          ej                            dg d          d                         Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'ej                            deefeefg          ej                            dddiddidedz   ig          d                         Z(d Z)d  Z*ej        +                    d!          d"             Z,d# Z-d$ Z.d% Z/d& Z0d' Z1ej        +                    d!          d(             Z2ej        +                    d!          d)             Z3ej                            d*ej4        ej5        f          d+             Z6d, Z7dS )-    N)assert_allclose)assert_array_equal)assert_array_almost_equal)ignore_warnings)orthogonal_mporthogonal_mp_gramOrthogonalMatchingPursuitOrthogonalMatchingPursuitCVLinearRegression)check_random_state)make_sparse_coded_signal)   #         T)	n_samplesn_components
n_featuresn_nonzero_coefsrandom_statedata_transposed
   OmpModelznormalize, n_warnings))T   )Fr   )
deprecatedr   c                    t          d          }d}d}|                    ||          }d||dk     <   |                    |          } | |          }t          j        d          5 }	t          j        d	t                     |                    ||           d d d            n# 1 swxY w Y   t          d
 |	D                       |k    sJ d S )Nr         g        g?)	normalizeT)recordalwaysc                     g | ]	}|j         
S  )message).0ws     Clib/python3.11/site-packages/sklearn/linear_model/tests/test_omp.py
<listcomp>z6test_assure_warning_when_normalize.<locals>.<listcomp>>   s    '''a	'''    )	r   randnrandwarningscatch_warningssimplefilterFutureWarningfitlen)
r   r   
n_warningsrngr   r   Xymodelrecs
             r'   "test_assure_warning_when_normalizer8   *   s    Q

CIJ		)Z((AAa#gJAHy)))E		 	-	-	- h666		!Q               ''3'''((J666666s   )1B&&B*-B*c                      t          t          t          d d df         d          j        t          fk    sJ t          t          t          d          j        t          dfk    sJ d S Nr   r   r   r   )r   r4   r5   shaper   r#   r)   r'   test_correct_shapesr=   A   s`    AaaadGQ777=*NNNNAq1117J?JJJJJJr)   c                      t          t          t          d d df         d          j        t          fk    sJ t          t          t          d          j        t          dfk    sJ d S r:   )r   GXyr<   r   r#   r)   r'   test_correct_shapes_gramrA   F   s`    aAAAqD1===C
}TTTTaQ777=*aPPPPPPr)   c                      t          j        t          t          t          d d df         d                    dk    sJ t          j        t          t          t          d d df         dd                    dk    sJ d S )Nr   r   r;   Tr   
precompute)npcount_nonzeror   r4   r5   r#   r)   r'   test_n_nonzero_coefsrG   K   s    M!Qqqq!tWaHHHIIQNNNN
q!AAAqD'1QUVVVWW	 	 	 	 	 	r)   c                     d} t          t          t          d d df         |           }t          t          t          d d df         | d          }t          j        t          d d df         t          j        t          |          z
  dz            | k    sJ t          j        t          d d df         t          j        t          |          z
  dz            | k    sJ d S )N      ?r   tolTrK   rD   r   )r   r4   r5   rE   sumdot)rK   gamma
gamma_grams      r'   test_tolrQ   S   s    
C!Qqqq!tW#...Eq!AAAqD'stDDDJ61QQQT7RVAu---!344;;;;61QQQT7RVAz222q899S@@@@@@r)   c            	          t          t          t          t          d          t          t          t          dd                     d S )Nr   r;   TrC   r   r   r4   r5   r#   r)   r'   test_with_without_gramrT   [   sD    aA...aA$???    r)   c            	          t          t          t          t          d          t          t          t          dd                     d S )N      ?rJ   TrL   rS   r#   r)   r'   test_with_without_gram_tolrW   b   sC    a$$$mAqcd&S&S&S    r)   c            
         t          t          t          t          d          t          t          t          t                               d} t          j        t          |           5  t          t          t          t          dd          t          t          t          dt                               d d d            d S # 1 swxY w Y   d S )	Nr   rJ   r;   Orthogonal matching pursuit ended prematurely due to linear dependence in the dictionary. The requested precision might not have been met.matchTrL   )rD   r   )r   r   r4   r5   r   pytestwarnsRuntimeWarning)warning_messages    r'   test_unreachable_accuracyr`   h   s    a"""M!Q
$S$S$S  	; 
 
nO	<	<	< 
 
!!QA$777!Q4LLL	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   'AC  CCpositional_paramskeyword_paramsrK   r   r   c                     t          j        t                    5  t          | i | d d d            d S # 1 swxY w Y   d S )N)r\   raises
ValueErrorr   )ra   rb   s     r'   test_bad_inputrg   x   s     
z	"	" < <(;N;;;< < < < < < < < < < < < < < < < < <s   488c                     t           d d df                                         \  } t          t          t          d d df         d          }t          t          t          d d df         d          }t          | t          j
        |                     t          | t          j
        |                     t          t           d d df         |d           t          t           d d df         |d           d S )Nr   r   r;   r   decimal)rO   nonzeror   r4   r5   r   r?   r@   r   rE   flatnonzeror   )idx	gamma_recrP   s      r'   test_perfect_signal_recoveryro      s    111a4[  ""FSa111a4!<<<I#Ar!!!Q$xCCCJsBN955666sBN:66777eAAAqDk9a@@@@eAAAqDk:qAAAAAAr)   c                     t           d d df                                         \  } t                                          }|                    d           t
                                          }|                    d           t          ||d d df         ddd          }t          | t          j	        |                     t          t           d d df         |d           d S )Nr   F)writer   )r   	copy_Gramcopy_Xyr   ri   )rO   rk   r?   copysetflagsr@   r   r   rE   rl   r   )rm   
G_readonlyXy_readonlyrP   s       r'    test_orthogonal_mp_gram_readonlyrx      s     111a4[  ""FSJe$$$''))Ku%%%#K1%qESX  J sBN:66777eAAAqDk:qAAAAAAr)   z!ignore:'normalize' was deprecatedc                     t          t                    } |                     t          t          d d df                    | j        j        t          fk    sJ | j        j        dk    sJ t          j
        | j                  t          k    sJ |                     t          t                     | j        j        t          t          fk    sJ | j        j        t          fk    sJ t          j
        | j                  t          t          z  k    sJ | j        d                                         }|                     d           |                     t          t          d d df                    t          || j                   |                     d           |                     t          t          d d df                    t          j
        | j                  t          k    sJ | j        j        t          fk    sJ | j        dk    sJ |                     t          t                     | j        j        t          t          fk    sJ | j        dk    sJ t          j
        | j                  t          t          z  k    sJ d S )Nr;   r   r#   T)fit_interceptF)r	   r   r0   r4   r5   coef_r<   r   
intercept_rE   rF   	n_targetsrt   
set_paramsr   )ompcoef_normalizeds     r'   test_estimatorr      s#   
#O
D
D
DCGGAqAw9?zm++++>2%%%%CI&&/9999GGAqMMM9?y*55555>I<////CI&&)o*EEEEEil''))ONNN&&&GGAqAwosy999NNN'''GGAqAwCI&&/99999?zm++++>QGGAqMMM9?y*55555>QCI&&)o*EEEEEEEr)   c                  ^   t                                           } | d d df         | d d df<   t          j        t                    }dx|d<   |d<   t          j        | |          }d}t          j        t          |          5  t          | |d           d d d            d S # 1 swxY w Y   d S )Nr   r   rV   rY   rZ   r   r;   )
r4   rt   rE   zerosr   rN   r\   r]   r^   r   )newXrO   newyr_   s       r'   test_identical_regressorsr      s    6688DaaadDAJHZ  EE!HuQx6$D	; 
 
nO	<	<	< 5 5dD!44445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5s   B""B&)B&c                     t          j        t                    } d| d<   d| d<   t          j        t          |           }t          j        t          j        |          }t          t          |d          }t          t          |d          }t          t          j
        |          ddg           t          t          j
        |          ddg           d S )NrV      rI   r   r   r;   )rE   r   r   rN   r4   Tr   r   r?   r   rl   )rO   new_ynew_Xy	gamma_hatgamma_hat_grams        r'   test_swapped_regressorsr      s    HZ  E E"IE!HF1eEVACFa:::I'61EEENr~i001b':::r~n552w?????r)   c                  r   t          j        t                    } t          j        t          j        |           } t          t                    t          | d          } t          t                    t          |d          }t          j	        |dk              sJ t          j	        |dk              sJ d S )Nr   r;   r   )
rE   
zeros_liker5   rN   r4   r   r   r   r?   all)y_emptyXy_emptygamma_emptygamma_empty_grams       r'   test_no_atomsr      s    mAGvac7##H0/-00GQOOOK5}55aSTUUU6+"#####6"a'(((((((r)   c                     t          t          t          dd          } t          t          t          dd          }| j        t          t
          dfk    sJ t          | d d d d df         |           t          t          t          dd          } t          t          t          dd          }| j        t          t
          dfk    sJ t          | d d d d df         |           d S )Nr   T)r   return_pathFrc   )
r   r4   r5   r<   r   r}   r   r   r?   r@   pathlasts     r'   test_omp_pathr      s    AqdCCCDAqeDDDD:*i33333d111aaa8nd333aQDIIIDaQEJJJD:*i33333d111aaa8nd33333r)   c                      t          t          t          ddd          } t          t          t          ddd          }| j        t          t
          dfk    sJ t          | d d d d df         |           d S )Nr   T)r   r   rD   Frc   )r   r4   r5   r<   r   r}   r   r   s     r'   #test_omp_return_path_prop_with_gramr      su    AqdtTTTDAqePTUUUD:*i33333d111aaa8nd33333r)   c                     t           d d df         } t          d d df         }t          ddd          }|                    t          |            |j        t          k    sJ t          |j        |           t          dd|j                  }|                    t          |            t          |j        |j                   d S )Nr   TFr   )r   rz   max_iter)r   rz   r   )
r5   rO   r
   r0   r4   n_nonzero_coefs_r   r   r{   r	   )y_gamma_ompcvr   s       r'   test_omp_cvr      s    	
111a4B111a4[F'eb  E 
IIa!_4444ek6222
#eU=S  C GGArNNNek3955555r)   c                  R   t          d          } d\  }}d}|                     ||          }|                     ||          }t          |          }t                      }|                    ||           |                    ||           t          |j        |j                   d S )Nr   )r      r   r;   )r   r*   r	   r   r0   r   r{   )r3   r   r   r}   r4   Yr   lstsqs           r'   test_omp_reaches_least_squaresr     s     Q

C#IzI		)Z((A		)Y''A
#J
?
?
?CEGGAqMMM	IIaOOOci55555r)   	data_typec                     t          t                              |           t                              |           d          }|j        | k    sJ d S Nr   r;   )r   r?   astyper@   dtype)r   coefs     r'   test_omp_gram_dtype_matchr     sR     	RYYy111  D :""""""r)   c                  ~   t          t                              t          j                  t
                              t          j                  d          } t          t                              t          j                  t
                              t          j                  d          }t          | |           d S r   )r   r?   r   rE   float32r@   float64r   )coef_32coef_64s     r'   #test_omp_gram_numerical_consistencyr     s     	bii
33Q  G !	bii
33Q  G GW%%%%%r)   )8numpyrE   r\   r,   sklearn.utils._testingr   r   r   r   sklearn.linear_modelr   r   r	   r
   r   sklearn.utilsr   sklearn.datasetsr   r   r   r   r}   r5   r4   rO   rN   r   r?   r@   markparametrizer8   r=   rA   rG   rQ   rT   rW   r`   rg   ro   rx   filterwarningsr   r   r   r   r   r   r   r   r   r   r   r   r#   r)   r'   <module>r      s         2 2 2 2 2 2 5 5 5 5 5 5 < < < < < < 2 2 2 2 2 2              - , , , , , 5 5 5 5 5 54@ 1	:	&&#  1e R RqsAqsA2 *,GH  GGG 7 7  7"K K K
Q Q Q
  A A A    
 
 
  ,1v2w.?@@R[$b),=zA~+NO < <	  A@
<
B B BB B B  ?@@F F A@F:5 5 5@ @ @) ) )4 4 44 4 4 ?@@6 6 A@6" ?@@6 6 A@6 rz2:&>??# # @?#& & & & &r)   