code: def restore_values(self):
          
          if self.convergence is True:
              return
          dae = self.system.dae
          system = self.system
  
          inc_g = self.inc[dae.n:dae.m + dae.n]
          max_g_err_sign = 1 if abs(max(inc_g)) > abs(min(inc_g)) else -1
          if max_g_err_sign == 1:
              max_g_err_idx = list(inc_g).index(max(inc_g))
          else:
              max_g_err_idx = list(inc_g).index(min(inc_g))
          logger.debug(
              'Maximum mismatch = {:.4g} at equation <{}>'.format(
                  max(abs(inc_g)), system.varname.unamey[max_g_err_idx]))
          logger.debug(
              'Reducing time step h={:.4g}s for t={:.4g}'.format(self.h, self.t))
  
          # restore initial variable data
          dae.x = matrix(self.x0)
          dae.y = matrix(self.y0)
          dae.f = matrix(self.f0)
docs: Restore x, y, and f values if not converged
  
          Returns
          -------
          None