
    -i$                        S SK rS SKrS SKJr  S SKJrJrJrJ	r	J
r
  S SKJr  S SKJrJrJrJr  Su  rrrr\" \\\\S S9u  rrr\R2                  \R2                  \R2                  srrr\S-  r\S-  r\R4                  " \R2                  \5      \R4                  " \R2                  \5      srrS	 rS
 rS rS r S r!S r"S r#\RH                  RK                  S\\4\\4/5      \RH                  RK                  SS\S-   0/5      S 5       5       r&S r'S r(S r)S r*S r+S r,S r-S r.S r/S r0S r1\RH                  RK                  S \Rd                  \Rf                  45      S! 5       r4S" r5g)#    N)make_sparse_coded_signal)LinearRegressionOrthogonalMatchingPursuitOrthogonalMatchingPursuitCVorthogonal_mporthogonal_mp_gram)check_random_state)assert_allcloseassert_array_almost_equalassert_array_equalignore_warnings)   #         )	n_samplesn_components
n_featuresn_nonzero_coefsrandom_state
   c                      [        [        [        S S 2S4   SS9R                  [        4:X  d   e[        [        [        SS9R                  [        S4:X  d   eg Nr   r   r   r   )r   Xyshaper        V/var/www/html/venv/lib/python3.13/site-packages/sklearn/linear_model/tests/test_omp.pytest_correct_shapesr!   )   sJ    AadGQ7==*NNNAq177J?JJJr   c                      [        [        [        S S 2S4   SS9R                  [        4:X  d   e[        [        [        SS9R                  [        S4:X  d   eg r   )r   GXyr   r   r   r   r    test_correct_shapes_gramr%   .   sJ    aAqD1=CC
}TTTaQ7==*aPPPr   c            	          [         R                  " [        [        [        S S 2S4   SS95      S::  d   e[         R                  " [        [        [        S S 2S4   SSS95      S::  d   eg )Nr   r   r   Tr   
precompute)npcount_nonzeror   r   r   r   r   r    test_n_nonzero_coefsr+   3   s`    M!Qq!tWaHIQNNN
q!AqD'1QUVW		r   c                     Sn [        [        [        S S 2S4   U S9n[        [        [        S S 2S4   U SS9n[        R                  " [        S S 2S4   [        R
                  " [        U5      -
  S-  5      U ::  d   e[        R                  " [        S S 2S4   [        R
                  " [        U5      -
  S-  5      U ::  d   eg )N      ?r   tolTr/   r(      )r   r   r   r)   sumdot)r/   gamma
gamma_grams      r    test_tolr6   ;   s    
C!Qq!tW#.Eq!AqD'stDJ661QT7RVVAu--!34;;;661QT7RVVAz22q89S@@@r   c            
      b    [        [        [        [        SS9[        [        [        SSS95        g )Nr   r   Tr'   r   r   r   r   r   r   r    test_with_without_gramr9   C   s$    aA.aA$?r   c            
      b    [        [        [        [        SS9[        [        [        SSS95        g )N      ?r.   Tr0   r8   r   r   r    test_with_without_gram_tolr<   J   s#    a$mAqcd&Sr   c                  :   [        [        [        [        SS9[        [        [        [        S95        Sn [
        R                  " [        U S9   [        [        [        [        SSS9[        [        [        S[        S95        S S S 5        g ! , (       d  f       g = f)	Nr   r.   r   Orthogonal matching pursuit ended prematurely due to linear dependence in the dictionary. The requested precision might not have been met.matchTr0   )r(   r   )r   r   r   r   r   pytestwarnsRuntimeWarning)warning_messages    r    test_unreachable_accuracyrE   P   sk    a"M!Q
$S	; 
 
nO	<!!QA$7!Q4L	
 
=	<	<s   5B
Bpositional_paramskeyword_paramsr      c                     [         R                  " [        5         [        U 0 UD6  S S S 5        g ! , (       d  f       g = f)N)rA   raises
ValueErrorr   )rF   rG   s     r    test_bad_inputrL   `   s*     
z	"(;N; 
#	"	"s   0
>c                  ~   [         S S 2S4   R                  5       u  n [        [        [        S S 2S4   SS9n[        [        [        S S 2S4   SS9n[        U [        R                  " U5      5        [        U [        R                  " U5      5        [        [         S S 2S4   USS9  [        [         S S 2S4   USS9  g )Nr   r   r   r1   decimal)r4   nonzeror   r   r   r   r#   r$   r   r)   flatnonzeror   )idx	gamma_recr5   s      r    test_perfect_signal_recoveryrT   j   s    1a4[  "FSa1a4!<I#Ar!Q$xCJsBNN956sBNN:67eAqDk9a@eAqDk:qAr   c                  \   [         S S 2S4   R                  5       u  n [        R                  5       nUR	                  SS9  [
        R                  5       nUR	                  SS9  [        XS S 2S4   SSSS9n[        U [        R                  " U5      5        [        [         S S 2S4   USS9  g )Nr   F)writer   )r   	copy_Gramcopy_Xyr1   rN   )r4   rP   r#   copysetflagsr$   r   r   r)   rQ   r   )rR   
G_readonlyXy_readonlyr5   s       r     test_orthogonal_mp_gram_readonlyr]   t   s     1a4[  "FSJe$'')Ku%#1%qESXJ sBNN:67eAqDk:qAr   c                  6   [        [        S9n U R                  [        [        S S 2S4   5        U R
                  R                  [        4:X  d   eU R                  R                  S:X  d   e[        R                  " U R
                  5      [        ::  d   eU R                  [        [        5        U R
                  R                  [        [        4:X  d   eU R                  R                  [        4:X  d   e[        R                  " U R
                  5      [        [        -  ::  d   eU R
                  S   R                  5       nU R                  SS9  U R                  [        [        S S 2S4   5        [        XR
                  5        U R                  SS9  U R                  [        [        S S 2S4   5        [        R                  " U R
                  5      [        ::  d   eU R
                  R                  [        4:X  d   eU R                  S:X  d   eU R                  [        [        5        U R
                  R                  [        [        4:X  d   eU R                  S:X  d   e[        R                  " U R
                  5      [        [        -  ::  d   eg )Nr   r   r   T)fit_interceptF)r   r   fitr   r   coef_r   r   
intercept_r)   r*   	n_targetsrY   
set_paramsr   )ompcoef_normalizeds     r    test_estimatorrg      s   
#O
DCGGAqAw99??zm+++>>2%%%CII&/999GGAqM99??y*5555>>I<///CII&)o*EEEEiil'')ONNN&GGAqAwoyy9NNN'GGAqAwCII&/99999??zm+++>>QGGAqM99??y*5555>>QCII&)o*EEEEr   c                     [        [        S9n U R                  [        [        SS2S4   5        U R
                  [        :X  d   e[        [        SS9n U R                  [        [        SS2S4   5        U R
                  b   eg)z=Check `n_nonzero_coefs_` correct when `tol` is and isn't set.r   Nr   r-   )r   r/   )r   r   r`   r   r   n_nonzero_coefs_)re   s    r    test_estimator_n_nonzero_coefsrj      sj    
#O
DCGGAqAw?222
#O
MCGGAqAw'''r   c                  >   [         R                  5       n U S S 2S4   U S S 2S4'   [        R                  " [        5      nS=US'   US'   [        R
                  " X5      nSn[        R                  " [        US9   [        XSS9  S S S 5        g ! , (       d  f       g = f)Nr   rH   r;   r>   r?   r1   r   )
r   rY   r)   zerosr   r3   rA   rB   rC   r   )newXr4   newyrD   s       r    test_identical_regressorsro      s    668DadDAJHHZ EE!HuQx66$D	; 
 
nO	<d!4 
=	<	<s   :B
Bc                     [         R                  " [        5      n SU S'   SU S'   [         R                  " [        U 5      n[         R                  " [        R
                  U5      n[        [        USS9n[        [        USS9n[        [         R                  " U5      SS/5        [        [         R                  " U5      SS/5        g )Nr;      r-   r   r1   r   )r)   rl   r   r3   r   Tr   r   r#   r   rQ   )r4   new_ynew_Xy	gamma_hatgamma_hat_grams        r    test_swapped_regressorsrw      s    HHZ E E"IE!HFF1eEVVACCFa:I'61ENr~~i01b':r~~n52w?r   c                  f   [         R                  " [        5      n [         R                  " [        R
                  U 5      n[        [        5      " [        U SS9n[        [        5      " [        USS9n[         R                  " US:H  5      (       d   e[         R                  " US:H  5      (       d   eg )NrH   r   r   )
r)   
zeros_liker   r3   r   rr   r   r   r#   all)y_emptyXy_emptygamma_emptygamma_empty_grams       r    test_no_atomsr      s    mmAGvvacc7#H!-0GQOK&}5aSTU66+"####66"a'((((r   c                  p   [        [        [        SSS9n [        [        [        SSS9nU R                  [        [
        S4:X  d   e[        U S S 2S S 2S4   U5        [        [        [        SSS9n [        [        [        SSS9nU R                  [        [
        S4:X  d   e[        U S S 2S S 2S4   U5        g )Nr   T)r   return_pathF)
r   r   r   r   r   rc   r   r   r#   r$   pathlasts     r    test_omp_pathr      s    AqdCDAqeDD::*i3333d1a8nd3aQDIDaQEJD::*i3333d1a8nd3r   c                      [        [        [        SSSS9n [        [        [        SSSS9nU R                  [        [
        S4:X  d   e[        U S S 2S S 2S4   U5        g )Nr   T)r   r   r(   Fr   )r   r   r   r   r   rc   r   r   s     r    #test_omp_return_path_prop_with_gramr      sT    AqdtTDAqePTUD::*i3333d1a8nd3r   c                  d   [         S S 2S4   n [        S S 2S4   n[        SSS9nUR                  [        U 5        UR
                  [        :X  d   e[        UR                  U5        [        SUR
                  S9nUR                  [        U 5        [        UR                  UR                  5        g )Nr   Fr   )r_   max_iter)r_   r   )
r   r4   r   r`   r   ri   r   r   ra   r   )y_gamma_ompcvre   s       r    test_omp_cvr      s    	
1a4B1a4[F'ebIE	IIa!!_444ekk62
#U-C-CC GGArNekk3995r   c                     [        S5      n Su  pSnU R                  X5      nU R                  X5      n[        US9n[        5       nUR	                  XE5        UR	                  XE5        [        UR                  UR                  5        g )Nr   )r      r   r   )r	   randnr   r   r`   r   ra   )rngr   r   rc   r   Yre   lstsqs           r    test_omp_reaches_least_squaresr      so    
Q
C#II		)(A		)'A
#J
?CEGGAM	IIaOcii5r   	data_typec                     [        [        R                  U 5      [        R                  U 5      SS9nUR                  U :X  d   eg Nr   r   )r   r#   astyper$   dtype)r   coefs     r    test_omp_gram_dtype_matchr      s;     	RYYy11D ::"""r   c                  N   [        [        R                  [        R                  5      [
        R                  [        R                  5      SS9n [        [        R                  [        R                  5      [
        R                  [        R                  5      SS9n[        X5        g r   )r   r#   r   r)   float32r$   float64r
   )coef_32coef_64s     r    #test_omp_gram_numerical_consistencyr   	  sd     	bii

3QG !	bii

3QG G%r   )6numpyr)   rA   sklearn.datasetsr   sklearn.linear_modelr   r   r   r   r   sklearn.utilsr	   sklearn.utils._testingr
   r   r   r   r   r   r   rc   r   r   r4   rr   r3   r#   r$   r!   r%   r+   r6   r9   r<   rE   markparametrizerL   rT   r]   rg   rj   ro   rw   r   r   r   r   r   r   r   r   r   r   r   r    <module>r      s  
   5  -  5A 1	:	&#1e cc1331e R R
qssAqssA2
K
Q
A
  ,1v2w.?@a()<	 A
<
BBF:(5@)4466 rzz2::&>?# @#&r   