CUQIpy 1.0.0.post0.dev371__py3-none-any.whl → 1.0.0.post0.dev384__py3-none-any.whl

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.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: CUQIpy
3
- Version: 1.0.0.post0.dev371
3
+ Version: 1.0.0.post0.dev384
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
  cuqi/__init__.py,sha256=LsGilhl-hBLEn6Glt8S_l0OJzAA1sKit_rui8h-D-p0,488
2
2
  cuqi/_messages.py,sha256=fzEBrZT2kbmfecBBPm7spVu7yHdxGARQB4QzXhJbCJ0,415
3
- cuqi/_version.py,sha256=QVI79ROoiVftKzZNgtINBJapDUzlYy57knasEqfGVuQ,510
3
+ cuqi/_version.py,sha256=IKVgkfhXqLynqXrlVfTXOFBq5r4w6rJcCBTk1PNkuKA,510
4
4
  cuqi/config.py,sha256=wcYvz19wkeKW2EKCGIKJiTpWt5kdaxyt4imyRkvtTRA,526
5
5
  cuqi/diagnostics.py,sha256=5OrbJeqpynqRXOe5MtOKKhe7EAVdOEpHIqHnlMW9G_c,3029
6
6
  cuqi/array/__init__.py,sha256=-EeiaiWGNsE3twRS4dD814BIlfxEsNkTCZUc5gjOXb0,30
@@ -14,7 +14,7 @@ cuqi/data/cookie.png,sha256=mr6wUeoIUc5VC2qYj8vafOmTbcRwz0fHz4IIPK9_PnE,984680
14
14
  cuqi/data/satellite.mat,sha256=a0Nz_Ak-Y0m360dH74pa_rpk-MhaQ91ftGTKhQX7I8g,16373
15
15
  cuqi/density/__init__.py,sha256=0zfVcPgqdqiPkss5n_WP_PUt-G3ovHXjokhqEKIlLwA,48
16
16
  cuqi/density/_density.py,sha256=BG7gtP0cbFYLVgjYQGkNAhM95PR5ocBVLKRlOVX2PyM,7253
17
- cuqi/distribution/__init__.py,sha256=qKt5uV5E988Zj3LIz0mgk3yICWKY2uoOq4vqLCETrdg,667
17
+ cuqi/distribution/__init__.py,sha256=4vVLArg6NVzBj67vVioK8BY6wISJKb5cOxdoHMuUb_s,714
18
18
  cuqi/distribution/_beta.py,sha256=hdAc6Tbuz9Yqf76NSHxpaUgN7s6Z2lNV7YSRD3JhyCU,2997
19
19
  cuqi/distribution/_cauchy.py,sha256=UsVXYz8HhagXN5fIWSAIyELqhsJAX_-wk9kkRGgRmA8,3296
20
20
  cuqi/distribution/_cmrf.py,sha256=tCbEulM_O7FB3C_W-3IqZp9zGHkTofCdFF0ybHc9UZI,3745
@@ -31,6 +31,7 @@ cuqi/distribution/_lognormal.py,sha256=st1Uhf67qy2Seo65hA88JQ7lkEjQkW6KxznXahF_0
31
31
  cuqi/distribution/_modifiedhalfnormal.py,sha256=gB9fj10hdMvr05aa_xhAirJATLqKh1gpbdSs2pRoAVM,7267
32
32
  cuqi/distribution/_normal.py,sha256=UeoTtGDT7YSf4ZNo2amlVF9K-YQpYbf8q76jcRJTVFw,1914
33
33
  cuqi/distribution/_posterior.py,sha256=zAfL0GECxekZ2lBt1W6_LN0U_xskMwK4VNce5xAF7ig,5018
34
+ cuqi/distribution/_smoothed_laplace.py,sha256=bfvOI4YOYC6QPds1UHNHar_q-vOZEjBcPxVhIlq7s0k,2923
34
35
  cuqi/distribution/_uniform.py,sha256=7xJmCZH_LPhuGkwEDGh-_CTtzcWKrXMOxtTJUFb7Ydo,1607
35
36
  cuqi/experimental/__init__.py,sha256=vhZvyMX6rl8Y0haqCzGLPz6PSUKyu75XMQbeDHqTTrw,83
36
37
  cuqi/experimental/mcmc/__init__.py,sha256=0Vk_MzfE_9tvqQRgR6_3nkjSe_D3vgFqVM9pFrXN2iQ,581
@@ -84,8 +85,8 @@ cuqi/testproblem/_testproblem.py,sha256=x769LwwRdJdzIiZkcQUGb_5-vynNTNALXWKato7s
84
85
  cuqi/utilities/__init__.py,sha256=T4tLsC215MknBCsw_C0Qeeg_ox26aDUrCA5hbWvNQkU,387
85
86
  cuqi/utilities/_get_python_variable_name.py,sha256=QwlBVj2koJRA8s8pWd554p7-ElcI7HUwY32HknaR92E,1827
86
87
  cuqi/utilities/_utilities.py,sha256=MWAqV6L5btMpWwlUzrZYuV2VeSpfTbOaLRMRkuw2WIA,8509
87
- CUQIpy-1.0.0.post0.dev371.dist-info/LICENSE,sha256=kJWRPrtRoQoZGXyyvu50Uc91X6_0XRaVfT0YZssicys,10799
88
- CUQIpy-1.0.0.post0.dev371.dist-info/METADATA,sha256=yXm_fUldjf8brl4nsQdu_nKbDch7lVGioYPdKZ7TFMA,18393
89
- CUQIpy-1.0.0.post0.dev371.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
90
- CUQIpy-1.0.0.post0.dev371.dist-info/top_level.txt,sha256=AgmgMc6TKfPPqbjV0kvAoCBN334i_Lwwojc7HE3ZwD0,5
91
- CUQIpy-1.0.0.post0.dev371.dist-info/RECORD,,
88
+ CUQIpy-1.0.0.post0.dev384.dist-info/LICENSE,sha256=kJWRPrtRoQoZGXyyvu50Uc91X6_0XRaVfT0YZssicys,10799
89
+ CUQIpy-1.0.0.post0.dev384.dist-info/METADATA,sha256=5xT68suvERdJf0DPgCPA23chSdG2yRnQQJhW_zSnjps,18393
90
+ CUQIpy-1.0.0.post0.dev384.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
91
+ CUQIpy-1.0.0.post0.dev384.dist-info/top_level.txt,sha256=AgmgMc6TKfPPqbjV0kvAoCBN334i_Lwwojc7HE3ZwD0,5
92
+ CUQIpy-1.0.0.post0.dev384.dist-info/RECORD,,
cuqi/_version.py CHANGED
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2024-07-05T10:04:17+0300",
11
+ "date": "2024-07-05T09:29:07+0200",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "62f642d707e561a7c9deb0006625b11866043b81",
15
- "version": "1.0.0.post0.dev371"
14
+ "full-revisionid": "3e3d762fab019f39257708bb9cdf5abc3681f196",
15
+ "version": "1.0.0.post0.dev384"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -9,6 +9,7 @@ from ._gmrf import GMRF
9
9
  from ._inverse_gamma import InverseGamma
10
10
  from ._lmrf import LMRF
11
11
  from ._laplace import Laplace
12
+ from ._smoothed_laplace import SmoothedLaplace
12
13
  from ._lognormal import Lognormal
13
14
  from ._normal import Normal
14
15
  from ._posterior import Posterior
@@ -0,0 +1,95 @@
1
+ import numpy as np
2
+ from cuqi.utilities import force_ndarray
3
+ from cuqi.distribution import Distribution
4
+
5
+ class SmoothedLaplace(Distribution):
6
+ """ Smoothed Laplace distribution.
7
+
8
+ Defines a smoothed Laplace distribution given a location, a scale and a smoothing parameter
9
+ beta. The smoothed Laplace distribution is defined as
10
+
11
+ .. math::
12
+
13
+ p(x) = \\frac{1}{2b} \exp\left(-\\frac{\sqrt{(x-\mu)^2 + \beta}}{b}\\right),
14
+
15
+ where :math:`\mu` is the location (mean), :math:`b` is the scale (decay) parameter and
16
+ :math:`\beta` is the smoothing parameter.
17
+
18
+ The rate parameter is defined as :math:`\lambda = \\frac{1}{b}`.
19
+
20
+ The variables of this Laplace distribution are independent identically distributed (i.i.d.).
21
+
22
+ Parameters
23
+ ----------
24
+ location : scalar, list, tuple, or ndarray
25
+ The location parameter of the distribution.
26
+
27
+ scale : scalar, list, tuple, or ndarray
28
+ The scale parameter of the distribution.
29
+
30
+ beta : scalar
31
+ The smoothing parameter of the distribution.
32
+
33
+ """
34
+
35
+ def __init__(self, location=None, scale=None, beta=1e-3, **kwargs):
36
+ super().__init__(**kwargs)
37
+
38
+ self.location = location
39
+ self.scale = scale
40
+ self.beta = beta
41
+
42
+ @property
43
+ def location(self):
44
+ """ Location parameter """
45
+ return self._location
46
+
47
+ @location.setter
48
+ def location(self, value):
49
+ self._location = force_ndarray(value, flatten=True)
50
+
51
+ @property
52
+ def scale(self):
53
+ """ Scale parameter """
54
+ return self._scale
55
+
56
+ @scale.setter
57
+ def scale(self, value):
58
+ self._scale = force_ndarray(value, flatten=True)
59
+
60
+ @property
61
+ def beta(self):
62
+ """ Beta parameter """
63
+ return self._beta
64
+
65
+ @beta.setter
66
+ def beta(self, value):
67
+ self._beta = value
68
+
69
+ def logpdf(self, x):
70
+ """
71
+ Computes the logarithm of the probability density function at the given values of x.
72
+ """
73
+ # x accepts scalar, list, tuple, or ndarray
74
+ if isinstance(x, (float, int)):
75
+ x = np.array([x])
76
+ elif isinstance(x, (list, tuple)):
77
+ x = np.array(x)
78
+ return np.sum(np.log(0.5 / self.scale)) - np.sum(np.sqrt((x - self.location) ** 2 + self.beta) / self.scale)
79
+
80
+ def gradient(self, x):
81
+ """
82
+ Computes the gradient of logpdf at the given values of x.
83
+ """
84
+ # x accepts scalar, list, tuple, or ndarray
85
+ if isinstance(x, (float, int)):
86
+ x = np.array([x])
87
+ elif isinstance(x, (list, tuple)):
88
+ x = np.array(x)
89
+ return -np.array((x - self.location) / self.scale / np.sqrt((x - self.location) ** 2 + self.beta))
90
+
91
+ def _sample(self, N=1, rng=None):
92
+ """
93
+ Generates random samples from the distribution.
94
+ """
95
+ raise NotImplementedError(f"sample is not implemented for {self.__class__.__name__}.")