# Path: blackjax/base.py
# class AdaptationAlgorithm(NamedTuple):
#     """A function that implements an adaptation algorithm."""
# 
#     run: RunFn
# 
# class SamplingAlgorithm(NamedTuple):
#     """A pair of functions that implement a sampling algorithm.
# 
#     Blackjax sampling algorithms are implemented as a pair of pure functions: a
#     kernel, that takes a new samples starting from the current state, and an
#     initialization function that creates a kernel state from a chain position.
# 
#     As they represent Markov kernels, the kernel functions are pure functions
#     and do not have internal state. To save computation time they also operate
#     on states which contain the chain state and additional information that
#     needs to be carried over for the next step.
# 
#     Attributes
#     ---------
#     init:
#         A pure function which when called with the initial position and the
#         target density probability function will return the kernel's initial
#         state.
# 
#     step:
#         A pure function that takes a rng key, a state and possibly some
#         parameters and returns a new state and some information about the
#         transition.
# 
#     """
# 
#     init: InitFn
#     step: UpdateFn
# 
# Path: blackjax/types.py



from typing import Callable, Dict, Union
from blackjax.base import AdaptationAlgorithm, SamplingAlgorithm
from blackjax.types import Array, PRNGKey, PyTree
import jax
import blackjax.adaptation as adaptation
import blackjax.mcmc as mcmc
import blackjax.smc as smc
    "adaptive_tempered_smc",
    "hmc",
    "nuts",
    "rmh",
    "tempered_smc",
    "window_adaptation",
]


# -----------------------------------------------------------------------------
#                           SEQUENTIAL MONTE CARLO
# -----------------------------------------------------------------------------


class adaptive_tempered_smc:
    """Implements the (basic) user interface for the Adaptive Tempered SMC kernel.

    Returns
    -------
    A ``SamplingAlgorithm``.

    """

    init = staticmethod(smc.tempered.init)
    kernel = staticmethod(smc.adaptive_tempered.kernel)

    def __new__(  # type: ignore[misc]
        cls,
        logprior_fn: Callable,
        loglikelihood_fn: Callable,

# Path: blackjax/base.py
# class AdaptationAlgorithm(NamedTuple):
#     """A function that implements an adaptation algorithm."""
# 
#     run: RunFn
# 
# class SamplingAlgorithm(NamedTuple):
#     """A pair of functions that implement a sampling algorithm.
# 
#     Blackjax sampling algorithms are implemented as a pair of pure functions: a
#     kernel, that takes a new samples starting from the current state, and an
#     initialization function that creates a kernel state from a chain position.
# 
#     As they represent Markov kernels, the kernel functions are pure functions
#     and do not have internal state. To save computation time they also operate
#     on states which contain the chain state and additional information that
#     needs to be carried over for the next step.
# 
#     Attributes
#     ---------
#     init:
#         A pure function which when called with the initial position and the
#         target density probability function will return the kernel's initial
#         state.
# 
#     step:
#         A pure function that takes a rng key, a state and possibly some
#         parameters and returns a new state and some information about the
#         transition.
# 
#     """
# 
#     init: InitFn
#     step: UpdateFn
# 
# Path: blackjax/types.py



# Path: blackjax/kernels.py
from typing import Callable, Dict, Union
from blackjax.base import AdaptationAlgorithm, SamplingAlgorithm
from blackjax.types import Array, PRNGKey, PyTree
import jax
import blackjax.adaptation as adaptation
import blackjax.mcmc as mcmc
import blackjax.smc as smc

    "adaptive_tempered_smc",
    "hmc",
    "nuts",
    "rmh",
    "tempered_smc",
    "window_adaptation",
]


# -----------------------------------------------------------------------------
#                           SEQUENTIAL MONTE CARLO
# -----------------------------------------------------------------------------


class adaptive_tempered_smc:
    """Implements the (basic) user interface for the Adaptive Tempered SMC kernel.

    Returns
    -------
    A ``SamplingAlgorithm``.

    """

    init = staticmethod(smc.tempered.init)
    kernel = staticmethod(smc.adaptive_tempered.kernel)

    def __new__(  # type: ignore[misc]
        cls,
        logprior_fn: Callable,
        loglikelihood_fn: Callable,

        mcmc_algorithm: SamplingAlgorithm,