code: def enkf(self):
          
  
          for cycle_index, time_point in enumerate(self.timeline):
              if cycle_index >= len(self.timeline) - 1:
                  # Logging : Last Update cycle has finished
                  break
  
              print("Print information about this assimilation Cycle ???")  # should be handeled in Logger
  
              # each cycle should have a dictionary of template files and instruction files to update the model inout
              # files
              # get current cycle update information
              current_cycle_files = self.cycle_update_files[cycle_index]
  
              #  (1)  update model input files for this cycle
              self.model_temporal_evolotion(cycle_index, current_cycle_files)
  
              # (2) generate new Pst object for the current time cycle
              current_pst = copy.deepcopy(self.pst)
              # update observation dataframe
              # update parameter dataframe
              # update in/out files if needed
  
              # At this stage the problem is equivalent to smoother problem
              self.smoother(current_pst)
docs: Loop over time windows and apply da
          :return: