CUQIpy 1.0.0.post0.dev352__py3-none-any.whl → 1.0.0.post0.dev371__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.dev352
3
+ Version: 1.0.0.post0.dev371
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=g8tnztVUpVATX40RuxhlLPkPxb_ZLhy-dHUYqyHVXs8,510
3
+ cuqi/_version.py,sha256=QVI79ROoiVftKzZNgtINBJapDUzlYy57knasEqfGVuQ,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
@@ -33,24 +33,26 @@ cuqi/distribution/_normal.py,sha256=UeoTtGDT7YSf4ZNo2amlVF9K-YQpYbf8q76jcRJTVFw,
33
33
  cuqi/distribution/_posterior.py,sha256=zAfL0GECxekZ2lBt1W6_LN0U_xskMwK4VNce5xAF7ig,5018
34
34
  cuqi/distribution/_uniform.py,sha256=7xJmCZH_LPhuGkwEDGh-_CTtzcWKrXMOxtTJUFb7Ydo,1607
35
35
  cuqi/experimental/__init__.py,sha256=vhZvyMX6rl8Y0haqCzGLPz6PSUKyu75XMQbeDHqTTrw,83
36
- cuqi/experimental/mcmc/__init__.py,sha256=TyN_CASRnTcUBQYxoYUeSUBhorLzVwgPQaY72-6hXm8,537
36
+ cuqi/experimental/mcmc/__init__.py,sha256=0Vk_MzfE_9tvqQRgR6_3nkjSe_D3vgFqVM9pFrXN2iQ,581
37
37
  cuqi/experimental/mcmc/_conjugate.py,sha256=qYrBvZ9wNK4oBz0c0RRUtQkbpPIHI3BvBYSLRw8ok5k,3757
38
38
  cuqi/experimental/mcmc/_conjugate_approx.py,sha256=JQe9gmnNespCxSP6vaZWfizFvUWUh8Jn-jRqsJYyNeM,2839
39
- cuqi/experimental/mcmc/_cwmh.py,sha256=dbvmy6Fyr_xszbO3YmYcRsDaRRtQfPimLo6rbp0II6M,6898
39
+ cuqi/experimental/mcmc/_cwmh.py,sha256=-TM_S_UtD5ljEfXGEUpYImxNx3JXppIKTSpoWen7kP8,7142
40
40
  cuqi/experimental/mcmc/_direct.py,sha256=E3UevdJ_DLk2wL0lid1TTKkdmgnIMJ5Ihr7iM1jU8KI,738
41
41
  cuqi/experimental/mcmc/_gibbs.py,sha256=z6YOCiBM1YuZbQHfdmsArR-pT61dsS14F_O4kUxsNYM,10638
42
42
  cuqi/experimental/mcmc/_hmc.py,sha256=0sZMHtnNFGGtQdzpx-cgqA0xyfvGy7r4K62RH3AQNa4,19285
43
43
  cuqi/experimental/mcmc/_langevin_algorithm.py,sha256=n6WRQooKuUDjmqF-CtpcSNFDvaHCgLKhWxX-hi7h_ZA,8224
44
44
  cuqi/experimental/mcmc/_laplace_approximation.py,sha256=VVLOKQWZViT1CZg5RDiycG6trpKdQg94aQCKrAdSl2g,5707
45
- cuqi/experimental/mcmc/_mh.py,sha256=6yQjdpx3fMKvescRFL94Ik-ALTKi0BwBRXbTsIsck-I,2630
45
+ cuqi/experimental/mcmc/_mh.py,sha256=r1RNQLuOaT_WlHvCwS2StsgNAOeTD36z2fOzUtbGhHk,2842
46
46
  cuqi/experimental/mcmc/_pcn.py,sha256=T4T32mfoii3k6Jfz0qxPQbwdh6wdVOxttiEP7NWaZzg,3386
47
47
  cuqi/experimental/mcmc/_rto.py,sha256=wzlqm8waT6mB-3RFtMz-PlSUa1Yy3dfUoyKKahTaey4,10086
48
48
  cuqi/experimental/mcmc/_sampler.py,sha256=4dh9XVALkD3Ro9vkLZkNoFNge7Xv8QRbjh4LB7NY0HI,20073
49
+ cuqi/experimental/mcmc/_utilities.py,sha256=qrSq8hvK_G2rSxYYfR5psk4sbTe7098TS5QNu13THeE,528
49
50
  cuqi/geometry/__init__.py,sha256=Tz1WGzZBY-QGH3c0GiyKm9XHN8MGGcnU6TUHLZkzB3o,842
50
51
  cuqi/geometry/_geometry.py,sha256=WYFC-4_VBTW73b2ldsnfGYKvdSiCE8plr89xTSmkadg,46804
51
- cuqi/implicitprior/__init__.py,sha256=ZRZ9fgxgEl5n0A9F7WCl1_jid-GUiC8ZLkyTmGQmFlY,100
52
- cuqi/implicitprior/_regularizedGMRF.py,sha256=FHPA8ufqqg4ANafOi-Oq8Iv2Ikwytb2V023fXmmo_44,3092
53
- cuqi/implicitprior/_regularizedGaussian.py,sha256=eWF1E7YuJbNfczUIMrrwP2EtIoL0ZZTb8KY7l4oDrzU,9009
52
+ cuqi/implicitprior/__init__.py,sha256=CaDQGYtmeFzN37vf3QUmKhcN9-H5lO66ZbK035k4qUw,246
53
+ cuqi/implicitprior/_regularizedGMRF.py,sha256=IR9tKzNMoz-b0RKu6ahVgMx_lDNB3jZHVWFMQm6QqZk,6259
54
+ cuqi/implicitprior/_regularizedGaussian.py,sha256=cQtrgzyJU2pwoK4ORGl1erKLE9VY5NqwZTiqiViDswA,12371
55
+ cuqi/implicitprior/_regularizedUnboundedUniform.py,sha256=H2fTOSqYTlDiLxQ7Ya6wnpCUIkpO4qKrkTOsOPnBBeU,3483
54
56
  cuqi/likelihood/__init__.py,sha256=QXif382iwZ5bT3ZUqmMs_n70JVbbjxbqMrlQYbMn4Zo,1776
55
57
  cuqi/likelihood/_likelihood.py,sha256=z3AXAbIrv_DjOYh4jy3iDHemuIFUUJu6wdvJ5e2dgW0,6913
56
58
  cuqi/model/__init__.py,sha256=IcN4aZCnyp9o-8TNIoZ8vew99QQgi0EmZvnsIuR6qYI,49
@@ -82,8 +84,8 @@ cuqi/testproblem/_testproblem.py,sha256=x769LwwRdJdzIiZkcQUGb_5-vynNTNALXWKato7s
82
84
  cuqi/utilities/__init__.py,sha256=T4tLsC215MknBCsw_C0Qeeg_ox26aDUrCA5hbWvNQkU,387
83
85
  cuqi/utilities/_get_python_variable_name.py,sha256=QwlBVj2koJRA8s8pWd554p7-ElcI7HUwY32HknaR92E,1827
84
86
  cuqi/utilities/_utilities.py,sha256=MWAqV6L5btMpWwlUzrZYuV2VeSpfTbOaLRMRkuw2WIA,8509
85
- CUQIpy-1.0.0.post0.dev352.dist-info/LICENSE,sha256=kJWRPrtRoQoZGXyyvu50Uc91X6_0XRaVfT0YZssicys,10799
86
- CUQIpy-1.0.0.post0.dev352.dist-info/METADATA,sha256=NfPWIJpaMKeytArVU0GZCtQnlf87FNbAQkiOIdmA_ik,18393
87
- CUQIpy-1.0.0.post0.dev352.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
88
- CUQIpy-1.0.0.post0.dev352.dist-info/top_level.txt,sha256=AgmgMc6TKfPPqbjV0kvAoCBN334i_Lwwojc7HE3ZwD0,5
89
- CUQIpy-1.0.0.post0.dev352.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: setuptools (70.2.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
cuqi/_version.py CHANGED
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2024-06-19T09:05:37+0200",
11
+ "date": "2024-07-05T10:04:17+0300",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "1e1deddbe7925206fdaef6a2d9bf8ce9e33ad73d",
15
- "version": "1.0.0.post0.dev352"
14
+ "full-revisionid": "62f642d707e561a7c9deb0006625b11866043b81",
15
+ "version": "1.0.0.post0.dev371"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -12,3 +12,4 @@ from ._gibbs import HybridGibbsNew
12
12
  from ._conjugate import ConjugateNew
13
13
  from ._conjugate_approx import ConjugateApproxNew
14
14
  from ._direct import DirectNew
15
+ from ._utilities import find_valid_samplers
@@ -100,6 +100,9 @@ class CWMHNew(ProposalBasedSamplerNew):
100
100
  raise ValueError(
101
101
  "Target should be an instance of "+\
102
102
  f"{cuqi.density.Density.__class__.__name__}")
103
+ # Fail when there is no log density, which is currently assumed to be the case in case NaN is returned.
104
+ if np.isnan(self.target.logd(self._default_initial_point)):
105
+ raise ValueError("Target does not have valid logd")
103
106
 
104
107
  def validate_proposal(self):
105
108
  if not isinstance(self.proposal, cuqi.distribution.Distribution):
@@ -32,7 +32,9 @@ class MHNew(ProposalBasedSamplerNew):
32
32
  self._scale_temp = self.scale
33
33
 
34
34
  def validate_target(self):
35
- pass # All targets are valid
35
+ # Fail only when there is no log density, which is currently assumed to be the case in case NaN is returned.
36
+ if np.isnan(self.target.logd(self._default_initial_point)):
37
+ raise ValueError("Target does not have valid logd")
36
38
 
37
39
  def validate_proposal(self):
38
40
  if not isinstance(self.proposal, cuqi.distribution.Distribution):
@@ -0,0 +1,17 @@
1
+ import cuqi
2
+ import inspect
3
+
4
+ def find_valid_samplers(target):
5
+ """ Finds all samplers in the cuqi.experimental.mcmc module that accept the provided target. """
6
+
7
+ all_samplers = [(name, cls) for name, cls in inspect.getmembers(cuqi.experimental.mcmc, inspect.isclass) if issubclass(cls, cuqi.experimental.mcmc.SamplerNew)]
8
+ valid_samplers = []
9
+
10
+ for name, sampler in all_samplers:
11
+ try:
12
+ sampler(target)
13
+ valid_samplers += [name]
14
+ except:
15
+ pass
16
+
17
+ return valid_samplers
@@ -1,2 +1,3 @@
1
- from ._regularizedGaussian import RegularizedGaussian
2
- from ._regularizedGMRF import RegularizedGMRF
1
+ from ._regularizedGaussian import RegularizedGaussian, ConstrainedGaussian, NonnegativeGaussian
2
+ from ._regularizedGMRF import RegularizedGMRF, ConstrainedGMRF, NonnegativeGMRF
3
+ from ._regularizedUnboundedUniform import RegularizedUnboundedUniform
@@ -68,3 +68,85 @@ class RegularizedGMRF(RegularizedGaussian):
68
68
  super(Distribution, self).__init__(**kwargs)
69
69
 
70
70
  self._parse_regularization_input_arguments(proximal, projector, constraint, regularization, args)
71
+
72
+
73
+
74
+ class ConstrainedGMRF(RegularizedGMRF):
75
+ """ Implicit Constrained GMRF (Gaussian Markov Random Field).
76
+
77
+ Defines a so-called implicit prior based on a GMRF distribution with implicit constraints.
78
+ The constraint can be defined as a preset or in the form of a projector.
79
+
80
+ Precisely one of projector or constraint needs to be provided. Otherwise, an error is raised.
81
+
82
+ Can be used as a prior in a posterior which can be sampled with the RegularizedLinearRTO sampler.
83
+
84
+ Alias for :class:`~cuqi.implicitprior.RegularizedGMRF` with only constraints available.
85
+
86
+ For more details on implicit regularized Gaussian see the following paper:
87
+
88
+ [1] Everink, Jasper M., Yiqiu Dong, and Martin S. Andersen. "Sparse Bayesian inference with regularized
89
+ Gaussian distributions." Inverse Problems 39.11 (2023): 115004.
90
+
91
+ Parameters
92
+ ----------
93
+ mean
94
+ See :class:`~cuqi.distribution.GMRF` for details.
95
+
96
+ prec
97
+ See :class:`~cuqi.distribution.GMRF` for details.
98
+
99
+ bc_type
100
+ See :class:`~cuqi.distribution.GMRF` for details.
101
+
102
+ order
103
+ See :class:`~cuqi.distribution.GMRF` for details.
104
+
105
+ projector : callable f(x) or None
106
+ Euclidean projection onto the constraint C, that is, a solver for the optimization problem
107
+ min_(z in C) 0.5||x-z||_2^2.
108
+
109
+ constraint : string or None
110
+ Preset constraints. Can be set to "nonnegativity" and "box". Required for use in Gibbs.
111
+ For "box", the following additional parameters can be passed:
112
+ lower_bound : array_like or None
113
+ Lower bound of box, defaults to zero
114
+ upper_bound : array_like
115
+ Upper bound of box, defaults to one
116
+
117
+ """
118
+ def __init__(self, mean=None, prec=None, bc_type='zero', order=1, projector=None, constraint=None, **kwargs):
119
+ super().__init__(mean=mean, prec=prec, bc_type=bc_type, order=order, projector=projector, constraint=constraint, **kwargs)
120
+
121
+
122
+ class NonnegativeGMRF(RegularizedGMRF):
123
+ """ Implicit Nonnegative GMRF (Gaussian Markov Random Field).
124
+
125
+ Defines a so-called implicit prior based on a GMRF distribution with implicit nonnegativity constraints.
126
+
127
+ Can be used as a prior in a posterior which can be sampled with the RegularizedLinearRTO sampler.
128
+
129
+ Alias for :class:`~cuqi.implicitprior.RegularizedGMRF` with only nonnegativity constraints.
130
+
131
+ For more details on implicit regularized Gaussian see the following paper:
132
+
133
+ [1] Everink, Jasper M., Yiqiu Dong, and Martin S. Andersen. "Sparse Bayesian inference with regularized
134
+ Gaussian distributions." Inverse Problems 39.11 (2023): 115004.
135
+
136
+ Parameters
137
+ ----------
138
+ mean
139
+ See :class:`~cuqi.distribution.GMRF` for details.
140
+
141
+ prec
142
+ See :class:`~cuqi.distribution.GMRF` for details.
143
+
144
+ bc_type
145
+ See :class:`~cuqi.distribution.GMRF` for details.
146
+
147
+ order
148
+ See :class:`~cuqi.distribution.GMRF` for details.
149
+
150
+ """
151
+ def __init__(self, mean=None, prec=None, bc_type='zero', order=1, **kwargs):
152
+ super().__init__(mean=mean, prec=prec, bc_type=bc_type, order=order, constraint="nonnegativity", **kwargs)
@@ -234,3 +234,90 @@ class RegularizedGaussian(Distribution):
234
234
  new_density = new_density.to_likelihood(value)
235
235
 
236
236
  return new_density
237
+
238
+
239
+ class ConstrainedGaussian(RegularizedGaussian):
240
+ """ Implicit Constrained Gaussian.
241
+
242
+ Defines a so-called implicit prior based on a Gaussian distribution with implicit constraints.
243
+ The constraint can be defined as a preset or in the form of a projector.
244
+
245
+ Precisely one of projector or constraint needs to be provided. Otherwise, an error is raised.
246
+
247
+ Can be used as a prior in a posterior which can be sampled with the RegularizedLinearRTO sampler.
248
+
249
+ Alias for :class:`~cuqi.implicitprior.RegularizedGaussian` with only constraints available.
250
+
251
+ For more details on implicit regularized Gaussian see the following paper:
252
+
253
+ [1] Everink, Jasper M., Yiqiu Dong, and Martin S. Andersen. "Sparse Bayesian inference with regularized
254
+ Gaussian distributions." Inverse Problems 39.11 (2023): 115004.
255
+
256
+ Parameters
257
+ ----------
258
+ mean
259
+ See :class:`~cuqi.distribution.Gaussian` for details.
260
+
261
+ cov
262
+ See :class:`~cuqi.distribution.Gaussian` for details.
263
+
264
+ prec
265
+ See :class:`~cuqi.distribution.Gaussian` for details.
266
+
267
+ sqrtcov
268
+ See :class:`~cuqi.distribution.Gaussian` for details.
269
+
270
+ sqrtprec
271
+ See :class:`~cuqi.distribution.Gaussian` for details.
272
+
273
+ projector : callable f(x) or None
274
+ Euclidean projection onto the constraint C, that is, a solver for the optimization problem
275
+ min_(z in C) 0.5||x-z||_2^2.
276
+
277
+ constraint : string or None
278
+ Preset constraints. Can be set to "nonnegativity" and "box". Required for use in Gibbs.
279
+ For "box", the following additional parameters can be passed:
280
+ lower_bound : array_like or None
281
+ Lower bound of box, defaults to zero
282
+ upper_bound : array_like
283
+ Upper bound of box, defaults to one
284
+
285
+ """
286
+ def __init__(self, mean=None, cov=None, prec=None, sqrtcov=None,sqrtprec=None, projector=None, constraint=None, **kwargs):
287
+ super().__init__(mean=mean, cov=cov, prec=prec, sqrtcov=sqrtcov, sqrtprec=sqrtprec, projector=projector, constraint=constraint, **kwargs)
288
+
289
+
290
+ class NonnegativeGaussian(RegularizedGaussian):
291
+ """ Implicit Nonnegative Gaussian.
292
+
293
+ Defines a so-called implicit prior based on a Gaussian distribution with implicit nonnegativity constraints.
294
+
295
+ Can be used as a prior in a posterior which can be sampled with the RegularizedLinearRTO sampler.
296
+
297
+ Alias for :class:`~cuqi.implicitprior.RegularizedGaussian` with only nonnegativity constraints.
298
+
299
+ For more details on implicit regularized Gaussian see the following paper:
300
+
301
+ [1] Everink, Jasper M., Yiqiu Dong, and Martin S. Andersen. "Sparse Bayesian inference with regularized
302
+ Gaussian distributions." Inverse Problems 39.11 (2023): 115004.
303
+
304
+ Parameters
305
+ ----------
306
+ mean
307
+ See :class:`~cuqi.distribution.Gaussian` for details.
308
+
309
+ cov
310
+ See :class:`~cuqi.distribution.Gaussian` for details.
311
+
312
+ prec
313
+ See :class:`~cuqi.distribution.Gaussian` for details.
314
+
315
+ sqrtcov
316
+ See :class:`~cuqi.distribution.Gaussian` for details.
317
+
318
+ sqrtprec
319
+ See :class:`~cuqi.distribution.Gaussian` for details.
320
+
321
+ """
322
+ def __init__(self, mean=None, cov=None, prec=None, sqrtcov=None,sqrtprec=None, **kwargs):
323
+ super().__init__(mean=mean, cov=cov, prec=prec, sqrtcov=sqrtcov, sqrtprec=sqrtprec, constraint="nonnegativity", **kwargs)
@@ -0,0 +1,66 @@
1
+ from cuqi.implicitprior import RegularizedGaussian
2
+ from cuqi.distribution import Distribution, Gaussian
3
+
4
+ import numpy as np
5
+
6
+
7
+ class RegularizedUnboundedUniform(RegularizedGaussian):
8
+ """ Implicit Regularized Unbounded Uniform.
9
+
10
+ Defines a so-called implicit prior with implicit regularization on a Gaussian distribution with zero precision.
11
+ The regularization can be defined in the form of a proximal operator or a projector.
12
+ Alternatively, preset constraints and regularization can be used.
13
+
14
+ For regularization of the form f(x), provide a single proximal operator.
15
+
16
+ Can be used as a prior in a posterior which can be sampled with the RegularizedLinearRTO sampler.
17
+
18
+ Alias for :class:`~cuqi.implicitprior.RegularizedGaussian` with zero mean and zero sqrtprec.
19
+
20
+ For more details on implicit regularized Gaussian see the following paper:
21
+
22
+ [1] Everink, Jasper M., Yiqiu Dong, and Martin S. Andersen. "Sparse Bayesian inference with regularized
23
+ Gaussian distributions." Inverse Problems 39.11 (2023): 115004.
24
+
25
+ Parameters
26
+ ----------
27
+ geometry : :class:`~cuqi.geometry.Geometry` or integer
28
+ The geometry of the underlying variable. Defines the dimension of the distribution.
29
+
30
+ proximal : callable f(x, scale) or None
31
+ Euclidean proximal operator f of the regularization function g, that is, a solver for the optimization problem
32
+ min_z 0.5||x-z||_2^2+scale*g(x).
33
+
34
+ projector : callable f(x) or None
35
+ Euclidean projection onto the constraint C, that is, a solver for the optimization problem
36
+ min_(z in C) 0.5||x-z||_2^2.
37
+
38
+ constraint : string or None
39
+ Preset constraints. Can be set to "nonnegativity" and "box". Required for use in Gibbs.
40
+ For "box", the following additional parameters can be passed:
41
+ lower_bound : array_like or None
42
+ Lower bound of box, defaults to zero
43
+ upper_bound : array_like
44
+ Upper bound of box, defaults to one
45
+
46
+ regularization : string or None
47
+ Preset regularization. Can be set to "l1". Required for use in Gibbs in future update.
48
+ For "l1", the following additional parameters can be passed:
49
+ strength : scalar
50
+ Regularization parameter, i.e., strength*||x||_1 , defaults to one
51
+
52
+ """
53
+ def __init__(self, geometry, proximal = None, projector = None, constraint = None, regularization = None, **kwargs):
54
+
55
+ args = {"lower_bound" : kwargs.pop("lower_bound", None),
56
+ "upper_bound" : kwargs.pop("upper_bound", None),
57
+ "strength" : kwargs.pop("strength", None)}
58
+
59
+ # Underlying explicit Gaussian
60
+ # This line throws a warning due trying to applying get_sqrtprec_from_sqrtprec to an all zero matrix
61
+ self._gaussian = Gaussian(mean = np.zeros(geometry.par_dim), sqrtprec = np.zeros((geometry.par_dim,geometry.par_dim)), geometry = geometry, **kwargs)
62
+
63
+ # Init from abstract distribution class
64
+ super(Distribution, self).__init__(**kwargs)
65
+
66
+ self._parse_regularization_input_arguments(proximal, projector, constraint, regularization, args)