R/Prior-methods.R

## betaIsEstimated ############################################################

## HAS_TESTS 
setMethod("betaIsEstimated",
    signature(prior = "Prior"),
    function(prior) {
        FALSE
    })

## HAS_TESTS
setMethod("betaIsEstimated",
          signature(prior = "Zero"),
          function(prior) {
              FALSE
          })


## describePrior #############################################################

## TimeInvariant

## HAS_TESTS
setMethod("describePrior",
          signature(object = "TimeInvariant"),
          function(object) {
              "Time invariant"
          })


## ExchFixed

## HAS_TESTS
setMethod("describePrior",
          signature(object = "ExchFixed"),
          function(object) {
              "Exchangeable with known variance"
          })

## HAS_TESTS
setMethod("describePrior",
          signature(object = "ExchNormZero"),
          function(object) {
              "Exchangeable"
          })

## HAS_TESTS
setMethod("describePrior",
          signature(object = "ExchNormCov"),
          function(object) {
              "Exchangeable with covariates"
          })

## HAS_TESTS
setMethod("describePrior",
          signature(object = "ExchRobustZero"),
          function(object) {
              "Robust exchangeable"
          })

## HAS_TESTS
setMethod("describePrior",
          signature(object = "ExchRobustCov"),
          function(object) {
              "Robust exchangeable with covariates"
          })


## DLM - Norm, Zero

## HAS_TESTS
setMethod("describePrior",
          signature(object = "DLMNoTrendNormZeroNoSeason"),
          function(object) {
              if (isDamped(object))
                  "Damped local level"
              else
                  "Local level"
          })

## HAS_TESTS
setMethod("describePrior",
          signature(object = "DLMWithTrendNormZeroNoSeason"),
          function(object) {
              if (isDamped(object))
                  "Damped local trend"
              else
                  "Local trend"
          })

## HAS_TESTS
setMethod("describePrior",
          signature(object = "DLMNoTrendNormZeroWithSeason"),
          function(object) {
              if (isDamped(object))
                  "Damped local level with seasonal effect"
              else
                  "Local level with seasonal effect"
          })

## HAS_TESTS
setMethod("describePrior",
          signature(object = "DLMWithTrendNormZeroWithSeason"),
          function(object) {
              if (isDamped(object))
                  "Damped local trend with seasonal effect"
              else
                  "Local trend with seasonal effect"
          })


## DLM - Norm, Cov

## HAS_TESTS
setMethod("describePrior",
          signature(object = "DLMNoTrendNormCovNoSeason"),
          function(object) {
              if (isDamped(object))
                  "Damped local level with covariates"
              else
                  "Local level with covariates"
          })

## HAS_TESTS
setMethod("describePrior",
          signature(object = "DLMWithTrendNormCovNoSeason"),
          function(object) {
              if (isDamped(object))
                  "Damped local trend with covariates"
              else
                  "Local trend with covariates"
          })

## HAS_TESTS
setMethod("describePrior",
          signature(object = "DLMNoTrendNormCovWithSeason"),
          function(object) {
              if (isDamped(object))
                  "Damped local level with covariates and seasonal effect"
              else
                  "Local level with covariates and seasonal effect"
          })

## HAS_TESTS
setMethod("describePrior",
          signature(object = "DLMWithTrendNormCovWithSeason"),
          function(object) {
              if (isDamped(object))
                  "Damped local trend with covariates and seasonal effect"
              else
                  "Local trend with covariates and seasonal effect"
          })


## DLM - Robust, Zero

## HAS_TESTS
setMethod("describePrior",
          signature(object = "DLMNoTrendRobustZeroNoSeason"),
          function(object) {
              if (isDamped(object))
                  "Damped robust local level"
              else
                  "Robust local level"
          })

## HAS_TESTS
setMethod("describePrior",
          signature(object = "DLMWithTrendRobustZeroNoSeason"),
          function(object) {
              if (isDamped(object))
                  "Damped robust local trend"
              else
                  "Robust local trend"
          })

## HAS_TESTS
setMethod("describePrior",
          signature(object = "DLMNoTrendRobustZeroWithSeason"),
          function(object) {
              if (isDamped(object))
                  "Damped robust local level with seasonal effect"
              else
                  "Robust local level with seasonal effect"
          })

## HAS_TESTS
setMethod("describePrior",
          signature(object = "DLMWithTrendRobustZeroWithSeason"),
          function(object) {
              if (isDamped(object))
                  "Damped robust local trend with seasonal effect"
              else
                  "Robust local trend with seasonal effect"
          })


## DLM - Robust, Cov

## HAS_TESTS
setMethod("describePrior",
          signature(object = "DLMNoTrendRobustCovNoSeason"),
          function(object) {
              if (isDamped(object))
                  "Damped robust local level with covariates"
              else
                  "Robust local level with covariates"
          })

## HAS_TESTS
setMethod("describePrior",
          signature(object = "DLMWithTrendRobustCovNoSeason"),
          function(object) {
              if (isDamped(object))
                  "Damped robust local trend with covariates"
              else
                  "Robust local trend with covariates"
          })

## HAS_TESTS
setMethod("describePrior",
          signature(object = "DLMNoTrendRobustCovWithSeason"),
          function(object) {
              if (isDamped(object))
                  "Damped robust local level with covariates and seasonal effect"
              else
                  "Robust local level with covariates and seasonal effect"
          })

## HAS_TESTS
setMethod("describePrior",
          signature(object = "DLMWithTrendRobustCovWithSeason"),
          function(object) {
              if (isDamped(object))
                  "Damped robust local trend with covariates and seasonal effect"
              else
                  "Robust local trend with covariates and seasonal effect"
          })


## Known

## HAS_TESTS
setMethod("describePrior",
          signature(object = "KnownCertain"),
          function(object) {
              "Known values"
          })

## HAS_TESTS
setMethod("describePrior",
          signature(object = "KnownUncertain"),
          function(object) {
              "Normal with known mean and variance"
          })

## Mix

setMethod("describePrior",
          signature(object = "MixNormZero"),
          function(object) {
              "Mixture model"
          })

## Zero

## HAS_TESTS
setMethod("describePrior",
          signature(object = "Zero"),
          function(object) {
              "Set to zero"
          })



## drawPrior #########################################################################

## ExchFixed

## TRANSLATED
## HAS_TESTS
setMethod("drawPrior",
          signature(prior = "ExchFixed"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_ExchFixed_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior
              }
          })

## Exch

## TRANSLATED
## HAS_TESTS
setMethod("drawPrior",
          signature(prior = "ExchNormZero"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_ExchNormZero_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior <- drawTau(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("drawPrior",
          signature(prior = "ExchRobustZero"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_ExchRobustZero_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior <- drawTau(prior)
                  prior <- predictUBeta(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS  
setMethod("drawPrior",
          signature(prior = "ExchNormCov"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_ExchNormCov_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior <- drawTau(prior)
                  prior <- drawUEtaCoef(prior)
                  prior <- drawEta(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("drawPrior",
          signature(prior = "ExchRobustCov"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_ExchRobustCov_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior <- drawTau(prior)
                  prior <- predictUBeta(prior)
                  prior <- drawUEtaCoef(prior)
                  prior <- drawEta(prior)
                  prior
              }
          })

## DLM - Norm, Zero

## TRANSLATED
## HAS_TESTS
setMethod("drawPrior",
          signature(prior = "DLMNoTrendNormZeroNoSeason"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_DLMNoTrendNormZeroNoSeason_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior <- drawTau(prior)
                  prior <- drawOmegaAlpha(prior)
                  prior <- drawPhi(prior)
                  prior <- predictAlphaDLMNoTrend(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("drawPrior",
          signature(prior = "DLMWithTrendNormZeroNoSeason"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_DLMWithTrendNormZeroNoSeason_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior <- drawTau(prior)
                  prior <- drawOmegaAlpha(prior)
                  prior <- drawOmegaDelta(prior)
                  prior <- drawPhi(prior)
                  prior <- drawDelta0(prior)
                  prior <- predictAlphaDeltaDLMWithTrend(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("drawPrior",
          signature(prior = "DLMNoTrendNormZeroWithSeason"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_DLMNoTrendNormZeroWithSeason_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior <- drawTau(prior)
                  prior <- drawOmegaAlpha(prior)
                  prior <- drawOmegaSeason(prior)
                  prior <- drawPhi(prior)
                  prior <- predictSeason(prior)
                  prior <- predictAlphaDLMNoTrend(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("drawPrior",
          signature(prior = "DLMWithTrendNormZeroWithSeason"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_DLMWithTrendNormZeroWithSeason_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior <- drawTau(prior)
                  prior <- drawOmegaAlpha(prior)
                  prior <- drawOmegaDelta(prior)
                  prior <- drawOmegaSeason(prior)
                  prior <- drawPhi(prior)
                  prior <- predictSeason(prior)
                  prior <- drawDelta0(prior)
                  prior <- predictAlphaDeltaDLMWithTrend(prior)
                  prior
              }
          })

## DLM - Norm, Cov

## TRANSLATED
## HAS_TESTS
setMethod("drawPrior",
          signature(prior = "DLMNoTrendNormCovNoSeason"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_DLMNoTrendNormCovNoSeason_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior <- drawTau(prior)
                  prior <- drawOmegaAlpha(prior)
                  prior <- drawPhi(prior)
                  prior <- drawUEtaCoef(prior)
                  prior <- drawEta(prior)
                  prior <- predictAlphaDLMNoTrend(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("drawPrior",
          signature(prior = "DLMWithTrendNormCovNoSeason"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_DLMWithTrendNormCovNoSeason_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior <- drawTau(prior)
                  prior <- drawOmegaAlpha(prior)
                  prior <- drawOmegaDelta(prior)
                  prior <- drawPhi(prior)
                  prior <- drawUEtaCoef(prior)
                  prior <- drawEta(prior)
                  prior <- drawDelta0(prior)
                  prior <- predictAlphaDeltaDLMWithTrend(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("drawPrior",
          signature(prior = "DLMNoTrendNormCovWithSeason"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_DLMNoTrendNormCovWithSeason_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior <- drawTau(prior)
                  prior <- drawOmegaAlpha(prior)
                  prior <- drawOmegaSeason(prior)
                  prior <- drawPhi(prior)
                  prior <- drawUEtaCoef(prior)
                  prior <- drawEta(prior)
                  prior <- predictSeason(prior)
                  prior <- predictAlphaDLMNoTrend(prior)
                  prior
              }
          })


## TRANSLATED
## HAS_TESTS
setMethod("drawPrior",
          signature(prior = "DLMWithTrendNormCovWithSeason"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_DLMWithTrendNormCovWithSeason_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior <- drawTau(prior)
                  prior <- drawOmegaAlpha(prior)
                  prior <- drawOmegaDelta(prior)
                  prior <- drawOmegaSeason(prior)
                  prior <- drawPhi(prior)
                  prior <- drawUEtaCoef(prior)
                  prior <- drawEta(prior)
                  prior <- predictSeason(prior)
                  prior <- drawDelta0(prior)
                  prior <- predictAlphaDeltaDLMWithTrend(prior)
                  prior
              }
          })

## DLM - Robust, Zero

## TRANSLATED
## HAS_TESTS
setMethod("drawPrior",
          signature(prior = "DLMNoTrendRobustZeroNoSeason"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_DLMNoTrendRobustZeroNoSeason_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior <- drawTau(prior)
                  prior <- drawOmegaAlpha(prior)
                  prior <- predictUBeta(prior)
                  prior <- drawPhi(prior)
                  prior <- predictAlphaDLMNoTrend(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("drawPrior",
          signature(prior = "DLMWithTrendRobustZeroNoSeason"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_DLMWithTrendRobustZeroNoSeason_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior <- drawTau(prior)
                  prior <- drawOmegaAlpha(prior)
                  prior <- drawOmegaDelta(prior)
                  prior <- predictUBeta(prior)
                  prior <- drawPhi(prior)
                  prior <- drawDelta0(prior)
                  prior <- predictAlphaDeltaDLMWithTrend(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("drawPrior",
          signature(prior = "DLMNoTrendRobustZeroWithSeason"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_DLMNoTrendRobustZeroWithSeason_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior <- drawTau(prior)
                  prior <- drawOmegaAlpha(prior)
                  prior <- drawOmegaSeason(prior)
                  prior <- predictUBeta(prior)
                  prior <- drawPhi(prior)
                  prior <- predictSeason(prior)
                  prior <- predictAlphaDLMNoTrend(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("drawPrior",
          signature(prior = "DLMWithTrendRobustZeroWithSeason"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_DLMWithTrendRobustZeroWithSeason_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior <- drawTau(prior)
                  prior <- drawOmegaAlpha(prior)
                  prior <- drawOmegaDelta(prior)
                  prior <- drawOmegaSeason(prior)
                  prior <- predictUBeta(prior)
                  prior <- drawPhi(prior)
                  prior <- predictSeason(prior)
                  prior <- drawDelta0(prior)
                  prior <- predictAlphaDeltaDLMWithTrend(prior)
                  prior
              }
          })

## DLM - Robust, Cov

## TRANSLATED
## HAS_TESTS
setMethod("drawPrior",
          signature(prior = "DLMNoTrendRobustCovNoSeason"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_DLMNoTrendRobustCovNoSeason_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior <- drawTau(prior)
                  prior <- drawOmegaAlpha(prior)
                  prior <- predictUBeta(prior)
                  prior <- drawPhi(prior)
                  prior <- drawUEtaCoef(prior)
                  prior <- drawEta(prior)
                  prior <- predictAlphaDLMNoTrend(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("drawPrior",
          signature(prior = "DLMWithTrendRobustCovNoSeason"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_DLMWithTrendRobustCovNoSeason_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior <- drawTau(prior)
                  prior <- drawOmegaAlpha(prior)
                  prior <- drawOmegaDelta(prior)
                  prior <- predictUBeta(prior)
                  prior <- drawPhi(prior)
                  prior <- drawUEtaCoef(prior)
                  prior <- drawEta(prior)
                  prior <- drawDelta0(prior)
                  prior <- predictAlphaDeltaDLMWithTrend(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("drawPrior",
          signature(prior = "DLMNoTrendRobustCovWithSeason"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_DLMNoTrendRobustCovWithSeason_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior <- drawTau(prior)
                  prior <- drawOmegaAlpha(prior)
                  prior <- drawOmegaSeason(prior)
                  prior <- predictUBeta(prior)
                  prior <- drawPhi(prior)
                  prior <- drawUEtaCoef(prior)
                  prior <- drawEta(prior)
                  prior <- predictSeason(prior)
                  prior <- predictAlphaDLMNoTrend(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("drawPrior",
          signature(prior = "DLMWithTrendRobustCovWithSeason"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_DLMWithTrendRobustCovWithSeason_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior <- drawTau(prior)
                  prior <- drawOmegaAlpha(prior)
                  prior <- drawOmegaDelta(prior)
                  prior <- drawOmegaSeason(prior)
                  prior <- predictUBeta(prior)
                  prior <- drawPhi(prior)
                  prior <- drawUEtaCoef(prior)
                  prior <- drawEta(prior)
                  prior <- predictSeason(prior)
                  prior <- drawDelta0(prior)
                  prior <- predictAlphaDeltaDLMWithTrend(prior)
                  prior
              }
          })

## Known

## TRANSLATED
## HAS_TESTS
setMethod("drawPrior",
          signature(prior = "KnownCertain"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_KnownCertain_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("drawPrior",
          signature(prior = "KnownUncertain"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_KnownUncertain_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior
              }
          })

## Mix

setMethod("drawPrior",
          signature(prior = "MixNormZero"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_MixNormZero_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior <- drawTau(prior)
                  prior <- drawOmegaVectorsMix(prior)
                  prior <- drawOmegaLevelComponentWeightMix(prior)
                  prior <- drawOmegaComponentWeightMix(prior)
                  prior <- drawPhiMix(prior)
                  stop("not finished yet")
              }
          })

## Zero

## TRANSLATED
## HAS_TESTS
setMethod("drawPrior",
          signature(prior = "Zero"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(drawPrior_Zero_R, prior)
                  else
                      .Call(drawPrior_R, prior)
              }
              else {
                  prior
              }
          })






## makeOutputPrior ###################################################################

## Function "whereEstimated" controls whether a parameter
## estimated is actually printed. We can't skip parameters,
## because that messes up function 'changeInPos'.

## ExchFixed

## NO_TESTS
setMethod("makeOutputPrior",
          signature(prior = "TimeInvariant",
                    metadata = "ANY"),
          function(prior) {
              NULL
          })

## ExchFixed

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "ExchFixed",
                    metadata = "ANY"),
          function(prior) {
              scaleError <- prior@tau@.Data
              list(scaleError = scaleError)
          })


## Exch

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "ExchNormZero",
                    metadata = "ANY"),
          function(prior, pos) {
              scaleError <- makeOutputPriorScale(pos = pos)
              dfScaleError <- prior@nuTau@.Data
              scaleScaleError <- prior@ATau@.Data
              list(scaleError = scaleError,
                   dfScaleError = dfScaleError,
                   scaleScaleError = scaleScaleError)
          })

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "ExchNormCov",
                    metadata = "MetaData"),
          function(prior, metadata, pos) {
              P <- prior@P@.Data
              Z <- prior@Z@.Data
              coef <- makeOutputPriorCoef(Z = Z,
                                          pos = pos)
              meanCoef <- prior@meanEtaCoef@.Data
              dfCoef <- prior@nuEtaCoef@.Data
              scaleCoef <- prior@AEtaCoef@.Data
              pos <- pos + P
              scaleError <- makeOutputPriorScale(pos = pos)
              dfScaleError <- prior@nuTau@.Data
              scaleScaleError <- prior@ATau@.Data
              list(coef = coef,
                   meanCoef = meanCoef,
                   dfCoef = dfCoef,
                   scaleCoef = scaleCoef,
                   scaleError = scaleError,
                   dfScaleError = dfScaleError,
                   scaleScaleError = scaleScaleError)
          })

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "ExchRobustZero",
                    metadata = "MetaData"),
          function(prior, metadata, pos) {
              dfError <- prior@nuBeta@.Data
              scaleError <- makeOutputPriorScale(pos = pos)
              dfScaleError <- prior@nuTau@.Data
              scaleScaleError <- prior@ATau@.Data
              list(dfError = dfError,
                   scaleError = scaleError,
                   dfScaleError = dfScaleError,
                   scaleScaleError = scaleScaleError)
          })

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "ExchRobustCov",
                    metadata = "MetaData"),
          function(prior, metadata, pos) {
              P <- prior@P@.Data
              Z <- prior@Z@.Data
              coef <- makeOutputPriorCoef(Z = Z,
                                          pos = pos)
              meanCoef <- prior@meanEtaCoef@.Data
              dfCoef <- prior@nuEtaCoef@.Data
              scaleCoef <- prior@AEtaCoef@.Data
              meanCoef <- prior@meanEtaCoef@.Data
              dfCoef <- prior@nuEtaCoef@.Data
              scaleCoef <- prior@AEtaCoef@.Data
              pos <- pos + P
              dfError <- prior@nuBeta@.Data
              scaleError <- makeOutputPriorScale(pos = pos)
              dfScaleError <- prior@nuTau@.Data
              scaleScaleError <- prior@ATau@.Data
              list(coef = coef,
                   meanCoef = meanCoef,
                   dfCoef = dfCoef,
                   scaleCoef = scaleCoef,
                   dfError = dfError,
                   scaleError = scaleError,
                   dfScaleError = dfScaleError,
                   scaleScaleError = scaleScaleError)
          })


## DLM - Norm, Zero

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "DLMNoTrendNormZeroNoSeason",
                    metadata = "MetaData"),
          function(prior, metadata, pos, strucZeroArray = NULL, margin = NULL) {
              J <- prior@J@.Data
              K <- prior@K@.Data
              L <- prior@L@.Data
              iAlong <- prior@iAlong
              iterator <- prior@iteratorState
              phi <- prior@phi
              phiKnown <- prior@phiKnown@.Data
              level <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleLevel <- makeOutputPriorScale(pos = pos)
              dfScaleLevel <- prior@nuAlpha@.Data
              scaleScaleLevel <- prior@AAlpha@.Data
              pos <- pos + 1L
              damp <- makeOutputPriorDamp(pos = pos)
              pos <- pos + 1L
              scaleError <- makeOutputPriorScale(pos = pos)
              dfScaleError <- prior@nuTau@.Data
              scaleScaleError <- prior@ATau@.Data
              list(level = level,
                   scaleLevel = scaleLevel,
                   dfScaleLevel = dfScaleLevel,
                   scaleScaleLevel = scaleScaleLevel,
                   damp = damp,
                   scaleError = scaleError,
                   dfScaleError = dfScaleError,
                   scaleScaleError = scaleScaleError)
          })

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "DLMWithTrendNormZeroNoSeason",
                    metadata = "MetaData"),
          function(prior, metadata, pos, strucZeroArray = NULL, margin = NULL) {
              J <- prior@J@.Data
              K <- prior@K@.Data
              L <- prior@L@.Data
              iAlong <- prior@iAlong
              iterator <- prior@iteratorState
              has.level <- prior@hasLevel@.Data
              phi <- prior@phi
              phiKnown <- prior@phiKnown@.Data
              level <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleLevel <- makeOutputPriorScale(pos = pos)
              dfScaleLevel <- prior@nuAlpha@.Data
              scaleScaleLevel <- prior@AAlpha@.Data
              pos <- pos + 1L
              trend <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleTrend <- makeOutputPriorScale(pos = pos)
              dfScaleTrend <- prior@nuDelta@.Data
              scaleScaleTrend <- prior@ADelta@.Data
              pos <- pos + 1L
              damp <- makeOutputPriorDamp(pos = pos)
              pos <- pos + 1L
              scaleError <- makeOutputPriorScale(pos = pos)
              dfScaleError <- prior@nuTau@.Data
              scaleScaleError <- prior@ATau@.Data
              list(level = level,
                   scaleLevel = scaleLevel,
                   dfScaleLevel = dfScaleLevel,
                   scaleScaleLevel = scaleScaleLevel,
                   trend = trend,
                   scaleTrend = scaleTrend,
                   dfScaleTrend = dfScaleTrend,
                   scaleScaleTrend = scaleScaleTrend,
                   damp = damp,
                   scaleError = scaleError,
                   dfScaleError = dfScaleError,
                   scaleScaleError = scaleScaleError)
          })

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "DLMNoTrendNormZeroWithSeason",
                    metadata = "MetaData"),
          function(prior, metadata, pos, strucZeroArray = NULL, margin = NULL) {
              J <- prior@J@.Data
              K <- prior@K@.Data
              L <- prior@L@.Data
              nSeason <- prior@nSeason@.Data
              iAlong <- prior@iAlong
              iterator <- prior@iteratorState
              phi <- prior@phi
              phiKnown <- prior@phiKnown@.Data
              level <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleLevel <- makeOutputPriorScale(pos = pos)
              dfScaleLevel <- prior@nuAlpha@.Data
              scaleScaleLevel <- prior@AAlpha@.Data
              pos <- pos + 1L
              damp <- makeOutputPriorDamp(pos = pos)
              pos <- pos + 1L
              season <- makeOutputStateDLM(iterator = iterator,
                                           metadata = metadata,
                                           nSeason = nSeason,
                                           iAlong = iAlong,
                                           pos = pos,
                                           strucZeroArray = strucZeroArray,
                                           margin = margin)
              pos <- pos + (K + 1L) * L * nSeason
              scaleSeason <- makeOutputPriorScale(pos = pos)
              dfScaleSeason <- prior@nuSeason@.Data
              scaleScaleSeason <- prior@ASeason@.Data
              pos <- pos + 1L
              scaleError <- makeOutputPriorScale(pos = pos)
              dfScaleError <- prior@nuTau@.Data
              scaleScaleError <- prior@ATau@.Data
              list(level = level,
                   scaleLevel = scaleLevel,
                   dfScaleLevel = dfScaleLevel,
                   scaleScaleLevel = scaleScaleLevel,
                   damp = damp,
                   season = season,
                   scaleSeason = scaleSeason,
                   dfScaleSeason = dfScaleSeason,
                   scaleScaleSeason = scaleScaleSeason,
                   scaleError = scaleError,
                   dfScaleError = dfScaleError,
                   scaleScaleError = scaleScaleError)
          })

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "DLMWithTrendNormZeroWithSeason",
                    metadata = "MetaData"),
          function(prior, metadata, pos, strucZeroArray = NULL, margin = NULL) {
              J <- prior@J@.Data
              K <- prior@K@.Data
              L <- prior@L@.Data
              nSeason <- prior@nSeason@.Data
              iAlong <- prior@iAlong
              iterator <- prior@iteratorState
              has.level <- prior@hasLevel@.Data
              phi <- prior@phi
              phiKnown <- prior@phiKnown@.Data
              level <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleLevel <- makeOutputPriorScale(pos = pos)
              dfScaleLevel <- prior@nuAlpha@.Data
              scaleScaleLevel <- prior@AAlpha@.Data
              pos <- pos + 1L
              trend <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleTrend <- makeOutputPriorScale(pos = pos)
              dfScaleTrend <- prior@nuDelta@.Data
              scaleScaleTrend <- prior@ADelta@.Data
              pos <- pos + 1L
              damp <- makeOutputPriorDamp(pos = pos)
              pos <- pos + 1L
              season <- makeOutputStateDLM(iterator = iterator,
                                           metadata = metadata,
                                           nSeason = nSeason,
                                           iAlong = iAlong,
                                           pos = pos,
                                           strucZeroArray = strucZeroArray,
                                           margin = margin)
              pos <- pos + (K + 1L) * L * nSeason
              scaleSeason <- makeOutputPriorScale(pos = pos)
              dfScaleSeason <- prior@nuSeason@.Data
              scaleScaleSeason <- prior@ASeason@.Data
              pos <- pos + 1L
              scaleError <- makeOutputPriorScale(pos = pos)
              dfScaleError <- prior@nuTau@.Data
              scaleScaleError <- prior@ATau@.Data
              list(level = level,
                   scaleLevel = scaleLevel,
                   dfScaleLevel = dfScaleLevel,
                   scaleScaleLevel = scaleScaleLevel,
                   trend = trend,
                   scaleTrend = scaleTrend,
                   dfScaleTrend = dfScaleTrend,
                   scaleScaleTrend = scaleScaleTrend,
                   damp = damp,
                   season = season,
                   scaleSeason = scaleSeason,
                   dfScaleSeason = dfScaleSeason,
                   scaleScaleSeason = scaleScaleSeason,
                   scaleError = scaleError,
                   dfScaleError = dfScaleError,
                   scaleScaleError = scaleScaleError)
          })


## DLM - Norm, Cov

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "DLMNoTrendNormCovNoSeason",
                    metadata = "MetaData"),
          function(prior, metadata, pos, strucZeroArray = NULL, margin = NULL) {
              J <- prior@J@.Data
              K <- prior@K@.Data
              L <- prior@L@.Data
              P <- prior@P@.Data
              Z <- prior@Z
              iAlong <- prior@iAlong
              iterator <- prior@iteratorState
              phi <- prior@phi
              phiKnown <- prior@phiKnown@.Data
              level <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleLevel <- makeOutputPriorScale(pos = pos)
              dfScaleLevel <- prior@nuAlpha@.Data
              scaleScaleLevel <- prior@AAlpha@.Data
              pos <- pos + 1L
              damp <- makeOutputPriorDamp(pos = pos)
              pos <- pos + 1L
              coef <- makeOutputPriorCoef(Z = Z,
                                          pos = pos)
              meanCoef <- prior@meanEtaCoef@.Data
              dfCoef <- prior@nuEtaCoef@.Data
              scaleCoef <- prior@AEtaCoef@.Data
              pos <- pos + P
              scaleError <- makeOutputPriorScale(pos = pos)
              dfScaleError <- prior@nuTau@.Data
              scaleScaleError <- prior@ATau@.Data
              list(level = level,
                   scaleLevel = scaleLevel,
                   dfScaleLevel = dfScaleLevel,
                   scaleScaleLevel = scaleScaleLevel,
                   damp = damp,
                   coef = coef,
                   meanCoef = meanCoef,
                   dfCoef = dfCoef,
                   scaleCoef = scaleCoef,
                   scaleError = scaleError,
                   dfScaleError = dfScaleError,
                   scaleScaleError = scaleScaleError)
          })

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "DLMWithTrendNormCovNoSeason",
                    metadata = "MetaData"),
          function(prior, metadata, pos, strucZeroArray = NULL, margin = NULL) {
              J <- prior@J@.Data
              K <- prior@K@.Data
              L <- prior@L@.Data
              P <- prior@P@.Data
              Z <- prior@Z
              iAlong <- prior@iAlong
              iterator <- prior@iteratorState
              has.level <- prior@hasLevel@.Data
              phi <- prior@phi
              phiKnown <- prior@phiKnown@.Data
              level <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleLevel <- makeOutputPriorScale(pos = pos)
              dfScaleLevel <- prior@nuAlpha@.Data
              scaleScaleLevel <- prior@AAlpha@.Data
              pos <- pos + 1L
              trend <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleTrend <- makeOutputPriorScale(pos = pos)
              dfScaleTrend <- prior@nuDelta@.Data
              scaleScaleTrend <- prior@ADelta@.Data
              pos <- pos + 1L
              damp <- makeOutputPriorDamp(pos = pos)
              pos <- pos + 1L
              coef <- makeOutputPriorCoef(Z = Z,
                                          pos = pos)
              meanCoef <- prior@meanEtaCoef@.Data
              dfCoef <- prior@nuEtaCoef@.Data
              scaleCoef <- prior@AEtaCoef@.Data
              pos <- pos + P
              scaleError <- makeOutputPriorScale(pos = pos)
              dfScaleError <- prior@nuTau@.Data
              scaleScaleError <- prior@ATau@.Data
              list(level = level,
                   scaleLevel = scaleLevel,
                   dfScaleLevel = dfScaleLevel,
                   scaleScaleLevel = scaleScaleLevel,
                   trend = trend,
                   scaleTrend = scaleTrend,
                   dfScaleTrend = dfScaleTrend,
                   scaleScaleTrend = scaleScaleTrend,
                   damp = damp,
                   coef = coef,
                   meanCoef = meanCoef,
                   dfCoef = dfCoef,
                   scaleCoef = scaleCoef,
                   scaleError = scaleError,
                   dfScaleError = dfScaleError,
                   scaleScaleError = scaleScaleError)
          })

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "DLMNoTrendNormCovWithSeason",
                    metadata = "MetaData"),
          function(prior, metadata, pos, strucZeroArray = NULL, margin = NULL) {
              J <- prior@J@.Data
              K <- prior@K@.Data
              L <- prior@L@.Data
              P <- prior@P@.Data
              Z <- prior@Z
              iAlong <- prior@iAlong
              nSeason <- prior@nSeason@.Data
              iterator <- prior@iteratorState
              phi <- prior@phi
              phiKnown <- prior@phiKnown@.Data
              level <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleLevel <- makeOutputPriorScale(pos = pos)
              dfScaleLevel <- prior@nuAlpha@.Data
              scaleScaleLevel <- prior@AAlpha@.Data
              pos <- pos + 1L
              damp <- makeOutputPriorDamp(pos = pos)
              pos <- pos + 1L
              season <- makeOutputStateDLM(iterator = iterator,
                                           metadata = metadata,
                                           nSeason = nSeason,
                                           iAlong = iAlong,
                                           pos = pos,
                                           strucZeroArray = strucZeroArray,
                                           margin = margin)
              pos <- pos + (K + 1L) * L * nSeason
              scaleSeason <- makeOutputPriorScale(pos = pos)
              dfScaleSeason <- prior@nuSeason@.Data
              scaleScaleSeason <- prior@ASeason@.Data
              pos <- pos + 1L
              coef <- makeOutputPriorCoef(Z = Z,
                                          pos = pos)
              meanCoef <- prior@meanEtaCoef@.Data
              dfCoef <- prior@nuEtaCoef@.Data
              scaleCoef <- prior@AEtaCoef@.Data
              pos <- pos + P
              scaleError <- makeOutputPriorScale(pos = pos)
              dfScaleError <- prior@nuTau@.Data
              scaleScaleError <- prior@ATau@.Data
              list(level = level,
                   scaleLevel = scaleLevel,
                   dfScaleLevel = dfScaleLevel,
                   scaleScaleLevel = scaleScaleLevel,
                   damp = damp,
                   season = season,
                   scaleSeason = scaleSeason,
                   dfScaleSeason = dfScaleSeason,
                   scaleScaleSeason = scaleScaleSeason,
                   coef = coef,
                   meanCoef = meanCoef,
                   dfCoef = dfCoef,
                   scaleCoef = scaleCoef,
                   scaleError = scaleError,
                   dfScaleError = dfScaleError,
                   scaleScaleError = scaleScaleError)
          })

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "DLMWithTrendNormCovWithSeason",
                    metadata = "MetaData"),
          function(prior, metadata, pos, strucZeroArray = NULL, margin = NULL) {
              J <- prior@J@.Data
              K <- prior@K@.Data
              L <- prior@L@.Data
              P <- prior@P@.Data
              Z <- prior@Z
              iAlong <- prior@iAlong
              nSeason <- prior@nSeason@.Data
              iterator <- prior@iteratorState
              has.level <- prior@hasLevel@.Data
              phi <- prior@phi
              phiKnown <- prior@phiKnown@.Data
              level <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleLevel <- makeOutputPriorScale(pos = pos)
              dfScaleLevel <- prior@nuAlpha@.Data
              scaleScaleLevel <- prior@AAlpha@.Data
              pos <- pos + 1L
              trend <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleTrend <- makeOutputPriorScale(pos = pos)
              dfScaleTrend <- prior@nuDelta@.Data
              scaleScaleTrend <- prior@ADelta@.Data
              pos <- pos + 1L
              damp <- makeOutputPriorDamp(pos = pos)
              pos <- pos + 1L
              season <- makeOutputStateDLM(iterator = iterator,
                                           metadata = metadata,
                                           nSeason = nSeason,
                                           iAlong = iAlong,
                                           pos = pos,
                                           strucZeroArray = strucZeroArray,
                                           margin = margin)
              pos <- pos + (K + 1L) * L * nSeason
              scaleSeason <- makeOutputPriorScale(pos = pos)
              dfScaleSeason <- prior@nuSeason@.Data
              scaleScaleSeason <- prior@ASeason@.Data
              pos <- pos + 1L
              coef <- makeOutputPriorCoef(Z = Z,
                                          pos = pos)
              meanCoef <- prior@meanEtaCoef@.Data
              dfCoef <- prior@nuEtaCoef@.Data
              scaleCoef <- prior@AEtaCoef@.Data
              pos <- pos + P
              scaleError <- makeOutputPriorScale(pos = pos)
              dfScaleError <- prior@nuTau@.Data
              scaleScaleError <- prior@ATau@.Data
              list(level = level,
                   scaleLevel = scaleLevel,
                   dfScaleLevel = dfScaleLevel,
                   scaleScaleLevel = scaleScaleLevel,
                   trend = trend,
                   scaleTrend = scaleTrend,
                   dfScaleTrend = dfScaleTrend,
                   scaleScaleTrend = scaleScaleTrend,
                   damp = damp,
                   season = season,
                   scaleSeason = scaleSeason,
                   dfScaleSeason = dfScaleSeason,
                   scaleScaleSeason = scaleScaleSeason,
                   coef = coef,
                   meanCoef = meanCoef,
                   dfCoef = dfCoef,
                   scaleCoef = scaleCoef,
                   scaleError = scaleError,
                   dfScaleError = dfScaleError,
                   scaleScaleError = scaleScaleError)
          })


## DLM - Robust, Zero

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "DLMNoTrendRobustZeroNoSeason",
                    metadata = "MetaData"),
          function(prior, metadata, pos, strucZeroArray = NULL, margin = NULL) {
              K <- prior@K@.Data
              L <- prior@L@.Data
              iAlong <- prior@iAlong
              iterator <- prior@iteratorState
              phi <- prior@phi
              phiKnown <- prior@phiKnown@.Data
              level <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleLevel <- makeOutputPriorScale(pos = pos)
              dfScaleLevel <- prior@nuAlpha@.Data
              scaleScaleLevel <- prior@AAlpha@.Data
              pos <- pos + 1L
              damp <- makeOutputPriorDamp(pos = pos)
              pos <- pos + 1L
              dfError <- prior@nuBeta@.Data
              scaleError <- makeOutputPriorScale(pos = pos)
              dfScaleError <- prior@nuTau@.Data
              scaleScaleError <- prior@ATau@.Data
              list(level = level,
                   scaleLevel = scaleLevel,
                   dfScaleLevel = dfScaleLevel,
                   scaleScaleLevel = scaleScaleLevel,
                   damp = damp,
                   dfError = dfError,
                   scaleError = scaleError,
                   dfScaleError = dfScaleError,
                   scaleScaleError = scaleScaleError)
          })

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "DLMWithTrendRobustZeroNoSeason",
                    metadata = "MetaData"),
          function(prior, metadata, pos, strucZeroArray = NULL, margin = NULL) {
              K <- prior@K@.Data
              L <- prior@L@.Data
              iAlong <- prior@iAlong
              iterator <- prior@iteratorState
              has.level <- prior@hasLevel@.Data
              phi <- prior@phi
              phiKnown <- prior@phiKnown@.Data
              level <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleLevel <- makeOutputPriorScale(pos = pos)
              dfScaleLevel <- prior@nuAlpha@.Data
              scaleScaleLevel <- prior@AAlpha@.Data
              pos <- pos + 1L
              trend <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleTrend <- makeOutputPriorScale(pos = pos)
              dfScaleTrend <- prior@nuDelta@.Data
              scaleScaleTrend <- prior@ADelta@.Data
              pos <- pos + 1L
              damp <- makeOutputPriorDamp(pos = pos)
              pos <- pos + 1L
              dfError <- prior@nuBeta@.Data
              scaleError <- makeOutputPriorScale(pos = pos)
              dfScaleError <- prior@nuTau@.Data
              scaleScaleError <- prior@ATau@.Data
              list(level = level,
                   scaleLevel = scaleLevel,
                   dfScaleLevel = dfScaleLevel,
                   scaleScaleLevel = scaleScaleLevel,
                   trend = trend,
                   scaleTrend = scaleTrend,
                   dfScaleTrend = dfScaleTrend,
                   scaleScaleTrend = scaleScaleTrend,
                   damp = damp,
                   dfError = dfError,
                   scaleError = scaleError,
                   dfScaleError = dfScaleError,
                   scaleScaleError = scaleScaleError)
          })

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "DLMNoTrendRobustZeroWithSeason",
                    metadata = "MetaData"),
          function(prior, metadata, pos, strucZeroArray = NULL, margin = NULL) {
              K <- prior@K@.Data
              L <- prior@L@.Data
              iAlong <- prior@iAlong
              nSeason <- prior@nSeason@.Data
              iterator <- prior@iteratorState
              phi <- prior@phi
              phiKnown <- prior@phiKnown@.Data
              level <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleLevel <- makeOutputPriorScale(pos = pos)
              dfScaleLevel <- prior@nuAlpha@.Data
              scaleScaleLevel <- prior@AAlpha@.Data
              pos <- pos + 1L
              damp <- makeOutputPriorDamp(pos = pos)
              pos <- pos + 1L
              season <- makeOutputStateDLM(iterator = iterator,
                                           metadata = metadata,
                                           nSeason = nSeason,
                                           iAlong = iAlong,
                                           pos = pos,
                                           strucZeroArray = strucZeroArray,
                                           margin = margin)
              pos <- pos + (K + 1L) * L * nSeason
              scaleSeason <- makeOutputPriorScale(pos = pos)
              dfScaleSeason <- prior@nuSeason@.Data
              scaleScaleSeason <- prior@ASeason@.Data
              pos <- pos + 1L
              dfError <- prior@nuBeta@.Data
              scaleError <- makeOutputPriorScale(pos = pos)
              dfScaleError <- prior@nuTau@.Data
              scaleScaleError <- prior@ATau@.Data
              list(level = level,
                   scaleLevel = scaleLevel,
                   dfScaleLevel = dfScaleLevel,
                   scaleScaleLevel = scaleScaleLevel,
                   damp = damp,
                   season = season,
                   scaleSeason = scaleSeason,
                   dfScaleSeason = dfScaleSeason,
                   scaleScaleSeason = scaleScaleSeason,
                   dfError = dfError,
                   scaleError = scaleError,
                   dfScaleError = dfScaleError,
                   scaleScaleError = scaleScaleError)
          })

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "DLMWithTrendRobustZeroWithSeason",
                    metadata = "MetaData"),
          function(prior, metadata, pos, strucZeroArray = NULL, margin = NULL) {
              K <- prior@K@.Data
              L <- prior@L@.Data
              iAlong <- prior@iAlong
              nSeason <- prior@nSeason@.Data
              iterator <- prior@iteratorState
              has.level <- prior@hasLevel@.Data
              phi <- prior@phi
              phiKnown <- prior@phiKnown@.Data
              level <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleLevel <- makeOutputPriorScale(pos = pos)
              dfScaleLevel <- prior@nuAlpha@.Data
              scaleScaleLevel <- prior@AAlpha@.Data
              pos <- pos + 1L
              trend <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleTrend <- makeOutputPriorScale(pos = pos)
              dfScaleTrend <- prior@nuDelta@.Data
              scaleScaleTrend <- prior@ADelta@.Data
              pos <- pos + 1L
              damp <- makeOutputPriorDamp(pos = pos)
              pos <- pos + 1L
              season <- makeOutputStateDLM(iterator = iterator,
                                           metadata = metadata,
                                           nSeason = nSeason,
                                           iAlong = iAlong,
                                           pos = pos,
                                           strucZeroArray = strucZeroArray,
                                           margin = margin)
              pos <- pos + (K + 1L) * L * nSeason
              scaleSeason <- makeOutputPriorScale(pos = pos)
              dfScaleSeason <- prior@nuSeason@.Data
              scaleScaleSeason <- prior@ASeason@.Data
              pos <- pos + 1L
              dfError <- prior@nuBeta@.Data
              scaleError <- makeOutputPriorScale(pos = pos)
              dfScaleError <- prior@nuTau@.Data
              scaleScaleError <- prior@ATau@.Data
              list(level = level,
                   scaleLevel = scaleLevel,
                   dfScaleLevel = dfScaleLevel,
                   scaleScaleLevel = scaleScaleLevel,
                   trend = trend,
                   scaleTrend = scaleTrend,
                   dfScaleTrend = dfScaleTrend,
                   scaleScaleTrend = scaleScaleTrend,
                   damp = damp,
                   season = season,
                   scaleSeason = scaleSeason,
                   dfScaleSeason = dfScaleSeason,
                   scaleScaleSeason = scaleScaleSeason,
                   dfError = dfError,
                   scaleError = scaleError,
                   dfScaleError = dfScaleError,
                   scaleScaleError = scaleScaleError)
          })


## DLM - Robust, Cov

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "DLMNoTrendRobustCovNoSeason",
                    metadata = "MetaData"),
          function(prior, metadata, pos, strucZeroArray = NULL, margin = NULL) {
              K <- prior@K@.Data
              L <- prior@L@.Data
              P <- prior@P@.Data
              Z <- prior@Z
              iAlong <- prior@iAlong
              iterator <- prior@iteratorState
              phi <- prior@phi
              phiKnown <- prior@phiKnown@.Data
              level <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleLevel <- makeOutputPriorScale(pos = pos)
              dfScaleLevel <- prior@nuAlpha@.Data
              scaleScaleLevel <- prior@AAlpha@.Data
              pos <- pos + 1L
              damp <- makeOutputPriorDamp(pos = pos)
              pos <- pos + 1L
              coef <- makeOutputPriorCoef(Z = Z,
                                          pos = pos)
              meanCoef <- prior@meanEtaCoef@.Data
              dfCoef <- prior@nuEtaCoef@.Data
              scaleCoef <- prior@AEtaCoef@.Data
              pos <- pos + P
              dfError <- prior@nuBeta@.Data
              scaleError <- makeOutputPriorScale(pos = pos)
              dfScaleError <- prior@nuTau@.Data
              scaleScaleError <- prior@ATau@.Data
              list(level = level,
                   scaleLevel = scaleLevel,
                   dfScaleLevel = dfScaleLevel,
                   scaleScaleLevel = scaleScaleLevel,
                   damp = damp,
                   coef = coef,
                   meanCoef = meanCoef,
                   dfCoef = dfCoef,
                   scaleCoef = scaleCoef,
                   dfError = dfError,
                   scaleError = scaleError,
                   dfScaleError = dfScaleError,
                   scaleScaleError = scaleScaleError)
          })

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "DLMWithTrendRobustCovNoSeason",
                    metadata = "MetaData"),
          function(prior, metadata, pos, strucZeroArray = NULL, margin = NULL) {
              K <- prior@K@.Data
              L <- prior@L@.Data
              P <- prior@P@.Data
              Z <- prior@Z
              iAlong <- prior@iAlong
              iterator <- prior@iteratorState
              has.level <- prior@hasLevel@.Data
              phi <- prior@phi
              phiKnown <- prior@phiKnown@.Data
              level <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleLevel <- makeOutputPriorScale(pos = pos)
              dfScaleLevel <- prior@nuAlpha@.Data
              scaleScaleLevel <- prior@AAlpha@.Data
              pos <- pos + 1L
              trend <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleTrend <- makeOutputPriorScale(pos = pos)
              dfScaleTrend <- prior@nuDelta@.Data
              scaleScaleTrend <- prior@ADelta@.Data
              pos <- pos + 1L
              damp <- makeOutputPriorDamp(pos = pos)
              pos <- pos + 1L
              coef <- makeOutputPriorCoef(Z = Z,
                                          pos = pos)
              meanCoef <- prior@meanEtaCoef@.Data
              dfCoef <- prior@nuEtaCoef@.Data
              scaleCoef <- prior@AEtaCoef@.Data
              pos <- pos + P
              dfError <- prior@nuBeta@.Data
              scaleError <- makeOutputPriorScale(pos = pos)
              dfScaleError <- prior@nuTau@.Data
              scaleScaleError <- prior@ATau@.Data
              list(level = level,
                   scaleLevel = scaleLevel,
                   dfScaleLevel = dfScaleLevel,
                   scaleScaleLevel = scaleScaleLevel,
                   trend = trend,
                   scaleTrend = scaleTrend,
                   dfScaleTrend = dfScaleTrend,
                   scaleScaleTrend = scaleScaleTrend,
                   damp = damp,
                   coef = coef,
                   meanCoef = meanCoef,
                   dfCoef = dfCoef,
                   scaleCoef = scaleCoef,
                   dfError = dfError,
                   scaleError = scaleError,
                   dfScaleError = dfScaleError,
                   scaleScaleError = scaleScaleError)
          })

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "DLMNoTrendRobustCovWithSeason",
                    metadata = "MetaData"),
          function(prior, metadata, pos, strucZeroArray = NULL, margin = NULL) {
              K <- prior@K@.Data
              L <- prior@L@.Data
              P <- prior@P@.Data
              Z <- prior@Z
              iAlong <- prior@iAlong
              nSeason <- prior@nSeason@.Data
              iterator <- prior@iteratorState
              phi <- prior@phi
              phiKnown <- prior@phiKnown@.Data
              level <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleLevel <- makeOutputPriorScale(pos = pos)
              dfScaleLevel <- prior@nuAlpha@.Data
              scaleScaleLevel <- prior@AAlpha@.Data
              pos <- pos + 1L
              damp <- makeOutputPriorDamp(pos = pos)
              pos <- pos + 1L
              season <- makeOutputStateDLM(iterator = iterator,
                                           metadata = metadata,
                                           nSeason = nSeason,
                                           iAlong = iAlong,
                                           pos = pos,
                                           strucZeroArray = strucZeroArray,
                                           margin = margin)
              pos <- pos + (K + 1L) * L * nSeason
              scaleSeason <- makeOutputPriorScale(pos = pos)
              dfScaleSeason <- prior@nuSeason@.Data
              scaleScaleSeason <- prior@ASeason@.Data
              pos <- pos + 1L
              coef <- makeOutputPriorCoef(Z = Z,
                                          pos = pos)
              meanCoef <- prior@meanEtaCoef@.Data
              dfCoef <- prior@nuEtaCoef@.Data
              scaleCoef <- prior@AEtaCoef@.Data
              pos <- pos + P
              dfError <- prior@nuBeta@.Data
              scaleError <- makeOutputPriorScale(pos = pos)
              dfScaleError <- prior@nuTau@.Data
              scaleScaleError <- prior@ATau@.Data
              list(level = level,
                   scaleLevel = scaleLevel,
                   dfScaleLevel = dfScaleLevel,
                   scaleScaleLevel = scaleScaleLevel,
                   damp = damp,
                   season = season,
                   scaleSeason = scaleSeason,
                   dfScaleSeason = dfScaleSeason,
                   scaleScaleSeason = scaleScaleSeason,
                   coef = coef,
                   meanCoef = meanCoef,
                   dfCoef = dfCoef,
                   scaleCoef = scaleCoef,
                   dfError = dfError,
                   scaleError = scaleError,
                   dfScaleError = dfScaleError,
                   scaleScaleError = scaleScaleError)
          })

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "DLMWithTrendRobustCovWithSeason",
                    metadata = "MetaData"),
          function(prior, metadata, pos, strucZeroArray = NULL, margin = NULL) {
              K <- prior@K@.Data
              L <- prior@L@.Data
              P <- prior@P@.Data
              Z <- prior@Z
              nSeason <- prior@nSeason@.Data
              iAlong <- prior@iAlong
              iterator <- prior@iteratorState
              has.level <- prior@hasLevel@.Data
              phi <- prior@phi
              phiKnown <- prior@phiKnown@.Data
              level <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleLevel <- makeOutputPriorScale(pos = pos)
              dfScaleLevel <- prior@nuAlpha@.Data
              scaleScaleLevel <- prior@AAlpha@.Data
              pos <- pos + 1L
              trend <- makeOutputStateDLM(iterator = iterator,
                                          metadata = metadata,
                                          nSeason = NULL,
                                          iAlong = iAlong,
                                          pos = pos,
                                          strucZeroArray = strucZeroArray,
                                          margin = margin)
              pos <- pos + (K + 1L) * L
              scaleTrend <- makeOutputPriorScale(pos = pos)
              dfScaleTrend <- prior@nuDelta@.Data
              scaleScaleTrend <- prior@ADelta@.Data
              pos <- pos + 1L
              damp <- makeOutputPriorDamp(pos = pos)
              pos <- pos + 1L
              season <- makeOutputStateDLM(iterator = iterator,
                                           metadata = metadata,
                                           nSeason = nSeason,
                                           iAlong = iAlong,
                                           pos = pos,
                                           strucZeroArray = strucZeroArray,
                                           margin = margin)
              pos <- pos + (K + 1L) * L * nSeason
              scaleSeason <- makeOutputPriorScale(pos = pos)
              dfScaleSeason <- prior@nuSeason@.Data
              scaleScaleSeason <- prior@ASeason@.Data
              pos <- pos + 1L
              coef <- makeOutputPriorCoef(Z = Z,
                                          pos = pos)
              meanCoef <- prior@meanEtaCoef@.Data
              dfCoef <- prior@nuEtaCoef@.Data
              scaleCoef <- prior@AEtaCoef@.Data
              pos <- pos + P
              dfError <- prior@nuBeta@.Data
              scaleError <- makeOutputPriorScale(pos = pos)
              dfScaleError <- prior@nuTau@.Data
              scaleScaleError <- prior@ATau@.Data
              list(level = level,
                   scaleLevel = scaleLevel,
                   dfScaleLevel = dfScaleLevel,
                   scaleScaleLevel = scaleScaleLevel,
                   trend = trend,
                   scaleTrend = scaleTrend,
                   dfScaleTrend = dfScaleTrend,
                   scaleScaleTrend = scaleScaleTrend,
                   damp = damp,
                   season = season,
                   scaleSeason = scaleSeason,
                   dfScaleSeason = dfScaleSeason,
                   scaleScaleSeason = scaleScaleSeason,
                   coef = coef,
                   meanCoef = meanCoef,
                   dfCoef = dfCoef,
                   scaleCoef = scaleCoef,
                   dfError = dfError,
                   scaleError = scaleError,
                   dfScaleError = dfScaleError,
                   scaleScaleError = scaleScaleError)
          })

## Known

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "KnownCertain",
                    metadata = "MetaData"),
          function(prior, metadata, pos) {
              alpha <- prior@alphaKnown@.Data
              .Data <- array(alpha,
                             dim = dim(metadata),
                             dimnames = dimnames(metadata))
              mean <- methods::new("Values",
                          .Data = .Data,
                          metadata = metadata)
              list(mean = mean)
          })

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "KnownUncertain",
                    metadata = "MetaData"),
          function(prior, metadata, pos) {
              alpha <- prior@alphaKnown@.Data
              A <- prior@AKnownVec@.Data
              .Data.mean <- array(alpha,
                                  dim = dim(metadata),
                                  dimnames = dimnames(metadata))
              .Data.sd <- array(A,
                                dim = dim(metadata),
                                dimnames = dimnames(metadata))
              mean <- methods::new("Values",
                          .Data = .Data.mean,
                          metadata = metadata)
              sd <- methods::new("Values",
                        .Data = .Data.sd,
                        metadata = metadata)
              list(mean = mean,
                   sd = sd)
          })


## Mix

## HAS_TESTS
setMethod("makeOutputPrior",
          signature(prior = "MixNormZero",
                    metadata = "MetaData"),
          function(prior, metadata, pos) {
              J <- prior@J@.Data
              iAlong <- prior@iAlong
              dim.beta <- prior@dimBeta
              n.beta.no.along <- prior@nBetaNoAlongMix
              index.class.max <- prior@indexClassMaxMix@.Data
              n.along <- dim.beta[iAlong]
              metadata.vectors <- makeMetadataVectorsMix(metadata = metadata,
                                                         iAlong = iAlong,
                                                         indexClassMax = index.class.max)
              metadata.weights <- makeMetadataWeightsMix(metadata = metadata,
                                                         iAlong = iAlong,
                                                         indexClassMax = index.class.max)
              ## prodVectorsMix
              components <- Skeleton(metadata = metadata.vectors,
                                     first = pos)
              pos <- pos + n.beta.no.along * index.class.max
              ## omegaVectorsMix
              scaleComponents <- makeOutputPriorScale(pos = pos)
              pos <- pos + 1L
              ## weightMix
              weights <- Skeleton(metadata = metadata.weights,
                                  first = pos)
              pos <- pos + n.along * index.class.max
              ## componentWeightMix
              level1 <- Skeleton(metadata = metadata.weights,
                                   first = pos)
              pos <- pos + n.along * index.class.max
              ## omegaComponentWeightMix
              scale1 <- makeOutputPriorScale(pos = pos)
              pos <- pos + 1L
              ## levelComponentWeightMix
              level2 <- Skeleton(metadata = metadata.weights,
                                   first = pos)
              pos <- pos + n.along * index.class.max
              ## meanLevelComponentWeightMix
              mean <- Skeleton(first = pos)
              pos <- pos + 1L
              ## phiMix
              damp <- Skeleton(first = pos)
              pos <- pos + 1L
              ## omegaLevelComponentWeightMix
              scale2 <- makeOutputPriorScale(pos = pos)
              pos <- pos + 1L
              ## tau
              scaleError <- makeOutputPriorScale(pos = pos)
              dfScaleError <- prior@nuTau@.Data
              scaleScaleError <- prior@ATau@.Data
              ## return
              list(components = components,
                   scaleComponents = scaleComponents,
                   weights = weights,
                   level1 = level1,
                   scale1 = scale1,
                   level2 = level2,
                   mean = mean,
                   damp = damp,
                   scale2 = scale2,
                   scaleError = scaleError,
                   dfScaleError = dfScaleError,
                   scaleScaleError = scaleScaleError)
          })



## NO_TESTS
setMethod("makeOutputPrior",
          signature(prior = "Zero",
                    metadata = "ANY"),
          function(prior) {
              NULL
          })



## predictPrior ###########################################################


## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "ExchFixed"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_ExchFixed_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior
              }
          })


## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "ExchNormZero"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_ExchNormZero_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "ExchRobustZero"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_ExchRobustZero_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior <- predictUBeta(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "ExchNormCov"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_ExchNormCov_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "ExchRobustCov"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_ExchRobustCov_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior <- predictUBeta(prior)
                  prior
              }
          })


## DLMPredict - Norm, Zero

## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "DLMNoTrendNormZeroNoSeasonPredict"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_DLMNoTrendNormZeroNoSeasonPredict_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior <- predictAlphaDLMNoTrend(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "DLMWithTrendNormZeroNoSeasonPredict"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_DLMWithTrendNormZeroNoSeasonPredict_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior <- predictAlphaDeltaDLMWithTrend(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "DLMNoTrendNormZeroWithSeasonPredict"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_DLMNoTrendNormZeroWithSeasonPredict_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior <- predictAlphaDLMNoTrend(prior)
                  prior <- predictSeason(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "DLMWithTrendNormZeroWithSeasonPredict"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_DLMWithTrendNormZeroWithSeasonPredict_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior <- predictAlphaDeltaDLMWithTrend(prior)
                  prior <- predictSeason(prior)
                  prior
              }
          })




## DLMPredict - Norm, Cov (all identical to methods without covariates)

## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "DLMNoTrendNormCovNoSeasonPredict"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_DLMNoTrendNormCovNoSeasonPredict_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior <- predictAlphaDLMNoTrend(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "DLMWithTrendNormCovNoSeasonPredict"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_DLMWithTrendNormCovNoSeasonPredict_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior <- predictAlphaDeltaDLMWithTrend(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "DLMNoTrendNormCovWithSeasonPredict"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_DLMNoTrendNormCovWithSeasonPredict_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior <- predictAlphaDLMNoTrend(prior)
                  prior <- predictSeason(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "DLMWithTrendNormCovWithSeasonPredict"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_DLMWithTrendNormCovWithSeasonPredict_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior <- predictAlphaDeltaDLMWithTrend(prior)
                  prior <- predictSeason(prior)
                  prior
              }
          })


## DLMPredict - Robust, Zero

## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "DLMNoTrendRobustZeroNoSeasonPredict"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_DLMNoTrendRobustZeroNoSeasonPredict_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior <- predictAlphaDLMNoTrend(prior)
                  prior <- predictUBeta(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "DLMWithTrendRobustZeroNoSeasonPredict"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_DLMWithTrendRobustZeroNoSeasonPredict_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior <- predictAlphaDeltaDLMWithTrend(prior)
                  prior <- predictUBeta(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "DLMNoTrendRobustZeroWithSeasonPredict"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_DLMNoTrendRobustZeroWithSeasonPredict_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior <- predictAlphaDLMNoTrend(prior)
                  prior <- predictSeason(prior)
                  prior <- predictUBeta(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "DLMWithTrendRobustZeroWithSeasonPredict"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_DLMWithTrendRobustZeroWithSeasonPredict_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior <- predictAlphaDeltaDLMWithTrend(prior)
                  prior <- predictSeason(prior)
                  prior <- predictUBeta(prior)
                  prior
              }
          })




## DLMPredict - Robust, Cov (all identical to methods without covariates)

## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "DLMNoTrendRobustCovNoSeasonPredict"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_DLMNoTrendRobustCovNoSeasonPredict_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior <- predictAlphaDLMNoTrend(prior)
                  prior <- predictUBeta(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "DLMWithTrendRobustCovNoSeasonPredict"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_DLMWithTrendRobustCovNoSeasonPredict_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior <- predictAlphaDeltaDLMWithTrend(prior)
                  prior <- predictUBeta(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "DLMNoTrendRobustCovWithSeasonPredict"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_DLMNoTrendRobustCovWithSeasonPredict_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior <- predictAlphaDLMNoTrend(prior)
                  prior <- predictSeason(prior)
                  prior <- predictUBeta(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "DLMWithTrendRobustCovWithSeasonPredict"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_DLMWithTrendRobustCovWithSeasonPredict_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior <- predictAlphaDeltaDLMWithTrend(prior)
                  prior <- predictSeason(prior)
                  prior <- predictUBeta(prior)
                  prior
              }
          })


## Known

## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "KnownCertain"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_KnownCertain_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "KnownUncertain"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_KnownUncertain_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior
              }
          })


## Mix

## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "MixNormZeroPredict"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_MixNormZero_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior <- predictLevelComponentWeightMix(prior)
                  prior <- predictComponentWeightMix(prior)
                  prior <- updateWeightMix(prior)
                  prior <- predictIndexClassMix(prior)
                  prior <- updateIndexClassMaxUsedMix(prior)
                  prior <- updateAlphaMix(prior)
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("predictPrior",
          signature(prior = "Zero"),
          function(prior, useC = FALSE, useSpecific = FALSE) {
              methods::validObject(prior)
              if (useC) {
                  if (useSpecific)
                      .Call(predictPrior_Zero_R, prior)
                  else
                      .Call(predictPrior_R, prior)
              }
              else {
                  prior
              }
          })


## printPriorEqns ####################################################################

setMethod("printPriorEqns",
          signature(object = "DLM"),
          function(object, name = NULL, order = 1L) {
              has.trend <- methods::is(object, "WithTrendMixin")
              has.covariates <- object@hasCovariates@.Data
              has.season <- object@hasSeason@.Data
              printDLMEqns(object = object,
                           name = name,
                           order = order,
                           hasTrend = has.trend,
                           hasCovariates = has.covariates,
                           hasSeason = has.season)
          })

setMethod("printPriorEqns",
          signature(object = "Exch"),
          function(object, name = NULL, order = 1L) {
              has.covariates <- object@hasCovariates@.Data
              printExchEqns(object = object,
                            name = name,
                            hasCovariates = has.covariates)
          })

setMethod("printPriorEqns",
          signature(object = "ExchFixed"),
          function(object, name = NULL, order = 1L) {
              printExchFixedEqns(object = object,
                                 name = name)
          })

setMethod("printPriorEqns",
          signature(object = "Mix"),
          function(object, name = NULL, order = 1L) {
              has.covariates <- object@hasCovariates@.Data
              printMixEqns(object = object,
                           name = name,
                           hasCovariates = has.covariates)
          })

setMethod("printPriorEqns",
          signature(object = "TimeInvariant"),
          function(object, name = NULL, order = 1L) {
              cat(gettextf("-- values for '%s' held constant --\n",
                           name))
          })

setMethod("printPriorEqns",
          signature(object = "Zero"),
          function(object, name = NULL, order = 1L) {
              printZeroEqns(name)
          })



## printPriorIntercept ###############################################################

setMethod("printPriorIntercept",
          signature(object = "ExchFixed"),
          function(object) {
              sd <- object@tau@.Data
              cat("     (Intercept) ~ N(0, ", format(sd, digits = 4), "^2)\n", sep = "")
          })

setMethod("printPriorIntercept",
          signature(object = "TimeInvariant"),
          function(object) {
              cat(gettextf("-- values for '%s' held constant --\n",
                           "(Intercept)"))
          })


## rescalePairPriors ##################################################################

## HAS_TESTS
setMethod("rescalePairPriors",
          signature(priorHigh = "Exchangeable",
                    priorLow = "Exchangeable"),
          function(priorHigh, priorLow, skeletonBetaHigh, skeletonBetaLow,
                   skeletonsPriorHigh, skeletonsPriorLow,
                   adjustments, prefixAdjustments,
                   filename, nIteration, lengthIter) {
              metadata.high <- skeletonBetaHigh@metadata
              metadata.low <- skeletonBetaLow@metadata
              names.high <- names(metadata.high)
              names.low <- names(metadata.low)
              if (!all(names.low %in% names.high))
                  return(NULL)
              beta.high <- fetchResults(object = skeletonBetaHigh,
                                        filename = filename,
                                        iterations = NULL,
                                        nIteration = nIteration,
                                        lengthIter = lengthIter)
              beta.low <- fetchResults(object = skeletonBetaLow,
                                       filename = filename,
                                       iterations = NULL,
                                       nIteration = nIteration,
                                       lengthIter = lengthIter)
              names.high.only <- setdiff(names.high, names.low)
              means.shared <- collapseDimension(beta.high,
                                                dimension = names.high.only,
                                                weights = 1,
                                                na.rm = TRUE)
              rescaleAndWriteBetas(high = beta.high,
                                   low = beta.low,
                                   adj = means.shared,
                                   skeletonHigh = skeletonBetaHigh,
                                   skeletonLow = skeletonBetaLow,
                                   filename = filename,
                                   nIteration = nIteration,
                                   lengthIter = lengthIter)
              recordAdjustments(priorHigh = priorHigh,
                                priorLow = priorLow,
                                namesHigh = names.high,
                                namesLow = names.low,
                                adj = means.shared,
                                adjustments = adjustments,
                                prefixAdjustments = prefixAdjustments)
              NULL
          })

## HAS_TESTS
setMethod("rescalePairPriors",
          signature(priorHigh = "Exchangeable",
                    priorLow = "DLM"),
          function(priorHigh, priorLow,
                   skeletonBetaHigh, skeletonBetaLow,
                   skeletonsPriorHigh, skeletonsPriorLow,
                   adjustments, prefixAdjustments,
                   filename, nIteration, lengthIter) {
              i.along.low <- priorLow@iAlong
              phi.low <- priorLow@phi
              phi.known.low <- priorLow@phiKnown@.Data
              metadata.high <- skeletonBetaHigh@metadata
              metadata.low <- skeletonBetaLow@metadata
              skeleton.level.low <- skeletonsPriorLow$level
              has.trend.low <- methods::is(priorLow, "WithTrendMixin")
              level.non.stationary <- has.trend.low || (phi.known.low && isTRUE(all.equal(phi.low, 1)))
              if (!level.non.stationary)
                  return(NULL)
              names.high <- names(metadata.high)
              names.low <- names(metadata.low)
              names.low <- names.low[-i.along.low]
              if (!all(names.low %in% names.high))
                  return(NULL)
              beta.high <- fetchResults(object = skeletonBetaHigh,
                                        filename = filename,
                                        iterations = NULL,
                                        nIteration = nIteration,
                                        lengthIter = lengthIter)
              beta.low <- fetchResults(object = skeletonBetaLow,
                                       filename = filename,
                                       iterations = NULL,
                                       nIteration = nIteration,
                                       lengthIter = lengthIter)
              level.low <- readStateDLMFromFile(skeleton = skeleton.level.low,
                                                filename = filename,
                                                iterations = NULL,
                                                nIteration = nIteration,
                                                lengthIter = lengthIter,
                                                only0 = FALSE)
              names.high.only <- setdiff(names.high, names.low)
              means.shared <- collapseDimension(beta.high,
                                                dimension = names.high.only,
                                                weights = 1,
                                                na.rm = TRUE)
              rescaleAndWriteBetas(high = beta.high,
                                   low = beta.low,
                                   adj = means.shared,
                                   skeletonHigh = skeletonBetaHigh,
                                   skeletonLow = skeletonBetaLow,
                                   filename = filename,
                                   nIteration = nIteration,
                                   lengthIter = lengthIter)
              recordAdjustments(priorHigh = priorHigh,
                                priorLow = priorLow,
                                namesHigh = names.high,
                                namesLow = names.low,
                                adj = means.shared,
                                adjustments = adjustments,
                                prefixAdjustments = prefixAdjustments)
              level.low <- level.low + means.shared
              overwriteValuesOnFile(object = level.low,
                                    skeleton = skeleton.level.low,
                                    filename = filename,
                                    nIteration = nIteration,
                                    lengthIter = lengthIter)
              NULL
          })


setMethod("rescalePairPriors",
          signature(priorHigh = "DLM",
                    priorLow = "Exchangeable"),
          function(priorHigh, priorLow,
                   skeletonBetaHigh, skeletonBetaLow,
                   skeletonsPriorHigh, skeletonsPriorLow,
                   adjustments, prefixAdjustments,
                   filename, nIteration, lengthIter) {
              i.along.high <- priorHigh@iAlong
              phi.high <- priorHigh@phi
              phi.known.high <- priorHigh@phiKnown@.Data
              metadata.high <- skeletonBetaHigh@metadata
              metadata.low <- skeletonBetaLow@metadata
              skeleton.level.high <- skeletonsPriorHigh$level
              has.trend.high <- methods::is(priorHigh, "WithTrendMixin")
              level.non.stationary <- has.trend.high || (phi.known.high && isTRUE(all.equal(phi.high, 1)))
              if (!level.non.stationary)
                  return(NULL)
              names.high <- names(metadata.high)
              names.low <- names(metadata.low)
              names.high <- names.high[-i.along.high]
              if (!all(names.low %in% names.high))
                  return(NULL)
              beta.high <- fetchResults(object = skeletonBetaHigh,
                                        filename = filename,
                                        iterations = NULL,
                                        nIteration = nIteration,
                                        lengthIter = lengthIter)
              beta.low <- fetchResults(object = skeletonBetaLow,
                                       filename = filename,
                                       iterations = NULL,
                                       nIteration = nIteration,
                                       lengthIter = lengthIter)
              level.0.high <- readStateDLMFromFile(skeleton = skeleton.level.high,
                                                   filename = filename,
                                                   iterations = NULL,
                                                   nIteration = nIteration,
                                                   lengthIter = lengthIter,
                                                   only0 = TRUE)
              level.high <- readStateDLMFromFile(skeleton = skeleton.level.high,
                                                 filename = filename,
                                                 iterations = NULL,
                                                 nIteration = nIteration,
                                                 lengthIter = lengthIter,
                                                 only0 = FALSE)
              names.high.only <- setdiff(names.high, names.low)
              means.shared <- collapseDimension(level.0.high,
                                                dimension = names.high.only,
                                                weights = 1,
                                                na.rm = TRUE)
              rescaleAndWriteBetas(high = beta.high,
                                   low = beta.low,
                                   adj = means.shared,
                                   skeletonHigh = skeletonBetaHigh,
                                   skeletonLow = skeletonBetaLow,
                                   filename = filename,
                                   nIteration = nIteration,
                                   lengthIter = lengthIter)
              recordAdjustments(priorHigh = priorHigh,
                                priorLow = priorLow,
                                namesHigh = names.high,
                                namesLow = names.low,
                                adj = means.shared,
                                adjustments = adjustments,
                                prefixAdjustments = prefixAdjustments)
              level.high <- level.high - means.shared
              overwriteValuesOnFile(object = level.high,
                                    skeleton = skeleton.level.high,
                                    filename = filename,
                                    nIteration = nIteration,
                                    lengthIter = lengthIter)
              NULL
          })

## HAS_TESTS
setMethod("rescalePairPriors",
          signature(priorHigh = "DLM",
                    priorLow = "DLM"),
          function(priorHigh, priorLow,
                   skeletonBetaHigh, skeletonBetaLow,
                   skeletonsPriorHigh, skeletonsPriorLow,
                   adjustments, prefixAdjustments,
                   filename, nIteration, lengthIter) {
              ## extract parameters
              i.along.high <- priorHigh@iAlong
              i.along.low <- priorLow@iAlong
              phi.high <- priorHigh@phi
              phi.low <- priorLow@phi
              phi.known.high <- priorHigh@phiKnown@.Data
              phi.known.low <- priorLow@phiKnown@.Data
              metadata.high <- skeletonBetaHigh@metadata
              metadata.low <- skeletonBetaLow@metadata
              skeleton.level.high <- skeletonsPriorHigh$level
              skeleton.level.low <- skeletonsPriorLow$level
              has.trend.high <- methods::is(priorHigh, "WithTrendMixin")
              has.trend.low <- methods::is(priorLow, "WithTrendMixin")
              ## if neither series non-stationary, no rescaling needed
              if (has.trend.high)
                  level.non.stationary.high <- TRUE
              else
                  level.non.stationary.high <- (phi.known.high && isTRUE(all.equal(phi.high, 1)))
              if (has.trend.low)
                  level.non.stationary.low <- TRUE
              else
                  level.non.stationary.low <- (phi.known.low && isTRUE(all.equal(phi.low, 1)))
              at.least.one.level.is.stationary <- !level.non.stationary.high || !level.non.stationary.low
              if (at.least.one.level.is.stationary)
                  return(NULL)
              ## if lower-order term has dimension not in higher-order term, no rescaling
              names.high <- names(metadata.high)
              names.low <- names(metadata.low)
              names.high <- names.high[-i.along.high]
              names.low <- names.low[-i.along.low]
              if (!all(names.low %in% names.high))
                  return(NULL)
              ## extract parameter estimates
              beta.high <- fetchResults(object = skeletonBetaHigh,
                                        filename = filename,
                                        iterations = NULL,
                                        nIteration = nIteration,
                                        lengthIter = lengthIter)
              beta.low <- fetchResults(object = skeletonBetaLow,
                                       filename = filename,
                                       iterations = NULL,
                                       nIteration = nIteration,
                                       lengthIter = lengthIter)
              level.high <- readStateDLMFromFile(skeleton = skeleton.level.high,
                                                 filename = filename,
                                                 iterations = NULL,
                                                 nIteration = nIteration,
                                                 lengthIter = lengthIter,
                                                 only0 = FALSE)
              level.low <- readStateDLMFromFile(skeleton = skeleton.level.low,
                                                filename = filename,
                                                iterations = NULL,
                                                nIteration = nIteration,
                                                lengthIter = lengthIter,
                                                only0 = FALSE)
              level.0.high <- readStateDLMFromFile(skeleton = skeleton.level.high,
                                                   filename = filename,
                                                   iterations = NULL,
                                                   nIteration = nIteration,
                                                   lengthIter = lengthIter,
                                                   only0 = TRUE)
              level.0.low <- readStateDLMFromFile(skeleton = skeleton.level.low,
                                                  filename = filename,
                                                  iterations = NULL,
                                                  nIteration = nIteration,
                                                  lengthIter = lengthIter,
                                                  only0 = TRUE)
              ## calculate adjustments for levels
              names.high.only <- setdiff(names.high, names.low)
              means.shared.level <- collapseDimension(level.0.high,
                                                      dimension = names.high.only,
                                                      weights = 1,
                                                      na.rm = TRUE)
              ## rescale betas and record them
              rescaleAndWriteBetas(high = beta.high,
                                   low = beta.low,
                                   adj = means.shared.level,
                                   skeletonHigh = skeletonBetaHigh,
                                   skeletonLow = skeletonBetaLow,
                                   filename = filename,
                                   nIteration = nIteration,
                                   lengthIter = lengthIter)
              ## adjust level and record
              level.high <- level.high - means.shared.level
              level.low <- level.low + means.shared.level
              overwriteValuesOnFile(object = level.high,
                                    skeleton = skeleton.level.high,
                                    filename = filename,
                                    nIteration = nIteration,
                                    lengthIter = lengthIter)
              overwriteValuesOnFile(object = level.low,
                                    skeleton = skeleton.level.low,
                                    filename = filename,
                                    nIteration = nIteration,
                                    lengthIter = lengthIter)
              NULL
          })


## rescalePred ########################################################################

setMethod("rescalePred",
          signature(prior = "Exchangeable"),
          function(prior, skeleton, adjustment,
                   filename, nIteration, lengthIter) {
              beta <- fetchResults(object = skeleton,
                                   filename = filename,
                                   iterations = NULL,
                                   nIteration = nIteration,
                                   lengthIter = lengthIter)
              beta <- beta + adjustment
              overwriteValuesOnFile(object = beta,
                                    skeleton = skeleton,
                                    filename = filename,
                                    nIteration = nIteration,
                                    lengthIter = lengthIter)
          })



## rescalePriorIntercept ##############################################################

## HAS_TESTS
setMethod("rescalePriorIntercept",
          signature(priorTerm = "Exchangeable"),
          function(priorTerm, priorIntercept, skeletonBetaTerm,
                   skeletonBetaIntercept, skeletonsPriorTerm,
                   adjustments, prefixAdjustments,
                   filename, nIteration, lengthIter) {
              metadata.term <- skeletonBetaTerm@metadata
              has.covariates <- (methods::.hasSlot(priorTerm, "hasCovariates")
                  && priorTerm@hasCovariates@.Data)
              names.term <- names(metadata.term)
              name.intercept <- "(Intercept)"
              beta.term <- fetchResults(object = skeletonBetaTerm,
                                        filename = filename,
                                        iterations = NULL,
                                        nIteration = nIteration,
                                        lengthIter = lengthIter)
              beta.intercept <- fetchResults(object = skeletonBetaIntercept,
                                             filename = filename,
                                             iterations = NULL,
                                             nIteration = nIteration,
                                             lengthIter = lengthIter)
              if (has.covariates) {
                  skeleton.covariates <- skeletonsPriorTerm$coef
                  adj <- readCoefInterceptFromFile(skeleton = skeleton.covariates,
                                                   filename = filename,
                                                   nIteration = nIteration,
                                                   lengthIter = lengthIter)
                  setCoefInterceptToZeroOnFile(skeleton = skeleton.covariates,
                                               filename = filename,
                                               nIteration = nIteration,
                                               lengthIter = lengthIter)
              }
              else {
                  adj <- mean(beta.term, na.rm = TRUE)
              }
              rescaleAndWriteBetas(high = beta.term,
                                   low = beta.intercept,
                                   adj = adj,
                                   skeletonHigh = skeletonBetaTerm,
                                   skeletonLow = skeletonBetaIntercept,
                                   filename = filename,
                                   nIteration = nIteration,
                                   lengthIter = lengthIter)
              recordAdjustments(priorHigh = priorTerm,
                                priorLow = priorIntercept,
                                namesHigh = names.term,
                                namesLow = name.intercept,
                                adj = adj,
                                adjustments = adjustments,
                                prefixAdjustments = prefixAdjustments)
              NULL
          })

## HAS_TESTS
setMethod("rescalePriorIntercept",
          signature(priorTerm = "DLM"),
          function(priorTerm, priorIntercept, skeletonBetaTerm,
                   skeletonBetaIntercept, skeletonsPriorTerm,
                   adjustments, prefixAdjustments,
                   filename, nIteration, lengthIter) {
              phi.term <- priorTerm@phi
              phi.known.term <- priorTerm@phiKnown@.Data
              metadata.term <- skeletonBetaTerm@metadata
              has.covariates <- (methods::.hasSlot(priorTerm, "hasCovariates")
                  && priorTerm@hasCovariates@.Data)
              skeleton.level.term <- skeletonsPriorTerm$level
              has.trend.term <- methods::is(priorTerm, "WithTrendMixin")
              non.stationary <- has.trend.term || (phi.known.term && isTRUE(all.equal(phi.term, 1)))
              name.intercept <- "(Intercept)"
              if (non.stationary) {
                  names.term <- names(metadata.term)
                  beta.term <- fetchResults(object = skeletonBetaTerm,
                                            filename = filename,
                                            iterations = NULL,
                                            nIteration = nIteration,
                                            lengthIter = lengthIter)
                  beta.intercept <- fetchResults(object = skeletonBetaIntercept,
                                                 filename = filename,
                                                 iterations = NULL,
                                                 nIteration = nIteration,
                                                 lengthIter = lengthIter)
                  level.term <- readStateDLMFromFile(skeleton = skeleton.level.term,
                                                     filename = filename,
                                                     iterations = NULL,
                                                     nIteration = nIteration,
                                                     lengthIter = lengthIter,
                                                     only0 = FALSE)
                  level.0.term <- readStateDLMFromFile(skeleton = skeleton.level.term,
                                                       filename = filename,
                                                       iterations = NULL,
                                                       nIteration = nIteration,
                                                       lengthIter = lengthIter,
                                                       only0 = TRUE)
                  mean.level.0 <- mean(level.0.term, na.rm = TRUE)
                  rescaleAndWriteBetas(high = beta.term,
                                       low = beta.intercept,
                                       adj = mean.level.0,
                                       skeletonHigh = skeletonBetaTerm,
                                       skeletonLow = skeletonBetaIntercept,
                                       filename = filename,
                                       nIteration = nIteration,
                                       lengthIter = lengthIter)
                  level.term <- level.term - mean.level.0
                  overwriteValuesOnFile(object = level.term,
                                        skeleton = skeleton.level.term,
                                        filename = filename,
                                        nIteration = nIteration,
                                        lengthIter = lengthIter)
                  recordAdjustments(priorHigh = priorTerm,
                                    priorLow = priorIntercept,
                                    namesHigh = names.term,
                                    namesLow = name.intercept,
                                    adj = mean.level.0,
                                    adjustments = adjustments,
                                    prefixAdjustments = prefixAdjustments)
              }
              if (has.covariates) {
                  beta.term <- fetchResults(object = skeletonBetaTerm,
                                            filename = filename,
                                            iterations = NULL,
                                            nIteration = nIteration,
                                            lengthIter = lengthIter)
                  beta.intercept <- fetchResults(object = skeletonBetaIntercept,
                                                 filename = filename,
                                                 iterations = NULL,
                                                 nIteration = nIteration,
                                                 lengthIter = lengthIter)
                  skeleton.covariates <- skeletonsPriorTerm$coef
                  coef.intercept <- readCoefInterceptFromFile(skeleton = skeleton.covariates,
                                                              filename = filename,
                                                              nIteration = nIteration,
                                                              lengthIter = lengthIter)
                  rescaleAndWriteBetas(high = beta.term,
                                       low = beta.intercept,
                                       adj = coef.intercept,
                                       skeletonHigh = skeletonBetaTerm,
                                       skeletonLow = skeletonBetaIntercept,
                                       filename = filename,
                                       nIteration = nIteration,
                                       lengthIter = lengthIter)
                  recordAdjustments(priorHigh = priorTerm,
                                    priorLow = priorIntercept,
                                    namesHigh = names.term,
                                    namesLow = name.intercept,
                                    adj = coef.intercept,
                                    adjustments = adjustments,
                                    prefixAdjustments = prefixAdjustments)
                  setCoefInterceptToZeroOnFile(skeleton = skeleton.covariates,
                                               filename = filename,
                                               nIteration = nIteration,
                                               lengthIter = lengthIter)
              }
              NULL
          })




## rescaleSeason ######################################################################

## HAS_TESTS
setMethod("rescaleSeason",
          signature(prior = "SeasonMixin"),
          function(prior, skeleton, filename, nIteration, lengthIter) {
              i.along <- prior@iAlong
              skeleton.season <- skeleton$season
              skeleton.level <- skeleton$level
              season <- readStateDLMFromFile(skeleton = skeleton.season,
                                             filename = filename,
                                             iterations = NULL,
                                             nIteration = nIteration,
                                             lengthIter = lengthIter,
                                             only0 = FALSE)
              season.0 <- readStateDLMFromFile(skeleton = skeleton.season,
                                               filename = filename,
                                               iterations = NULL,
                                               nIteration = nIteration,
                                               lengthIter = lengthIter,
                                               only0 = TRUE)
              level <- readStateDLMFromFile(skeleton = skeleton.level,
                                            filename = filename,
                                            iterations = NULL,
                                            nIteration = nIteration,
                                            lengthIter = lengthIter,
                                            only0 = FALSE)
              means <- collapseDimension(season.0,
                                         dimension = 1L,
                                         weights = 1,
                                         na.rm = TRUE)
              season <- season - means
              level <- level + means
              overwriteValuesOnFile(object = season,
                                    skeleton = skeleton.season,
                                    filename = filename,
                                    nIteration = nIteration,
                                    lengthIter = lengthIter)
              overwriteValuesOnFile(object = level,
                                    skeleton = skeleton.level,
                                    filename = filename,
                                    nIteration = nIteration,
                                    lengthIter = lengthIter)
              NULL
          })




## transferParamPrior #################################################################

## Exch

## TRANSLATED
## HAS_TESTS
setMethod("transferParamPrior",
          signature(prior = "ExchNormZero"),
          function(prior, values, useC = FALSE, useSpecific = FALSE) {
              ## prior
              methods::validObject(prior)
              ## values
              stopifnot(is.double(values))
              stopifnot(identical(length(values), 1L))
              stopifnot(!is.na(values))
              stopifnot(values > 0)
              if (useC) {
                  if (useSpecific)
                      .Call(transferParamPrior_ExchNormZero_R, prior, values)
                  else
                      .Call(transferParamPrior_R, prior, values)
              }
              else {
                  prior@tau@.Data <- values
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("transferParamPrior",
          signature(prior = "ExchNormCov"),
          function(prior, values, useC = FALSE, useSpecific = FALSE) {
              ## prior
              methods::validObject(prior)
              ## values
              stopifnot(is.double(values))
              stopifnot(identical(length(values), prior@P@.Data + 1L))
              stopifnot(!any(is.na(values)))
              stopifnot(values[length(values)] > 0)
              if (useC) {
                  if (useSpecific)
                      .Call(transferParamPrior_ExchNormCov_R, prior, values)
                  else
                      .Call(transferParamPrior_R, prior, values)
              }
              else {
                  P <- prior@P@.Data
                  offset <- 1L
                  prior@eta@.Data <- values[offset : (offset + P - 1L)]
                  offset <- offset + P
                  prior@tau@.Data <- values[offset]
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("transferParamPrior",
          signature(prior = "ExchRobustZero"),
          function(prior, values, useC = FALSE, useSpecific = FALSE) {
              ## prior
              methods::validObject(prior)
              ## values
              stopifnot(is.double(values))
              stopifnot(!any(is.na(values)))
              stopifnot(all(values > 0))
              if (useC) {
                  if (useSpecific)
                      .Call(transferParamPrior_ExchRobustZero_R, prior, values)
                  else
                      .Call(transferParamPrior_R, prior, values)
              }
              else {
                  offset <- 1L
                  prior@tau@.Data <- values[offset]
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("transferParamPrior",
          signature(prior = "ExchRobustCov"),
          function(prior, values, useC = FALSE, useSpecific = FALSE) {
              ## prior
              methods::validObject(prior)
              ## values
              stopifnot(is.double(values))
              stopifnot(!any(is.na(values)))
              stopifnot(all(values > 0))
              if (useC) {
                  if (useSpecific)
                      .Call(transferParamPrior_ExchRobustCov_R, prior, values)
                  else
                      .Call(transferParamPrior_R, prior, values)
              }
              else {
                  P <- prior@P@.Data
                  offset <- 1L
                  prior@eta@.Data <- values[offset : (offset + P - 1L)]
                  offset <- offset + P
                  prior@tau@.Data <- values[offset]
                  prior
              }
          })


## DLM - Norm, Zero

## TRANSLATED
## HAS_TESTS
setMethod("transferParamPrior",
          signature(prior = "DLMNoTrendNormZeroNoSeasonPredict"),
          function(prior, values, useC = FALSE, useSpecific = FALSE) {
              ## prior
              methods::validObject(prior)
              ## values
              stopifnot(is.double(values))
              stopifnot(!any(is.na(values)))
              if (useC) {
                  if (useSpecific)
                      .Call(transferParamPrior_DLMNoTrendNormZeroNoSeasonPredict_R, prior, values)
                  else
                      .Call(transferParamPrior_R, prior, values)
              }
              else {
                  J.new <- prior@J@.Data
                  J.old <- prior@JOld@.Data
                  L <- prior@L@.Data
                  alpha <- prior@alphaDLM@.Data
                  iterator.new <- prior@iteratorState
                  iterator.old <- prior@iteratorStateOld
                  K.old <- J.old %/% L
                  offset <- 1L
                  prior@alphaDLM@.Data <- transferAlphaDelta0(state = alpha,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaAlpha@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@phi <- values[offset]
                  offset <- offset + 1L
                  prior@tau@.Data <- values[offset]
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("transferParamPrior",
          signature(prior = "DLMWithTrendNormZeroNoSeasonPredict"),
          function(prior, values, useC = FALSE, useSpecific = FALSE) {
              ## prior
              methods::validObject(prior)
              ## values
              stopifnot(is.double(values))
              stopifnot(!any(is.na(values)))
              if (useC) {
                  if (useSpecific)
                      .Call(transferParamPrior_DLMWithTrendNormZeroNoSeasonPredict_R, prior, values)
                  else
                      .Call(transferParamPrior_R, prior, values)
              }
              else {
                  J.new <- prior@J@.Data
                  J.old <- prior@JOld@.Data
                  L <- prior@L@.Data
                  alpha <- prior@alphaDLM@.Data
                  delta <- prior@deltaDLM@.Data
                  iterator.new <- prior@iteratorState
                  iterator.old <- prior@iteratorStateOld
                  K.old <- J.old %/% L
                  offset <- 1L
                  prior@alphaDLM@.Data <- transferAlphaDelta0(state = alpha,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaAlpha@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@deltaDLM@.Data <- transferAlphaDelta0(state = delta,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaDelta@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@phi <- values[offset]
                  offset <- offset + 1L
                  prior@tau@.Data <- values[offset]
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("transferParamPrior",
          signature(prior = "DLMNoTrendNormZeroWithSeasonPredict"),
          function(prior, values, useC = FALSE, useSpecific = FALSE) {
              ## prior
              methods::validObject(prior)
              ## values
              stopifnot(is.double(values))
              stopifnot(!any(is.na(values)))
              if (useC) {
                  if (useSpecific)
                      .Call(transferParamPrior_DLMNoTrendNormZeroWithSeasonPredict_R, prior, values)
                  else
                      .Call(transferParamPrior_R, prior, values)
              }
              else {
                  J.new <- prior@J@.Data
                  J.old <- prior@JOld@.Data
                  L <- prior@L@.Data
                  alpha <- prior@alphaDLM@.Data
                  s <- prior@s@.Data
                  n.season <- prior@nSeason@.Data
                  iterator.new <- prior@iteratorState
                  iterator.old <- prior@iteratorStateOld
                  K.old <- J.old %/% L
                  offset <- 1L
                  prior@alphaDLM@.Data <- transferAlphaDelta0(state = alpha,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaAlpha@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@phi <- values[offset]
                  offset <- offset + 1L
                  prior@s@.Data <- transferSeason0(s = s,
                                                   nSeason = n.season,
                                                   values = values,
                                                   offset = offset,
                                                   iteratorNew = iterator.new,
                                                   iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L * n.season
                  prior@omegaSeason@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@tau@.Data <- values[offset]
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("transferParamPrior",
          signature(prior = "DLMWithTrendNormZeroWithSeasonPredict"),
          function(prior, values, useC = FALSE, useSpecific = FALSE) {
              ## prior
              methods::validObject(prior)
              ## values
              stopifnot(is.double(values))
              stopifnot(!any(is.na(values)))
              if (useC) {
                  if (useSpecific)
                      .Call(transferParamPrior_DLMWithTrendNormZeroWithSeasonPredict_R, prior, values)
                  else
                      .Call(transferParamPrior_R, prior, values)
              }
              else {
                  J.new <- prior@J@.Data
                  J.old <- prior@JOld@.Data
                  L <- prior@L@.Data
                  alpha <- prior@alphaDLM@.Data
                  delta <- prior@deltaDLM@.Data
                  s <- prior@s@.Data
                  n.season <- prior@nSeason@.Data
                  iterator.new <- prior@iteratorState
                  iterator.old <- prior@iteratorStateOld
                  K.old <- J.old %/% L
                  offset <- 1L
                  prior@alphaDLM@.Data <- transferAlphaDelta0(state = alpha,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaAlpha@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@deltaDLM@.Data <- transferAlphaDelta0(state = delta,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaDelta@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@phi <- values[offset]
                  offset <- offset + 1L
                  prior@s@.Data <- transferSeason0(s = s,
                                                   nSeason = n.season,
                                                   values = values,
                                                   offset = offset,
                                                   iteratorNew = iterator.new,
                                                   iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L * n.season
                  prior@omegaSeason@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@tau@.Data <- values[offset]
                  prior
              }
          })


## DLM - Norm, Cov

## TRANSLATED
## HAS_TESTS
setMethod("transferParamPrior",
          signature(prior = "DLMNoTrendNormCovNoSeasonPredict"),
          function(prior, values, useC = FALSE, useSpecific = FALSE) {
              ## prior
              methods::validObject(prior)
              ## values
              stopifnot(is.double(values))
              stopifnot(!any(is.na(values)))
              if (useC) {
                  if (useSpecific)
                      .Call(transferParamPrior_DLMNoTrendNormCovNoSeasonPredict_R, prior, values)
                  else
                      .Call(transferParamPrior_R, prior, values)
              }
              else {
                  J.new <- prior@J@.Data
                  J.old <- prior@JOld@.Data
                  L <- prior@L@.Data
                  P <- prior@P@.Data
                  alpha <- prior@alphaDLM@.Data
                  iterator.new <- prior@iteratorState
                  iterator.old <- prior@iteratorStateOld
                  K.old <- J.old %/% L
                  offset <- 1L
                  prior@alphaDLM@.Data <- transferAlphaDelta0(state = alpha,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaAlpha@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@phi <- values[offset]
                  offset <- offset + 1L
                  prior@eta@.Data <- values[offset : (offset + P - 1L)]
                  offset <- offset + P
                  prior@tau@.Data <- values[offset]
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("transferParamPrior",
          signature(prior = "DLMWithTrendNormCovNoSeasonPredict"),
          function(prior, values, useC = FALSE, useSpecific = FALSE) {
              ## prior
              methods::validObject(prior)
              ## values
              stopifnot(is.double(values))
              stopifnot(!any(is.na(values)))
              if (useC) {
                  if (useSpecific)
                      .Call(transferParamPrior_DLMWithTrendNormCovNoSeasonPredict_R, prior, values)
                  else
                      .Call(transferParamPrior_R, prior, values)
              }
              else {
                  J.new <- prior@J@.Data
                  J.old <- prior@JOld@.Data
                  L <- prior@L@.Data
                  P <- prior@P@.Data
                  alpha <- prior@alphaDLM@.Data
                  delta <- prior@deltaDLM@.Data
                  iterator.new <- prior@iteratorState
                  iterator.old <- prior@iteratorStateOld
                  K.old <- J.old %/% L
                  offset <- 1L
                  prior@alphaDLM@.Data <- transferAlphaDelta0(state = alpha,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaAlpha@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@deltaDLM@.Data <- transferAlphaDelta0(state = delta,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaDelta@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@phi <- values[offset]
                  offset <- offset + 1L
                  prior@eta@.Data <- values[offset : (offset + P - 1L)]
                  offset <- offset + P
                  prior@tau@.Data <- values[offset]
                  prior
              }
          })


## TRANSLATED
## HAS_TESTS
setMethod("transferParamPrior",
          signature(prior = "DLMNoTrendNormCovWithSeasonPredict"),
          function(prior, values, useC = FALSE, useSpecific = FALSE) {
              ## prior
              methods::validObject(prior)
              ## values
              stopifnot(is.double(values))
              stopifnot(!any(is.na(values)))
              if (useC) {
                  if (useSpecific)
                      .Call(transferParamPrior_DLMNoTrendNormCovWithSeasonPredict_R, prior, values)
                  else
                      .Call(transferParamPrior_R, prior, values)
              }
              else {
                  J.new <- prior@J@.Data
                  J.old <- prior@JOld@.Data
                  L <- prior@L@.Data
                  P <- prior@P@.Data
                  alpha <- prior@alphaDLM@.Data
                  s <- prior@s@.Data
                  n.season <- prior@nSeason@.Data
                  iterator.new <- prior@iteratorState
                  iterator.old <- prior@iteratorStateOld
                  K.old <- J.old %/% L
                  offset <- 1L
                  prior@alphaDLM@.Data <- transferAlphaDelta0(state = alpha,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaAlpha@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@phi <- values[offset]
                  offset <- offset + 1L
                  prior@s@.Data <- transferSeason0(s = s,
                                                   nSeason = n.season,
                                                   values = values,
                                                   offset = offset,
                                                   iteratorNew = iterator.new,
                                                   iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L * n.season
                  prior@omegaSeason@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@eta@.Data <- values[offset : (offset + P - 1L)]
                  offset <- offset + P
                  prior@tau@.Data <- values[offset]
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("transferParamPrior",
          signature(prior = "DLMWithTrendNormCovWithSeasonPredict"),
          function(prior, values, useC = FALSE, useSpecific = FALSE) {
              ## prior
              methods::validObject(prior)
              ## values
              stopifnot(is.double(values))
              stopifnot(!any(is.na(values)))
              if (useC) {
                  if (useSpecific)
                      .Call(transferParamPrior_DLMWithTrendNormCovWithSeasonPredict_R, prior, values)
                  else
                      .Call(transferParamPrior_R, prior, values)
              }
              else {
                  J.new <- prior@J@.Data
                  J.old <- prior@JOld@.Data
                  L <- prior@L@.Data
                  P <- prior@P@.Data
                  alpha <- prior@alphaDLM@.Data
                  delta <- prior@deltaDLM@.Data
                  s <- prior@s@.Data
                  n.season <- prior@nSeason@.Data
                  iterator.new <- prior@iteratorState
                  iterator.old <- prior@iteratorStateOld
                  K.old <- J.old %/% L
                  offset <- 1L
                  prior@alphaDLM@.Data <- transferAlphaDelta0(state = alpha,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaAlpha@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@deltaDLM@.Data <- transferAlphaDelta0(state = delta,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaDelta@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@phi <- values[offset]
                  offset <- offset + 1L
                  prior@s@.Data <- transferSeason0(s = s,
                                                   nSeason = n.season,
                                                   values = values,
                                                   offset = offset,
                                                   iteratorNew = iterator.new,
                                                   iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L * n.season
                  prior@omegaSeason@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@eta@.Data <- values[offset : (offset + P - 1L)]
                  offset <- offset + P
                  prior@tau@.Data <- values[offset]
                  prior
              }
          })


## Robust, Zero

## TRANSLATED
## HAS_TESTS
setMethod("transferParamPrior",
          signature(prior = "DLMNoTrendRobustZeroNoSeasonPredict"),
          function(prior, values, useC = FALSE, useSpecific = FALSE) {
              ## prior
              methods::validObject(prior)
              ## values
              stopifnot(is.double(values))
              stopifnot(!any(is.na(values)))
              if (useC) {
                  if (useSpecific)
                      .Call(transferParamPrior_DLMNoTrendRobustZeroNoSeasonPredict_R, prior, values)
                  else
                      .Call(transferParamPrior_R, prior, values)
              }
              else {
                  J.new <- prior@J@.Data
                  J.old <- prior@JOld@.Data
                  L <- prior@L@.Data
                  alpha <- prior@alphaDLM@.Data
                  iterator.new <- prior@iteratorState
                  iterator.old <- prior@iteratorStateOld
                  K.old <- J.old %/% L
                  offset <- 1L
                  prior@alphaDLM@.Data <- transferAlphaDelta0(state = alpha,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaAlpha@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@phi <- values[offset]
                  offset <- offset + 1L
                  prior@tau@.Data <- values[offset]
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("transferParamPrior",
          signature(prior = "DLMWithTrendRobustZeroNoSeasonPredict"),
          function(prior, values, useC = FALSE, useSpecific = FALSE) {
              ## prior
              methods::validObject(prior)
              ## values
              stopifnot(is.double(values))
              stopifnot(!any(is.na(values)))
              if (useC) {
                  if (useSpecific)
                      .Call(transferParamPrior_DLMWithTrendRobustZeroNoSeasonPredict_R, prior, values)
                  else
                      .Call(transferParamPrior_R, prior, values)
              }
              else {
                  J.new <- prior@J@.Data
                  J.old <- prior@JOld@.Data
                  L <- prior@L@.Data
                  alpha <- prior@alphaDLM@.Data
                  delta <- prior@deltaDLM@.Data
                  iterator.new <- prior@iteratorState
                  iterator.old <- prior@iteratorStateOld
                  K.old <- J.old %/% L
                  offset <- 1L
                  prior@alphaDLM@.Data <- transferAlphaDelta0(state = alpha,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaAlpha@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@deltaDLM@.Data <- transferAlphaDelta0(state = delta,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaDelta@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@phi <- values[offset]
                  offset <- offset + 1L
                  prior@tau@.Data <- values[offset]
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("transferParamPrior",
          signature(prior = "DLMNoTrendRobustZeroWithSeasonPredict"),
          function(prior, values, useC = FALSE, useSpecific = FALSE) {
              ## prior
              methods::validObject(prior)
              ## values
              stopifnot(is.double(values))
              stopifnot(!any(is.na(values)))
              if (useC) {
                  if (useSpecific)
                      .Call(transferParamPrior_DLMNoTrendRobustZeroWithSeasonPredict_R, prior, values)
                  else
                      .Call(transferParamPrior_R, prior, values)
              }
              else {
                  J.new <- prior@J@.Data
                  J.old <- prior@JOld@.Data
                  L <- prior@L@.Data
                  alpha <- prior@alphaDLM@.Data
                  s <- prior@s@.Data
                  n.season <- prior@nSeason@.Data
                  iterator.new <- prior@iteratorState
                  iterator.old <- prior@iteratorStateOld
                  K.old <- J.old %/% L
                  offset <- 1L
                  prior@alphaDLM@.Data <- transferAlphaDelta0(state = alpha,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaAlpha@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@phi <- values[offset]
                  offset <- offset + 1L
                  prior@s@.Data <- transferSeason0(s = s,
                                                   nSeason = n.season,
                                                   values = values,
                                                   offset = offset,
                                                   iteratorNew = iterator.new,
                                                   iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L * n.season
                  prior@omegaSeason@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@tau@.Data <- values[offset]
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("transferParamPrior",
          signature(prior = "DLMWithTrendRobustZeroWithSeasonPredict"),
          function(prior, values, useC = FALSE, useSpecific = FALSE) {
              ## prior
              methods::validObject(prior)
              ## values
              stopifnot(is.double(values))
              stopifnot(!any(is.na(values)))
              if (useC) {
                  if (useSpecific)
                      .Call(transferParamPrior_DLMWithTrendRobustZeroWithSeasonPredict_R, prior, values)
                  else
                      .Call(transferParamPrior_R, prior, values)
              }
              else {
                  J.new <- prior@J@.Data
                  J.old <- prior@JOld@.Data
                  L <- prior@L@.Data
                  alpha <- prior@alphaDLM@.Data
                  delta <- prior@deltaDLM@.Data
                  s <- prior@s@.Data
                  n.season <- prior@nSeason@.Data
                  iterator.new <- prior@iteratorState
                  iterator.old <- prior@iteratorStateOld
                  K.old <- J.old %/% L
                  offset <- 1L
                  prior@alphaDLM@.Data <- transferAlphaDelta0(state = alpha,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaAlpha@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@deltaDLM@.Data <- transferAlphaDelta0(state = delta,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaDelta@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@phi <- values[offset]
                  offset <- offset + 1L
                  prior@s@.Data <- transferSeason0(s = s,
                                                   nSeason = n.season,
                                                   values = values,
                                                   offset = offset,
                                                   iteratorNew = iterator.new,
                                                   iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L * n.season
                  prior@omegaSeason@.Data <- values[offset]
                  offset <- offset + 1L 
                  prior@tau@.Data <- values[offset]
                  prior
              }
          })


## DLM - Robust, Cov

## TRANSLATED
## HAS_TESTS
setMethod("transferParamPrior",
          signature(prior = "DLMNoTrendRobustCovNoSeasonPredict"),
          function(prior, values, useC = FALSE, useSpecific = FALSE) {
              ## prior
              methods::validObject(prior)
              ## values
              stopifnot(is.double(values))
              stopifnot(!any(is.na(values)))
              if (useC) {
                  if (useSpecific)
                      .Call(transferParamPrior_DLMNoTrendRobustCovNoSeasonPredict_R, prior, values)
                  else
                      .Call(transferParamPrior_R, prior, values)
              }
              else {
                  J.new <- prior@J@.Data
                  J.old <- prior@JOld@.Data
                  L <- prior@L@.Data
                  P <- prior@P@.Data
                  alpha <- prior@alphaDLM@.Data
                  iterator.new <- prior@iteratorState
                  iterator.old <- prior@iteratorStateOld
                  K.old <- J.old %/% L
                  offset <- 1L
                  prior@alphaDLM@.Data <- transferAlphaDelta0(state = alpha,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaAlpha@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@phi <- values[offset]
                  offset <- offset + 1L
                  prior@eta@.Data <- values[offset : (offset + P - 1L)]
                  offset <- offset + P
                  prior@tau@.Data <- values[offset]
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("transferParamPrior",
          signature(prior = "DLMWithTrendRobustCovNoSeasonPredict"),
          function(prior, values, useC = FALSE, useSpecific = FALSE) {
              ## prior
              methods::validObject(prior)
              ## values
              stopifnot(is.double(values))
              stopifnot(!any(is.na(values)))
              if (useC) {
                  if (useSpecific)
                      .Call(transferParamPrior_DLMWithTrendRobustCovNoSeasonPredict_R, prior, values)
                  else
                      .Call(transferParamPrior_R, prior, values)
              }
              else {
                  J.new <- prior@J@.Data
                  J.old <- prior@JOld@.Data
                  L <- prior@L@.Data
                  P <- prior@P@.Data
                  alpha <- prior@alphaDLM@.Data
                  delta <- prior@deltaDLM@.Data
                  iterator.new <- prior@iteratorState
                  iterator.old <- prior@iteratorStateOld
                  K.old <- J.old %/% L
                  offset <- 1L
                  prior@alphaDLM@.Data <- transferAlphaDelta0(state = alpha,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaAlpha@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@deltaDLM@.Data <- transferAlphaDelta0(state = delta,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaDelta@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@phi <- values[offset]
                  offset <- offset + 1L
                  prior@eta@.Data <- values[offset : (offset + P - 1L)]
                  offset <- offset + P
                  prior@tau@.Data <- values[offset]
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("transferParamPrior",
          signature(prior = "DLMNoTrendRobustCovWithSeasonPredict"),
          function(prior, values, useC = FALSE, useSpecific = FALSE) {
              ## prior
              methods::validObject(prior)
              ## values
              stopifnot(is.double(values))
              stopifnot(!any(is.na(values)))
              if (useC) {
                  if (useSpecific)
                      .Call(transferParamPrior_DLMNoTrendRobustCovWithSeasonPredict_R, prior, values)
                  else
                      .Call(transferParamPrior_R, prior, values)
              }
              else {
                  J.new <- prior@J@.Data
                  J.old <- prior@JOld@.Data
                  L <- prior@L@.Data
                  P <- prior@P@.Data
                  alpha <- prior@alphaDLM@.Data
                  s <- prior@s@.Data
                  n.season <- prior@nSeason@.Data
                  iterator.new <- prior@iteratorState
                  iterator.old <- prior@iteratorStateOld
                  K.old <- J.old %/% L
                  offset <- 1L
                  prior@alphaDLM@.Data <- transferAlphaDelta0(state = alpha,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaAlpha@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@phi <- values[offset]
                  offset <- offset + 1L
                  prior@s@.Data <- transferSeason0(s = s,
                                                   nSeason = n.season,
                                                   values = values,
                                                   offset = offset,
                                                   iteratorNew = iterator.new,
                                                   iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L * n.season
                  prior@omegaSeason@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@eta@.Data <- values[offset : (offset + P - 1L)]
                  offset <- offset + P
                  prior@tau@.Data <- values[offset]
                  prior
              }
          })

## TRANSLATED
## HAS_TESTS
setMethod("transferParamPrior",
          signature(prior = "DLMWithTrendRobustCovWithSeasonPredict"),
          function(prior, values, useC = FALSE, useSpecific = FALSE) {
              ## prior
              methods::validObject(prior)
              ## values
              stopifnot(is.double(values))
              stopifnot(!any(is.na(values)))
              if (useC) {
                  if (useSpecific)
                      .Call(transferParamPrior_DLMWithTrendRobustCovWithSeasonPredict_R, prior, values)
                  else
                      .Call(transferParamPrior_R, prior, values)
              }
              else {
                  J.new <- prior@J@.Data
                  J.old <- prior@JOld@.Data
                  L <- prior@L@.Data
                  P <- prior@P@.Data
                  alpha <- prior@alphaDLM@.Data
                  delta <- prior@deltaDLM@.Data
                  s <- prior@s@.Data
                  n.season <- prior@nSeason@.Data
                  iterator.new <- prior@iteratorState
                  iterator.old <- prior@iteratorStateOld
                  K.old <- J.old %/% L
                  offset <- 1L
                  prior@alphaDLM@.Data <- transferAlphaDelta0(state = alpha,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaAlpha@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@deltaDLM@.Data <- transferAlphaDelta0(state = delta,
                                                              values = values,
                                                              offset = offset,
                                                              iteratorNew = iterator.new,
                                                              iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L
                  prior@omegaDelta@.Data <- values[offset]
                  offset <- offset + 1L
                  prior@phi <- values[offset]
                  offset <- offset + 1L
                  prior@s@.Data <- transferSeason0(s = s,
                                                   nSeason = n.season,
                                                   values = values,
                                                   offset = offset,
                                                   iteratorNew = iterator.new,
                                                   iteratorOld = iterator.old)
                  offset <- offset + (K.old + 1L) * L * n.season
                  prior@omegaSeason@.Data <- values[offset]
                  offset <- offset + 1
                  prior@eta@.Data <- values[offset : (offset + P - 1L)]
                  offset <- offset + P
                  prior@tau@.Data <- values[offset]
                  prior
              }
          })


## Mix

## TRANSLATED
## HAS_TESTS
setMethod("transferParamPrior",
          signature(prior = "MixNormZeroPredict"),
          function(prior, values, useC = FALSE, useSpecific = FALSE) {
              ## prior
              methods::validObject(prior)
              ## values
              stopifnot(is.double(values))
              stopifnot(!any(is.na(values)))
              if (useC) {
                  if (useSpecific)
                      .Call(transferParamPrior_MixNormZeroPredict_R, prior, values)
                  else
                      .Call(transferParamPrior_R, prior, values)
              }
              else {
                  dim.beta.old <- prior@dimBetaOld
                  iAlong <- prior@iAlong
                  index.class.max <- prior@indexClassMaxMix@.Data
                  n.beta.no.along <- prior@nBetaNoAlongMix@.Data
                  n.along.old <- dim.beta.old[iAlong]
                  offset <- 1L
                  ## prodVectorsMix
                  n.prod <- n.beta.no.along * index.class.max
                  prior@prodVectorsMix@.Data <- values[offset : (offset + n.prod - 1L)]
                  offset <- offset + n.prod
                  ## omegaVectorsMix
                  prior@omegaVectorsMix@.Data <- values[offset]
                  offset <- offset + 1L
                  ## weightMix
                  offset <- offset + n.along.old * index.class.max
                  ## componentWeightMix
                  offset <- offset + n.along.old * index.class.max
                  ## omegaComponentWeightMix
                  prior@omegaComponentWeightMix@.Data <- values[offset]
                  offset <- offset + 1L
                  ## levelComponentWeightOldMix (final values of levelComponetWeightMix)
                  prior@levelComponentWeightOldMix@.Data <-
                      transferLevelComponentWeightOldMix(values = values,
                                                         offset = offset,
                                                         nAlongOld = n.along.old,
                                                         indexClassMax = index.class.max)
                  offset <- offset + n.along.old * index.class.max
                  ## meanLevelComponentWeightMix
                  prior@meanLevelComponentWeightMix@.Data <- values[offset]
                  offset <- offset + 1L
                  ## phiMix
                  prior@phiMix <- values[offset]
                  offset <- offset + 1L
                  ## omegaLevelComponentWeightMix
                  prior@omegaLevelComponentWeightMix@.Data <- values[offset]
                  offset <- offset + 1L
                  ## tau
                  prior@tau@.Data <- values[offset]
                  ## return
                  prior
              }
          })



                  
## whereEstimated #####################################################################

## TimeInvariant

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "TimeInvariant"),
          function(object) {
              character()
          })


## ExchFixed

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "ExchFixed"),
          function(object) {
              character()
          })

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "ExchNormZero"),
          function(object) {
              "scaleError"
          })

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "ExchNormCov"),
          function(object) {
              c("coef", "scaleError")
          })

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "ExchRobustZero"),
          function(object) {
              "scaleError"
          })

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "ExchRobustCov"),
          function(object) {
              c("coef", "scaleError")
          })


## DLM - Norm, Zero

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "DLMNoTrendNormZeroNoSeason"),
          function(object) {
              c("scaleLevel",
                if (object@phiKnown) NULL else "damp",
                "scaleError")
          })

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "DLMWithTrendNormZeroNoSeason"),
          function(object) {
              c(if (object@hasLevel@.Data) "scaleLevel" else NULL,
                "scaleTrend",
                if (object@phiKnown) NULL else "damp",
                "scaleError")
          })

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "DLMNoTrendNormZeroWithSeason"),
          function(object) {
              c("scaleLevel",
                if (object@phiKnown) NULL else "damp",
                "scaleSeason",
                "scaleError")
          })

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "DLMWithTrendNormZeroWithSeason"),
          function(object) {
              c(if (object@hasLevel@.Data) "scaleLevel" else NULL,
                "scaleTrend",
                if (object@phiKnown) NULL else "damp",
                "scaleSeason",
                "scaleError")
          })


## DLM - Norm, Cov

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "DLMNoTrendNormCovNoSeason"),
          function(object) {
              c("scaleLevel",
                if (object@phiKnown) NULL else "damp",
                "coef",
                "scaleError")
          })

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "DLMWithTrendNormCovNoSeason"),
          function(object) {
              c(if (object@hasLevel@.Data) "scaleLevel" else NULL,
                "scaleTrend",
                if (object@phiKnown) NULL else "damp",
                "coef",
                "scaleError")
          })

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "DLMNoTrendNormCovWithSeason"),
          function(object) {
              c("scaleLevel",
                if (object@phiKnown) NULL else "damp",
                "scaleSeason",
                "coef",
                "scaleError")
          })

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "DLMWithTrendNormCovWithSeason"),
          function(object) {
              c(if (object@hasLevel@.Data) "scaleLevel" else NULL,
                "scaleTrend",
                if (object@phiKnown) NULL else "damp",
                "scaleSeason",
                "coef",
                "scaleError")
          })


## DLM - Robust, Zero

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "DLMNoTrendRobustZeroNoSeason"),
          function(object) {
              c("scaleLevel",
                if (object@phiKnown) NULL else "damp",
                "scaleError")
          })

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "DLMWithTrendRobustZeroNoSeason"),
          function(object) {
              c(if (object@hasLevel@.Data) "scaleLevel" else NULL,
                "scaleTrend",
                if (object@phiKnown) NULL else "damp",
                "scaleError")
          })

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "DLMNoTrendRobustZeroWithSeason"),
          function(object) {
              c("scaleLevel",
                if (object@phiKnown) NULL else "damp",
                "scaleSeason",
                "scaleError")
          })

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "DLMWithTrendRobustZeroWithSeason"),
          function(object) {
              c(if (object@hasLevel@.Data) "scaleLevel" else NULL,
                "scaleTrend",
                if (object@phiKnown) NULL else "damp",
                "scaleSeason",
                "scaleError")
          })


## DLM - Robust, Cov

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "DLMNoTrendRobustCovNoSeason"),
          function(object) {
              c("scaleLevel",
                if (object@phiKnown) NULL else "damp",
                "coef",
                "scaleError")
          })

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "DLMWithTrendRobustCovNoSeason"),
          function(object) {
              c(if (object@hasLevel@.Data) "scaleLevel" else NULL,
                "scaleTrend",
                if (object@phiKnown) NULL else "damp",
                "coef",
                "scaleError")
          })

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "DLMNoTrendRobustCovWithSeason"),
          function(object) {
              c("scaleLevel",
                if (object@phiKnown) NULL else "damp",
                "scaleSeason",
                "coef",
                "scaleError")
          })

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "DLMWithTrendRobustCovWithSeason"),
          function(object) {
              c(if (object@hasLevel@.Data) "scaleLevel" else NULL,
                "scaleTrend",
                if (object@phiKnown) NULL else "damp",
                "scaleSeason",
                "coef",
                "scaleError")
          })


## Known

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "KnownCertain"),
          function(object) {
              NULL
          })

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "KnownUncertain"),
          function(object) {
              NULL
          })

## Mix

setMethod("whereEstimated",
          signature(object = "MixNormZero"),
          function(object) {
              c("scaleComponents",
                "scale1",
                "mean",
                "damp",
                "scale2",
                "scaleError")
          })

## Zero

## HAS_TESTS
setMethod("whereEstimated",
          signature(object = "Zero"),
          function(object) {
              NULL
          })
StatisticsNZ/demest documentation built on Nov. 2, 2023, 7:56 p.m.