§
    fŠtjR  ã                   ó6  — d dl mc mZ d dlmZ ddlmZ ddlmZ ddlm	Z	  G d„ d¦  «        Z
d	e
iZd
„ Z ed¬¦  «        dd„¦   «         Z ed¬¦  «        d„ ¦   «         Z ed¬¦  «        dd„¦   «         Z ed¬¦  «        d„ ¦   «         Z ed	d¬¦  «         dS )é    N)Úxp_capabilitiesé   )Ú_basic_backend)Ú_realtransforms_backend)Ú_fftlog_backendc                   ó,   — e Zd ZdZdZed„ ¦   «         ZdS )Ú_ScipyBackenda-  The default backend for fft calculations

    Notes
    -----
    We use the domain ``numpy.scipy`` rather than ``scipy`` because ``uarray``
    treats the domain as a hierarchy. This means the user can install a single
    backend for ``numpy`` and have it implement ``numpy.scipy.fft`` as well.
    únumpy.scipy.fftc                 óÎ   — t          t          | j        d ¦  «        }|€t          t          | j        d ¦  «        }|€t          t          | j        d ¦  «        }|€t
          S  ||i |¤ŽS )N)Úgetattrr   Ú__name__r   r   ÚNotImplemented)ÚmethodÚargsÚkwargsÚfns       úP/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/scipy/fft/_backend.pyÚ__ua_function__z_ScipyBackend.__ua_function__   sh   € õ •^ V¤_°dÑ;Ô;ˆØˆ:ÝÕ0°&´/À4ÑHÔHˆBØˆ:Ý�¨&¬/¸4Ñ@Ô@ˆBØˆ:Ý!Ð!Øˆr�4Ð"˜6Ð"Ð"Ð"ó    N)r   Ú
__module__Ú__qualname__Ú__doc__Ú__ua_domain__Ústaticmethodr   © r   r   r	   r	      s>   € € € € € ðð ð &€Màð	#ð 	#ñ „\ð	#ð 	#ð 	#r   r	   Úscipyc                 óÌ   — t          | t          ¦  «        r4	 t          |          } n%# t          $ r}t	          d| › �¦  «        |‚d}~ww xY w| j        dk    rt	          d¦  «        ‚| S )z8Maps strings to known backends and validates the backendzUnknown backend Nr
   z,Backend does not implement "numpy.scipy.fft")Ú
isinstanceÚstrÚ_named_backendsÚKeyErrorÚ
ValueErrorr   )ÚbackendÚes     r   Ú_backend_from_argr%   %   sŠ   € õ �'�3ÑÔð Bð	BÝ% gÔ.ˆGˆGøÝð 	Bð 	Bð 	BÝÐ9°Ð9Ð9Ñ:Ô:ÀÐAøøøøð	Bøøøð ÔÐ 1Ò1Ð1ÝÐGÑHÔHÐHà€Ns   —% ¥
A¯AÁAT)Úout_of_scopeFc                 óT   — t          | ¦  «        } t          j        | |||¬¦  «         dS )a,  Sets the global fft backend

    This utility method replaces the default backend for permanent use. It
    will be tried in the list of backends automatically, unless the
    ``only`` flag is set on a backend. This will be the first tried
    backend outside the :obj:`set_backend` context manager.

    Parameters
    ----------
    backend : {object, 'scipy'}
        The backend to use.
        Can either be a ``str`` containing the name of a known backend
        {'scipy'} or an object that implements the uarray protocol.
    coerce : bool
        Whether to coerce input types when trying this backend.
    only : bool
        If ``True``, no more backends will be tried if this fails.
        Implied by ``coerce=True``.
    try_last : bool
        If ``True``, the global backend is tried after registered backends.

    Raises
    ------
    ValueError: If the backend does not implement ``numpy.scipy.fft``.

    Notes
    -----
    This will overwrite the previously set global backend, which, by default, is
    the SciPy implementation.

    Examples
    --------
    We can set the global fft backend:

    >>> from scipy.fft import fft, set_global_backend
    >>> set_global_backend("scipy")  # Sets global backend (default is "scipy").
    >>> fft([1])  # Calls the global backend
    array([1.+0.j])
    )ÚcoerceÚonlyÚtry_lastN)r%   ÚuaÚset_global_backend)r#   r(   r)   r*   s       r   r,   r,   4   s2   € õR   Ñ(Ô(€GÝÔ˜'¨&°tÀhÐOÑOÔOÐOÐOÐOr   c                 óL   — t          | ¦  «        } t          j        | ¦  «         dS )aƒ  
    Register a backend for permanent use.

    Registered backends have the lowest priority and will be tried after the
    global backend.

    Parameters
    ----------
    backend : {object, 'scipy'}
        The backend to use.
        Can either be a ``str`` containing the name of a known backend
        {'scipy'} or an object that implements the uarray protocol.

    Raises
    ------
    ValueError: If the backend does not implement ``numpy.scipy.fft``.

    Examples
    --------
    We can register a new fft backend:

    >>> from scipy.fft import fft, register_backend, set_global_backend
    >>> class NoopBackend:  # Define an invalid Backend
    ...     __ua_domain__ = "numpy.scipy.fft"
    ...     def __ua_function__(self, func, args, kwargs):
    ...          return NotImplemented
    >>> set_global_backend(NoopBackend())  # Set the invalid backend as global
    >>> register_backend("scipy")  # Register a new backend
    # The registered backend is called because
    # the global backend returns `NotImplemented`
    >>> fft([1])
    array([1.+0.j])
    >>> set_global_backend("scipy")  # Restore global backend to default

    N)r%   r+   Úregister_backend©r#   s    r   r.   r.   a   s)   € õJ   Ñ(Ô(€GÝÔ˜Ñ Ô Ð Ð Ð r   c                 óN   — t          | ¦  «        } t          j        | ||¬¦  «        S )aO  Context manager to set the backend within a fixed scope.

    Upon entering the ``with`` statement, the given backend will be added to
    the list of available backends with the highest priority. Upon exit, the
    backend is reset to the state before entering the scope.

    Parameters
    ----------
    backend : {object, 'scipy'}
        The backend to use.
        Can either be a ``str`` containing the name of a known backend
        {'scipy'} or an object that implements the uarray protocol.
    coerce : bool, optional
        Whether to allow expensive conversions for the ``x`` parameter. e.g.,
        copying a NumPy array to the GPU for a CuPy backend. Implies ``only``.
    only : bool, optional
        If only is ``True`` and this backend returns ``NotImplemented``, then a
        BackendNotImplemented error will be raised immediately. Ignoring any
        lower priority backends.

    Examples
    --------
    >>> import scipy.fft as fft
    >>> with fft.set_backend('scipy', only=True):
    ...     fft.fft([1])  # Always calls the scipy implementation
    array([1.+0.j])
    )r(   r)   )r%   r+   Úset_backend)r#   r(   r)   s      r   r1   r1   Š   s(   € õ:   Ñ(Ô(€GÝŒ>˜'¨&°tÐ<Ñ<Ô<Ð<r   c                 óH   — t          | ¦  «        } t          j        | ¦  «        S )a’  Context manager to skip a backend within a fixed scope.

    Within the context of a ``with`` statement, the given backend will not be
    called. This covers backends registered both locally and globally. Upon
    exit, the backend will again be considered.

    Parameters
    ----------
    backend : {object, 'scipy'}
        The backend to skip.
        Can either be a ``str`` containing the name of a known backend
        {'scipy'} or an object that implements the uarray protocol.

    Examples
    --------
    >>> import scipy.fft as fft
    >>> fft.fft([1])  # Calls default SciPy backend
    array([1.+0.j])
    >>> with fft.skip_backend('scipy'):  # We explicitly skip the SciPy backend
    ...     fft.fft([1])                 # leaving no implementation available
    Traceback (most recent call last):
        ...
    BackendNotImplementedError: No selected backends had an implementation ...
    )r%   r+   Úskip_backendr/   s    r   r3   r3   «   s!   € õ4   Ñ(Ô(€GÝŒ?˜7Ñ#Ô#Ð#r   )r*   )FFF)FF)Úscipy._lib.uarrayÚ_libÚuarrayr+   Úscipy._lib._array_apir   Ú r   r   r   r	   r    r%   r,   r.   r1   r3   r   r   r   ú<module>r9      s€  ðØ Ð Ð Ð Ð Ð Ð Ð Ð Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð ð#ð #ð #ð #ð #ñ #ô #ð #ð2 ˆ]ð€ð
ð ð ð €˜dÐ#Ñ#Ô#ð)Pð )Pð )Pñ $Ô#ð)PðX €˜dÐ#Ñ#Ô#ð%!ð %!ñ $Ô#ð%!ðP €˜dÐ#Ñ#Ô#ð=ð =ð =ñ $Ô#ð=ð@ €˜dÐ#Ñ#Ô#ð$ð $ñ $Ô#ð$ð: Ð �7 TÐ *Ñ *Ô *Ð *Ð *Ð *r   