ó
    Ñ]j,  ã                   ó¬  • S r SSKJr  SSKJr  SSKJr  SSKJr  SSK	J
r
JrJrJrJrJrJr  SSK	Jr  SS	KJr  SS
KJrJr  / SQrSSSSS.S\\-  S\\-  S\S\S\S\S-  S\4S jjrSSS.S\\-  \-  S\\-  S\S-  S\4S jjrSSSS.S \S\S!\S-  S"\S\S-  S\4S# jjr S*SSS%.S\S&\\ \\4   -  \\ \\4      -  S'\S$   S(\S\S-  S\4S) jjjr!g)+z@Delegation to existing implementations for Public API Functions.é    )ÚSequence)Ú
ModuleType)ÚLiteralé   )Ú_funcs)Úarray_namespaceÚis_cupy_namespaceÚis_dask_namespaceÚis_jax_namespaceÚis_numpy_namespaceÚis_pydata_sparse_namespaceÚis_torch_namespace©Údevice)Úasarrays)ÚArrayÚDType)ÚiscloseÚ
nan_to_numÚone_hotÚpadgñhãˆµøä>g:Œ0âŽyE>FN©ÚrtolÚatolÚ	equal_nanÚxpÚaÚbr   r   r   r   Úreturnc          	      óJ  • Uc  [        X5      OUn[        U5      (       d0  [        U5      (       d   [        U5      (       d  [	        U5      (       a  UR                  XX#US9$ [        U5      (       a  [        XUS9u  pUR                  XX#US9$ [        R
                  " XX#XES9$ )aÃ	  
Return a boolean array where two arrays are element-wise equal within a tolerance.

The tolerance values are positive, typically very small numbers. The relative
difference ``(rtol * abs(b))`` and the absolute difference `atol` are added together
to compare against the absolute difference between `a` and `b`.

NaNs are treated as equal if they are in the same place and if ``equal_nan=True``.
Infs are treated as equal if they are in the same place and of the same sign in both
arrays.

Parameters
----------
a, b : Array | int | float | complex | bool
    Input objects to compare. At least one must be an array.
rtol : array_like, optional
    The relative tolerance parameter (see Notes).
atol : array_like, optional
    The absolute tolerance parameter (see Notes).
equal_nan : bool, optional
    Whether to compare NaN's as equal. If True, NaN's in `a` will be considered
    equal to NaN's in `b` in the output array.
xp : array_namespace, optional
    The standard-compatible namespace for `a` and `b`. Default: infer.

Returns
-------
Array
    A boolean array of shape broadcasted from `a` and `b`, containing ``True`` where
    `a` is close to `b`, and ``False`` otherwise.

Warnings
--------
The default `atol` is not appropriate for comparing numbers with magnitudes much
smaller than one (see notes).

See Also
--------
math.isclose : Similar function in stdlib for Python scalars.

Notes
-----
For finite values, `isclose` uses the following equation to test whether two
floating point values are equivalent::

    absolute(a - b) <= (atol + rtol * absolute(b))

Unlike the built-in `math.isclose`,
the above equation is not symmetric in `a` and `b`,
so that ``isclose(a, b)`` might be different from ``isclose(b, a)`` in some rare
cases.

The default value of `atol` is not appropriate when the reference value `b` has
magnitude smaller than one. For example, it is unlikely that ``a = 1e-9`` and
``b = 2e-9`` should be considered "close", yet ``isclose(1e-9, 2e-9)`` is ``True``
with default settings. Be sure to select `atol` for the use case at hand, especially
for defining the threshold below which a non-zero value in `a` will be considered
"close" to a very small or zero value in `b`.

The comparison of `a` and `b` uses standard broadcasting, which means that `a` and
`b` need not have the same shape in order for ``isclose(a, b)`` to evaluate to
``True``.

`isclose` is not defined for non-numeric data types.
``bool`` is considered a numeric data-type for this purpose.
)r   r   r   ©r   r   )	r   r   r	   r
   r   r   r   r   r   )r   r   r   r   r   r   s         Új/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sklearn/externals/array_api_extra/_delegation.pyr   r      s™   € ðV #%¡*Œ˜Ô	°"€Bô 	˜2×ÑÜ˜R× Ñ Ü˜R× Ñ Ü˜B×Ñà�z‰z˜! TÀ	ˆzÐJÐJä˜"×ÑÜ˜ Ñ$‰ˆØ�z‰z˜! TÀ	ˆzÐJÐJä�>Š>˜! TÀ	ÑQÐQó    g        ©Ú
fill_valuer   Úxr%   c               óP  • [        U[        5      (       a  Sn[        U5      eUc  [        U 5      OUnUR	                  U 5      n[        U5      (       d0  [        U5      (       d   [        U5      (       d  [        U5      (       a  UR                  XAS9$ [        R                  " XAUS9$ )a¿  
Replace NaN with zero and infinity with large finite numbers (default behaviour).

If `x` is inexact, NaN is replaced by zero or by the user defined value in the
`fill_value` keyword, infinity is replaced by the largest finite floating
point value representable by ``x.dtype``, and -infinity is replaced by the
most negative finite floating point value representable by ``x.dtype``.

For complex dtypes, the above is applied to each of the real and
imaginary components of `x` separately.

Parameters
----------
x : array | float | complex
    Input data.
fill_value : int | float, optional
    Value to be used to fill NaN values. If no value is passed
    then NaN values will be replaced with 0.0.
xp : array_namespace, optional
    The standard-compatible namespace for `x`. Default: infer.

Returns
-------
array
    `x`, with the non-finite values replaced.

See Also
--------
array_api.isnan : Shows which elements are Not a Number (NaN).

Examples
--------
>>> import array_api_extra as xpx
>>> import array_api_strict as xp
>>> xpx.nan_to_num(xp.inf)
1.7976931348623157e+308
>>> xpx.nan_to_num(-xp.inf)
-1.7976931348623157e+308
>>> xpx.nan_to_num(xp.nan)
0.0
>>> x = xp.asarray([xp.inf, -xp.inf, xp.nan, -128, 128])
>>> xpx.nan_to_num(x)
array([ 1.79769313e+308, -1.79769313e+308,  0.00000000e+000, # may vary
       -1.28000000e+002,  1.28000000e+002])
>>> y = xp.asarray([complex(xp.inf, xp.nan), xp.nan, complex(xp.nan, xp.inf)])
array([  1.79769313e+308,  -1.79769313e+308,   0.00000000e+000, # may vary
     -1.28000000e+002,   1.28000000e+002])
>>> xpx.nan_to_num(y)
array([  1.79769313e+308 +0.00000000e+000j, # may vary
         0.00000000e+000 +0.00000000e+000j,
         0.00000000e+000 +1.79769313e+308j])
z&Complex fill values are not supported.)Únanr$   )Ú
isinstanceÚcomplexÚ	TypeErrorr   Úasarrayr	   r   r   r   r   r   )r&   r%   r   ÚmsgÚys        r"   r   r   t   s’   € ôv �*œg×&Ñ&Ø6ˆÜ˜‹nÐà!™zŒ˜Ô	¨r€Bð 	�
‰
�1‹€Aô 	˜"×ÑÜ˜B×ÑÜ˜b×!Ñ!Ü˜b×!Ñ!à�}‰}˜Qˆ}Ð/Ð/ä×Ò˜Q¸"Ñ=Ð=r#   éÿÿÿÿ)ÚdtypeÚaxisr   Únum_classesr0   r1   c               ó  • Uc  [        U 5      nUR                  U R                  S5      (       d  Sn[        U5      eUc  [        R
                  " U[        U 5      S9n[        U5      (       a  SSKJ	n  U" XX#S9$ [        U5      (       a+  SSKJ	n  UR                  XR                  5      n  U" X5      nO[        R                  " XUS9nUR                  X‚S	S
9nUS:w  a  UR!                  USU5      nU$ ! [         a  n	[        U	eSn	A	ff = f)añ  
One-hot encode the given indices.

Each index in the input `x` is encoded as a vector of zeros of length `num_classes`
with the element at the given index set to one.

Parameters
----------
x : array
    An array with integral dtype whose values are between `0` and `num_classes - 1`.
num_classes : int
    Number of classes in the one-hot dimension.
dtype : DType, optional
    The dtype of the return value.  Defaults to the default float dtype (usually
    float64).
axis : int, optional
    Position in the expanded axes where the new axis is placed. Default: -1.
xp : array_namespace, optional
    The standard-compatible namespace for `x`. Default: infer.

Returns
-------
array
    An array having the same shape as `x` except for a new axis at the position
    given by `axis` having size `num_classes`.  If `axis` is unspecified, it
    defaults to -1, which appends a new axis.

    If ``x < 0`` or ``x >= num_classes``, then the result is undefined, may raise
    an exception, or may even cause a bad state.  `x` is not checked.

Examples
--------
>>> import array_api_extra as xpx
>>> import array_api_strict as xp
>>> xpx.one_hot(xp.asarray([1, 2, 0]), 3)
Array([[0., 1., 0.],
      [0., 0., 1.],
      [1., 0., 0.]], dtype=array_api_strict.float64)
NÚintegralzx must have an integral dtype.r   r   )r   )r0   r1   r!   F)Úcopyr/   )r   Úisdtyper0   r+   r   Údefault_dtypeÚ
get_devicer   Újax.nnr   r   Útorch.nn.functionalÚastypeÚint64ÚRuntimeErrorÚ
IndexErrorÚmoveaxis)
r&   r2   r0   r1   r   r-   Újax_one_hotÚtorch_one_hotÚoutÚes
             r"   r   r   Ã   sù   € ðb 
�zÜ˜QÓˆØ�:‰:�a—g‘g˜z×*Ñ*Ø.ˆÜ˜‹nÐØ�}Ü×$Ò$ R´
¸1³Ñ>ˆä˜×ÑÝ1á˜1°ÑBÐBÜ˜"×ÑÝ@à�I‰I�aŸ™Ó"ˆð	$Ù Ó/‰Cô �nŠn˜Q°Ñ3ˆØ
�)‰)�C Uˆ)Ð
+€CØˆrƒzØ�k‰k˜#˜r 4Ó(ˆØ€Jøô ó 	$Ü !Ð#ûð	$ús   Â-C6 Ã6
DÄ DÄDÚconstant©Úconstant_valuesr   Ú	pad_widthÚmoderF   c                ó&  • Uc  [        U 5      OUnUS:w  a  Sn[        U5      e[        U5      (       d0  [        U5      (       d   [	        U5      (       d  [        U5      (       a  UR                  XX#S9$ [        U5      (       az  UR                  U5      nUR                  XR                  S45      nUR                  USS9R                  5       nUR                  R                  R                  U [        U5      US9$ [         R                  " XX4S9$ )	aj  
Pad the input array.

Parameters
----------
x : array
    Input array.
pad_width : int or tuple of ints or sequence of pairs of ints
    Pad the input array with this many elements from each side.
    If a sequence of tuples, ``[(before_0, after_0), ... (before_N, after_N)]``,
    each pair applies to the corresponding axis of ``x``.
    A single tuple, ``(before, after)``, is equivalent to a list of ``x.ndim``
    copies of this tuple.
mode : str, optional
    Only "constant" mode is currently supported, which pads with
    the value passed to `constant_values`.
constant_values : python scalar, optional
    Use this value to pad the input. Default is zero.
xp : array_namespace, optional
    The standard-compatible namespace for `x`. Default: infer.

Returns
-------
array
    The input array,
    padded with ``pad_width`` elements equal to ``constant_values``.
rD   z-Only `'constant'` mode is currently supported)rF   é   )r   )r1   )ÚvaluerE   )r   ÚNotImplementedErrorr   r	   r   r   r   r   r,   Úbroadcast_toÚndimÚflipÚflattenÚnnÚ
functionalÚtupler   )r&   rG   rH   rF   r   r-   s         r"   r   r     sò   € ðF  "™zŒ˜Ô	¨r€BàˆzÓØ=ˆÜ! #Ó&Ð&ô 	˜2×ÑÜ˜R× Ñ Ü˜B×ÑÜ% b×)Ñ)à�v‰v�a DˆvÐJÐJô ˜"×ÑØ—J‘J˜yÓ)ˆ	Ø—O‘O I·±¸¨{Ó;ˆ	Ø—G‘G˜I¨D�GÐ1×9Ñ9Ó;ˆ	Ø�u‰u×Ñ×#Ñ# A¤u¨YÓ'7¸Ð#ÐOÐOä�:Š:�a°OÑKÐKr#   )rD   )"Ú__doc__Úcollections.abcr   Útypesr   Útypingr   Ú_libr   Ú_lib._utils._compatr   r	   r
   r   r   r   r   r   r8   Ú_lib._utils._helpersr   Ú_lib._utils._typingr   r   Ú__all__r*   ÚfloatÚboolr   Úintr   r   rS   r   © r#   r"   Ú<module>ra      sÌ  ðÙ Få $Ý Ý å ÷÷ ñ õ 6Ý *ß -â
5€ð ØØØ òYRØˆw�ðYRàˆw�ðYRð ð	YRð
 ðYRð ðYRð 	�TÑðYRð õYRð@ "Ø òL>Øˆu�}�wÑðL>ð �e‘ð	L>ð
 	�TÑðL>ð õL>ðh ØØ òJð ðJØðJð
 �4‰<ðJð ðJð 	�TÑðJð õJð` !+ð8Lð
  !Ø ò8LØð8Là�U˜3 ˜8‘_Ñ$ x°°c¸3°h±Ñ'@Ñ@ð8Lð �*Ñ
ð8Lð
 ð8Lð 	�TÑð8Lð ÷8Lr#   