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: To alter the data for a specific date and a specific component.
  
  Args:
      date: the date of the altering data
      data: the new data. data must be a numeric value for main time
            series and must be a list of numerical values for dynamic
            components.
      component: the component for which the new data need to be
                 supplied to.
  
                 'main': the main time series data
  
                 other component name: other component feature data
docstr_tok: ["To","alter","the","data","for","a","specific","date","and","a","specific","component",".","Args",":","date",":","the","date","of","the","altering","data","data",":","the","new","data",".","data","must","be","a","numeric","value","for","main","time","series","and","must","be","a","list","of","numerical","values","for","dynamic","components",".","component",":","the","component","for","which","the","new","data","need","to","be","supplied","to",".","'main","'",":","the","main","time","series","data","other","component","name",":","other","component","feature","data"]
code: def alter(self, date, data, component="main"):
      """To alter the data for a specific date and a specific component.
  
      Args:
          date: the date of the altering data
          data: the new data. data must be a numeric value for main time
                series and must be a list of numerical values for dynamic
                components.
          component: the component for which the new data need to be
                     supplied to.\n
                     'main': the main time series data\n
                     other component name: other component feature data
  
      """
      if date < 0 or date > self.n - 1:
          raise NameError(
              "The date should be between 0 and " + str(self.n - 1)
          )
  
      # initialize the model to ease the modification
      if not self.initialized:
          self._initialize()
  
      # to alter the data for the observed chain
      if component == "main":
          self.data[date] = data
  
          # we also automatically alter all the automatic components
          for component in self.builder.automaticComponents:
              comp = self.builder.automaticComponents[component]
              comp.alter(date, data)
  
      # to alter the feature of a component
      elif component in self.builder.dynamicComponents:
          comp = self.builder.dynamicComponents[component]
          comp.alter(date, data)
  
      else:
          raise NameError("Such dynamic component does not exist.")
  
      # update the filtered and the smoothed steps
      self.result.filteredSteps[1] = date - 1
      self.result.smoothedSteps[1] = date - 1
  
      if self.result.filteredSteps[0] > self.result.filteredSteps[1]:
          self.result.filteredSteps = [0, -1]
          self.result.smoothedSteps = [0, -1]
  
      elif self.result.smoothedSteps[0] > self.result.smoothedSteps[1]:
          self.result.smoothedSteps = [0, -1]
  
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 13 for calling the dlm obj's underlying member method code with example usage: obj.alter(date, data, component) without return types