Ë
    íì�i¤�  ã                   óÚ  — 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 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,m-Z- d dl.m/Z/m0Z0m1Z1m2Z2m3Z3 d d	l4m5Z5m6Z6m7Z7m8Z8 ejr                  ju                  d
 ejv                  g d¢«      g d¢g«      d„ «       Z<d„ Z=e3d„ «       Z>e3ejr                  ju                  dg d¢«      d„ «       «       Z?e3d„ «       Z@e3d„ «       ZAejr                  ju                  d ej„                  ddd¬«       ej„                  ddd¬«       ej„                  ddd¬«       ej„                  ddd¬«       ej„                  ddd¬«      g«      d „ «       ZCd!„ ZDejr                  ju                  d"d#d$g«      d%„ «       ZEejr                  ju                  d& e-«       e¬'«      ejr                  ju                  d(d)dd d*g d+¢fdd,d*d-d.gfd*d/gd d*g d¢fg d0¢d,d*d1d2gfd3d4gd d*g d5¢fg d6¢d,d*d7d8gfd,d-gd d*g d9¢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/dAdBgfd*d/gd d/g d¢fg d0¢d,d/dCdDgfd3d4gd d/g dE¢fg d6¢d,d/dFdGgfd,d-gd d/g dH¢fg d:¢d,d/dDdIgfg d¢g d¢gd d/g dJ¢fg d=¢g d>¢gd,d/dKdLgfg«      dM„ «       «       ZFejr                  ju                  dN e-d/¬O«      e¬'«      dP„ «       ZGejr                  ju                  dN e-d*¬O«      e¬'«      ejr                  ju                  dQdd,d-geHdRfd d,d-ggeIeHfdSfd g dT¢eIdSfd dUd,geJdVff«      dW„ «       «       ZKdX„ ZLe3dY„ «       ZMe3ejr                  ju                  dZg d[¢«      ejr                  ju                  d\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 d^¢g ee#d ¬_«      g d`¢fg d¢ejœ                  ejœ                  ejœ                  gg d^¢g ee#d,¬_«      daejœ                  dbg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 d^¢g ee!d ¬_«      g dc¢fg d¢ejœ                  ejœ                  ejœ                  gg d^¢g ee!d,¬_«      ddejœ                  degfd,d-ejœ                  ge"d1fd,d]ejœ                   ge"dffejž                   ejž                   ge"ejž                   fg d¢ejœ                  ejœ                  ejœ                  gg d^¢g ee"d ¬_«      g d+¢fg d¢ejœ                  ejœ                  ejœ                  gg d^¢g ee"d,¬_«      dgejœ                  dhgfg«      di„ «       «       «       ZPejr                  ju                  dj e-«       e¬'«      dk„ «       ZQe3ejr                  ju                  dZdldmg«      dn„ «       «       ZRdo„ ZS G dp„ dqe«      ZTe3ejr                  ju                  drdmds„ fd$dt„ fdldu„ fg«      dv„ «       «       ZUe3dw„ «       ZVejr                  ju                  dj e-«       e¬'«      dx„ «       ZWejr                  ju                  dj e-«       e¬'«      dy„ «       ZXejr                  ju                  dz e-«       e¬'«      ejr                  ju                  d{d*d/g«      ejr                  ju                  d|d*d/g«      ejr                  ju                  d}g d~¢«      ejr                  ju                  dg d€¢«      d�„ «       «       «       «       «       ZYejr                  jµ                  e j¶                  j¹                  d‚«      dƒk7  d„¬…«      d†„ «       Z]ejr                  ju                  d& e-«       e¬'«      ejr                  ju                  d‡e6«      ejr                  ju                  dˆg d‰¢«      ejr                  ju                  dŠg d‹¢«      dŒ„ «       «       «       «       Z^ejr                  ju                  d� ej¾                  g d¢«      d,dŽf ej¾                  d,d-gdCd�gg«       ej¾                  g d¢«      d�f ej¾                  d,d-gdCd�gg«      g d¢d�f ej¾                  d,d-gdCd�gg«       ej¾                  d,d-gdCd�gg«      d‘fg«      d’„ «       Z`ejr                  ju                  d“d”d•g«      ejr                  ju                  d–d*d/g«      d—„ «       «       Zaejr                  ju                  d˜g d™¢«      ejr                  ju                  d& e-«       e¬'«      dš„ «       «       Zbejr                  ju                  d& e-«       e¬'«      d›„ «       Zcejr                  ju                  d‡e6«      ejr                  ju                  dœd*d/g«      d�„ «       «       Zdejr                  ju                  dž e-«       e¬'«      ejr                  ju                  dˆg dŸ¢«      d „ «       «       Zeejr                  ju                  d& e-«       «      ejr                  ju                  dˆg d¡¢«      d¢„ «       «       Zfejr                  ju                  d£g d¤¢«      d¥„ «       Zgejr                  ju                  d¦d/d*g«      ejr                  ju                  d§ e-«       «      d¨„ «       «       Zhy)©é    N)Úpartial)Úassert_allclose)Úconfig_context)ÚHalfMultinomialLoss)ÚBaseEstimator)Ú_add_to_diagonalÚ_asarray_with_orderÚ_atol_for_typeÚ_averageÚ_convert_to_numpyÚ_count_nonzeroÚ _estimator_with_converted_arraysÚ_fill_diagonalÚ_get_namespace_device_dtype_idsÚ_half_multinomial_lossÚ_is_numpy_namespaceÚ_isinÚ
_logsumexpÚ_max_precision_float_dtypeÚ_medianÚ_nanmaxÚ_nanmeanÚ_nanminÚ_ravelÚ_validate_diagonal_argsÚdeviceÚget_namespaceÚget_namespace_and_deviceÚindexing_dtypeÚmove_toÚ	np_compatÚsupported_float_dtypesÚ)yield_namespace_device_dtype_combinations)Ú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!   )r-   Úxp_outÚis_array_api_compliants      ú‡/var/www/ITT-ServiceAPI-Services/ITT-Document-Scan/mrzscanner/mrzenv/lib/python3.12/site-packages/sklearn/utils/tests/test_array_api.pyÚ"test_get_namespace_ndarray_defaultr6   5   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.r.   é
   ç       @Úcpu)Ú
fill_valuer   zUnsupported device©ÚmatchÚcuda©r   N)	ÚnumpyÚasarrayr   Úfullr   ÚpytestÚraisesÚ
ValueErrorÚzeros)r-   r3   Ú_Ú
full_arrays       r5   Ú*test_get_namespace_ndarray_creation_devicerJ   =   sv   € ä�‰’iÓ €AÜ˜aÓ �I€FˆAà—‘˜R¨C¸�Ó>€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)rA   rB   r   r   r!   )ÚX_npr3   r4   s      r5   Ú(test_get_namespace_ndarray_with_dispatchrO   I   sZ   € ô �=‰=š)˜Ó%€Dä	¨4Ô	0ñ #Ü)6°tÓ)<Ñ&ˆÐ&Ù%Ð%Ð%ð œÑ"Ð"Ñ"÷#÷ #ñ #ús   ¥AÁAÚconstructor_name)ÚpyarrowÚ	dataframeÚ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.)r/   é   r0   )r1   r1   é   TrL   N)r&   r   r   r!   )rP   Údfr3   r4   s       r5   Ú#test_get_namespace_df_with_dispatchrY   X   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.TrL   r.   N)r   r   ÚspÚ	csr_arrayr!   )r3   r4   s     r5   Ú'test_get_namespace_sparse_with_dispatchr]   i   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_strictr.   TrL   Nc                 ó   — | dk(  ryy )NÚSCIPY_ARRAY_APIÚ0© )Úkeys    r5   Úmock_getenvz1test_get_namespace_array_api.<locals>.mock_getenvƒ   s   € ØÐ'Ò'Øð (r7   zos.environ.getra   Ú1z#scipy's own support is not enabled.r=   )rD   ÚimportorskiprA   rB   r   r   rE   Ú	TypeErrorÚsetattrÚosÚenvironÚgetÚRuntimeError)ÚmonkeypatchÚxprN   ÚX_xpr3   r4   re   s          r5   Útest_get_namespace_array_apirq   u   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, reference)ÚcupyN)Útorchr?   zcupy to torch cuda)Úid)rs   Úmps)rA   Nztorch mps to numpyznumpy to torch cudaznumpy to torch mps)r_   Nzarray_api_strict to torch mpsc                 óØ  — | d   dk(  rt        j                  dd¬«      }t        |d   |d   «      }t        | d   | d   «      }t        d¬«      5  t	        |j                  dg|d   ¬«      «      }| d   dk(  rj                  d	«      }n| d   }|j                  g d
¢|¬«      }t        |||¬«      }t        |«      d   |k(  sJ ‚t	        |«      |k(  sJ ‚	 ddd«       y# 1 sw Y   yxY w)z7Check conversion between various namespace and devices.r   r_   zarray-api-strict not available©Úreasonr/   TrL   r@   Ú
CPU_DEVICEr.   ©ro   r   N)	rD   rg   r%   r   r   rB   ÚDevicer    r   )	Úarray_inputÚ	referencer_   ro   Úxp_arrayÚdevice_Úarray_deviceÚarrayÚ	array_outs	            r5   Ú"test_move_to_array_api_conversionsrƒ   �   s   € ð  �1�~Ð+Ò+Ü!×.Ñ.ØÐ'Gô
Ðô 
˜i¨™l¨I°a©LÓ	9€BÜ# K°¡N°KÀ±NÓC€Hä	¨4Ô	0ñ ,Ü˜Ÿ™ Q C°	¸!±˜Ó=Ó>ˆà�q‰>Ð/Ò/Ø+×2Ñ2°<Ó@‰Là& q™>ˆLØ× Ñ ¢°<Ð Ó@ˆä˜E b°Ô9ˆ	Ü˜YÓ'¨Ñ*¨bÒ0Ð0Ð0Ü�iÓ  GÒ+Ð+Ñ+÷,÷ ,ñ ,ús   ÁBC Ã C)c                  óp  — t        dd«      } t        dd«      }t        j                  g d¢«      }t        j                  g d¢«      }t        j                  g d¢«      }t        d¬	«      5  |j                  d
g«      j                  }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.rA   Nrs   r;   )r   r/   r0   r1   )r   r/   r   r/   r.   TrL   r/   rz   z6Sparse arrays are only accepted \(and passed through\)r=   )r%   r[   r\   rA   r�   r   rB   r   r    rD   rE   rh   )	Úxp_numpyÚxp_torchÚsparse1Úsparse2Únumpy_arrayÚ
device_cpuÚresult1Úresult2Úmsgs	            r5   Útest_move_to_sparserŽ   µ   s$  € ä# G¨TÓ2€HÜ# G¨UÓ3€Hä�l‰lš<Ó(€GÜ�l‰lš<Ó(€GÜ—+‘+šiÓ(€Kä	¨4Ô	0ñ CØ×%Ñ% q cÓ*×1Ñ1ˆ
ô # 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=   Á*AD,Ã DÃ#D,Ã3D ÄD,ÄD	ÄD,Ä D)	Ä%D,Ä,D5Ú	array_apirA   r_   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)Úorderro   ÚF_CONTIGUOUSN)rD   rg   rB   r	   rA   Úflags)r�   ro   r-   ÚX_newÚX_new_nps        r5   Útest_asarray_with_orderr—   Î   sP   € ô 
×	Ñ	˜YÓ	'€Bà
�
‰
’?Ó#€AÜ ¨°Ô4€Eä�}‰}˜UÓ#€HØ�>‰>˜.Ò)Ð)Ñ)r7   z$array_namespace, device_, dtype_name)Úidsz"weights, axis, normalize, expected)NNTç      @T)g      @r™   ç      @r/   r0   é   F)TTFç      ø?rš   çš™™™™™Ù?gš™™™™™¹?)gš™™™™™ù?gÍÌÌÌÌÌ@gÍÌÌÌÌÌ@)r�   çš™™™™™É?rž   g      ü?g      @)r1   rV   r›   )r/   r/   r0   g      @g      @)r/   r0   r/   )r0   r0   r0   )NNFé   )r›   é   é	   rW   é   r1   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        |	|t        |«      ¬
«       y # 1 sw Y   Œ-xY w)Nr.   ©rV   r›   rW   ©Údtyper@   TrL   )ÚaxisÚweightsÚ	normalizeú2.0.0ú2.1.0)Úatol)r%   rA   rB   r   r   r+   r,   r   r   r   r
   )
Úarray_namespacer   Ú
dtype_namer¯   r®   r°   Úexpectedro   Úarray_inÚresults
             r5   Útest_averager¹   Ú   sÞ   € ôJ 
˜o¨wÓ	7€BÜ�}‰}šiªÐ3¸:ÔF€HØ�z‰z˜(¨7ˆzÓ3€HØÐÜ—-‘- ¨zÔ:ˆØ—*‘*˜W¨W�*Ó5ˆä	¨4Ô	0ñ 6Ü˜(¨°wÈ)ÔTˆäœ gÓ.Ò.´*ÄÈgÓ@VÒ2Vô ˜(Ó#¤v¨f£~Ò5Ð5Ð5÷6ô ˜v rÓ*€FÜ�F˜H¬>¸*Ó+EÖF÷6ð 6ús   Á5A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)Nr0   r   r¬   y              ð?rV   r1   z does not support r@   z;Complex floating point values are not supported by average.TrL   r=   )r%   rA   rB   r­   ÚnameÚhasattrrD   Úskipr   rE   ÚNotImplementedErrorr   )r´   r   rµ   ro   r·   Úcomplex_type_nameÚerr_msgs          r5   Ú$test_average_raises_with_wrong_dtyperÂ     sÞ   € ô 
˜o¨vÓ	6€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%Ã%C.zaxis, weights, error, error_msgzAxis must be specifiedr¯   )r/   r0   r1   rV   éÿÿÿÿz(Weights sum to zero, can't be normalizedc                 ó†  — t        | |«      }t        j                  g d¢g d¢g|¬«      }|j                  ||¬«      }t        j                  ||¬«      }|j                  ||¬«      }t        d¬«      5  t	        j
                  ||¬«      5  t        |||¬«       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)	Nr.   r«   r¬   r@   TrL   r=   )r®   r¯   )r%   rA   rB   r   rD   rE   r   )	r´   r   rµ   r®   r¯   ÚerrorÚ	error_msgro   r·   s	            r5   Ú+test_average_raises_with_invalid_parametersrÇ   ,  s¥   € ôB 
˜o¨vÓ	6€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$   Á3B7ÂB+ÂB7Â+B4	Â0B7Â7C c                  ó8   — t        «       �J ‚t        d d«      �J ‚y )Nr¼   r@   rc   r7   r5   Útest_device_none_if_no_inputrÉ   Y  s#   € Ü‹8ÐÐÐä�$˜ÓÐ'Ð'Ñ'r7   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     r5   Ú__init__z/test_device_inspection.<locals>.Device.__init__b  s	   € ØˆD�Ir7   c                 ó4   — | j                   |j                   k(  S rÎ   rÏ   )rÐ   r   s     r5   Ú__eq__z-test_device_inspection.<locals>.Device.__eq__e  s   € Ø—9‘9 §¡Ñ+Ð+r7   c                 ó   — t        d«      ‚)NzDevice object is not hashable)rh   ©rÐ   s    r5   Ú__hash__z/test_device_inspection.<locals>.Device.__hash__h  s   € ÜÐ;Ó<Ð<r7   c                 ó   — | j                   S rÎ   rÏ   rÕ   s    r5   Ú__str__z.test_device_inspection.<locals>.Device.__str__k  s   € Ø—9‘9Ðr7   N)Ú__name__Ú
__module__Ú__qualname__rÑ   rÓ   rÖ   rØ   rc   r7   r5   r{   rÌ   a  s   „ ò	ò	,ò	=ó	r7   r{   c                   ó   •— e Zd Zˆ fd„Zy)ú%test_device_inspection.<locals>.Arrayc                 ó    •—  ‰|«      | _         y rÎ   r@   )rÐ   Údevice_namer{   s     €r5   rÑ   z.test_device_inspection.<locals>.Array.__init__o  s   ø€ Ù  Ó-ˆD�Kr7   N)rÙ   rÚ   rÛ   rÑ   )r{   s   €r5   ÚArrayrÝ   n  s   ø„ õ	.r7   rà   r   r;   Úmygpuz.Input arrays use different devices: cpu, mygpuTrL   r=   )rD   rE   rh   Úhashr   r   rF   )rà   rÁ   Úarray1Úarray2r{   s       @r5   Útest_device_inspectionrå   _  s%  ø€ ÷ñ ÷.ó .ô 
�‰”yÓ	!ñ %Ü‰U�8‹_×#Ñ#Ô$÷%ô ‘%˜“,¡ g£Ó/Ð7Ð7Ð7ð ?€GÜ	¨4Ô	0ñ 
?Ü�]‰]œ:¨WÔ5ñ 	1Ü‘5˜“<¡ w£Ô0÷	1ñ �x“ˆÙ�x“ˆà�}‰}¤ v£Ò.Ð.Ð.Ø�}‰}¤ v¨vÓ 6Ò6Ð6Ð6Ø�}‰}¤ v¨v°vÓ >Ò>Ð>Ñ>÷
?ð 
?÷%ð %ú÷	1ð 	1ú÷
?ð 
?ús0   ±D%Á=D=ÂD1Â2A)D=Ä%D.Ä1D:	Ä6D=Ä=EÚlibrary)rA   r_   rs   zX,reduction,expectedéþÿÿÿ)rV   r›   ç      @©r®   ©ç      ð?r:   ç      @rë   ç      @)rí   ç      @rè   rì   rè   g      à¿r:   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 _nanmaxTrL   N)rD   rg   r   rB   r   r   )ræ   r-   Ú	reductionr¶   ro   r¸   s         r5   Útest_nan_reductionsrñ   ’  s\   € ô` 
×	Ñ	˜WÓ	%€Bä	¨4Ô	0ñ *Ù˜2Ÿ:™: a›=Ó)ˆ÷*ô ˜v rÓ*€FÜ�F˜HÕ%÷	*ð *ús   ¢AÁA$znamespace, _device, _dtypec                 ót  — t        | |«      }g d¢g d¢g d¢g d¢g}|j                  ||¬«      }t        d¬«      5  t        |«      }d d d «       t	        |«      }t        j                  |d¬	«      }t        ||«       t        |«      r%t        j                  |«      j                  d
   sJ ‚y y # 1 sw Y   ŒixY w)Nr.   r«   )r    r¨   r¡   )r9   é   r¥   r@   TrL   ÚC)r’   ÚC_CONTIGUOUS)
r%   rB   r   r   r   rA   Úravelr   r   r”   )Ú	namespaceÚ_deviceÚ_dtypero   r�   Úarray_xpr¸   r¶   s           r5   Ú
test_ravelrû   Ë  s©   € ô 
˜i¨Ó	1€Bâš	¢9ªlÐ;€EØ�z‰z˜%¨ˆzÓ0€HÜ	¨4Ô	0ñ "Ü˜Ó!ˆ÷"ô ˜v rÓ*€FÜ�{‰{˜5¨Ô,€Hä�H˜fÔ%ä˜2ÔÜ�}‰}˜VÓ$×*Ñ*¨>Ò:Ð:Ñ:ð ÷"ð "ús   ºB.Â.B7rr   rs   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.rs   ztest requires cudarê   r?   r@   ©ro   N)
rD   rg   Úbackendsr?   Úis_builtr¾   rB   r   rA   r   )ræ   ro   ÚX_gpuÚX_cpuÚexpected_outputs        r5   Útest_convert_to_numpy_gpur  á  sƒ   € ô 
×	Ñ	˜WÓ	%€Bà�'ÒØ�{‰{×Ñ×(Ñ(Ô*Ü�K‰KÐ,Ô-Ø—
‘
š?°6�
Ó:‰à—
‘
š?Ó+ˆä˜e¨Ô+€EÜ—m‘m¢OÓ4€OÜ�E˜?Õ+r7   c                  ó¸   — t        j                  d«      } | j                  g d¢d¬«      }t        || ¬«      }t	        j                  g d¢«      }t        ||«       y)z.Check convert_to_numpy for PyTorch CPU arrays.rs   rê   r;   r@   rý   N)rD   rg   rB   r   rA   r   )rs   ÚX_torchr  r  s       r5   Útest_convert_to_numpy_cpur  ó  sH   € ä×Ñ Ó(€EØ�m‰mšO°EˆmÓ:€Gä˜g¨%Ô0€EÜ—m‘m¢OÓ4€OÜ�E˜?Õ+r7   c                   ó   — e Zd Zdd„Zy)ÚSimpleEstimatorNc                 ó<   — || _         |j                  d   | _        | S )Nr   )ÚX_ÚshapeÚn_features_)rÐ   r-   Úys      r5   ÚfitzSimpleEstimator.fitþ  s   € ØˆŒØŸ7™7 1™:ˆÔØˆr7   rÎ   )rÙ   rÚ   rÛ   r  rc   r7   r5   r  r  ý  s   „ ôr7   r  zarray_namespace, converterc                 ó>   — | j                  «       j                  «       S rÎ   )r;   rA   ©r�   s    r5   ú<lambda>r    s   €  §	¡	£× 1Ñ 1Ó 3€ r7   c                 ó,   — t        j                  | «      S rÎ   )rA   rB   r  s    r5   r  r  	  s   € ¬5¯=©=¸Ó+?€ r7   c                 ó"   — | j                  «       S rÎ   )rl   r  s    r5   r  r  
  s   € ˜uŸy™y›{€ r7   c                 óì   — t        j                  | «      }|j                  ddgg«      }t        «       j	                  |«      }t        ||«      }t        |j                  t        j                  «      sJ ‚y)z(Convert estimator attributes to ndarray.r¤   rš   N)
rD   rg   rB   r  r  r   Ú
isinstancer
  rA   Úndarray)r´   Ú	converterro   r-   ÚestÚnew_ests         r5   Ú!test_convert_estimator_to_ndarrayr    s_   € ô 
×	Ñ	˜_Ó	-€Bà
�
‰
�S˜#�J�<Ó €AÜ
Ó
×
Ñ
 Ó
"€Cä.¨s°IÓ>€GÜ�g—j‘j¤%§-¡-Ô0Ð0Ñ0r7   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.r_   r¤   rš   c                 ó&   •— ‰j                  | «      S rÎ   )rB   )r�   ro   s    €r5   r  z5test_convert_estimator_to_array_api.<locals>.<lambda>   s   ø€ À"Ç*Á*ÈUÓBS€ r7   Ú__array_namespace__N)	rD   rg   rA   rB   r  r  r   r½   r
  )rN   r  r  ro   s      @r5   Ú#test_convert_estimator_to_array_apir    s_   ø€ ô 
×	Ñ	Ð/Ó	0€Bä�=‰=˜3 ˜*˜Ó&€DÜ
Ó
×
Ñ
 Ó
%€Cä.¨sÓ4SÓT€GÜ�7—:‘:Ð4Ô5Ð5Ñ5r7   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ù   ro   s       r5   Útest_indexing_dtyper"  $  sA   € ô 
˜i¨Ó	1€BåÜ˜bÓ! R§X¡XÒ-Ð-Ñ-ä˜bÓ! R§X¡XÒ-Ð-Ñ-r7   c                 óx   — t        | |«      }|dk(  r|j                  n|j                  }t        ||«      |k(  sJ ‚y )Nru   )r%   Úfloat32Úfloat64r   )r÷   rø   rù   ro   Úexpected_dtypes        r5   Útest_max_precision_float_dtyper'  2  s;   € ô 
˜i¨Ó	1€BØ#*¨eÒ#3�R—Z’Z¸¿¹€NÜ% b¨'Ó2°nÒDÐDÑDr7   zarray_namespace, device, _ÚinvertÚassume_uniqueÚelement_size)rW   r9   r¦   Ú	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)
Nr0   r¦   r¬   r@   )ÚelementÚtest_elementsr)  r(  TrL   )r/  r0  ro   r)  r(  rý   )r%   rA   ÚarangeÚreshapeÚastyper�   rB   Úisinr   r   r'   r   )r´   r   rH   r(  r)  r*  r+  ro   Úrr/  r0  Ú
element_xpÚtest_elements_xpr¶   r¸   s                  r5   Ú	test_isinr8  =  së   € ô 
˜o¨vÓ	6€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ñ 
ÜØØ*ØØ'Øô
ˆ÷
ô Ô(¨°BÔ7¸ÕB÷
ð 
ús   Â?C0Ã0C9ra   rf   zSCIPY_ARRAY_API not set to 1.rw   c                  ó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)	Nrs   r   )rs   r1   r;   r@   TrL   )
rD   rg   Ú"sklearn.externals.array_api_compatrs   r1  rA   r   r   r   r   )rs   Útorch_compatÚsome_torch_tensorÚsome_numpy_arrayr÷   Úis_array_apir   s          r5   Útest_get_namespace_and_devicer?  a  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   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   r1   r   )r0   rÃ   r   )r   r   r   )r¡   r¨   r    ©rV   r   r›   rB  )r/   r0   r0   r1   r/   rC  )g      à?rœ   r£   gš™™™™™	@g333333@r¬   )r®   Úsample_weightr@   TrL   )r®   rG  ro   r   rý   r±   r²   )Úsklearn.utils.sparsefuncsrE  r%   rA   r�   rB   r   r   r   r   r+   r,   r   )r´   r   rµ   r@  r®   rA  Úsparse_count_nonzeroro   r�   rG  r¶   rú   r¸   s                r5   Útest_count_nonzerorJ    s	  € õ Pä	˜o¨wÓ	7€BÜ�K‰Kš¢J²	º9ÂiÐPÓQ€EØ˜UÒ"ÜŸ™¢oÓ6‰Ø	˜wÒ	&ÜŸ™Ò&?ÀzÔR‰àˆÙ#Ù�eÓ 4°}ô€Hð �z‰z˜%¨ˆzÓ0€Hä	¨4Ô	0ñ 
ÜØ˜4¨}ÀÈGô
ˆ÷
ô
 Ô% f°Ô4°hÔ?ä”M 'Ó*Ò*¬j¼MÈ'Ó<RÒ.Rô �hÓ¤6¨&£>Ò1Ð1Ñ1ð /S÷
ð 
ús   Â%DÄDzarray, value, matchz`array` should be 2DrV   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.rA   Nr=   )r%   rD   rE   rF   r   )r�   Úvaluer>   ro   s       r5   Útest_validate_diagonal_argsrM  ¦  s?   € ô 
˜g tÓ	,€BÜ	�‰”z¨Ô	/ñ 2Ü  u¨bÔ1÷2÷ 2ñ 2ús	   ¨?¿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.rA   N©r1   rV   rõ   rO  r/   )r1   )r   r/   r0   r1   )ró   r¥   é   )r%   rA   rG   ÚTr”   r   r   r   ÚdiagonalÚonesr1  r�   )rQ  rN  ro   r�   ÚfuncÚexpected_diagÚ
fill_arrays          r5   Útest_fill_and_add_to_diagonalr[  º  s)  € ô 
˜g tÓ	,€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Õ4r7   r�   )ÚstandardÚ
transposedúnon-contiguousc                 ó>  — 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        ||¬«      |«       y# 1 sw Y   Œ!xY w)zHCheck array API `_fill_diagonal` consistent with `numpy._fill_diagonal`.)rV   r›   r¬   r]  r@   r^  Nr0   r/   )ÚvalTrL   ©rL  ro   rý   )r%   rA   rG   rB   ÚcopyrU  Úfill_diagonalr   r   r'   r   )r�   r´   r   rµ   ro   Úarray_nprú   s          r5   Útest_fill_diagonalre  Ý  sü   € ô 
˜o¨wÓ	7€BÜ�{‰{˜6¨Ô4€Hà�ÒØ—:‘:˜hŸm™m›o°g�:Ó>×@Ñ@ˆØ—:‘:‰Ø	Ð"Ò	"Ø—:‘:˜hŸm™m›o°g�:Ó>¹sÀ¸sÁCÀaÀC¸xÑHˆØ™C˜a˜C¡ 1 ˜HÑ%‰à—:‘:˜hŸm™m›o°g�:Ó>ˆä	×Ñ˜ aÕ(Ü	¨4Ô	0ñ 1Ü�x q¨RÕ0÷1ô Ô(¨°bÔ9¸8ÕD÷1ð 1ús   Ã$DÄDc                 óT  — t        | |«      }t        dd«      }t        j                  d|¬«      }|j                  |j	                  «       |¬«      }g d¢}t        |||¬«       t        d¬	«      5  t        |||¬«       ddd«       t        t        ||¬
«      |«       y# 1 sw Y   Œ!xY w)zMCheck `_add_to_diagonal` consistent between array API xp and numpy namespace.rA   NrS  r¬   r@   r.   ra  TrL   rý   )	r%   rA   rG   rB   rb  r   r   r'   r   )r´   r   rµ   ro   Únp_xprd  rú   Úadd_vals           r5   Útest_add_to_diagonalri  ø  s’   € ô 
˜o¨wÓ	7€BÜ  ¨$Ó/€Eä�{‰{˜6¨Ô4€HØ�z‰z˜(Ÿ-™-›/°'ˆzÓ:€Hâ€GÜ�8 7¨uÕ5Ü	¨4Ô	0ñ 7Ü�x w°2Õ6÷7ô Ô(¨°bÔ9¸8ÕD÷7ð 7ús   Á/BÂB'Ú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)Nr/   r   r0   ra   z8SCIPY_ARRAY_API is not set: not checking array_api inputrL   )
rA   r�   Úgetattrrj   rk   rl   r$   r   r   r   )r@  rj  Únp_arrÚexpected_numpy_array_deviceÚaÚbs         r5   Útest_sparse_devicerq    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Ü�a˜‹|Ð#Ð#Ð#Ü�a˜Ó Ð$?Ò?Ð?Ð?Ü'¨¨1Ó-¨aÑ0Ð8Ð8Ð8Ü'¨¨6Ó2°1Ñ5Ð9TÒTÐTÑT÷	U÷ Uñ Uús   ÂAC)Ã)C2znamespace, device, dtype_name)Nr   r/   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        	|¬«      «       y # 1 sw Y   Œ!xY w)Nr   g        rë   )r›   rV   )ÚlowÚhighÚsizeré   r@   TrL   r_   rý   )r%   rA   ÚrandomÚRandomStateÚuniformr3  ÚmedianrB   r   r   rÙ   r   r   r   r   )
r÷   r   rµ   r®   ro   ÚrngrN   Ú	result_nprp   Ú	result_xps
             r5   Útest_medianr}    sá   € ô 
˜i¨Ó	0€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Ô0°¸rÔBÕC÷3ð 3ús   ÂAC0Ã0C9)r   r/   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 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 d d «       y # 1 sw Y   ŒÎxY w# 1 sw Y   y xY w)N)r   r1   éè  )r0   rÃ   r  )iöÿÿÿr   r   iÎÿÿÿr¨   rF  r¬   r@   ré   r$  g�íµ ÷Æ°>gê-�™—q=rs   r;   r_   ÚCPU)ÚrtolTrL   r   r  )r%   rA   rB   ÚinfÚscipyÚspecialÚ	logsumexpÚstrr   r   r   r   Únan)r´   r   rµ   r®   ro   rd  rú   Úres_npr�  Úres_xpÚ
array_np_2Ú
array_xp_2Úres_np_2Úres_xp_2s                 r5   Ú#test_logsumexp_like_scipy_logsumexprŽ  ;  s»  € ô
 
˜o¨wÓ	7€BÜ�}‰}âÚÚØ�!”e—i‘i�ZÐ Úð	
ð ô	€Hð �z‰z˜(¨7ˆzÓ3€Hä�]‰]×$Ñ$ X°DÐ$Ó9€Fà¤ J£Ñ/‰4°U€Dð 	˜7Ò" w°%Ò'7ØÐ-Ò-°%¼3¸w»<Ñ2Gäœ
 8°$Ô7¸ÀdÕKä	¨4Ô	0ñ 3Ü˜H¨4Ô0ˆÜ" 6¨2Ó.ˆÜ˜ ¨TÕ2÷3ô —‘à”—	‘	˜4Ð ÚÜ�Y‰Y˜˜1ÐØ�!”e—i‘i�ZÐ Úð	
ð ô	€Jð —‘˜J¨w�Ó7€Jä�}‰}×&Ñ& z¸Ð&Ó=€Hä	¨4Ô	0ñ 7Ü˜j¨tÔ4ˆÜ$ X¨rÓ2ˆÜ˜ (°Õ6÷7ð 7÷)3ð 3ú÷(7ð 7ús   Ã	(F>Æ(G
Æ>GÇ
G)r÷   r   Úexpected_types))rA   N©r%  r$  Úfloat16)r_   N)r%  r$  )rs   r;   r�  )rs   r?   r�  )rs   ru   )r$  r‘  c                 ón   ‡— t        | |«      Št        ‰|¬«      }t        ˆfd„|D «       «      }||k(  sJ ‚y )Nr@   c              3   ó6   •K  — | ]  }t        ‰|«      –— Œ y ­wrÎ   )rl  )Ú.0rµ   ro   s     €r5   ú	<genexpr>z-test_supported_float_types.<locals>.<genexpr>  s   øè ø€ ÒN°”W˜R ×,ÑNùs   ƒ)r%   r"   Útuple)r÷   r   r�  Úfloat_typesr¶   ro   s        @r5   Útest_supported_float_typesr˜  r  s;   ø€ ô 
˜i¨Ó	1€BÜ(¨°GÔ<€KÜÓN¸~ÔNÓN€HØ˜(Ò"Ð"Ñ"r7   Úuse_sample_weightznamespace, device_, dtype_namec                 ó^  — 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›   r1   é*   r   r@   r0   r/   N)NN)Ú	n_classes)Úy_trueÚraw_predictionrG  TrL   )r  ÚpredrG  ro   )rA   rv  rw  Úrandintr3  Úrandr%   rB   Ú	ones_liker   r   r   Úisclose)r™  r÷   r   rµ   Ú	n_samplesrœ  rz  r  rŸ  ro   Úy_xpÚpred_xprG  Úsample_weight_xpÚnp_lossÚxp_losss                   r5   Útest_half_multinomial_lossrª  ƒ  s+  € ð €IØ€IÜ
�,‰,×
"Ñ
" 2Ó
&€CØ�‰�A�y )Ó,×3Ñ3°JÓ?€AØ�8‰8�I˜yÓ)×0Ñ0°Ó<€DÜ	˜i¨Ó	1€BØ�:‰:�a ˆ:Ó(€DØ�j‰j˜ gˆjÓ.€GÙÜŸ™¨Ó*ˆØˆ�a�d˜�dÑØŸ:™: m¸G˜:ÓDÑà*4Ñ'ˆÐ'à6Ô!¨IÔ6Ø °]ô€Gô 
¨4Ô	0ñ 
Ü(Ø˜Ð0@ÀRô
ˆ÷
ô
 �=‰=˜ 'Ô*Ð*Ñ*÷
ð 
ús   Ã2D#Ä#D,)irj   Ú	functoolsr   rA   rD   rƒ  Úscipy.sparseÚsparser[   Únumpy.testingr   Ú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#   Úsklearn.utils._testingr$   r%   r&   r'   r(   Úsklearn.utils.fixesr)   r*   r+   r,   ÚmarkÚparametrizerB   r6   rJ   rO   rY   r]   rq   Úparamrƒ   rŽ   r—   r¹   rÂ   rh   rF   ÚZeroDivisionErrorrÇ   rÉ   rå   r‡  r‚  rñ   rû   r  r  r  r  r  r"  r'  r8  Úskipifrk   rl   r?  rJ  r�   rM  r[  re  ri  rq  r}  rŽ  r˜  rª  rc   r7   r5   ú<module>rº     s†  ðÛ 	Ý ã Û Û Ý Ý )å *Ý -Ý &÷÷ ÷ ÷ ÷ ÷ ÷ ó ÷<õ ÷ UÓ Tð ‡�×Ñ˜˜}˜uŸ}™}ªYÓ7ºÐCÓDñ&ó Eð&ò	(ð )ñ#ó )ð#ð )Ø‡�×ÑØÒDóñ
#óó )ð
#ð )ñ#ó )ð#ð )ñ ó )ð ð4 ‡�×ÑØàˆ�‰�^Ð%6Ð;OÔPØˆ�‰Ð% Ð;OÔPØˆ�‰�_Ð&7Ð<QÔRØˆ�‰�_Ð&6Ð;OÔPØˆ�‰Ø&ØØ.ô	
ð
óñ,óð,ò.Cð2 ‡�×Ñ˜ 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ó;óðDGð, ‡�×ÑØ)Ù-ÀuÔMØ'ð ó ñ
óð
ð* ‡�×ÑØ)Ù-ÀtÔLØ'ð ó ð
 ‡�×ÑØ%ð Ø�ˆFØØ$ð		
ð Ø�ˆVˆHà˜Ð#Øð	
ð ÚØØð		
ð 
ˆR�ˆGÐ&Ð(RÐSð)óñ27ó3óð<7ò(ð )ñ,?ó )ð,?ð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Ø	Ñ?Ð@Ø	Ñ*Ð+ðóñ1óó )ð1ð )ñ6ó )ð6ð ‡�×ÑØ Ù-Ó/Ø'ð ó ñ
.óð
.ð ‡�×ÑØ Ù-Ó/Ø'ð ó ñ
Eóð
Eð ‡�×ÑØ Ù-Ó/Ø'ð ó ð
 ‡�×Ñ˜ D¨% =Ó1Ø‡�×Ñ˜¨4°¨-Ó8Ø‡�×Ñ˜ªÓ5Ø‡�×Ñ˜Ò&JÓKñCó Ló 6ó 9ó 2óðCð6 ‡�×ÑØ‡J�J‡N�NÐ$Ó%¨Ñ,Ð5Tð ó ñ2óð2ð6 ‡�×ÑØ*Ù-Ó/Ø'ð ó ð
 ‡�×Ñ˜¨.Ó9Ø‡�×Ñ˜Ò!5Ó6Ø‡�×ÑÐ-Ò/EÓFñ2ó Gó 7ó :óð2ð> ‡�×ÑØà	ˆ�‰’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Ø‡�×ÑØ*Ù-Ó/Ø'ð ó ñ
Eóó PðEð* ‡�×ÑØ*Ù-Ó/Ø'ð ó ñ
Eóð
Eð  ‡�×Ñ˜¨.Ó9Ø‡�×Ñ˜ d¨E ]Ó3ñUó 4ó :ðUð ‡�×ÑØ#Ù-Ó/Ø'ð ó ð
 ‡�×Ñ˜¢Ó.ñDó /óðDð0 ‡�×ÑØ*Ñ,UÓ,Wóð ‡�×Ñ˜¢Ó.ñ07ó /óð07ðf ‡�×ÑØ.òó	ñ#ó	ð#ð ‡�×ÑÐ,¨u°d¨mÓ<Ø‡�×ÑØ$Ñ&OÓ&Qóñ+óó =ñ+r7   