CUQIpy 1.3.0.post0.dev383__tar.gz → 1.3.0.post0.dev401__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of CUQIpy might be problematic. Click here for more details.
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/CUQIpy.egg-info/PKG-INFO +1 -1
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/PKG-INFO +1 -1
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/_version.py +3 -3
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/_posterior.py +9 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/mcmc/_gibbs.py +11 -19
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/mcmc/_hmc.py +3 -1
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/mcmc/_sampler.py +12 -4
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/CUQIpy.egg-info/SOURCES.txt +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/CUQIpy.egg-info/dependency_links.txt +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/CUQIpy.egg-info/requires.txt +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/CUQIpy.egg-info/top_level.txt +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/LICENSE +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/README.md +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/__init__.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/_messages.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/array/__init__.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/array/_array.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/config.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/data/__init__.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/data/_data.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/data/astronaut.npz +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/data/camera.npz +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/data/cat.npz +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/data/cookie.png +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/data/satellite.mat +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/density/__init__.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/density/_density.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/diagnostics.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/__init__.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/_beta.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/_cauchy.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/_cmrf.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/_custom.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/_distribution.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/_gamma.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/_gaussian.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/_gmrf.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/_inverse_gamma.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/_joint_distribution.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/_laplace.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/_lmrf.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/_lognormal.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/_modifiedhalfnormal.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/_normal.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/_smoothed_laplace.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/_truncated_normal.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/_uniform.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/__init__.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/_recommender.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/algebra/__init__.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/algebra/_ast.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/algebra/_orderedset.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/algebra/_randomvariable.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/geometry/__init__.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/geometry/_productgeometry.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/mcmc/__init__.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/mcmc/_conjugate.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/mcmc/_conjugate_approx.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/mcmc/_cwmh.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/mcmc/_direct.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/mcmc/_langevin_algorithm.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/mcmc/_laplace_approximation.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/mcmc/_mh.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/mcmc/_pcn.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/mcmc/_rto.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/geometry/__init__.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/geometry/_geometry.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/implicitprior/__init__.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/implicitprior/_regularizedGMRF.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/implicitprior/_regularizedGaussian.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/implicitprior/_regularizedUnboundedUniform.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/implicitprior/_restorator.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/likelihood/__init__.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/likelihood/_likelihood.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/model/__init__.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/model/_model.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/operator/__init__.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/operator/_operator.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/pde/__init__.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/pde/_pde.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/problem/__init__.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/problem/_problem.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/sampler/__init__.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/sampler/_conjugate.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/sampler/_conjugate_approx.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/sampler/_cwmh.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/sampler/_gibbs.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/sampler/_hmc.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/sampler/_langevin_algorithm.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/sampler/_laplace_approximation.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/sampler/_mh.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/sampler/_pcn.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/sampler/_rto.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/sampler/_sampler.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/samples/__init__.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/samples/_samples.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/solver/__init__.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/solver/_solver.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/testproblem/__init__.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/testproblem/_testproblem.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/utilities/__init__.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/utilities/_get_python_variable_name.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/utilities/_utilities.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/pyproject.toml +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/requirements.txt +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/setup.cfg +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/setup.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/tests/test_MRFs.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/tests/test_abstract_distribution_density.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/tests/test_bayesian_inversion.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/tests/test_density.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/tests/test_distribution.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/tests/test_distributions_shape.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/tests/test_geometry.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/tests/test_implicit_priors.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/tests/test_joint_distribution.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/tests/test_likelihood.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/tests/test_model.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/tests/test_pde.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/tests/test_posterior.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/tests/test_problem.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/tests/test_sampler.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/tests/test_samples.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/tests/test_solver.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/tests/test_testproblem.py +0 -0
- {cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/tests/test_utilities.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: CUQIpy
|
|
3
|
-
Version: 1.3.0.post0.
|
|
3
|
+
Version: 1.3.0.post0.dev401
|
|
4
4
|
Summary: Computational Uncertainty Quantification for Inverse problems in Python
|
|
5
5
|
Maintainer-email: "Nicolai A. B. Riis" <nabr@dtu.dk>, "Jakob S. Jørgensen" <jakj@dtu.dk>, "Amal M. Alghamdi" <amaal@dtu.dk>, Chao Zhang <chaz@dtu.dk>
|
|
6
6
|
License: Apache License
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: CUQIpy
|
|
3
|
-
Version: 1.3.0.post0.
|
|
3
|
+
Version: 1.3.0.post0.dev401
|
|
4
4
|
Summary: Computational Uncertainty Quantification for Inverse problems in Python
|
|
5
5
|
Maintainer-email: "Nicolai A. B. Riis" <nabr@dtu.dk>, "Jakob S. Jørgensen" <jakj@dtu.dk>, "Amal M. Alghamdi" <amaal@dtu.dk>, Chao Zhang <chaz@dtu.dk>
|
|
6
6
|
License: Apache License
|
|
@@ -8,11 +8,11 @@ import json
|
|
|
8
8
|
|
|
9
9
|
version_json = '''
|
|
10
10
|
{
|
|
11
|
-
"date": "2025-09-
|
|
11
|
+
"date": "2025-09-21T15:00:42+0200",
|
|
12
12
|
"dirty": false,
|
|
13
13
|
"error": null,
|
|
14
|
-
"full-revisionid": "
|
|
15
|
-
"version": "1.3.0.post0.
|
|
14
|
+
"full-revisionid": "f08eb2ae4f6f5209d4a06a4e031bc61bb746ce01",
|
|
15
|
+
"version": "1.3.0.post0.dev401"
|
|
16
16
|
}
|
|
17
17
|
''' # END VERSION_JSON
|
|
18
18
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from cuqi.geometry import _DefaultGeometry, _get_identity_geometries
|
|
2
2
|
from cuqi.distribution import Distribution
|
|
3
|
+
from cuqi.density import Density
|
|
3
4
|
|
|
4
5
|
# ========================================================================
|
|
5
6
|
class Posterior(Distribution):
|
|
@@ -25,6 +26,14 @@ class Posterior(Distribution):
|
|
|
25
26
|
self.prior = prior
|
|
26
27
|
super().__init__(**kwargs)
|
|
27
28
|
|
|
29
|
+
def get_density(self, name) -> Density:
|
|
30
|
+
""" Return a density with the given name. """
|
|
31
|
+
if name == self.likelihood.name:
|
|
32
|
+
return self.likelihood
|
|
33
|
+
if name == self.prior.name:
|
|
34
|
+
return self.prior
|
|
35
|
+
raise ValueError(f"No density with name {name}.")
|
|
36
|
+
|
|
28
37
|
@property
|
|
29
38
|
def data(self):
|
|
30
39
|
return self.likelihood.data
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
from cuqi.distribution import JointDistribution
|
|
1
|
+
from cuqi.distribution import JointDistribution, Posterior
|
|
2
2
|
from cuqi.experimental.mcmc import Sampler
|
|
3
3
|
from cuqi.samples import Samples, JointSamples
|
|
4
|
-
from cuqi.experimental.mcmc import NUTS
|
|
5
4
|
from typing import Dict
|
|
6
5
|
import numpy as np
|
|
7
6
|
import warnings
|
|
@@ -36,11 +35,10 @@ class HybridGibbs:
|
|
|
36
35
|
Gelman et al. "Bayesian Data Analysis" (2014), Third Edition
|
|
37
36
|
for more details.
|
|
38
37
|
|
|
39
|
-
In each Gibbs step, the corresponding sampler
|
|
40
|
-
|
|
41
|
-
and the
|
|
42
|
-
|
|
43
|
-
their internal state between Gibbs steps.
|
|
38
|
+
In each Gibbs step, the corresponding sampler state and history are stored,
|
|
39
|
+
then the sampler is reinitialized. After reinitialization, the sampler state
|
|
40
|
+
and history are set back to the stored values. This ensures preserving the
|
|
41
|
+
statefulness of the samplers.
|
|
44
42
|
|
|
45
43
|
The order in which the conditionals are sampled is the order of the
|
|
46
44
|
variables in the sampling strategy, unless a different sampling order
|
|
@@ -177,8 +175,8 @@ class HybridGibbs:
|
|
|
177
175
|
# ------------ Public methods ------------
|
|
178
176
|
def validate_targets(self):
|
|
179
177
|
""" Validate each of the conditional targets used in the Gibbs steps """
|
|
180
|
-
if not isinstance(self.target, JointDistribution):
|
|
181
|
-
raise ValueError('Target distribution must be a JointDistribution.')
|
|
178
|
+
if not isinstance(self.target, (JointDistribution, Posterior)):
|
|
179
|
+
raise ValueError('Target distribution must be a JointDistribution or Posterior.')
|
|
182
180
|
for sampler in self.samplers.values():
|
|
183
181
|
sampler.validate_target()
|
|
184
182
|
|
|
@@ -257,19 +255,15 @@ class HybridGibbs:
|
|
|
257
255
|
# before reinitializing the sampler and then set the state and history back to the sampler
|
|
258
256
|
|
|
259
257
|
# Extract state and history from sampler
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
else:
|
|
263
|
-
sampler_state = sampler.get_state()
|
|
264
|
-
sampler_history = sampler.get_history()
|
|
258
|
+
sampler_state = sampler.get_state()
|
|
259
|
+
sampler_history = sampler.get_history()
|
|
265
260
|
|
|
266
261
|
# Reinitialize sampler
|
|
267
262
|
sampler.reinitialize()
|
|
268
263
|
|
|
269
264
|
# Set state and history back to sampler
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
sampler.set_history(sampler_history)
|
|
265
|
+
sampler.set_state(sampler_state)
|
|
266
|
+
sampler.set_history(sampler_history)
|
|
273
267
|
|
|
274
268
|
# Allow for multiple sampling steps in each Gibbs step
|
|
275
269
|
for _ in range(self.num_sampling_steps[par_name]):
|
|
@@ -309,8 +303,6 @@ class HybridGibbs:
|
|
|
309
303
|
def _initialize_samplers(self):
|
|
310
304
|
""" Initialize samplers """
|
|
311
305
|
for sampler in self.samplers.values():
|
|
312
|
-
if isinstance(sampler, NUTS):
|
|
313
|
-
print(f'Warning: NUTS sampler is not fully stateful in HybridGibbs. Sampler will be reinitialized in each Gibbs step.')
|
|
314
306
|
sampler.initialize()
|
|
315
307
|
|
|
316
308
|
def _initialize_num_sampling_steps(self):
|
|
@@ -118,8 +118,10 @@ class NUTS(Sampler):
|
|
|
118
118
|
# to epsilon_bar for the remaining sampling steps.
|
|
119
119
|
if self.step_size is None:
|
|
120
120
|
self._epsilon = self._FindGoodEpsilon()
|
|
121
|
+
self.step_size = self._epsilon
|
|
121
122
|
else:
|
|
122
123
|
self._epsilon = self.step_size
|
|
124
|
+
|
|
123
125
|
self._epsilon_bar = "unset"
|
|
124
126
|
|
|
125
127
|
# Parameter mu, does not change during the run
|
|
@@ -127,7 +129,7 @@ class NUTS(Sampler):
|
|
|
127
129
|
|
|
128
130
|
self._H_bar = 0
|
|
129
131
|
|
|
130
|
-
# NUTS run
|
|
132
|
+
# NUTS run diagnostics
|
|
131
133
|
# number of tree nodes created each NUTS iteration
|
|
132
134
|
self._num_tree_node = 0
|
|
133
135
|
|
|
@@ -203,13 +203,16 @@ class Sampler(ABC):
|
|
|
203
203
|
|
|
204
204
|
self.set_state(state)
|
|
205
205
|
|
|
206
|
-
def sample(self, Ns, batch_size=0, sample_path='./CUQI_samples/') -> 'Sampler':
|
|
206
|
+
def sample(self, Ns, Nt=1, batch_size=0, sample_path='./CUQI_samples/') -> 'Sampler':
|
|
207
207
|
""" Sample Ns samples from the target density.
|
|
208
208
|
|
|
209
209
|
Parameters
|
|
210
210
|
----------
|
|
211
211
|
Ns : int
|
|
212
212
|
The number of samples to draw.
|
|
213
|
+
|
|
214
|
+
Nt : int, optional, default=1
|
|
215
|
+
The thinning interval. If Nt >= 1, every Nt'th sample is stored. The larger Nt, the fewer samples are stored.
|
|
213
216
|
|
|
214
217
|
batch_size : int, optional
|
|
215
218
|
The batch size for saving samples to disk. If 0, no batching is used. If positive, samples are saved to disk in batches of the specified size.
|
|
@@ -233,7 +236,8 @@ class Sampler(ABC):
|
|
|
233
236
|
|
|
234
237
|
# Store samples
|
|
235
238
|
self._acc.append(acc)
|
|
236
|
-
|
|
239
|
+
if (Nt > 0) and ((idx + 1) % Nt == 0):
|
|
240
|
+
self._samples.append(self.current_point)
|
|
237
241
|
|
|
238
242
|
# display acc rate at progress bar
|
|
239
243
|
pbar.set_postfix_str(f"acc rate: {np.mean(self._acc[-1-idx:]):.2%}")
|
|
@@ -248,7 +252,7 @@ class Sampler(ABC):
|
|
|
248
252
|
return self
|
|
249
253
|
|
|
250
254
|
|
|
251
|
-
def warmup(self, Nb, tune_freq=0.1) -> 'Sampler':
|
|
255
|
+
def warmup(self, Nb, Nt=1, tune_freq=0.1) -> 'Sampler':
|
|
252
256
|
""" Warmup the sampler by drawing Nb samples.
|
|
253
257
|
|
|
254
258
|
Parameters
|
|
@@ -256,6 +260,9 @@ class Sampler(ABC):
|
|
|
256
260
|
Nb : int
|
|
257
261
|
The number of samples to draw during warmup.
|
|
258
262
|
|
|
263
|
+
Nt : int, optional, default=1
|
|
264
|
+
The thinning interval. If Nt >= 1, every Nt'th sample is stored. The larger Nt, the fewer samples are stored.
|
|
265
|
+
|
|
259
266
|
tune_freq : float, optional
|
|
260
267
|
The frequency of tuning. Tuning is performed every tune_freq*Nb samples.
|
|
261
268
|
|
|
@@ -278,7 +285,8 @@ class Sampler(ABC):
|
|
|
278
285
|
|
|
279
286
|
# Store samples
|
|
280
287
|
self._acc.append(acc)
|
|
281
|
-
|
|
288
|
+
if (Nt > 0) and ((idx + 1) % Nt == 0):
|
|
289
|
+
self._samples.append(self.current_point)
|
|
282
290
|
|
|
283
291
|
# display acc rate at progress bar
|
|
284
292
|
pbar.set_postfix_str(f"acc rate: {np.mean(self._acc[-1-idx:]):.2%}")
|
|
File without changes
|
{cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/CUQIpy.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/_joint_distribution.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/_modifiedhalfnormal.py
RENAMED
|
File without changes
|
|
File without changes
|
{cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/_smoothed_laplace.py
RENAMED
|
File without changes
|
{cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/distribution/_truncated_normal.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/algebra/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/algebra/_orderedset.py
RENAMED
|
File without changes
|
{cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/algebra/_randomvariable.py
RENAMED
|
File without changes
|
{cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/geometry/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/mcmc/_conjugate.py
RENAMED
|
File without changes
|
{cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/experimental/mcmc/_conjugate_approx.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/implicitprior/_regularizedGMRF.py
RENAMED
|
File without changes
|
{cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/implicitprior/_regularizedGaussian.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/sampler/_laplace_approximation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/cuqi/utilities/_get_python_variable_name.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cuqipy-1.3.0.post0.dev383 → cuqipy-1.3.0.post0.dev401}/tests/test_abstract_distribution_density.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|