code: def _build_euler_timeseries(self, return_timestamps=None):
          
          t_0 = self.time()
          t_f = return_timestamps[-1]
          dt = self.components.time_step()
          ts = np.arange(t_0, t_f, dt, dtype=np.float64)
  
          # Add the returned time series into the integration array. Best we can do for now.
          # This does change the integration ever so slightly, but for well-specified
          # models there shouldn't be sensitivity to a finer integration time step.
          ts = np.sort(np.unique(np.append(ts, return_timestamps)))
          return ts
docs: - The integration steps need to include the return values.
          - There is no point running the model past the last return value.
          - The last timestep will be the last in that requested for return
          - Spacing should be at maximum what is specified by the integration time step.
          - The initial time should be the one specified by the model file, OR
            it should be the initial condition.
          - This function needs to be called AFTER the model is set in its initial state
          Parameters
          ----------
          return_timestamps: numpy array
            Must be specified by user or built from model file before this function is called.
  
          Returns
          -------
          ts: numpy array
              The times that the integrator will use to compute time history