'Initial transition matrix'

@property
def initial_transition(self):

    transition = np.zeros((self.k_states, self.k_states))
    if self.state_regression:
        start = (- self.k_exog)
        transition[start:, start:] = np.eye(self.k_exog)
        start = (- (self.k_exog + self._k_order))
        end = ((- self.k_exog) if (self.k_exog > 0) else None)
    else:
        start = (- self._k_order)
        end = None
    if (self._k_order > 0):
        transition[start:end, start:end] = companion_matrix(self._k_order)
        if self.hamilton_representation:
            transition[start:end, start:end] = np.transpose(companion_matrix(self._k_order))
    if (self._k_seasonal_diff > 0):
        seasonal_companion = companion_matrix(self.seasonal_periods).T
        seasonal_companion[(0, (-1))] = 1
        for d in range(self._k_seasonal_diff):
            start = (self._k_diff + (d * self.seasonal_periods))
            end = (self._k_diff + ((d + 1) * self.seasonal_periods))
            transition[start:end, start:end] = seasonal_companion
            for i in range((d + 1), self._k_seasonal_diff):
                transition[(start, ((end + self.seasonal_periods) - 1))] = 1
            transition[(start, self._k_states_diff)] = 1
    if (self._k_diff > 0):
        idx = np.triu_indices(self._k_diff)
        transition[idx] = 1
        if (self.seasonal_periods > 0):
            start = self._k_diff
            end = self._k_states_diff
            transition[:self._k_diff, start:end] = ((([0] * (self.seasonal_periods - 1)) + [1]) * self._k_seasonal_diff)
        column = self._k_states_diff
        transition[:self._k_diff, column] = 1
    return transition
