
    _nd5                        d dl Z d dlm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
 d dlmZ d d	lmZ d d
lmZ ej                            d          Zd Zd Z G d de	          Zd Zd Zd Zej                            dddg          d             Zd Zd Z G d de          Zej                            dddg          d             Zd ZdS )     N)assert_array_equal)BaseEstimator)get_namespace)_NumPyApiWrapper)_ArrayAPIWrapper)_asarray_with_order)_convert_to_numpy) _estimator_with_converted_arrays)config_contextz0ignore:The numpy.array_api submodule:UserWarningc                     t          j        d           t          j        g dg          } dD ]X}t	          |          5  t          |           \  }}|rJ t          |t                    sJ 	 ddd           n# 1 swxY w Y   YdS )z%Test get_namespace on NumPy ndarrays.numpy.array_api         )TFarray_api_dispatchN)pytestimportorskipnumpyasarrayr   r   
isinstancer   )X_npr   xp_outis_array_apis       Blib/python3.11/site-packages/sklearn/utils/tests/test_array_api.pytest_get_namespace_ndarrayr      s    
)***=)))%%D , 8 8/ABBB 	8 	8#0#6#6 FL####f&6777777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	88 8s    .A;;A?	A?	c                  <   t          j        d          } t          j        g dg          }|                     |          }t	          d          5  t          |          \  }}|sJ t          |t                    sJ t          j        t          d          5  t          ||           ddd           n# 1 swxY w Y   t          j        t          d          5  t          d	           ddd           n# 1 swxY w Y   ddd           dS # 1 swxY w Y   dS )
z'Test get_namespace for ArrayAPI arrays.r   r   Tr   zMultiple namespacesmatchNzUnrecognized array inputr   )
r   r   r   r   r   r   r   r   raises
ValueError)xpr   X_xpr   r   s        r   test_get_namespace_array_apir%   !   s   		.	/	/B=)))%%D::dD	4	0	0	0 
 
,T22&"233333 ]:-BCCC 	& 	&$%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& ]:-GHHH 	 	!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s[   A	DB7+D7B;	;D>B;	?DC9-D9C=	=D C=	DDDc                   "     e Zd ZdZ fdZ xZS )_AdjustableNameAPITestWrapperz:API wrapper that has an adjustable name. Used for testing.c                 Z    t                                          |           || _        d S )N)array_namespace)super__init____name__)selfr)   name	__class__s      r   r+   z&_AdjustableNameAPITestWrapper.__init__7   s)    999    )r,   
__module____qualname____doc__r+   __classcell__)r/   s   @r   r'   r'   4   s>        DD        r0   r'   c                  f   t          j        d          } t          | d          }t          |          }|                    g dg dg|j                  }|                    ||j                  }|j        |j        k    sJ |                    ||j                  }|j        |j        k    sJ dS )z6Test _ArrayAPIWrapper for ArrayAPIs that is not NumPy.r   wrapped_numpy.array_apir   r         dtypeN)	r   r   r'   r   r   float64astypefloat32r;   )numpy_array_apixp_r#   XX_converteds        r   test_array_api_wrapper_astyperC   <   s    )*;<<O
'9R
S
SC	#		B


YYY			*2:
>>A))Arz**K
******Qbj*11K
******r0   c                  x   t          j        d          } t          | d          }t          |          }|                    g dg dg|j                  }|                    ||                    dg          d          }t          |d          sJ t          |t          j        |dgd                     d	S )
z2Test that fast path is called for numpy.array_api.r   r   r7   r:   r   r   axis__array_namespace__N)
r   r   r'   r   r   r<   takehasattrr   r   )r?   r@   r#   rA   X_takes        r   )test_array_api_wrapper_take_for_numpy_apirK   J   s    )*;<<O
'9J
K
KC	#		B


YYY			*2:
>>AWWQ

A3aW00F6011111vuz!aSq999:::::r0   c                     t          j        d          } t          | d          }t          |          }|                    g d|j                  }|                    ||                    dg          d          }t          |d          sJ t          |t          j        |dgd                     |                    g dg d	g|j                  }|                    ||                    dg          d          }t          |d          sJ t          |t          j        |dgd                     |                    ||                    dd
g          d          }t          |d          sJ t          |t          j        |dd
gd                     t          j
        t          d          5  |                    ||                    dg          d
           ddd           n# 1 swxY w Y   t          j
        t          d          5  |                    |                    dggg          |                    dg          d           ddd           dS # 1 swxY w Y   dS )z#Test _ArrayAPIWrapper API for take.r   r6   r   r:   r   r   rE   rG   r7   r   z"Only axis in \(0, 1\) is supportedr   Nz$Only X.ndim in \(1, 2\) is supported)r   r   r'   r   r   r<   rH   rI   r   r   r!   r"   )r?   r@   r#   X_1drJ   rA   s         r   test_array_api_wrapper_takerN   W   s   )*;<<O
'9R
S
SC	#		B ::iiirz:22DWWT2::qc??W33F6011111vuz$!<<<===


YYY			*2:
>>AWWQ

A3aW00F6011111vuz!aSq999::: WWQ

Aq6**W33F6011111vuz!aV!<<<===	z)N	O	O	O , ,
2::qc??+++, , , , , , , , , , , , , , , 
z)P	Q	Q	Q > >


aSE7##RZZ__1===> > > > > > > > > > > > > > > > > >s%   =-G66G:=G:AI,,I03I0r   TFc                     | rt          j        d          }nt          }|                    g d          }t	          |d          }t          j        |          }|j        d         sJ dS )z=Test _asarray_with_order passes along order for NumPy arrays.r   333333?333333@gffffff@ForderF_CONTIGUOUSN)r   r   r   r   r   flags)r   r#   rA   X_newX_new_nps        r   test_asarray_with_orderrZ   t   ss       !233


???##A---E}U##H>.))))))r0   c                  8   t          j        d          } t          | d          }t          j        g dg dgd          }|                    |          }t          |d|          }t          j        |          }|j        d	         sJ |j        d
         rJ dS )z<Test _asarray_with_order ignores order for Generic ArrayAPI.r   wrapped.array_apirP   )rR   g      @rQ   CrT   rS   )rU   r#   C_CONTIGUOUSrV   N)r   r   r'   r   r   r   rW   )r#   r@   rA   rX   rY   s        r   test_asarray_with_order_ignoredr_      s    		.	/	/B
',?
@
@C8DDDAAA555E}U##H>.))))~n------r0   c                     t          j        d          } t          | d          }|                    ddg          }t          j        t
          d          5  t          ||           ddd           dS # 1 swxY w Y   dS )	z8Test convert to numpy errors for unsupported namespaces.r   r\   rQ   rR   zSupported namespaces are:r   )r#   N)r   r   r'   r   r!   r"   r	   )r#   r@   rA   s      r   test_convert_to_numpy_errorra      s    		.	/	/B
',?
@
@CS#JA	z)D	E	E	E % %!$$$$% % % % % % % % % % % % % % % % % %s   A66A:=A:c                       e Zd ZddZdS )SimpleEstimatorNc                 8    || _         |j        d         | _        | S )Nr   )X_shapen_features_)r-   rA   ys      r   fitzSimpleEstimator.fit   s    71:r0   N)r,   r1   r2   ri    r0   r   rc   rc      s(             r0   rc   r)   r   zcupy.array_apic                    t          j        |           }| dk    rd }nd }|                    ddgg          }t                                          |          }t          ||          }t          |j        t          j	                  sJ dS )z(Convert estimator attributes to ndarray.r   c                 *    t          j        |           S rj   )r   r   arrays    r   <lambda>z3test_convert_estimator_to_ndarray.<locals>.<lambda>   s    %-"6"6 r0   c                 4    | j                                         S rj   )_arraygetrn   s    r   rp   z3test_convert_estimator_to_ndarray.<locals>.<lambda>   s    %,"2"2"4"4 r0   ?      @N)
r   r   r   rc   ri   r
   r   re   r   ndarray)r)   r#   	converterrA   estnew_ests         r   !test_convert_estimator_to_ndarrayrz      s     
	_	-	-B+++66		44	


S#J<  A





"
"C.sI>>Ggj%-0000000r0   c                      t          j        d          t          j        ddgg          } t	                                          |           }t          |fd          }t          |j        d          sJ dS )z0Convert estimator attributes to ArrayAPI arrays.r   rt   ru   c                 .                         |           S rj   )r   )ro   r#   s    r   rp   z5test_convert_estimator_to_array_api.<locals>.<lambda>   s    "**UBSBS r0   rG   N)	r   r   r   r   rc   ri   r
   rI   re   )r   rx   ry   r#   s      @r   #test_convert_estimator_to_array_apir}      sz    		.	/	/B=3*&&D





%
%C.s4S4S4S4STTG7:45555555r0   )r   numpy.testingr   r   sklearn.baser   sklearn.utils._array_apir   r   r   r   r	   r
   sklearn._configr   markfilterwarnings
pytestmarkr   r%   r'   rC   rK   rN   parametrizerZ   r_   ra   rc   rz   r}   rk   r0   r   <module>r      s    , , , , , ,  & & & & & & 2 2 2 2 2 2 5 5 5 5 5 5 5 5 5 5 5 5 8 8 8 8 8 8 6 6 6 6 6 6 E E E E E E * * * * * *[''6 

8 8 8  &    $4   + + +
; 
; 
;> > >: $77* * 87*. . .% % %    m    *->@P,QRR1 1 SR1 6 6 6 6 6r0   