Ë
    âQ(h,  ã                   ód   — d dl Zd dlmZ ddlmZ ddlmZ g d¢Zd„ Zd„ Z	dd	„Z
dd
„Zdd„Zdd„Zy)é    N)Únormalize_axis_indexé   )Ú_ni_support)Ú	_nd_image)Úfourier_gaussianÚfourier_uniformÚfourier_ellipsoidÚfourier_shiftc                 ó–  — | €£|j                   j                  t        j                  t        j                  t        j
                  fv r-t        j                  |j                  |j                   ¬«      } | S t        j                  |j                  t        j                  ¬«      } | S t        | «      t        u rn| t        j                  t        j                  t        j
                  t        j                  fvrt        d«      ‚t        j                  |j                  | ¬«      } | S | j                  |j                  k7  rt        d«      ‚| S ©N©Údtypezoutput type not supportedzoutput shape not correct)
r   ÚtypeÚnpÚ	complex64Ú
complex128Úfloat32ÚzerosÚshapeÚfloat64ÚRuntimeError©ÚoutputÚinputs     úT/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/scipy/ndimage/_fourier.pyÚ_get_output_fourierr   (   sê   € Ø€~Ø�;‰;×Ñ¤§¡¬b¯m©m¼R¿Z¹ZÐHÑHÜ—X‘X˜eŸk™k°·±Ô=ˆFð €Mô —X‘X˜eŸk™k´·±Ô<ˆFð €Mô 
ˆf‹œÑ	Øœ"Ÿ,™,¬¯©ÜŸ*™*¤b§j¡jð2ñ 2äÐ:Ó;Ð;Ü—‘˜%Ÿ+™+¨VÔ4ˆð €Mð 
�‰˜Ÿ™Ò	$ÜÐ5Ó6Ð6Ø€Mó    c                 ó<  — | €”|j                   j                  t        j                  t        j                  fv r-t        j
                  |j                  |j                   ¬«      } | S t        j
                  |j                  t        j                  ¬«      } | S t        | «      t        u rP| t        j                  t        j                  fvrt        d«      ‚t        j
                  |j                  | ¬«      } | S | j                  |j                  k7  rt        d«      ‚| S r   )r   r   r   r   r   r   r   r   r   s     r   Ú_get_output_fourier_complexr   8   sÓ   € Ø€~Ø�;‰;×Ñ¤§¡¬b¯m©mÐ<Ñ<Ü—X‘X˜eŸk™k°·±Ô=ˆFð €Mô —X‘X˜eŸk™k´·±Ô?ˆFð €Mô 
ˆf‹œÑ	Øœ"Ÿ,™,¬¯©Ð6Ñ6ÜÐ:Ó;Ð;Ü—‘˜%Ÿ+™+¨VÔ4ˆð €Mð 
�‰˜Ÿ™Ò	$ÜÐ5Ó6Ð6Ø€Mr   c                 ó~  — t        j                  | «      } t        || «      }t        || j                  «      }t        j                  || j                  «      }t        j                  |t         j                  ¬«      }|j                  j                  s|j                  «       }t        j                  | ||||d«       |S )a  
    Multidimensional Gaussian fourier filter.

    The array is multiplied with the fourier transform of a Gaussian
    kernel.

    Parameters
    ----------
    input : array_like
        The input array.
    sigma : float or sequence
        The sigma of the Gaussian kernel. If a float, `sigma` is the same for
        all axes. If a sequence, `sigma` has to contain one value for each
        axis.
    n : int, optional
        If `n` is negative (default), then the input is assumed to be the
        result of a complex fft.
        If `n` is larger than or equal to zero, the input is assumed to be the
        result of a real fft, and `n` gives the length of the array before
        transformation along the real transform direction.
    axis : int, optional
        The axis of the real transform.
    output : ndarray, optional
        If given, the result of filtering the input is placed in this array.

    Returns
    -------
    fourier_gaussian : ndarray
        The filtered input.

    Examples
    --------
    >>> from scipy import ndimage, datasets
    >>> import numpy.fft
    >>> import matplotlib.pyplot as plt
    >>> fig, (ax1, ax2) = plt.subplots(1, 2)
    >>> plt.gray()  # show the filtered result in grayscale
    >>> ascent = datasets.ascent()
    >>> input_ = numpy.fft.fft2(ascent)
    >>> result = ndimage.fourier_gaussian(input_, sigma=4)
    >>> result = numpy.fft.ifft2(result)
    >>> ax1.imshow(ascent)
    >>> ax2.imshow(result.real)  # the imaginary part is an artifact
    >>> plt.show()
    r   r   ©r   Úasarrayr   r   Úndimr   Ú_normalize_sequencer   ÚflagsÚ
contiguousÚcopyr   Úfourier_filter)r   ÚsigmaÚnÚaxisr   Úsigmass         r   r   r   G   sŽ   € ô\ �J‰J�uÓ€EÜ  ¨Ó/€FÜ  e§j¡jÓ1€DÜ×,Ñ,¨U°E·J±JÓ?€FÜ�Z‰Z˜¤b§j¡jÔ1€FØ�<‰<×"Ò"Ø—‘“ˆä×Ñ˜U F¨A¨t°V¸QÔ?Ø€Mr   c                 ó~  — t        j                  | «      } t        || «      }t        || j                  «      }t        j                  || j                  «      }t        j                  |t         j                  ¬«      }|j                  j                  s|j                  «       }t        j                  | ||||d«       |S )a  
    Multidimensional uniform fourier filter.

    The array is multiplied with the Fourier transform of a box of given
    size.

    Parameters
    ----------
    input : array_like
        The input array.
    size : float or sequence
        The size of the box used for filtering.
        If a float, `size` is the same for all axes. If a sequence, `size` has
        to contain one value for each axis.
    n : int, optional
        If `n` is negative (default), then the input is assumed to be the
        result of a complex fft.
        If `n` is larger than or equal to zero, the input is assumed to be the
        result of a real fft, and `n` gives the length of the array before
        transformation along the real transform direction.
    axis : int, optional
        The axis of the real transform.
    output : ndarray, optional
        If given, the result of filtering the input is placed in this array.

    Returns
    -------
    fourier_uniform : ndarray
        The filtered input.

    Examples
    --------
    >>> from scipy import ndimage, datasets
    >>> import numpy.fft
    >>> import matplotlib.pyplot as plt
    >>> fig, (ax1, ax2) = plt.subplots(1, 2)
    >>> plt.gray()  # show the filtered result in grayscale
    >>> ascent = datasets.ascent()
    >>> input_ = numpy.fft.fft2(ascent)
    >>> result = ndimage.fourier_uniform(input_, size=20)
    >>> result = numpy.fft.ifft2(result)
    >>> ax1.imshow(ascent)
    >>> ax2.imshow(result.real)  # the imaginary part is an artifact
    >>> plt.show()
    r   r   r!   ©r   Úsizer*   r+   r   Úsizess         r   r   r   �   sŽ   € ô\ �J‰J�uÓ€EÜ  ¨Ó/€FÜ  e§j¡jÓ1€DÜ×+Ñ+¨D°%·*±*Ó=€EÜ�J‰J�u¤B§J¡JÔ/€EØ�;‰;×!Ò!Ø—
‘
“ˆÜ×Ñ˜U E¨1¨d°F¸AÔ>Ø€Mr   c                 óÔ  — t        j                  | «      } | j                  dkD  rt        d«      ‚t	        || «      }|j
                  dk(  r|S t        || j                  «      }t        j                  || j                  «      }t        j                  |t         j                  ¬«      }|j                  j                  s|j                  «       }t        j                  | ||||d«       |S )ah  
    Multidimensional ellipsoid Fourier filter.

    The array is multiplied with the fourier transform of an ellipsoid of
    given sizes.

    Parameters
    ----------
    input : array_like
        The input array.
    size : float or sequence
        The size of the box used for filtering.
        If a float, `size` is the same for all axes. If a sequence, `size` has
        to contain one value for each axis.
    n : int, optional
        If `n` is negative (default), then the input is assumed to be the
        result of a complex fft.
        If `n` is larger than or equal to zero, the input is assumed to be the
        result of a real fft, and `n` gives the length of the array before
        transformation along the real transform direction.
    axis : int, optional
        The axis of the real transform.
    output : ndarray, optional
        If given, the result of filtering the input is placed in this array.

    Returns
    -------
    fourier_ellipsoid : ndarray
        The filtered input.

    Notes
    -----
    This function is implemented for arrays of rank 1, 2, or 3.

    Examples
    --------
    >>> from scipy import ndimage, datasets
    >>> import numpy.fft
    >>> import matplotlib.pyplot as plt
    >>> fig, (ax1, ax2) = plt.subplots(1, 2)
    >>> plt.gray()  # show the filtered result in grayscale
    >>> ascent = datasets.ascent()
    >>> input_ = numpy.fft.fft2(ascent)
    >>> result = ndimage.fourier_ellipsoid(input_, size=20)
    >>> result = numpy.fft.ifft2(result)
    >>> ax1.imshow(ascent)
    >>> ax2.imshow(result.real)  # the imaginary part is an artifact
    >>> plt.show()
    é   z'Only 1d, 2d and 3d inputs are supportedr   r   é   )r   r"   r#   ÚNotImplementedErrorr   r/   r   r   r$   r   r%   r&   r'   r   r(   r.   s         r   r	   r	   º   s¸   € ôd �J‰J�uÓ€EØ‡z�z�A‚~Ü!Ð"KÓLÐLÜ  ¨Ó/€FØ‡{�{�aÒð ˆÜ  e§j¡jÓ1€DÜ×+Ñ+¨D°%·*±*Ó=€EÜ�J‰J�u¤B§J¡JÔ/€EØ�;‰;×!Ò!Ø—
‘
“ˆÜ×Ñ˜U E¨1¨d°F¸AÔ>Ø€Mr   c                 ó|  — t        j                  | «      } t        || «      }t        || j                  «      }t        j                  || j                  «      }t        j                  |t         j                  ¬«      }|j                  j                  s|j                  «       }t        j                  | ||||«       |S )aü  
    Multidimensional Fourier shift filter.

    The array is multiplied with the Fourier transform of a shift operation.

    Parameters
    ----------
    input : array_like
        The input array.
    shift : float or sequence
        The size of the box used for filtering.
        If a float, `shift` is the same for all axes. If a sequence, `shift`
        has to contain one value for each axis.
    n : int, optional
        If `n` is negative (default), then the input is assumed to be the
        result of a complex fft.
        If `n` is larger than or equal to zero, the input is assumed to be the
        result of a real fft, and `n` gives the length of the array before
        transformation along the real transform direction.
    axis : int, optional
        The axis of the real transform.
    output : ndarray, optional
        If given, the result of shifting the input is placed in this array.

    Returns
    -------
    fourier_shift : ndarray
        The shifted input.

    Examples
    --------
    >>> from scipy import ndimage, datasets
    >>> import matplotlib.pyplot as plt
    >>> import numpy.fft
    >>> fig, (ax1, ax2) = plt.subplots(1, 2)
    >>> plt.gray()  # show the filtered result in grayscale
    >>> ascent = datasets.ascent()
    >>> input_ = numpy.fft.fft2(ascent)
    >>> result = ndimage.fourier_shift(input_, shift=200)
    >>> result = numpy.fft.ifft2(result)
    >>> ax1.imshow(ascent)
    >>> ax2.imshow(result.real)  # the imaginary part is an artifact
    >>> plt.show()
    r   )r   r"   r   r   r#   r   r$   r   r%   r&   r'   r   r
   )r   Úshiftr*   r+   r   Úshiftss         r   r
   r
   ý   sŒ   € ôZ �J‰J�uÓ€EÜ(¨°Ó7€FÜ  e§j¡jÓ1€DÜ×,Ñ,¨U°E·J±JÓ?€FÜ�Z‰Z˜¤b§j¡jÔ1€FØ�<‰<×"Ò"Ø—‘“ˆÜ×Ñ˜E 6¨1¨d°FÔ;Ø€Mr   )éÿÿÿÿr8   N)Únumpyr   Úscipy._lib._utilr   Ú r   r   Ú__all__r   r   r   r   r	   r
   © r   r   ú<module>r>      s<   ðó> Ý 1Ý Ý ò€òò ó7ót6ór@ôF5r   