def apply(self, x, d=None, dt=None, rng=np.random, copy=True, **kwargs): """Run process on a given input. Keyword arguments that do not appear in the parameter list below will be passed to the ``make_step`` function of this process. Parameters ---------- x : ndarray The input signal given to the process. d : int, optional Output dimensionality. If None, ``default_size_out`` will be used. dt : float, optional Simulation timestep. If None, ``default_dt`` will be used. rng : `numpy.random.mtrand.RandomState` Random number generator used for stochstic processes. copy : bool, optional If True, a new output array will be created for output. If False, the input signal ``x`` will be overwritten. """ shape_in = as_shape(np.asarray(x[0]).shape, min_dim=1) shape_out = as_shape(self.default_size_out if d is None else d) dt = self.default_dt if dt is None else dt rng = self.get_rng(rng) state = self.make_state(shape_in, shape_out, dt) step = self.make_step(shape_in, shape_out, dt, rng, state, **kwargs) output = np.zeros((len(x), ) + shape_out) if copy else x for i, xi in enumerate(x): output[i] = step((i + 1) * dt, xi) return output
def run_steps(self, n_steps, d=None, dt=None, rng=np.random, **kwargs): """Run process without input for given number of steps. Keyword arguments that do not appear in the parameter list below will be passed to the ``make_step`` function of this process. Parameters ---------- n_steps : int The number of steps to run. d : int, optional Output dimensionality. If None, ``default_size_out`` will be used. dt : float, optional Simulation timestep. If None, ``default_dt`` will be used. rng : `numpy.random.mtrand.RandomState` Random number generator used for stochstic processes. """ shape_in = as_shape(0) shape_out = as_shape(self.default_size_out if d is None else d) dt = self.default_dt if dt is None else dt rng = self.get_rng(rng) state = self.make_state(shape_in, shape_out, dt) step = self.make_step(shape_in, shape_out, dt, rng, state, **kwargs) output = np.zeros((n_steps, ) + shape_out) for i in range(n_steps): output[i] = step((i + 1) * dt) return output
def apply(self, x, d=None, dt=None, rng=np.random, copy=True, **kwargs): """Run process on a given input. Keyword arguments that do not appear in the parameter list below will be passed to the ``make_step`` function of this process. Parameters ---------- x : ndarray The input signal given to the process. d : int, optional (Default: None) Output dimensionality. If None, ``default_size_out`` will be used. dt : float, optional (Default: None) Simulation timestep. If None, ``default_dt`` will be used. rng : `numpy.random.RandomState` (Default: ``numpy.random``) Random number generator used for stochstic processes. copy : bool, optional (Default: True) If True, a new output array will be created for output. If False, the input signal ``x`` will be overwritten. """ shape_in = as_shape(np.asarray(x[0]).shape, min_dim=1) shape_out = as_shape(self.default_size_out if d is None else d) dt = self.default_dt if dt is None else dt rng = self.get_rng(rng) step = self.make_step(shape_in, shape_out, dt, rng, **kwargs) output = np.zeros((len(x),) + shape_out) if copy else x for i, xi in enumerate(x): output[i] = step((i+1) * dt, xi) return output
def run_steps(self, n_steps, d=None, dt=None, rng=np.random, **kwargs): """Run process without input for given number of steps. Keyword arguments that do not appear in the parameter list below will be passed to the ``make_step`` function of this process. Parameters ---------- n_steps : int The number of steps to run. d : int, optional (Default: None) Output dimensionality. If None, ``default_size_out`` will be used. dt : float, optional (Default: None) Simulation timestep. If None, ``default_dt`` will be used. rng : `numpy.random.RandomState` (Default: ``numpy.random``) Random number generator used for stochstic processes. """ shape_in = as_shape(0) shape_out = as_shape(self.default_size_out if d is None else d) dt = self.default_dt if dt is None else dt rng = self.get_rng(rng) step = self.make_step(shape_in, shape_out, dt, rng, **kwargs) output = np.zeros((n_steps,) + shape_out) for i in range(n_steps): output[i] = step((i+1) * dt) return output
def apply(self, x, d=None, dt=None, rng=np.random, copy=True, **kwargs): """Run process on a given input.""" shape_in = as_shape(np.asarray(x[0]).shape, min_dim=1) shape_out = as_shape(self.default_size_out if d is None else d) dt = self.default_dt if dt is None else dt rng = self.get_rng(rng) step = self.make_step(shape_in, shape_out, dt, rng, **kwargs) output = np.zeros((len(x),) + shape_out) if copy else x for i, xi in enumerate(x): output[i] = step(i * dt, xi) return output
def run_steps(self, n_steps, d=None, dt=None, rng=np.random, **kwargs): """Run process without input for given number of steps.""" shape_in = as_shape(0) shape_out = as_shape(self.default_size_out if d is None else d) dt = self.default_dt if dt is None else dt rng = self.get_rng(rng) step = self.make_step(shape_in, shape_out, dt, rng, **kwargs) output = np.zeros((n_steps,) + shape_out) for i in range(n_steps): output[i] = step(i * dt) return output
def filt(self, x, dt=None, axis=0, y0=None, copy=True, filtfilt=False): """Filter ``x`` with this synapse model. Parameters ---------- x : array_like The signal to filter. dt : float, optional (Default: None) The timestep of the input signal. If None, ``default_dt`` will be used. axis : int, optional (Default: 0) The axis along which to filter. y0 : array_like, optional (Default: None) The starting state of the filter output. If None, the initial value of the input signal along the axis filtered will be used. copy : bool, optional (Default: True) Whether to copy the input data, or simply work in-place. filtfilt : bool, optional (Default: False) If True, runs the process forward then backward on the signal, for zero-phase filtering (like Matlab's ``filtfilt``). """ # This function is very similar to `Process.apply`, but allows for # a) filtering along any axis, and b) zero-phase filtering (filtfilt). dt = self.default_dt if dt is None else dt filtered = np.array(x, copy=copy) filt_view = np.rollaxis(filtered, axis=axis) # rolled view on filtered if y0 is None: y0 = filt_view[0] shape_in = shape_out = as_shape(filt_view[0].shape, min_dim=1) step = self.make_step(shape_in, shape_out, dt, None, y0=y0, dtype=x.dtype) for i, signal_in in enumerate(filt_view): filt_view[i] = step(i * dt, signal_in) if filtfilt: # Flip the filt_view and filter again n = len(filt_view) - 1 filt_view = filt_view[::-1] for i, signal_in in enumerate(filt_view): filt_view[i] = step((n - i) * dt, signal_in) return filtered
def filt(self, x, dt=None, axis=0, y0=None, copy=True, filtfilt=False): """Filter ``x`` with this synapse model. Parameters ---------- x : array_like The signal to filter. dt : float, optional (Default: None) The timestep of the input signal. If None, ``default_dt`` will be used. axis : int, optional (Default: 0) The axis along which to filter. y0 : array_like, optional (Default: None) The starting state of the filter output. If None, the initial value of the input signal along the axis filtered will be used. copy : bool, optional (Default: True) Whether to copy the input data, or simply work in-place. filtfilt : bool, optional (Default: False) If True, runs the process forward then backward on the signal, for zero-phase filtering (like Matlab's ``filtfilt``). """ # This function is very similar to `Process.apply`, but allows for # a) filtering along any axis, and b) zero-phase filtering (filtfilt). dt = self.default_dt if dt is None else dt filtered = np.array(x, copy=copy) filt_view = np.rollaxis(filtered, axis=axis) # rolled view on filtered if y0 is None: y0 = filt_view[0] shape_in = shape_out = as_shape(filt_view[0].shape, min_dim=1) step = self.make_step( shape_in, shape_out, dt, None, y0=y0, dtype=filtered.dtype) for i, signal_in in enumerate(filt_view): filt_view[i] = step(i * dt, signal_in) if filtfilt: # Flip the filt_view and filter again n = len(filt_view) - 1 filt_view = filt_view[::-1] for i, signal_in in enumerate(filt_view): filt_view[i] = step((n - i) * dt, signal_in) return filtered
def test_as_shape_errors(): """Tests errors generated by the `as_shape` function""" with pytest.raises(ValueError, match="cannot be safely converted to a shape"): as_shape(1.0) # float is noniterable and noninteger