o
    \iFR                     @   sl  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j+,d	e-g d
g d
gdd Z.dd Z/e%dd Z0e%dd Z1ej+,dddgdd Z2ej+j,de  edej+,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 d0gdddd gfd1dd d!g d2fddd!d3d4gfdd!gd d!g d
fg d"dd!d5d6gfd%d&gd d!g d7fg d(dd!d8d9gfddgd d!g d:fg d,dd!d6d;gfg d
g d
gd d!g d<fg d/g d0gdd!d=d>gfgd?d@ Z3ej+j,dAe d!dBeddCdD Z4ej+j,dAe ddBedej+,dEdddge5dFfd ddgge6e5fdGfd g dHe6dGfd dIdge7dJffdKdL Z8dMdN Z9e%dOdP Z:e%ej+,dQg dRej+,dSddej;gedfddTej; gedTfej<ej<geej<fg d
ej;ej;ej;gg dUgeed dVg dWfg d
ej;ej;ej;gg dUgeeddVdXej;dYgfddej;gedfddej;gedfej< ej< geej< fg d
ej;ej;ej;gg dUgeed dVg dZfg d
ej;ej;ej;gg dUgeeddVd[ej;d\gfddej;ged#fddTej; ged]fej< ej< geej< fg d
ej;ej;ej;gg dUgeed dVg dfg d
ej;ej;ej;gg dUgeeddVd^ej;d_gfgd`da Z=ej+j,dbe  eddcdd Z>e%ej+,dQdedfgdgdh Z?didj Z@G dkdl dle
ZAe%ej+,dmdfdndo fddpdo fdedqdo fgdrds ZBe%dtdu ZCej+j,dbe  eddvdw ZDej+j,dbe  eddxdy ZEej+j,dze  edej+,d{dd!gej+,d|dd!gej+,d}g d~ej+,dg ddd ZFej+jGe jHIddkdddd ZJej+j,de  edej+,de(ej+,dg dej+,dg ddd ZKej+j,de  edej+,ddd!gdd ZLej+,de(ej+,ddd!gdd ZMdS )    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                 C   s$   t | \}}|tu sJ |rJ dS )z.Check that get_namespace returns NumPy wrapperN)r   r   )r#   xp_outis_array_api_compliant r*   /var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/lib/python3.10/site-packages/sklearn/utils/tests/test_array_api.py"test_get_namespace_ndarray_default*   s   r,   c                  C   s|   t g d} t| \}}|jdddd}t|dgd  tjtdd |jddd	 W d
   d
S 1 s7w   Y  d
S )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_arrayr*   r*   r+   *test_get_namespace_ndarray_creation_device2   s   "r>   c                  C   s`   t g dg} tdd t| \}}|sJ |tu sJ W d   dS 1 s)w   Y  dS )z%Test get_namespace on NumPy ndarrays.r$   Tarray_api_dispatchN)r5   r6   r   r   r   )X_npr(   r)   r*   r*   r+   (test_get_namespace_ndarray_with_dispatch>   s   "rB   c              	   C   s  t d}tg dg}||}tddf t|\}}|s"J t t t||\}}W d   n1 s9w   Y  dd }| d| t	j
d	d
ksRJ t jtdd t| W d   n1 shw   Y  W d   dS W d   dS 1 sw   Y  dS )z'Test get_namespace for ArrayAPI arrays.array_api_strictr$   Tr?   Nc                 S   s   | dkrdS d S )NSCIPY_ARRAY_API0r*   )keyr*   r*   r+   mock_getenv[   s   z1test_get_namespace_array_api.<locals>.mock_getenvzos.environ.getrD   1z#scipy's own support is not enabled.r1   )r8   importorskipr5   r6   r   r   r9   	TypeErrorsetattrosenvirongetRuntimeError)monkeypatchxprA   X_xpr(   r)   rG   r*   r*   r+   test_get_namespace_array_apiM   s*   


"rS   	array_apir5   rC   c                 C   sB   t | }|g d}t|d|d}t|}|jd sJ dS )z=Test _asarray_with_order passes along order for NumPy arrays.)g333333?g333333@gffffff@F)orderrQ   F_CONTIGUOUSN)r8   rI   r6   r   r5   flags)rT   rQ   r#   X_newX_new_npr*   r*   r+   test_asarray_with_orderh   s
   

r[   z$array_namespace, device_, dtype_name)idsz"weights, axis, normalize, expected)NNT      @T)g      @r]         @r%   r&      F)TTF      ?r^   皙?g?)g?g@g@)ra   皙?rb   g      ?g      @)r'      r_   )r%   r%   r&   g      @g      @)r%   r&   r%   )r&   r&   r&   )NNF   )r_      	         r'   rf   )皙??g?gffffff?gffffff@)rf      rh   rd   )r_               c           
      C   s   t | |}tjg dg dg|d}|j||d}|d ur+tj||d}|j||d}tdd t||||d}	W d    n1 sCw   Y  ttdk sTttd	kr^t|t|	ks^J t|	|}	t	|	|t
|d
 d S )Nr$   rc   r_   rg   dtyper4   Tr?   )axisweights	normalize2.0.02.1.0)atol)r   r5   r6   r   r   r!   r"   r   r	   r   r   )
array_namespacedevice_
dtype_namert   rs   ru   expectedrQ   array_inresultr*   r*   r+   test_averaget   s   
%
r   z#array_namespace, device, dtype_name)include_numpy_namespacesc              	   C   s   t | |}tjddg|ddtjddg|d  }|jj}t||s,t|  d|  |j||d}d	}td
d, tj	t
|d t| W d    n1 sQw   Y  W d    d S W d    d S 1 siw   Y  d S )Nr&   r   rq   y              ?rc   r'   z does not support r4   z;Complex floating point values are not supported by average.Tr?   r1   )r   r5   r6   rr   namehasattrr8   skipr   r9   NotImplementedErrorr   )ry   r   r{   rQ   r}   complex_type_nameerr_msgr*   r*   r+   $test_average_raises_with_wrong_dtype   s   



Pr   zaxis, weights, error, error_msgzAxis must be specifiedrt   )r%   r&   r'   rc   z(Weights sum to zero, can't be normalizedc           	   	   C   s   t | |}tjg dg dg|d}|j||d}tj||d}|j||d}tdd/ tj||d t|||d W d    n1 sFw   Y  W d    d S W d    d S 1 s^w   Y  d S )	Nr$   rp   rq   r4   Tr?   r1   )rs   rt   )r   r5   r6   r   r8   r9   r   )	ry   r   r{   rs   rt   error	error_msgrQ   r}   r*   r*   r+   +test_average_raises_with_invalid_parameters   s   
!Pr   c                   C   s$   t  d u sJ t d dd u sJ d S )Nr   r4   r*   r*   r*   r+   test_device_none_if_no_input   s   r   c               	      s2  G dd d G  fddd} t t t| dj W d    n1 s'w   Y  t| d| dd u s9J d}td	d
O t jt|d t| d| d W d    n1 s\w   Y  | d}| d}|jt|ksrJ |jt||ks|J |jt|||ksJ W d    d S 1 sw   Y  d S )Nc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
z&test_device_inspection.<locals>.Devicec                 S   s
   || _ d S Nr   )selfr   r*   r*   r+   __init__   s   
z/test_device_inspection.<locals>.Device.__init__c                 S   s   | j |j kS r   r   )r   r   r*   r*   r+   __eq__   s   z-test_device_inspection.<locals>.Device.__eq__c                 S   s   t d)NzDevice object is not hashable)rJ   r   r*   r*   r+   __hash__  s   z/test_device_inspection.<locals>.Device.__hash__c                 S   s   | j S r   r   r   r*   r*   r+   __str__  s   z.test_device_inspection.<locals>.Device.__str__N)__name__
__module____qualname__r   r   r   r   r*   r*   r*   r+   Device   s
    r   c                       s   e Zd Z fddZdS )z%test_device_inspection.<locals>.Arrayc                    s    || _ d S r   r4   )r   device_namer   r*   r+   r   	  s   z.test_device_inspection.<locals>.Array.__init__N)r   r   r   r   r*   r   r*   r+   Array  s    r   r   r/   mygpuz.Input arrays use different devices: cpu, mygpuTr?   r1   )r8   r9   rJ   hashr   r   r:   )r   r   array1array2r*   r   r+   test_device_inspection   s"   "r   library)r5   rC   torchzX,reduction,expected)rc   r_         @)rs         ?r.         @r         @)r         @r   r   r   g      r.   r   c                 C   sZ   t | }tdd |||}W d   n1 sw   Y  t||}t|| dS )z-Check NaN reductions like _nanmin and _nanmaxTr?   N)r8   rI   r   r6   r	   r   )r   r#   	reductionr|   rQ   r~   r*   r*   r+   test_nan_reductions,  s   
0
r   znamespace, _device, _dtypec                 C   s   t | |}g dg dg dg dg}|j||d}tdd t|}W d    n1 s.w   Y  t||}tj|dd	}t|| t|rRt|j	d
 sTJ d S d S )Nr$   rp   )re   rn   rf   )r-      rk   r4   Tr?   C)rV   C_CONTIGUOUS)
r   r6   r   r   r	   r5   ravelr   r   rX   )	namespace_device_dtyperQ   arrayarray_xpr~   r|   r*   r*   r+   
test_ravele  s   



r   cupyr   c                 C   sr   t | }| dkr|jj st d |jg ddd}n|g d}t||d}tg d}t	|| dS )z0Check convert_to_numpy for GPU backed libraries.r   ztest requires cudar   r3   r4   rQ   N)
r8   rI   backendsr3   is_builtr   r6   r	   r5   r   )r   rQ   X_gpuX_cpuexpected_outputr*   r*   r+   test_convert_to_numpy_gpu{  s   

r   c                  C   sD   t d} | jg ddd}t|| d}tg d}t|| dS )z.Check convert_to_numpy for PyTorch CPU arrays.r   r   r/   r4   r   N)r8   rI   r6   r	   r5   r   )r   X_torchr   r   r*   r*   r+   test_convert_to_numpy_cpu  s
   
r   c                   @   s   e Zd ZdddZdS )SimpleEstimatorNc                 C   s   || _ |jd | _| S )Nr   )X_shapen_features_)r   r#   yr*   r*   r+   fit  s   zSimpleEstimator.fitr   )r   r   r   r   r*   r*   r*   r+   r     s    r   zarray_namespace, converterc                 C   s   |    S r   )r/   r5   r   r*   r*   r+   <lambda>  s    r   c                 C   s
   t | S r   )r5   r6   r   r*   r*   r+   r        
 c                 C   s   |   S r   )rN   r   r*   r*   r+   r     s    c                 C   sF   t | }|ddgg}t |}t||}t|jtj	s!J dS )z(Convert estimator attributes to ndarray.rj   r^   N)
r8   rI   r6   r   r   r   
isinstancer   r5   ndarray)ry   	converterrQ   r#   estnew_estr*   r*   r+   !test_convert_estimator_to_ndarray  s
   

r   c                     sL   t d tddgg} t | }t| fdd}t|jds$J dS )z0Convert estimator attributes to ArrayAPI arrays.rC   rj   r^   c                    s
     | S r   )r6   r   r   r*   r+   r     r   z5test_convert_estimator_to_array_api.<locals>.<lambda>__array_namespace__N)	r8   rI   r5   r6   r   r   r   r   r   )rA   r   r   r*   r   r+   #test_convert_estimator_to_array_api  s
   
r   c                 C   s:   t | |}trt||jksJ d S t||jksJ d S r   )r   r   r   int32int64)r   r   r   rQ   r*   r*   r+   test_indexing_dtype  s   
r   c                 C   s4   t | |}|dkr|jn|j}t|||ksJ d S )Nmps)r   float32float64r   )r   r   r   rQ   expected_dtyper*   r*   r+   test_max_precision_float_dtype  s   
r   zarray_namespace, device, _invertassume_uniqueelement_size)rg   r-   rl   	int_dtype)int16r   r   uint8c                 C   s   t | |}|d }dt||df| }	tjtd|d}
|j|	|d}|j|
|d}tj|	|
||d}tdd t	|||||d}W d    n1 sRw   Y  t
t||d	| d S )
Nr&   rl   rq   r4   )elementtest_elementsr   r   Tr?   )r   r   rQ   r   r   r   )r   r5   arangereshapeastyper   r6   isinr   r   r   r	   )ry   r   r<   r   r   r   r   rQ   rr   r   
element_xptest_elements_xpr|   r~   r*   r*   r+   	test_isin  s,   
	r   rD   rH   zSCIPY_ARRAY_API not set to 1.)reasonc                  C   s   t d} ddlm} | jddd}td}t|\}}}|t|d u s(J |r,J |d u s2J tdd! t|\}}}||u sEJ |sIJ ||j	ksPJ W d    d S 1 s[w   Y  d S )	Nr   r   )r   r'   r/   r4   Tr?   )
r8   rI   "sklearn.externals.array_api_compatr   r   r5   r   r   r   r   )r   torch_compatsome_torch_tensorsome_numpy_arrayr   is_array_apir   r*   r*   r+   test_get_namespace_and_device  s   

"r   csr_containerrs   )r   r%   Nr   r   sample_weight_type)Nintfloatc                 C   s  ddl m} t| |}tg dg dg dg dg dg}|dkr+tg d	}	n|d
kr9tjg d|d}	nd }	|||||	d}
|j||d}tdd t|||	||d}W d    n1 sdw   Y  tt	||d|
 t
tdk s~t
tdkrt|t|ksJ d S d S )Nr   )count_nonzero)r   r'   r   )r&   r   r   )r   r   r   )rf   rn   re   )rc   r   r_   r   )r%   r&   r&   r'   r%   r   )g      ?r`   ri   g	@g333333@rq   )rs   sample_weightr4   Tr?   )rs   r   rQ   r   r   rv   rw   )sklearn.utils.sparsefuncsr   r   r5   r   r6   r   r
   r   r	   r!   r"   r   )ry   rz   r{   r   rs   r   sparse_count_nonzerorQ   r   r   r|   r   r~   r*   r*   r+   test_count_nonzero  s*   
(

r   wrapc                 C   s   t | |}tjd|d}|j| |d}tj|d|d tdd t|d|d|d	 W d    n1 s6w   Y  tt	||d
| d S )N)r_   rc   rq   r4   r%   )valr   Tr?   F)valuerQ   	add_valuer   r   )
r   r5   r;   r6   copyfill_diagonalr   r   r   r	   )ry   rz   r{   r   rQ   array_npr   r*   r*   r+   test_fill_or_add_to_diagonal@  s   
r   dispatchc                 C   s   | t dgg| t dgg}}|r!tjdd u r!tdt|d9 t||d u s0J t|t dgd u s=J t||d d u sHJ t|t dgd d u sWJ W d    d S 1 sbw   Y  d S )Nr%   r&   rD   z8SCIPY_ARRAY_API is not set: not checking array_api inputr?   )	r5   r   rL   rM   rN   r   r   r   r   )r   r  abr*   r*   r+   test_sparse_deviceS  s   & "r  )NrL   	functoolsr   r5   r8   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parametrizer6   r,   r>   rB   rS   r[   r   r   rJ   r:   ZeroDivisionErrorr   r   r   naninfr   r   r   r   r   r   r   r   r   r   skipifrM   rN   r   r   r   r  r*   r*   r*   r+   <module>   s   \





2








,






	

