docs: def set_params(self):
          r"""
          Internally, scipy.signal works with systems of the form
  
          .. math::
  
              ar_{poly}(L) X_t = ma_{poly}(L) \epsilon_t
  
          where L is the lag operator. To match this, we set
  
          .. math::
  
              ar_{poly} = (1, -\phi_1, -\phi_2,..., -\phi_p)
  
              ma_{poly} = (1, \theta_1, \theta_2,..., \theta_q)
  
          In addition, ar_poly must be at least as long as ma_poly.
          This can be achieved by padding it out with zeros when required.
  
          """
          # === set up ma_poly === #
          ma_poly = np.asarray(self._theta)
          self.ma_poly = np.insert(ma_poly, 0, 1)  # The array (1, theta)
  
          # === set up ar_poly === #
          if np.isscalar(self._phi):
              ar_poly = np.array(-self._phi)
          else:
              ar_poly = -np.asarray(self._phi)
          self.ar_poly = np.insert(ar_poly, 0, 1)  # The array (1, -phi)
  
          # === pad ar_poly with zeros if required === #
          if len(self.ar_poly) < len(self.ma_poly):
              temp = np.zeros(len(self.ma_poly) - len(self.ar_poly))
              self.ar_poly = np.hstack((self.ar_poly, temp))