§
    fŠtj(  ã                   ól   — 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dS )é    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          | ¦  «        …<   |                     d|¦  «        j        dd…ddd…f                              ¦   «         }|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       úS/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/scipy/signal/_upfirdn.pyÚ_pad_hr    /   s€   € õ �1‰vŒv�#˜a™&œ&˜ 2™Ñ&€HÝŒX�h ¤Ñ(Ô(€FØ€Fˆ7�C�‰FŒFˆ7�OØ�^Š^˜B Ñ#Ô#Ô% a a a¨¨¨2¨ gÔ.×4Ò4Ñ6Ô6€FØ€Mó    c                 óL   — |                       ¦   «         } 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dS )	Ú_UpFIRDnzHelper for resampling.c                 ó2  — t          j        |¦  «        }|j        dk    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          |¦  «        | _        d S )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�q‰MŒMˆØŒ6�QŠ;ˆ;˜!œ& Aš+˜+ÝÐAÑBÔBÐBÝœN¨1¬7°G½R¼ZÑHÔHˆÔÝŒJ�q˜$Ô+Ñ,Ô,ˆÝ�r‘7”7ˆŒÝ˜‘Y”YˆŒ
ØŒ8�aŠ<ˆ<˜4œ:¨š>˜>ÝÐ<Ñ=Ô=Ð=å# A t¤xÑ0Ô0ˆÔÝÔ1°$Ô2DÑEÔEˆÔÝ˜q™6œ6ˆÔÐÐr!   r   r	   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´7¸4´=Ø!%¤¨4¬:ñ7ô 7ˆ
õ ”z !¤'µ´Ð:Ñ:Ô:ˆØ'ˆ�TÑÝŒh�|¨4Ô+<ÀCÐHÑHÔHˆØ�a”f‰}ˆÝ˜4Ñ Ô ˆÝ�rŒz˜!˜TÔ.Ñ/Ô/ØÔ! 3ØŒx˜œ T¨4°ñ	7ô 	7ð 	7ð ˆ
r!   N)r   r	   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r:   rF   © r!   r   r(   r(   I   s=   € € € € € Ø Ð ð"ð "ð "ðð ð ð ð ð r!   r(   r   r	   c                 óÎ   — t          | |¦  «        }t          j        |¦  «        }t          | |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   s\   € õT 
˜˜AÑ	Ô	€Bå
Œ
�1‰Œ€AÝ
�1�a”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Ð 1Ð 1Ð 1Ð 1Ð 1Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :à�mÐ
$€ðð ð €ðð ð ð(ð ð ð ð  ð  ð  ð  ñ  ô  ð  ðFo=ð o=ð o=ð o=ð o=ð o=r!   