Source code for pyproximal.proximal.Box
import numpy as np
from pyproximal.ProxOperator import _check_tau
from pyproximal import ProxOperator
from pyproximal.projection import BoxProj
[docs]class Box(ProxOperator):
r"""Box proximal operator.
Proximal operator of a Box: :math:`\operatorname{Box}_{[l, u]} = \{ x: l \leq x\leq u \}`.
Parameters
----------
lower : :obj:`float` or :obj:`np.ndarray`, optional
Lower bound
upper : :obj:`float` or :obj:`np.ndarray`, optional
Upper bound
Notes
-----
As the Box is an indicator function, the proximal operator corresponds to
its orthogonal projection (see :class:`pyproximal.projection.BoxProj` for
details.
"""
def __init__(self, lower=-np.inf, upper=np.inf):
super().__init__(None, False)
self.lower = lower
self.upper = upper
self.box = BoxProj(self.lower , self.upper)
def __call__(self, x):
return np.all((x > self.lower) & (x < self.upper)).astype(x.dtype)
@_check_tau
def prox(self, x, tau):
return self.box(x)