Skip to content

bind implementation still using set_x as fallback yet - #1940

Closed
Jocho-Smith wants to merge 58 commits into
sbi-dev:gsoc-2026from
Jocho-Smith:oop-bind
Closed

bind implementation still using set_x as fallback yet#1940
Jocho-Smith wants to merge 58 commits into
sbi-dev:gsoc-2026from
Jocho-Smith:oop-bind

Conversation

@Jocho-Smith

@Jocho-Smith Jocho-Smith commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

This PR is an intermediate step to transition from set_x to bind for a stateless potential function. For now bind still uses set_x inside, b/c iid handling has to be taken care of separately. The high level idea is described in 'Pivot Idea 1' here: #1876

Some notes:

  • I got failing tests from this potential_fn.set_x(x_o) to bond_potential = potential_fn.bind(x_o) approach for MCMCPosterior and VectorFieldPotential and VectorFieldPosterior, so I excluded it for this PR and will continue debugging in another PR.
  • I decided to let BasePotential.bind raise NotImplementedError, since this allows for individual iid handling for NPE vs. NLE/NRE.
  • no deprecation warning for set_x yet, as it is still part of the pipeline here.

Local tests took very long somehow, so I'm not surprised if CI complains.

janfb and others added 3 commits July 20, 2026 21:42
Bumps [torch](https://github.com/pytorch/pytorch) from 2.11.0 to 2.13.0.
- [Release notes](https://github.com/pytorch/pytorch/releases)
- [Changelog](https://github.com/pytorch/pytorch/blob/main/RELEASE.md)
- [Commits](pytorch/pytorch@v2.11.0...v2.13.0)

---
updated-dependencies:
- dependency-name: torch
  dependency-version: 2.13.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
@codecov

codecov Bot commented Jul 20, 2026

Copy link
Copy Markdown

❌ 1 Tests Failed:

Tests completed Failed Passed Skipped
1023 1 1022 24
View the top 1 failed test(s) by shortest run time
tests/sbc_test.py::test_running_sbc[NPSE-None-independent-marginals]
Stack Traces | 0.911s run time
method = <class 'sbi.inference.trainers.vfpe.npse.NPSE'>
prior_type = 'independent', reduce_fn_str = 'marginals', sampler = None
mcmc_params_fast = MCMCPosteriorParameters(method='slice_np_vectorized', thin=1, warmup_steps=1, num_chains=1, init_strategy='resample', init_strategy_parameters=None, num_workers=1, mp_context='spawn')

    @pytest.mark.parametrize("reduce_fn_str", ("marginals", "posterior_log_prob"))
    @pytest.mark.parametrize("prior_type", ("boxuniform", "independent"))
    @pytest.mark.parametrize(
        "method, sampler",
        (
            (NPE, None),
            pytest.param(NLE, "mcmc", marks=pytest.mark.mcmc),
            pytest.param(NLE, "vi", marks=pytest.mark.mcmc),
            (NPSE, None),
        ),
    )
    def test_running_sbc(
        method,
        prior_type: str,
        reduce_fn_str: str,
        sampler: Optional[str],
        mcmc_params_fast: MCMCPosteriorParameters,
    ):
        """Test running inference and then SBC and obtaining nltp with different methods."""
        # Setup
        num_dim = 2
        if prior_type == "boxuniform":
            prior = BoxUniform(-torch.ones(num_dim), torch.ones(num_dim))
        else:
            prior = MultipleIndependent([
                Uniform(-torch.ones(1), torch.ones(1)) for _ in range(num_dim)
            ])
    
        # Test parameters
        num_simulations = 100
        max_num_epochs = 1
        num_sbc_runs = 2
        num_posterior_samples = 20
    
        likelihood_shift = -1.0 * ones(num_dim)
        likelihood_cov = 0.3 * eye(num_dim)
    
        # Helper function to simulate data
        def simulator(theta):
            return linear_gaussian(theta, likelihood_shift, likelihood_cov)
    
        # Build posterior
        posterior_kwargs = {}
        if method == NLE:
            posterior_kwargs = {
                "posterior_parameters": mcmc_params_fast
                if sampler == "mcmc"
                else VIPosteriorParameters()
            }
    
        posterior = train_inference_method(
            method,
            prior,
            simulator,
            num_simulations=num_simulations,
            max_num_epochs=max_num_epochs,
            **posterior_kwargs,
        )
    
        # Generate test data for SBC
        thetas = prior.sample((num_sbc_runs,))
        xs = simulator(thetas)
    
        # Run SBC
        reduce_fn = "marginals" if reduce_fn_str == "marginals" else posterior.potential
>       ranks, _ = run_sbc(
            thetas,
            xs,
            posterior,
            num_posterior_samples=num_posterior_samples,
            reduce_fns=reduce_fn,
        )

tests/sbc_test.py:133: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
sbi/diagnostics/sbc.py:83: in run_sbc
    posterior_samples = get_posterior_samples_on_batch(
sbi/utils/diagnostics_utils.py:45: in get_posterior_samples_on_batch
    posterior_samples = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:295: in gradient
    score = score_fn_iid(theta, self.x_o, time)
.../inference/potentials/vector_field_adaptor.py:996: in __call__
    posterior_precisions = self.marginal_denoising_posterior_precision_est_fn(
.../inference/potentials/vector_field_adaptor.py:884: in marginal_denoising_posterior_precision_est_fn
    precisions_posteriors = self.posterior_precision_est_fn(conditions)
.../inference/potentials/vector_field_adaptor.py:1200: in posterior_precision_est_fn
    return self.estimate_posterior_precision(
.../inference/potentials/vector_field_adaptor.py:1254: in estimate_posterior_precision
    thetas = posterior.sample_batched(
.../inference/posteriors/vector_field_posterior.py:572: in sample_batched
    samples, _ = rejection.accept_reject_sample(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/rejection/rejection.py:369: in accept_reject_sample
    candidates = proposal(
.../inference/posteriors/vector_field_posterior.py:385: in _sample_via_diffusion
    batch_samples = diffuser.run(
.venv/lib/python3.10.../torch/utils/_contextlib.py:124: in decorate_context
    return func(*args, **kwargs)
.../samplers/score/diffuser.py:168: in run
    samples = self.predictor(samples, t_current, t_next)
.../samplers/score/predictors.py:77: in __call__
    return self.predict(theta, t1, t0)
.../samplers/score/predictors.py:117: in predict
    score = self.potential_fn.gradient(theta, t1).to(dt.device)
.../inference/potentials/vector_field_potential.py:288: in gradient
    score_fn_iid = iid_method(
.../inference/potentials/vector_field_adaptor.py:1183: in __init__
    super().__init__(
.../inference/potentials/vector_field_adaptor.py:848: in __init__
    super().__init__(vector_field_estimator, prior, device)
.../inference/potentials/vector_field_adaptor.py:685: in __init__
    self.vector_field_estimator = vector_field_estimator.to(device).eval()
.venv/lib/python3.10.../nn/modules/module.py:2923: in eval
    return self.train(False)
.venv/lib/python3.10.../nn/modules/module.py:2904: in train
    module.train(mode)
.venv/lib/python3.10.../nn/modules/module.py:2904: in train
    module.train(mode)
.venv/lib/python3.10.../nn/modules/module.py:2904: in train
    module.train(mode)
.venv/lib/python3.10.../nn/modules/module.py:2902: in train
    self.training = mode
.venv/lib/python3.10.../nn/modules/module.py:1981: in __setattr__
    if isinstance(value, Parameter):
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <class 'torch.nn.parameter.Parameter'>, instance = False

    def __instancecheck__(self, instance) -> bool:
        if self is Parameter:
>           if isinstance(instance, torch.Tensor) and getattr(
                instance, "_is_param", False
            ):
E           RecursionError: maximum recursion depth exceeded while calling a Python object

.venv/lib/python3.10.../torch/nn/parameter.py:23: RecursionError

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@dgedon dgedon left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am unsure why we should exclude MCMCPosterior, VectorFieldPotential and VectorFieldPosterior from this PR. Can you justify some more? If we have failing tests, then we have to address them before merging.

Comment on lines +57 to +62
# import warnings
# warnings.warn(
# "set_x() is deprecated, use .bind(x) instead for stateless binding",
# FutureWarning,
# stacklevel=2,
# )

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove those comments


Subclasses must implement this method.
"""
raise NotImplementedError(f"{self.__class__.__name__} must implement bind()")

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why can we not define a general binding function?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What would that be?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually if it is covered in all methods that inherit from the base potential, then this is fine. There is no clear default way.

Comment on lines +99 to +106
bound = LikelihoodBasedPotential(
likelihood_estimator=self.likelihood_estimator,
prior=self.prior,
x_o=None,
device=self.device,
)
bound.set_x(x_o, x_is_iid=x_is_iid)
return bound

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a different way of building bind than in the other cases. Is taht because the LikelihoodBasedPotential requires a set_x afterwards as of now? Do we plan to change that?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the current implementation of sbi the x_is_iid handling is done through set_x, this is why I kept it for now. After all set_x calls are replaced with bind I'll build an alternative way for the iid handling, so bind is independent of this, and set_x stays for deprecation. So the PR after this one will implement this.

Comment on lines +85 to +94
def bind(self, x_o: Tensor, x_is_iid: bool = True) -> "RatioBasedPotential":
"""Create new potential with x bound, without mutable state."""
bound = RatioBasedPotential(
ratio_estimator=self.ratio_estimator,
prior=self.prior,
x_o=None,
device=self.device,
)
bound.set_x(x_o, x_is_iid=x_is_iid)
return bound

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment as for the LikelihodBasedPotential

Comment on lines +109 to +116
def bind(self, x_o: Tensor, x_is_iid: bool = False) -> "PosteriorBasedPotential":
"""Create new potential with x bound, without mutable state."""
return PosteriorBasedPotential(
posterior_estimator=self.posterior_estimator,
prior=self.prior,
x_o=x_o,
device=self.device,
)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here x_is_iid is silently discarded.

Comment on lines +178 to +185
def bind(self, x_o: Tensor, x_is_iid: bool = True) -> "CustomPotentialWrapper":
"""Create new potential with x bound, without mutable state."""
return CustomPotentialWrapper(
potential_fn=self.potential_fn,
prior=self.prior,
x_o=x_o,
device=self.device,
)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here x_is_iid is silently discarded

@Jocho-Smith

Copy link
Copy Markdown
Contributor Author

I am unsure why we should exclude MCMCPosterior, VectorFieldPotential and VectorFieldPosterior from this PR. Can you justify some more? If we have failing tests, then we have to address them before merging.

I got errors which I was not able to fix yesterday, so I discarded it for this initial post, to have the idea out there for discussion today. I'll work on the errors today.

…ut the CI runs the tests much faster then my local setup.
…oved deepcopy (and its now unused import) b/c bind creates new objects anyway. test_batched_mcmc_sample_log_prob_with_different_x passes locally now
@Jocho-Smith

Copy link
Copy Markdown
Contributor Author

FAILED tests/linearGaussian_vector_field_test.py::test_c2st_vector_field_on_linearGaussian[vp-3-gaussian-sample_with2] - AssertionError: D-KL=tensor([0.2522]) is more than 2 stds above the average performance.

  • I think this is causing problems: potential_fn.neural_ode
    • sample() -> creates new potential via bind
    • potential_fn.neural_ode.update_params() -> modifies that new potential's neural_ode
    • log_prob() -> creates ANOTHER new potential via bind(), which loses the modification!

Not sure yet how to fix this yet.

@Jocho-Smith

Copy link
Copy Markdown
Contributor Author

Hmm. So in this last commit attempt to fix vector_field error I tried to maintain this stateful potential, by keeping it in the defined '_get_bound_potential' function. However, this didn't fix it. I tried other things as well and I'm getting to the end of my understanding of this entire VectorFieldPotential/Posterior code base and the errors I'm seeing.

@Jocho-Smith

Copy link
Copy Markdown
Contributor Author

The CI also raises another error:

FAILED tests/user_input_checks_test.py::test_prior_wrappers[OneDimPriorWrapper-prior2-kwargs2] - AttributeError: 'OneDimPriorWrapper' object has no attribute 'prior'

My last commit fixed it for me locally

(sbi) (sbi) schmidt@node-63:~/gsoc2026/sbi$ uv run pytest -v -n 1 tests/user_input_checks_test.py::test_prior_wrappers[OneDimPriorWrapper-prior2-kwargs2]
==================================================================== test session starts ====================================================================
platform linux -- Python 3.12.12, pytest-9.0.3, pluggy-1.6.0
rootdir: /home/schmidt/gsoc2026/sbi
configfile: pyproject.toml
plugins: anyio-4.13.0, xdist-3.8.0, harvest-1.10.5, cov-7.1.0, testmon-2.2.0, mock-3.15.1, split-0.11.0
1 worker [1 item]      
.                                                                                                                                                     [100%]
Run with --bm flag to see benchmark results.
===================================================================== 1 passed in 5.35s =====================================================================

However, it still fails here in the CI. How is that possible?

@janfb

janfb commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

The CI also raises another error:

FAILED tests/user_input_checks_test.py::test_prior_wrappers[OneDimPriorWrapper-prior2-kwargs2] - AttributeError: 'OneDimPriorWrapper' object has no attribute 'prior'

My last commit fixed it for me locally


(sbi) (sbi) schmidt@node-63:~/gsoc2026/sbi$ uv run pytest -v -n 1 tests/user_input_checks_test.py::test_prior_wrappers[OneDimPriorWrapper-prior2-kwargs2]

==================================================================== test session starts ====================================================================

platform linux -- Python 3.12.12, pytest-9.0.3, pluggy-1.6.0

rootdir: /home/schmidt/gsoc2026/sbi

configfile: pyproject.toml

plugins: anyio-4.13.0, xdist-3.8.0, harvest-1.10.5, cov-7.1.0, testmon-2.2.0, mock-3.15.1, split-0.11.0

1 worker [1 item]      

.                                                                                                                                                     [100%]

Run with --bm flag to see benchmark results.

===================================================================== 1 passed in 5.35s =====================================================================

However, it still fails here in the CI. How is that possible?

Have you rebased on the recent merge of main into the gsoc-2026 branch?
That unrelated error was fixed on main recently I think.

dependabot Bot and others added 2 commits July 21, 2026 19:42
Bumps [pillow](https://github.com/python-pillow/Pillow) from 12.2.0 to 12.3.0.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](python-pillow/Pillow@12.2.0...12.3.0)

---
updated-dependencies:
- dependency-name: pillow
  dependency-version: 12.3.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
@Jocho-Smith

Jocho-Smith commented Jul 21, 2026

Copy link
Copy Markdown
Contributor Author

@janfb after merging I get infinite recursion errors:

FAILED tests/sbc_test.py::test_running_sbc[NPSE-None-boxuniform-marginals] - RecursionError: maximum recursion depth exceeded
FAILED tests/score_samplers_test.py::test_score_fn_iid_on_different_priors[3-auto_gauss-ve] - RecursionError: maximum recursion depth exceeded

is that what you fixed here #1938 ?

If yes can you pls merge main into gsoc-2026 again?

And why is this rebase always blowing up my PRs with 'unrelated' commits? Am I doing something wrong? Can we pls agree on a 'right way' of working simultaneously?

…ut the CI runs the tests much faster then my local setup.
…oved deepcopy (and its now unused import) b/c bind creates new objects anyway. test_batched_mcmc_sample_log_prob_with_different_x passes locally now
…ut the CI runs the tests much faster then my local setup.
@Jocho-Smith

Copy link
Copy Markdown
Contributor Author

Local tests work. I think the last main merge broke something...

@Jocho-Smith

Copy link
Copy Markdown
Contributor Author

I opened this new PR which passes all tests (with the same code): #1943

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants