docs: def _integrate_variable_trajectory(self, h, g, tol, step, relax):
          """Generates a solution trajectory of variable length."""
          # initialize the solution using initial condition
          solution = np.hstack((self.t, self.y))
  
          while self.successful():
  
              self.integrate(self.t + h, step, relax)
              current_step = np.hstack((self.t, self.y))
              solution = np.vstack((solution, current_step))
  
              if g(self.t, self.y, *self.f_params) < tol:
                  break
              else:
                  continue
  
          return solution