
    ri                        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jr                  ju                  d
 ejv                  g d      g dg      d        Z<d Z=e3d        Z>e3ejr                  ju                  dg d      d               Z?e3d        Z@e3d        ZAejr                  ju                  d ej                  ddd       ej                  ddd       ej                  ddd       ej                  ddd       ej                  ddd      g      d         ZCd! ZDejr                  ju                  d"d#d$g      d%        ZEejr                  ju                  d& e-       e'      ejr                  ju                  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jr                  ju                  dN e-d/O      e'      dP        ZGejr                  ju                  dN e-d*O      e'      ejr                  ju                  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jr                  ju                  dZg d[      ejr                  ju                  d\d,d-ej                  ge#d,fd,d]ej                   ge#d]fej                  ej                  ge#ej                  fg dej                  ej                  ej                  gg d^g ee#d _      g d`fg dej                  ej                  ej                  gg d^g ee#d,_      daej                  dbgfd,d-ej                  ge!d-fd,d-ej                  ge!d-fej                   ej                   ge!ej                   fg dej                  ej                  ej                  gg d^g ee!d _      g dcfg dej                  ej                  ej                  gg d^g ee!d,_      ddej                  degfd,d-ej                  ge"d1fd,d]ej                   ge"dffej                   ej                   ge"ej                   fg dej                  ej                  ej                  gg d^g ee"d _      g d+fg dej                  ej                  ej                  gg d^g ee"d,_      dgej                  dhgfg      di                      ZPejr                  ju                  dj e-       e'      dk        ZQe3ejr                  ju                  dZdldmg      dn               ZRdo ZS G dp dqe      ZTe3ejr                  ju                  drdmds fd$dt fdldu fg      dv               ZUe3dw        ZVejr                  ju                  dj e-       e'      dx        ZWejr                  ju                  dj e-       e'      dy        ZXejr                  ju                  dz e-       e'      ejr                  ju                  d{d*d/g      ejr                  ju                  d|d*d/g      ejr                  ju                  d}g d~      ejr                  ju                  dg d      d                                    ZYejr                  j                  e j                  j                  d      dk7  d      d        Z]ejr                  ju                  d& e-       e'      ejr                  ju                  de6      ejr                  ju                  dg d      ejr                  ju                  dg d      d                             Z^ejr                  ju                  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jr                  ju                  dddg      ejr                  ju                  dd*d/g      d               Zaejr                  ju                  dg d      ejr                  ju                  d& e-       e'      d               Zbejr                  ju                  d& e-       e'      d        Zcejr                  ju                  de6      ejr                  ju                  dd*d/g      d               Zdejr                  ju                  d e-       e'      ejr                  ju                  dg d      d               Zeejr                  ju                  d& e-             ejr                  ju                  dg d      d               Zfejr                  ju                  dg d      d        Zgejr                  ju                  dd/d*g      ejr                  ju                  d e-             d               Zhy)    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                 <    t        |       \  }}|t        u sJ |rJ y)z.Check that get_namespace returns NumPy wrapperN)r   r!   )r-   xp_outis_array_api_compliants      `/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/sklearn/utils/tests/test_array_api.py"test_get_namespace_ndarray_defaultr6   5   s.     &31%5"F"Y%%%%    c                     t        j                  g d      } t        |       \  }}|j                  ddd      }t	        |dgdz         t        j                  t        d      5  |j                  dd	       d
d
d
       y
# 1 sw Y   y
xY w)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   =   sv    i Aa IFARC>JJ
+	z)=	> (R'( ( (s   %BBc                      t        j                  g dg      } t        d      5  t        |       \  }}|sJ |t        u sJ 	 ddd       y# 1 sw Y   yxY w)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   sZ     ==)%D	4	0 #)6t)<&&%%% """# # #s   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       y# 1 sw Y   yxY w)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\     
Y	24D	EB	4	0 #)6r):&&))) """# # #s   AAc                      t        d      5  t        t        j                  g dg            \  } }|rJ | t        u sJ 	 ddd       y# 1 sw Y   yxY w)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   sU     
4	0 #)6r||YK7P)Q&&))) """# # #s   3A

Ac                 H   t        j                  d      }t        j                  g dg      }|j                  |      }t	        d      5  t        |      \  }}|sJ t        j                  t              5  t        ||      \  }}ddd       d }| j                  d|       t        j                  j                  d      d	k7  sJ t        j                  t        d
      5  t        |       ddd       ddd       y# 1 sw Y   zxY w# 1 sw Y   xY w# 1 sw Y   yxY w)z'Test get_namespace for ArrayAPI arrays.array_api_strictr.   TrL   Nc                     | dk(  ryy )NSCIPY_ARRAY_API0 )keys    r5   mock_getenvz1test_get_namespace_array_api.<locals>.mock_getenv   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
    
		/	0B==)%D::dD	4	0  )6t)<&&%%%]]9% 	G-:4-F*F*	G	 	,k:zz~~/0C777]]7
 	  $		    	G 	G	  	    s=   ,D7D AD#D/D D		DD	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                    | d   dk(  rt        j                  dd      }t        |d   |d         }t        | d   | d         }t        d      5  t	        |j                  dg|d               }| d   dk(  rj                  d	      }n| d   }|j                  g d
|      }t        |||      }t        |      d   |k(  sJ t	        |      |k(  sJ 	 ddd       y# 1 sw Y   yxY w)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	9B#KNKNCH	4	0 ,QC	!=>q>//+22<@L&q>L  < @Eb9	Y'*b000i G+++, , ,s   BC  C)c                  p   t        dd      } t        dd      }t        j                  g d      }t        j                  g d      }t        j                  g d      }t        d	      5  |j                  d
g      j                  }t        |d| d      \  }}||u sJ |J d}t        j                  t        |      5  t        ||||       ddd       t        j                  t        |      5  t        |d||       ddd       ddd       y# 1 sw Y   ExY w# 1 sw Y   xY w# 1 sw Y   yxY w)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2H#GU3Hll<(Gll<(G++i(K	4	0 C%%qc*11
 #7DXdK'!!! H]]9C0 	JG[XjI	J]]9C0 	CGThzB	CC C	J 	J	C 	CC Cs=   *AD, D#D,3D D,D	D, D)	%D,,D5	array_apirA   r_   c                     t        j                  |       }|j                  g d      }t        |d|      }t	        j                  |      }|j
                  d   sJ y)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      sP     
		Y	'B


?#A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                    t        | |      }t        j                  g dg dg|      }|j                  ||      }|*t        j                  ||      }|j                  ||      }t        d      5  t	        ||||      }	t
        t        d      k  st
        t        d	      k\  rt        |      t        |	      k(  sJ d d d        t        	|      }	t        |	|t        |      
       y # 1 sw Y   -xY w)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      s    J 
ow	7B}}i3:FHzz(7z3H--z:**WW*5	4	0 6(w)Tg..*g@V2V (#vf~5556 vr*FFH>*+EF6 6s   5AC..C7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|        |j                  ||      }d	}t        d
      5  t        j                  t        |      5  t        |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)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	6B}}aV:6emm	
Aj? : H !++2()''9:K9LMNzz(6z2HKG$/)9 		     s$    C%<CC%C"	C%%C.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|      }|j                  ||      }t        j                  ||      }|j                  ||      }t        d      5  t	        j
                  ||      5  t        |||       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)	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   ,  s    B 
ov	6B}}i3:FHzz(6z2HmmG:6Gjjj0G	4	0 7&--Y2W 7g67 7 7 7 7 7s$   3B7B+B7+B4	0B77C c                  8    t               J t        d d      J y )Nr   r@   rc   r7   r5   test_device_none_if_no_inputr   Y  s#    8$'''r7   c                      G d d       G fdd      } t        j                  t              5  t         | d      j                         d d d        t	         | d       | d            J d}t        d	
      5  t        j                  t        |      5  t	         | d       | d             d d d         | d      } | d      }|j                  t	        |      k(  sJ |j                  t	        ||      k(  sJ |j                  t	        |||      k(  sJ 	 d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nc                   $    e Zd Zd Zd Zd Zd Zy)&test_device_inspection.<locals>.Devicec                     || _         y Nr   )selfr   s     r5   __init__z/test_device_inspection.<locals>.Device.__init__b  s	    DIr7   c                 4    | j                   |j                   k(  S r   r   )r   r   s     r5   __eq__z-test_device_inspection.<locals>.Device.__eq__e  s    99++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    99r7   N)__name__
__module____qualname__r   r   r   r   rc   r7   r5   r{   r   a  s    		,	=	r7   r{   c                       e Zd Z fdZy)%test_device_inspection.<locals>.Arrayc                       |      | _         y r   r@   )r   device_namer{   s     r5   r   z.test_device_inspection.<locals>.Array.__init__o  s     -DKr7   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	! %U8_##$% %,g/777 ?G	4	0 
?]]:W5 	15<w0	1 xx}}v...}}vv 6666}}vvv >>>>
? 
?% %	1 	1
? 
?s0   D%=D=D12A)D=%D.1D:	6D==E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   ||j                  |            }ddd       t	        |      }t        ||       y# 1 sw Y   "xY w)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 *2::a=)* vr*FFH%	* *s   AA$znamespace, _device, _dtypec                 t   t        | |      }g dg dg dg dg}|j                  ||      }t        d      5  t        |      }d d d        t	        |      }t        j                  |d	      }t        ||       t        |      r%t        j                  |      j                  d
   sJ y y # 1 sw Y   ixY w)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	1B	9l;Ezz%z0H	4	0 "!" vr*F{{5,HHf%2}}V$**>::: " "s   B..B7rr   rs   c                 \   t        j                  |       }| dk(  rO|j                  j                  j	                         st        j
                  d       |j                  g dd      }n|j                  g d      }t        ||      }t        j                  g d      }t        ||       y)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'{{((*KK,-

?6
:

?+e+EmmO4OE?+r7   c                      t        j                  d      } | j                  g dd      }t        ||       }t	        j                  g d      }t        ||       y)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    sH    (EmmOEm:Gg%0EmmO4OE?+r7   c                       e Zd ZddZy)SimpleEstimatorNc                 <    || _         |j                  d   | _        | S )Nr   )X_shapen_features_)r   r-   ys      r5   fitzSimpleEstimator.fit  s    771:r7   r   )r   r   r   r  rc   r7   r5   r  r    s    r7   r  zarray_namespace, converterc                 >    | j                         j                         S r   )r;   rA   r   s    r5   <lambda>r    s    		 1 1 3 r7   c                 ,    t        j                  |       S r   )rA   rB   r  s    r5   r  r  	  s    5==+? r7   c                 "    | j                         S r   )rl   r  s    r5   r  r  
  s    uyy{ r7   c                     t        j                  |       }|j                  ddgg      }t               j	                  |      }t        ||      }t        |j                  t        j                        sJ y)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    s_     
		_	-B


S#J< A




"C.sI>Ggjj%--000r7   c                      t        j                  d      t        j                  ddgg      } t	               j                  |       }t        |fd      }t        |j                  d      sJ y)z0Convert estimator attributes to ArrayAPI arrays.r_   r   r   c                 &    j                  |       S r   )rB   )r   ro   s    r5   r  z5test_convert_estimator_to_array_api.<locals>.<lambda>   s    "**UBS 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_     
		/	0B==3*&D




%C.s4STG7::4555r7   c                     t        | |      }t        rt        |      |j                  k(  sJ y t        |      |j                  k(  sJ y r   )r%   r)   r   int32int64)r   r   r   ro   s       r5   test_indexing_dtyper"  $  sA     
i	1Bb!RXX---b!RXX---r7   c                 x    t        | |      }|dk(  r|j                  n|j                  }t        ||      |k(  sJ y )Nru   )r%   float32float64r   )r   r   r   ro   expected_dtypes        r5   test_max_precision_float_dtyper'  2  s;     
i	1B#*e#3RZZN%b'2n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                  |      j                  |df      j	                  |      z  }	t        j
                  t        j                  d      |      }
|j                  |	|      }|j                  |
|      }t        j                  |	|
||      }t        d      5  t        |||||      }d d d        t        t        |	      |       y # 1 sw Y   !xY w)
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  =  s     
ov	6BA%,,|,44aV<CCINNGKKR 0	BMGF3Jzz-z?zz##	H 
4	0 
*'

 (B7B
 
s   ?C00C9ra   rf   zSCIPY_ARRAY_API not set to 1.rw   c                  t   t        j                  d      } ddlm} | j	                  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        y # 1 sw Y   y xY w)	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  s    
 (EHQu5||A '??P&Q#I|V&67::::>> 
4	0 2*BCT*U'	<L(((|*11111	2 2 2s   9+B..B7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 }	 | ||      ||	      }
|j                  ||      }t        d      5  t        |||	||      }d d d        t        t        |      |
       t        t        d      k  st        t        d      k\  rt        |      t        |      k(  sJ y y # 1 sw Y   _xY w)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	ow	7BKKJ	9iPQEU"o6	w	&&?zR#e4}H zz%z0H	4	0 
4}G


 %f4h?M'**jM'<R.R h6&>111 /S
 
s   %DD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       y# 1 sw Y   yxY w)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ub12 2 2s	   ?Afunctionfilladdc_contiguityc                    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        |j                         t        j                  d              ||g d|       |dk(  rt        j                  d	      }n+t        j                  d      t        j                  d	      z   }t        |j                         |       t        j                  g d
      } ||||       |dk(  r|}n.|t        j                  d	      z   t        j                  d      z   }t        |j                         |       y)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2ENN$ejj&67	26Q

4(5<<?:ENN$m4\*J
B6""U\\!_4uzz$7GGENN$m4r7   r   )standard
transposednon-contiguousc                 >   t        ||      }t        j                  d|      }| dk(  r8|j                  |j	                         |      j
                  }|j
                  }n`| dk(  r:|j                  |j	                         |      ddddddf   }|ddddddf   }n!|j                  |j	                         |      }t        j                  |d	       t        d
      5  t        |d|       ddd       t        t        ||      |       y# 1 sw Y   !xY w)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	7B{{64H::hmmog:>@@::	"	"::hmmog:>ssCaCxHCaC1H%::hmmog:>	a(	4	0 1xqR01 (b98D1 1s   $DDc                 T   t        | |      }t        dd      }t        j                  d|      }|j                  |j	                         |      }g d}t        |||       t        d	      5  t        |||       ddd       t        t        ||
      |       y# 1 sw Y   !xY w)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	7B $/E{{64Hzz(--/'z:HG87u5	4	0 7xw267 (b98D7 7s   /BB'dispatchc                    t        j                  dg      }|rt        |dd       nd } | t        j                  dgg             | t        j                  dgg            }}|r*t        j                  j                  d      t        d      t        |      5  t        ||      J t        ||      |k(  sJ t        ||      d   J t        ||      d   |k(  sJ 	 d d d        y # 1 sw Y   y xY w)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'&(D"ASWqcU+,mEKK!<N.OqABJJNN#45=QRR	8	4 Ua|###a $????'1-a0888'62159TTTT	U U Us   AC))C2znamespace, device, dtype_name)Nr   r/   c                    t        | |      }t        j                  j                  d      }|j	                  ddd      j                  |      }t        j                  ||      }|j                  ||      }t        d	      5  t        ||      }	|j                  d
k7  r.t        |	      d   |k(  sJ |	j                  |j                  k(  sJ d d d        t        |t        	|             y # 1 sw Y   !xY w)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}    s     
i	0B
,,
"
"1
%C;;3Sv;6==jIDT-I::d6:*D	4	0 3Dt,	;;,, !+A."444##t{{2223 I0rBC3 3s   AC00C9)r   r/   Nc                    t        | |      }t        j                  g dg dg dddt        j                   gg dg|      }|j                  ||      }t        j
                  j                  ||	      }d
t        |      v rdnd}| dk(  r|dk(  s| dk(  r&dt        |      v rt        t        ||	      ||       t        d      5  t        ||	      }	t        |	|      }	t        ||	|       d d d        t        j                  dt        j                  dgg dt        j                  ddgddt        j                   gg dg|      }
|j                  |
|      }t        j
                  j                  |
|	      }t        d      5  t        ||	      }t        ||      }t        |||       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)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	7B}}!eiiZ 	
 	H zz(7z3H]]$$XD$9FJ/4UD 	7"w%'7--%3w<2G
8$7dK	4	0 3H40"62.T23 		4 YY1!eiiZ 	
 	J Jw7J}}&&z&=H	4	0 7jt4$Xr2(67 7)3 3(7 7s   	(F>(G
>G
G)r   r   expected_types))rA   Nr%  r$  float16)r_   N)r%  r$  )rs   r;   r  )rs   r?   r  )rs   ru   )r$  r  c                 n    t        | |      t        |      }t        fd|D              }||k(  sJ y )Nr@   c              3   6   K   | ]  }t        |        y wr   )rl  ).0r   ro   s     r5   	<genexpr>z-test_supported_float_types.<locals>.<genexpr>  s     NWR,Ns   )r%   r"   tuple)r   r   r  float_typesr   ro   s        @r5   test_supported_float_typesr  r  s;     
i	1B(G<KN~NNH("""r7   use_sample_weightznamespace, device_, dtype_namec                 ^   d}d}t         j                  j                  d      }|j                  d||      j	                  |      }|j                  ||      j	                  |      }t        ||      }	|	j                  ||      }
|	j                  ||      }| r1t        j                  |      }d|ddd<   |	j                  ||      }nd	\  }} t        |
      |||      }t        d      5  t        |
|||	      }ddd       t        j                  |      sJ y# 1 sw Y   "xY w)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	1B::a:(Djjgj.G*add::mG:D*4''6!I6]G 
4	0 
(0@R


 =='***
 
s   2D##D,)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 }u}}Y7CD& E&	( )# )# )D
# )
# )# )# )  ) 4 ^%6;OP%;OP_&7<QR_&6;OP&.	

,,.C2 w0B&CD* E* *-/'  
 ( 	 	q$(	q$A
4+	aSz2
sQo.	!TD$<0
QD)$	AtdD\*
Y	D/:
Y	D1a&1	q%#	q%!R!
5),	aA/
sQ/	!US#J/
QE;'	Auq"g&
Y	E;7
Y	EAr731:G;DG, )-uM'  

* )-tL'  
 % F$		
 VH#	
 		
 
RG&(RS)273<7( ),? ),?d )$JK
Q			GQ'
R%))	gr*
))UYY	%))4EIIuyy9;GG!$	
 EIIuyy9;GG!$%))S!	

 Q			GQ'
Q			GQ'99*uyyj	!7UYYJ7EIIuyy9;GG!$	
 EIIuyy9;GG!$%))S!	

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