
    (ph                         S SK Js  Jr  SSKJr  SSKJr  SSKJr   " S S5      rS\0r	S	 r
SS
 jrS rSS jrS r\" SSS9  g)    N   )_basic_backend)_realtransforms_backend)_fftlog_backendc                   ,    \ rS rSrSrSr\S 5       rSrg)_ScipyBackend   a  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                     [        [        U R                  S 5      nUc  [        [        U R                  S 5      nUc  [        [        U R                  S 5      nUc  [
        $ U" U0 UD6$ )N)getattrr   __name__r   r   NotImplemented)methodargskwargsfns       E/var/www/html/venv/lib/python3.13/site-packages/scipy/fft/_backend.py__ua_function___ScipyBackend.__ua_function__   s`     ^V__d;:0&//4HB:&//4@B:!!4"6""     N)	r   
__module____qualname____firstlineno____doc____ua_domain__staticmethodr   __static_attributes__r   r   r   r   r      s      &M	# 	#r   r   scipyc                     [        U [        5      (       a
   [        U    n U R
                  S:w  a  [	        S5      eU $ ! [         a  n[	        SU  35      UeSnAff = f)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(   $   sl     '3	B%g.G  11GHHN  	B/y9:A	Bs   	= 
AAAc                 D    [        U 5      n [        R                  " XX#S9  g)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.   3   s    P  (G'tOr   c                 F    [        U 5      n [        R                  " U 5        g)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   r0   r0   _   s    H  (G r   c                 B    [        U 5      n [        R                  " XUS9$ )a  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   r3   r3      s    8  (G>>'t<<r   c                 D    [        U 5      n [        R                  " U 5      $ )aB  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_backendr1   s    r   r5   r5      s    2  (G??7##r   T)r,   )FFF)FF)scipy._lib.uarray_libuarrayr-    r   r   r   r   r#   r(   r.   r0   r3   r5   r   r   r   <module>r:      sU       % # #2 ]
)PX%!P=@$: 7T *r   