# Path: diffrax/custom_types.py
# class PyTree:
#     def __class_getitem__(cls, item):
#         class X:
#             pass
# 
#         X.__module__ = "builtins"
#         X.__qualname__ = _maybe_tuple_to_str(item)
#         return _PyTree[X]
# 
# class Scalar:
#     pass


import abc
import equinox as eqx
import jax
import jax.numpy as jnp
from dataclasses import field
from typing import Optional
from .custom_types import PyTree, Scalar
        r"""Evaluate the path at any point in the interval $[t_0, t_1]$.

        **Arguments:**

        - `t0`: Any point in $[t_0, t_1]$ to evaluate the path at.
        - `t1`: If passed, then the increment from `t1` to `t0` is evaluated instead.
        - `left`: Across jump points: whether to treat the path as left-continuous
            or right-continuous.

        !!! faq "FAQ"

            Note that we use $t_0$ and $t_1$ to refer to the overall interval, as
            obtained via `instance.t0` and `instance.t1`. We use `t0` and `t1` to refer
            to some subinterval of $[t_0, t_1]$. This is an API that is used for
            consistency with the rest of the package, and just happens to be a little
            confusing here.

        **Returns:**

        If `t1` is not passed:

        The value of the path at `t0`.

        If `t1` is passed:

        The increment of the path between `t0` and `t1`.
        """

        pass


# Path: diffrax/custom_types.py
# class PyTree:
#     def __class_getitem__(cls, item):
#         class X:
#             pass
# 
#         X.__module__ = "builtins"
#         X.__qualname__ = _maybe_tuple_to_str(item)
#         return _PyTree[X]
# 
# class Scalar:
#     pass


# Path: diffrax/path.py
import abc
import equinox as eqx
import jax
import jax.numpy as jnp
from dataclasses import field
from typing import Optional
from .custom_types import PyTree, Scalar

        r"""Evaluate the path at any point in the interval $[t_0, t_1]$.

        **Arguments:**

        - `t0`: Any point in $[t_0, t_1]$ to evaluate the path at.
        - `t1`: If passed, then the increment from `t1` to `t0` is evaluated instead.
        - `left`: Across jump points: whether to treat the path as left-continuous
            or right-continuous.

        !!! faq "FAQ"

            Note that we use $t_0$ and $t_1$ to refer to the overall interval, as
            obtained via `instance.t0` and `instance.t1`. We use `t0` and `t1` to refer
            to some subinterval of $[t_0, t_1]$. This is an API that is used for
            consistency with the rest of the package, and just happens to be a little
            confusing here.

        **Returns:**

        If `t1` is not passed:

        The value of the path at `t0`.

        If `t1` is passed:

        The increment of the path between `t0` and `t1`.
        """

        pass


    def derivative(self, t: Scalar, left: bool = True) -> PyTree: