
    (phf                      V    S r SSKrS
S jrSS jrSS jrSS jrSS jrSS jrSS	 jr	g)z-
Functions for acting on a axis of an array.
    Nc                 p    [        S5      /U R                  -  n[        XU5      XT'   U [        U5         nU$ )a  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          K/var/www/html/venv/lib/python3.13/site-packages/scipy/signal/_arraytools.py
axis_slicer      s:    H T{maff$G%t,GM	%.AH    c                     [        U SUS9$ )z]Reverse 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    
 abt,,r   c                 .   US:  a  U $ XR                   U   S-
  :  a  [        SXR                   U   S-
  4-  5      e[        U SSUS9n[        XSSUS9n[        U SUS9n[        U SUS	-   * SUS9n[        R                  " S	U-  U-
  U S	U-  U-
  4US
9nU$ )a  
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 	1u774=1 Lwwt}q012 3 	3 !1148H!12DAH1BT2I1Bq1uXBTJI
..!h,1i-)35 #$C Jr   c                     US:  a  U $ XR                   U   S-
  :  a  [        SXR                   U   S-
  4-  5      e[        XSSUS9n[        U SUS-   * SUS9n[        R                  " UU U4US9nU$ )	a  
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 	1u774=1 Lwwt}q012 3 	3 !12DAH1Bq1uXBTJI
..(#% #$C Jr   c                     US:  a  U $ [        U SSUS9nS/U R                  -  nXU'   [        R                  " X@R                  S9nXS-  n[        U SUS9nXW-  n[        R
                  " UU U4US9n	U	$ )a7  
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 	1u!1148HqvvJt77:WW-DH1BT2I I
..(#% #$C Jr   c                     US:  a  U $ [        U R                  5      nXU'   [        R                  " X0R                  S9n[        R
                  " X@U4US9nU$ )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      sQ    4 	1uqww-KHH[0E
..%E*
6CJr   c                     U c  U(       d  [        S5      e U $ [        R                  " U 5      (       d  [        S5      e[        U 5      n U $ )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<      sM     
zBCC  I {{2MNN2Y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   