Ë
    çÿæi(  ã                   ód   — d dl Zd dlmZ ddlmZmZmZ ddgZg d¢Z	d„ Z
d	„ Z G d
„ d«      Zdd„Zy)é    N)Úarray_namespaceé   )Ú_output_lenÚ_applyÚ	mode_enumÚupfirdnr   )	ÚconstantÚwrapÚedgeÚsmoothÚ	symmetricÚreflectÚantisymmetricÚantireflectÚlinec                 ó   — t        | «      t        | «       |z  z   }t        j                  || j                  «      }| |dt        | «       |j	                  d|«      j
                  dd…ddd…f   j                  «       }|S )a´  Store coefficients in a transposed, flipped arrangement.

    For example, suppose upRate is 3, and the
    input number of coefficients is 10, represented as h[0], ..., h[9].

    Then the internal buffer will look like this::

       h[9], h[6], h[3], h[0],   // flipped phase 0 coefs
       0,    h[7], h[4], h[1],   // flipped phase 1 coefs (zero-padded)
       0,    h[8], h[5], h[2],   // flipped phase 2 coefs (zero-padded)

    Néÿÿÿÿ)ÚlenÚnpÚzerosÚdtypeÚreshapeÚTÚravel)ÚhÚupÚh_padlenÚh_fulls       új/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/scipy/signal/_upfirdn.pyÚ_pad_hr    /   sp   € ô �1‹vœ#˜a›&˜ 2™Ñ&€HÜ�X‰X�h §¡Ó(€FØ€Fˆ7ŒC�‹F€OØ�^‰^˜B Ó#×%Ñ%¢a©¨2¨ gÑ.×4Ñ4Ó6€FØ€Mó    c                 ó<   — | j                  «       } t        | «      }|S )N)Úlowerr   )ÚmodeÚenums     r   Ú_check_moder&   C   s   € Ø�:‰:‹<€DÜ�T‹?€DØ€Kr!   c                   ó   — e Zd ZdZd„ Zdd„Zy)Ú_UpFIRDnzHelper for resampling.c                 óX  — t        j                  |«      }|j                  dk7  s|j                  dk(  rt	        d«      ‚t        j
                  |j                  |t         j                  «      | _        t        j                  || j                  «      }t        |«      | _
        t        |«      | _        | j                  dk  s| j                  dk  rt	        d«      ‚t        || j                  «      | _        t        j                  | j                  «      | _        t        |«      | _        y )Nr   r   z"h must be 1-D with non-zero lengthzBoth up and down must be >= 1)r   ÚasarrayÚndimÚsizeÚ
ValueErrorÚresult_typer   Úfloat32Ú_output_typeÚintÚ_upÚ_downr    Ú_h_trans_flipÚascontiguousarrayr   Ú_h_len_orig)Úselfr   Úx_dtyper   Údowns        r   Ú__init__z_UpFIRDn.__init__L   sÒ   € Ü�J‰J�q‹MˆØ�6‰6�QŠ;˜!Ÿ&™& Aš+ÜÐAÓBÐBÜŸN™N¨1¯7©7°G¼R¿Z¹ZÓHˆÔÜ�J‰J�q˜$×+Ñ+Ó,ˆÜ�r“7ˆŒÜ˜“YˆŒ
Ø�8‰8�aŠ<˜4Ÿ:™:¨š>ÜÐ<Ó=Ð=ä# A t§x¡xÓ0ˆÔÜ×1Ñ1°$×2DÑ2DÓEˆÔÜ˜q›6ˆÕr!   c           
      óô  — t        | j                  |j                  |   | j                  | j                  «      }t        j                  |j                  t
        j                  ¬«      }|||<   t        j                  || j                  d¬«      }||j                  z  }t        |«      }t        t        j                  || j                  «      | j                  || j                  | j                  |||«       |S )z@Apply the prepared filter to the specified axis of N-D signal x.)r   ÚC)r   Úorder)r   r6   Úshaper2   r3   r   r*   Úint64r   r0   r+   r&   r   r4   )r7   ÚxÚaxisr$   ÚcvalÚ
output_lenÚoutput_shapeÚouts           r   Úapply_filterz_UpFIRDn.apply_filter[   s¾   € ä  ×!1Ñ!1°1·7±7¸4±=Ø!%§¡¨4¯:©:ó7ˆ
ô —z‘z !§'¡'´·±Ô:ˆØ'ˆ�TÑÜ�h‰h�|¨4×+<Ñ+<ÀCÔHˆØ�a—f‘f‰}ˆÜ˜4Ó ˆÜŒr�z‰z˜!˜T×.Ñ.Ó/Ø×!Ñ! 3Ø�x‰x˜Ÿ™ T¨4°ô	7ð ˆ
r!   N)r   r	   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r:   rF   © r!   r   r(   r(   I   s   „ Ù ò"ôr!   r(   c                 óº   — t        | |«      }t        j                  |«      }t        | |j                  ||«      }|j                  |j                  ||||«      «      S )a§  Upsample, FIR filter, and downsample.

    Parameters
    ----------
    h : array_like
        1-D FIR (finite-impulse response) filter coefficients.
    x : array_like
        Input signal array.
    up : int, optional
        Upsampling rate. Default is 1.
    down : int, optional
        Downsampling rate. Default is 1.
    axis : int, optional
        The axis of the input data array along which to apply the
        linear filter. The filter is applied to each subarray along
        this axis. Default is -1.
    mode : str, optional
        The signal extension mode to use. The set
        ``{"constant", "symmetric", "reflect", "edge", "wrap"}`` correspond to
        modes provided by `numpy.pad`. ``"smooth"`` implements a smooth
        extension by extending based on the slope of the last 2 points at each
        end of the array. ``"antireflect"`` and ``"antisymmetric"`` are
        anti-symmetric versions of ``"reflect"`` and ``"symmetric"``. The mode
        `"line"` extends the signal based on a linear trend defined by the
        first and last points along the ``axis``.

        .. versionadded:: 1.4.0
    cval : float, optional
        The constant value to use when ``mode == "constant"``.

        .. versionadded:: 1.4.0

    Returns
    -------
    y : ndarray
        The output signal array. Dimensions will be the same as `x` except
        for along `axis`, which will change size according to the `h`,
        `up`,  and `down` parameters.

    Notes
    -----
    The algorithm is an implementation of the block diagram shown on page 129
    of the Vaidyanathan text [1]_ (Figure 4.3-8d).

    The direct approach of upsampling by factor of P with zero insertion,
    FIR filtering of length ``N``, and downsampling by factor of Q is
    O(N*Q) per output sample. The polyphase implementation used here is
    O(N/P).

    .. versionadded:: 0.18

    References
    ----------
    .. [1] P. P. Vaidyanathan, Multirate Systems and Filter Banks,
           Prentice Hall, 1993.

    Examples
    --------
    Simple operations:

    >>> import numpy as np
    >>> from scipy.signal import upfirdn
    >>> upfirdn([1, 1, 1], [1, 1, 1])   # FIR filter
    array([ 1.,  2.,  3.,  2.,  1.])
    >>> upfirdn([1], [1, 2, 3], 3)  # upsampling with zeros insertion
    array([ 1.,  0.,  0.,  2.,  0.,  0.,  3.])
    >>> upfirdn([1, 1, 1], [1, 2, 3], 3)  # upsampling with sample-and-hold
    array([ 1.,  1.,  1.,  2.,  2.,  2.,  3.,  3.,  3.])
    >>> upfirdn([.5, 1, .5], [1, 1, 1], 2)  # linear interpolation
    array([ 0.5,  1. ,  1. ,  1. ,  1. ,  1. ,  0.5])
    >>> upfirdn([1], np.arange(10), 1, 3)  # decimation by 3
    array([ 0.,  3.,  6.,  9.])
    >>> upfirdn([.5, 1, .5], np.arange(10), 2, 3)  # linear interp, rate 2/3
    array([ 0. ,  1. ,  2.5,  4. ,  5.5,  7. ,  8.5])

    Apply a single filter to multiple signals:

    >>> x = np.reshape(np.arange(8), (4, 2))
    >>> x
    array([[0, 1],
           [2, 3],
           [4, 5],
           [6, 7]])

    Apply along the last dimension of ``x``:

    >>> h = [1, 1]
    >>> upfirdn(h, x, 2)
    array([[ 0.,  0.,  1.,  1.],
           [ 2.,  2.,  3.,  3.],
           [ 4.,  4.,  5.,  5.],
           [ 6.,  6.,  7.,  7.]])

    Apply along the 0th dimension of ``x``:

    >>> upfirdn(h, x, 2, axis=0)
    array([[ 0.,  1.],
           [ 0.,  1.],
           [ 2.,  3.],
           [ 2.,  3.],
           [ 4.,  5.],
           [ 4.,  5.],
           [ 6.,  7.],
           [ 6.,  7.]])
    )r   r   r*   r(   r   rF   )	r   r@   r   r9   rA   r$   rB   ÚxpÚufds	            r   r   r   l   sR   € ôT 
˜˜AÓ	€Bä
�
‰
�1‹€AÜ
�1�a—g‘g˜r 4Ó
(€Cà�:‰:�c×&Ñ& q¨$°°dÓ;Ó<Ð<r!   )r   r   r   r	   r   )Únumpyr   Úscipy._lib._array_apir   Ú_upfirdn_applyr   r   r   Ú__all__Ú_upfirdn_modesr    r&   r(   r   rK   r!   r   Ú<module>rT      s@   ðóD å 1ß :Ñ :à�mÐ
$€ò€òò(÷ ñ  ôFo=r!   