code: def estimateCycles(self):
      self.mTime = self.mTimeInfo.mTime
      self.mSignal = self.mTimeInfo.mSignal
      self.mTimeInfo.addVars(self.mCycleFrame)
      for trend in self.mTrendList:
          lTrend_residue_name = trend.mOutName + "_residue"
          self.mCycleFrame[lTrend_residue_name] = self.mTrendFrame[
              lTrend_residue_name
          ]
          for cycle in self.mCycleList[trend]:
              start_time = time.time()
              cycle.fit()
              if self.mOptions.mDebugPerformance:
                  cycle.computePerf()
              self.dumpCyclePerf(cycle)
              self.mCycleFrame[
                  cycle.getCycleName()
              ] = cycle.mCycleFrame[cycle.getCycleName()]
              self.mCycleFrame[
                  cycle.getCycleResidueName()
              ] = cycle.mCycleFrame[cycle.getCycleResidueName()]
              if self.mOptions.mDebug:
                  cycle.check_not_nan(
                      self.mCycleFrame[
                          cycle.getCycleResidueName()
                      ].values,
                      cycle.getCycleResidueName(),
                  )
              end_time = time.time()
              lTrainingTime = round(end_time - start_time, 2)
              if self.mOptions.mDebugProfile:
                  logger = tsutil.get_pyaf_logger()
                  logger.info(
                      "CYCLE_TRAINING_TIME_IN_SECONDS '"
                      + cycle.mOutName
                      + "' "
                      + str(lTrainingTime)
                  )
      pass
  
imports: import pandas
  import numpy
  from .None import Time
  from .None import Perf
  from .None import Plots
  from .None import Utils
  import time
label_desc: Use image node_id 6 for calling the cCycleEstimator obj's underlying member method code with example usage: obj.estimateCycles() without return types