Source code for cuqi.implicitprior._regularizedUnboundedUniform

from cuqi.implicitprior import RegularizedGaussian
from cuqi.distribution import Distribution, Gaussian

import numpy as np


[docs] class RegularizedUnboundedUniform(RegularizedGaussian): """ Implicit Regularized Unbounded Uniform. Defines a so-called implicit prior with implicit regularization on a Gaussian distribution with zero precision. The regularization can be defined in the form of a proximal operator or a projector. Alternatively, preset constraints and regularization can be used. For regularization of the form f(x), provide a single proximal operator. Can be used as a prior in a posterior which can be sampled with the RegularizedLinearRTO sampler. Alias for :class:`~cuqi.implicitprior.RegularizedGaussian` with zero mean and zero sqrtprec. For more details on implicit regularized Gaussian see the following paper: [1] Everink, Jasper M., Yiqiu Dong, and Martin S. Andersen. "Sparse Bayesian inference with regularized Gaussian distributions." Inverse Problems 39.11 (2023): 115004. Parameters ---------- geometry : :class:`~cuqi.geometry.Geometry` or integer The geometry of the underlying variable. Defines the dimension of the distribution. proximal : callable f(x, scale) or None Euclidean proximal operator f of the regularization function g, that is, a solver for the optimization problem min_z 0.5||x-z||_2^2+scale*g(x). projector : callable f(x) or None Euclidean projection onto the constraint C, that is, a solver for the optimization problem min_(z in C) 0.5||x-z||_2^2. constraint : string or None Preset constraints. Can be set to "nonnegativity" and "box". Required for use in Gibbs. For "box", the following additional parameters can be passed: lower_bound : array_like or None Lower bound of box, defaults to zero upper_bound : array_like Upper bound of box, defaults to one regularization : string or None Preset regularization. Can be set to "l1". Required for use in Gibbs in future update. For "l1" or "tv", the following additional parameters can be passed: strength : scalar Regularization parameter, i.e., strength*||Lx||_1, defaults to one """
[docs] def __init__(self, geometry, proximal = None, projector = None, constraint = None, regularization = None, **kwargs): args = {"lower_bound" : kwargs.pop("lower_bound", None), "upper_bound" : kwargs.pop("upper_bound", None), "strength" : kwargs.pop("strength", None)} # Underlying explicit Gaussian # This line throws a warning due trying to applying get_sqrtprec_from_sqrtprec to an all zero matrix self._gaussian = Gaussian(mean = np.zeros(geometry.par_dim), sqrtprec = np.zeros((geometry.par_dim,geometry.par_dim)), geometry = geometry, **kwargs) # Init from abstract distribution class super(Distribution, self).__init__(**kwargs) self._force_list = False self._parse_regularization_input_arguments(proximal, projector, constraint, regularization, args)