'Find y=y(t), set y as an initial condition, and return y.
Parameters
t : float
The endpoint of the integration step.
step : bool
If True, and if the integrator supports the step method,
then perform a single integration step and return.
This parameter is provided in order to expose internals of
the implementation, and should not be changed from its default
value in most cases.
relax : bool
If True and if the integrator supports the run_relax method,
then integrate until t_1 >= t and return. ``relax`` is not
referenced if ``step=True``.
This parameter is provided in order to expose internals of
the implementation, and should not be changed from its default
value in most cases.
Returns
y : float
The integrated value at t'

def integrate(self, t, step=False, relax=False):

    if (step and self._integrator.supports_step):
        mth = self._integrator.step
    elif (relax and self._integrator.supports_run_relax):
        mth = self._integrator.run_relax
    else:
        mth = self._integrator.run
    try:
        (self._y, self.t) = mth(self.f, (self.jac or (lambda : None)), self._y, self.t, t, self.f_params, self.jac_params)
    except SystemError:
        raise ValueError('Function    to    integrate    must    not    return    a    tuple.')
    return self._y
