§
    µ³Ùg#V  ã                   ó  — 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          !                    dd	¦  «        Z"e#e$z  e%d<   ej          !                    d
d¦  «        Z&e"e&dœZ'eZ(ee%d<   e(ej)        z  Z)ee%d<   d„ Z*de(deddfd„Z+de(defd„Z,	 	 	 dKd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+„Z3dLd-„Z4dMd/„Z5d0ede#fd1„Z6de(dede$fd2„Z7dede8e#         e8d         z  fd3„Z9dededz  fd4„Z:ddœde(d5e;dedz  de(fd6„Z<ddœd7e(d8e(dedz  de(fd9„Z=ddœde(dedz  de(fd:„Z>dd	d;d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dA„ZBddœde(dedz  de(fdB„ZCdCddDœdEe(dFe(d=e;dedz  de(f
dG„ZDd	d	ddHœdI„ZEdNdEe(dedz  de(fdJ„ZFdS )Oa6  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  ¦  «        rZ|j        }t          j        |t          j        ¦  «        s2t          j        |t          j        ¦  «        st          d|›d�¦  «        ‚�Œt#          |¦  «        s’	 t          j        |¦  «        }n# t          $ r t          d¦  «        ‚w xY w|j        }t          j        |t          j        ¦  «        s4t          j        |t          j        ¦  «        sd	|›d�}t          |¦  «        ‚|| |<   �Œ¨| S )
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          úK/granary/edev/quantum/lib/python3.11/site-packages/scipy/_lib/_array_api.pyÚ_compliance_scipyrI   9   sõ  € õ •3�v‘;”;ÑÔð !ñ !ˆØ�q”	ˆà)Ð)Ð)Ð)Ð)Ð)àˆ8�E‰?Œ?ð 	"ð)ˆCõ ˜S‘/”/Ð!å�e�RœUÔ.Ñ/Ô/ð 	PÝÐVÑWÔWÐWÝ˜�rœyÑ)Ô)ð 	PÝÐNÑOÔOÐOÝ�e�RœZ­"¬*Ñ4Ñ5Ô5ð 	Ø”KˆEÝ”M %­¬Ñ3Ô3ð Uµr´}ÀUÍBÌHÑ7UÔ7Uð UÝð !T¸%ð !Tð !Tð !Tñ Uô Uð Uùå! %Ñ(Ô(ð 	ð7Ýœ eÑ,Ô,��øÝð 7ð 7ð 7Ýð !6ñ 7ô 7ð 7ð7øøøð ”KˆEÝ”M %­¬Ñ3Ô3ð )µr´}ÀUÍBÌHÑ7UÔ7Uð )ðHÈð Hð Hð Hð õ   Ñ(Ô(Ð(ØˆF�1‰IùØ€Ms   Ä2EÅE!rE   ÚxpÚreturnc                 ó´   — d}	 |                      |                     | ¦  «        ¦  «        st          |¦  «        ‚dS # 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ŒoÐðøøøs	   „7= ½ArC   c                  ó|   — t           d         st          S d„ | D ¦   «         }t          |¦  «        }t          j        |Ž S )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   c                 ó   — g | ]}|®|‘ŒS ©N© )Ú.0rE   s     rH   ú
<listcomp>z#array_namespace.<locals>.<listcomp>�   s   € Ð>Ð>Ð>˜¨EÐ,=ˆuÐ,=Ð,=Ð,=ó    )Ú_GLOBAL_CONFIGÚ	np_compatrI   r   r   )rC   Ú_arrayss     rH   r   r   r   sF   € õ4 Ð+Ô,ð åÐà>Ð> &Ð>Ñ>Ô>€Gå Ñ(Ô(€GåÔ+¨WÐ5Ð5rV   )rJ   Úcheck_finiteÚsubokr>   Úorder)ÚKÚAÚCÚFÚcopyrZ   r[   c                óÐ  — |€t          | ¦  «        }t          |¦  «        rO|du rt          j        | |||¬¦  «        } n–|rt          j        | ||¬¦  «        } n|t          j        | ||¬¦  «        } nd	 |                     | ||¬¦  «        } nJ# t          $ r= t          |                     d¦  «        ¦  «        }|                     | ||¬¦  «        } Y nw xY w|rt          | |¦  «         | S )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.
    NT)r\   r>   r[   )r\   r>   )r>   ra   é   )r   r   r7   rE   rB   Úasarrayr:   rO   )rE   r>   r\   ra   rJ   rZ   r[   Ú
coerced_xps           rH   r   r   —   s  € ð0 
€zÝ˜UÑ#Ô#ˆÝ��|„|ð Fà�4ˆ<ˆ<Ý”H˜U¨%°uÀEÐJÑJÔJˆEˆEØð 	@Ý”M %¨u¸EÐBÑBÔBˆEˆEå”J˜u¨E¸Ð?Ñ?Ô?ˆEˆEð	FØ—J’J˜u¨E¸�JÑ=Ô=ˆEˆEøÝð 	Fð 	Fð 	FÝ(¨¯ª°A©¬Ñ7Ô7ˆJØ×&Ò& u°EÀÐ&ÑEÔEˆEˆEˆEð	Føøøð ð !Ý�e˜RÑ Ô Ð à€Ls   Á1B
 Â
ACÃC)rJ   Úxc                óH   — |€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.
    NT)ra   rJ   )r   r   ©rf   rJ   s     rH   r"   r"   Æ   s+   € ð, 
€zÝ˜QÑÔˆå�A˜D RÐ(Ñ(Ô(Ð(rV   T©Úcheck_namespaceÚcheck_dtypeÚcheck_shapeÚcheck_0dc                ó–  — d}|rt          | |¦  «         t          |¦  «        r‚|r€dt          | ¦  «        › dt          |¦  «        › �}|                     | ¦  «        r|                     |¦  «        s4|                     | ¦  «        s|                     |¦  «        r
J |¦   «         ‚|                     | ¦  «        } |                     |¦  «        }|r,d| j        › d|j        › �}| j        |j        k    s
J |¦   «         ‚|r,d| j        › d|j        › �}| j        |j        k    s
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Úisscalarrd   r>   ÚshapeÚbroadcast_to)	ÚactualÚdesiredrJ   rj   rk   rl   rm   Ú__tracebackhide__Ú_msgs	            rH   Ú_strict_checkry   â   s•  € ð ÐØð 4Ý" 6¨7Ñ3Ô3Ð3õ ��|„|ð Q˜ð Qð=Ý˜‘<”<ð=ð =Ý-1°'©]¬]ð=ð =ˆà—’˜VÑ$Ô$ð 	Q¨¯ª°WÑ)=Ô)=ð 	QØŸš FÑ+Ô+ð	QØ46·K²KÀÑ4HÔ4Hð	Qð 	QØLPñ	Qô 	Qð 	Qð �ZŠZ˜ÑÔ€FØ�jŠj˜Ñ!Ô!€Gàð 3ØX°´ÐXÐXÈÌÐXÐXˆØŒ|˜wœ}Ò,Ð,Ð,¨dÑ,Ô,Ð,àð 3ØX°´ÐXÐXÈÌÐXÐXˆØŒ|˜wœ}Ò,Ð,Ð,¨dÑ,Ô,Ð,à�oŠo˜g v¤|Ñ4Ô4€GØ�7ˆ?ÐrV   c                 óÈ   — d}t          | t          ¦  «        r| n| f} t          |¦  «        }| D ]3}t          |¦  «        }d|j        › d|j        › �}||k    s
J |¦   «         ‚Œ4d S )NTz!Namespaces do not match.
Actual: ro   )r6   Útupler   Ú__name__)ru   rv   rw   Údesired_spaceÚarrÚ	arr_spacerx   s          rH   rp   rp      sš   € ØÐÝ! &­%Ñ0Ô0Ð?ˆVˆV°v°i€FÝ# GÑ,Ô,€MØð 0ð 0ˆÝ# CÑ(Ô(ˆ	ð5Ø$Ô-ð5ð 5à)Ô2ð5ð 5ˆð ˜MÒ)Ð)Ð)¨4Ñ)Ô)Ð)Ð)ð0ð 0rV   Ú )rj   rk   rl   rm   Úerr_msgrJ   c          	      ój  — d}|€t          | ¦  «        }t          | ||||||¬¦  «        \  } }t          |¦  «        r|j                             | ||¬¦  «        S t          |¦  «        r+|dk    rd n|}|j                             | |dddd|¬¦  «        S t          j                             | ||¬¦  «        S )NTri   )r�   r€   r   F©ÚrtolÚatolÚ	equal_nanrk   rF   )r   ry   r   ÚtestingÚassert_array_equalr   Úassert_closer7   )	ru   rv   rj   rk   rl   rm   r�   rJ   rw   s	            rH   r    r      sä   € àÐØ	€zÝ˜VÑ$Ô$ˆå#Ø�˜¨_Ø¨[Øðñ ô �O€FˆGõ ˆr�{„{ð GØŒz×,Ò,¨V°WÀgÐ,ÑNÔNÐNÝ	�"‰Œð Gð " Rš-˜-�$�$¨WˆØŒz×&Ò& v¨w¸QÀQÐRVØ38¸gð 'ñ Gô Gð 	Gõ Œ:×(Ò(¨°À'Ð(ÑJÔJÐJrV   )r„   r…   rj   rk   rl   rm   r�   rJ   c          	      ó  — d}
|	€t          | ¦  «        }	t          | ||	||||¬¦  «        \  } }|	                     | j        d¦  «        }|€(|r&|	                     | j        ¦  «        j        dz  dz  }n|€d}t          |	¦  «        r|	j                             | ||||¬¦  «        S t          |	¦  «        r+|dk    rd n|}|	j         
                    | |||dd	|¬
¦  «        S t          j                             | ||||¬¦  «        S )NTri   )úreal floatingúcomplex floatingç      à?é   gH¯¼šò×z>)r„   r…   r�   r€   Frƒ   )r   ry   Úisdtyper>   ÚfinfoÚepsr   r‡   Úassert_allcloser   r‰   r7   )ru   rv   r„   r…   rj   rk   rl   rm   r�   rJ   rw   Úfloatings               rH   r   r   $  sP  € ð ÐØ	€zÝ˜VÑ$Ô$ˆå#Ø�˜Ø'°[Ø¨(ðñ ô �O€FˆGð �zŠz˜&œ,Ð(MÑNÔN€HØ€|˜€|ð �xŠx˜œÑ%Ô%Ô)¨3Ñ.°Ñ2ˆˆØ	ˆØˆåˆr�{„{ð WØŒz×)Ò)¨&°'ÀØ/3¸Wð *ñ Fô Fð 	Få	�"‰Œð WØ! Rš-˜-�$�$¨WˆØŒz×&Ò& v¨w¸TÈØ15À5Ègð 'ñ Wô Wð 	Wõ Œ:×%Ò% f¨g¸DØ+/¸ð &ñ Bô Bð BrV   )rj   rk   rl   rm   r�   ÚverboserJ   c          	      ó¨  — d}	|€t          | ¦  «        }t          | ||||||¬¦  «        \  } }t          |¦  «        r|j                             | |||¬¦  «        S t          |¦  «        rH| j        j        dk    r|                      ¦   «         } |j        j        dk    r|                     ¦   «         }t          j                             | |||¬¦  «        S )NTri   )r�   r”   r-   )
r   ry   r   r‡   Úassert_array_lessr   r   rq   r-   r7   )
ru   rv   rj   rk   rl   rm   r�   r”   rJ   rw   s
             rH   r!   r!   F  sñ   € àÐØ	€zÝ˜VÑ$Ô$ˆå#Ø�˜¨_Ø¨[Øðñ ô �O€FˆGõ ˆr�{„{ð $ØŒz×+Ò+¨F°GØ4;ÀWð ,ñ Nô Nð 	Nå	�"‰Œð $ØŒ=Ô Ò&Ð&Ø—Z’Z‘\”\ˆFØŒ>Ô %Ò'Ð'Ø—k’k‘m”mˆGåŒ:×'Ò'¨°Ø07Àð (ñ Jô Jð JrV   é   c                 óD   — ddd| z  z  }}t          | |g|¢R ||dddœ|¤ŽS ©zPBackwards compatible replacement. In new code, use xp_assert_close instead.
    r   g      ø?é
   F)r…   r„   rk   rl   ©r   ©ru   rv   ÚdecimalÚargsÚkwdsr„   r…   s          rH   r   r   _  óW   € ð �C˜˜g˜X™Ñ&ˆ$€DÝ˜6 7ð *à ð*ð *Ø $¨4¸UÐPUð*ð *à$(ð*ð *ð *rV   é   c                 óD   — ddd| z  z  }}t          | |g|¢R ||dddœ|¤ŽS r™   r›   rœ   s          rH   r   r   h  r    rV   Úparamc                 ó   — d| ›d�S )Nz
Providing z$ is only supported for numpy arrays.rS   )r£   s    rH   r+   r+   q  s   € ØE˜ÐEÐEÐEÐErV   c                 ó8   — |                      | j        d¦  «        S ©NrŒ   )r�   r>   rh   s     rH   r   r   u  s   € Ø�:Š:�a”gÐ1Ñ2Ô2Ð2rV   c                 óè  — g }t          | ¦  «        re|dgz  }ddl}|j                             ¦   «         }t	          d|¦  «        D ]}|d|› �gz  }Œ|j        j                             ¦   «         r|dgz  }|S t          | ¦  «        r@ddl	}|j        j
                             ¦   «         }t	          d|¦  «        D ]}|d|› �gz  }Œ|S t          | ¦  «        rœddl}|                     d¬¦  «        }t	          d|¦  «        D ]}|d|› �gz  }Œ|                     d¬¦  «        }t	          d|¦  «        D ]}|d	|› �gz  }Œ|                     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Ø˜ ˜˜�}Ñ$ˆGˆGØŒ>Ô×*Ò*Ñ,Ô,ð 	Ø˜�wÑˆGØˆÝ	�‰Œð ØˆˆˆØ”9Ô$×3Ò3Ñ5Ô5ˆÝ�q˜(Ñ#Ô#ð 	%ð 	%ˆAØ˜ ˜˜�}Ñ$ˆGˆGØˆÝ	�‰Œð Øˆ
ˆ
ˆ
Ø×"Ò"¨5Ð"Ñ1Ô1ˆÝ�q˜'Ñ"Ô"ð 	$ð 	$ˆAØ˜
˜q˜
˜
�|Ñ#ˆGˆGØ×"Ò"¨5Ð"Ñ1Ô1ˆÝ�q˜'Ñ"Ô"ð 	$ð 	$ˆAØ˜
˜q˜
˜
�|Ñ#ˆGˆGØ×"Ò"¨5Ð"Ñ1Ô1ˆÝ�q˜'Ñ"Ô"ð 	$ð 	$ˆAØ˜
˜q˜
˜
�|Ñ#ˆGˆGØˆð ˆ6€MrV   c                 ó�   — t          | ¦  «        rddl}|j        S t          | ¦  «        rddl}|j        S t          | ¦  «        r| S dS )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   �  sZ   € õ ˆr�{„{ð ØˆˆˆØŒ{Ðåˆb�z„zð Øˆ
ˆ
ˆ
ØŒyÐå��|„|ð Øˆ	àˆ4rV   Úsourcec               óÌ   — |€t          |¦  «        n|}t          t          | j        ¦  «        ¦  «        }|                     |¦  «        }||gz   }|                     | |¦  «        S rR   )r   Úlistr2   ÚndimÚpopÚpermute_dims)rf   r½   rJ   ÚaxesÚtemps        rH   r%   r%   µ  s_   € ð
 !# 
�˜Ñ	Ô	Ð	°€BÝ•�a”f‘”ÑÔ€DØ�8Š8�FÑÔ€DØ�4�&‰=€DØ�?Š?˜1˜dÑ#Ô#Ð#rV   Úx1Úx2c               óŒ   — |€t          | |¦  «        n|}|                     | ¦  «        }|                     |dk    || ¦  «        S )Nr   )r   ÚabsÚwhere)rÅ   rÆ   rJ   Úabs_x1s       rH   r#   r#   Ã  sE   € à$& J�˜˜RÑ	 Ô	 Ð	 °B€BØ�VŠV�B‰ZŒZ€FØ�8Š8�B˜!’G˜V f WÑ-Ô-Ð-rV   c               ó¨  — |€t          | ¦  «        n|}t          |¦  «        r|                     | ¦  «        S |                     | ¦  «        }|                     d| j        ¬¦  «        }|                     | dk    ||¦  «        }|                     | dk     | |¦  «        }|                     |                     | ¦  «        |j        |z  |¦  «        }|S )Né   ©r>   r   )	r   r   ÚsignÚ
zeros_likerd   r>   rÉ   ÚisnanÚnan)rf   rJ   rÎ   Úones       rH   r(   r(   Ì  s¼   € Ø!˜z�˜Ñ	Ô	Ð	¨r€BÝ��|„|ð Ø�wŠw�q‰zŒzÐØ�=Š=˜ÑÔ€DØ
�*Š*�Q˜aœgˆ*Ñ
&Ô
&€CØ�8Š8�A˜’E˜3 Ñ%Ô%€DØ�8Š8�A˜’E˜C˜4 Ñ&Ô&€DØ�8Š8�B—H’H˜Q‘K”K ¤¨¡¨TÑ2Ô2€DØ€KrV   é   )ÚaxisÚkeepdimsÚordrJ   rÔ   rÕ   rÖ   c               ód  — |€t          | ¦  «        n|}t          rtt          |d¦  «        r|j                             | |||¬¦  «        S |dk    rt          d¦  «        ‚|                     |                     | ¦  «        | z  ||¬¦  «        dz  S t          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)rf   rÔ   rÕ   rÖ   rJ   s        rH   r,   r,   Ø  sÀ   € ð
  "˜z�˜Ñ	Ô	Ð	¨r€Båð Hå�2�xÑ Ô ð 	MØ”9×(Ò(¨°ÀÈcÐ(ÑRÔRÐRà�aŠxˆxÝ ð!ñô ð ð —6’6˜"Ÿ'š' !™*œ* q™.¨t¸h�6ÑGÔGÈÑLÐLõ Œy�~Š~˜a S¨t¸hˆ~ÑGÔGÐGrV   c               óT   — |€t          | ¦  «        n|}|                     | d¦  «        S )N)éÿÿÿÿ)r   Úreshaperh   s     rH   r&   r&   ò  s.   € ð  "˜z�˜Ñ	Ô	Ð	¨r€BØ�:Š:�a˜ÑÔÐrV   c               óŒ   — |€t          | ¦  «        n|}|                     | j        d¦  «        r|                     | ¦  «        n| S r¦   )r   r�   r>   Úrealrh   s     rH   r'   r'   ú  sD   € ð  "˜z�˜Ñ	Ô	Ð	¨r€BØŸš A¤GÐ-?Ñ@Ô@ÐGˆ2�7Š7�1‰:Œ:ˆ:ÀaÐGrV   rß   )rÔ   rJ   r~   Úindicesc               óà   — |€t          | ¦  «        n|}t          |¦  «        r|                     | ||¬¦  «        S t          |¦  «        rt	          d¦  «        ‚|                     | ||¦  «        S )N)Údimz2Array API standard does not define take_along_axis)r   r   Útake_along_dimr   ÚNotImplementedErrorÚtake_along_axis)r~   rã   rÔ   rJ   s       rH   r*   r*     sz   € ð "$ �˜Ñ	Ô	Ð	°€BÝ��|„|ð 6Ø× Ò   g°4Ð Ñ8Ô8Ð8Ý	˜RÑ	 Ô	 ð 6Ý!Ð"VÑWÔWÐWà×!Ò! # w°Ñ5Ô5Ð5rV   )Úensure_writeableÚforce_floatingrJ   c                 ó`  ‡— ‰€	t          |Ž n‰Šd„ |D ¦   «         }d„ |D ¦   «         }‰                     d¦  «        j        }d„ |D ¦   «         }	  ‰j        |Ž }|r,‰                     |d¦  «        r‰                     ||¦  «        }n?# t
          $ r2 ˆfd„|D ¦   «         }|r ‰j        g |¢|‘R Ž }n|r|}n
 ‰j        |Ž }Y nw xY wd„ |D ¦   «         }		 t          |	¦  «        dk    rt          j        |	Ž n|d	         j	        }
n$# t          $ r}d
}t          |¦  «        |‚d }~ww xY wg }|D ]ƒ}|€|                     |¦  «         Œ|j	        |
k    r$t          ‰¦  «        rddini } ‰j        ||
fi |¤Ž}|j        |k    s| r‰                     ||d¬¦  «        }|                     |¦  «         Œ„|S )Nc                 ó8   — g | ]}|�t          |d¬¦  «        n|‘ŒS )NT)r[   )r   ©rT   Úargs     rH   rU   z(xp_broadcast_promote.<locals>.<listcomp>  s.   € ÐTÐTÐTÈ¨#¨/�X�c Ð&Ñ&Ô&Ð&¸sÐTÐTÐTrV   c                 ó   — g | ]}|®|‘ŒS rR   rS   rí   s     rH   rU   z(xp_broadcast_promote.<locals>.<listcomp>  s   € Ð<Ð<Ð<˜S¨C¨O�S¨O¨O¨OrV   g      ð?c                 ó   — g | ]	}|j         ‘Œ
S rS   rÍ   rí   s     rH   rU   z(xp_broadcast_promote.<locals>.<listcomp>  ó   € Ð1Ð1Ð1˜CˆcŒiÐ1Ð1Ð1rV   Úintegralc                 ó@   •— g | ]}‰                      |d ¦  «        °|‘ŒS )rò   )r�   )rT   r>   rJ   s     €rH   rU   z(xp_broadcast_promote.<locals>.<listcomp>!  s;   ø€ ð >ð >ð > %Ø!Ÿzšz¨%°Ñ<Ô<ð>˜ð >ð >ð >rV   c                 ó   — h | ]	}|j         ’Œ
S rS   )rs   rí   s     rH   ú	<setcomp>z'xp_broadcast_promote.<locals>.<setcomp>+  rñ   rV   rÌ   r   z/Array shapes are incompatible for broadcasting.r[   T)ra   )r   rd   r>   Úresult_typer�   r:   r3   r7   Úbroadcast_shapesrs   r5   Úappendr   rt   Úastype)ré   rê   rJ   rž   Úargs_not_noneÚdefault_floatÚdtypesr>   Úfloat_dtypesÚshapesrs   ÚerG   Úoutrî   Úkwargss     `             rH   Úxp_broadcast_promoter    s_  ø€ Ø#% :�˜$Ð	Ð	°2€BàTÐTÈtÐTÑTÔT€DØ<Ð< DÐ<Ñ<Ô<€Mð —J’J˜r‘N”NÔ(€MØ1Ð1 =Ð1Ñ1Ô1€Fð,Ø�” Ð'ˆØð 	9˜bŸjšj¨°
Ñ;Ô;ð 	9ð —N’N 5¨-Ñ8Ô8ˆEøøÝð ,ð ,ð ,ð>ð >ð >ð >¨6ð >ñ >ô >ˆàð 	,Ø"�B”NÐ@ LÐ@°-Ð@Ð@Ð@ˆEˆEØð 	,Ø!ˆEˆEà"�B”N FÐ+ˆEøøð,øøøð 2Ð1 =Ð1Ñ1Ô1€Fð)Ý14°V±´ÀÒ1AÐ1A•Ô$ fÐ-Ð-Ø# AÔ&Ô,ð 	ˆøåð )ð )ð )ØCˆÝ˜Ñ!Ô! qÐ(øøøøð)øøøð €CØð ð ˆØˆ;Ø�JŠJ�s‰OŒOˆOØð
 Œ9˜ÒÐÝ(0°©¬Ð<�g˜t�_�_¸"ˆFØ!�"”/ # uÐ7Ð7°Ð7Ð7ˆCð ŒI˜ÒÐÐ#3ÐØ—)’)˜C ¨T�)Ñ2Ô2ˆCØ�
Š
�3‰Œˆˆà€Js*   Á8B Â9CÃCÃ.D Ä
D#ÄDÄD#c                 ó
  — |€t          | ¦  «        n|}| j        }|                     ||j        ¦  «        r|                     | |j        ¦  «        } n1|                     |d¦  «        r|                     | |j        ¦  «        } | S )Nr‹   )r   r>   r�   Úfloat32rù   Ú	complex64Ú
complex128)r~   rJ   Ú	arr_dtypes      rH   Úxp_float_to_complexr  H  s€   € Ø!# �˜Ñ	Ô	Ð	°€BØ”	€Ið 
‡z‚z�)˜RœZÑ(Ô(ð ,Ø�iŠi˜˜Rœ\Ñ*Ô*ˆˆØ	�Š�I˜Ñ	/Ô	/ð ,Ø�iŠi˜˜Rœ]Ñ+Ô+ˆà€JrV   )NNN)r—   )r¡   rR   )GÚ__doc__ÚosÚtypesr   Útypingr   r   r   r
   r7   Únumpy.typingÚnptÚ
scipy._libr   Úscipy._lib.array_api_compatr   r	   r)   rX   r   r$   r   r   r   r   r   r   r   r   r   r   Ú__all__ÚenvironÚgetr   ÚstrÚboolÚ__annotations__r   rW   r.   r/   rI   rO   r   r   r"   ry   rp   r    r   r!   r   r   r+   r   r¿   r   r   Úintr%   r#   r(   r{   Úfloatr,   r&   r'   r*   r  r  rS   rV   rH   ú<module>r     sÎ  ððð ð ð 
€	€	€	à Ð Ð Ð Ð Ð Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *à Ð Ð Ð Ø Ð Ð Ð Ð Ð à 'Ð 'Ð 'Ð 'Ð 'Ð 'ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð	ð 	ð 	€ð !œjŸnšnÐ->ÀÑFÔF€��t‘Ð FÐ FÑ FàŒz�~Š~˜n¨eÑ4Ô4€ð 'Ø ðð €ð €€yÐ Ð Ñ Ø˜sœ}Ñ,€	ˆ9Ð ,Ð ,Ñ ,ð,ð ,ð ,ð^˜ð  Jð °4ð ð ð ð ð"6˜Uð "6 zð "6ð "6ð "6ð "6ðN Ø48Ø ð	,ð !%Ø"Øð,ð ,ð ,Øð,àð,ð Ð)Ô*¨TÑ1ð,ð �T‰kð	,ð ˜Ñð,ð ð,ð ð,ð 
ð,ð ,ð ,ð ,ð^ 26ð )ð )ð )ˆuð )˜Z¨$Ñ.ð )¸%ð )ð )ð )ð )ð: #'°DÀdØðð ð ð ð ð<	0ð 	0ð 	0ð 9=È$Ø $¨t¸RÀDðKð Kð Kð Kð Kð0 .2¸È4Ø $°$ÀØ 4ðBð Bð Bð Bð BðD 8<ÈØ#¨d¸BÈÐQUðJð Jð Jð Jð Jð2*ð *ð *ð *ð*ð *ð *ð *ðF Cð F¨Cð Fð Fð Fð Fð3�%ð 3˜Zð 3¨Dð 3ð 3ð 3ð 3ð!�zð ! d¨3¤i°$°t´*Ñ&<ð !ð !ð !ð !ðH˜Jð ¨:¸Ñ+<ð ð ð ð ð8 !%ð		$ð 	$ð 	$Øð	$àð	$ð ˜Ñð		$ð */ð		$ð 	$ð 	$ð 	$ð EIð .ð .ð .�Eð .˜uð .°
¸TÑ0Að .ÈUð .ð .ð .ð .ð 59ð 	ð 	ð 	ˆuð 	 
¨TÑ 1ð 	¸Uð 	ð 	ð 	ð 	ð 48Ø$)Ø&'Ø+/ð	Hð Hð H�eð HØ˜u SœzÑ)¨DÑ0ðHà!ðHð ˜e™ðHð " DÑ(ð	Hð 5:ð	Hð Hð Hð Hð4 6:ð  ð  ð  �ð   ¨dÑ!2ð  ¸eð  ð  ð  ð  ð 59ð Hð Hð Hˆuð H 
¨TÑ 1ð H¸Uð Hð Hð Hð Hð $&Ø/3ð6ð 6ð 6˜Eð 6Ø %ð6à ð6ð &¨Ñ,ð6ð 9>ð6ð 6ð 6ð 6ð  27ÀuÐQUð 4ð 4ð 4ð 4ð 4ðnð ˜Uð ¨
°TÑ(9ð ÀUð ð ð ð ð ð rV   