class_docstr: Vector Autoregressive Moving Average with eXogenous regressors model
  
  Parameters
  ----------
  endog : array_like
      The observed time-series process :math:`y`, , shaped nobs x k_endog.
  exog : array_like, optional
      Array of exogenous regressors, shaped nobs x k.
  order : iterable
      The (p,q) order of the model for the number of AR and MA parameters to
      use.
  trend : str{'n','c','t','ct'} or iterable, optional
      Parameter controlling the deterministic trend polynomial :math:`A(t)`.
      Can be specified as a string where 'c' indicates a constant (i.e. a
      degree zero component of the trend polynomial), 't' indicates a
      linear trend with time, and 'ct' is both. Can also be specified as an
      iterable defining the non-zero polynomial exponents to include, in
      increasing order. For example, `[1,1,0,1]` denotes
      :math:`a + bt + ct^3`. Default is a constant trend component.
  error_cov_type : {'diagonal', 'unstructured'}, optional
      The structure of the covariance matrix of the error term, where
      "unstructured" puts no restrictions on the matrix and "diagonal"
      requires it to be a diagonal matrix (uncorrelated errors). Default is
      "unstructured".
  measurement_error : bool, optional
      Whether or not to assume the endogenous observations `endog` were
      measured with error. Default is False.
  enforce_stationarity : bool, optional
      Whether or not to transform the AR parameters to enforce stationarity
      in the autoregressive component of the model. Default is True.
  enforce_invertibility : bool, optional
      Whether or not to transform the MA parameters to enforce invertibility
      in the moving average component of the model. Default is True.
  trend_offset : int, optional
      The offset at which to start time trend values. Default is 1, so that
      if `trend='t'` the trend is equal to 1, 2, ..., nobs. Typically is only
      set when the model created by extending a previous dataset.
  **kwargs
      Keyword arguments may be used to provide default values for state space
      matrices or for Kalman filtering options. See `Representation`, and
      `KalmanFilter` for more details.
  
  Attributes
  ----------
  order : iterable
      The (p,q) order of the model for the number of AR and MA parameters to
      use.
  trend : str{'n','c','t','ct'} or iterable
      Parameter controlling the deterministic trend polynomial :math:`A(t)`.
      Can be specified as a string where 'c' indicates a constant (i.e. a
      degree zero component of the trend polynomial), 't' indicates a
      linear trend with time, and 'ct' is both. Can also be specified as an
      iterable defining the non-zero polynomial exponents to include, in
      increasing order. For example, `[1,1,0,1]` denotes
      :math:`a + bt + ct^3`.
  error_cov_type : {'diagonal', 'unstructured'}, optional
      The structure of the covariance matrix of the error term, where
      "unstructured" puts no restrictions on the matrix and "diagonal"
      requires it to be a diagonal matrix (uncorrelated errors). Default is
      "unstructured".
  measurement_error : bool, optional
      Whether or not to assume the endogenous observations `endog` were
      measured with error. Default is False.
  enforce_stationarity : bool, optional
      Whether or not to transform the AR parameters to enforce stationarity
      in the autoregressive component of the model. Default is True.
  enforce_invertibility : bool, optional
      Whether or not to transform the MA parameters to enforce invertibility
      in the moving average component of the model. Default is True.
  
  Notes
  -----
  Generically, the VARMAX model is specified (see for example chapter 18 of
  [1]_):
  
  .. math::
  
      y_t = A(t) + A_1 y_{t-1} + \dots + A_p y_{t-p} + B x_t + \epsilon_t +
      M_1 \epsilon_{t-1} + \dots M_q \epsilon_{t-q}
  
  where :math:`\epsilon_t \sim N(0, \Omega)`, and where :math:`y_t` is a
  `k_endog x 1` vector. Additionally, this model allows considering the case
  where the variables are measured with error.
  
  Note that in the full VARMA(p,q) case there is a fundamental identification
  problem in that the coefficient matrices :math:`\{A_i, M_j\}` are not
  generally unique, meaning that for a given time series process there may
  be multiple sets of matrices that equivalently represent it. See Chapter 12
  of [1]_ for more information. Although this class can be used to estimate
  VARMA(p,q) models, a warning is issued to remind users that no steps have
  been taken to ensure identification in this case.
  
  References
  ----------
  .. [1] Lütkepohl, Helmut. 2007.
     New Introduction to Multiple Time Series Analysis.
     Berlin: Springer.
docstr: Transform constrained parameters used in likelihood evaluation
  to unconstrained parameters used by the optimizer.
  
  Parameters
  ----------
  constrained : array_like
      Array of constrained parameters used in likelihood evaluation, to
      be transformed.
  
  Returns
  -------
  unconstrained : array_like
      Array of unconstrained parameters used by the optimizer.
code: def untransform_params(self, constrained):
      """
      Transform constrained parameters used in likelihood evaluation
      to unconstrained parameters used by the optimizer.
  
      Parameters
      ----------
      constrained : array_like
          Array of constrained parameters used in likelihood evaluation, to
          be transformed.
  
      Returns
      -------
      unconstrained : array_like
          Array of unconstrained parameters used by the optimizer.
      """
      constrained = np.array(constrained, ndmin=1)
      unconstrained = np.zeros(
          constrained.shape, dtype=constrained.dtype
      )
  
      # 1. Intercept terms: nothing to do
      unconstrained[self._params_trend] = constrained[
          self._params_trend
      ]
  
      # 2. AR terms: optionally were forced to be stationary
      if self.k_ar > 0 and self.enforce_stationarity:
          # Create the state covariance matrix
          if self.error_cov_type == "diagonal":
              state_cov = np.diag(constrained[self._params_state_cov])
          elif self.error_cov_type == "unstructured":
              state_cov_lower = np.zeros(
                  self.ssm["state_cov"].shape, dtype=constrained.dtype
              )
              state_cov_lower[self._idx_lower_state_cov] = constrained[
                  self._params_state_cov
              ]
              state_cov = np.dot(state_cov_lower, state_cov_lower.T)
  
          # Transform the parameters
          coefficients = constrained[self._params_ar].reshape(
              self.k_endog, self.k_endog * self.k_ar
          )
          (
              unconstrained_matrices,
              variance,
          ) = unconstrain_stationary_multivariate(
              coefficients, state_cov
          )
          unconstrained[
              self._params_ar
          ] = unconstrained_matrices.ravel()
      else:
          unconstrained[self._params_ar] = constrained[self._params_ar]
  
      # 3. MA terms: optionally were forced to be invertible
      if self.k_ma > 0 and self.enforce_invertibility:
          # Transform the parameters, using an identity variance matrix
          state_cov = np.eye(self.k_endog, dtype=constrained.dtype)
          coefficients = constrained[self._params_ma].reshape(
              self.k_endog, self.k_endog * self.k_ma
          )
          (
              unconstrained_matrices,
              variance,
          ) = unconstrain_stationary_multivariate(
              coefficients, state_cov
          )
          unconstrained[
              self._params_ma
          ] = unconstrained_matrices.ravel()
      else:
          unconstrained[self._params_ma] = constrained[self._params_ma]
  
      # 4. Regression terms: nothing to do
      unconstrained[self._params_regression] = constrained[
          self._params_regression
      ]
  
      # 5. State covariance terms
      # If we have variances, then these were forced to be positive
      if self.error_cov_type == "diagonal":
          unconstrained[self._params_state_cov] = (
              constrained[self._params_state_cov] ** 0.5
          )
      # Otherwise, nothing needs to be done
      elif self.error_cov_type == "unstructured":
          unconstrained[self._params_state_cov] = constrained[
              self._params_state_cov
          ]
  
      # 5. Measurement error variance terms
      if self.measurement_error:
          # These were forced to be positive
          unconstrained[self._params_obs_cov] = (
              constrained[self._params_obs_cov] ** 0.5
          )
  
      return unconstrained
  
imports: import contextlib
  from warnings import warn
  import pandas
  import numpy
  from statsmodels.compat.pandas import Appender
  from statsmodels.tools.tools import Bunch
  from statsmodels.tools.data import _is_using_pandas
  from statsmodels.tsa.vector_ar import var_model
  import statsmodels.base.wrapper
  from statsmodels.tools.sm_exceptions import EstimationWarning
  from .kalman_filter import INVERT_UNIVARIATE, SOLVE_LU
  from .mlemodel import MLEModel, MLEResults, MLEResultsWrapper
  from .initialization import Initialization
  from .tools import is_invertible, concat, prepare_exog, constrain_stationary_multivariate, unconstrain_stationary_multivariate, prepare_trend_spec, prepare_trend_data
label_desc: Use image node_id 7 for calling the VARMAX obj's underlying member method code with example usage: obj.untransform_params(constrained) and returns: unconstrained