Ë
    8Ò^j™  ã                   ó„  — d dl Z d dlmZ d dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlmZm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)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 d d	lm5Z6 d d
l7m8Z8m9Z9m:Z:m;Z;m<Z< d dl=m>Z>m?Z?m@Z@mAZA ej„                  j‡                  d ejˆ                  g d¢«      g d¢dg«      d„ «       ZEd„ ZFe<ej„                  j‡                  d ejˆ                  g d¢«      g d¢dg«      d„ «       «       ZGe<ej„                  j‡                  dg d¢«      d„ «       «       ZHe<d„ «       ZIe<d„ «       ZJej„                  j‡                  d e3«       D � cg c]  }  ej–                  | dd d| d   iŽ‘Œ c} «      d„ «       ZLd„ ZMej„                  j‡                  dddg«      d„ «       ZNej„                  j‡                  d e4«       «      ej„                  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 d0¢fg d1¢d$d"d2d3gfg d¢g d¢gd d"g d#¢fg d4¢g d5¢gd$d"dd%gfd6dd d&g d7¢fdd$d&d8d9g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 d1¢d$d&d;d@gfg d¢g d¢gd d&g dA¢fg d4¢g d5¢gd$d&dBdCgfg«      dD„ «       «       ZOej„                  j‡                  d e4d&¬E«      «      dF„ «       ZPej„                  j‡                  d e4d"¬E«      «      ej„                  j‡                  dGdd$dgeQdHfd d$dggeReQfdIfd g dJ¢eRdIfd dKd$geSdLff«      dM„ «       «       ZTdN„ ZUe<dO„ «       ZVe<ej„                  j‡                  dPg dQ¢«      ej„                  j‡                  dRd$dej®                  ge(d$fd$dSej®                   ge(dSfej°                  ej°                  ge(ej°                  fg d¢ej®                  ej®                  ej®                  gg dT¢g ee(d ¬U«      g dV¢fg d¢ej®                  ej®                  ej®                  gg dT¢g ee(d$¬U«      dWej®                  dXg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 dT¢g ee&d ¬U«      g dY¢fg d¢ej®                  ej®                  ej®                  gg dT¢g ee&d$¬U«      dZej®                  d[gfd$dej®                  ge'd(fd$dSej®                   ge'd\fej°                   ej°                   ge'ej°                   fg d¢ej®                  ej®                  ej®                  gg dT¢g ee'd ¬U«      g d#¢fg d¢ej®                  ej®                  ej®                  gg dT¢g ee'd$¬U«      d]ej®                  d^gfg«      d_„ «       «       «       ZYej„                  j‡                  d` e4«       «      da„ «       ZZe<ej„                  j‡                  dPdbdcg«      dd„ «       «       Z[de„ Z\ G df„ dge«      Z] G dh„ die«      Z^e<ej„                  j‡                  djdcdk„ fddl„ fdbdm„ fg«      dn„ «       «       Z_e<do„ «       Z`e<dp„ «       Zae<dq„ «       Zbe<dr„ «       Zce<ej„                  j‡                  ddsd)gg ejÈ                  dsd)gg«      g«      dt„ «       «       Zeej„                  j‡                  d` e4«       «      du„ «       Zfej„                  j‡                  d` e4«       «      dv„ «       Zgej„                  j‡                  d e4«       «      ej„                  j‡                  dwd"d&g«      ej„                  j‡                  dxd"d&g«      ej„                  j‡                  dyg dz¢«      ej„                  j‡                  d{g d|¢«      d}„ «       «       «       «       «       Zhej„                  jÓ                  e jÔ                  j×                  d~«      dk7  d€¬�«      d‚„ «       Zlej„                  j‡                  d e4«       «      ej„                  j‡                  dƒe?«      ej„                  j‡                  d„g d…¢«      ej„                  j‡                  d†g d‡¢«      dˆ„ «       «       «       «       Zmej„                  j‡                  d‰ ejÜ                  g d¢«      d$dŠf ejÜ                  d$dgd:d‹gg«       ejÜ                  g d¢«      dŒf ejÜ                  d$dgd:d‹gg«      g d¢dŒf ejÜ                  d$dgd:d‹gg«       ejÜ                  d$dgd:d‹gg«      d�fg«      dŽ„ «       Zoej„                  j‡                  d�d�d‘g«      ej„                  j‡                  d’d"d&g«      d“„ «       «       Zpej„                  j‡                  d”g d•¢«      ej„                  j‡                  d e4«       «      d–„ «       «       Zqej„                  j‡                  d e4«       «      d—„ «       Zrej„                  j‡                  dƒe?«      ej„                  j‡                  d˜d"d&g«      d™„ «       «       Zsej„                  j‡                  d` e4«       «      ej„                  j‡                  d„g dš¢«      d›„ «       «       Ztej„                  j‡                  d` e4«       «      dœ„ «       Zuej„                  j‡                  d e4«       «      ej„                  j‡                  d„g d�¢«      dž„ «       «       Zvej„                  j‡                  d„g d�¢«      dŸ„ «       Zwej„                  j‡                  d g d¡¢«      d¢„ «       Zxej„                  j‡                  d£d&d"g«      ej„                  j‡                  d` e4«       «      d¤„ «       «       Zyej„                  j‡                  d` e4«       «      d¥„ «       Zzyc c} w )¦é    N)Úpartial)Úassert_allclose)ÚexpitÚlogit)Úconfig_context)ÚHalfMultinomialLoss)ÚBaseEstimator) Ú_add_to_diagonalÚ_asarray_with_orderÚ_atol_for_typeÚ_averageÚ_convert_to_numpyÚ_count_nonzeroÚ _estimator_with_converted_arraysÚ_expitÚ_fill_diagonalÚ_half_multinomial_lossÚ_is_numpy_namespaceÚ_isinÚ_logitÚ
_logsumexpÚ_matching_numpy_dtypeÚ_max_precision_float_dtypeÚ_medianÚ_nanmaxÚ_nanmeanÚ_nanminÚ_ravelÚ_validate_diagonal_argsÚcheck_same_namespaceÚget_namespaceÚget_namespace_and_deviceÚindexing_dtypeÚmove_estimator_toÚmove_toÚ	np_compatÚsupported_float_dtypesÚ(yield_mixed_namespace_input_permutationsÚ)yield_namespace_device_dtype_combinations©Údevice)ÚSkipTestÚ_array_api_for_testsÚ_convert_containerÚassert_array_equalÚ'skip_if_array_api_compat_not_configured)Ú	_IS_32BITÚCSR_CONTAINERSÚ
np_versionÚparse_versionÚX©é   é   é   c                 ó<   — t        | «      \  }}|t        u sJ ‚|rJ ‚y)z.Check that get_namespace returns NumPy wrapperN)r!   r&   ©r5   Úxp_outÚis_array_api_compliants      úm/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/sklearn/utils/tests/test_array_api.pyÚ-test_get_namespace_ndarray_or_similar_defaultr?   =   s.   € ô &3°1Ó%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.r6   é
   ç       @Úcpu)Ú
fill_valuer+   zUnsupported device©ÚmatchÚcudar*   N)	ÚnumpyÚasarrayr!   Úfullr   ÚpytestÚraisesÚ
ValueErrorÚzeros)r5   r<   Ú_Ú
full_arrays       r>   Ú*test_get_namespace_ndarray_creation_devicerR   E   sv   € ä�‰’iÓ €AÜ˜aÓ �I€FˆAà—‘˜R¨C¸�Ó>€JÜ�J  ¨¡
Ô+ä	�‰”zÐ)=Ô	>ñ (Ø�‰�R ˆÔ'÷(÷ (ñ (ús   Á%BÂBc                 ó¶   — t        d¬«      5  t        | «      \  }}|t        | t        j                  «      k(  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.T©Úarray_api_dispatchN)r   r!   Ú
isinstancerI   Úndarrayr&   r;   s      r>   Ú;test_get_namespace_ndarray_or_similar_default_with_dispatchrX   Q   sZ   € ô
 
¨4Ô	0ñ #Ü)6°qÓ)9Ñ&ˆÐ&Ø%¬°A´u·}±}Ó)EÒEÐEÐEð œÑ"Ð"Ñ"÷#÷ #ñ #ús   �8AÁAÚconstructor_name)ÚpyarrowÚpandasÚpolarsÚseriesc                 ó¤   — t        g d¢g d¢g| «      }t        d¬«      5  t        |«      \  }}|rJ ‚|t        u sJ ‚	 ddd«       y# 1 sw Y   yxY w)z,Test get_namespace on dataframes and series.)r7   é   r8   )r9   r9   é   TrT   N)r.   r   r!   r&   )rY   Údfr<   r=   s       r>   Ú#test_get_namespace_df_with_dispatchrb   _   s\   € ô
 
šYª	Ð2Ð4DÓ	E€BÜ	¨4Ô	0ñ #Ü)6°rÓ):Ñ&ˆÐ&Ù)Ð)Ð)ð œÑ"Ð"Ñ"÷#÷ #ñ #ús   ŸAÁAc                  ó¬   — t        d¬«      5  t        t        j                  g d¢g«      «      \  } }|rJ ‚| t        u sJ ‚	 ddd«       y# 1 sw Y   yxY w)z$Test get_namespace on sparse arrays.TrT   r6   N)r   r!   ÚspÚ	csr_arrayr&   )r<   r=   s     r>   Ú'test_get_namespace_sparse_with_dispatchrf   n   sU   € ô 
¨4Ô	0ñ #Ü)6´r·|±|ÂYÀKÓ7PÓ)QÑ&ˆÐ&Ù)Ð)Ð)ð œÑ"Ð"Ñ"÷#÷ #ñ #ús   �3A
Á
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_strictr6   TrT   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.rF   )rL   ÚimportorskiprI   rJ   r   r!   rM   Ú	TypeErrorÚsetattrÚosÚenvironÚgetÚRuntimeError)ÚmonkeypatchÚxpÚX_npÚX_xpr<   r=   rn   s          r>   Útest_get_namespace_array_apir{   z   s
  € ô 
×	Ñ	Ð/Ó	0€Bä�=‰=š)˜Ó%€DØ�:‰:�dÓ€DÜ	¨4Ô	0ñ  Ü)6°tÓ)<Ñ&ˆÐ&Ù%Ð%Ð%ä�]‰]œ9Ó%ñ 	GÜ-:¸4ÀÓ-FÑ*ˆFÐ*÷	Gò	ð 	×ÑÐ,¨kÔ:Ü�z‰z�~‰~Ð/Ó0°CÒ7Ð7Ð7Ü�]‰]ÜØ7ô
ñ 	 ô ˜$Ô÷		 ÷ ð  ÷	Gð 	Gú÷	 ð 	 ú÷ ð  ús=   Á,DÁ7D ÂADÃ#DÃ/DÄ D		ÄDÄD	ÄDÄD!zarray_input, referencer8   Úidc                 óœ  — t        |j                  |j                  ¬«      \  }}t        | j                  | j                  ¬«      \  }}t        d¬«      5  |j	                  g d¢|¬«      }t        |j	                  d|¬«      «      }t        |||¬«      }t        |«      d   |k(  sJ ‚t        |«      |k(  sJ ‚	 d	d	d	«       y	# 1 sw Y   y	xY w)
z8Check conversion between various namespace-device-pairs.©Údevice_nameTrT   r6   r*   r7   ©rx   r+   r   N)r-   rx   r+   r   rJ   Úarray_api_devicer%   r!   )	Úarray_inputÚ	referenceÚxp_toÚ	device_toÚxp_fromÚdevice_fromÚarray_inÚdevice_referenceÚ	array_outs	            r>   Ú"test_move_to_array_api_conversionsr‹   •   sÁ   € ô ,¨I¯L©LÀi×FVÑFVÔWÑ€Eˆ9Ü/Ø�‰ K×$6Ñ$6ôÑ€Gˆ[ô 
¨4Ô	0ñ ?Ø—?‘?¢9°[�?ÓAˆÜ+¨E¯M©M¸!ÀI¨MÓ,NÓOÐÜ˜H¨Ð7GÔHˆ	Ü˜YÓ'¨Ñ*¨eÒ3Ð3Ð3Ü 	Ó*Ð.>Ò>Ð>Ñ>÷?÷ ?ñ ?ús   ÁA#CÃCc                  ó  — t        dd¬«      \  } }t        dd¬«      \  }}t        j                  g d¢«      }t        j                  g d¢«      }t        d¬	«      5  |}t        |d| d¬
«      \  }}||u sJ ‚|�J ‚d}	t        j                  t        |	¬«      5  t        ||||¬
«       ddd«       t        j                  t        |	¬«      5  t        |d||¬
«       ddd«       ddd«       y# 1 sw Y   ŒExY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z*Check sparse inputs are handled correctly.rI   Nr~   ÚtorchrD   )r   r7   r8   r9   r6   TrT   r€   z6Sparse arrays are only accepted \(and passed through\)rF   )
r-   rd   re   rI   Úarrayr   r%   rL   rM   rq   )
Úxp_numpyrP   Úxp_torchr+   Úsparse1Únumpy_arrayÚ
device_cpuÚresult1Úresult2Úmsgs
             r>   Útest_move_to_sparser—   «   s  € ä& w¸DÔA�K€HˆaÜ+¨GÀÔGÑ€Hˆfä�l‰lš<Ó(€GÜ—+‘+šiÓ(€Kä	¨4Ô	0ñ CØˆ
ô # 7¨D°XÀdÔKÑˆ�Ø˜'Ñ!Ð!Ð!ØˆÐˆð HˆÜ�]‰]œ9¨CÔ0ñ 	JÜ�G˜[¨X¸jÕI÷	Jä�]‰]œ9¨CÔ0ñ 	CÜ�G˜T h°zÕB÷	C÷Cð C÷	Jð 	Jú÷	Cð 	Cú÷Cð Cús<   Á<DÂC+Â'#DÃ
C7ÃDÃ+C4	Ã0DÃ7D 	Ã<DÄDÚ	array_apirI   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)rL   rp   rJ   r   rI   Úflags)r˜   rx   r5   ÚX_newÚX_new_nps        r>   Útest_asarray_with_orderr    Ã   sP   € ô 
×	Ñ	˜YÓ	'€Bà
�
‰
’?Ó#€AÜ ¨°Ô4€Eä�}‰}˜UÓ#€HØ�>‰>˜.Ò)Ð)Ñ)r@   z(array_namespace, device_name, dtype_namez"weights, axis, normalize, expected)NNTç      @T)g      @r¡   ç      @r7   é   F)TTFç      ø?r¢   çš™™™™™Ù?gš™™™™™¹?)gš™™™™™ù?gÍÌÌÌÌÌ@gÍÌÌÌÌÌ@)r¥   çš™™™™™É?r¦   g      ü?g      @)r9   r_   r£   )r7   r7   r8   g      @g      @)r7   r8   r7   )r8   r8   r8   )NNFé   )r£   é   é	   r`   é   r9   r©   )çš™™™™™é?çÍÌÌÌÌÌô?gÍÌÌÌÌÌü?gffffffö?gffffff@)r©   é   rª   r§   )r£   é   é   é   é   c                 ó  — t        | ||«      \  }}t        j                  g d¢g d¢g|¬«      }	|j                  |	|¬«      }	|�*t        j                  ||¬«      }|j                  ||¬«      }t        d¬«      5  t	        |	|||¬«      }
t
        t        d«      k  st
        t        d	«      k\  rt        |	«      t        |
«      k(  sJ ‚d d d «       t        
t        d
¬«      }
t        |
|t        |«      ¬«       y # 1 sw Y   Œ3xY w)Nr6   ©r_   r£   r`   ©Údtyper*   TrT   )ÚaxisÚweightsÚ	normalizeú2.0.0ú2.1.0rD   r€   )Úatol)r-   rI   rJ   r   r   r3   r4   r�   r%   r   r   )Úarray_namespacer   Ú
dtype_namer·   r¶   r¸   Úexpectedrx   r+   rˆ   Úresults              r>   Útest_averagerÀ   Ï   sì   € ôH & o°{ÀJÓO�J€BˆÜ�}‰}šiªÐ3¸:ÔF€HØ�z‰z˜(¨6ˆzÓ2€HØÐÜ—-‘- ¨zÔ:ˆØ—*‘*˜W¨V�*Ó4ˆä	¨4Ô	0ñ JÜ˜(¨°wÈ)ÔTˆäœ gÓ.Ò.´*ÄÈgÓ@VÒ2Vô $ HÓ-Ô1AÀ&Ó1IÒIÐIÐI÷Jô �V¤¨eÔ4€FÜ�F˜H¬>¸*Ó+EÖF÷Jð Jús   Á9AC8Ã8D)Ú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)Nr8   r   r´   y              ð?r_   r9   z does not support r*   z;Complex floating point values are not supported by average.TrT   rF   )r-   rI   rJ   rµ   ÚnameÚhasattrrL   Úskipr   rM   ÚNotImplementedErrorr   )r¼   r   r½   rx   r+   rˆ   Úcomplex_type_nameÚerr_msgs           r>   Ú$test_average_raises_with_wrong_dtyperÉ     sä   € ô
 & o°{ÀJÓO�J€Bˆä�}‰}˜a ˜V¨:Ô6¸¼e¿m¹mØ	
ˆAˆ�jô?ñ :ñ €Hð !Ÿ™×+Ñ+ÐÜ�2Ð(Ô)ä�‰�Ð'Ð'9Ð:KÐ9LÐMÔNà�z‰z˜(¨6ˆzÓ2€HàK€Gä¨$Ô/ñä�‰Ô)°Ô9ñô 	�Ô÷	÷ ÷ ñ ú÷ ð ús$   Â$C)Ã CÃC)ÃC&	Ã"C)Ã)C2zaxis, weights, error, error_msgzAxis must be specifiedr·   )r7   r8   r9   r_   éÿÿÿÿ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)	Nr6   r³   r´   r*   TrT   rF   )r¶   r·   )r-   rI   rJ   r   rL   rM   r   )
r¼   r   r½   r¶   r·   ÚerrorÚ	error_msgrx   r+   rˆ   s
             r>   Ú+test_average_raises_with_invalid_parametersrÎ     s«   € ô@ & o°{ÀJÓO�J€Bˆä�}‰}šiªÐ3¸:ÔF€HØ�z‰z˜(¨6ˆzÓ2€Hä�m‰m˜G¨:Ô6€GØ�j‰j˜¨ˆjÓ0€Gä	¨4Ô	0ñ 7´&·-±-ÀÈYÔ2Wñ 7Ü� ¨gÕ6÷7÷ 7÷ 7ñ 7ú÷ 7ð 7ús$   Á7B;ÂB/ÂB;Â/B8	Â4B;Â;Cc                  ó8   — t        «       �J ‚t        d d«      �J ‚y )NrÃ   )r�   rl   r@   r>   Útest_device_none_if_no_inputrÐ   K  s$   € ÜÓÐ%Ð%Ð%ä˜D &Ó)Ð1Ð1Ñ1r@   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__T  s	   € ØˆD�Ir@   c                 ó4   — | j                   |j                   k(  S rÕ   rÖ   )r×   r+   s     r>   Ú__eq__z-test_device_inspection.<locals>.Device.__eq__W  s   € Ø—9‘9 §¡Ñ+Ð+r@   c                 ó   — t        d«      ‚)NzDevice object is not hashable)rq   ©r×   s    r>   Ú__hash__z/test_device_inspection.<locals>.Device.__hash__Z  s   € ÜÐ;Ó<Ð<r@   c                 ó   — | j                   S rÕ   rÖ   rÜ   s    r>   Ú__str__z.test_device_inspection.<locals>.Device.__str__]  s   € Ø—9‘9Ðr@   N)Ú__name__Ú
__module__Ú__qualname__rØ   rÚ   rÝ   rß   rl   r@   r>   ÚDevicerÓ   S  s   „ ò	ò	,ò	=ó	r@   rã   c                   ó   •— e Zd Zˆ fd„Zy)ú%test_device_inspection.<locals>.Arrayc                 ó    •—  ‰|«      | _         y rÕ   r*   )r×   r   rã   s     €r>   rØ   z.test_device_inspection.<locals>.Array.__init__a  s   ø€ Ù  Ó-ˆD�Kr@   N)rà   rá   râ   rØ   )rã   s   €r>   ÚArrayrå   `  s   ø„ õ	.r@   rç   r+   rD   Úmygpuz.Input arrays use different devices: cpu, mygpuTrT   rF   )rL   rM   rq   Úhashr+   r�   r   rN   )rç   rÈ   Úarray1Úarray2rã   s       @r>   Útest_device_inspectionrì   Q  s.  ø€ ÷ñ ÷.ó .ô 
�‰”yÓ	!ñ %Ü‰U�8‹_×#Ñ#Ô$÷%ô ™E %›L©%°«.Ó9ÐAÐAÐAð ?€GÜ	¨4Ô	0ñ 
IÜ�]‰]œ:¨WÔ5ñ 	;Ü™U 5›\©5°«>Ô:÷	;ñ �x“ˆÙ�x“ˆà�}‰}Ô 0°Ó 8Ò8Ð8Ð8Ø�}‰}Ô 0°¸Ó @Ò@Ð@Ð@Ø�}‰}Ô 0°¸ÀÓ HÒHÐHÑH÷
Ið 
I÷%ð %ú÷	;ð 	;ú÷
Ið 
Iús0   ±D%Á=D=ÂD1Â2A)D=Ä%D.Ä1D:	Ä6D=Ä=EÚlibrary)rI   rh   r�   zX,reduction,expectedéþÿÿÿ)r_   r£   ç      @©r¶   ©ç      ð?rC   ç      @rò   ç      @)rô   ç      @rï   ró   rï   g      à¿rC   rõ   c                 óÚ   — t        j                  | «      }t        d¬«      5   ||j                  |«      «      }ddd«       t	        t
        d¬«      }t        ||«       y# 1 sw Y   Œ(xY w)z-Check NaN reductions like _nanmin and _nanmaxTrT   NrD   r€   )rL   rp   r   rJ   r%   rI   r   )rí   r5   Ú	reductionr¾   rx   r¿   s         r>   Útest_nan_reductionsrø   „  s^   € ô` 
×	Ñ	˜WÓ	%€Bä	¨4Ô	0ñ *Ù˜2Ÿ:™: a›=Ó)ˆ÷*ô �V¤¨eÔ4€FÜ�F˜HÕ%÷	*ð *ús   ¢A!Á!A*z"namespace, device_name, dtype_namec                 óˆ  — t        | ||«      \  }}g d¢g d¢g d¢g d¢g}|j                  ||¬«      }t        d¬«      5  t        |«      }d d d «       t	        t
        d¬	«      }t        j                  |d
¬«      }t        ||«       t        |«      r%t        j                  |«      j                  d   sJ ‚y y # 1 sw Y   ŒoxY w)Nr6   r³   )r¨   r°   r©   )rB   é   r­   r*   TrT   rD   r€   ÚC)r›   ÚC_CONTIGUOUS)
r-   rJ   r   r   r%   rI   Úravelr   r   r�   )	Ú	namespacer   r½   rx   r+   rŽ   Úarray_xpr¿   r¾   s	            r>   Ú
test_ravelr   ½  s±   € ô
 & i°¸jÓI�J€Bˆâš	¢9ªlÐ;€EØ�z‰z˜%¨ˆzÓ/€HÜ	¨4Ô	0ñ "Ü˜Ó!ˆ÷"ô �V¤¨eÔ4€FÜ�{‰{˜5¨Ô,€Hä�H˜fÔ%ä˜2ÔÜ�}‰}˜VÓ$×*Ñ*¨>Ò:Ð:Ñ:ð ÷"ð "ús   ¾B8Â8CÚ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ñ   rH   r*   ©rx   N)
rL   rp   ÚbackendsrH   Úis_builtrÅ   rJ   r   rI   r   )rí   rx   ÚX_gpuÚX_cpuÚexpected_outputs        r>   Útest_convert_to_numpy_gpur	  Ò  sƒ   € ô 
×	Ñ	˜WÓ	%€Bà�'ÒØ�{‰{×Ñ×(Ñ(Ô*Ü�K‰KÐ,Ô-Ø—
‘
š?°6�
Ó:‰à—
‘
š?Ó+ˆä˜e¨Ô+€EÜ—m‘m¢OÓ4€OÜ�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ñ   rD   r*   r  N)rL   rp   rJ   r   rI   r   )r�   ÚX_torchr  r  s       r>   Útest_convert_to_numpy_cpur  ä  sH   € ä×Ñ Ó(€EØ�m‰mšO°EˆmÓ:€Gä˜g¨%Ô0€EÜ—m‘m¢OÓ4€OÜ�E˜?Õ+r@   c                   ó    — e Zd Zdd„Zd„ Zd„ Zy)ÚSimpleEstimatorNc                 ó^   — || _         d|i| _        |g| _        |j                  d   | _        | S ©Nr5   r   )ÚX_ÚX_dict_ÚX_list_ÚshapeÚn_features_©r×   r5   Úys      r>   ÚfitzSimpleEstimator.fitï  s2   € ØˆŒØ˜Q�xˆŒØ�sˆŒØŸ7™7 1™:ˆÔØˆr@   c                 ó$   — t        || dd¬«       |S ©Nr  Úpredict)Ú	attributeÚmethod©r    ©r×   r5   s     r>   r  zSimpleEstimator.predictö  ó   € Ü˜Q °¸YÕGØˆr@   c                 óL   — t        j                  | j                  «      | _        y rÕ   )rd   Ú
csr_matrixr  rÜ   s    r>   ÚsparsifyzSimpleEstimator.sparsifyú  s   € Ü—-‘- §¡Ó(ˆ�r@   rÕ   )rà   rá   râ   r  r  r#  rl   r@   r>   r  r  î  s   „ óòó)r@   r  c                   ó    — e Zd Zdd„Zd„ Zd„ Zy)ÚSimpleEstimatorCustomLogicNc                 óN   — || _         d|i| _        |j                  d   | _        | S r  )r  r  r  r  r  s      r>   r  zSimpleEstimatorCustomLogic.fitÿ  s)   € ØˆŒØ˜Q�xˆŒØŸ7™7 1™:ˆÔØˆr@   c                 ó$   — t        || dd¬«       |S r  r  r  s     r>   r  z"SimpleEstimatorCustomLogic.predict  r   r@   c                 óÀ   —  || j                   «      | _         | j                  j                  «       D ��ci c]  \  }}| ||«      “Œ c}}| _        d| _        | S c c}}w )NT)r  r  ÚitemsÚ
converted_)r×   Ú	converterÚkÚvs       r>   Ú__sklearn_array_api_convert__z8SimpleEstimatorCustomLogic.__sklearn_array_api_convert__	  sQ   € Ù˜DŸG™GÓ$ˆŒØ48·L±L×4FÑ4FÓ4H×I©D¨A¨q˜™9 Q›<™ÓIˆŒð ˆŒØˆùó	 Js   µArÕ   )rà   rá   râ   r  r  r.  rl   r@   r>   r%  r%  þ  s   „ óòór@   r%  zarray_namespace, converterc                 ó>   — | j                  «       j                  «       S rÕ   )rD   rI   ©rŽ   s    r>   ú<lambda>r1    s   €  §	¡	£× 1Ñ 1Ó 3€ r@   c                 ó,   — t        j                  | «      S rÕ   )rI   rJ   r0  s    r>   r1  r1    s   € ¬5¯=©=¸Ó+?€ r@   c                 ó"   — | j                  «       S rÕ   )ru   r0  s    r>   r1  r1    s   € ˜uŸy™y›{€ r@   c                 óÂ  — t        j                  | «      }|j                  ddgg«      }t        d¬«      5  t	        «       j                  |«      }|j                  |«       t        ||«      }t        |j                  t        j                  «      sJ ‚t        |t        d¬«      }t        |j                  t        j                  «      sJ ‚	 ddd«       y# 1 sw Y   yxY w)z(Convert estimator attributes to ndarray.r¬   r¢   TrT   rD   r*   N)rL   rp   rJ   r   r  r  r  r   rV   r  rI   rW   r$   )r¼   r+  rx   r5   ÚestÚnew_ests         r>   Ú!test_convert_estimator_to_ndarrayr7    s­   € ô 
×	Ñ	˜_Ó	-€Bà
�
‰
�S˜#�J�<Ó €AÜ	¨4Ô	0ñ 5ÜÓ×#Ñ# AÓ&ˆØ�‰�AŒä2°3¸	ÓBˆÜ˜'Ÿ*™*¤e§m¡mÔ4Ð4Ð4Ü# C¬°uÔ=ˆÜ˜'Ÿ*™*¤e§m¡mÔ4Ð4Ñ4÷5÷ 5ñ 5ús   ¶BCÃCc                  óú  ‡— t        j                  d«      Št        j                  ddgg«      } t	        «       j                  | «      }t        |ˆfd„«      }t        |j                  d«      sJ ‚t        d¬«      5  t        |‰d ¬«      }t        |j                  «      d	   ‰k(  sJ ‚t        |j                  d
   «      d	   ‰k(  sJ ‚t        |j                  d	   «      d	   ‰k(  sJ ‚	 d d d «       y # 1 sw Y   y xY w)Nrh   r¬   r¢   c                 ó&   •— ‰j                  | «      S rÕ   )rJ   )rŽ   rx   s    €r>   r1  z:test_convert_estimator_with_custom_logic.<locals>.<lambda>1  s   ø€ À"Ç*Á*ÈUÓBS€ r@   Ú__array_namespace__TrT   r*   r   r5   )rL   rp   rI   rJ   r  r  r   rÄ   r  r   r$   r!   r  r  )ry   r5  r6  rx   s      @r>   Ú(test_convert_estimator_with_custom_logicr;  *  sæ   ø€ ä	×	Ñ	Ð/Ó	0€Bä�=‰=˜3 ˜*˜Ó&€DÜ
Ó
×
Ñ
 Ó
%€Cä.¨sÓ4SÓT€GÜ�7—:‘:Ð4Ô5Ð5Ð5Ü	¨4Ô	0ñ :Ü# C¨°DÔ9ˆä˜WŸZ™ZÓ(¨Ñ+¨rÒ1Ð1Ð1Ü˜WŸ_™_¨SÑ1Ó2°1Ñ5¸Ò;Ð;Ð;Ü˜WŸ_™_¨QÑ/Ó0°Ñ3°rÒ9Ð9Ñ9÷:÷ :ñ :ús   Á;A,C1Ã1C:c                  óÌ  — t        j                  d«      } t        j                  ddgg«      }t	        «       j                  |«      }t        d¬«      5  t        || d ¬«      }|j                  | j                  ddgg«      «       t        |j                  «      d   | k(  sJ ‚t        |j                  d   «      d   | k(  sJ ‚|j                  sJ ‚	 d d d «       y # 1 sw Y   y xY w©	Nrh   r¬   r¢   TrT   r*   r   r5   )rL   rp   rI   rJ   r%  r  r   r$   r  r!   r  r  r*  ©rx   ry   r5  r6  s       r>   Ú4test_custom_conversion_estimator_to_array_api_strictr?  ;  sÌ   € ä	×	Ñ	Ð/Ó	0€Bä�=‰=˜3 ˜*˜Ó&€DÜ
$Ó
&×
*Ñ
*¨4Ó
0€Cä	¨4Ô	0ñ "Ü# C¨°DÔ9ˆà�‰˜Ÿ
™
 S¨# J <Ó0Ô1ä˜WŸZ™ZÓ(¨Ñ+¨rÒ1Ð1Ð1Ü˜WŸ_™_¨SÑ1Ó2°1Ñ5¸Ò;Ð;Ð;Ø×!Ò!Ð!Ñ!÷"÷ "ñ "ús   ÁA=CÃC#c                  ój  — t        j                  d«      } t        j                  ddgg«      }t	        «       j                  |«      }t        d¬«      5  t        || d ¬«      }t        |j                  «      d   | k(  sJ ‚t        |j                  d   «      d   | k(  sJ ‚	 d d d «       y # 1 sw Y   y xY wr=  )rL   rp   rI   rJ   r  r  r   r$   r!   r  r  r>  s       r>   Ú*test_convert_estimator_to_array_api_strictrA  L  s¢   € ä	×	Ñ	Ð/Ó	0€Bä�=‰=˜3 ˜*˜Ó&€DÜ
Ó
×
Ñ
 Ó
%€Cä	¨4Ô	0ñ <Ü# C¨°DÔ9ˆä˜WŸZ™ZÓ(¨Ñ+¨rÒ1Ð1Ð1Ü˜WŸ_™_¨SÑ1Ó2°1Ñ5¸Ò;Ð;Ñ;÷	<÷ <ñ <ús   ÁAB)Â)B2c                  óp  — t        j                  d«      } t        d¬«      5  t        «       j	                  | j                  ddgg«      «      }t        j                  t        d¬«      5  |j                  t        j
                  dg«      «       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)	Nrh   TrT   r¬   r¢   z.*must use the same namespacerF   r   )
rL   rp   r   r  r  rJ   rM   rN   r  rI   )rx   r5  s     r>   Útest_check_fitted_attributerC  Z  s’   € ä	×	Ñ	Ð/Ó	0€Bä	¨4Ô	0ñ ,ÜÓ×#Ñ# B§J¡J°°c°
¨|Ó$<Ó=ˆä�]‰]œ:Ð-LÔMñ 	,Ø�K‰KœŸ™ q cÓ*Ô+÷	,÷,ð ,÷	,ð 	,ú÷,ð ,ús$   ¢AB,Á)&B ÂB,Â B)	Â%B,Â,B5r¬   c                 óX  — t        j                  d«      }t        d¬«      5  t        «       j	                  t        j                  ddgg«      «      }|j                  | «       |j                  «        |j                  | «       |j                  t        j                  ddgg«      «       t        «       j	                  |j                  ddgg«      «      }t        j                  t        d¬«      5  |j                  | «       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)	zÐCheck validation of non-array input against fitted attribute ``X_``.

    ``SimpleEstimator.predict`` calls ``check_same_namespace`` with
    ``attribute="X_"`` to compare the input with the fitted data.
    rh   TrT   r¬   r¢   zArray namespace.*not compatiblerF   N)rL   rp   r   r  r  rI   rJ   r  r#  rM   rN   )r5   rx   r5  s      r>   Ú0test_check_fitted_attribute_with_non_array_inputrE  e  sä   € ô 
×	Ñ	Ð/Ó	0€Bä	¨4Ô	0ñ ÜÓ×#Ñ#¤E§M¡M°C¸°:°,Ó$?Ó@ˆà�‰�AŒà�‰Œà�‰�AŒØ�‰”E—M‘M C¨ : ,Ó/Ô0äÓ×#Ñ# B§J¡J°°c°
¨|Ó$<Ó=ˆÜ�]‰]œ:Ð-NÔOñ 	Ø�K‰K˜ŒN÷	÷ð ÷	ð 	ú÷ð ús$   ¢CD Ã1DÄD ÄD	ÄD Ä D)c                 óš   — t        | ||«      \  }}t        rt        |«      |j                  k(  sJ ‚y t        |«      |j                  k(  sJ ‚y rÕ   )r-   r1   r#   Úint32Úint64)rþ   r   r½   rx   r+   s        r>   Útest_indexing_dtyperI  ~  sG   € ô
 & i°¸jÓI�J€BˆåÜ˜bÓ! R§X¡XÒ-Ð-Ñ-ä˜bÓ! R§X¡XÒ-Ð-Ñ-r@   c                 óÒ   — t        | |«      \  }}	 |j                  dg|j                  |¬«       |j                  }t        ||«      |k(  sJ ‚y # t        $ r |j                  }Y Œ)w xY w)Nç        )rµ   r+   )r-   rJ   Úfloat64Ú	ExceptionÚfloat32r   )rþ   r   r½   rx   r+   Úexpected_dtypes         r>   Útest_max_precision_float_dtyperP  ‹  sm   € ô
 & i°Ó=�J€Bˆð$Ø
�
‰
�C�5 §
¡
°6ˆ
Ô:ØŸ™ˆô & b¨&Ó1°^ÒCÐCÑCøô ò $ð Ÿ™Šð$ús   ‘+A ÁA&Á%A&ÚinvertÚassume_uniqueÚelement_size)r`   rB   r®   Ú	int_dtype)Úint16rG  rH  Ú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        t        d	¬
«      |«       y # 1 sw Y   Œ&xY w)Nr8   r®   r´   r*   )ÚelementÚtest_elementsrR  rQ  TrT   )rX  rY  rx   rR  rQ  rD   r€   )r-   rI   ÚarangeÚreshapeÚastyperŽ   rJ   Úisinr   r   r/   r%   )r¼   r   r½   rQ  rR  rS  rT  rx   r+   ÚrrX  rY  Ú
element_xpÚtest_elements_xpr¾   r¿   s                   r>   Ú	test_isinra  œ  sò   € ô" & o°{ÀJÓO�J€BˆØ˜Ñ€AØ”%—,‘,˜|Ó,×4Ñ4°a¸°VÓ<×CÑCÀIÓNÑN€GÜ—K‘K¤§¡¨RÓ 0¸	ÔB€MØ—‘˜G¨F�Ó3€JØ—z‘z -¸�zÓ?ÐÜ�z‰zØØ#Ø#Øô	€Hô 
¨4Ô	0ñ 
ÜØØ*ØØ'Øô
ˆ÷
ô ”w˜v¬%¸Ô>ÀÕI÷
ð 
ús   ÃC9Ã9D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�   r9   rD   r*   TrT   )
rL   rp   Ú"sklearn.externals.array_api_compatr�   rZ  rI   r"   r!   r   r+   )r�   Útorch_compatÚsome_torch_tensorÚsome_numpy_arrayrþ   Úis_array_apir+   s          r>   Útest_get_namespace_and_deviceri  Å  sÔ   € ô
 ×Ñ Ó(€EåHàŸ™ Q¨u˜Ó5ÐÜ—|‘| A“Ðô '?Ð?PÓ&QÑ#€Iˆ|˜VØœÐ&6Ó7¸Ñ:Ñ:Ð:Ð:ÙÐÐØˆ>Ðˆ>ô 
¨4Ô	0ñ 2Ü*BÐCTÓ*UÑ'ˆ	�< Ø˜LÑ(Ð(Ð(ÙÐˆ|ØÐ*×1Ñ1Ò1Ð1Ñ1÷	2÷ 2ñ 2ús   Á9+B.Â.B7Úcsr_containerr¶   )r   r7   NrÊ   rî   Úsample_weight_type)NÚintÚfloatc                 óR  — 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        d¬«      |«       t        t        d«      k  st        t        d«      k\  rt        |«      t        |«      k(  sJ ‚y y # 1 sw Y   ŒdxY w)Nr   )Úcount_nonzero)r   r9   r   )r8   rÊ   r   )r   r   r   )r©   r°   r¨   ©r_   r   r£   rl  )r7   r8   r8   r9   r7   rm  )g      à?r¤   r«   gš™™™™™	@g333333@r´   )r¶   Úsample_weightr*   TrT   )r¶   rq  rx   r+   rD   r€   r¹   rº   )Úsklearn.utils.sparsefuncsro  r-   rI   rŽ   rJ   r   r   r   r%   r3   r4   r�   )r¼   r   r½   rj  r¶   rk  Úsparse_count_nonzerorx   r+   rŽ   rq  r¾   rÿ   r¿   s                 r>   Útest_count_nonzerort  ã  s  € õ Pä% o°{ÀJÓO�J€BˆÜ�K‰Kš¢J²	º9ÂiÐPÓQ€EØ˜UÒ"ÜŸ™¢oÓ6‰Ø	˜wÒ	&ÜŸ™Ò&?ÀzÔR‰àˆÙ#Ù�eÓ 4°}ô€Hð �z‰z˜%¨ˆzÓ/€Hä	¨4Ô	0ñ 
ÜØ˜4¨}ÀÈFô
ˆ÷
ô
 ”G˜F¤u°UÔ;¸XÔFä”M 'Ó*Ò*¬j¼MÈ'Ó<RÒ.Rô   Ó)Ô-=¸fÓ-EÒEÐEÑEð /S÷
ð 
ús   Â)DÄD&zarray, value, matchz`array` should be 2Dr_   z`value` needs to bez`value` needs to be ac                 óž   — t        dd¬«      \  }}t        j                  t        |¬«      5  t	        | ||«       ddd«       y# 1 sw Y   yxY w)z:Check `_validate_diagonal_args` raises the correct errors.rI   Nr~   rF   )r-   rL   rM   rN   r   )rŽ   ÚvaluerG   rx   rP   s        r>   Útest_validate_diagonal_argsrw    sC   € ô ! °dÔ;�E€BˆÜ	�‰”z¨Ô	/ñ 2Ü  u¨bÔ1÷2÷ 2ñ 2ús   ¬AÁAÚfunctionÚfillÚaddÚc_contiguityc                 ó  — t        dd¬«      \  }}| rt        j                  d«      }nt        j                  d«      j                  }|j                  d   | k(  sJ ‚|dk(  rt
        }nt        } ||d|«       t        |j                  «       t        j                  d«      «        ||g d	¢|«       |dk(  rt        j                  d
«      }n+t        j                  d«      t        j                  d
«      z   }t        |j                  «       |«       t        j                  g d¢«      } ||||«       |dk(  r|}n.|t        j                  d
«      z   t        j                  d«      z   }t        |j                  «       |«       y)zBCheck `_fill/add_to_diagonal` behaviour correct with numpy arrays.rI   Nr~   ©r9   r_   rü   ry  r7   )r9   )r   r7   r8   r9   )rú   r­   é   )r-   rI   rO   ÚTr�   r   r
   r   ÚdiagonalÚonesrZ  rŽ   )r{  rx  rx   rP   rŽ   ÚfuncÚexpected_diagÚ
fill_arrays           r>   Útest_fill_and_add_to_diagonalr…  "  s-  € ô ! °dÔ;�E€BˆÙÜ—‘˜FÓ#‰ä—‘˜FÓ#×%Ñ%ˆØ�;‰;�~Ñ&¨,Ò6Ð6Ð6à�6ÒÜ‰äˆáˆ��2ÔÜ�E—N‘NÓ$¤e§j¡j°Ó&6Ô7áˆ’	˜2ÔØ�6ÒÜŸ™ Q›‰äŸ
™
 4Ó(¬5¯<©<¸«?Ñ:ˆÜ�E—N‘NÓ$ mÔ4ä—‘š\Ó*€JÙˆ�
˜BÔØ�6ÒØ"‰à"¤U§\¡\°!£_Ñ4´u·z±zÀ$Ó7GÑGˆÜ�E—N‘NÓ$ mÕ4r@   rŽ   )ÚstandardÚ
transposedúnon-contiguousc                 óP  — t        |||«      \  }}t        j                  d|¬«      }| dk(  r8|j                  |j	                  «       |¬«      j
                  }|j
                  }n`| dk(  r:|j                  |j	                  «       |¬«      ddd…ddd…f   }|ddd…ddd…f   }n!|j                  |j	                  «       |¬«      }t        j                  |d¬	«       t        d
¬«      5  t        |d|¬«       ddd«       t        t        |t        d¬«      |«       y# 1 sw Y   Œ&xY w)zHCheck array API `_fill_diagonal` consistent with `numpy._fill_diagonal`.)r_   r£   r´   r‡  r*   rˆ  Nr8   r7   )ÚvalTrT   ©rv  rx   rD   r€   )r-   rI   rO   rJ   Úcopyr  Úfill_diagonalr   r   r/   r%   )rŽ   r¼   r   r½   rx   r+   Úarray_nprÿ   s           r>   Útest_fill_diagonalr�  E  s  € ô & o°{ÀJÓO�J€BˆÜ�{‰{˜6¨Ô4€Hà�ÒØ—:‘:˜hŸm™m›o°f�:Ó=×?Ñ?ˆØ—:‘:‰Ø	Ð"Ò	"Ø—:‘:˜hŸm™m›o°f�:Ó=¹cÀ¸cÁ3ÀQÀ3¸hÑGˆØ™C˜a˜C¡ 1 ˜HÑ%‰à—:‘:˜hŸm™m›o°f�:Ó=ˆä	×Ñ˜ aÕ(Ü	¨4Ô	0ñ 1Ü�x q¨RÕ0÷1ô ”w˜x¬E¸%Ô@À(ÕK÷1ð 1ús   Ã(DÄD%c                 ón  — t        | ||«      \  }}t        dd¬«      \  }}t        j                  d|¬«      }|j                  |j	                  «       |¬«      }g d¢}	t        ||	|¬«       t        d	¬
«      5  t        ||	|¬«       ddd«       t        t        |t        d¬«      |«       y# 1 sw Y   Œ&xY w)zMCheck `_add_to_diagonal` consistent between array API xp and numpy namespace.rI   Nr~   r}  r´   r*   r6   r‹  TrT   rD   r€   )	r-   rI   rO   rJ   rŒ  r   r   r/   r%   )
r¼   r   r½   rx   r+   Únp_xprP   rŽ  rÿ   Úadd_vals
             r>   Útest_add_to_diagonalr“  _  s�   € ô & o°{ÀJÓO�J€BˆÜ# G¸Ô>�H€Eˆ1ä�{‰{˜6¨Ô4€HØ�z‰z˜(Ÿ-™-›/°&ˆzÓ9€Hâ€GÜ�8 7¨uÕ5Ü	¨4Ô	0ñ 7Ü�x w°2Õ6÷7ô ”w˜x¬E¸%Ô@À(ÕK÷7ð 7ús   Á7B+Â+B4Údispatchc                 óê  — t        j                  dg«      }|rt        |dd «      nd } | t        j                  dgg«      «       | t        j                  dgg«      «      }}|r*t        j                  j                  d«      €t        d«      ‚t        |¬«      5  t        ||«      �J ‚t        ||«      |k(  sJ ‚t        ||«      d   �J ‚t        ||«      d   |k(  sJ ‚	 d d d «       y # 1 sw Y   y xY w)Nr7   r+   r8   rj   z8SCIPY_ARRAY_API is not set: not checking array_api inputrT   )
rI   rŽ   Úgetattrrs   rt   ru   r,   r   r�   r"   )rj  r”  Únp_arrÚexpected_numpy_array_deviceÚaÚbs         r>   Útest_sparse_devicer›  s  sô   € ô �[‰[˜!˜Ó€FáEM¤'¨&°(¸DÔ"AÐSWÐÙœŸ™ q c UÓ+Ó,©m¼E¿K¹KÈ!ÈÈÓ<NÓ.O€q€AÙ”B—J‘J—N‘NÐ#4Ó5Ð=ÜÐQÓRÐRÜ	¨8Ô	4ñ UÜ  1Ó%Ð-Ð-Ð-Ü  6Ó*Ð.IÒIÐIÐIÜ'¨¨1Ó-¨aÑ0Ð8Ð8Ð8Ü'¨¨6Ó2°1Ñ5Ð9TÒTÐTÑT÷	U÷ Uñ Uús   ÂAC)Ã)C2)Nr   r7   c                 ó
  — t        | ||«      \  }}t        j                  j                  d«      }|j	                  ddd¬«      j                  |«      }t        j                  ||¬«      }|j                  ||¬«      }	t        d¬	«      5  t        |	|¬«      }
|j                  d
k7  r.t        |
«      d   |k(  sJ ‚|
j                  |	j                  k(  sJ ‚d d d «       t        |t        
t        d¬«      «       y # 1 sw Y   Œ&xY w)Nr   rK  rò   )r£   r_   )ÚlowÚhighÚsizerð   r*   TrT   rh   rD   r€   )r-   rI   ÚrandomÚRandomStateÚuniformr\  ÚmedianrJ   r   r   rà   r!   r+   r   r%   )rþ   r   r½   r¶   rx   r+   Úrngry   Ú	result_nprz   Ú	result_xps              r>   Útest_medianr§  ƒ  sè   € ô & i°¸jÓI�J€BˆÜ
�,‰,×
"Ñ
" 1Ó
%€Cà�;‰;˜3 S¨vˆ;Ó6×=Ñ=¸jÓI€DÜ—‘˜T¨Ô-€Ià�:‰:�d 6ˆ:Ó*€DÜ	¨4Ô	0ñ 3Ü˜D tÔ,ˆ	à�;‰;Ð,Ò,ô ! Ó+¨AÑ.°"Ò4Ð4Ð4Ø×#Ñ# t§{¡{Ò2Ð2Ð2÷3ô �Iœw y´UÀ5ÔIÕJ÷3ð 3ús   Â	AC9Ã9Dc                 ó,  — dt        |«      v rdnd}t        | ||«      \  }}t        d¬«      5  t        j                  ddd«      j                  |«      }|j                  ||¬	«      }t        t        t        |«      t        d
¬«      t        |«      |¬«       t        j                  ddd«      j                  |«      }|j                  ||¬	«      }t        t        t        |«      t        d
¬«      t        |«      |¬«       d d d «       y # 1 sw Y   y xY w)NrN  ç�íµ ÷Æ°>çê-�™—q=TrT   iìÿÿÿé   éè  r*   rD   r€   ©Úrtolr   r7   )Ústrr-   r   rI   Úlinspacer\  rJ   r   r%   r   r   r   r   )rþ   r   r½   r®  rx   r+   Úx_npÚx_xps           r>   Útest_expit_logitr³     sé   € ð
 ¤ J£Ñ/‰4°U€DÜ% i°¸jÓI�J€Bˆä	¨4Ô	0ñ 
Ü�~‰~˜c 2 tÓ,×3Ñ3°JÓ?ˆØ�z‰z˜$ vˆzÓ.ˆÜÜ”F˜4“L¤U°5Ô9Ü�$‹KØõ	
ô �~‰~˜a  DÓ)×0Ñ0°Ó<ˆØ�z‰z˜$ vˆzÓ.ˆÜÜ”F˜4“L¤U°5Ô9Ü�$‹KØõ	
÷
÷ 
ñ 
ús   ®CD
Ä
D)r   r7   Nc                 óÌ  — t        | ||«      \  }}t        j                  g d¢g d¢g d¢ddt        j                   gg d¢g|¬«      }|j                  ||¬«      }t        j
                  j                  ||¬	«      }d
t        |«      v rdnd}	| dk(  r|dk(  s| dk(  r&dt        |«      v rt        t        ||¬	«      ||	¬«       t        d¬«      5  t        ||¬	«      }
t        |
t        d¬«      }
t        ||
|	¬«       d d d «       t        j                  dt        j                  dgg d¢t        j                  ddgddt        j                   gg d¢g|¬«      }|j                  ||¬«      }t        j
                  j                  ||¬	«      }t        d¬«      5  t        ||¬	«      }t        |t        d¬«      }t        |||	¬«       d d d «       y # 1 sw Y   ŒÔxY w# 1 sw Y   y xY w)N©r   r9   r¬  ©r8   rÊ   r¬  ©iöÿÿÿr   r   iÎÿÿÿr°   rp  r´   r*   rð   rN  r©  rª  r�   rD   rh   ÚCPUr­  TrT   r€   r   r¬  )r-   rI   rJ   ÚinfÚscipyÚspecialÚ	logsumexpr¯  r   r   r   r%   Únan)r¼   r   r½   r¶   rx   r+   rŽ  rÿ   Úres_npr®  Úres_xpÚ
array_np_2Ú
array_xp_2Úres_np_2Úres_xp_2s                  r>   Ú#test_logsumexp_like_scipy_logsumexprÄ  º  sÆ  € ô & o°{ÀJÓO�J€BˆÜ�}‰}âÚÚØ�!”e—i‘i�ZÐ Úð	
ð ô	€Hð �z‰z˜(¨6ˆzÓ2€Hä�]‰]×$Ñ$ X°DÐ$Ó9€Fà¤ J£Ñ/‰4°U€Dð 	˜7Ò" {°eÒ';ØÐ-Ò-°%¼3¸{Ó;KÑ2Käœ
 8°$Ô7¸ÀdÕKä	¨4Ô	0ñ 3Ü˜H¨4Ô0ˆÜ˜¤E°%Ô8ˆÜ˜ ¨TÕ2÷3ô —‘à”—	‘	˜4Ð ÚÜ�Y‰Y˜˜1ÐØ�!”e—i‘i�ZÐ Úð	
ð ô	€Jð —‘˜J¨v�Ó6€Jä�}‰}×&Ñ& z¸Ð&Ó=€Hä	¨4Ô	0ñ 7Ü˜j¨tÔ4ˆÜ˜8¬°eÔ<ˆÜ˜ (°Õ6÷7ð 7÷)3ð 3ú÷(7ð 7ús   Ã.GÆ.GÇGÇG#c                 ó´  — t        ddd¬«      \  }}t        j                  g d¢g d¢g d¢gt        j                  ¬«      }|j                  ||¬	«      }t	        d
¬«      5  t        || ¬«      }d d d «       j                  |j                  k(  sJ ‚t        t        |t        d¬«      t        j                  j                  || ¬«      d¬«       y # 1 sw Y   ŒbxY w)Nr�   ÚmpsrN  )r   r½   rµ  r¶  r·  r´   r*   TrT   rð   rD   r€   r©  r­  )r-   rI   rJ   rH  r   r   rµ   rN  r   r%   rº  r»  r¼  )r¶   rx   r+   rŽ  rÿ   r¿  s         r>   Ú7test_logsumexp_integer_array_api_on_float32_only_devicerÇ  ò  s·   € ä% g¸5ÈYÔW�J€Bˆô �}‰}Ú	’}¢kÐ2¼%¿+¹+ô€Hð �z‰z˜(¨6ˆzÓ2€Hä	¨4Ô	0ñ 1Ü˜H¨4Ô0ˆ÷1ð �<‰<˜2Ÿ:™:Ò%Ð%Ð%ÜÜ�œ5¨Ô/Ü�‰×Ñ ¨tÐÓ4Øö÷	1ð 1ús   ÁCÃC)rþ   Údevice_Úexpected_types))rI   N©rL  rN  Úfloat16)rh   N)rL  rN  )r�   rD   rÊ  )r�   rH   rÊ  )r�   rÆ  )rN  rË  c                 óv   ‡— t        | |¬«      \  Š}t        ‰|¬«      }t        ˆfd„|D «       «      }||k(  sJ ‚y )Nr~   r*   c              3   ó6   •K  — | ]  }t        ‰|«      –— Œ y ­wrÕ   )r–  )Ú.0r½   rx   s     €r>   ú	<genexpr>z-test_supported_float_types.<locals>.<genexpr>  s   øè ø€ ÒN°”W˜R ×,ÑNùs   ƒ)r-   r'   Útuple)rþ   rÈ  rÉ  r+   Úfloat_typesr¾   rx   s         @r>   Útest_supported_float_typesrÒ    s?   ø€ ô & i¸WÔE�J€BˆÜ(¨°FÔ;€KÜÓN¸~ÔNÓN€HØ˜(Ò"Ð"Ñ"r@   Úuse_sample_weightc                 óf  — d}d}t         j                  j                  d«      }|j                  d||«      j	                  |«      }|j                  ||«      j	                  |«      }t        |||«      \  }	}
|	j                  ||
¬«      }|	j                  ||
¬«      }| r1t        j                  |«      }d|ddd…<   |	j                  ||
¬«      }nd	\  }} t        |¬
«      |||¬«      }t        d¬«      5  t        ||||	¬«      }ddd«       t        j                  |«      sJ ‚y# 1 sw Y   Œ"xY w)z¿Check that the array API version of :func:`_half_multinomial_loss` works
    correctly and matches the results produced by :class:`HalfMultinomialLoss`
    of the private `_loss` module.
    r£   r9   é*   r   r*   r8   r7   N)NN)Ú	n_classes)Úy_trueÚraw_predictionrq  TrT   )r  Úpredrq  rx   )rI   r   r¡  Úrandintr\  Úrandr-   rJ   Ú	ones_liker   r   r   Úisclose)rÓ  rþ   r   r½   Ú	n_samplesrÖ  r¤  r  rÙ  rx   r+   Úy_xpÚpred_xprq  Úsample_weight_xpÚnp_lossÚxp_losss                    r>   Útest_half_multinomial_lossrä    s1  € ð €IØ€IÜ
�,‰,×
"Ñ
" 2Ó
&€CØ�‰�A�y )Ó,×3Ñ3°JÓ?€AØ�8‰8�I˜yÓ)×0Ñ0°Ó<€DÜ% i°¸jÓI�J€BˆØ�:‰:�a ˆ:Ó'€DØ�j‰j˜ fˆjÓ-€GÙÜŸ™¨Ó*ˆØˆ�a�d˜�dÑØŸ:™: m¸F˜:ÓCÑà*4Ñ'ˆÐ'à6Ô!¨IÔ6Ø °]ô€Gô 
¨4Ô	0ñ 
Ü(Ø˜Ð0@ÀRô
ˆ÷
ô
 �=‰=˜ 'Ô*Ð*Ñ*÷
ð 
ús   Ã6D'Ä'D0c                 ó  — t        | ||«      \  }}t        j                  d«      j                  |«      }|j	                  ||¬«      }t        d¬«      5  t        ||¬«      }d d d «       |j                  k(  sJ ‚y # 1 sw Y   ŒxY w)Nr¬  r*   TrT   r  )r-   rI   rZ  r\  rJ   r   r   rµ   )rþ   r   r½   rx   r+   ry   rz   Ú	ret_dtypes           r>   Útest_matching_numpy_dtyperç  =  s|   € ô
 & i°¸jÓI�J€BˆÜ�<‰<˜Ó×$Ñ$ ZÓ0€DØ�:‰:�d 6ˆ:Ó*€DÜ	¨4Ô	0ñ 7Ü)¨$°2Ô6ˆ	÷7à˜Ÿ
™
Ò"Ð"Ñ"÷7ð 7ús   ÁA<Á<B){rs   Ú	functoolsr   rI   rL   rº  Úscipy.sparseÚsparserd   Únumpy.testingr   Úscipy.specialr   r   Úsklearn._configr   Úsklearn._lossr   Úsklearn.baser	   Úsklearn.utils._array_apir
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r+   r�   Úsklearn.utils._testingr,   r-   r.   r/   r0   Úsklearn.utils.fixesr1   r2   r3   r4   ÚmarkÚparametrizerJ   r?   rR   rX   rb   rf   r{   Úparamr‹   r—   r    rÀ   rÉ   rq   rN   ÚZeroDivisionErrorrÎ   rÐ   rì   r½  r¹  rø   r   r	  r  r  r%  r7  r;  r?  rA  rC  re   rE  rI  rP  ra  Úskipifrt   ru   ri  rt  rŽ   rw  r…  r�  r“  r›  r§  r³  rÄ  rÇ  rÒ  rä  rç  )Úargss   0r>   ú<module>rù     sM  ðÛ 	Ý ã Û Û Ý Ý )ß &å *Ý -Ý &÷!÷ !÷ !÷ !÷ !÷ !÷ !÷ !ó !õD÷õ ÷ UÓ Tð ‡�×Ñ˜˜}˜uŸ}™}ªYÓ7ºÀIÐNÓOñ&ó Pð&ò	(ð )Ø‡�×Ñ˜˜}˜uŸ}™}ªYÓ7ºÀIÐNÓOñ	#ó Pó )ð	#ð )Ø‡�×ÑÐ+Ò-VÓWñ
#ó Xó )ð
#ð )ñ#ó )ð#ð )ñ ó )ð ð4 ‡�×ÑØñ =Ó>öàð 	ˆ�‰�d˜2˜A�hÐ+ 4¨¡7Ó+òóñ?óð?òCð0 ‡�×Ñ˜ wÐ0BÐ&CÓDñ*ó Eð*ð ‡�×ÑØ.Ù-Ó/óð ‡�×ÑØ(ð 	 Ø	ˆq�$šÐ(Ø	ˆq�$˜˜A˜ÐØ
�ˆ˜˜4¢Ð+Ú	˜a ¨¨S zÐ2Ø
ˆsˆ�Q˜šoÐ.Ú	˜!˜T D¨$ <Ð0Ø
ˆQˆ��Dš)Ð$Ú	�A�t˜d D˜\Ð*Ú
’YÐ	  Dª/Ð:Ú
’YÐ	  D¨1¨a¨&Ð1àØ	ˆq�%šÐ#Ø	ˆq�%˜!˜R˜Ð!Ø
�ˆ˜˜5¢)Ð,Ú	˜a ¨¨A¨Ð/Ø
ˆsˆ�Q˜šÐ/Ú	˜!˜U S¨# JÐ/Ø
ˆQˆ��Eš;Ð'Ú	�A�u˜q "˜gÐ&Ú
’YÐ	  Eª;Ð7Ú
’YÐ	  E¨A¨r¨7Ð3ð1óñ:Gó;ó	ðBGð, ‡�×ÑØ.Ù-ÀuÔMóñó	ðð* ‡�×ÑØ.Ù-ÀtÔLóð ‡�×ÑØ%ð Ø�ˆFØØ$ð		
ð Ø�ˆVˆHà˜Ð#Øð	
ð ÚØØð		
ð 
ˆR�ˆGÐ&Ð(RÐSð)óñ27ó3ó	ð:7ò2ð )ñ,Ió )ð,Iðd )Ø‡�×Ñ˜Ò$JÓKØ‡�×ÑØà
ˆQ�—	‘	Ð	˜G QÐ'Ø
ˆR�%—)‘)�Ð	˜g rÐ*Ø
�)‰)�U—Y‘YÐ	 ¨%¯)©)Ð4â˜Ÿ™ E§I¡I¨u¯y©yÐ9º;ÐGÙ�G !Ô$Úð	
ò ˜Ÿ™ E§I¡I¨u¯y©yÐ9º;ÐGÙ�G !Ô$Ø�%—)‘)˜SÐ!ð	
ð
 ˆQ�—	‘	Ð	˜G QÐ'Ø
ˆQ�—	‘	Ð	˜G QÐ'Ø�9‰9ˆ*�u—y‘y�jÐ	! 7¨U¯Y©Y¨JÐ7â˜Ÿ™ E§I¡I¨u¯y©yÐ9º;ÐGÙ�G !Ô$Úð	
ò ˜Ÿ™ E§I¡I¨u¯y©yÐ9º;ÐGÙ�G !Ô$Ø�%—)‘)˜SÐ!ð	
ð
 ˆQ�—	‘	Ð	˜H cÐ*Ø
ˆR�%—)‘)�Ð	˜h¨Ð-Ø�9‰9ˆ*�u—y‘y�jÐ	! 8¨e¯i©i¨ZÐ8â˜Ÿ™ E§I¡I¨u¯y©yÐ9º;ÐGÙ�H 1Ô%Úð	
ò ˜Ÿ™ E§I¡I¨u¯y©yÐ9º;ÐGÙ�H 1Ô%Ø�%—)‘)˜SÐ!ð	
ðG(ó+ñX&óY+ó Ló )ð\&ð ‡�×ÑØ(Ù-Ó/óñ;ó	ð;ð" )Ø‡�×Ñ˜ V¨WÐ$5Ó6ñ,ó 7ó )ð,ò ,ô)�mô )ô  ô ð( )Ø‡�×ÑØ à	Ñ3Ð4Ø	Ñ?Ð@Ø	Ñ*Ð+ðóñ5óó )ð5ð )ñ:ó )ð:ð  )ñ"ó )ð"ð  )ñ
<ó )ð
<ð )ñ,ó )ð,ð )Ø‡�×Ñ˜  c 
˜|¨\¨R¯\©\¸CÀ¸:¸,Ó-GÐHÓIñó Jó )ðð. ‡�×ÑØ(Ù-Ó/óñ.ó	ð.ð ‡�×ÑØ(Ù-Ó/óñ
Dó	ð
Dð ‡�×ÑØ.Ù-Ó/óð ‡�×Ñ˜ D¨% =Ó1Ø‡�×Ñ˜¨4°¨-Ó8Ø‡�×Ñ˜ªÓ5Ø‡�×Ñ˜Ò&JÓKñJó Ló 6ó 9ó 2ó	ðJðB ‡�×ÑØ‡J�J‡N�NÐ$Ó%¨Ñ,Ð5Tð ó ñ2óð2ð6 ‡�×ÑØ.Ù-Ó/óð ‡�×Ñ˜¨.Ó9Ø‡�×Ñ˜Ò!5Ó6Ø‡�×ÑÐ-Ò/EÓFñ!Fó Gó 7ó :ó	ð!FðH ‡�×ÑØà	ˆ�‰’YÓ	 Ð$:Ð;Ø	ˆ�‰�q˜!�f˜q !˜fÐ%Ó	&¨¨¯©²IÓ(>Ð@UÐVØ	ˆ�‰�q˜!�f˜q !˜fÐ%Ó	&ª	Ð3HÐIàˆE�K‰K˜!˜Q˜ ! Q Ð(Ó)ØˆE�K‰K˜!˜Q˜ ! Q Ð(Ó)Ø#ð	
ð		óñ2óð2ð ‡�×Ñ˜ f¨e _Ó5Ø‡�×Ñ˜¨$°¨Ó7ñ5ó 8ó 6ð5ðB ‡�×Ñ˜Ò"NÓOØ‡�×ÑØ.Ù-Ó/óñLó	ó Pð
Lð* ‡�×ÑØ.Ù-Ó/óñLó	ðLð  ‡�×Ñ˜¨.Ó9Ø‡�×Ñ˜ d¨E ]Ó3ñUó 4ó :ðUð ‡�×ÑØ(Ù-Ó/óð ‡�×Ñ˜¢Ó.ñKó /ó	ð
Kð0 ‡�×ÑØ(Ù-Ó/óñ
ó	ð
ð, ‡�×ÑØ.Ù-Ó/óð ‡�×Ñ˜¢Ó.ñ07ó /ó	ð
07ðf ‡�×Ñ˜¢Ó.ñó /ðð* ‡�×ÑØ.òó	ñ#ó	ð#ð ‡�×ÑÐ,¨u°d¨mÓ<Ø‡�×ÑØ(Ù-Ó/óñ+ó	ó =ð
+ð> ‡�×ÑØ(Ù-Ó/óñ#ó	ñ#ùòUs   Å3n=
