
    -iFR                        S SK r S SKJ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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"J#r#J$r$J%r%  S SK&J'r'J(r(J)r)J*r*  \RV                  RY                  S	\RZ                  " / S
Q5      / S
Q/5      S 5       r.S r/\%S 5       r0\%S 5       r1\RV                  RY                  SSS/5      S 5       r2\RV                  RY                  S\ " 5       \S9\RV                  RY                  SSSS S/ SQ4SSSSS/4SS/S S/ S
Q4/ SQSSSS/4S S!/S S/ S"Q4/ S#QSSS$S%/4SS/S S/ S&Q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S.S//4SS/S S/ S
Q4/ SQSSS0S1/4S S!/S S/ S2Q4/ S#QSSS3S4/4SS/S S/ S5Q4/ S'QSSS1S6/4/ S
Q/ S
Q/S S/ S7Q4/ S*Q/ S+Q/SSS8S9/4/5      S: 5       5       r3\RV                  RY                  S;\ " SS<9\S9S= 5       r4\RV                  RY                  S;\ " SS<9\S9\RV                  RY                  S>SSS/\5S?4S SS//\6\54S@4S / SAQ\6S@4S SBS/\7SC445      SD 5       5       r8SE r9\%SF 5       r:\%\RV                  RY                  SG/ SHQ5      \RV                  RY                  SISS\Rv                  /\S4SSJ\Rv                  * /\SJ4\Rx                  \Rx                  /\\Rx                  4/ S
Q\Rv                  \Rv                  \Rv                  // SKQ/\" \S SL9/ SMQ4/ S
Q\Rv                  \Rv                  \Rv                  // SKQ/\" \SSL9SN\Rv                  SO/4SS\Rv                  /\S4SS\Rv                  /\S4\Rx                  * \Rx                  * /\\Rx                  * 4/ S
Q\Rv                  \Rv                  \Rv                  // SKQ/\" \S SL9/ SPQ4/ S
Q\Rv                  \Rv                  \Rv                  // SKQ/\" \SSL9SQ\Rv                  SR/4SS\Rv                  /\S4SSJ\Rv                  * /\SS4\Rx                  * \Rx                  * /\\Rx                  * 4/ S
Q\Rv                  \Rv                  \Rv                  // SKQ/\" \S SL9/ SQ4/ S
Q\Rv                  \Rv                  \Rv                  // SKQ/\" \SSL9ST\Rv                  SU/4/5      SV 5       5       5       r=\RV                  RY                  SW\ " 5       \S9SX 5       r>\%\RV                  RY                  SGSYSZ/5      S[ 5       5       r?S\ r@ " S] S^\
5      rA\%\RV                  RY                  S_SZS` 4SSa 4SYSb 4/5      Sc 5       5       rB\%Sd 5       rC\RV                  RY                  SW\ " 5       \S9Se 5       rD\RV                  RY                  SW\ " 5       \S9Sf 5       rE\RV                  RY                  Sg\ " 5       \S9\RV                  RY                  ShSS/5      \RV                  RY                  SiSS/5      \RV                  RY                  Sj/ SkQ5      \RV                  RY                  Sl/ SmQ5      Sn 5       5       5       5       5       rF\RV                  R                  \ R                  R                  So5      Sp:g  SqSr9Ss 5       rJ\RV                  RY                  S\ " 5       \S9\RV                  RY                  St\(5      \RV                  RY                  Su/ SvQ5      \RV                  RY                  Sw/ SxQ5      Sy 5       5       5       5       rK\RV                  RY                  S\ " 5       \S9\RV                  RY                  SzSS/5      S{ 5       5       rL\RV                  RY                  St\(5      \RV                  RY                  S|SS/5      S} 5       5       rMg)~    N)partial)assert_allclose)config_context)BaseEstimator)_asarray_with_order_atol_for_type_average_convert_to_numpy_count_nonzero _estimator_with_converted_arrays_fill_or_add_to_diagonal_get_namespace_device_dtype_ids_is_numpy_namespace_isin_max_precision_float_dtype_nanmax_nanmean_nanmin_raveldeviceget_namespaceget_namespace_and_deviceindexing_dtype	np_compat)yield_namespace_device_dtype_combinations)SkipTest_array_api_for_tests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      U/var/www/html/venv/lib/python3.13/site-packages/sklearn/utils/tests/test_array_api.py"test_get_namespace_ndarray_defaultr-   *   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$   r*   _
full_arrays       r,   *test_get_namespace_ndarray_creation_devicerA   2   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)r8   r9   r   r   r   )X_npr*   r+   s      r,   (test_get_namespace_ndarray_with_dispatchrF   >   sN     ==)%D	4	0)6t)<&%%% """ 
1	0	0s   "A
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%   TrC   Nc                     U S:X  a  gg )NSCIPY_ARRAY_API0 )keys    r,   mock_getenv1test_get_namespace_array_api.<locals>.mock_getenv[   s    '' (r.   zos.environ.getrJ   1z#scipy's own support is not enabled.r4   )r;   importorskipr8   r9   r   r   r<   	TypeErrorsetattrosenvirongetRuntimeError)monkeypatchxprE   X_xpr*   r+   rN   s          r,   test_get_namespace_array_apir[   M   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	array_apir8   rH   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)orderrY   F_CONTIGUOUSN)r;   rQ   r9   r   r8   flags)r\   rY   r$   X_newX_new_nps        r,   test_asarray_with_orderrd   h   sP     
		Y	'B


?#A4E}}U#H>>.)))r.   z$array_namespace, device_, dtype_name)idsz"weights, axis, normalize, expected)NNT      @T)g      @rf         @r&   r'      F)TTF      ?rg   皙?g?)g?g@g@)rj   皙?rk   g      ?g      @)r(      rh   )r&   r&   r'   g      @g      @)r&   r'   r&   )r'   r'   r'   )NNF   )rh      	         r(   ro   )皙??g?gffffff?gffffff@)ro      rq   rm   )rh               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 S S 5        [
        [        S5      :  d  [
        [        S	5      :  a  [        U5      [        W	5      :X  d   e[        W	U5      n	[        X[        U5      S
9  g ! , (       d  f       Nn= f)Nr%   rl   rh   rp   dtyper7   TrC   )axisweights	normalize2.0.02.1.0)atol)r   r8   r9   r   r	   r"   r#   r   r
   r   r   )
array_namespacedevice_
dtype_namer~   r}   r   expectedrY   array_inresults
             r,   test_averager   t   s    J 
o	7B}}i3:FHzz(z3H--:**W*5	4	0(wT 
1 M'**jM'<R.R h6&>111vr*FF>*+EF 
1	0s   %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)Nr'   r   r{   y              ?rl   r(   z does not support r7   z;Complex floating point values are not supported by average.TrC   r4   )r   r8   r9   r|   namehasattrr;   skipr   r<   NotImplementedErrorr	   )r   r   r   rY   r   complex_type_nameerr_msgs          r,   $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&   r'   r(   rl   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%   rz   r{   r7   TrC   r4   )r}   r~   )r   r8   r9   r   r;   r<   r	   )	r   r   r   r}   r~   error	error_msgrY   r   s	            r,   +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   r7   rL   r.   r,   test_device_none_if_no_inputr      s#    8$'''r.   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>.Device   c                     Xl         g Nr   )selfr   s     r,   __init__/test_device_inspection.<locals>.Device.__init__   s    Ir.   c                 4    U R                   UR                   :H  $ r   r   )r   r   s     r,   __eq__-test_device_inspection.<locals>.Device.__eq__   s    99++r.   c                     [        S5      e)NzDevice object is not hashable)rR   r   s    r,   __hash__/test_device_inspection.<locals>.Device.__hash__  s    ;<<r.   c                     U R                   $ r   r   r   s    r,   __str__.test_device_inspection.<locals>.Device.__str__  s    99r.   r   N)	__name__
__module____qualname____firstlineno__r   r   r   r   __static_attributes__rL   r.   r,   Devicer      s    		,	=	r.   r   c                   "   > \ rS rSrU 4S jrSrg)%test_device_inspection.<locals>.Arrayi  c                     > T" U5      U l         g r   r7   )r   device_namer   s     r,   r   .test_device_inspection.<locals>.Array.__init__	  s     -DKr.   r7   N)r   r   r   r   r   r   )r   s   r,   Arrayr     s    	. 	.r.   r   r   r2   mygpuz.Input arrays use different devices: cpu, mygpuTrC   r4   )r;   r<   rR   hashr   r   r=   )r   r   array1array2r   s       @r,   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)r8   rH   torchzX,reduction,expected)rl   rh         @)r}         ?r1         @r         @)r         @r   r   r   g      r1   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 _nanmaxTrC   N)r;   rQ   r   r9   r
   r   )r   r$   	reductionr   rY   r   s         r,   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%   rz   )rn   rw   ro   )r0      rt   r7   TrC   C)r_   C_CONTIGUOUS)
r   r9   r   r   r
   r8   ravelr   r   ra   )	namespace_device_dtyperY   arrayarray_xpr   r   s           r,   
test_ravelr   e  s     
i	1B	9l;Ezz%z0H	4	0! 
1 vr*F{{5,HH%2}}V$**>:::  
1	0s   B..
B<cupyr   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.r   ztest requires cudar   r6   r7   rY   N)
r;   rQ   backendsr6   is_builtr   r9   r
   r8   r   )r   rY   X_gpuX_cpuexpected_outputs        r,   test_convert_to_numpy_gpur   {  s     
		W	%B'{{((**KK,-

?6
:

?+e+EmmO4OE+r.   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.r   r   r2   r7   r   N)r;   rQ   r9   r
   r8   r   )r   X_torchr   r   s       r,   test_convert_to_numpy_cpur     sD    (EmmOEm:Gg0EmmO4OE+r.   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      r,   fitSimpleEstimator.fit  s    771:r.   )r   r   r   )r   r   r   r   r   r   rL   r.   r,   r   r     s    r.   r   zarray_namespace, converterc                 >    U R                  5       R                  5       $ r   )r2   r8   r   s    r,   <lambda>r     s    		 1 1 3r.   c                 .    [         R                  " U 5      $ r   )r8   r9   r   s    r,   r   r     s    5==+?r.   c                 "    U R                  5       $ r   )rV   r   s    r,   r   r     s
    uyy{r.   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.rs   rg   N)
r;   rQ   r9   r   r   r   
isinstancer   r8   ndarray)r   	converterrY   r$   estnew_ests         r,   !test_convert_estimator_to_ndarrayr     s`     
		_	-B


S#J< A




"C.s>Ggjj%--0000r.   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.rH   rs   rg   c                 &   > TR                  U 5      $ r   )r9   )r   rY   s    r,   r   5test_convert_estimator_to_array_api.<locals>.<lambda>  s    "**UBSr.   __array_namespace__N)	r;   rQ   r8   r9   r   r   r   r   r   )rE   r   r   rY   s      @r,   #test_convert_estimator_to_array_apir     sb     
		/	0B==3*&D




%C.s4STG7::45555r.   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   rY   s       r,   test_indexing_dtyper     sA     
i	1Byb!RXX---b!RXX---r.   c                 x    [        X5      nUS:X  a  UR                  OUR                  n[        X15      U:X  d   eg )Nmps)r   float32float64r   )r   r   r   rY   expected_dtypes        r,   test_max_precision_float_dtyper    s7     
i	1B#*e#3RZZN%b2nDDDr.   zarray_namespace, device, _invertassume_uniqueelement_size)rp   r0   ru   	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)
Nr'   ru   r{   r7   )elementtest_elementsr  r  TrC   )r  r  rY   r  r  r   )r   r8   arangereshapeastyper   r9   isinr   r   r   r
   )r   r   r?   r  r  r  r	  rY   rr  r  
element_xptest_elements_xpr   r   s                  r,   	test_isinr    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*rJ   rP   zSCIPY_ARRAY_API not set to 1.)reasonc                     [         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)	Nr   r   )r   r(   r2   r7   TrC   )
r;   rQ   "sklearn.externals.array_api_compatr   r  r8   r   r   r   r   )r   torch_compatsome_torch_tensorsome_numpy_arrayr   is_array_apir   s          r,   test_get_namespace_and_devicer    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   r(   r   )r'   r   r   )r   r   r   )ro   rw   rn   )rl   r   rh   r!  )r&   r'   r'   r(   r&   r"  )g      ?ri   rr   g	@g333333@r{   )r}   sample_weightr7   TrC   )r}   r%  rY   r   r   r   r   )sklearn.utils.sparsefuncsr$  r   r8   r   r9   r   r   r   r
   r"   r#   r   )r   r   r   r  r}   r   sparse_count_nonzerorY   r   r%  r   r   r   s                r,   test_count_nonzeror(    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wrapc           	      2   [        X5      n[        R                  " SUS9nUR                  UR	                  5       US9n[        R
                  " USUS9  [        SS9   [        USUSUS	9  S S S 5        [        [        XdS
9U5        g ! , (       d  f       N"= f)N)rh   rl   r{   r7   r&   )valr)  TrC   F)valuerY   	add_valuer)  r   )
r   r8   r>   r9   copyfill_diagonalr   r   r   r
   )r   r   r   r)  rY   array_npr   s          r,   test_fill_or_add_to_diagonalr1  @  s     
o	7B{{64Hzz(--/'z:H	ad3	4	0 rUQUV 
1 (98D 
1	0s   B
Bdispatchc                    U " [         R                  " S//5      5      U " [         R                  " S//5      5      p2U(       a+  [        R                  R	                  S5      c  [        S5      e[        US9   [        X#5      b   e[        U[         R                  " S/5      5      b   e[        X#5      S   b   e[        U[         R                  " S/5      5      S   b   e S S S 5        g ! , (       d  f       g = f)Nr&   r'   rJ   z8SCIPY_ARRAY_API is not set: not checking array_api inputrC   )	r8   r   rT   rU   rV   r   r   r   r   )r  r2  abs       r,   test_sparse_devicer6  S  s     qcU+,mEKK!<N.OqBJJNN#45=QRR	8	4a|###aaS)*222'-a0888'5;;s+;<Q?GGG	 
5	4	4s   7A+C,,
C:)NrT   	functoolsr   r8   r;   numpy.testingr   sklearn._configr   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   sklearn.utils._testingr   r   r   r   sklearn.utils.fixesr    r!   r"   r#   markparametrizer9   r-   rA   rF   r[   rd   r   r   rR   r=   ZeroDivisionErrorr   r   r   naninfr   r   r   r   r   r   r   r   r  r  skipifrU   rV   r  r(  r1  r6  rL   r.   r,   <module>rD     s=	   	    ) * &     .  U T u}}Y7CD& E&	( )# )# )  ) 4 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> *-/'  
 $/
E 0
E .9dE]3H 4 :Hr.   