docstr: return a new time series which is a exponential smoothed version of the original data series.
  soomth forward once, backward once, and then take the average.
  
  :param float smoothing_factor: smoothing factor
  :return: :class:`TimeSeries` object.
docstr_tok: ["return","a","new","time","series","which","is","a","exponential","smoothed","version","of","the","original","data","series",".","soomth","forward","once",",","backward","once",",","and","then","take","the","average",".",":","param","float","smoothing_factor",":","smoothing","factor",":","return",":",":","class",":","`","TimeSeries","`","object","."]
code: def smooth(self, smoothing_factor):
      """
      return a new time series which is a exponential smoothed version of the original data series.
      soomth forward once, backward once, and then take the average.
  
      :param float smoothing_factor: smoothing factor
      :return: :class:`TimeSeries` object.
      """
      forward_smooth = {}
      backward_smooth = {}
      output = {}
  
      if self:
          pre = self.values[0]
          next = self.values[-1]
          for key, value in self.items():
              forward_smooth[key] = (
                  smoothing_factor * pre
                  + (1 - smoothing_factor) * value
              )
              pre = forward_smooth[key]
          for key, value in reversed(self.items()):
              backward_smooth[key] = (
                  smoothing_factor * next
                  + (1 - smoothing_factor) * value
              )
              next = backward_smooth[key]
          for key in forward_smooth.keys():
              output[key] = (
                  forward_smooth[key] + backward_smooth[key]
              ) / 2
  
      return TimeSeries(output)
  
imports: import numpy
label_desc: Use image node_id 29 for calling the TimeSeries obj's underlying member method code with example usage: obj.smooth(smoothing_factor) and returns: TimeSeries