L if HdZddlZd dZd dZd dZd dZd dZd dZd d Z y) z- Functions for acting on a axis of an array. Ncttdg|jz}t|||||<|t|}|S)a0Take 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)slicendimtuple)astartstopstepaxisa_slicebs ^/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/scipy/signal/_arraytools.py axis_slicers>HT{maff$G%t,GDM %.A Hct|d|S)zeReverse the 1-D slices of `a` along axis `axis`. Returns axis_slice(a, step=-1, axis=axis). )r r )r)rr s r axis_reverser1s abt ,,rcL|dkr|S||j|dz kDr td||j|dz fzt|dd|}t||dd|}t|d|}t|d|d z d|}tjd |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.rrr r rrr r r rr r shape ValueErrorrnp concatenate)xnr left_endleft_ext right_end right_extexts rodd_extr)9sH 1u1774=1 Lqwwt}q0123 3!1148H!112DAH1BT2I1Bq1uXBTJI ..!h,1i-)35# $C Jrc|dkr|S||j|dz kDr td||j|dz fzt||dd|}t|d|dz d|}tj|||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() rrrrrrrrr)r"r#r r%r'r(s reven_extr+nsF 1u1774=1 Lqwwt}q0123 3!112DAH1Bq1uXBTJI ..(#%# $C Jrc|dkr|St|dd|}dg|jz}|||<tj||j}||z}t|d|}||z}tj |||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() rrrdtyperrr)rrr onesr.r!) r"r#r r$ ones_shaper/r%r&r'r(s r const_extr1sN 1u!1148HqvvJJt 77:QWW -DhH1BT2Iy I ..(#%# $C Jrc|dkr|St|j}|||<tj||j}tj |||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]]) rr-r)listrr zerosr.r!)r"r#r zeros_shaper4r(s rzero_extr6sW4 1uqww-KK HH[ 0E ..%E* 6C Jrc~||s td|Stj|s tdt|}|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.)rr isscalarfloat)fs allow_nones r _validate_fsr<sF zBC C I{{2MN N 2Y Ir)NNNr)r)T) __doc__numpyr rrr)r+r1r6r<rrr@s7' T-2j/d4n Fr