
    0Ph$                        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j        ej        ej        cZZZedz  Zedz  Z ej        ej        e           ej        ej        e          cZ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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j$        %                    d ej2        ej3        f          d!             Z4d" Z5dS )#    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 d S Nr   r   r   r   )r   Xyshaper        c/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/linear_model/tests/test_omp.pytest_correct_shapesr!   )   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_gramr%   .   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   r   r   r   r   r    test_n_nonzero_coefsr+   3   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r/   r(      )r   r   r   r)   sumdot)r/   gamma
gamma_grams      r    test_tolr6   ;   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   Tr'   r   r   r   r   r   r   r    test_with_without_gramr9   C   sD    aA...aA$???    r   c            	          t          t          t          t          d          t          t          t          dd                     d S )N      ?r.   Tr0   r8   r   r   r    test_with_without_gram_tolr<   J   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   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   s    a"""M!Q
$S$S$S  	; 
 
nO	<	<	< 
 
!!QA$777!Q4LLL	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   'AC  CCpositional_paramskeyword_paramsr      c                     t          j        t                    5  t          | i | d d d            d S # 1 swxY w Y   d S )N)rA   raises
ValueErrorr   )rF   rG   s     r    test_bad_inputrL   `   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   r1   decimal)r4   nonzeror   r   r   r   r#   r$   r   r)   flatnonzeror   )idx	gamma_recr5   s      r    test_perfect_signal_recoveryrT   j   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_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     111a4[  ""FSJe$$$''))Ku%%%#K1%qESX  J sBN:66777eAAAqDk:qAAAAAAr   c                     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   fitr   r   coef_r   r   
intercept_r)   r*   	n_targetsrY   
set_paramsr   )ompcoef_normalizeds     r    test_estimatorrg      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          t                    } |                     t          t          dddf                    | j        t          k    sJ t          t          d          } |                     t          t          dddf                    | j        J dS )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      s    
#O
D
D
DCGGAqAw?2222
#O
M
M
MCGGAqAw'''''r   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   rH   r;   r>   r?   r1   r   )
r   rY   r)   zerosr   r3   rA   rB   rC   r   )newXr4   newyrD   s       r    test_identical_regressorsro      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 )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    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 )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    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_pathF)
r   r   r   r   r   rc   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   r(   Fr   )r   r   r   r   r   rc   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          }|                    t          |            |j        t          k    sJ t          |j        |           t          d|j                  }|                    t          |            t          |j        |j                   d S )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    	
111a4B111a4[F'ebIIIE	IIa!_4444ek6222
#U-C  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	   randnr   r   r`   r   ra   )rngr   r   rc   r   Yre   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   r)   float32r$   float64r
   )coef_32coef_64s     r    #test_omp_gram_numerical_consistencyr   	  s     	bii
33Q  G !	bii
3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      s3  
      5 5 5 5 5 5              - , , , , ,            5A 1	:	&&#  1e c131e R RqsAqsA2
K K K
Q Q Q
  A A A    
 
 
  ,1v2w.?@@a() < <	  A@
<
B B BB B BF F F:( ( (5 5 5@ @ @) ) )4 4 44 4 46 6 66 6 6 rz2:&>??# # @?#& & & & &r   