parameters: (b, a, y, x=None)
return_statement: return zi
docstring: Construct initial conditions for lfilter.
  
      Given a linear filter (b, a) and initial conditions on the output `y`
      and the input `x`, return the initial conditions on the state vector zi
      which is used by `lfilter` to generate the output given the input.
  
      Parameters
      ----------
      b : array_like
          Linear filter term.
      a : array_like
          Linear filter term.
      y : array_like
          Initial conditions.
  
          If ``N = len(a) - 1``, then ``y = {y[-1], y[-2], ..., y[-N]}``.
  
          If `y` is too short, it is padded with zeros.
      x : array_like, optional
          Initial conditions.
  
          If ``M = len(b) - 1``, then ``x = {x[-1], x[-2], ..., x[-M]}``.
  
          If `x` is not given, its initial conditions are assumed zero.
  
          If `x` is too short, it is padded with zeros.
  
      Returns
      -------
      zi : ndarray
          The state vector ``zi = {z_0[-1], z_1[-1], ..., z_K-1[-1]}``,
          where ``K = max(M, N)``.
  
      See Also
      --------
      lfilter, lfilter_zi
docstring_summary: Construct initial conditions for lfilter.
docstring_tokens: Construct initial conditions for lfilter .
function: def lfiltic(b, a, y, x=None):
      """
      Construct initial conditions for lfilter.
  
      Given a linear filter (b, a) and initial conditions on the output `y`
      and the input `x`, return the initial conditions on the state vector zi
      which is used by `lfilter` to generate the output given the input.
  
      Parameters
      ----------
      b : array_like
          Linear filter term.
      a : array_like
          Linear filter term.
      y : array_like
          Initial conditions.
  
          If ``N = len(a) - 1``, then ``y = {y[-1], y[-2], ..., y[-N]}``.
  
          If `y` is too short, it is padded with zeros.
      x : array_like, optional
          Initial conditions.
  
          If ``M = len(b) - 1``, then ``x = {x[-1], x[-2], ..., x[-M]}``.
  
          If `x` is not given, its initial conditions are assumed zero.
  
          If `x` is too short, it is padded with zeros.
  
      Returns
      -------
      zi : ndarray
          The state vector ``zi = {z_0[-1], z_1[-1], ..., z_K-1[-1]}``,
          where ``K = max(M, N)``.
  
      See Also
      --------
      lfilter, lfilter_zi
  
      """
      N = np.size(a) - 1
      M = np.size(b) - 1
      K = max(M, N)
      y = asarray(y)
      if y.dtype.kind in 'bui':
          # ensure calculations are floating point
          y = y.astype(np.float64)
      zi = zeros(K, y.dtype)
      if x is None:
          x = zeros(M, y.dtype)
      else:
          x = asarray(x)
          L = np.size(x)
          if L < M:
              x = r_[x, zeros(M - L)]
      L = np.size(y)
      if L < N:
          y = r_[y, zeros(N - L)]
  
      for m in range(M):
          zi[m] = np.sum(b[m + 1:] * x[:M - m], axis=0)
  
      for m in range(N):
          zi[m] -= np.sum(a[m + 1:] * y[:N - m], axis=0)
  
      return zi
function_tokens: def lfiltic ( b , a , y , x = None ) : N = np . size ( a ) - 1 M = np . size ( b ) - 1 K = max ( M , N ) y = asarray ( y ) if y . dtype . kind in 'bui' : # ensure calculations are floating point y = y . astype ( np . float64 ) zi = zeros ( K , y . dtype ) if x is None : x = zeros ( M , y . dtype ) else : x = asarray ( x ) L = np . size ( x ) if L < M : x = r_ [ x , zeros ( M - L ) ] L = np . size ( y ) if L < N : y = r_ [ y , zeros ( N - L ) ] for m in range ( M ) : zi [ m ] = np . sum ( b [ m + 1 : ] * x [ : M - m ] , axis = 0 ) for m in range ( N ) : zi [ m ] -= np . sum ( a [ m + 1 : ] * y [ : N - m ] , axis = 0 ) return zi