Ë
    âQ(hf   ã                   óH   — d Z ddlZd
d„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd	„Z	y)z-
Functions for acting on a axis of an array.
é    Nc                 ót   — t        d«      g| j                  z  }t        |||«      ||<   | t        |«         }|S )a0  Take a slice along axis 'axis' from 'a'.

    Parameters
    ----------
    a : numpy.ndarray
        The array to be sliced.
    start, stop, step : int or None
        The slice parameters.
    axis : int, optional
        The axis of `a` to be sliced.

    Examples
    --------
    >>> import numpy as np
    >>> from scipy.signal._arraytools import axis_slice
    >>> a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
    >>> axis_slice(a, start=0, stop=1, axis=1)
    array([[1],
           [4],
           [7]])
    >>> axis_slice(a, start=1, axis=0)
    array([[4, 5, 6],
           [7, 8, 9]])

    Notes
    -----
    The keyword arguments start, stop and step are used by calling
    slice(start, stop, step). This implies axis_slice() does not
    handle its arguments the exactly the same as indexing. To select
    a single index k, for example, use
        axis_slice(a, start=k, stop=k+1)
    In this case, the length of the axis 'axis' in the result will
    be 1; the trivial dimension is not removed. (Use numpy.squeeze()
    to remove trivial axes.)
    N)ÚsliceÚndimÚtuple)ÚaÚstartÚstopÚstepÚaxisÚa_sliceÚbs          úV/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/scipy/signal/_arraytools.pyÚ
axis_slicer      s>   € ôH �T‹{ˆm˜aŸf™fÑ$€GÜ˜%  tÓ,€GˆD�MØ	Œ%�‹.Ñ€AØ€Hó    c                 ó   — t        | d|¬«      S )zeReverse the 1-D slices of `a` along axis `axis`.

    Returns axis_slice(a, step=-1, axis=axis).
    éÿÿÿÿ)r
   r   )r   )r   r   s     r   Úaxis_reverser   1   s   € ô
 �a˜b tÔ,Ð,r   c                 óL  — |dk  r| S || j                   |   dz
  kD  r t        d|| j                   |   dz
  fz  «      ‚t        | dd|¬«      }t        | |dd|¬«      }t        | d|¬«      }t        | d|d	z    d|¬«      }t        j                  d	|z  |z
  | d	|z  |z
  f|¬
«      }|S )aL  
    Odd extension at the boundaries of an array

    Generate a new ndarray by making an odd extension of `x` along an axis.

    Parameters
    ----------
    x : ndarray
        The array to be extended.
    n : int
        The number of elements by which to extend `x` at each end of the axis.
    axis : int, optional
        The axis along which to extend `x`. Default is -1.

    Examples
    --------
    >>> import numpy as np
    >>> from scipy.signal._arraytools import odd_ext
    >>> a = np.array([[1, 2, 3, 4, 5], [0, 1, 4, 9, 16]])
    >>> odd_ext(a, 2)
    array([[-1,  0,  1,  2,  3,  4,  5,  6,  7],
           [-4, -1,  0,  1,  4,  9, 16, 23, 28]])

    Odd extension is a "180 degree rotation" at the endpoints of the original
    array:

    >>> t = np.linspace(0, 1.5, 100)
    >>> a = 0.9 * np.sin(2 * np.pi * t**2)
    >>> b = odd_ext(a, 40)
    >>> import matplotlib.pyplot as plt
    >>> plt.plot(np.arange(-40, 140), b, 'b', lw=1, label='odd extension')
    >>> plt.plot(np.arange(100), a, 'r', lw=2, label='original')
    >>> plt.legend(loc='best')
    >>> plt.show()
    é   úXThe extension length n (%d) is too big. It must not exceed x.shape[axis]-1, which is %d.r   ©r   r	   r   r   ©r   r	   r
   r   ©r   r   éþÿÿÿé   ©r   ©ÚshapeÚ
ValueErrorr   ÚnpÚconcatenate)ÚxÚnr   Úleft_endÚleft_extÚ	right_endÚ	right_extÚexts           r   Úodd_extr)   9   sÖ   € ðH 	ˆ1‚uØˆØˆ1�7‰7�4‰=˜1ÑÒÜð Là˜qŸw™w t™}¨qÑ0Ð1ñ2ó 3ð 	3ô ˜! 1¨1°4Ô8€HÜ˜! 1¨1°2¸DÔA€HÜ˜1 B¨TÔ2€IÜ˜1 B¨q°1©u¨X¸BÀTÔJ€IÜ
�.‰.˜!˜h™,¨Ñ1ØØ˜i™-¨)Ñ3ð5ð #ô$€Cð €Jr   c                 óú   — |dk  r| S || j                   |   dz
  kD  r t        d|| j                   |   dz
  fz  «      ‚t        | |dd|¬«      }t        | d|dz    d|¬«      }t        j                  || |f|¬«      }|S )	aI  
    Even extension at the boundaries of an array

    Generate a new ndarray by making an even extension of `x` along an axis.

    Parameters
    ----------
    x : ndarray
        The array to be extended.
    n : int
        The number of elements by which to extend `x` at each end of the axis.
    axis : int, optional
        The axis along which to extend `x`. Default is -1.

    Examples
    --------
    >>> import numpy as np
    >>> from scipy.signal._arraytools import even_ext
    >>> a = np.array([[1, 2, 3, 4, 5], [0, 1, 4, 9, 16]])
    >>> even_ext(a, 2)
    array([[ 3,  2,  1,  2,  3,  4,  5,  4,  3],
           [ 4,  1,  0,  1,  4,  9, 16,  9,  4]])

    Even extension is a "mirror image" at the boundaries of the original array:

    >>> t = np.linspace(0, 1.5, 100)
    >>> a = 0.9 * np.sin(2 * np.pi * t**2)
    >>> b = even_ext(a, 40)
    >>> import matplotlib.pyplot as plt
    >>> plt.plot(np.arange(-40, 140), b, 'b', lw=1, label='even extension')
    >>> plt.plot(np.arange(100), a, 'r', lw=2, label='original')
    >>> plt.legend(loc='best')
    >>> plt.show()
    r   r   r   r   r   r   r   r   r   )r"   r#   r   r%   r'   r(   s         r   Úeven_extr+   n   s¦   € ðF 	ˆ1‚uØˆØˆ1�7‰7�4‰=˜1ÑÒÜð Là˜qŸw™w t™}¨qÑ0Ð1ñ2ó 3ð 	3ô ˜! 1¨1°2¸DÔA€HÜ˜1 B¨q°1©u¨X¸BÀTÔJ€IÜ
�.‰.˜(ØØ#ð%ð #ô$€Cð €Jr   c                 ó  — |dk  r| S t        | dd|¬«      }dg| j                  z  }|||<   t        j                  || j                  ¬«      }||z  }t        | d|¬«      }||z  }t        j
                  || |f|¬«      }	|	S )a³  
    Constant extension at the boundaries of an array

    Generate a new ndarray that is a constant extension of `x` along an axis.

    The extension repeats the values at the first and last element of
    the axis.

    Parameters
    ----------
    x : ndarray
        The array to be extended.
    n : int
        The number of elements by which to extend `x` at each end of the axis.
    axis : int, optional
        The axis along which to extend `x`. Default is -1.

    Examples
    --------
    >>> import numpy as np
    >>> from scipy.signal._arraytools import const_ext
    >>> a = np.array([[1, 2, 3, 4, 5], [0, 1, 4, 9, 16]])
    >>> const_ext(a, 2)
    array([[ 1,  1,  1,  2,  3,  4,  5,  5,  5],
           [ 0,  0,  0,  1,  4,  9, 16, 16, 16]])

    Constant extension continues with the same values as the endpoints of the
    array:

    >>> t = np.linspace(0, 1.5, 100)
    >>> a = 0.9 * np.sin(2 * np.pi * t**2)
    >>> b = const_ext(a, 40)
    >>> import matplotlib.pyplot as plt
    >>> plt.plot(np.arange(-40, 140), b, 'b', lw=1, label='constant extension')
    >>> plt.plot(np.arange(100), a, 'r', lw=2, label='original')
    >>> plt.legend(loc='best')
    >>> plt.show()
    r   r   r   ©Údtyper   r   r   )r   r   r    Úonesr.   r!   )
r"   r#   r   r$   Ú
ones_shaper/   r%   r&   r'   r(   s
             r   Ú	const_extr1       s–   € ðN 	ˆ1‚uØˆÜ˜! 1¨1°4Ô8€HØ��q—v‘v‘€JØ€JˆtÑÜ�7‰7�: Q§W¡WÔ-€DØ�h‰€HÜ˜1 B¨TÔ2€IØ�yÑ €IÜ
�.‰.˜(ØØ#ð%ð #ô$€Cð €Jr   c                 ó¾   — |dk  r| S t        | j                  «      }|||<   t        j                  || j                  ¬«      }t        j
                  || |f|¬«      }|S )a²  
    Zero padding at the boundaries of an array

    Generate a new ndarray that is a zero-padded extension of `x` along
    an axis.

    Parameters
    ----------
    x : ndarray
        The array to be extended.
    n : int
        The number of elements by which to extend `x` at each end of the
        axis.
    axis : int, optional
        The axis along which to extend `x`. Default is -1.

    Examples
    --------
    >>> import numpy as np
    >>> from scipy.signal._arraytools import zero_ext
    >>> a = np.array([[1, 2, 3, 4, 5], [0, 1, 4, 9, 16]])
    >>> zero_ext(a, 2)
    array([[ 0,  0,  1,  2,  3,  4,  5,  0,  0],
           [ 0,  0,  0,  1,  4,  9, 16,  0,  0]])
    r   r-   r   )Úlistr   r    Úzerosr.   r!   )r"   r#   r   Úzeros_shaper4   r(   s         r   Úzero_extr6   ×   sW   € ð4 	ˆ1‚uØˆÜ�q—w‘w“-€KØ€K�ÑÜ�H‰H�[¨¯©Ô0€EÜ
�.‰.˜%  EÐ*°Ô
6€CØ€Jr   c                 ó~   — | €|st        d«      ‚| S t        j                  | «      st        d«      ‚t        | «      } | S )zú
    Check if the given sampling frequency is a scalar and raises an exception
    otherwise. If allow_none is False, also raises an exception for none
    sampling rates. Returns the sampling frequency as float or none if the
    input is none.
    z#Sampling frequency can not be none.z.Sampling frequency fs must be a single scalar.)r   r    ÚisscalarÚfloat)ÚfsÚ
allow_nones     r   Ú_validate_fsr<   ú   sF   € ð 
€zÙÜÐBÓCÐCð
 €Iô �{‰{˜2ŒÜÐMÓNÐNÜ�2‹YˆØ€Ir   )NNNr   )r   )T)
Ú__doc__Únumpyr    r   r   r)   r+   r1   r6   r<   © r   r   ú<module>r@      s7   ðñó ó'óT-ó2ój/ód4ón ôFr   