
    Pi                        d dl Z d dlmZ 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 d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- d dl.m/Z/m0Z0m1Z1m2Z2m3Z3 d d	l4m5Z5m6Z6m7Z7m8Z8 ej9        :                    d
 ej;        g d          g dg          d             Z<d Z=e3d             Z>e3ej9        :                    dg d          d                         Z?e3d             Z@e3d             ZAej9        :                    d ejB        ddd           ejB        ddd           ejB        ddd           ejB        ddd           ejB        ddd          g          d              ZCd! ZDej9        :                    d"d#d$g          d%             ZEej9        :                    d& e-            e'          ej9        :                    d(d)dd d*g d+fdd,d*d-d.gfd*d/gd d*g dfg d0d,d*d1d2gfd3d4gd d*g d5fg d6d,d*d7d8gfd,d-gd d*g d9fg d:d,d*d;d<gfg dg dgd d*g d+fg d=g d>gd,d*d-d.gfd?dd d/g d@fdd,d/dAdBgfd*d/gd d/g dfg d0d,d/dCdDgfd3d4gd d/g dEfg d6d,d/dFdGgfd,d-gd d/g dHfg d:d,d/dDdIgfg dg dgd d/g dJfg d=g d>gd,d/dKdLgfg          dM                         ZFej9        :                    dN e-d/O          e'          dP             ZGej9        :                    dN e-d*O          e'          ej9        :                    dQdd,d-geHdRfd d,d-ggeIeHfdSfd g dTeIdSfd dUd,geJdVff          dW                         ZKdX ZLe3dY             ZMe3ej9        :                    dZg d[          ej9        :                    d\d,d-ejN        ge#d,fd,d]ejN         ge#d]fejO        ejO        ge#ejO        fg dejN        ejN        ejN        gg d^g ee#d _          g d`fg dejN        ejN        ejN        gg d^g ee#d,_          daejN        dbgfd,d-ejN        ge!d-fd,d-ejN        ge!d-fejO         ejO         ge!ejO         fg dejN        ejN        ejN        gg d^g ee!d _          g dcfg dejN        ejN        ejN        gg d^g ee!d,_          ddejN        degfd,d-ejN        ge"d1fd,d]ejN         ge"dffejO         ejO         ge"ejO         fg dejN        ejN        ejN        gg d^g ee"d _          g d+fg dejN        ejN        ejN        gg d^g ee"d,_          dgejN        dhgfg          di                                     ZPej9        :                    dj e-            e'          dk             ZQe3ej9        :                    dZdldmg          dn                         ZRdo ZS G dp dqe          ZTe3ej9        :                    drdmds fd$dt fdldu fg          dv                         ZUe3dw             ZVej9        :                    dj e-            e'          dx             ZWej9        :                    dj e-            e'          dy             ZXej9        :                    dz e-            e'          ej9        :                    d{d*d/g          ej9        :                    d|d*d/g          ej9        :                    d}g d~          ej9        :                    dg d          d                                                             ZYej9        Z                    e j[        \                    d          dk    d          d             Z]ej9        :                    d& e-            e'          ej9        :                    de6          ej9        :                    dg d          ej9        :                    dg d          d                                                 Z^ej9        :                    d ej_        g d          d,df ej_        d,d-gdCdgg           ej_        g d          df ej_        d,d-gdCdgg          g ddf ej_        d,d-gdCdgg           ej_        d,d-gdCdgg          dfg          d             Z`ej9        :                    dddg          ej9        :                    dd*d/g          d                         Zaej9        :                    dg d          ej9        :                    d& e-            e'          d                         Zbej9        :                    d& e-            e'          d             Zcej9        :                    de6          ej9        :                    dd*d/g          d                         Zdej9        :                    d e-            e'          ej9        :                    dg d          d                         Zeej9        :                    d& e-                      ej9        :                    dg d          d                         Zfej9        :                    dg d          d             Zgej9        :                    dd/d*g          ej9        :                    d e-                      d                         ZhdS )    N)partial)assert_allclose)config_context)HalfMultinomialLoss)BaseEstimator)_add_to_diagonal_asarray_with_order_atol_for_type_average_convert_to_numpy_count_nonzero _estimator_with_converted_arrays_fill_diagonal_get_namespace_device_dtype_ids_half_multinomial_loss_is_numpy_namespace_isin
_logsumexp_max_precision_float_dtype_median_nanmax_nanmean_nanmin_ravel_validate_diagonal_argsdeviceget_namespaceget_namespace_and_deviceindexing_dtypemove_to	np_compatsupported_float_dtypes)yield_namespace_device_dtype_combinations)SkipTest_array_api_for_tests_convert_containerassert_array_equal'skip_if_array_api_compat_not_configured)	_IS_32BITCSR_CONTAINERS
np_versionparse_versionX         c                 H    t          |           \  }}|t          u sJ |rJ dS )z.Check that get_namespace returns NumPy wrapperN)r   r!   )r-   xp_outis_array_api_compliants      v/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/sklearn/utils/tests/test_array_api.py"test_get_namespace_ndarray_defaultr6   5   s:     &31%5%5"F"Y%%%%%%    c                  D   t          j        g d          } t          |           \  }}|                    ddd          }t	          |dgdz             t          j        t          d          5  |                    dd	           d
d
d
           d
S # 1 swxY w Y   d
S )z;Check expected behavior with device and creation functions.r.   
          @cpu)
fill_valuer   zUnsupported devicematchcudar   N)	numpyasarrayr   fullr   pytestraises
ValueErrorzeros)r-   r3   _
full_arrays       r5   *test_get_namespace_ndarray_creation_devicerJ   =   s    iii  Aa  IFARC>>JJ
+++	z)=	>	>	> ( (R'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   0BBBc                      t          j        g dg          } t          d          5  t          |           \  }}|sJ |t          u sJ 	 ddd           dS # 1 swxY w Y   dS )z%Test get_namespace on NumPy ndarrays.r.   Tarray_api_dispatchN)rA   rB   r   r   r!   )X_npr3   r4   s      r5   (test_get_namespace_ndarray_with_dispatchrO   I   s     =)))%%D	4	0	0	0 # #)6t)<)<&&%%%% """""# # # # # # # # # # # # # # # # # #s   "AAAconstructor_name)pyarrow	dataframepolarsseriesc                     t          g dg dg|           }t          d          5  t          |          \  }}|rJ |t          u sJ 	 ddd           dS # 1 swxY w Y   dS )z,Test get_namespace on dataframes and series.)r/      r0   )r1   r1      TrL   N)r&   r   r   r!   )rP   dfr3   r4   s       r5   #test_get_namespace_df_with_dispatchrY   X   s     
YYY			24D	E	EB	4	0	0	0 # #)6r):):&&)))) """""# # # # # # # # # # # # # # # # # #s   "AAAc                      t          d          5  t          t          j        g dg                    \  } }|rJ | t          u sJ 	 ddd           dS # 1 swxY w Y   dS )z$Test get_namespace on sparse arrays.TrL   r.   N)r   r   sp	csr_arrayr!   )r3   r4   s     r5   'test_get_namespace_sparse_with_dispatchr]   i   s     
4	0	0	0 # #)6r|YYYK7P7P)Q)Q&&)))) """""# # # # # # # # # # # # # # # # # #s   7AAAc                    t          j        d          }t          j        g dg          }|                    |          }t	          d          5  t          |          \  }}|sJ t          j        t                    5  t          ||          \  }}ddd           n# 1 swxY w Y   d }|                     d|           t          j
                            d          d	k    sJ t          j        t          d
          5  t          |           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.array_api_strictr.   TrL   Nc                     | dk    rdS d S )NSCIPY_ARRAY_API0 )keys    r5   mock_getenvz1test_get_namespace_array_api.<locals>.mock_getenv   s    '''s ('r7   zos.environ.getra   1z#scipy's own support is not enabled.r=   )rD   importorskiprA   rB   r   r   rE   	TypeErrorsetattrosenvirongetRuntimeError)monkeypatchxprN   X_xpr3   r4   re   s          r5   test_get_namespace_array_apirq   u   s$    
	/	0	0B=)))%%D::dD	4	0	0	0    )6t)<)<&&%%%%]9%% 	G 	G-:4-F-F*F*	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G	 	 	 	,k:::z~~/00C7777]7
 
 
 	  	  $		  	  	  	  	  	  	  	  	  	  	  	  	  	  	                                    s[   0D9B!D9!B%	%D9(B%	)AD9D!D9!D%	%D9(D%	)D99D= D=zarray_input, reference)cupyN)torchr?   zcupy to torch cuda)id)rs   mps)rA   Nztorch mps to numpyznumpy to torch cudaznumpy to torch mps)r_   Nzarray_api_strict to torch mpsc                 n   | d         dk    rt          j        dd          }t          |d         |d                   }t          | d         | d                   }t          d          5  t	          |                    dg|d                             }| d         dk    r|                    d	          }n| d         }|                    g d
|          }t          |||          }t          |          d         |k    sJ t	          |          |k    sJ 	 ddd           dS # 1 swxY w Y   dS )z7Check conversion between various namespace and devices.r   r_   zarray-api-strict not availablereasonr/   TrL   r@   
CPU_DEVICEr.   ro   r   N)	rD   rg   r%   r   r   rB   Devicer    r   )	array_input	referencer_   ro   xp_arraydevice_array_devicearray	array_outs	            r5   "test_move_to_array_api_conversionsr      s     1~+++!.'G
 
 
 
ilIaL	9	9B#KNKNCCH	4	0	0	0 , ,QC	!==>>q>///+22<@@LL&q>L  < @@Eb999	Y''*b0000i  G+++++, , , , , , , , , , , , , , , , , ,s   +B1D**D.1D.c                     t          dd          } t          dd          }t          j        g d          }t          j        g d          }t          j        g d          }t          d	          5  |                    d
g          j        }t          |d| d          \  }}||u sJ |J d}t          j
        t          |          5  t          ||||           ddd           n# 1 swxY w Y   t          j
        t          |          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*Check sparse inputs are handled correctly.rA   Nrs   r;   )r   r/   r0   r1   )r   r/   r   r/   r.   TrL   r/   rz   z6Sparse arrays are only accepted \(and passed through\)r=   )r%   r[   r\   rA   r   r   rB   r   r    rD   rE   rh   )	xp_numpyxp_torchsparse1sparse2numpy_array
device_cpuresult1result2msgs	            r5   test_move_to_sparser      s]   #GT22H#GU33Hl<<<((Gl<<<((G+iii((K	4	0	0	0 C C%%qc**1
 #7DXdKKK'!!!! H]9C000 	J 	JG[XjIIII	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J]9C000 	C 	CGThzBBBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	CC C C C C C C C C C C C C C C C C Cs[   3AE
C, E
,C0	0E
3C0	4E
D2&E
2D6	6E
9D6	:E

EE	array_apirA   r_   c                     t          j        |           }|                    g d          }t          |d|          }t	          j        |          }|j        d         sJ dS )z=Test _asarray_with_order passes along order for NumPy arrays.)g333333?g333333@gffffff@F)orderro   F_CONTIGUOUSN)rD   rg   rB   r	   rA   flags)r   ro   r-   X_newX_new_nps        r5   test_asarray_with_orderr      se     
	Y	'	'B


???##A444E}U##H>.))))))r7   z$array_namespace, device_, dtype_name)idsz"weights, axis, normalize, expected)NNT      @T)g      @r         @r/   r0      F)TTF      ?r   皙?g?)g?g@g@)r   皙?r   g      ?g      @)r1   rV   r   )r/   r/   r0   g      @g      @)r/   r0   r/   )r0   r0   r0   )NNF   )r      	   rW      r1   r   )皙??g?gffffff?gffffff@)r      r   r   )r               c                 b   t          | |          }t          j        g dg dg|          }|                    ||          }|-t          j        ||          }|                    ||          }t          d          5  t	          ||||          }	t
          t          d          k     st
          t          d	          k    r"t          |          t          |	          k    sJ d d d            n# 1 swxY w Y   t          |	|          }	t          |	|t          |          
           d S )Nr.   rV   r   rW   dtyper@   TrL   )axisweights	normalize2.0.02.1.0)atol)r%   rA   rB   r   r   r+   r,   r   r   r   r
   )
array_namespacer   
dtype_namer   r   r   expectedro   array_inresults
             r5   test_averager      so   J 
ow	7	7B}iii3:FFFHzz(7z33H-z:::**WW*55	4	0	0	0 6 6(w)TTTg....*g@V@V2V2V (##vf~~55556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 vr**FFH>*+E+EFFFFFFs   A&C55C9<C9z#array_namespace, device, dtype_name)include_numpy_namespacesc                     t          | |          }t          j        ddg|          dt          j        ddg|          z  z   }|j        j        }t          ||          st          j        |  d|            |                    ||          }d	}t          d
          5  t          j	        t          |          5  t          |           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 )Nr0   r   r   y              ?rV   r1   z does not support r@   z;Complex floating point values are not supported by average.TrL   r=   )r%   rA   rB   r   namehasattrrD   skipr   rE   NotImplementedErrorr   )r   r   r   ro   r   complex_type_nameerr_msgs          r5   $test_average_raises_with_wrong_dtyper     s    
ov	6	6B}aV:666em	
Aj? ? ? : H !+2()) OMM:KMMNNNzz(6z22HKG$/// )999  		                                s6   #C3?CC3C	C3"C	#C33C7:C7zaxis, weights, error, error_msgzAxis must be specifiedr   )r/   r0   r1   rV   z(Weights sum to zero, can't be normalizedc                    t          | |          }t          j        g dg dg|          }|                    ||          }t          j        ||          }|                    ||          }t          d          5  t	          j        ||          5  t          |||           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 )	Nr.   r   r   r@   TrL   r=   )r   r   )r%   rA   rB   r   rD   rE   r   )	r   r   r   r   r   error	error_msgro   r   s	            r5   +test_average_raises_with_invalid_parametersr   ,  sf   B 
ov	6	6B}iii3:FFFHzz(6z22HmG:666Gjjj00G	4	0	0	0 7 7&-Y2W2W2W 7 7g66667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s6   CB7+C7B;	;C>B;	?CCCc                  J    t                      J t          d d          J d S )Nr   r@   rc   r7   r5   test_device_none_if_no_inputr   Y  s.    88$'''''r7   c                      G d d           G fdd          } t          j        t                    5  t           | d          j                   d d d            n# 1 swxY w Y   t	           | d           | d                    J d}t          d	
          5  t          j        t          |          5  t	           | d           | d                     d d d            n# 1 swxY w Y    | d          } | d          }|j        t	          |          k    sJ |j        t	          ||          k    sJ |j        t	          |||          k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nc                   &    e Zd Zd Zd Zd Zd ZdS )&test_device_inspection.<locals>.Devicec                     || _         d S Nr   )selfr   s     r5   __init__z/test_device_inspection.<locals>.Device.__init__b  s    DIIIr7   c                 "    | j         |j         k    S r   r   )r   r   s     r5   __eq__z-test_device_inspection.<locals>.Device.__eq__e  s    9++r7   c                      t          d          )NzDevice object is not hashable)rh   r   s    r5   __hash__z/test_device_inspection.<locals>.Device.__hash__h  s    ;<<<r7   c                     | j         S r   r   r   s    r5   __str__z.test_device_inspection.<locals>.Device.__str__k  s
    9r7   N)__name__
__module____qualname__r   r   r   r   rc   r7   r5   r{   r   a  sP        	 	 		, 	, 	,	= 	= 	=	 	 	 	 	r7   r{   c                       e Zd Z fdZdS )%test_device_inspection.<locals>.Arrayc                 (     |          | _         d S r   r@   )r   device_namer{   s     r5   r   z.test_device_inspection.<locals>.Array.__init__o  s     &--DKKKr7   N)r   r   r   r   )r{   s   r5   Arrayr   n  s.        	. 	. 	. 	. 	. 	. 	.r7   r   r   r;   mygpuz.Input arrays use different devices: cpu, mygpuTrL   r=   )rD   rE   rh   hashr   r   rF   )r   r   array1array2r{   s       @r5   test_device_inspectionr   _  s          . . . . . . . . . . 
y	!	! % %UU8__#$$$% % % % % % % % % % % % % % % %%,,g//777 ?G	4	0	0	0 
? 
?]:W555 	1 	155<<w000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 xx}v....}vv 6 66666}vvv > >>>>>>
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
?sH   A!!A%(A%"E->#C-!E--C1	1E-4C1	5A*E--E14E1library)rA   r_   rs   zX,reduction,expected)rV   r         @r         ?r:         @r         @)r         @r   r   r   g      r:   r   c                     t          j        |           }t          d          5   ||                    |                    }ddd           n# 1 swxY w Y   t	          ||          }t          ||           dS )z-Check NaN reductions like _nanmin and _nanmaxTrL   N)rD   rg   r   rB   r   r   )r   r-   	reductionr   ro   r   s         r5   test_nan_reductionsr     s    ` 
	W	%	%B	4	0	0	0 * *2::a==))* * * * * * * * * * * * * * * vr**FFH%%%%%s   AAAznamespace, _device, _dtypec                    t          | |          }g dg dg dg dg}|                    ||          }t          d          5  t          |          }d d d            n# 1 swxY w Y   t	          ||          }t          j        |d	          }t          ||           t          |          r!t          j        |          j	        d
         sJ d S d S )Nr.   r   )r   r   r   )r9      r   r@   TrL   C)r   C_CONTIGUOUS)
r%   rB   r   r   r   rA   ravelr   r   r   )	namespace_device_dtypero   r   array_xpr   r   s           r5   
test_ravelr     s,    
i	1	1BYY			999lll;Ezz%z00H	4	0	0	0 " "!!" " " " " " " " " " " " " " " vr**F{5,,,HHf%%%2 ;}V$$*>::::; ;::s   A""A&)A&rr   rs   c                 n   t          j        |           }| dk    rL|j        j                                        st          j        d           |                    g dd          }n|                    g d          }t          ||          }t          j        g d          }t          ||           dS )z0Check convert_to_numpy for GPU backed libraries.rs   ztest requires cudar   r?   r@   ro   N)
rD   rg   backendsr?   is_builtr   rB   r   rA   r   )r   ro   X_gpuX_cpuexpected_outputs        r5   test_convert_to_numpy_gpur    s     
	W	%	%B'{((** 	.K,---

???6
::

???++e+++EmOOO44OE?+++++r7   c                      t          j        d          } |                     g dd          }t          ||           }t	          j        g d          }t          ||           dS )z.Check convert_to_numpy for PyTorch CPU arrays.rs   r   r;   r@   r   N)rD   rg   rB   r   rA   r   )rs   X_torchr  r  s       r5   test_convert_to_numpy_cpur    sf    ((EmmOOOEm::Gg%000EmOOO44OE?+++++r7   c                       e Zd ZddZdS )SimpleEstimatorNc                 8    || _         |j        d         | _        | S )Nr   )X_shapen_features_)r   r-   ys      r5   fitzSimpleEstimator.fit  s    71:r7   r   )r   r   r   r  rc   r7   r5   r  r    s(             r7   r  zarray_namespace, converterc                 N    |                                                                  S r   )r;   rA   r   s    r5   <lambda>r    s    		 1 1 3 3 r7   c                 *    t          j        |           S r   )rA   rB   r  s    r5   r  r  	  s    5=+?+? r7   c                 *    |                                  S r   )rl   r  s    r5   r  r  
  s    uyy{{ r7   c                    t          j        |           }|                    ddgg          }t                                          |          }t          ||          }t          |j        t          j	                  sJ dS )z(Convert estimator attributes to ndarray.r   r   N)
rD   rg   rB   r  r  r   
isinstancer
  rA   ndarray)r   	converterro   r-   estnew_ests         r5   !test_convert_estimator_to_ndarrayr    ss     
	_	-	-B


S#J<  A





"
"C.sI>>Ggj%-0000000r7   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_   r   r   c                 .                         |           S r   )rB   )r   ro   s    r5   r  z5test_convert_estimator_to_array_api.<locals>.<lambda>   s    "**UBSBS r7   __array_namespace__N)	rD   rg   rA   rB   r  r  r   r   r
  )rN   r  r  ro   s      @r5   #test_convert_estimator_to_array_apir    s|     
	/	0	0B=3*&&D





%
%C.s4S4S4S4STTG7:45555555r7   c                     t          | |          }t          rt          |          |j        k    sJ d S t          |          |j        k    sJ d S r   )r%   r)   r   int32int64)r   r   r   ro   s       r5   test_indexing_dtyper"  $  s]     
i	1	1B .b!!RX------b!!RX------r7   c                 z    t          | |          }|dk    r|j        n|j        }t          ||          |k    sJ d S )Nru   )r%   float32float64r   )r   r   r   ro   expected_dtypes        r5   test_max_precision_float_dtyper'  2  sK     
i	1	1B#*e#3#3RZZN%b'22nDDDDDDr7   zarray_namespace, device, _invertassume_uniqueelement_size)rW   r9   r   	int_dtype)int16r   r!  uint8c                 @   t          | |          }|dz  }dt          j        |                              |df                              |          z  }	t          j        t          j        d          |          }
|                    |	|          }|                    |
|          }t          j        |	|
||          }t          d          5  t          |||||          }d d d            n# 1 swxY w Y   t          t          ||	          |           d S )
Nr0   r   r   r@   )elementtest_elementsr)  r(  TrL   )r/  r0  ro   r)  r(  r   )r%   rA   arangereshapeastyper   rB   isinr   r   r'   r   )r   r   rH   r(  r)  r*  r+  ro   rr/  r0  
element_xptest_elements_xpr   r   s                  r5   	test_isinr8  =  sm    
ov	6	6BA%,|,,44aV<<CCINNNGKR 0 0	BBBMGF33Jzz-z??z##	  H 
4	0	0	0 
 
*'
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 (B777BBBBBs   C44C8;C8ra   rf   zSCIPY_ARRAY_API not set to 1.rw   c                     t          j        d          } ddlm} |                     dd          }t          j        d          }t          |          \  }}}|t          |          d         u sJ |rJ |J t          d          5  t          |          \  }}}||u sJ |sJ ||j	        k    sJ 	 d d d            d S # 1 swxY w Y   d S )	Nrs   r   )rs   r1   r;   r@   TrL   )
rD   rg   "sklearn.externals.array_api_compatrs   r1  rA   r   r   r   r   )rs   torch_compatsome_torch_tensorsome_numpy_arrayr   is_array_apir   s          r5   test_get_namespace_and_devicer?  a  sU   
 ((EHHHHHHQu55|A '??P&Q&Q#I|V&677:::::>>> 
4	0	0	0 2 2*BCT*U*U'	<L((((|*111111	2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s   
+CC
Ccsr_containerr   )r   r/   Nr   r   sample_weight_type)Nintfloatc                    ddl m} t          | |          }t          j        g dg dg dg dg dg          }|dk    rt          j        g d	          }	n!|d
k    rt          j        g d|          }	nd }	 | ||          ||	          }
|                    ||          }t          d          5  t          |||	||          }d d d            n# 1 swxY w Y   t          t          ||          |
           t          t          d          k     st          t          d          k    r$t          |          t          |          k    sJ d S d S )Nr   )count_nonzero)r   r1   r   )r0   r   r   )r   r   r   )r   r   r   rV   r   r   rB  )r/   r0   r0   r1   r/   rC  )g      ?r   r   g	@g333333@r   )r   sample_weightr@   TrL   )r   rG  ro   r   r   r   r   )sklearn.utils.sparsefuncsrE  r%   rA   r   rB   r   r   r   r   r+   r,   r   )r   r   r   r@  r   rA  sparse_count_nonzeroro   r   rG  r   r   r   s                r5   test_count_nonzerorJ    s    POOOOO	ow	7	7BKJJJ			999iiiPQQEU""ooo66	w	&	&&?&?&?zRRR##e4}  H zz%z00H	4	0	0	0 
 
4}G
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 %f444h???M'****jM'<R<R.R.R h6&>>111111 /S.Rs   6CCCzarray, value, matchz`array` should be 2DrV   z`value` needs to bez`value` needs to be ac                     t          dd          }t          j        t          |          5  t	          | ||           ddd           dS # 1 swxY w Y   dS )z:Check `_validate_diagonal_args` raises the correct errors.rA   Nr=   )r%   rD   rE   rF   r   )r   valuer>   ro   s       r5   test_validate_diagonal_argsrM    s     
gt	,	,B	z	/	/	/ 2 2ub1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2s   AAAfunctionfilladdc_contiguityc                 6   t          dd          }| rt          j        d          }nt          j        d          j        }|j        d         | k    sJ |dk    rt
          }nt          } ||d|           t          |                                t          j	        d                      ||g d|           |dk    rt          j
        d	          }n)t          j	        d          t          j
        d	          z   }t          |                                |           t          j        g d
          } ||||           |dk    r|}n,|t          j
        d	          z   t          j	        d          z   }t          |                                |           dS )zBCheck `_fill/add_to_diagonal` behaviour correct with numpy arrays.rA   Nr1   rV   r   rO  r/   )r1   )r   r/   r0   r1   )r   r      )r%   rA   rG   Tr   r   r   r   diagonalonesr1  r   )rQ  rN  ro   r   funcexpected_diag
fill_arrays          r5   test_fill_and_add_to_diagonalr[    s    
gt	,	,B &F##F##%;~&,66666D2ENN$$ej&6&6777D			26Q
4((5<??:ENN$$m444\\\**JD
B6""U\!__4uz$7G7GGENN$$m44444r7   r   )standard
transposednon-contiguousc                    t          ||          }t          j        d|          }| dk    r6|                    |                                |          j        }|j        }nw| dk    rH|                    |                                |          ddddddf         }|ddddddf         }n)|                    |                                |          }t          j        |d	           t          d
          5  t          |d|           ddd           n# 1 swxY w Y   t          t          ||          |           dS )zHCheck array API `_fill_diagonal` consistent with `numpy._fill_diagonal`.)rV   r   r   r]  r@   r^  Nr0   r/   )valTrL   rL  ro   r   )r%   rA   rG   rB   copyrU  fill_diagonalr   r   r'   r   )r   r   r   r   ro   array_npr   s          r5   test_fill_diagonalre    s    
ow	7	7B{6444H::hmmoog:>>@:	"	"	"::hmmoog:>>sssCCaCxHCCaC1H%::hmmoog:>>	a((((	4	0	0	0 1 1xqR00001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 (b9998DDDDDs    DD#&D#c                    t          | |          }t          dd          }t          j        d|          }|                    |                                |          }g d}t          |||           t          d	          5  t          |||           ddd           n# 1 swxY w Y   t          t          ||
          |           dS )zMCheck `_add_to_diagonal` consistent between array API xp and numpy namespace.rA   NrS  r   r@   r.   ra  TrL   r   )	r%   rA   rG   rB   rb  r   r   r'   r   )r   r   r   ro   np_xprd  r   add_vals           r5   test_add_to_diagonalri    s    
ow	7	7B $//E{6444Hzz(--//'z::HiiG87u5555	4	0	0	0 7 7xw266667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 (b9998DDDDDs   B%%B),B)dispatchc                 B   t          j        dg          }|rt          |dd           nd } | t          j        dgg                     | t          j        dgg                    }}|r.t          j                            d          t          d          t          |          5  t          ||          J t          ||          |k    sJ t          ||          d         J t          ||          d         |k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr/   r   r0   ra   z8SCIPY_ARRAY_API is not set: not checking array_api inputrL   )
rA   r   getattrrj   rk   rl   r$   r   r   r   )r@  rj  np_arrexpected_numpy_array_deviceabs         r5   test_sparse_devicerq    s    [!FEM"W'&(D"A"A"ASW=qcU++,,mmEK!<N<N.O.OqA SBJNN#455=QRRR	8	4	4	4 U Ua||###a  $?????'1--a0888'622159TTTTTT	U U U U U U U U U U U U U U U U U Us   )ADDDznamespace, device, dtype_name)Nr   r/   c                 4   t          | |          }t          j                            d          }|                    ddd                              |          }t          j        ||          }|                    ||          }t          d	          5  t          ||          }	|j
        d
k    r-t          |	          d         |k    sJ |	j        |j        k    sJ d d d            n# 1 swxY w Y   t          |t          |	|                     d S )Nr   g        r   )r   rV   )lowhighsizer   r@   TrL   r_   r   )r%   rA   randomRandomStateuniformr3  medianrB   r   r   r   r   r   r   r   )
r   r   r   r   ro   rngrN   	result_nprp   	result_xps
             r5   test_medianr}    sX    
i	0	0B
,
"
"1
%
%C;;3Sv;66==jIIDT---I::d6:**D	4	0	0	0 3 3Dt,,,	;,,, !++A."4444#t{22223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 I0rBBBCCCCCs   A
C..C25C2)r   r/   Nc                    t          | |          }t          j        g dg dg dddt          j         gg dg|          }|                    ||          }t          j                            ||	          }d
t          |          v rdnd}| dk    r|dk    s| dk    r2dt          |          v r!t          t          ||	          ||           t          d          5  t          ||	          }	t          |	|          }	t          ||	|           d d d            n# 1 swxY w Y   t          j        dt          j        dgg dt          j        ddgddt          j         gg dg|          }
|                    |
|          }t          j                            |
|	          }t          d          5  t          ||	          }t          ||          }t          |||           d d d            d S # 1 swxY w Y   d S )N)r   r1     )r0   r   r  )ir   r   ir   rF  r   r@   r   r$  gư>g-q=rs   r;   r_   CPU)rtolTrL   r   r  )r%   rA   rB   infscipyspecial	logsumexpstrr   r   r   r   nan)r   r   r   r   ro   rd  r   res_npr  res_xp
array_np_2
array_xp_2res_np_2res_xp_2s                 r5   #test_logsumexp_like_scipy_logsumexpr  ;  s   
 
ow	7	7B}LLMMKK!eiZ II	
 	 	 	H zz(7z33H]$$XD$99FJ//44UD 	7""w%'7'7---%3w<<2G2G
8$777dKKKK	4	0	0	0 3 3H4000"62..T22223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 	4 MMY1!eiZ II	
 	 	 	J Jw77J}&&z&==H	4	0	0	0 7 7jt444$Xr22(66667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s$   #4D##D'*D'=4G>>HH)r   r   expected_types))rA   Nr%  r$  float16)r_   N)r%  r$  )rs   r;   r  )rs   r?   r  )rs   ru   )r$  r  c                     t          | |          t          |          }t          fd|D                       }||k    sJ d S )Nr@   c              3   8   K   | ]}t          |          V  d S r   )rl  ).0r   ro   s     r5   	<genexpr>z-test_supported_float_types.<locals>.<genexpr>  s-      NNWR,,NNNNNNr7   )r%   r"   tuple)r   r   r  float_typesr   ro   s        @r5   test_supported_float_typesr  r  s_     
i	1	1B(G<<<KNNNN~NNNNNH(""""""r7   use_sample_weightznamespace, device_, dtype_namec                    d}d}t           j                            d          }|                    d||                              |          }|                    ||                              |          }t          ||          }	|	                    ||          }
|	                    ||          }| r4t          j        |          }d|ddd<   |	                    ||          }nd	\  }} t          |
          |||          }t          d          5  t          |
|||	          }ddd           n# 1 swxY w Y   t          j        ||          sJ dS )zCheck that the array API version of :func:`_half_multinomial_loss` works
    correctly and matches the results produced by :class:`HalfMultinomialLoss`
    of the private `_loss` module.
    r   r1   *   r   r@   r0   r/   N)NN)	n_classes)y_trueraw_predictionrG  TrL   )r  predrG  ro   )rA   rv  rw  randintr3  randr%   rB   	ones_liker   r   r   isclose)r  r   r   r   	n_samplesr  rz  r  r  ro   y_xppred_xprG  sample_weight_xpnp_lossxp_losss                   r5   test_half_multinomial_lossr    s    II
,
"
"2
&
&CAy),,33J??A88Iy))00<<D	i	1	1B::a:((Djjgj..G 5**add::mG:DD*4''6!I666]  G 
4	0	0	0 
 
(0@R
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 ='*******s   D<<E E )irj   	functoolsr   rA   rD   r  scipy.sparsesparser[   numpy.testingr   sklearn._configr   sklearn._lossr   sklearn.baser   sklearn.utils._array_apir   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   sklearn.utils._testingr$   r%   r&   r'   r(   sklearn.utils.fixesr)   r*   r+   r,   markparametrizerB   r6   rJ   rO   rY   r]   rq   paramr   r   r   r   r   rh   rF   ZeroDivisionErrorr   r   r   r  r  r   r   r  r  r  r  r  r"  r'  r8  skipifrk   rl   r?  rJ  r   rM  r[  re  ri  rq  r}  r  r  r  rc   r7   r5   <module>r     s   				                ) ) ) ) ) ) * * * * * * - - - - - - & & & & & &                                                           <              U T T T T T T T T T T T }u}YYY77CDD& & ED&	( 	( 	( )# # )(# )DDD 
# 
#  )(
# )# # )(# )    )( 4 ^%6;OPPP%;OPPP_&7<QRRR_&6;OPPP&.	
 	
 	

 , , ,.C C C2 w0B&CDD* * ED* *--//'   
 ( 	 	q$(	q$A
4+			aSz2
sQooo.	!TD$<0
QD)))$	AtdD\*
))YYY	D///:
))YYY	D1a&1	q%#	q%!R!
5))),			aA/
sQ/	!US#J/
QE;;;'	Auq"g&
))YYY	E;;;7
))YYY	EAr731 :G G;  DG, )--uMMM'   
  
* )--tLLL'   
 % F$		
 VH#	
 LL		
 
RG&(RS) 27 73  <7( ( ( ),? ,? )(,?d )$J$J$JKK
Q		GQ'
R%)	gr*
)UY	%)4YYEIuy9;;;GGG!$$$OO	
 YYEIuy9;;;GGG!$$$%)S!	

 Q		GQ'
Q		GQ'9*uyj	!7UYJ7YYEIuy9;;;GGG!$$$OO	
 YYEIuy9;;;GGG!$$$%)S!	

 Q		Hc*
R%)	h-9*uyj	!8eiZ8YYEIuy9;;;GGH1%%%OO	
 YYEIuy9;;;GGH1%%%%)S!	
G(+ +X& &Y+ + LK )(\&  --//'   
; ; 
;" )VW$566, , 76 )(, , , ,    m    ) 	334	??@	**+ 1 1  )(1 )6 6 )(6  --//'   
. . 
.  --//'   
E E 
E  --//'   
 D%=114-8855&J&J&JKKC C LK 65 98 21 C6 JNN$%%,5T   2 2 26 *--//'   
 .99!5!5!566-/E/E/EFF2 2 GF 76 :9 2> 	YYY		$:;	q!fq!f%	&	&III(>(>@UV	q!fq!f%	&	&			3HIEK!Q!Q())EK!Q!Q())#	
		 2 2 2 fe_55$775 5 87 655B "N"N"NOO*--//'   
E E  POE* *--//'   
E E 
E  .99dE]33U U 43 :9U #--//'   
 ..D D /. D0 *,U,U,W,W  ..07 07 /. 07f .  	 	# #	 	# ,udm<<$&O&O&Q&Q + +  =<+ + +r7   