code: def _integrate(self, time_steps, capture_elements, return_timestamps):
          
          # Todo: consider adding the timestamp to the return elements, and using that as the index
          outputs = []
  
          for t2 in time_steps[1:]:
              if self.time() in return_timestamps:
                  outputs.append({key: getattr(self.components, key)() for key in capture_elements})
              self._euler_step(t2 - self.time())
              self.time.update(t2)  # this will clear the stepwise caches
  
          # need to add one more time step, because we run only the state updates in the previous
          # loop and thus may be one short.
          if self.time() in return_timestamps:
              outputs.append({key: getattr(self.components, key)() for key in capture_elements})
  
          return outputs
docs: Performs euler integration
  
          Parameters
          ----------
          time_steps: iterable
              the time steps that the integrator progresses over
          capture_elements: list
              which model elements to capture - uses pysafe names
          return_timestamps:
              which subset of 'timesteps' should be values be returned?
  
          Returns
          -------
          outputs: list of dictionaries