
    `il                     n   U d dl mZ d dlZd dlZd dlZd dlmZmZm	Z
mZmZ dZdZ	 d dlZd dlmZ d dlmZ  eej                   ed          k    Z eej                   ed          k    Z[[n"# e$ r  G d d	          Z e            ZY nw xY wd
Zi Zeed<   d Zd Zd Z d Z! e ej                  d%ddd            Z e ej"                  d%ddd            Z" e ej#                  d&ddd            Z# e ej$                  d&ddd            Z$ e ej%                  d'ddd            Z% e ej&                  d'ddd            Z& e ej'                  d%ddd            Z' e ej(                  d%ddd            Z( e ej)                  d&ddd            Z) e ej*                  d&ddd            Z* e ej+                  d'ddd            Z+ e ej,                  d'ddd            Z, e ej	                  d%ddd            Z	 e ej                  d%ddd             Z e ej-                  d&ddd!            Z- e ej.                  d&ddd"            Z. e ej/                  d'ddd#            Z/ e ej0                  d'ddd$            Z0dS )(    )NumberN)_fft_default_fft_funchfftihfft_swap_directionF)NumpyVersionz1.5.0z1.6.0c                       e Zd Zd ZdS )_DummyModulec                     d S N )selfnames     h/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/cupyx/scipy/fft/_fft.py__getattr__z_DummyModule.__getattr__   s    4    N)__name__
__module____qualname__r   r   r   r   r   r      s#        	 	 	 	 	r   r   znumpy.scipy.fft_implementedc                     |r%	 d | D             }n## t           $ r
 t          cY S w xY wd | D             }t          d t          ||           D                       st          S |S )Nc                     g | ]<}|j         r,|j        t          j        u rt	          j        |j                  n|j        =S r   )	coercibletypenpndarraycupyasarrayvalue.0ds     r   
<listcomp>z"__ua_convert__.<locals>.<listcomp>&   sS     5 5 5!" *+ 2:9M9MQW%%%W5 5 5r   c                     g | ]	}|j         
S r   )r    r!   s     r   r$   z"__ua_convert__.<locals>.<listcomp>,   s    333AG333r   c              3   v   K   | ]4\  }}|j         t          j        upt          |t          j                  V  5d S r   )r   r   r   
isinstancer   )r"   rr#   s      r   	<genexpr>z!__ua_convert__.<locals>.<genexpr>.   sT       9 91a vRZ'F:a+F+F 9 9 9 9 9 9r   )	TypeErrorNotImplementedallzip)dispatchablescoercereplaceds      r   __ua_convert__r1   #   s     4	"5 5&35 5 5HH  	" 	" 	"!!!!	" 43]333 9 9x779 9 9 9 9 Os    %%c                     t                               | d           }|t          S d|v rt          st	          j        d            ||i |S )Nplanz1The 'plan' argument is supported in SciPy v1.5.0+)r   getr+   
_scipy_150warningswarn)methodargskwargsfns       r   __ua_function__r<   5   sX    			&$	'	'B	z
KLLL2tvr   c                       fd}|S )zBDecorator adds function to the dictionary of implemented functionsc                     | t           <   | S r   )r   )func
scipy_funcs    r   innerz_implements.<locals>.inner@   s    #'Z r   r   )r@   rA   s   ` r   _implementsrB   >   s#         Lr   c                 6    t          | t                    r| fS | S )zEConvert scalars to a sequence, otherwise pass through ``x`` unchanged)r'   r   )xs    r   _assequencerE   G   s     !V tHr   r3   c          	      H    ddl m} t          | |f|f||j        ||          S )a  Compute the one-dimensional FFT.

    Args:
        x (cupy.ndarray): Array to be transformed.
        n (None or int): Length of the transformed axis of the output. If ``n``
            is not given, the length of the input along the axis specified by
            ``axis`` is used.
        axis (int): Axis over which to compute the FFT.
        norm (``"backward"``, ``"ortho"``, or ``"forward"``): Optional keyword
            to specify the normalization mode. Default is ``None``, which is
            an alias of ``"backward"``.
        overwrite_x (bool): If True, the contents of ``x`` can be destroyed.
        plan (:class:`cupy.cuda.cufft.Plan1d` or ``None``): a cuFFT plan for
            transforming ``x`` over ``axis``, which can be obtained using::

                plan = cupyx.scipy.fftpack.get_fft_plan(x, n, axis)

            Note that ``plan`` is defaulted to ``None``, meaning CuPy will use
            an auto-generated plan behind the scene.

    Returns:
        cupy.ndarray:
            The transformed array which shape is specified by ``n`` and type
            will convert to complex if that of the input is another.

    .. seealso:: :func:`scipy.fft.fft`
    r   cufftoverwrite_xr3   	cupy.cudarJ   r   CUFFT_FORWARDrD   naxisnormrL   r3   rJ   s          r   fftrT   N   C    :  A4$$(;'d4 4 4 4r   c          	      H    ddl m} t          | |f|f||j        ||          S )a  Compute the one-dimensional inverse FFT.

    Args:
        x (cupy.ndarray): Array to be transformed.
        n (None or int): Length of the transformed axis of the output. If ``n``
            is not given, the length of the input along the axis specified by
            ``axis`` is used.
        axis (int): Axis over which to compute the FFT.
        norm (``"backward"``, ``"ortho"``, or ``"forward"``): Optional keyword
            to specify the normalization mode. Default is ``None``, which is
            an alias of ``"backward"``.
        overwrite_x (bool): If True, the contents of ``x`` can be destroyed.
        plan (:class:`cupy.cuda.cufft.Plan1d` or ``None``): a cuFFT plan for
            transforming ``x`` over ``axis``, which can be obtained using::

                plan = cupyx.scipy.fftpack.get_fft_plan(x, n, axis)

            Note that ``plan`` is defaulted to ``None``, meaning CuPy will use
            an auto-generated plan behind the scene.

    Returns:
        cupy.ndarray:
            The transformed array which shape is specified by ``n`` and type
            will convert to complex if that of the input is another.

    .. seealso:: :func:`scipy.fft.ifft`
    r   rI   rK   rN   rJ   r   CUFFT_INVERSErP   s          r   ifftrY   p   rU   r   rF   c                ,    t          | |||||          S )a  Compute the two-dimensional FFT.

    Args:
        x (cupy.ndarray): Array to be transformed.
        s (None or tuple of ints): Shape of the transformed axes of the
            output. If ``s`` is not given, the lengths of the input along
            the axes specified by ``axes`` are used.
        axes (tuple of ints): Axes over which to compute the FFT.
        norm (``"backward"``, ``"ortho"``, or ``"forward"``): Optional keyword
            to specify the normalization mode. Default is ``None``, which is
            an alias of ``"backward"``.
        overwrite_x (bool): If True, the contents of ``x`` can be destroyed.
        plan (:class:`cupy.cuda.cufft.PlanNd` or ``None``): a cuFFT plan for
            transforming ``x`` over ``axes``, which can be obtained using::

                plan = cupyx.scipy.fftpack.get_fft_plan(x, s, axes)

            Note that ``plan`` is defaulted to ``None``, meaning CuPy will use
            an auto-generated plan behind the scene.

    Returns:
        cupy.ndarray:
            The transformed array which shape is specified by ``s`` and
            type will convert to complex if that of the input is another.

    .. seealso:: :func:`scipy.fft.fft2`
    rG   )fftnrD   saxesrS   rL   r3   s         r   fft2ra      s    : 1dD+D9999r   c                ,    t          | |||||          S )a  Compute the two-dimensional inverse FFT.

    Args:
        x (cupy.ndarray): Array to be transformed.
        s (None or tuple of ints): Shape of the transformed axes of the
            output. If ``s`` is not given, the lengths of the input along
            the axes specified by ``axes`` are used.
        axes (tuple of ints): Axes over which to compute the FFT.
        norm (``"backward"``, ``"ortho"``, or ``"forward"``): Optional keyword
            to specify the normalization mode. Default is ``None``, which is
            an alias of ``"backward"``.
        overwrite_x (bool): If True, the contents of ``x`` can be destroyed.
        plan (:class:`cupy.cuda.cufft.PlanNd` or ``None``): a cuFFT plan for
            transforming ``x`` over ``axes``, which can be obtained using::

                plan = cupyx.scipy.fftpack.get_fft_plan(x, s, axes)

            Note that ``plan`` is defaulted to ``None``, meaning CuPy will use
            an auto-generated plan behind the scene.

    Returns:
        cupy.ndarray:
            The transformed array which shape is specified by ``s`` and
            type will convert to complex if that of the input is another.

    .. seealso:: :func:`scipy.fft.ifft2`
    rG   )ifftnr^   s         r   ifft2rd      s    < AtT;T::::r   c          	          ddl m} t          |          }t          |          }t          | ||          } || ||||j        ||          S )a  Compute the N-dimensional FFT.

    Args:
        x (cupy.ndarray): Array to be transformed.
        s (None or tuple of ints): Shape of the transformed axes of the
            output. If ``s`` is not given, the lengths of the input along
            the axes specified by ``axes`` are used.
        axes (tuple of ints): Axes over which to compute the FFT.
        norm (``"backward"``, ``"ortho"``, or ``"forward"``): Optional keyword
            to specify the normalization mode. Default is ``None``, which is
            an alias of ``"backward"``.
        overwrite_x (bool): If True, the contents of ``x`` can be destroyed.
        plan (:class:`cupy.cuda.cufft.PlanNd` or ``None``): a cuFFT plan for
            transforming ``x`` over ``axes``, which can be obtained using::

                plan = cupyx.scipy.fftpack.get_fft_plan(x, s, axes)

            Note that ``plan`` is defaulted to ``None``, meaning CuPy will use
            an auto-generated plan behind the scene.

    Returns:
        cupy.ndarray:
            The transformed array which shape is specified by ``s`` and
            type will convert to complex if that of the input is another.

    .. seealso:: :func:`scipy.fft.fftn`
    r   rI   rK   rN   rJ   rE   r   rO   rD   r_   r`   rS   rL   r3   rJ   r?   s           r   r]   r]      j    :  AAtDQ4((D41dD%"5;   r   c          	          ddl m} t          |          }t          |          }t          | ||          } || ||||j        ||          S )a  Compute the N-dimensional inverse FFT.

    Args:
        x (cupy.ndarray): Array to be transformed.
        s (None or tuple of ints): Shape of the transformed axes of the
            output. If ``s`` is not given, the lengths of the input along
            the axes specified by ``axes`` are used.
        axes (tuple of ints): Axes over which to compute the FFT.
        norm (``"backward"``, ``"ortho"``, or ``"forward"``): Optional keyword
            to specify the normalization mode. Default is ``None``, which is
            an alias of ``"backward"``.
        overwrite_x (bool): If True, the contents of ``x`` can be destroyed.
        plan (:class:`cupy.cuda.cufft.PlanNd` or ``None``): a cuFFT plan for
            transforming ``x`` over ``axes``, which can be obtained using::

                plan = cupyx.scipy.fftpack.get_fft_plan(x, s, axes)

            Note that ``plan`` is defaulted to ``None``, meaning CuPy will use
            an auto-generated plan behind the scene.

    Returns:
        cupy.ndarray:
            The transformed array which shape is specified by ``s`` and
            type will convert to complex if that of the input is another.

    .. seealso:: :func:`scipy.fft.ifftn`
    r   rI   rK   rN   rJ   rE   r   rX   rg   s           r   rc   rc      rh   r   c          
      J    ddl m} t          | |f|f||j        d||          S )a)  Compute the one-dimensional FFT for real input.

    The returned array contains the positive frequency components of the
    corresponding :func:`fft`, up to and including the Nyquist frequency.

    Args:
        x (cupy.ndarray): Array to be transformed.
        n (None or int): Length of the transformed axis of the output. If ``n``
            is not given, the length of the input along the axis specified by
            ``axis`` is used.
        axis (int): Axis over which to compute the FFT.
        norm (``"backward"``, ``"ortho"``, or ``"forward"``): Optional keyword
            to specify the normalization mode. Default is ``None``, which is
            an alias of ``"backward"``.
        overwrite_x (bool): If True, the contents of ``x`` can be destroyed.
        plan (:class:`cupy.cuda.cufft.Plan1d` or ``None``): a cuFFT plan for
            transforming ``x`` over ``axis``, which can be obtained using::

                plan = cupyx.scipy.fftpack.get_fft_plan(x, n, axis,
                                                        value_type='R2C')

            Note that ``plan`` is defaulted to ``None``, meaning CuPy will use
            an auto-generated plan behind the scene.

    Returns:
        cupy.ndarray:
            The transformed array.

    .. seealso:: :func:`scipy.fft.rfft`

    r   rI   R2CrK   rM   rP   s          r   rfftrm     sF    B  A4$$(;U'd4 4 4 4r   c          
      J    ddl m} t          | |f|f||j        d||          S )a  Compute the one-dimensional inverse FFT for real input.

    Args:
        x (cupy.ndarray): Array to be transformed.
        n (None or int): Length of the transformed axis of the output. If ``n``
            is not given, the length of the input along the axis specified by
            ``axis`` is used.
        axis (int): Axis over which to compute the FFT.
        norm (``"backward"``, ``"ortho"``, or ``"forward"``): Optional keyword
            to specify the normalization mode. Default is ``None``, which is
            an alias of ``"backward"``.
        overwrite_x (bool): If True, the contents of ``x`` can be destroyed.
        plan (:class:`cupy.cuda.cufft.Plan1d` or ``None``): a cuFFT plan for
            transforming ``x`` over ``axis``, which can be obtained using::

                plan = cupyx.scipy.fftpack.get_fft_plan(x, n, axis,
                                                        value_type='C2R')

            Note that ``plan`` is defaulted to ``None``, meaning CuPy will use
            an auto-generated plan behind the scene.

    Returns:
        cupy.ndarray:
            The transformed array.

    .. seealso:: :func:`scipy.fft.irfft`
    r   rI   C2RrK   rW   rP   s          r   irfftrp   F  sE    :  A4$$(;U'd4 4 4 4r   c                ,    t          | |||||          S )aI  Compute the two-dimensional FFT for real input.

    Args:
        a (cupy.ndarray): Array to be transform.
        s (None or tuple of ints): Shape to use from the input. If ``s`` is not
            given, the lengths of the input along the axes specified by
            ``axes`` are used.
        axes (tuple of ints): Axes over which to compute the FFT.
        norm (``"backward"``, ``"ortho"``, or ``"forward"``): Optional keyword
            to specify the normalization mode. Default is ``None``, which is
            an alias of ``"backward"``.
        overwrite_x (bool): If True, the contents of ``x`` can be destroyed.
        plan (:class:`cupy.cuda.cufft.PlanNd` or ``None``): a cuFFT plan for
            transforming ``x`` over ``axes``, which can be obtained using::

                plan = cupyx.scipy.fftpack.get_fft_plan(x, s, axes,
                                                        value_type='R2C')

            Note that ``plan`` is defaulted to ``None``, meaning CuPy will use
            an auto-generated plan behind the scene.

    Returns:
        cupy.ndarray:
            The transformed array which shape is specified by ``s`` and type
            will convert to complex if the input is other. The length of the
            last axis transformed will be ``s[-1]//2+1``.

    .. seealso:: :func:`scipy.fft.rfft2`
    rG   )rfftnr^   s         r   rfft2rs   h  s     @ AtT;T::::r   c                ,    t          | |||||          S )a  Compute the two-dimensional inverse FFT for real input.

    Args:
        a (cupy.ndarray): Array to be transform.
        s (None or tuple of ints): Shape of the output. If ``s`` is not given,
            they are determined from the lengths of the input along the axes
            specified by ``axes``.
        axes (tuple of ints): Axes over which to compute the FFT.
        norm (``"backward"``, ``"ortho"``, or ``"forward"``): Optional keyword
            to specify the normalization mode. Default is ``None``, which is
            an alias of ``"backward"``.
        overwrite_x (bool): If True, the contents of ``x`` can be destroyed.
        plan (:class:`cupy.cuda.cufft.PlanNd` or ``None``): a cuFFT plan for
            transforming ``x`` over ``axes``, which can be obtained using::

                plan = cupyx.scipy.fftpack.get_fft_plan(x, s, axes,
                                                        value_type='C2R')

            Note that ``plan`` is defaulted to ``None``, meaning CuPy will use
            an auto-generated plan behind the scene.

    Returns:
        cupy.ndarray:
            The transformed array which shape is specified by ``s`` and type
            will convert to complex if the input is other. If ``s`` is not
            given, the length of final transformed axis of output will be
            `2*(m-1)` where `m` is the length of the final transformed axis of
            the input.

    .. seealso:: :func:`scipy.fft.irfft2`
    rG   )irfftnr^   s         r   irfft2rv     s     D !QdKd;;;;r   c          
          ddl m} t          |          }t          |          }t          | ||d          } || ||||j        d||          S )aG  Compute the N-dimensional FFT for real input.

    Args:
        a (cupy.ndarray): Array to be transform.
        s (None or tuple of ints): Shape to use from the input. If ``s`` is not
            given, the lengths of the input along the axes specified by
            ``axes`` are used.
        axes (tuple of ints): Axes over which to compute the FFT.
        norm (``"backward"``, ``"ortho"``, or ``"forward"``): Optional keyword
            to specify the normalization mode. Default is ``None``, which is
            an alias of ``"backward"``.
        overwrite_x (bool): If True, the contents of ``x`` can be destroyed.
        plan (:class:`cupy.cuda.cufft.PlanNd` or ``None``): a cuFFT plan for
            transforming ``x`` over ``axes``, which can be obtained using::

                plan = cupyx.scipy.fftpack.get_fft_plan(x, s, axes,
                                                        value_type='R2C')

            Note that ``plan`` is defaulted to ``None``, meaning CuPy will use
            an auto-generated plan behind the scene.

    Returns:
        cupy.ndarray:
            The transformed array which shape is specified by ``s`` and type
            will convert to complex if the input is other. The length of the
            last axis transformed will be ``s[-1]//2+1``.

    .. seealso:: :func:`scipy.fft.rfftn`
    r   rI   rl   
value_typerK   rf   rg   s           r   rr   rr     sq    >  AAtDQ4E:::D41dD%"5u'd4 4 4 4r   c          
          ddl m} t          |          }t          |          }t          | ||d          } || ||||j        d||          S )a  Compute the N-dimensional inverse FFT for real input.

    Args:
        a (cupy.ndarray): Array to be transform.
        s (None or tuple of ints): Shape of the output. If ``s`` is not given,
            they are determined from the lengths of the input along the axes
            specified by ``axes``.
        axes (tuple of ints): Axes over which to compute the FFT.
        norm (``"backward"``, ``"ortho"``, or ``"forward"``): Optional keyword
            to specify the normalization mode. Default is ``None``, which is
            an alias of ``"backward"``.
        overwrite_x (bool): If True, the contents of ``x`` can be destroyed.
        plan (:class:`cupy.cuda.cufft.PlanNd` or ``None``): a cuFFT plan for
            transforming ``x`` over ``axes``, which can be obtained using::

                plan = cupyx.scipy.fftpack.get_fft_plan(x, s, axes,
                                                        value_type='C2R')

            Note that ``plan`` is defaulted to ``None``, meaning CuPy will use
            an auto-generated plan behind the scene.

    Returns:
        cupy.ndarray:
            The transformed array which shape is specified by ``s`` and type
            will convert to complex if the input is other. If ``s`` is not
            given, the length of final transformed axis of output will be
            ``2*(m-1)`` where `m` is the length of the final transformed axis
            of the input.

    .. seealso:: :func:`scipy.fft.irfftn`
    r   rI   ro   rx   rK   rj   rg   s           r   ru   ru     sr    B  AAtDQ4E:::D41dD%"5u'd4 4 4 4r   c                H    |t          d          t          | |||          S )a  Compute the FFT of a signal that has Hermitian symmetry.

    Args:
        a (cupy.ndarray): Array to be transform.
        n (None or int): Length of the transformed axis of the output. For
            ``n`` output points, ``n//2+1`` input points are necessary. If
            ``n`` is not given, it is determined from the length of the input
            along the axis specified by ``axis``.
        axis (int): Axis over which to compute the FFT.
        norm (``"backward"``, ``"ortho"``, or ``"forward"``): Optional keyword
            to specify the normalization mode. Default is ``None``, which is
            an alias of ``"backward"``.
        overwrite_x (bool): If True, the contents of ``x`` can be destroyed.
        plan (None): This argument is currently not supported.

    Returns:
        cupy.ndarray:
            The transformed array which shape is specified by ``n`` and type
            will convert to complex if the input is other. If ``n`` is not
            given, the length of the transformed axis is ``2*(m-1)`` where `m`
            is the length of the transformed axis of the input.

    .. seealso:: :func:`scipy.fft.hfft`
    Nz(hfft plan is currently not yet supported)NotImplementedError_hfftrD   rQ   rR   rS   rL   r3   s         r   r   r     s-    6 !"LMMMAtT"""r   c                H    |t          d          t          | |||          S )a  Compute the FFT of a signal that has Hermitian symmetry.

    Args:
        a (cupy.ndarray): Array to be transform.
        n (None or int): Number of points along transformation axis in the
            input to use. If ``n`` is not given, the length of the input along
            the axis specified by ``axis`` is used.
        axis (int): Axis over which to compute the FFT.
        norm (``"backward"``, ``"ortho"``, or ``"forward"``): Optional keyword
            to specify the normalization mode. Default is ``None``, which is
            an alias of ``"backward"``.
        overwrite_x (bool): If True, the contents of ``x`` can be destroyed.
        plan (None): This argument is currently not supported.

    Returns:
        cupy.ndarray:
            The transformed array which shape is specified by ``n`` and type
            will convert to complex if the input is other. The length of the
            transformed axis is ``n//2+1``.

    .. seealso:: :func:`scipy.fft.ihfft`
    Nz)ihfft plan is currently not yet supported)r|   _ihfftr~   s         r   r   r   "  s-    2 !"MNNN!Qd###r   c                    |t          d          t          |                                 ||t          |                    S )a"  Compute the FFT of a two-dimensional signal that has Hermitian symmetry.

    Args:
        x (cupy.ndarray): Array to be transformed.
        s (None or tuple of ints): Shape of the real output.
        axes (tuple of ints): Axes over which to compute the FFT.
        norm (``"backward"``, ``"ortho"``, or ``"forward"``): Optional keyword
            to specify the normalization mode. Default is ``None``, which is
            an alias of ``"backward"``.
        overwrite_x (bool): If True, the contents of ``x`` can be destroyed.
            (This argument is currently not supported)
        plan (None): This argument is currently not supported.

    Returns:
        cupy.ndarray:
            The real result of the 2-D Hermitian complex real FFT.

    .. seealso:: :func:`scipy.fft.hfft2`
    Nz)hfft2 plan is currently not yet supported)r|   rv   conjr   r^   s         r   hfft2r   @  =    , !"MNNN!&&((At_T%:%:;;;r   c                    |t          d          t          | ||t          |                                                    S )a7  Compute the Inverse FFT of a two-dimensional signal that has Hermitian
    symmetry.

    Args:
        x (cupy.ndarray): Array to be transformed.
        s (None or tuple of ints): Shape of the real output.
        axes (tuple of ints): Axes over which to compute the FFT.
        norm (``"backward"``, ``"ortho"``, or ``"forward"``): Optional keyword
            to specify the normalization mode. Default is ``None``, which is
            an alias of ``"backward"``.
        overwrite_x (bool): If True, the contents of ``x`` can be destroyed.
            (This argument is currently not supported)
        plan (None): This argument is currently not supported.

    Returns:
        cupy.ndarray:
            The real result of the 2-D Hermitian inverse complex real FFT.

    .. seealso:: :func:`scipy.fft.ihfft2`
    Nz*ihfft2 plan is currently not yet supported)r|   rs   r   r   r^   s         r   ihfft2r   [  A    . !"NOOOAt_T223388:::r   c                    |t          d          t          |                                 ||t          |                    S )a   Compute the FFT of a N-dimensional signal that has Hermitian symmetry.

    Args:
        x (cupy.ndarray): Array to be transformed.
        s (None or tuple of ints): Shape of the real output.
        axes (tuple of ints): Axes over which to compute the FFT.
        norm (``"backward"``, ``"ortho"``, or ``"forward"``): Optional keyword
            to specify the normalization mode. Default is ``None``, which is
            an alias of ``"backward"``.
        overwrite_x (bool): If True, the contents of ``x`` can be destroyed.
            (This argument is currently not supported)
        plan (None): This argument is currently not supported.

    Returns:
        cupy.ndarray:
            The real result of the N-D Hermitian complex real FFT.

    .. seealso:: :func:`scipy.fft.hfftn`
    Nz)hfftn plan is currently not yet supported)r|   ru   r   r   r^   s         r   hfftnr   w  r   r   c                    |t          d          t          | ||t          |                                                    S )a5  Compute the Inverse FFT of a N-dimensional signal that has Hermitian
    symmetry.

    Args:
        x (cupy.ndarray): Array to be transformed.
        s (None or tuple of ints): Shape of the real output.
        axes (tuple of ints): Axes over which to compute the FFT.
        norm (``"backward"``, ``"ortho"``, or ``"forward"``): Optional keyword
            to specify the normalization mode. Default is ``None``, which is
            an alias of ``"backward"``.
        overwrite_x (bool): If True, the contents of ``x`` can be destroyed.
            (This argument is currently not supported)
        plan (None): This argument is currently not supported.

    Returns:
        cupy.ndarray:
            The real result of the N-D Hermitian inverse complex real FFT.

    .. seealso:: :func:`scipy.fft.ihfftn`
    Nz*ihfftn plan is currently not yet supported)r|   rr   r   r   r^   s         r   ihfftnr     r   r   )NrF   NF)NrZ   NF)NNNF)1numbersr   r6   numpyr   r   cupy.fft._fftr   r   r   r}   r   r   r   r5   
_scipy_160scipy	scipy.fftrT   
_scipy_fft	numpy.libr	   Version__version__ImportErrorr   __ua_domain__r   dict__annotations__r1   r<   rB   rE   rY   ra   rd   r]   rc   rm   rp   rs   rv   rr   ru   r   r   r   r   r   r   r   <module>r      s               = = = = = = = = = = = = = = 

LLL"""""" 211111*++www/?/??J*++www/?/??J               JJJ  "d     $       Z^4$ 4 4 4 4 4B Z_44 4 4 4 4 4B Z_: : : : : :> Z;; ; ; ; ;@ Z_"T " " " " "J Z"d " " " " "J Z_#44 #4 #4 #4 #4 #4L Z4D 4 4 4 4 4B Z;; ; ; ; ;D Z!<!< !< !< !<  !<H Z$4d $4 $4 $4 $4 $4N Z&4t &4 &4 &4 &4  &4R Z_#4 # # # # #> Z$D $ $ $ $ $: Z<< < < < <4 Z;; ; ; ;  ;6 Z<< < < < <4 Z;; ; ; ;  ; ; ;s   
A4 4BB