code: def next_iteration(self, ref_point, bounds=None):
          
          if bounds:
              self.problem.points = reachable_points(
                  self.problem.points, self.problem.ideal, bounds
              )
          if not utils.isin(self.fh, self.problem.points) or ref_point != self.ref_point:
              self.ref_point = list(ref_point)
              self._update_fh()
  
          self._update_zh(self.zh, self.fh)
  
          self.fh_lo = list(self.lower_bounds_factory.result(self.zh))
          self.fh_up = list(self.upper_bounds_factory.result(self.zh))
  
          logging.debug(f"Updated upper boundary: {self.fh_up}")
          logging.debug(f"Uppadet lower boundary: {self.fh_lo}")
  
          if not np.all(np.array(self.fh_up) > np.array(self.fh_lo)):
              warn(self.NegativeIntervalWarning())
  
          assert utils.isin(self.fh_up, self.problem.points)
          assert utils.isin(self.fh_lo, self.problem.points)
  
          dist = self.distance(self.zh, self.fh)
  
          # Reachable points
          self.update_points()
  
          lP = len(self.problem.points)
          self.current_iter -= 1
  
          return dist, self.fh, self.zh, self.fh_lo, self.fh_up, lP
docs: Calculate the next iteration point to be shown to the DM
  
          Parameters
          ----------
          ref_point : list of float
          Reference point given by the DM