Skip to main content

Proximity Operator Repository

Proximity operators have become increasingly important tools as basic building blocks of proximal splitting algorithms, a class of algorithms that decompose complex composite convex optimization methods into simple steps involving one of the functions present in the model. This package provides implementations of the proximity operator of various functions (function of scalar variable or multivariate,convex and non-convex functions, indicator functions...).

For more information see the full project containing technical details, a tutorial and code implantation in matlab.

Installation

To install package (require python 3.8.0 or a later version):

pip install proxop

To update, one should add the option "--upgrade":

pip install proxop --upgrade

How to use it ?

To import the package:

import proxop

Please visit our website for more tutorial and more details.

Examples:

Evaluates the function 'AbsValue': >>> import proxop >>> proxop.AbsValue()(-3) 3

Use a scale factor 'gamma': >>> proxop.AbsValue(gamma=2)(-3) 6

When the input is a vector, the result is the sum of the outputs obtained by applying the function to each element :

 >>> from proxop import AbsValue
 >>> import numpy as np
 >>> AbsValue()( np.array([-1, 2, 3., -4.]) )
 10.0

Compute the proximity operator by using the method 'prox' :

>>> AbsValue().prox( 3)
2
>>> AbsValue().prox(np.array([ -3., 1., 6., 3.]))
array([-2.,  0.,  5., 2.])

Use a scale factor 'gamma'>0 to commute the proximity operator of th function "gamma*f" :

>>> AbsValue(gamma=2).prox([ -3., 1., 6.])
 array([-1.,  0.,  4.])

Example 2: Projection onto a set

Since proximity operator is a generalization of the notion of projection onto a (convex) set, one can easily interpret the result with an indicator function. For example, the affine barrier is defined as:

                   / -log(b- a.T*x)    if u.T*x < b
            f(x) =|
                   \   + inf            otherwise


 >>> import numpy as np
 >>> from proxop import AffineBarrier
 >>>
 >>> x=np.array([1,2,3])
 >>> a= np.array([-1, 5, 3])
 >>> b= 3.5
 >>> AffineBarrier(a,b)(x)
 inf  

The result below is infinite, which means 'x' does not belong to the affine set.

Projection of 'x' onto the affine set:

 >>> px= AffineBarrier(x,b).prox(x) 
 >>> px
 >>> AffineBarrier(a,b)(px)
 0.61828190224889

As expected, the result is finite, meaning the projection of 'x' belongs to the affine set.

Example 3: Matrix variable

 >>> x=np.arange(6)
 >>> x=x.reshape((2,3))
 >>> x
 array([[0, 1, 2],
       [3, 4, 5]])
 >>> a =np.ones_like(x)
 >>> a[0,:]=2
 >>> a
 array([[2., 2., 2.],
        [1., 1., 1.]])
 >>> b=np.array([-1, 2, 4])

Set 'axis=0' to process along the rows of the matrix 'x' (note the dimension of 'b' must be compatible with the shape of 'x'):

 >>> AffineBarrier(a,b, axis=0)(x)
 inf

Projection of x onton the affine set:

 >>> px = AffineBarrier(a,b, axis=0).prox(x)  
 >>> AffineBariier(x,b, axis=0)(px)
  0.157704693902156

Metadata

Release files for proxop 1.0.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for proxop 1.0.6
File Size Uploaded
proxop-1.0.6.tar.gz 79.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for proxop 1.0.6
File Interpreter ABI Platform
proxop-1.0.6-py3-none-any.whl Python 3 none any Details

Total release size: 280.2 kB

Release files / proxop-1.0.6.tar.gz

Download URL proxop-1.0.6.tar.gz
Size 79.7 kB
Tags Source
SHA-256 checksum
How to use checksums
5501dabb5d6774b79ceafa7814f27055c346d5e1ddd1e872886bc507a0a112cf
BLAKE2b-256 checksum
How to use checksums
56e90be24d946540371f7282adf5f1a9512623f1eefc70c7859587c0748a5d8d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.4.2 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.8.0 tqdm/4.30.0 CPython/3.8.10

Release files / proxop-1.0.6-py3-none-any.whl

Download URL proxop-1.0.6-py3-none-any.whl
Size 200.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1fb351334544b4775dcacb856fb8c25b41250e6445269d4de760546704e84775
BLAKE2b-256 checksum
How to use checksums
1dff36479ea79b05cf6c56defafa2fdb44118322518ef5dab88c853ef3bd4721
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.4.2 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.8.0 tqdm/4.30.0 CPython/3.8.10

Release history Release notifications | RSS feed

This release

1.0.6 This release

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.2

2 release files

1.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page