
    *YHhFR                        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      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d0d1gfd d!gd dg d2fg d#ddd3d4gfddgd dg d5fg d'ddd1d6gfg d
g d
gd dg d7fg d*g d+gddd8d9gfg      d:               Z3ejV                  jY                  d; e d<      e      d=        Z4ejV                  jY                  d; e d<      e      ejV                  jY                  d>dddge5d?fd ddgge6e5fd@fd g dAe6d@fd dBdge7dCff      dD               Z8dE Z9e%dF        Z:e%ejV                  jY                  dGg dH      ejV                  jY                  dIddejv                  gedfddJejv                   gedJfejx                  ejx                  geejx                  fg d
ejv                  ejv                  ejv                  gg dKg eed L      g dMfg d
ejv                  ejv                  ejv                  gg dKg eedL      dNejv                  dOg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 dKg eed L      g dPfg d
ejv                  ejv                  ejv                  gg dKg eedL      dQejv                  dRgfddejv                  gedfddJejv                   gedSfejx                   ejx                   geejx                   fg d
ejv                  ejv                  ejv                  gg dKg eed L      g dfg d
ejv                  ejv                  ejv                  gg dKg eedL      dTejv                  dUgfg      dV                      Z=ejV                  jY                  dW e        e      dX        Z>e%ejV                  jY                  dGdYdZg      d[               Z?d\ Z@ G d] d^e
      ZAe%ejV                  jY                  d_dZd` fdda fdYdb fg      dc               ZBe%dd        ZCejV                  jY                  dW e        e      de        ZDejV                  jY                  dW e        e      df        ZEejV                  jY                  dg e        e      ejV                  jY                  dhddg      ejV                  jY                  diddg      ejV                  jY                  djg dk      ejV                  jY                  dlg dm      dn                                    ZFejV                  j                  e j                  j                  do      dpk7  dqr      ds        ZJejV                  jY                  d e        e      ejV                  jY                  dte(      ejV                  jY                  dug dv      ejV                  jY                  dwg dx      dy                             ZKejV                  jY                  d e        e      ejV                  jY                  dzddg      d{               ZLejV                  jY                  dte(      ejV                  jY                  d|ddg      d}               ZMy)~    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                 <    t        |       \  }}|t        u sJ |rJ y)z.Check that get_namespace returns NumPy wrapperN)r   r   )r$   xp_outis_array_api_compliants      [/var/www/html/planif/env/lib/python3.12/site-packages/sklearn/utils/tests/test_array_api.py"test_get_namespace_ndarray_defaultr-   *   s.     &31%5"F"Y%%%%    c                     t        j                  g d      } t        |       \  }}|j                  ddd      }t	        |dgdz         t        j                  t        d      5  |j                  dd	       d
d
d
       y
# 1 sw Y   y
xY w)z;Check expected behavior with device and creation functions.r%   
          @cpu)
fill_valuer   zUnsupported devicematchcudar   N)	numpyasarrayr   fullr   pytestraises
ValueErrorzeros)r$   r*   _
full_arrays       r,   *test_get_namespace_ndarray_creation_devicerA   2   sv    i Aa IFARC>JJ
+	z)=	> (R'( ( (s   %BBc                      t        j                  g dg      } t        d      5  t        |       \  }}|sJ |t        u sJ 	 ddd       y# 1 sw Y   yxY w)z%Test get_namespace on NumPy ndarrays.r%   Tarray_api_dispatchN)r8   r9   r   r   r   )X_npr*   r+   s      r,   (test_get_namespace_ndarray_with_dispatchrF   >   sZ     ==)%D	4	0 #)6t)<&&%%% """# # #s   AAc                 H   t        j                  d      }t        j                  g dg      }|j                  |      }t	        d      5  t        |      \  }}|sJ t        j                  t              5  t        ||      \  }}ddd       d }| j                  d|       t        j                  j                  d      d	k7  sJ t        j                  t        d
      5  t        |       ddd       ddd       y# 1 sw Y   zxY w# 1 sw Y   xY w# 1 sw Y   yxY w)z'Test get_namespace for ArrayAPI arrays.array_api_strictr%   TrC   Nc                     | dk(  ryy )NSCIPY_ARRAY_API0 )keys    r,   mock_getenvz1test_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_apirZ   M   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_apir8   rH   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)orderrX   F_CONTIGUOUSN)r;   rP   r9   r   r8   flags)r[   rX   r$   X_newX_new_nps        r,   test_asarray_with_orderrc   h   sP     
		Y	'B


?#A4E}}U#H>>.)))r.   z$array_namespace, device_, dtype_name)idsz"weights, axis, normalize, expected)NNT      @T)g      @re         @r&   r'      F)TTF      ?rf   皙?g?)g?g@g@)ri   皙?rj   g      ?g      @)r(      rg   )r&   r&   r'   g      @g      @)r&   r'   r&   )r'   r'   r'   )NNF   )rg      	         r(   rn   )皙??g?gffffff?gffffff@)rn      rp   rl   )rg               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%   rk   rg   ro   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~   expectedrX   array_inresults
             r,   test_averager   t   s    J 
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   rz   y              ?rk   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   rX   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(   rk   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%   ry   rz   r7   TrC   r4   )r|   r}   )r   r8   r9   r   r;   r<   r	   )	r   r   r   r|   r}   error	error_msgrX   r   s	            r,   +test_average_raises_with_invalid_parametersr      s    B 
ov	6B}}i3:FHzz(6z2HmmG:6Gjjj0G	4	0 7&--Y2W 7g67 7 7 7 7 7s$   3B7B+B7+B4	0B77C c                  8    t               J t        d d      J y )Nr   r7   rL   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)rQ   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   rL   r.   r,   Devicer      s    		,	=	r.   r   c                       e Zd Z fdZy)%test_device_inspection.<locals>.Arrayc                       |      | _         y r   r7   )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   r2   mygpuz.Input arrays use different devices: cpu, mygpuTrC   r4   )r;   r<   rQ   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)r8   rH   torchzX,reduction,expected)rk   rg         @)r|         ?r1         @r         @)r         @r   r   r   g      r1   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 _nanmaxTrC   N)r;   rP   r   r9   r
   r   )r   r$   	reductionr   rX   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%   ry   )rm   rv   rn   )r0      rs   r7   TrC   C)r^   C_CONTIGUOUS)
r   r9   r   r   r
   r8   ravelr   r   r`   )	namespace_device_dtyperX   arrayarray_xpr   r   s           r,   
test_ravelr   e  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   r6   r7   rX   N)
r;   rP   backendsr6   is_builtr   r9   r
   r8   r   )r   rX   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   r2   r7   r   N)r;   rP   r9   r
   r8   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   rL   r.   r,   r   r     s    r.   r   zarray_namespace, converterc                 >    | j                         j                         S r   )r2   r8   r   s    r,   <lambda>r     s    		 1 1 3 r.   c                 ,    t        j                  |       S r   )r8   r9   r   s    r,   r   r     s    5==+? r.   c                 "    | j                         S r   )rU   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.rr   rf   N)
r;   rP   r9   r   r   r   
isinstancer   r8   ndarray)r   	converterrX   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.rH   rr   rf   c                 &    j                  |       S r   )r9   )r   rX   s    r,   r   z5test_convert_estimator_to_array_api.<locals>.<lambda>  s    "**UBS r.   __array_namespace__N)	r;   rP   r8   r9   r   r   r   r   r   )rE   r   r   rX   s      @r,   #test_convert_estimator_to_array_apir     s_     
		/	0B==3*&D




%C.s4STG7::4555r.   c                     t        | |      }t        rt        |      |j                  k(  sJ y t        |      |j                  k(  sJ y r   )r   r    r   int32int64)r   r   r   rX   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   float32float64r   )r   r   r   rX   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)ro   r0   rt   	int_dtype)int16r   r   uint8c                    t        | |      }|dz  }dt        j                  |      j                  |df      j	                  |      z  }	t        j
                  t        j                  d      |      }
|j                  |	|      }|j                  |
|      }t        j                  |	|
||      }t        d      5  t        |||||      }d d d        t        t        |	      |       y # 1 sw Y   !xY w)
Nr'   rt   rz   r7   )elementtest_elementsr   r   TrC   )r  r  rX   r   r   r   )r   r8   arangereshapeastyper   r9   isinr   r   r   r
   )r   r   r?   r   r   r   r   rX   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rJ   rO   zSCIPY_ARRAY_API not set to 1.)reasonc                  t   t        j                  d      } ddlm} | j	                  dd      }t        j                  d      }t        |      \  }}}|t        |      d   u sJ |rJ |J t        d      5  t        |      \  }}}||u sJ |sJ ||j                  k(  sJ 	 d d d        y # 1 sw Y   y xY w)	Nr   r   )r   r(   r2   r7   TrC   )
r;   rP   "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#I|V&67::::>> 
4	0 2*BCT*U'	<L(((|*11111	2 2 2s   9+B..B7csr_containerr|   )r   r&   Nr   r   sample_weight_type)Nintfloatc                 @   ddl m} t        | |      }t        j                  g dg dg dg dg dg      }|dk(  rt        j
                  g d	      }	n!|d
k(  rt        j
                  g d|      }	nd }	 | ||      ||	      }
|j                  ||      }t        d      5  t        |||	||      }d d d        t        t        |      |
       t        t        d      k  st        t        d      k\  rt        |      t        |      k(  sJ y y # 1 sw Y   _xY w)Nr   )count_nonzero)r   r(   r   )r'   r   r   )r   r   r   )rn   rv   rm   )rk   r   rg   r  )r&   r'   r'   r(   r&   r  )g      ?rh   rq   g	@g333333@rz   )r|   sample_weightr7   TrC   )r|   r  rX   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_nonzerorX   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                 L   t        | |      }t        j                  d|      }|j                  |j	                         |      }t        j
                  |d|       t        d      5  t        |d|d|	       d d d        t        t        ||
      |       y # 1 sw Y   !xY w)N)rg   rk   rz   r7   r&   )valr  TrC   F)valuerX   	add_valuer  r   )
r   r8   r>   r9   copyfill_diagonalr   r   r   r
   )r   r   r   r  rX   array_npr   s          r,   test_fill_or_add_to_diagonalr&  @  s     
ow	7B{{64Hzz(--/'z:H	ad3	4	0 W rUQUVW (b98DW Ws   )BB#dispatchc                     | t        j                  dgg             | t        j                  dgg            }}|r*t        j                  j	                  d      t        d      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)Nr&   r'   rJ   z8SCIPY_ARRAY_API is not set: not checking array_api inputrC   )	r8   r   rS   rT   rU   r   r   r   r   )r  r'  abs       r,   test_sparse_devicer+  S  s     qcU+,mEKK!<N.OqABJJNN#45=QRR	8	4 Ha|###aaS)*222'1-a0888'5;;s+;<Q?GGG	H H Hs   3A'C$$C-)NrS   	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   rZ   rc   r   r   rQ   r=   ZeroDivisionErrorr   r   r   naninfr   r   r   r   r   r   r   r   r   r  skipifrT   rU   r  r  r&  r+  rL   r.   r,   <module>r9     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.   