Skip to content

Atoms for DCP and DGCP

This page is intended to be a reference for the atoms that are currently implemented in this package with their respective properties. As much as possible atoms are created with functions from base, standard libraries and popular packages, but we also inherit a few functions from the CVX family of packages such as quad_form, quad_over_lin etc. and also introduce some new functions in this package. Description of all such special functions implemented in this package is available in the Special functions section of the documentation.

DCP Atoms

AtomDomainSignCurvatureMonotonicity
dot(array_domain(ℝ), array_domain(ℝ))AnySignAffineIncreasing
dotsort(array_domain(ℝ, 1), array_domain(ℝ, 1))AnySignConvex(AnyMono, increasing_if_positive ∘ minimum)
StatsBase.geomeanarray_domain(HalfLine{Real,:open}(), 1)PositiveConcaveIncreasing
StatsBase.harmmeanarray_domain(HalfLine{Real,:open}(), 1)PositiveConcaveIncreasing
invprodarray_domain(HalfLine{Real,:open}())PositiveConvexDecreasing
eigmaxsymmetric_domain()AnySignConvexAnyMono
eigminsymmetric_domain()AnySignConcaveAnyMono
eigsummax(array_domain(ℝ, 2), ℝ)AnySignConvexAnyMono
eigsummin(array_domain(ℝ, 2), ℝ)AnySignConcaveAnyMono
logdetsemidefinite_domain()AnySignConcaveAnyMono
LogExpFunctions.logsumexparray_domain(ℝ, 2)AnySignConvexIncreasing
matrix_frac(array_domain(ℝ, 1), definite_domain())AnySignConvexAnyMono
maximumarray_domain(ℝ)AnySignConvexIncreasing
minimumarray_domain(ℝ)AnySignConcaveIncreasing
norm(array_domain(ℝ), Interval{:closed, :open}(1, Inf))PositiveConvexincreasing_if_positive
norm(array_domain(ℝ), Interval{:closed, :open}(0, 1))PositiveConvexincreasing_if_positive
perspective(f, x, s)(function_domain(), ℝ, Positive)Same as fSame as fAnyMono
quad_form(array_domain(ℝ, 1), semidefinite_domain())PositiveConvex(increasing_if_positive, Increasing)
quad_over_lin(array_domain(ℝ), HalfLine{Real,:open}())PositiveConvex(increasing_if_positive, Decreasing)
quad_over_lin(ℝ, HalfLine{Real,:open}())PositiveConvex(increasing_if_positive, Decreasing)
sumarray_domain(ℝ, 2)AnySignAffineIncreasing
sum_largest(array_domain(ℝ, 2), ℤ)AnySignConvexIncreasing
sum_smallest(array_domain(ℝ, 2), ℤ)AnySignConcaveIncreasing
trarray_domain(ℝ, 2)AnySignAffineIncreasing
trinvdefinite_domain()PositiveConvexAnyMono
tvarray_domain(ℝ, 1)PositiveConvexAnyMono
tvarray_domain(array_domain(ℝ, 2), 1)PositiveConvexAnyMono
absPositiveConvexincreasing_if_positive
conjAnySignAffineAnyMono
expPositiveConvexIncreasing
xlogxAnySignConvexAnyMono
huber(ℝ, HalfLine())PositiveConvexincreasing_if_positive
imagAnySignAffineAnyMono
invHalfLine{Real,:open}()PositiveConvexDecreasing
logHalfLine{Real,:open}()AnySignConcaveIncreasing
logarray_domain(ℝ, 2)PositiveConcaveIncreasing
invsemidefinite_domain()AnySignConvexDecreasing
sqrtsemidefinite_domain()PositiveConcaveIncreasing
kldivergence(array_domain(HalfLine{Real,:open}, 1), array_domain(HalfLine{Real,:open}, 1))PositiveConvexAnyMono
lognormcdfNegativeConcaveIncreasing
log1pInterval{:open,:open}(-1, Inf)NegativeConcaveIncreasing
logisticPositiveConvexIncreasing
max(ℝ, ℝ)AnySignConvexIncreasing
min(ℝ, ℝ)AnySignConcaveIncreasing
^(x, i)See belowSee belowSee belowSee below
realAnySignAffineIncreasing
rel_entr(HalfLine{Real,:open}(), HalfLine{Real,:open}())AnySignConvex(AnyMono, Decreasing)
sqrtHalfLine()PositiveConcaveIncreasing
xexpxHalfLinePositiveConvexIncreasing
conv(array_domain(ℝ, 1), array_domain(ℝ, 1))AnySignAffineAnyMono
cumsumarray_domain(ℝ)AnySignAffineIncreasing
diagmarray_domain(ℝ, 1)AnySignAffineIncreasing
diagarray_domain(ℝ, 2)AnySignAffineIncreasing
diffarray_domain(ℝ)AnySignAffineIncreasing
kron(array_domain(ℝ, 2), array_domain(ℝ, 2))AnySignAffineIncreasing

Special Cases for ^(x, i)

Condition on iDomainSignCurvatureMonotonicity
i = 1AnySignAffineIncreasing
i is even integerPositiveConvexincreasing_if_positive
i is odd integerHalfLine()PositiveConvexIncreasing
i ≥ 1HalfLine()PositiveConvexIncreasing
0 < i < 1HalfLine()PositiveConcaveIncreasing
i < 0HalfLine{Float64,:closed}()PositiveConvexIncreasing

DGCP Atoms (Symmetric Positive Definite)

AtomSignGeodesic CurvatureMonotonicity
LinearAlgebra.logdetPositiveGLinearGIncreasing
conjugationPositiveGConvexGIncreasing
LinearAlgebra.trPositiveGConvexGIncreasing
sumPositiveGConvexGIncreasing
adjointPositiveGLinearGIncreasing
scalar_matPositiveGConvexGIncreasing
LinearAlgebra.diagPositiveGConvexGIncreasing
sdivergencePositiveGConvexGIncreasing
Manifolds.distancePositiveGConvexGAnyMono
SymbolicAnalysis.quad_formPositiveGConvexGIncreasing
LinearAlgebra.eigmaxPositiveGConvexGIncreasing
log_quad_formPositiveGConvexGIncreasing
invPositiveGConvexGDecreasing
diagPositiveGConvexGIncreasing
eigsummaxPositiveGConvexGIncreasing
schatten_normPositiveGConvexGIncreasing
sum_log_eigmaxPositiveGConvexGIncreasing
affine_mapPositiveGConvexGIncreasing
hadamard_productPositiveGConvexGIncreasing