class_docstr: The main class of the dynamic linear model.
  
  
  This is the main class of the Bayeisan dynamic linear model.
  It provides the modeling, filtering, forecasting and smoothing
  function of a dlm.
  The dlm use the @builder to construct the @baseModel based on user supplied
  @components and then run @kalmanFilter to filter the result.
  
  Example 1:
      >>> # randomly generate fake data on 1000 days
      >>> import numpy as np
      >>> data = np.random.random((1, 1000))
      >>> # construct the dlm of a linear trend and a 7-day seasonality
      >>> myDlm = dlm(data) + trend(degree = 2, 0.98) + seasonality(period = 7, 0.98)
      >>> # filter the result
      >>> myDlm.fitForwardFilter()
      >>> # extract the filtered result
      >>> myDlm.getFilteredObs()
  
  Example 2 (fit a linear regression):
      >>> from pydlm import dynamic
      >>> data = np.random.random((1, 100))
      >>> mydlm = dlm(data) + trend(degree=1, 0.98, name='a') +
                      dynamic(features=[[i] for i in range(100)], 1, name='b')
      >>> mydlm.fit()
      >>> coef_a = mydlm.getLatentState('a')
      >>> coef_b = mydlm.getLatentState('b')
  
  Attributes:
     data: a list of doubles of the raw time series data.
           It could be either the python's built-in list of
           doubles or numpy 1d array.
docstr: Fit backward smoothing on the data. Starting from the last observed date.
  
  Args:
      backLength: integer, indicating how many days the backward smoother
      should go, starting from the last date.
docstr_tok: ["Fit","backward","smoothing","on","the","data",".","Starting","from","the","last","observed","date",".","Args",":","backLength",":","integer",",","indicating","how","many","days","the","backward","smoother","should","go",",","starting","from","the","last","date","."]
code: def fitBackwardSmoother(self, backLength=None):
      """Fit backward smoothing on the data. Starting from the last observed date.
  
      Args:
          backLength: integer, indicating how many days the backward smoother
          should go, starting from the last date.
  
      """
  
      # see if the model has been initialized
      if not self.initialized:
          raise ValueError(
              "Backward Smoother has to be run after"
              + " forward filter"
          )
  
      if self.result.filteredSteps[1] != self.n - 1:
          raise ValueError(
              "Forward Fiter needs to run on full data before"
              + "using backward Smoother"
          )
  
      # default value for backLength
      if backLength is None:
          backLength = self.n
  
      self._logger.info("Starting backward smoothing...")
      # if the smoothed dates has already been done, we do nothing
      if (
          self.result.smoothedSteps[1] == self.n - 1
          and self.result.smoothedSteps[0]
          <= self.n - 1 - backLength + 1
      ):
          return None
  
      # if the smoothed dates start from n - 1, we just need to continue
      elif self.result.smoothedSteps[1] == self.n - 1:
          self._backwardSmoother(
              start=self.result.smoothedSteps[0] - 1, days=backLength
          )
  
      # if the smoothed dates are even earlier,
      # we need to start from the beginning
      elif self.result.smoothedSteps[1] < self.n - 1:
          self._backwardSmoother(start=self.n - 1, days=backLength)
  
      self.result.smoothedSteps = [self.n - backLength, self.n - 1]
      self.turnOn("smoothed plot")
  
      self._logger.info("Backward smoothing completed.")
  
imports: from copy import deepcopy
  from numpy import matrix
  from pydlm.predict.dlmPredictMod import dlmPredictModule
  from pydlm.access.dlmAccessMod import dlmAccessModule
  from pydlm.tuner.dlmTuneMod import dlmTuneModule
  from pydlm.plot.dlmPlotMod import dlmPlotModule
label_desc: Use image node_id 9 for calling the dlm obj's underlying member method code with example usage: obj.fitBackwardSmoother(backLength) and returns: None