
    e!hW                     ^   d dl Z d dlm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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"m#Z#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z* ejV                  jY                  d	 ejZ                  g d
      g d
g      d        Z.d Z/e%d        Z0e%d        Z1ejV                  jY                  dddg      d        Z2ejV                  jY                  d e              ejV                  jY                  dddd dg dfdddddgfddgd dg d
fg dddddgfdd gd dg d!fg d"ddd#d$gfddgd dg d%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d-d.gfddgd dg d
fg dddd/d0gfdd gd dg d1fg d"ddd2d3gfddgd dg d4fg d&ddd0d5gfg d
g d
gd dg d6fg d)g d*gddd7d8gfg      d9               Z3ejV                  jY                  d: e d;            d<        Z4ejV                  jY                  d: e d;            ejV                  jY                  d=dddge5d>fd ddgge6e5fd?fd g d@e6d?fd dAdge7dBff      dC               Z8dD Z9e%dE        Z:e%ejV                  jY                  dFg dG      ejV                  jY                  dHddejv                  gedfddIejv                   gedIfejx                  ejx                  geejx                  fg d
ejv                  ejv                  ejv                  gg dJg eed K      g dLfg d
ejv                  ejv                  ejv                  gg dJg eedK      dMejv                  dNgfddejv                  gedfddejv                  gedfejx                   ejx                   geejx                   fg d
ejv                  ejv                  ejv                  gg dJg eed K      g dOfg d
ejv                  ejv                  ejv                  gg dJg eedK      dPejv                  dQgfddejv                  gedfddIejv                   gedRfejx                   ejx                   geejx                   fg d
ejv                  ejv                  ejv                  gg dJg eed K      g dfg d
ejv                  ejv                  ejv                  gg dJg eedK      dSejv                  dTgfg      dU                      Z=ejV                  jY                  dV e              dW        Z>e%ejV                  jY                  dFdXdYg      dZ               Z?d[ Z@ G d\ d]e
      ZAe%ejV                  jY                  d^dYd_ fdd` fdXda fg      db               ZBe%dc        ZCdd ZDde ZEejV                  jY                  dV e              df        ZFejV                  jY                  dV e              dg        ZGejV                  jY                  dh e              ejV                  jY                  diddg      ejV                  jY                  djddg      ejV                  jY                  dkg dl      ejV                  jY                  dmg dn      do                                    ZHdp ZIejV                  jY                  d e              ejV                  jY                  dqe(      ejV                  jY                  drg ds      ejV                  jY                  dtg du      dv                             ZJejV                  jY                  d e              ejV                  jY                  dwddg      dx               ZKejV                  jY                  dqe(      ejV                  jY                  dyddg      dz               ZLy){    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_is_numpy_namespace_isin_max_precision_float_dtype_nanmax_nanmean_nanmin_NumPyAPIWrapper_raveldeviceget_namespaceget_namespace_and_deviceindexing_dtypesupported_float_dtypes)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                 L    t        |       \  }}t        |t              sJ |rJ y)z.Check that get_namespace returns NumPy wrapperN)r   
isinstancer   )r$   xp_outis_array_api_compliants      j/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/sklearn/utils/tests/test_array_api.py"test_get_namespace_ndarray_defaultr.   *   s1     &31%5"F"f.///%%%%    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$   r+   _
full_arrays       r-   *test_get_namespace_ndarray_creation_devicerB   2   sv    i Aa IFARC>JJ
+	z)=	> (R'( ( (s   %BBc                  T   t        j                  d      } t        | j                        t        d      k  rt        j                  d       t        j                  g dg      }t        d      5  t        |      \  }}|sJ || j
                  u sJ 	 ddd       y# 1 sw Y   yxY w)	z%Test get_namespace on NumPy ndarrays.array_api_compatz1.9zZarray_api_compat was temporarily reporting NumPy as API compliant and this test would fail)reasonr%   Tarray_api_dispatchN)	r<   importorskipr#   __version__skipr9   r:   r   r   )rD   X_npr+   r,   s       r-   (test_get_namespace_ndarray_with_dispatchrL   >   s     **+=>%112]55II'	

 ==)%D	4	0 0)6t)<&&%%% )/////0 0 0s   1#BB'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%   TrF   Nc                     | dk(  ryy )NSCIPY_ARRAY_API0 )keys    r-   mock_getenvz1test_get_namespace_array_api.<locals>.mock_getenva   s    '' (r/   zos.environ.getrP   1z#scipy's own support is not enabled.r5   )r<   rH   r9   r:   r   r   r=   	TypeErrorsetattrosenvirongetRuntimeError)monkeypatchxprK   X_xpr+   r,   rT   s          r-   test_get_namespace_array_apir_   S   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!	array_apir9   rN   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)orderr]   F_CONTIGUOUSN)r<   rH   r:   r   r9   flags)r`   r]   r$   X_newX_new_nps        r-   test_asarray_with_orderrh   n   sP     
		Y	'B


?#A4E}}U#H>>.)))r/   z$array_namespace, device_, dtype_namez"weights, axis, normalize, expected)NNT      @T)g      @ri         @r&   r'      F)TTF      ?rj   皙?g?)g?g@g@)rm   皙?rn   g      ?g      @r(      rk   )r&   r&   r'   g      @g      @)r&   r'   r&   )r'   r'   r'   )NNF   )rk      	         r(   rs   )皙??g?gffffff?gffffff@)rs      ru   rq   )rk               c                    t        | |      }t        j                  g dg dg|      }|j                  ||      }|*t        j                  ||      }|j                  ||      }t        d      5  t	        ||||      }	d d d        t
        t        d      k  st
        t        d	      k\  rt        |      t        	      k(  sJ t        	|      }	t        |	|t        |      
       y # 1 sw Y   jxY w)Nr%   rp   rk   rt   dtyper8   TrF   )axisweights	normalize2.0.02.1.0)atol)r   r9   r:   r   r	   r"   r#   r   r
   r   r   )
array_namespacedevice_
dtype_namer   r   r   expectedr]   array_inresults
             r-   test_averager   z   s    F 
ow	7B}}i3:FHzz(7z3H--z:**WW*5	4	0 U(w)TU M'**jM'<R.R h6&>111vr*FFH>*+EFU Us   5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)Nr'   r   r   y              ?rp   r(   z does not support r8   z;Complex floating point values are not supported by average.TrF   r5   )r   r9   r:   r   namehasattrr<   rJ   r   r=   NotImplementedErrorr	   )r   r   r   r]   r   complex_type_nameerr_msgs          r-   $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&   r'   r(   rp   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   r8   TrF   r5   )r   r   )r   r9   r:   r   r<   r=   r	   )	r   r   r   r   r   error	error_msgr]   r   s	            r-   +test_average_raises_with_invalid_parametersr      s    @ 
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   r8   rR   r/   r-   test_device_none_if_no_inputr      s#    8$'''r/   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     r-   __init__z/test_device_inspection.<locals>.Device.__init__   s	    DIr/   c                 4    | j                   |j                   k(  S r   r   )r   r   s     r-   __eq__z-test_device_inspection.<locals>.Device.__eq__  s    99++r/   c                     t        d      )NzDevice object is not hashable)rV   r   s    r-   __hash__z/test_device_inspection.<locals>.Device.__hash__  s    ;<<r/   c                     | j                   S r   r   r   s    r-   __str__z.test_device_inspection.<locals>.Device.__str__  s    99r/   N)__name__
__module____qualname__r   r   r   r   rR   r/   r-   Devicer      s    		,	=	r/   r   c                       e Zd Z fdZy)%test_device_inspection.<locals>.Arrayc                       |      | _         y r   r8   )r   device_namer   s     r-   r   z.test_device_inspection.<locals>.Array.__init__  s     -DKr/   N)r   r   r   r   )r   s   r-   Arrayr   
  s    	.r/   r   r   r3   mygpuz.Input arrays use different devices: cpu, mygpuTrF   r5   )r<   r=   rV   hashr   r   r>   )r   r   array1array2r   s       @r-   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)r9   rN   torchzX,reduction,expected)rp   rk         @)r         ?r2         @r         @)r         @r   r   r   g      r2   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 _nanmaxTrF   N)r<   rH   r   r:   r
   r   )r   r$   	reductionr   r]   r   s         r-   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~   )rr   r{   rs   )r1      rx   r8   TrF   C)rc   C_CONTIGUOUS)
r   r:   r   r   r
   r9   ravelr   r   re   )	namespace_device_dtyper]   arrayarray_xpr   r   s           r-   
test_ravelr   g  s     
i	1B	9l;Ezz%z0H	4	0 "!" vr*F{{5,HHf%2}}V$**>::: " "s   B..B7cupyr   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.r   ztest requires cudar   r7   r8   r]   N)
r<   rH   backendsr7   is_builtrJ   r:   r
   r9   r   )r   r]   X_gpuX_cpuexpected_outputs        r-   test_convert_to_numpy_gpur   {  s     
		W	%B'{{((*KK,-

?6
:

?+e+EmmO4OE?+r/   c                      t        j                  d      } | j                  g dd      }t        ||       }t	        j                  g d      }t        ||       y)z.Check convert_to_numpy for PyTorch CPU arrays.r   r   r3   r8   r   N)r<   rH   r:   r
   r9   r   )r   X_torchr   r   s       r-   test_convert_to_numpy_cpur     sH    (EmmOEm:Gg%0EmmO4OE?+r/   c                       e Zd ZddZy)SimpleEstimatorNc                 <    || _         |j                  d   | _        | S )Nr   )X_shapen_features_)r   r$   ys      r-   fitzSimpleEstimator.fit  s    771:r/   r   )r   r   r   r   rR   r/   r-   r   r     s    r/   r   zarray_namespace, converterc                 >    | j                         j                         S r   )r3   r9   r   s    r-   <lambda>r     s    		 1 1 3 r/   c                 ,    t        j                  |       S r   )r9   r:   r   s    r-   r   r     s    5==+? r/   c                 "    | j                         S r   )rZ   r   s    r-   r   r     s    uyy{ r/   c                     t        j                  |       }|j                  ddgg      }t               j	                  |      }t        ||      }t        |j                  t        j                        sJ y)z(Convert estimator attributes to ndarray.rw   rj   N)
r<   rH   r:   r   r   r   r*   r   r9   ndarray)r   	converterr]   r$   estnew_ests         r-   !test_convert_estimator_to_ndarrayr     s_     
		_	-B


S#J< A




"C.sI>Ggjj%--000r/   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.rN   rw   rj   c                 &    j                  |       S r   )r:   )r   r]   s    r-   r   z5test_convert_estimator_to_array_api.<locals>.<lambda>  s    "**UBS r/   __array_namespace__N)	r<   rH   r9   r:   r   r   r   r   r   )rK   r   r   r]   s      @r-   #test_convert_estimator_to_array_apir     s_     
		/	0B==3*&D




%C.s4STG7::4555r/   c                  n   t               } | j                  g dg dg      }| j                  |dd      }|j                  |u sJ | j                  |dd      }|j                  |j                  usJ t	        j
                  t        d	      5  | j                  |d
       ddd       y# 1 sw Y   yxY w)zDCheck reshape behavior with copy and is strict with non-tuple shape.r%   ro   )r   F)copy)rt   r&   Tzshape must be a tupler5   r   N)r   r:   reshapebaser<   r=   rV   )r]   r$   	X_no_copyX_copys       r-   test_reshape_behaviorr     s    		B


Iy)*A

1e%
0I>>QZZ6Z-F;;aff$$$	y(?	@ 


1b  s   B++B4c                     t               } | j                  | j                  | j                        sJ | j                  | j                  d      sJ | j                  | j                  d      sJ | j                  | j                  d      rJ t        |       D ]  }| j                  |d      rJ  | j                  | j                  d      sJ | j                  | j                  d      rJ | j                  | j                  d      sJ | j                  | j                  d      rJ | j                  | j                  d      sJ | j                  | j                  d      rJ | j                  | j                  d      sJ | j                  | j                  d      sJ | j                  | j                  d      sJ | j                  | j                  d      rJ | j                  | j                  d      rJ | j                  | j                  d      sJ | j                  | j                  d      sJ t        j                  t         d      5  | j                  | j                  d	      sJ 	 d
d
d
       y
# 1 sw Y   y
xY w)z2Test isdtype implementation from _NumPyAPIWrapper.zreal floatingboolzsigned integerzunsigned integernumericzcomplex floatingzUnrecognized data typer5   unknownN)r   isdtypefloat32float64int32r   r   int16uint32uint16int64int8	complex64
complex128r<   r=   r>   )r]   r   s     r-   $test_get_namespace_array_api_isdtyper
    s   		B::bjj"**---::bjj/222::bjj/222zz"((O444'+ 2zz%1112 ::bggv&&&zz"**f---::bhh 0111zz"))%5666::bii!3444zz"(($6777::bhh	***::bjj),,,::bii+++zz"**&8999zz"''#5666::bll$6777::bmm%7888	z)A	B /zz"((I.../ / /s   I;;Jc                     t        | |      }t        rt        |      |j                  k(  sJ y t        |      |j                  k(  sJ y r   )r   r    r   r  r  )r   r   r   r]   s       r-   test_indexing_dtyper    sA     
i	1Bb!RXX---b!RXX---r/   c                 x    t        | |      }|dk(  r|j                  n|j                  }t        ||      |k(  sJ y )Nmps)r   r   r  r   )r   r   r   r]   expected_dtypes        r-   test_max_precision_float_dtyper    s;     
i	1B#*e#3RZZN%b'2nDDDr/   zarray_namespace, device, _invertassume_uniqueelement_size)rt   r1   ry   	int_dtype)r  r  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)
Nr'   ry   r   r8   )elementtest_elementsr  r  TrF   )r  r  r]   r  r  r   )r   r9   aranger   astyper   r:   isinr   r   r   r
   )r   r   r@   r  r  r  r  r]   rr  r  
element_xptest_elements_xpr   r   s                  r-   	test_isinr    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c                     t        j                  d      } t        j                  d      }| 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)	Nr   zarray_api_compat.torchr(   r3   r8   r   TrF   )r<   rH   r  r9   r   r   r   r   )r   xp_torchsome_torch_tensorsome_numpy_arrayr   is_array_apir   s          r-   test_get_namespace_and_devicer%  '  s    (E""#;<HQu5||A '??P&Q#I|V&67::::>> 
4	0 2*BCT*U'	<H$$$|*11111	2 2 2s   +B==Ccsr_containerr   )r   r&   Nr   r   sample_weight_type)Nintfloatc                 @   ddl m} t        | |      }t        j                  g dg dg dg dg dg      }|dk(  rt        j
                  g d	      }	n!|d
k(  rt        j
                  g d|      }	nd }	 | ||      ||	      }
|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   r(   r   )r'   r   r   )r   r   r   )rs   r{   rr   )rp   r   rk   r(  )r&   r'   r'   r(   r&   r)  )g      ?rl   rv   g	@g333333@r   )r   sample_weightr8   TrF   )r   r,  r]   r   r   r   r   )sklearn.utils.sparsefuncsr+  r   r9   r   r:   r   r   r   r
   r"   r#   r   )r   r   r   r&  r   r'  sparse_count_nonzeror]   r   r,  r   r   r   s                r-   test_count_nonzeror/  @  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wrapc                    t        | |      }t        j                  dt        j                        }|j	                  |      }t        |d|d|       t        j                  |d|       t        t        ||      |       y )N)rk   rp   r   r&   F)valuer]   	add_valuer0  )valr0  r   )	r   r9   r?   r  r:   r   fill_diagonalr   r
   )r   r   r   r0  r]   array_npr   s          r-   test_fill_or_add_to_diagonalr7  e  sf    
 
ow	7B{{65Hzz(#HXQ2TR	ad3(b98Dr/   dispatchc                     | t        j                  dgg             | t        j                  dgg            }}	 t        |      5  t        ||      J t        |t        j                  dg            J t	        ||      d   J t	        |t        j                  dg            d   J 	 d d d        y # 1 sw Y   y xY w# t
        $ r t        d      w xY w)Nr&   r'   rF   z!array_api_compat is not installed)r9   r   r   r   r   ImportErrorr   )r&  r8  abs       r-   test_sparse_devicer=  r  s     qcU+,mEKK!<N.OqA<x8 	L!Q<'''!U[[!-.666+Aq1!4<<<+Au{{A3/?@CKKK		L 	L 	L
  <:;;<s*   C A'B90C 9C>C C C)MrX   	functoolsr   r9   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parametrizer:   r.   rB   rL   r_   rh   r   r   rV   r>   ZeroDivisionErrorr   r   r   naninfr   r   r   r   r   r   r   r   r
  r  r  r  r%  r/  r7  r=  rR   r/   r-   <module>rJ     s   	    ) * &     .  U T }u}}Y7CD& E&	( )0 )0( )  ) 4 w0B&CD* E* *,U,W ( 	 	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;@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 )\&  "K"M;;" )VW$56, 7 ), ,m  ) 	34	?@	*+1 )1 )6 )6 /F  "K"M..  "K"MEE  "K"M D%=14-85&JKC L 6 9 2C622 *,U,W .9!56-/EF2 G 7 :2> *,U,W $/E 0E .9dE]3	< 4 :	<r/   