
    /Цi                     D   S SK r S SKJr  S SKrS SKrS SKrS SKJr  S SK	J
r
  S SKJr  S SKJr  S SKJr  S SKJrJrJrJrJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-  S SK.J/r/J0r0J1r1J2r2J3r3  S S	K4J5r5J6r6J7r7J8r8  \Rr                  Ru                  S
\Rv                  " / SQ5      / SQ/5      S 5       r<S r=\3S 5       r>\3\Rr                  Ru                  S/ SQ5      S 5       5       r?\3S 5       r@\3S 5       rA\Rr                  Ru                  S\R                  " SSSS9\R                  " SSSS9\R                  " SSSS9\R                  " SSSS9\R                  " SSSS9/5      S  5       rCS! rD\Rr                  Ru                  S"S#S$/5      S% 5       rE\Rr                  Ru                  S&\-" 5       \S'9\Rr                  Ru                  S(S)SS S*/ S+Q4SS,S*S-S./4S*S//S S*/ SQ4/ S0QS,S*S1S2/4S3S4/S S*/ S5Q4/ S6QS,S*S7S8/4S,S-/S S*/ S9Q4/ S:QS,S*S;S</4/ SQ/ SQ/S S*/ S+Q4/ S=Q/ S>Q/S,S*S-S./4S?SS S// S@Q4SS,S/SASB/4S*S//S S// SQ4/ S0QS,S/SCSD/4S3S4/S S// SEQ4/ S6QS,S/SFSG/4S,S-/S S// SHQ4/ S:QS,S/SDSI/4/ SQ/ SQ/S S// SJQ4/ S=Q/ S>Q/S,S/SKSL/4/5      SM 5       5       rF\Rr                  Ru                  SN\-" S/SO9\S'9SP 5       rG\Rr                  Ru                  SN\-" S*SO9\S'9\Rr                  Ru                  SQSS,S-/\HSR4S S,S-//\I\H4SS4S / STQ\ISS4S SUS,/\JSV445      SW 5       5       rKSX rL\3SY 5       rM\3\Rr                  Ru                  SZ/ S[Q5      \Rr                  Ru                  S\S,S-\R                  /\#S,4S,S]\R                  * /\#S]4\R                  \R                  /\#\R                  4/ SQ\R                  \R                  \R                  // S^Q/\" \#S S_9/ S`Q4/ SQ\R                  \R                  \R                  // S^Q/\" \#S,S_9Sa\R                  Sb/4S,S-\R                  /\!S-4S,S-\R                  /\!S-4\R                  * \R                  * /\!\R                  * 4/ SQ\R                  \R                  \R                  // S^Q/\" \!S S_9/ ScQ4/ SQ\R                  \R                  \R                  // S^Q/\" \!S,S_9Sd\R                  Se/4S,S-\R                  /\"S14S,S]\R                  * /\"Sf4\R                  * \R                  * /\"\R                  * 4/ SQ\R                  \R                  \R                  // S^Q/\" \"S S_9/ S+Q4/ SQ\R                  \R                  \R                  // S^Q/\" \"S,S_9Sg\R                  Sh/4/5      Si 5       5       5       rP\Rr                  Ru                  Sj\-" 5       \S'9Sk 5       rQ\3\Rr                  Ru                  SZSlSm/5      Sn 5       5       rRSo rS " Sp Sq\5      rT\3\Rr                  Ru                  SrSmSs 4S$St 4SlSu 4/5      Sv 5       5       rU\3Sw 5       rV\Rr                  Ru                  Sj\-" 5       \S'9Sx 5       rW\Rr                  Ru                  Sj\-" 5       \S'9Sy 5       rX\Rr                  Ru                  Sz\-" 5       \S'9\Rr                  Ru                  S{S*S//5      \Rr                  Ru                  S|S*S//5      \Rr                  Ru                  S}/ S~Q5      \Rr                  Ru                  S/ SQ5      S 5       5       5       5       5       rY\Rr                  R                  \ R                  R                  S5      S:g  SS9S 5       r]\Rr                  Ru                  S&\-" 5       \S'9\Rr                  Ru                  S\65      \Rr                  Ru                  S/ SQ5      \Rr                  Ru                  S/ SQ5      S 5       5       5       5       r^\Rr                  Ru                  S\R                  " / SQ5      S,S4\R                  " S,S-/SCS//5      \R                  " / SQ5      S4\R                  " S,S-/SCS//5      / SQS4\R                  " S,S-/SCS//5      \R                  " S,S-/SCS//5      S4/5      S 5       r`\Rr                  Ru                  SSS/5      \Rr                  Ru                  SS*S//5      S 5       5       ra\Rr                  Ru                  S/ SQ5      \Rr                  Ru                  S&\-" 5       \S'9S 5       5       rb\Rr                  Ru                  S&\-" 5       \S'9S 5       rc\Rr                  Ru                  S\65      \Rr                  Ru                  SS*S//5      S 5       5       rd\Rr                  Ru                  S\-" 5       \S'9\Rr                  Ru                  S/ SQ5      S 5       5       re\Rr                  Ru                  S&\-" 5       5      \Rr                  Ru                  S/ SQ5      S 5       5       rf\Rr                  Ru                  S/ SQ5      S 5       rg\Rr                  Ru                  SS/S*/5      \Rr                  Ru                  S\-" 5       5      S 5       5       rhg)    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                 F    [        U 5      u  pU[        L d   eU(       a   eg)z.Check that get_namespace returns NumPy wrapperN)r   r!   )r-   xp_outis_array_api_compliants      a/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/sklearn/utils/tests/test_array_api.py"test_get_namespace_ndarray_defaultr6   5   s+     &31%5"FY%%%%    c                     [         R                  " / SQ5      n [        U 5      u  pUR                  SSSS9n[	        US/S-  5        [
        R                  " [        SS9   UR                  SSS	9  S
S
S
5        g
! , (       d  f       g
= f)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   =   sk    i Aa IFRC>JJ
+	z)=	>R' 
?	>	>s    A::
Bc                      [         R                  " / SQ/5      n [        SS9   [        U 5      u  pU(       d   eU[        L d   e SSS5        g! , (       d  f       g= f)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   sN     ==)%D	4	0)6t)<&%%% """ 
1	0	0s   "A
Aconstructor_name)pyarrow	dataframepolarsseriesc                     [        / SQ/ SQ/U 5      n[        SS9   [        U5      u  p#U(       a   eU[        L d   e SSS5        g! , (       d  f       g= f)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   sP     
Y	24D	EB	4	0)6r):&))) """ 
1	0	0s   "A
Ac                      [        SS9   [        [        R                  " / SQ/5      5      u  pU(       a   eU [        L d   e SSS5        g! , (       d  f       g= f)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   sI     
4	0)6r||YK7P)Q&))) """ 
1	0	0s   9A
Ac                 h   [         R                  " S5      n[        R                  " / SQ/5      nUR                  U5      n[	        SS9   [        U5      u  pEU(       d   e[         R                  " [        5         [        X25      u  pESSS5        S nU R                  SU5        [        R                  R                  S5      S	:w  d   e[         R                  " [        S
S9   [        U5        SSS5        SSS5        g! , (       d  f       N~= f! , (       d  f       N(= f! , (       d  f       g= f)z'Test get_namespace for ArrayAPI arrays.array_api_strictr.   TrL   Nc                     U S:X  a  gg )NSCIPY_ARRAY_API0 )keys    r5   mock_getenv1test_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_apirr   u   s     
		/	0B==)%D::dD	4	0)6t)<&%%%]]9%-:4-F*F &	 	,k:zz~~/0C777]]7
 $	
 
1	0 &%
 
 
1	0s=   
1D#;D	AD#$D0D#
D	D#
D 	D##
D1zarray_input, reference)cupyN)torchr?   zcupy to torch cuda)id)rt   mps)rA   Nztorch mps to numpyznumpy to torch cudaznumpy to torch mps)r_   Nzarray_api_strict to torch mpsc                    U S   S:X  a  [         R                  " SSS9n[        US   US   5      n[        U S   U S   5      n[        SS9   [	        UR                  S/US   S95      nU S   S:X  a  WR                  S	5      nOU S   nUR                  / S
QUS9n[        XsUS9n[        U5      S   U:X  d   e[	        U5      U:X  d   e SSS5        g! , (       d  f       g= f)z7Check conversion between various namespace and devices.r   r_   zarray-api-strict not availablereasonr/   TrL   r@   
CPU_DEVICEr.   rp   r   N)	rD   rh   r%   r   r   rB   Devicer    r   )	array_input	referencer_   rp   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  < @E9	Y'*b000i G+++ 
1	0	0s   A?C
C#c            	      n   [        SS5      n [        SS5      n[        R                  " / SQ5      n[        R                  " / SQ5      n[        R                  " / SQ5      n[        SS	9   UR                  S
/5      R                  n[        USU SS9u  pgXbL d   eUb   eSn[        R                  " [        US9   [        X$XS9  SSS5        [        R                  " [        US9   [        USXS9  SSS5        SSS5        g! , (       d  f       ND= f! , (       d  f       N(= f! , (       d  f       g= f)z*Check sparse inputs are handled correctly.rA   Nrt   r;   )r   r/   r0   r1   )r   r/   r   r/   r.   TrL   r/   r{   z6Sparse arrays are only accepted \(and passed through\)r=   )r%   r[   r\   rA   r   r   rB   r   r    rD   rE   ri   )	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%%qc*11
 #7DXdK!!! H]]9C0GXI 1]]9C0GThB 1 
1	0 1000 
1	0s=   *AD&;D!D&'D3D&
D	D&
D#	D&&
D4	array_apirA   r_   c                     [         R                  " U 5      nUR                  / SQ5      n[        USUS9n[        R                  " U5      nUR
                  S   (       d   eg)z=Test _asarray_with_order passes along order for NumPy arrays.)g333333?g333333@gffffff@F)orderrp   F_CONTIGUOUSN)rD   rh   rB   r	   rA   flags)r   rp   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                    [        X5      n[        R                  " / SQ/ SQ/US9nUR                  XS9nUb#  [        R                  " X2S9nUR                  X1S9n[        SS9   [	        XX5S9n	[
        [        S5      :  d  [
        [        S	5      :  a  [        U5      [        U	5      :X  d   eS S S 5        [        W	U5      n	[        X[        U5      S
9  g ! , (       d  f       N.= f)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   expectedrp   array_inresults
             r5   test_averager      s    J 
o	7B}}i3:FHzz(z3H--:**W*5	4	0(wTg..*g@V2V (#vf~555 
1 vr*FF>*+EF 
1	0s   %AC
C&z#array_namespace, device, dtype_name)include_numpy_namespacesc                    [        X5      n[        R                  " SS/US9S[        R                  " SS/US9-  -   nUR                  R                  n[        X55      (       d  [        R                  " U  SU 35        UR                  XAS9nS	n[        S
S9   [        R                  " [        US9   [        U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)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   rp   r   complex_type_nameerr_msgs          r5   $test_average_raises_with_wrong_dtyper     s     
o	6B}}aV:6emm	
Aj? : H !++2))''9:K9LMNzz(z2HKG$/)9 	: 	0/99 	0/s$   C!3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                 j   [        X5      n[        R                  " / SQ/ SQ/US9nUR                  XS9n[        R                  " XBS9nUR                  XAS9n[        SS9   [        R
                  " XVS9   [        XUS9  S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)	Nr.   r   r   r@   TrL   r=   )r   r   )r%   rA   rB   r   rD   rE   r   )	r   r   r   r   r   error	error_msgrp   r   s	            r5   +test_average_raises_with_invalid_parametersr   ,  s    B 
o	6B}}i3:FHzz(z2HmmG6Gjjj0G	4	0&--2Wg6 3X	0	02W2W	0	0s$   "B$7BB$
B!	B$$
B2c                  <    [        5       b   e[        S S5      b   eg )Nr   r@   rc   r7   r5   test_device_none_if_no_inputr   Y  s#    8$'''r7   c                    ^  " S S5      m " U4S jS5      n [         R                  " [        5         [        U " S5      R                  5        S S S 5        [	        U " S5      U " S5      5      b   eSn[        S	S
9   [         R                  " [        US9   [	        U " S5      U " S5      5        S S S 5        U " S5      nU " S5      nUR                  [	        U5      :X  d   eUR                  [	        X#5      :X  d   eUR                  [	        X"U5      :X  d   e S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nc                   ,    \ rS rSrS rS rS rS rSrg)&test_device_inspection.<locals>.Deviceia  c                     Xl         g Nr   )selfr   s     r5   __init__/test_device_inspection.<locals>.Device.__init__b  s    Ir7   c                 4    U R                   UR                   :H  $ r   r   )r   r   s     r5   __eq__-test_device_inspection.<locals>.Device.__eq__e  s    99++r7   c                     [        S5      e)NzDevice object is not hashable)ri   r   s    r5   __hash__/test_device_inspection.<locals>.Device.__hash__h  s    ;<<r7   c                     U R                   $ r   r   r   s    r5   __str__.test_device_inspection.<locals>.Device.__str__k  s    99r7   r   N)	__name__
__module____qualname____firstlineno__r   r   r   r   __static_attributes__rc   r7   r5   r|   r   a  s    		,	=	r7   r|   c                   "   > \ rS rSrU 4S jrSrg)%test_device_inspection.<locals>.Arrayin  c                     > T" U5      U l         g r   r@   )r   device_namer|   s     r5   r   .test_device_inspection.<locals>.Array.__init__o  s     -DKr7   r@   N)r   r   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   ri   hashr   r   rF   )r   r   array1array2r|   s       @r5   test_device_inspectionr   _  s
    . . 
y	!U8_##$ 
" %,g/777 ?G	4	0]]:W55<w0 6 xx}}v...}}v 6666}}vv >>>> 
1	0 
"	! 65 
1	0s0   D$=ED50A*E$
D25
E	?E
Elibrary)rA   r_   rt   zX,reduction,expected)rV   r         @r         ?r:         @r         @)r         @r   r   r   g      r:   r   c                     [         R                  " U 5      n[        SS9   U" UR                  U5      5      nSSS5        [	        WU5      n[        XS5        g! , (       d  f       N&= f)z-Check NaN reductions like _nanmin and _nanmaxTrL   N)rD   rh   r   rB   r   r   )r   r-   	reductionr   rp   r   s         r5   test_nan_reductionsr     sS    ` 
		W	%B	4	02::a=) 
1 vr*FF%	 
1	0s   A
A&znamespace, _device, _dtypec                 ~   [        X5      n/ SQ/ SQ/ SQ/ SQ/nUR                  XAS9n[        SS9   [        U5      nS S S 5        [	        WU5      n[
        R                  " USS	9n[        Xv5        [        U5      (       a+  [
        R                  " U5      R                  S
   (       d   eg g ! , (       d  f       Nv= f)Nr.   r   )r   r   r   )r9      r   r@   TrL   C)r   C_CONTIGUOUS)
r%   rB   r   r   r   rA   ravelr   r   r   )	namespace_device_dtyperp   r   array_xpr   r   s           r5   
test_ravelr    s     
i	1B	9l;Ezz%z0H	4	0! 
1 vr*F{{5,HH%2}}V$**>:::  
1	0s   B..
B<rs   rt   c                 ^   [         R                  " U 5      nU S:X  aR  UR                  R                  R	                  5       (       d  [         R
                  " S5        UR                  / SQSS9nOUR                  / SQ5      n[        X!S9n[        R                  " / SQ5      n[        X45        g)z0Check convert_to_numpy for GPU backed libraries.rt   ztest requires cudar   r?   r@   rp   N)
rD   rh   backendsr?   is_builtr   rB   r   rA   r   )r   rp   X_gpuX_cpuexpected_outputs        r5   test_convert_to_numpy_gpur    s     
		W	%B'{{((**KK,-

?6
:

?+e+EmmO4OE+r7   c                      [         R                  " S5      n U R                  / SQSS9n[        XS9n[        R                  " / SQ5      n[        X#5        g)z.Check convert_to_numpy for PyTorch CPU arrays.rt   r   r;   r@   r  N)rD   rh   rB   r   rA   r   )rt   X_torchr	  r
  s       r5   test_convert_to_numpy_cpur    sD    (EmmOEm:Gg0EmmO4OE+r7   c                       \ rS rSrSS jrSrg)SimpleEstimatori  Nc                 :    Xl         UR                  S   U l        U $ )Nr   )X_shapen_features_)r   r-   ys      r5   fitSimpleEstimator.fit  s    771:r7   )r  r  r   )r   r   r   r   r  r   rc   r7   r5   r  r    s    r7   r  zarray_namespace, converterc                 >    U R                  5       R                  5       $ r   )r;   rA   r   s    r5   <lambda>r    s    		 1 1 3r7   c                 .    [         R                  " U 5      $ r   )rA   rB   r  s    r5   r  r  	  s    5==+?r7   c                 "    U R                  5       $ r   )rm   r  s    r5   r  r  
  s
    uyy{r7   c                     [         R                  " U 5      nUR                  SS//5      n[        5       R	                  U5      n[        XA5      n[        UR                  [        R                  5      (       d   eg)z(Convert estimator attributes to ndarray.r   r   N)
rD   rh   rB   r  r  r   
isinstancer  rA   ndarray)r   	converterrp   r-   estnew_ests         r5   !test_convert_estimator_to_ndarrayr#    s`     
		_	-B


S#J< A




"C.s>Ggjj%--0000r7   c                     ^ [         R                  " S5      m[        R                  " SS//5      n [	        5       R                  U 5      n[        UU4S j5      n[        UR                  S5      (       d   eg)z0Convert estimator attributes to ArrayAPI arrays.r_   r   r   c                 &   > TR                  U 5      $ r   )rB   )r   rp   s    r5   r  5test_convert_estimator_to_array_api.<locals>.<lambda>   s    "**UBSr7   __array_namespace__N)	rD   rh   rA   rB   r  r  r   r   r  )rN   r!  r"  rp   s      @r5   #test_convert_estimator_to_array_apir(    sb     
		/	0B==3*&D




%C.s4STG7::45555r7   c                     [        X5      n[        (       a  [        U5      UR                  :X  d   eg [        U5      UR                  :X  d   eg r   )r%   r)   r   int32int64)r   r   r  rp   s       r5   test_indexing_dtyper,  $  sA     
i	1Byb!RXX---b!RXX---r7   c                 x    [        X5      nUS:X  a  UR                  OUR                  n[        X15      U:X  d   eg )Nrv   )r%   float32float64r   )r   r   r  rp   expected_dtypes        r5   test_max_precision_float_dtyper1  2  s7     
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           	         [        X5      nUS-  nS[        R                  " U5      R                  US45      R	                  U5      -  n	[        R
                  " [        R                  " S5      US9n
UR                  XS9nUR                  XS9n[        R                  " U	U
UUS9n[        SS9   [        UUUUUS9nS S S 5        [        [        WUS	9U5        g ! , (       d  f       N#= f)
Nr0   r   r   r@   )elementtest_elementsr3  r2  TrL   )r9  r:  rp   r3  r2  r  )r%   rA   arangereshapeastyper   rB   isinr   r   r'   r   )r   r   rH   r2  r3  r4  r5  rp   rr9  r:  
element_xptest_elements_xpr   r   s                  r5   	test_isinrB  =  s     
o	6BA%,,|,44aV<CCINNGKKR 0	BMG3Jzz-z?zz##	H 
4	0*'
 
1 (B7B 
1	0s   1C
C*ra   rg   zSCIPY_ARRAY_API not set to 1.rx   c                     [         R                  " S5      n SSKJn  U R	                  SSS9n[
        R                  " S5      n[        U5      u  pEnU[        U5      S   L d   eU(       a   eUb   e[        SS9   [        U5      u  pEnXAL d   eU(       d   eXbR                  :X  d   e S S S 5        g ! , (       d  f       g = f)	Nrt   r   )rt   r1   r;   r@   TrL   )
rD   rh   "sklearn.externals.array_api_compatrt   r;  rA   r   r   r   r   )rt   torch_compatsome_torch_tensorsome_numpy_arrayr   is_array_apir   s          r5   test_get_namespace_and_devicerI  a  s    
 (EHQu5||A '??P&Q#IV&67::::>> 
4	0*BCT*U'	(((|11111	 
1	0	0s   ;/B44
Ccsr_containerr   )r   r/   Nr   r   sample_weight_type)Nintfloatc           	      ,   SSK Jn  [        X5      n[        R                  " / SQ/ SQ/ SQ/ SQ/ SQ/5      nUS:X  a  [        R
                  " / S	Q5      n	O US
:X  a  [        R
                  " / SQUS9n	OS n	U" U" U5      XIS9n
UR                  XS9n[        SS9   [        XXUS9nS S S 5        [        [        WUS9U
5        [        [        S5      :  d  [        [        S5      :  a  [        U5      [        U5      :X  d   eg g ! , (       d  f       Nd= f)Nr   )count_nonzero)r   r1   r   )r0   r   r   )r   r   r   )r   r   r   rV   r   r   rL  )r/   r0   r0   r1   r/   rM  )g      ?r   r   g	@g333333@r   )r   sample_weightr@   TrL   )r   rQ  rp   r   r  r   r   )sklearn.utils.sparsefuncsrO  r%   rA   r   rB   r   r   r   r   r+   r,   r   )r   r   r   rJ  r   rK  sparse_count_nonzerorp   r   rQ  r   r  r   s                r5   test_count_nonzerorT    s     P	o	7BKKJ	9iPQEU"o6	w	&&?zR#e4H zz%z0H	4	0}G
 
1
 %f4h?M'**jM'<R.R h6&>111 /S 
1	0s   D
Dzarray, value, matchz`array` should be 2DrV   z`value` needs to bez`value` needs to be ac                     [        SS5      n[        R                  " [        US9   [	        XU5        SSS5        g! , (       d  f       g= f)z:Check `_validate_diagonal_args` raises the correct errors.rA   Nr=   )r%   rD   rE   rF   r   )r   valuer>   rp   s       r5   test_validate_diagonal_argsrW    s4     
gt	,B	z	/b1 
0	/	/s	   <
A
functionfilladdc_contiguityc                     [        SS5      nU (       a  [        R                  " S5      nO [        R                  " S5      R                  nUR                  S   U :X  d   eUS:X  a  [
        nO[        nU" USU5        [        UR                  5       [        R                  " S5      5        U" U/ SQU5        US:X  a  [        R                  " S	5      nO-[        R                  " S5      [        R                  " S	5      -   n[        UR                  5       U5        [        R                  " / S
Q5      nU" X6U5        US:X  a  UnO0U[        R                  " S	5      -   [        R                  " S5      -   n[        UR                  5       U5        g)zBCheck `_fill/add_to_diagonal` behaviour correct with numpy arrays.rA   Nr1   rV   r   rY  r/   )r1   )r   r/   r0   r1   )r   r      )r%   rA   rG   Tr   r   r   r   diagonalonesr;  r   )r[  rX  rp   r   funcexpected_diag
fill_arrays          r5   test_fill_and_add_to_diagonalre    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                    [        X5      n[        R                  " SUS9nU S:X  a5  UR                  UR	                  5       US9R
                  nUR
                  nO[U S:X  a7  UR                  UR	                  5       US9SSS2SSS24   nUSSS2SSS24   nOUR                  UR	                  5       US9n[        R                  " USS	9  [        S
S9   [        USUS9  SSS5        [        [        XdS9U5        g! , (       d  f       N"= f)zHCheck array API `_fill_diagonal` consistent with `numpy._fill_diagonal`.)rV   r   r   rg  r@   rh  Nr0   r/   )valTrL   rV  rp   r  )r%   rA   rG   rB   copyr_  fill_diagonalr   r   r'   r   )r   r   r   r   rp   array_npr  s          r5   test_fill_diagonalro    s     
o	7B{{64H::hmmog:>@@::	"	"::hmmog:>ssCaCxHCaC1H%::hmmog:>	a(	4	0xqR0 
1 (98D 
1	0s   C==
Dc                 4   [        X5      n[        SS5      n[        R                  " SUS9nUR                  UR	                  5       US9n/ SQn[        XWUS9  [        SS	9   [        XgUS9  SSS5        [        [        XcS
9U5        g! , (       d  f       N"= f)zMCheck `_add_to_diagonal` consistent between array API xp and numpy namespace.rA   Nr]  r   r@   r.   rk  TrL   r  )	r%   rA   rG   rB   rl  r   r   r'   r   )r   r   r   rp   np_xprn  r  add_vals           r5   test_add_to_diagonalrs    s     
o	7B $/E{{64Hzz(--/'z:HG8u5	4	0x26 
1 (98D 
1	0s   "B		
Bdispatchc                    [         R                  " S/5      nU(       a  [        USS 5      OS nU " [         R                  " S//5      5      U " [         R                  " S//5      5      pTU(       a+  [        R                  R                  S5      c  [        S5      e[        US9   [        XE5      b   e[        XB5      U:X  d   e[        XE5      S   b   e[        XB5      S   U:X  d   e S S S 5        g ! , (       d  f       g = f)Nr/   r   r0   ra   z8SCIPY_ARRAY_API is not set: not checking array_api inputrL   )
rA   r   getattrrk   rl   rm   r$   r   r   r   )rJ  rt  np_arrexpected_numpy_array_deviceabs         r5   test_sparse_devicer{    s     [[!FEM'&(D"ASWqcU+,mEKK!<N.OqBJJNN#45=QRR	8	4a|###a $????'-a0888'2159TTTT	 
5	4	4s   $AC33
Dznamespace, device, dtype_name)Nr   r/   c                    [        X5      n[        R                  R                  S5      nUR	                  SSSS9R                  U5      n[        R                  " XcS9nUR                  XaS9n[        SS	9   [        XS9n	UR                  S
:w  a0  [        U	5      S   U:X  d   eU	R                  UR                  :X  d   eS S S 5        [        U[        W	US95        g ! , (       d  f       N#= f)Nr   g        r   )r   rV   )lowhighsizer   r@   TrL   r_   r  )r%   rA   randomRandomStateuniformr=  medianrB   r   r   r   r   r   r   r   )
r   r   r   r   rp   rngrN   	result_nprq   	result_xps
             r5   test_medianr    s     
i	0B
,,
"
"1
%C;;3Sv;6==jIDT-I::d:*D	4	0D,	;;,, !+A."444##t{{222 
1 I0rBC 
1	0s   7A
C
C,)r   r/   Nc                 d   [        X5      n[        R                  " / SQ/ SQ/ SQSS[        R                  * // SQ/US9nUR                  XQS9n[        R
                  R                  XSS	9nS
[        U5      ;   a  SOSnU S:X  a  US:X  d  U S:X  a   S[        U5      ;   a  [        [        XcS	9XxS9  [        SS9   [        XcS	9n	[        X5      n	[        XyUS9  S S S 5        [        R                  " S[        R                  S// SQ[        R                  SS/SS[        R                  * // SQ/US9n
UR                  XS9n[        R
                  R                  XS	9n[        SS9   [        XS	9n[        X5      n[        XUS9  S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)N)r   r1     )r0   r   r  )ir   r   ir   rP  r   r@   r   r.  gư>g-q=rt   r;   r_   CPU)rtolTrL   r   r  )r%   rA   rB   infscipyspecial	logsumexpstrr   r   r   r   nan)r   r   r   r   rp   rn  r  res_npr  res_xp
array_np_2
array_xp_2res_np_2res_xp_2s                 r5   #test_logsumexp_like_scipy_logsumexpr  ;  s   
 
o	7B}}!eiiZ 	
 	H zz(z3H]]$$X$9FJ/4UD 	7"w%'7--%3w<2G
87K	4	0H0"6.T2 
1 		4 YY1!eiiZ 	
 	J J7J}}&&z&=H	4	0j4$X26 
1	0) 
1	0( 
1	0s   :F(F!
F!
F/)r   r   expected_types))rA   Nr/  r.  float16)r_   N)r/  r.  )rt   r;   r  )rt   r?   r  )rt   rv   )r.  r  c                 h   ^ [        X5      m[        TUS9n[        U4S jU 5       5      nX4:X  d   eg )Nr@   c              3   <   >#    U  H  n[        TU5      v   M     g 7fr   )rv  ).0r   rp   s     r5   	<genexpr>-test_supported_float_types.<locals>.<genexpr>  s     N~WR,,~s   )r%   r"   tuple)r   r   r  float_typesr   rp   s        @r5   test_supported_float_typesr  r  s7     
i	1B(G<KN~NNH"""r7   use_sample_weightznamespace, device_, dtype_namec                 B   SnSn[         R                  R                  S5      nUR                  SXT5      R	                  U5      nUR                  XE5      R	                  U5      n[        X5      n	U	R                  XrS9n
U	R                  XS9nU (       a.  [         R                  " U5      nSUSSS2'   U	R                  XS9nOS	u  p[        US
9" XxUS9n[        SS9   [        XXS9nSSS5        [         R                  " UW5      (       d   eg! , (       d  f       N-= f)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_predictionrQ  TrL   )r  predrQ  rp   )rA   r  r  randintr=  randr%   rB   	ones_liker   r   r   isclose)r  r   r   r   	n_samplesr  r  r  r  rp   y_xppred_xprQ  sample_weight_xpnp_lossxp_losss                   r5   test_half_multinomial_lossr    s    II
,,
"
"2
&CAy,33J?A88I)00<D	i	1B::a:(Djjj.G*add::m:D*4'!I6]G 
4	0(0@
 
1
 =='**** 
1	0s   D
D)irk   	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]   rr   paramr   r   r   r   r   ri   rF   ZeroDivisionErrorr   r   r   r  r  r   r  r  r  r  r#  r(  r,  r1  rB  skipifrl   rm   rI  rT  r   rW  re  ro  rs  r{  r  r  r  r  rc   r7   r5   <module>r     sn   	      ) * - &       <  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KK!Q!Q()KK!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   