Ë
    âQ(hQW  ã                   óü  — U d Z ddlZddlmZ ddlmZmZmZ ddl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 g d¢Zej@                  jC                  dd	«      Z"e#e$z  e%d<   ej@                  jC                  d
d«      Z&e"e&dœZ'eZ(ee%d<   e(ejR                  z  Z)ee%d<   d„ Z*de(deddfd„Z+de(defd„Z,	 	 	 dJdd	d	dœde)deded   dz  de$dz  dedz  de$de$de(fd„Z-ddœde(dedz  de(fd „Z.d!d!d!d!d"œd#„Z/d$„ Z0d!d!d!d!d%dd&œd'„Z1ddd!d!d!d!d%dd(œd)„Z2d!d!d!d!d%d!dd*œd+„Z3dKd,„Z4dLd-„Z5d.ede#fd/„Z6de(dede$fd0„Z7dede8e#   e8d   z  fd1„Z9dededz  fd2„Z:ddœde(d3e;dedz  de(fd4„Z<ddœd5e(d6e(dedz  de(fd7„Z=ddœde(dedz  de(fd8„Z>dd	d9dd:œde(d;e;e?e;   z  dz  d<e$d=e;e@z  dedz  de(fd>„ZAddœde(dedz  de(fd?„ZBddœde(dedz  de(fd@„ZCdAddBœdCe(dDe(d;e;dedz  de(f
dE„ZDd	d	ddFœdG„ZEdMdCe(dedz  de(fdH„ZFdI„ ZGy)Na6  Utility functions to use Python Array API compatible libraries.

For the context about the Array API see:
https://data-apis.org/array-api/latest/purpose_and_scope.html

The SciPy use case of the Array API is described on the following page:
https://data-apis.org/array-api/latest/use_cases.html#use-case-scipy
é    N)Ú
ModuleType)ÚAnyÚLiteralÚ	TypeAlias)Úarray_api_compat)	Úis_array_api_objÚsizeÚnumpyÚdeviceÚis_numpy_namespaceÚis_cupy_namespaceÚis_torch_namespaceÚis_jax_namespaceÚis_array_api_strict_namespace)Ú_asarrayÚarray_namespaceÚassert_almost_equalÚassert_array_almost_equalÚget_xp_devicesÚis_array_api_strictÚ
is_complexÚis_cupyÚis_jaxÚis_numpyÚis_torchÚSCIPY_ARRAY_APIÚSCIPY_DEVICEÚscipy_namespace_forÚxp_assert_closeÚxp_assert_equalÚxp_assert_lessÚxp_copyÚxp_copysignÚ	xp_deviceÚxp_moveaxis_to_endÚxp_ravelÚxp_realÚxp_signÚxp_sizeÚxp_take_along_axisÚxp_unsupported_param_msgÚxp_vector_normr   Fr   Úcpu)r   r   ÚArrayÚ	ArrayLikec                 óŽ  — t        t        | «      «      D �]”  }| |   }ddlm}  ||«      rd}t	        |«      ‚t        |t        j                  j                  «      rt        d«      ‚t        |t        j                  «      rt        d«      ‚t        |t        j                  t        j                  z  «      re|j                  }t        j                  |t        j                  «      rŒÔt        j                  |t        j                   «      rŒùt        d|›d�«      ‚t#        |«      r�Œ	 t        j$                  |«      }|j                  }t        j                  |t        j                  «      s5t        j                  |t        j                   «      sd	|›d�}t        |«      ‚|| |<   �Œ— | S # t        $ r t        d«      ‚w xY w)
a€  Raise exceptions on known-bad subclasses.

    The following subclasses are not supported and raise and error:
    - `numpy.ma.MaskedArray`
    - `numpy.matrix`
    - NumPy arrays which do not have a boolean or numerical dtype
    - Any array-like which is neither array API compatible nor coercible by NumPy
    - Any array-like which is coerced by NumPy to an unsupported dtype
    r   )Úissparsez�Sparse arrays/matrices are not supported by this function. Perhaps one of the `scipy.sparse.linalg` functions would work instead.z8Inputs of type `numpy.ma.MaskedArray` are not supported.z0Inputs of type `numpy.matrix` are not supported.zAn argument has dtype `z3`; only boolean and numerical dtypes are supported.zCAn argument is neither array API compatible nor coercible by NumPy.z1An argument was coerced to an unsupported dtype `)ÚrangeÚlenÚscipy.sparser1   Ú
ValueErrorÚ
isinstanceÚnpÚmaÚMaskedArrayÚ	TypeErrorÚmatrixÚndarrayÚgenericÚdtypeÚ
issubdtypeÚnumberÚbool_r   Ú
asanyarray)ÚarraysÚiÚarrayr1   Úmsgr>   Úmessages          úS/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/scipy/_lib/_array_api.pyÚ_compliance_scipyrI   9   s†  € ô ”3�v“;Óó !ˆØ�q‘	ˆå)á�EŒ?ð)ˆCô ˜S“/Ð!ä�eœRŸU™U×.Ñ.Ô/ÜÐVÓWÐWÜ˜œrŸy™yÔ)ÜÐNÓOÐOÜ�eœRŸZ™Z¬"¯*©*Ñ4Ô5Ø—K‘KˆEÜ—M‘M %¬¯©Õ3´r·}±}ÀUÌBÏHÉHÕ7UÜÐ"9¸%¸ð CSð !Tó Uð Uä! %Ö(ð7ÜŸ™ eÓ,�ð —K‘KˆEÜ—M‘M %¬¯©Ô3´r·}±}ÀUÌBÏHÉHÔ7UàGÈÀyð QGð Hð ô   Ó(Ð(ØˆF�1‹IðC!ðD €Møô ò 7Üð !6ó 7ð 7ð7ús   Ä+F/Æ/GrE   ÚxpÚreturnc                 ó�   — d}	 |j                  |j                  | «      «      st        |«      ‚y# t        $ r t        |«      ‚w xY w)zCheck for NaNs or Infs.z#array must not contain infs or NaNsN)ÚallÚisfiniter5   r:   )rE   rJ   rF   s      rH   Ú_check_finiterO   h   sI   € à
/€CðØ�v‰v�b—k‘k %Ó(Ô)Ü˜S“/Ð!ð *øäò Ü˜‹oÐðús	   „+0 °ArC   c                  óˆ   — t         d   st        S | D �cg c]  }|€Œ|‘Œ	 }}t        |«      }t        j                  |Ž S c c}w )a1  Get the array API compatible namespace for the arrays xs.

    Parameters
    ----------
    *arrays : sequence of array_like
        Arrays used to infer the common namespace.

    Returns
    -------
    namespace : module
        Common namespace.

    Notes
    -----
    Thin wrapper around `array_api_compat.array_namespace`.

    1. Check for the global switch: SCIPY_ARRAY_API. This can also be accessed
       dynamically through ``_GLOBAL_CONFIG['SCIPY_ARRAY_API']``.
    2. `_compliance_scipy` raise exceptions on known-bad subclasses. See
       its definition for more details.

    When the global switch is False, it defaults to the `numpy` namespace.
    In that case, there is no compliance check. This is a convenience to
    ease the adoption. Otherwise, arrays must comply with the new rules.
    r   )Ú_GLOBAL_CONFIGÚ	np_compatrI   r   r   )rC   rE   Ú_arrayss      rH   r   r   r   sK   € ô4 Ð+Ò,äÐà"(Ö>˜¨EÑ,=ŠuÐ>€GÐ>ä Ó(€Gä×+Ñ+¨WÐ5Ð5ùò	 ?s   ”?œ?)rJ   Úcheck_finiteÚsubokr>   Úorder)ÚKÚAÚCÚFÚcopyrT   rU   c                óš  — |€t        | «      }t        |«      rR|du rt        j                  | |||¬«      } nI|rt        j                  | ||¬«      } n.t        j
                  | ||¬«      } n	 |j                  | ||¬«      } |rt        | |«       | S # t        $ r1 t        |j                  d«      «      }|j                  | ||¬«      } Y ŒIw xY w)a`  SciPy-specific replacement for `np.asarray` with `order`, `check_finite`, and
    `subok`.

    Memory layout parameter `order` is not exposed in the Array API standard.
    `order` is only enforced if the input array implementation
    is NumPy based, otherwise `order` is just silently ignored.

    `check_finite` is also not a keyword in the array API standard; included
    here for convenience rather than that having to be a separate function
    call inside SciPy functions.

    `subok` is included to allow this function to preserve the behaviour of
    `np.asanyarray` for NumPy based inputs.
    T)rV   r>   rU   )rV   r>   )r>   r[   é   )r   r   r7   rE   rB   Úasarrayr:   rO   )rE   r>   rV   r[   rJ   rT   rU   Ú
coerced_xps           rH   r   r   —   sÆ   € ð0 
€zÜ˜UÓ#ˆÜ�„|à�4‰<Ü—H‘H˜U¨%°uÀEÔJ‰EÙÜ—M‘M %¨u¸EÔB‰Eä—J‘J˜u¨E¸Ô?‰Eð	FØ—J‘J˜u¨E¸�JÓ=ˆEñ
 Ü�e˜RÔ à€Løô ò 	FÜ(¨¯©°A«Ó7ˆJØ×&Ñ& u°EÀÐ&ÓEŠEð	Fús   Á,B Â7C
Ã	C
©rJ   Úxc                ó8   — |€t        | «      }t        | d|¬«      S )a3  
    Copies an array.

    Parameters
    ----------
    x : array

    xp : array_namespace

    Returns
    -------
    copy : array
        Copied array

    Notes
    -----
    This copy function does not offer all the semantics of `np.copy`, i.e. the
    `subok` and `order` keywords are not used.
    T)r[   rJ   )r   r   ©ra   rJ   s     rH   r"   r"   Æ   s"   € ð, 
€zÜ˜QÓˆä�A˜D RÔ(Ð(ó    T©Úcheck_namespaceÚcheck_dtypeÚcheck_shapeÚcheck_0dc                ó‚  — d}|rt        | |«       t        |«      rg|redt        | «      › dt        |«      › �}|j                  | «      r|j                  |«      s)|j                  | «      s|j                  |«      rJ |«       ‚|j	                  | «      } |j	                  |«      }|r<d| j
                  › d|j
                  › �}| j
                  |j
                  k(  sJ |«       ‚|r<d| j                  › d|j                  › �}| j                  |j                  k(  sJ |«       ‚|j                  || j                  «      }| |fS )NTz$Array-ness does not match:
 Actual: z
 Desired: zdtypes do not match.
Actual: ú

Desired: zShapes do not match.
Actual: )Ú_assert_matching_namespacer   ÚtypeÚisscalarr^   r>   ÚshapeÚbroadcast_to)	ÚactualÚdesiredrJ   rf   rg   rh   ri   Ú__tracebackhide__Ú_msgs	            rH   Ú_strict_checkru   â   s.  € ð ÐÙÜ" 6¨7Ô3ô �„|™Ø7Ü˜“<�. ¬T°'«]¨Oð=ˆà—‘˜VÔ$¨¯©°WÔ)=ØŸ™ FÔ+°B·K±KÀÔ4Hð	QØLPó	Qð Jð �Z‰Z˜Ó€FØ�j‰j˜Ó!€GáØ/°·±¨~¸[ÈÏÉÈÐXˆØ�|‰|˜wŸ}™}Ò,Ð2¨dÓ2Ð,áØ/°·±¨~¸[ÈÏÉÈÐXˆØ�|‰|˜wŸ}™}Ò,Ð2¨dÓ2Ð,à�o‰o˜g v§|¡|Ó4€GØ�7ˆ?Ðrd   c                 ó¼   — d}t        | t        «      r| n| f} t        |«      }| D ]5  }t        |«      }d|j                  › d|j                  › �}||k(  rŒ0J |«       ‚ y )NTz!Namespaces do not match.
Actual: rk   )r6   Útupler   Ú__name__)rq   rr   rs   Údesired_spaceÚarrÚ	arr_spacert   s          rH   rl   rl      s{   € ØÐÜ! &¬%Ô0‰V°v°i€FÜ# GÓ,€MØò 0ˆÜ# CÓ(ˆ	ðØ$×-Ñ-Ð.ð /Ø)×2Ñ2Ð3ð5ˆð ˜MÓ)Ð/¨4Ó/Ð)ñ0rd   Ú )rf   rg   rh   ri   Úerr_msgrJ   c          	      óL  — d}|€t        | «      }t        | ||||||¬«      \  } }t        |«      r|j                  j	                  | ||¬«      S t        |«      r+|dk(  rd n|}|j                  j                  | |dddd|¬«      S t        j                  j	                  | ||¬«      S )NTre   )r}   r|   r   F©ÚrtolÚatolÚ	equal_nanrg   rF   )r   ru   r   ÚtestingÚassert_array_equalr   Úassert_closer7   )	rq   rr   rf   rg   rh   ri   r}   rJ   rs   s	            rH   r    r      s½   € àÐØ	€zÜ˜VÓ$ˆä#Ø�˜¨_Ø¨[Øô�O€FˆGô ˆr„{Ø�z‰z×,Ñ,¨V°WÀgÐ,ÓNÐNÜ	�"Œð " Rš-‘$¨WˆØ�z‰z×&Ñ& v¨w¸QÀQÐRVØ38¸gð 'ó Gð 	Gô �:‰:×(Ñ(¨°À'Ð(ÓJÐJrd   )r€   r�   rf   rg   rh   ri   r}   rJ   c          	      óô  — d}
|	€t        | «      }	t        | ||	||||¬«      \  } }|	j                  | j                  d«      }|€.|r,|	j	                  | j                  «      j
                  dz  dz  }n|€d}t        |	«      r |	j                  j                  | ||||¬«      S t        |	«      r+|dk(  rd n|}|	j                  j                  | |||dd	|¬
«      S t        j                  j                  | ||||¬«      S )NTre   )úreal floatingúcomplex floatingç      à?é   gH¯¼šò×z>)r€   r�   r}   r|   Fr   )r   ru   Úisdtyper>   ÚfinfoÚepsr   rƒ   Úassert_allcloser   r…   r7   )rq   rr   r€   r�   rf   rg   rh   ri   r}   rJ   rs   Úfloatings               rH   r   r   $  s   € ð ÐØ	€zÜ˜VÓ$ˆä#Ø�˜Ø'°[Ø¨(ô�O€FˆGð �z‰z˜&Ÿ,™,Ð(MÓN€HØ€|™ð �x‰x˜Ÿ™Ó%×)Ñ)¨3Ñ.°Ñ2‰Ø	ˆØˆäˆr„{Ø�z‰z×)Ñ)¨&°'ÀØ/3¸Wð *ó Fð 	Fä	�"ŒØ! Rš-‘$¨WˆØ�z‰z×&Ñ& v¨w¸TÈØ15À5Ègð 'ó Wð 	Wô �:‰:×%Ñ% f¨g¸DØ+/¸ð &ó Bð Brd   )rf   rg   rh   ri   r}   ÚverboserJ   c          	      óž  — d}	|€t        | «      }t        | ||||||¬«      \  } }t        |«      r|j                  j	                  | |||¬«      S t        |«      rR| j                  j                  dk7  r| j                  «       } |j                  j                  dk7  r|j                  «       }t        j                  j	                  | |||¬«      S )NTre   )r}   r�   r-   )
r   ru   r   rƒ   Úassert_array_lessr   r   rm   r-   r7   )
rq   rr   rf   rg   rh   ri   r}   r�   rJ   rs   s
             rH   r!   r!   F  sÎ   € àÐØ	€zÜ˜VÓ$ˆä#Ø�˜¨_Ø¨[Øô�O€FˆGô ˆr„{Ø�z‰z×+Ñ+¨F°GØ4;ÀWð ,ó Nð 	Nä	�"ŒØ�=‰=×Ñ Ò&Ø—Z‘Z“\ˆFØ�>‰>×Ñ %Ò'Ø—k‘k“mˆGä�:‰:×'Ñ'¨°Ø07Àð (ó Jð Jrd   c                 óB   — ddd| z  z  }}t        | |g|¢­||dddœ|¤ŽS ©zPBackwards compatible replacement. In new code, use xp_assert_close instead.
    r   g      ø?é
   F)r�   r€   rg   rh   ©r   ©rq   rr   ÚdecimalÚargsÚkwdsr€   r�   s          rH   r   r   _  óH   € ð �C˜˜g˜X™Ñ&ˆ$€DÜ˜6 7ð *à ñ*Ø $¨4¸UÐPUñ*à$(ñ*ð *rd   c                 óB   — ddd| z  z  }}t        | |g|¢­||dddœ|¤ŽS r”   r–   r—   s          rH   r   r   h  r›   rd   Úparamc                 ó   — d| ›d�S )Nz
Providing z$ is only supported for numpy arrays.© )r�   s    rH   r+   r+   q  s   € Ø˜�yÐ DÐEÐErd   c                 ó:   — |j                  | j                  d«      S ©Nrˆ   )r‹   r>   rc   s     rH   r   r   u  s   € Ø�:‰:�a—g‘gÐ1Ó2Ð2rd   c                 ó¾  — g }t        | «      rj|dgz  }ddl}|j                  j                  «       }t	        d|«      D ]  }|d|› �gz  }Œ |j
                  j                  j                  «       r|dgz  }|S t        | «      rDddl	}|j                  j                  j                  «       }t	        d|«      D ]  }|d|› �gz  }Œ |S t        | «      rŠddl}|j                  d¬«      }t	        d|«      D ]  }|d|› �gz  }Œ |j                  d¬«      }t	        d|«      D ]  }|d	|› �gz  }Œ |j                  d
¬«      }	t	        d|	«      D ]  }|d|› �gz  }Œ |S dgS )z<Returns a list of available devices for the given namespace.r-   r   Nzcuda:Úmps)Úbackendzcpu:Úgpuzgpu:Útpuztpu:)r   ÚtorchÚcudaÚdevice_countr2   Úbackendsr£   Úis_availabler   ÚcupyÚruntimeÚgetDeviceCountr   Újax)
rJ   Údevicesr§   Únum_cudarD   r¬   r¯   Únum_cpuÚnum_gpuÚnum_tpus
             rH   r   r   y  s–  € à€GÜ�„|Ø�E�7ÑˆÛØ—:‘:×*Ñ*Ó,ˆÜ�q˜(Ó#ò 	%ˆAØ˜% ˜s˜�}Ñ$‰Gð	%à�>‰>×Ñ×*Ñ*Ô,Ø˜�wÑˆGØˆÜ	�ŒÛØ—9‘9×$Ñ$×3Ñ3Ó5ˆÜ�q˜(Ó#ò 	%ˆAØ˜% ˜s˜�}Ñ$‰Gð	%àˆÜ	�ŒÛØ×"Ñ"¨5Ð"Ó1ˆÜ�q˜'Ó"ò 	$ˆAØ˜$˜q˜c˜
�|Ñ#‰Gð	$à×"Ñ"¨5Ð"Ó1ˆÜ�q˜'Ó"ò 	$ˆAØ˜$˜q˜c˜
�|Ñ#‰Gð	$à×"Ñ"¨5Ð"Ó1ˆÜ�q˜'Ó"ò 	$ˆAØ˜$˜q˜c˜
�|Ñ#‰Gð	$àˆð ˆ6€Mrd   c                 óŠ   — t        | «      rddl}|j                  S t        | «      rddl}|j                  S t        | «      r| S y)a  Return the `scipy`-like namespace of a non-NumPy backend

    That is, return the namespace corresponding with backend `xp` that contains
    `scipy` sub-namespaces like `linalg` and `special`. If no such namespace
    exists, return ``None``. Useful for dispatching.
    r   N)r   ÚcupyxÚscipyr   r¯   r   )rJ   r¶   r¯   s      rH   r   r   �  s;   € ô ˆr„{ÛØ�{‰{Ðäˆb„zÛØ�y‰yÐä�„|Øˆ	àrd   Úsourcec               ó®   — |€t        |«      n|}t        t        | j                  «      «      }|j	                  |«      }||gz   }|j                  | |«      S ©N)r   Úlistr2   ÚndimÚpopÚpermute_dims)ra   r¸   rJ   ÚaxesÚtemps        rH   r%   r%   µ  sP   € ð
 !# 
Œ˜Ô	°€BÜ”�a—f‘f“Ó€DØ�8‰8�FÓ€DØ�4�&‰=€DØ�?‰?˜1˜dÓ#Ð#rd   Úx1Úx2c               ór   — |€t        | |«      n|}|j                  | «      }|j                  |dk\  || «      S )Nr   )r   ÚabsÚwhere)rÁ   rÂ   rJ   Úabs_x1s       rH   r#   r#   Ã  s:   € à$& JŒ˜˜RÔ	 °B€BØ�V‰V�B‹Z€FØ�8‰8�B˜!‘G˜V f WÓ-Ð-rd   c               óp  — |€t        | «      n|}t        |«      r|j                  | «      S |j                  | «      }|j	                  d| j
                  ¬«      }|j                  | dkD  ||«      }|j                  | dk  | |«      }|j                  |j                  | «      |j                  |z  |«      }|S )Né   )r>   r   )	r   r   ÚsignÚ
zeros_liker^   r>   rÅ   ÚisnanÚnan)ra   rJ   rÉ   Úones       rH   r(   r(   Ì  s    € Ø!˜zŒ˜Ô	¨r€BÜ�„|Ø�w‰w�q‹zÐØ�=‰=˜Ó€DØ
�*‰*�Q˜aŸg™gˆ*Ó
&€CØ�8‰8�A˜‘E˜3 Ó%€DØ�8‰8�A˜‘E˜C˜4 Ó&€DØ�8‰8�B—H‘H˜Q“K §¡¨¡¨TÓ2€DØ€Krd   é   )ÚaxisÚkeepdimsÚordrJ   rÏ   rÐ   rÑ   c               ó:  — |€t        | «      n|}t        rdt        |d«      r|j                  j	                  | |||¬«      S |dk7  rt        d«      ‚|j                  |j                  | «      | z  ||¬«      dz  S t        j                  j                  | |||¬«      S )NÚlinalg)rÏ   rÐ   rÑ   rÎ   z‚only the Euclidean norm (`ord=2`) is currently supported in `xp_vector_norm` for backends not implementing the `linalg` extension.)rÏ   rÐ   r‰   )rÑ   rÏ   rÐ   )
r   r   ÚhasattrrÓ   Úvector_normr5   ÚsumÚconjr7   Únorm)ra   rÏ   rÐ   rÑ   rJ   s        rH   r,   r,   Ø  s�   € ð
  "˜zŒ˜Ô	¨r€Båä�2�xÔ Ø—9‘9×(Ñ(¨°ÀÈcÐ(ÓRÐRà�aŠxÜ ð!óð ð —6‘6˜"Ÿ'™' !›* q™.¨t¸h�6ÓGÈÑLÐLô �y‰y�~‰~˜a S¨t¸hˆ~ÓGÐGrd   c               óD   — |€t        | «      n|}|j                  | d«      S )N)éÿÿÿÿ)r   Úreshaperc   s     rH   r&   r&   ò  s%   € ð  "˜zŒ˜Ô	¨r€BØ�:‰:�a˜ÓÐrd   c               ó~   — |€t        | «      n|}|j                  | j                  d«      r|j                  | «      S | S r¡   )r   r‹   r>   Úrealrc   s     rH   r'   r'   ú  s9   € ð  "˜zŒ˜Ô	¨r€BØŸ™ A§G¡GÐ-?Ô@ˆ2�7‰7�1‹:ÐGÀaÐGrd   rÚ   )rÏ   rJ   rz   Úindicesc               ó°   — |€t        | «      n|}t        |«      r|j                  | ||¬«      S t        |«      rt	        d«      ‚|j                  | ||«      S )N)Údimz2Array API standard does not define take_along_axis)r   r   Útake_along_dimr   ÚNotImplementedErrorÚtake_along_axis)rz   rÞ   rÏ   rJ   s       rH   r*   r*     s\   € ð "$ Œ˜Ô	°€BÜ�„|Ø× Ñ   g°4Ð Ó8Ð8Ü	˜RÔ	 Ü!Ð"VÓWÐWà×!Ñ! # w°Ó5Ð5rd   )Úensure_writeableÚforce_floatingrJ   c                 ó  — |€t        |Ž n|}|D �cg c]  }|�t        |d¬«      n|‘Œ }}|D �cg c]  }|€Œ|‘Œ	 }}|j                  d«      j                  }|D �cg c]  }|j                  ‘Œ }}	  |j                  |Ž }|r$|j                  |d«      r|j	                  ||«      }|D �ch c]  }|j                  ’Œ }
}	 t        |
«      dk7  rt        j                  |
Ž n|d   j                  }g }|D ]€  }|€|j                  |«       Œ|j                  |k7  r%t        |«      rddini } |j                  ||fi |¤Ž}|j                  |k7  s| r|j                  ||d¬	«      }|j                  |«       Œ‚ |S c c}w c c}w c c}w # t        $ rV |D �cg c]  }|j                  |d«      s|‘Œ nc c}w }	}|	r |j                  g |	¢|‘­Ž }n|r|}n |j                  |Ž }Y �Œ?w xY wc c}w # t        $ r}d}t        |«      |‚d }~ww xY w)
NT)rU   g      ð?ÚintegralrÈ   r   z/Array shapes are incompatible for broadcasting.rU   )r[   )r   r   r^   r>   Úresult_typer‹   r:   ro   r3   r7   Úbroadcast_shapesr5   Úappendr   rp   Úastype)rä   rå   rJ   r™   ÚargÚargs_not_noneÚdefault_floatÚdtypesr>   Úfloat_dtypesÚshapesro   ÚerG   ÚoutÚkwargss                   rH   Úxp_broadcast_promoterõ     s:  € Ø#% :Œ˜$Ñ	°2€BàOSÖTÈ¨#¨/ŒX�c Õ&¸sÑBÐT€DÐTØ$(Ö<˜S¨C©O’SÐ<€MÐ<ð —J‘J˜r“N×(Ñ(€MØ#0Ö1˜Cˆc�i‹iÐ1€FÐ1ð,Ø�—‘ Ð'ˆÙ˜bŸj™j¨°
Ô;ð —N‘N 5¨-Ó8ˆEð $1Ö1˜Cˆc�i‹iÐ1€FÐ1ð)Ü14°V³ÀÒ1A”×$Ñ$ fÑ-Ø# AÑ&×,Ñ,ð 	ð €CØò ˆØˆ;Ø�J‰J�sŒOØð
 �9‰9˜ÒÜ(0°¬�g˜t‘_¸"ˆFØ!�"—/‘/ # uÑ7°Ñ7ˆCð �I‰I˜ÒÑ#3Ø—)‘)˜C ¨T�)Ó2ˆCØ�
‰
�3�ðð" €Jùòc UùÚ<ùò 2øô ò ,Ø+1ö > %Ø!Ÿz™z¨%°Ô<ò ñ >ùò >ˆð >áØ"�B—N‘NÐ@ LÐ@°-Ò@‰EÙØ!‰Eà"�B—N‘N FÐ+ˆEúð,üò 2øô ò )ØCˆÜ˜Ó! qÐ(ûð)úsQ   ‘E9¯E>·E>ÁFÁ25F Â+G*Ã/G/ ÆG'ÆF1Æ03G'Ç&G'Ç/	HÇ8HÈHc                 ó  — |€t        | «      n|}| j                  }|j                  ||j                  «      r|j	                  | |j
                  «      } | S |j                  |d«      r|j	                  | |j                  «      } | S )Nr‡   )r   r>   r‹   Úfloat32rë   Ú	complex64Ú
complex128)rz   rJ   Ú	arr_dtypes      rH   Úxp_float_to_complexrû   H  ss   € Ø!# Œ˜Ô	°€BØ—	‘	€Ið 
‡z�z�)˜RŸZ™ZÔ(Ø�i‰i˜˜RŸ\™\Ó*ˆð €Jð 
�‰�I˜Ô	/Ø�i‰i˜˜RŸ]™]Ó+ˆà€Jrd   c                 óP   — t        | «      r| j                  «       S | j                  S )z@Query the namespace-dependent default floating-point dtype.
    )r   Úget_default_dtypeÚfloat64r`   s    rH   Úxp_default_dtyperÿ   V  s&   € ô �„|à×#Ñ#Ó%Ð%ð �z‰zÐrd   )NNN)é   )é   rº   )HÚ__doc__ÚosÚtypesr   Útypingr   r   r   r
   r7   Únumpy.typingÚnptÚ
scipy._libr   Úscipy._lib.array_api_compatr   r	   r)   rR   r   r$   r   r   r   r   r   r   r   r   r   r   Ú__all__ÚenvironÚgetr   ÚstrÚboolÚ__annotations__r   rQ   r.   r/   rI   rO   r   r   r"   ru   rl   r    r   r!   r   r   r+   r   r»   r   r   Úintr%   r#   r(   rw   Úfloatr,   r&   r'   r*   rõ   rû   rÿ   rŸ   rd   rH   ú<module>r     sí  ðòó 
å ß *Ñ *ã Ý å '÷
÷ 
õ 
ò	€ð !Ÿj™jŸn™nÐ->ÀÓF€��t‘Ó Fà�z‰z�~‰~˜n¨eÓ4€ð 'Ø ñ€ð €€yÓ Ø˜sŸ}™}Ñ,€	ˆ9Ó ,ò,ð^˜ð  Jð °4ó ð"6˜Uð "6 zó "6ðN Ø48Ø ð	,ð !%Ø"Øò,Øð,àð,ð Ð)Ñ*¨TÑ1ð,ð �T‰kð	,ð ˜Ñð,ð ð,ð ð,ð 
ó,ð^ 26ò )ˆuð )˜Z¨$Ñ.ð )¸%ó )ð: #'°DÀdØôò<	0ð 9=È$Ø $¨t¸RÀDôKð0 .2¸È4Ø $°$ÀØ 4ôBðD 8<ÈØ#¨d¸BÈÐQUôJó2*ó*ðF Cð F¨Có Fð3�%ð 3˜Zð 3¨Dó 3ð!�zð ! d¨3¡i°$°t±*Ñ&<ó !ðH˜Jð ¨:¸Ñ+<ó ð8 !%ò		$Øð	$àð	$ð ˜Ñð		$ð */ó		$ð EIò .�Eð .˜uð .°
¸TÑ0Að .ÈUó .ð 59ò 	ˆuð 	 
¨TÑ 1ð 	¸Uó 	ð 48Ø$)Ø&'Ø+/ò	H�eð HØ˜u S™zÑ)¨DÑ0ðHà!ðHð ˜e™ðHð " DÑ(ð	Hð 5:ó	Hð4 6:ò  �ð   ¨dÑ!2ð  ¸eó  ð 59ò Hˆuð H 
¨TÑ 1ð H¸Uó Hð $&Ø/3ò6˜Eð 6Ø %ð6à ð6ð &¨Ñ,ð6ð 9>ó6ð  27ÀuÐQUô 4ñn˜Uð ¨
°TÑ(9ð ÀUó órd   