
    {Kg`$                        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
 d dlmZ d dlmZmZmZmZ d\  ZZZZ eeeeed       \  ZZZej2                  ej2                  ej2                  cZZZedz  Zedz  Z ej4                  ej2                  e       ej4                  ej2                  e      cZZd	 Zd
 Zd Zd Z d Z!d Z"d Z#ejH                  jK                  deefeefg      ejH                  jK                  ddedz   ig      d               Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.d Z/d Z0d Z1ejH                  jK                  d ejd                  ejf                  f      d!        Z4d" Z5y)#    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                      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 y Nr   r   r   r   )r   Xyshaper        g/home/alanp/www/video.onchill/myenv/lib/python3.12/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                      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 y 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                      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 y )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                     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 y )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            	      n    t        t        t        t        d      t        t        t        dd             y )Nr   r   Tr'   r   r   r   r   r   r   r    test_with_without_gramr9   C   s$    aA.aA$?r   c            	      n    t        t        t        t        d      t        t        t        dd             y )N      ?r.   Tr0   r8   r   r   r    test_with_without_gram_tolr<   J   s#    a$mAqcd&Sr   c            
      L   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        y # 1 sw Y   y xY w)	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   ;BB#positional_paramskeyword_paramsr      c                 v    t        j                  t              5  t        | i | d d d        y # 1 sw Y   y xY w)N)rA   raises
ValueErrorr   )rF   rG   s     r    test_bad_inputrL   `   s*     
z	"(;N; 
#	"	"s   /8c                     t         d d df   j                         \  } 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       y )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                  t   t         d d df   j                         \  } t        j                         }|j	                  d       t
        j                         }|j	                  d       t        ||d d df   ddd      }t        | t        j                  |             t        t         d d df   |d       y )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%#K1%qESXJ sBNN:67eAqDk:qAr   c                  *   t        t              } | j                  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 | 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   j                         }| j                  d       | j                  t        t        d d df          t        || j
                         | j                  d       | j                  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 | 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 y )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osyy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                     t        t              } | j                  t        t        dddf          | j
                  t        k(  sJ t        t        d      } | j                  t        t        dddf          | j
                  J y)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                  >   t         j                         } | 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        y # 1 sw Y   y xY w)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	<dD!4 
=	<	<s   ;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       y )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                  V   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 y )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/-0GQOK5}5aSTU66+"###66"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   |       y )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                      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   |       y )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                  n   t         d d df   } t        d d df   }t        dd      }|j                  t        |        |j
                  t        k(  sJ t        |j                  |       t        d|j
                        }|j                  t        |        t        |j                  |j                         y )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                  $   t        d      } d\  }}d}| j                  ||      }| j                  ||      }t        |      }t               }|j	                  ||       |j	                  ||       t        |j                  |j                         y )Nr   )r      r   r   )r	   randnr   r   r`   r   ra   )rngr   r   rc   r   Yre   lstsqs           r    test_omp_reaches_least_squaresr      sy    
Q
C#IzI		)Z(A		)Y'A
#J
?CEGGAqM	IIaOcii5r   	data_typec                     t        t        j                  |       t        j                  |       d      }|j                  | k(  sJ y Nr   r   )r   r#   astyper$   dtype)r   coefs     r    test_omp_gram_dtype_matchr      s;     	RYYy11D ::"""r   c                  \   t        t        j                  t        j                        t
        j                  t        j                        d      } t        t        j                  t        j                        t
        j                  t        j                        d      }t        | |       y r   )r   r#   r   r)   float32r$   float64r
   )coef_32coef_64s     r    #test_omp_gram_numerical_consistencyr   	  sf     	bii

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

3QG GW%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   