From 64f1f695669145a7d395ba20040cfe918a9b5bde Mon Sep 17 00:00:00 2001 From: Stefan de Lange Date: Wed, 4 Mar 2026 19:56:29 +0100 Subject: [PATCH 1/8] Ignore VSCode settings.json --- .vscode/settings.json | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..64b4def --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "julia.environmentPath": "/home/langestefan/dev/projects/2026/SymbolicAnalysis.jl" +} \ No newline at end of file From 529c6db849199960cdd2ec45715e8883ac24f55e Mon Sep 17 00:00:00 2001 From: Stefan de Lange Date: Thu, 5 Mar 2026 02:21:49 +0100 Subject: [PATCH 2/8] Add atom JSON files --- docs/src/data/dcp_atoms.json | 434 ++++++++++++++++++++++++++ docs/src/data/dcp_power_atoms.json | 50 +++ docs/src/data/dgcp_lorentz_atoms.json | 44 +++ docs/src/data/dgcp_spd_atoms.json | 135 ++++++++ 4 files changed, 663 insertions(+) create mode 100644 docs/src/data/dcp_atoms.json create mode 100644 docs/src/data/dcp_power_atoms.json create mode 100644 docs/src/data/dgcp_lorentz_atoms.json create mode 100644 docs/src/data/dgcp_spd_atoms.json diff --git a/docs/src/data/dcp_atoms.json b/docs/src/data/dcp_atoms.json new file mode 100644 index 0000000..9b0913d --- /dev/null +++ b/docs/src/data/dcp_atoms.json @@ -0,0 +1,434 @@ +[ + { + "atom": "dot", + "meaning": "x^\\top y", + "domain": "\\mathbb{R}^n \\times \\mathbb{R}^n", + "sign": "AnySign", + "curvature": "Affine", + "monotonicity": "Increasing" + }, + { + "atom": "dotsort", + "meaning": "\\operatorname{sort}(x)^\\top \\operatorname{sort}(y)", + "domain": "\\mathbb{R}^n \\times \\mathbb{R}^n", + "sign": "AnySign", + "curvature": "Convex", + "monotonicity": "(Any, Incr. if pos. ∘ minimum)" + }, + { + "atom": "geomean", + "meaning": "\\left(\\prod_{i=1}^n x_i\\right)^{1/n}", + "domain": "\\mathbb{R}_{++}^n", + "sign": "Positive", + "curvature": "Concave", + "monotonicity": "Increasing" + }, + { + "atom": "harmmean", + "meaning": "\\frac{n}{\\sum_{i=1}^n x_i^{-1}}", + "domain": "\\mathbb{R}_{++}^n", + "sign": "Positive", + "curvature": "Concave", + "monotonicity": "Increasing" + }, + { + "atom": "invprod", + "meaning": "\\frac{1}{\\prod_{i} x_i}", + "domain": "\\mathbb{R}_{++}^n", + "sign": "Positive", + "curvature": "Convex", + "monotonicity": "Decreasing" + }, + { + "atom": "eigmax", + "meaning": "\\lambda_{\\max}(X)", + "domain": "\\mathbb{S}^n", + "sign": "AnySign", + "curvature": "Convex", + "monotonicity": "Any" + }, + { + "atom": "eigmin", + "meaning": "\\lambda_{\\min}(X)", + "domain": "\\mathbb{S}^n", + "sign": "AnySign", + "curvature": "Concave", + "monotonicity": "Any" + }, + { + "atom": "eigsummax", + "meaning": "\\sum_{i=1}^{k} \\lambda_i^{\\downarrow}(X)", + "domain": "\\mathbb{R}^{m \\times n} \\times \\mathbb{R}", + "sign": "AnySign", + "curvature": "Convex", + "monotonicity": "Any" + }, + { + "atom": "eigsummin", + "meaning": "\\sum_{i=1}^{k} \\lambda_i^{\\uparrow}(X)", + "domain": "\\mathbb{R}^{m \\times n} \\times \\mathbb{R}", + "sign": "AnySign", + "curvature": "Concave", + "monotonicity": "Any" + }, + { + "atom": "logdet", + "meaning": "\\log \\det(X)", + "domain": "\\mathbb{S}_+^n", + "sign": "AnySign", + "curvature": "Concave", + "monotonicity": "Any" + }, + { + "atom": "logsumexp", + "meaning": "\\log \\sum_{i} e^{x_i}", + "domain": "\\mathbb{R}^{m \\times n}", + "sign": "AnySign", + "curvature": "Convex", + "monotonicity": "Increasing" + }, + { + "atom": "matrix_frac", + "meaning": "x^\\top P^{-1} x", + "domain": "\\mathbb{R}^n \\times \\mathbb{S}_{++}^n", + "sign": "AnySign", + "curvature": "Convex", + "monotonicity": "Any" + }, + { + "atom": "maximum", + "meaning": "\\max_i\\, x_i", + "domain": "\\mathbb{R}^n", + "sign": "AnySign", + "curvature": "Convex", + "monotonicity": "Increasing" + }, + { + "atom": "minimum", + "meaning": "\\min_i\\, x_i", + "domain": "\\mathbb{R}^n", + "sign": "AnySign", + "curvature": "Concave", + "monotonicity": "Increasing" + }, + { + "atom": "norm (p ≥ 1)", + "meaning": "\\|x\\|_p", + "domain": "\\mathbb{R}^n \\times [1, \\infty)", + "sign": "Positive", + "curvature": "Convex", + "monotonicity": "Incr. if pos." + }, + { + "atom": "norm (0 < p < 1)", + "meaning": "\\|x\\|_p", + "domain": "\\mathbb{R}^n \\times [0, 1)", + "sign": "Positive", + "curvature": "Convex", + "monotonicity": "Incr. if pos." + }, + { + "atom": "perspective(f, x, s)", + "meaning": "s \\cdot f(x/s)", + "domain": "f \\times \\mathbb{R} \\times \\mathbb{R}_+", + "sign": "Same as f", + "curvature": "Same as f", + "monotonicity": "Any" + }, + { + "atom": "quad_form", + "meaning": "x^\\top P x", + "domain": "\\mathbb{R}^n \\times \\mathbb{S}_+^n", + "sign": "Positive", + "curvature": "Convex", + "monotonicity": "(Incr. if pos., Increasing)" + }, + { + "atom": "quad_over_lin (array)", + "meaning": "\\|x\\|_2^2 / y", + "domain": "\\mathbb{R}^n \\times \\mathbb{R}_{++}", + "sign": "Positive", + "curvature": "Convex", + "monotonicity": "(Incr. if pos., Decreasing)" + }, + { + "atom": "quad_over_lin (scalar)", + "meaning": "x^2 / y", + "domain": "\\mathbb{R} \\times \\mathbb{R}_{++}", + "sign": "Positive", + "curvature": "Convex", + "monotonicity": "(Incr. if pos., Decreasing)" + }, + { + "atom": "sum", + "meaning": "\\sum_{ij} X_{ij}", + "domain": "\\mathbb{R}^{m \\times n}", + "sign": "AnySign", + "curvature": "Affine", + "monotonicity": "Increasing" + }, + { + "atom": "sum_largest", + "meaning": "\\sum_{i=1}^{k} x_i^{\\downarrow}", + "domain": "\\mathbb{R}^{m \\times n} \\times \\mathbb{Z}", + "sign": "AnySign", + "curvature": "Convex", + "monotonicity": "Increasing" + }, + { + "atom": "sum_smallest", + "meaning": "\\sum_{i=1}^{k} x_i^{\\uparrow}", + "domain": "\\mathbb{R}^{m \\times n} \\times \\mathbb{Z}", + "sign": "AnySign", + "curvature": "Concave", + "monotonicity": "Increasing" + }, + { + "atom": "tr", + "meaning": "\\operatorname{tr}(X)", + "domain": "\\mathbb{R}^{m \\times n}", + "sign": "AnySign", + "curvature": "Affine", + "monotonicity": "Increasing" + }, + { + "atom": "trinv", + "meaning": "\\operatorname{tr}(X^{-1})", + "domain": "\\mathbb{S}_{++}^n", + "sign": "Positive", + "curvature": "Convex", + "monotonicity": "Any" + }, + { + "atom": "tv (vector)", + "meaning": "\\sum_i |x_{i+1} - x_i|", + "domain": "\\mathbb{R}^n", + "sign": "Positive", + "curvature": "Convex", + "monotonicity": "Any" + }, + { + "atom": "tv (matrix)", + "meaning": "\\sum_{i,j} \\|x_{i+1,j} - x_{i,j}\\|_2", + "domain": "(\\mathbb{R}^{m \\times n})^k", + "sign": "Positive", + "curvature": "Convex", + "monotonicity": "Any" + }, + { + "atom": "abs", + "meaning": "|x|", + "domain": "\\mathbb{C}", + "sign": "Positive", + "curvature": "Convex", + "monotonicity": "Incr. if pos." + }, + { + "atom": "conj", + "meaning": "\\bar{x}", + "domain": "\\mathbb{C}", + "sign": "AnySign", + "curvature": "Affine", + "monotonicity": "Any" + }, + { + "atom": "exp", + "meaning": "e^x", + "domain": "\\mathbb{R}", + "sign": "Positive", + "curvature": "Convex", + "monotonicity": "Increasing" + }, + { + "atom": "xlogx", + "meaning": "x \\log x", + "domain": "\\mathbb{R}", + "sign": "AnySign", + "curvature": "Convex", + "monotonicity": "Any" + }, + { + "atom": "huber", + "meaning": "\\begin{cases} x^2 & |x|\\le M \\\\ 2M|x|-M^2 & \\text{else} \\end{cases}", + "domain": "\\mathbb{R} \\times \\mathbb{R}_+", + "sign": "Positive", + "curvature": "Convex", + "monotonicity": "Incr. if pos." + }, + { + "atom": "imag", + "meaning": "\\operatorname{Im}(x)", + "domain": "\\mathbb{C}", + "sign": "AnySign", + "curvature": "Affine", + "monotonicity": "Any" + }, + { + "atom": "inv (scalar)", + "meaning": "1/x", + "domain": "\\mathbb{R}_{++}", + "sign": "Positive", + "curvature": "Convex", + "monotonicity": "Decreasing" + }, + { + "atom": "log (scalar)", + "meaning": "\\log x", + "domain": "\\mathbb{R}_{++}", + "sign": "AnySign", + "curvature": "Concave", + "monotonicity": "Increasing" + }, + { + "atom": "log (matrix)", + "meaning": "\\log(X)", + "domain": "\\mathbb{R}^{m \\times n}", + "sign": "Positive", + "curvature": "Concave", + "monotonicity": "Increasing" + }, + { + "atom": "inv (matrix)", + "meaning": "X^{-1}", + "domain": "\\mathbb{S}_+^n", + "sign": "AnySign", + "curvature": "Convex", + "monotonicity": "Decreasing" + }, + { + "atom": "sqrt (matrix)", + "meaning": "X^{1/2}", + "domain": "\\mathbb{S}_+^n", + "sign": "Positive", + "curvature": "Concave", + "monotonicity": "Increasing" + }, + { + "atom": "kldivergence", + "meaning": "\\sum_i x_i \\log\\!\\left(\\frac{x_i}{y_i}\\right)", + "domain": "\\mathbb{R}_{++}^n \\times \\mathbb{R}_{++}^n", + "sign": "Positive", + "curvature": "Convex", + "monotonicity": "Any" + }, + { + "atom": "lognormcdf", + "meaning": "\\log \\Phi(x)", + "domain": "\\mathbb{R}", + "sign": "Negative", + "curvature": "Concave", + "monotonicity": "Increasing" + }, + { + "atom": "log1p", + "meaning": "\\log(1 + x)", + "domain": "(-1, \\infty)", + "sign": "Negative", + "curvature": "Concave", + "monotonicity": "Increasing" + }, + { + "atom": "logistic", + "meaning": "\\log(1 + e^x)", + "domain": "\\mathbb{R}", + "sign": "Positive", + "curvature": "Convex", + "monotonicity": "Increasing" + }, + { + "atom": "max", + "meaning": "\\max(x, y)", + "domain": "\\mathbb{R} \\times \\mathbb{R}", + "sign": "AnySign", + "curvature": "Convex", + "monotonicity": "Increasing" + }, + { + "atom": "min", + "meaning": "\\min(x, y)", + "domain": "\\mathbb{R} \\times \\mathbb{R}", + "sign": "AnySign", + "curvature": "Concave", + "monotonicity": "Increasing" + }, + { + "atom": "real", + "meaning": "\\operatorname{Re}(x)", + "domain": "\\mathbb{C}", + "sign": "AnySign", + "curvature": "Affine", + "monotonicity": "Increasing" + }, + { + "atom": "rel_entr", + "meaning": "x \\log(x / y)", + "domain": "\\mathbb{R}_{++} \\times \\mathbb{R}_{++}", + "sign": "AnySign", + "curvature": "Convex", + "monotonicity": "(Any, Decreasing)" + }, + { + "atom": "sqrt (scalar)", + "meaning": "\\sqrt{x}", + "domain": "\\mathbb{R}_+", + "sign": "Positive", + "curvature": "Concave", + "monotonicity": "Increasing" + }, + { + "atom": "xexpx", + "meaning": "x e^x", + "domain": "\\mathbb{R}_+", + "sign": "Positive", + "curvature": "Convex", + "monotonicity": "Increasing" + }, + { + "atom": "conv", + "meaning": "x * y", + "domain": "\\mathbb{R}^n \\times \\mathbb{R}^n", + "sign": "AnySign", + "curvature": "Affine", + "monotonicity": "Any" + }, + { + "atom": "cumsum", + "meaning": "\\left[\\sum_{j=1}^{i} x_j\\right]_i", + "domain": "\\mathbb{R}^n", + "sign": "AnySign", + "curvature": "Affine", + "monotonicity": "Increasing" + }, + { + "atom": "diagm", + "meaning": "\\left[\\begin{smallmatrix}x_1 & & \\\\ & \\ddots & \\\\ & & x_n\\end{smallmatrix}\\right]", + "domain": "\\mathbb{R}^n", + "sign": "AnySign", + "curvature": "Affine", + "monotonicity": "Increasing" + }, + { + "atom": "diag", + "meaning": "[X_{11}, \\ldots, X_{nn}]", + "domain": "\\mathbb{R}^{m \\times n}", + "sign": "AnySign", + "curvature": "Affine", + "monotonicity": "Increasing" + }, + { + "atom": "diff", + "meaning": "[x_{i+1} - x_i]_i", + "domain": "\\mathbb{R}^n", + "sign": "AnySign", + "curvature": "Affine", + "monotonicity": "Increasing" + }, + { + "atom": "kron", + "meaning": "X \\otimes Y", + "domain": "\\mathbb{R}^{m \\times n} \\times \\mathbb{R}^{m \\times n}", + "sign": "AnySign", + "curvature": "Affine", + "monotonicity": "Increasing" + } +] \ No newline at end of file diff --git a/docs/src/data/dcp_power_atoms.json b/docs/src/data/dcp_power_atoms.json new file mode 100644 index 0000000..735d834 --- /dev/null +++ b/docs/src/data/dcp_power_atoms.json @@ -0,0 +1,50 @@ +[ + { + "condition": "i = 1", + "meaning": "x", + "domain": "\\mathbb{R}", + "sign": "AnySign", + "curvature": "Affine", + "monotonicity": "Increasing" + }, + { + "condition": "i \\text{ even integer}", + "meaning": "x^i", + "domain": "\\mathbb{R}", + "sign": "Positive", + "curvature": "Convex", + "monotonicity": "Incr. if pos." + }, + { + "condition": "i \\text{ odd integer}", + "meaning": "x^i", + "domain": "\\mathbb{R}_+", + "sign": "Positive", + "curvature": "Convex", + "monotonicity": "Increasing" + }, + { + "condition": "i \\geq 1", + "meaning": "x^i", + "domain": "\\mathbb{R}_+", + "sign": "Positive", + "curvature": "Convex", + "monotonicity": "Increasing" + }, + { + "condition": "0 < i < 1", + "meaning": "x^i", + "domain": "\\mathbb{R}_+", + "sign": "Positive", + "curvature": "Concave", + "monotonicity": "Increasing" + }, + { + "condition": "i < 0", + "meaning": "x^i", + "domain": "\\mathbb{R}_+", + "sign": "Positive", + "curvature": "Convex", + "monotonicity": "Increasing" + } +] \ No newline at end of file diff --git a/docs/src/data/dgcp_lorentz_atoms.json b/docs/src/data/dgcp_lorentz_atoms.json new file mode 100644 index 0000000..2f06467 --- /dev/null +++ b/docs/src/data/dgcp_lorentz_atoms.json @@ -0,0 +1,44 @@ +[ + { + "atom": "lorentz_distance", + "meaning": "d_{\\mathbb{H}}(p, q)", + "sign": "Positive", + "curvature": "GConvex", + "monotonicity": "GAny" + }, + { + "atom": "lorentz_log_barrier", + "meaning": "-\\log(-1 + p_{d+1})", + "sign": "Positive", + "curvature": "GConvex", + "monotonicity": "GIncreasing" + }, + { + "atom": "lorentz_homogeneous_quadratic", + "meaning": "p^\\top A\\, p", + "sign": "Positive", + "curvature": "GConvex", + "monotonicity": "GAny" + }, + { + "atom": "lorentz_homogeneous_diagonal", + "meaning": "\\sum_i a_i\\, p_i^2", + "sign": "Positive", + "curvature": "GConvex", + "monotonicity": "GAny" + }, + { + "atom": "lorentz_least_squares", + "meaning": "\\|y - Xp\\|_2^2", + "sign": "Positive", + "curvature": "GConvex", + "monotonicity": "GAny" + }, + { + "atom": "lorentz_transform", + "meaning": "Op", + "sign": "—", + "curvature": "—", + "monotonicity": "—" + } +] \ No newline at end of file diff --git a/docs/src/data/dgcp_spd_atoms.json b/docs/src/data/dgcp_spd_atoms.json new file mode 100644 index 0000000..b98ad55 --- /dev/null +++ b/docs/src/data/dgcp_spd_atoms.json @@ -0,0 +1,135 @@ +[ + { + "atom": "logdet", + "meaning": "\\log \\det(X)", + "sign": "Positive", + "curvature": "GLinear", + "monotonicity": "GIncreasing" + }, + { + "atom": "conjugation", + "meaning": "B^\\top X B", + "sign": "Positive", + "curvature": "GConvex", + "monotonicity": "GIncreasing" + }, + { + "atom": "tr", + "meaning": "\\operatorname{tr}(X)", + "sign": "Positive", + "curvature": "GConvex", + "monotonicity": "GIncreasing" + }, + { + "atom": "sum", + "meaning": "\\sum_{ij} X_{ij}", + "sign": "Positive", + "curvature": "GConvex", + "monotonicity": "GIncreasing" + }, + { + "atom": "adjoint", + "meaning": "X^\\top", + "sign": "Positive", + "curvature": "GLinear", + "monotonicity": "GIncreasing" + }, + { + "atom": "scalar_mat", + "meaning": "\\operatorname{tr}(X) \\cdot I_k", + "sign": "Positive", + "curvature": "GConvex", + "monotonicity": "GIncreasing" + }, + { + "atom": "diag", + "meaning": "[X_{11}, \\ldots, X_{nn}]", + "sign": "Positive", + "curvature": "GConvex", + "monotonicity": "GIncreasing" + }, + { + "atom": "sdivergence", + "meaning": "\\log\\!\\det\\!\\tfrac{X+Y}{2} - \\tfrac{1}{2}\\log\\!\\det(XY)", + "sign": "Positive", + "curvature": "GConvex", + "monotonicity": "GIncreasing" + }, + { + "atom": "distance", + "meaning": "d_{\\mathbb{S}_{++}^n}(X, Y)", + "sign": "Positive", + "curvature": "GConvex", + "monotonicity": "GAny" + }, + { + "atom": "quad_form", + "meaning": "x^\\top X x", + "sign": "Positive", + "curvature": "GConvex", + "monotonicity": "GIncreasing" + }, + { + "atom": "eigmax", + "meaning": "\\lambda_{\\max}(X)", + "sign": "Positive", + "curvature": "GConvex", + "monotonicity": "GIncreasing" + }, + { + "atom": "log_quad_form", + "meaning": "\\log(y^\\top X y)", + "sign": "Positive", + "curvature": "GConvex", + "monotonicity": "GIncreasing" + }, + { + "atom": "inv", + "meaning": "X^{-1}", + "sign": "Positive", + "curvature": "GConvex", + "monotonicity": "GDecreasing" + }, + { + "atom": "diag", + "meaning": "[X_{11}, \\ldots, X_{nn}]", + "sign": "Positive", + "curvature": "GConvex", + "monotonicity": "GIncreasing" + }, + { + "atom": "eigsummax", + "meaning": "\\sum_{i=1}^{k} \\lambda_i^{\\downarrow}(X)", + "sign": "Positive", + "curvature": "GConvex", + "monotonicity": "GIncreasing" + }, + { + "atom": "schatten_norm", + "meaning": "\\left(\\sum_i \\sigma_i^p\\right)^{1/p}", + "sign": "Positive", + "curvature": "GConvex", + "monotonicity": "GIncreasing" + }, + { + "atom": "sum_log_eigmax", + "meaning": "\\sum_{i=1}^{k} f(\\log \\lambda_i^{\\downarrow}(X))", + "sign": "Positive", + "curvature": "GConvex", + "monotonicity": "GIncreasing" + }, + { + "atom": "affine_map", + "meaning": "g(B^\\top X B) + C", + "sign": "Positive", + "curvature": "GConvex", + "monotonicity": "GIncreasing" + }, + { + "atom": "hadamard_product", + "meaning": "X \\circ Y", + "sign": "Positive", + "curvature": "GConvex", + "monotonicity": "GIncreasing" + } +] \ No newline at end of file From c647fc1baccbe21e727158f0e35aca42cd1ebfdb Mon Sep 17 00:00:00 2001 From: Stefan de Lange Date: Thu, 5 Mar 2026 02:22:01 +0100 Subject: [PATCH 3/8] Add atoms table vue component --- .../.vitepress/theme/components/AtomTable.vue | 855 ++++++++++++++++++ 1 file changed, 855 insertions(+) create mode 100644 docs/src/.vitepress/theme/components/AtomTable.vue diff --git a/docs/src/.vitepress/theme/components/AtomTable.vue b/docs/src/.vitepress/theme/components/AtomTable.vue new file mode 100644 index 0000000..1337629 --- /dev/null +++ b/docs/src/.vitepress/theme/components/AtomTable.vue @@ -0,0 +1,855 @@ + + + + + From 46939f5f809a08df6fd14641ea97b193cd428ef6 Mon Sep 17 00:00:00 2001 From: Stefan de Lange Date: Thu, 5 Mar 2026 02:22:15 +0100 Subject: [PATCH 4/8] Add atom table to index --- docs/src/.vitepress/theme/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/src/.vitepress/theme/index.ts b/docs/src/.vitepress/theme/index.ts index 463b5d8..80520e2 100644 --- a/docs/src/.vitepress/theme/index.ts +++ b/docs/src/.vitepress/theme/index.ts @@ -4,6 +4,7 @@ import type { Theme } from 'vitepress' import DefaultTheme from 'vitepress/theme' import { enhanceAppWithTabs } from 'vitepress-plugin-tabs/client' +import AtomTable from './components/AtomTable.vue' import './style.css' export default { @@ -15,5 +16,6 @@ export default { }, enhanceApp({ app, router, siteData }) { enhanceAppWithTabs(app) + app.component('AtomTable', AtomTable) } } satisfies Theme \ No newline at end of file From fb1c9c2eee323f7db3ac3f6fb880ae8df11baa08 Mon Sep 17 00:00:00 2001 From: Stefan de Lange Date: Thu, 5 Mar 2026 02:22:51 +0100 Subject: [PATCH 5/8] Update atoms.md to load atom tables from raw HTML --- docs/src/atoms.md | 118 ++++++++-------------------------------------- 1 file changed, 20 insertions(+), 98 deletions(-) diff --git a/docs/src/atoms.md b/docs/src/atoms.md index 4bb1018..f6f1b05 100644 --- a/docs/src/atoms.md +++ b/docs/src/atoms.md @@ -2,110 +2,32 @@ 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](@ref) section of the documentation. +Use the **search box** to filter by name, or the **dropdown menus** to filter by curvature, sign, or monotonicity. Click any **column header** to sort. + ## DCP Atoms -| Atom | Domain | Sign | Curvature | Monotonicity | -|:------------------------- |:------------------------------------------------------------------------------ |:--------- |:--------- |:------------------------------------------- | -| dot | (array_domain(ℝ), array_domain(ℝ)) | AnySign | Affine | Increasing | -| dotsort | (array_domain(ℝ, 1), array_domain(ℝ, 1)) | AnySign | Convex | (AnyMono, increasing_if_positive ∘ minimum) | -| StatsBase.geomean | array_domain(HalfLine{Real,:open}(), 1) | Positive | Concave | Increasing | -| StatsBase.harmmean | array_domain(HalfLine{Real,:open}(), 1) | Positive | Concave | Increasing | -| invprod | array_domain(HalfLine{Real,:open}()) | Positive | Convex | Decreasing | -| eigmax | symmetric_domain() | AnySign | Convex | AnyMono | -| eigmin | symmetric_domain() | AnySign | Concave | AnyMono | -| eigsummax | (array_domain(ℝ, 2), ℝ) | AnySign | Convex | AnyMono | -| eigsummin | (array_domain(ℝ, 2), ℝ) | AnySign | Concave | AnyMono | -| logdet | semidefinite_domain() | AnySign | Concave | AnyMono | -| LogExpFunctions.logsumexp | array_domain(ℝ, 2) | AnySign | Convex | Increasing | -| matrix_frac | (array_domain(ℝ, 1), definite_domain()) | AnySign | Convex | AnyMono | -| maximum | array_domain(ℝ) | AnySign | Convex | Increasing | -| minimum | array_domain(ℝ) | AnySign | Concave | Increasing | -| norm | (array_domain(ℝ), Interval{:closed, :open}(1, Inf)) | Positive | Convex | increasing_if_positive | -| norm | (array_domain(ℝ), Interval{:closed, :open}(0, 1)) | Positive | Convex | increasing_if_positive | -| perspective(f, x, s) | (function_domain(), ℝ, Positive) | Same as f | Same as f | AnyMono | -| quad_form | (array_domain(ℝ, 1), semidefinite_domain()) | Positive | Convex | (increasing_if_positive, Increasing) | -| quad_over_lin | (array_domain(ℝ), HalfLine{Real,:open}()) | Positive | Convex | (increasing_if_positive, Decreasing) | -| quad_over_lin | (ℝ, HalfLine{Real,:open}()) | Positive | Convex | (increasing_if_positive, Decreasing) | -| sum | array_domain(ℝ, 2) | AnySign | Affine | Increasing | -| sum_largest | (array_domain(ℝ, 2), ℤ) | AnySign | Convex | Increasing | -| sum_smallest | (array_domain(ℝ, 2), ℤ) | AnySign | Concave | Increasing | -| tr | array_domain(ℝ, 2) | AnySign | Affine | Increasing | -| trinv | definite_domain() | Positive | Convex | AnyMono | -| tv | array_domain(ℝ, 1) | Positive | Convex | AnyMono | -| tv | array_domain(array_domain(ℝ, 2), 1) | Positive | Convex | AnyMono | -| abs | ℂ | Positive | Convex | increasing_if_positive | -| conj | ℂ | AnySign | Affine | AnyMono | -| exp | ℝ | Positive | Convex | Increasing | -| xlogx | ℝ | AnySign | Convex | AnyMono | -| huber | (ℝ, HalfLine()) | Positive | Convex | increasing_if_positive | -| imag | ℂ | AnySign | Affine | AnyMono | -| inv | HalfLine{Real,:open}() | Positive | Convex | Decreasing | -| log | HalfLine{Real,:open}() | AnySign | Concave | Increasing | -| log | array_domain(ℝ, 2) | Positive | Concave | Increasing | -| inv | semidefinite_domain() | AnySign | Convex | Decreasing | -| sqrt | semidefinite_domain() | Positive | Concave | Increasing | -| kldivergence | (array_domain(HalfLine{Real,:open}, 1), array_domain(HalfLine{Real,:open}, 1)) | Positive | Convex | AnyMono | -| lognormcdf | ℝ | Negative | Concave | Increasing | -| log1p | Interval{:open,:open}(-1, Inf) | Negative | Concave | Increasing | -| logistic | ℝ | Positive | Convex | Increasing | -| max | (ℝ, ℝ) | AnySign | Convex | Increasing | -| min | (ℝ, ℝ) | AnySign | Concave | Increasing | -| ^(x, i) | See below | See below | See below | See below | -| real | ℂ | AnySign | Affine | Increasing | -| rel_entr | (HalfLine{Real,:open}(), HalfLine{Real,:open}()) | AnySign | Convex | (AnyMono, Decreasing) | -| sqrt | HalfLine() | Positive | Concave | Increasing | -| xexpx | HalfLine | Positive | Convex | Increasing | -| conv | (array_domain(ℝ, 1), array_domain(ℝ, 1)) | AnySign | Affine | AnyMono | -| cumsum | array_domain(ℝ) | AnySign | Affine | Increasing | -| diagm | array_domain(ℝ, 1) | AnySign | Affine | Increasing | -| diag | array_domain(ℝ, 2) | AnySign | Affine | Increasing | -| diff | array_domain(ℝ) | AnySign | Affine | Increasing | -| kron | (array_domain(ℝ, 2), array_domain(ℝ, 2)) | AnySign | Affine | Increasing | +```@raw html + +``` -### Special Cases for ^(x, i) +### Special Cases for `^(x, i)` -| Condition on i | Domain | Sign | Curvature | Monotonicity | -|:----------------- |:--------------------------- |:-------- |:--------- |:---------------------- | -| i = 1 | ℝ | AnySign | Affine | Increasing | -| i is even integer | ℝ | Positive | Convex | increasing_if_positive | -| i is odd integer | HalfLine() | Positive | Convex | Increasing | -| i ≥ 1 | HalfLine() | Positive | Convex | Increasing | -| 0 < i < 1 | HalfLine() | Positive | Concave | Increasing | -| i < 0 | HalfLine{Float64,:closed}() | Positive | Convex | Increasing | +```@raw html + +``` -## DGCP Atoms (Symmetric Positive Definite) +## DGCP Atoms (SPD) -| Atom | Sign | Geodesic Curvature | Monotonicity | -|:-------------------------- |:-------- |:------------------ |:------------ | -| LinearAlgebra.logdet | Positive | GLinear | GIncreasing | -| conjugation | Positive | GConvex | GIncreasing | -| LinearAlgebra.tr | Positive | GConvex | GIncreasing | -| sum | Positive | GConvex | GIncreasing | -| adjoint | Positive | GLinear | GIncreasing | -| scalar_mat | Positive | GConvex | GIncreasing | -| LinearAlgebra.diag | Positive | GConvex | GIncreasing | -| sdivergence | Positive | GConvex | GIncreasing | -| Manifolds.distance | Positive | GConvex | GAnyMono | -| SymbolicAnalysis.quad_form | Positive | GConvex | GIncreasing | -| LinearAlgebra.eigmax | Positive | GConvex | GIncreasing | -| log_quad_form | Positive | GConvex | GIncreasing | -| inv | Positive | GConvex | GDecreasing | -| diag | Positive | GConvex | GIncreasing | -| eigsummax | Positive | GConvex | GIncreasing | -| schatten_norm | Positive | GConvex | GIncreasing | -| sum_log_eigmax | Positive | GConvex | GIncreasing | -| affine_map | Positive | GConvex | GIncreasing | -| hadamard_product | Positive | GConvex | GIncreasing | +```@raw html + +``` -## DGCP Atoms (Lorentz Model) +## DGCP Atoms (Lorentz) -| Atom | Sign | Geodesic Curvature | Monotonicity | -|:----------------------------- |:-------- |:------------------ |:------------ | -| lorentz_distance | Positive | GConvex | GAnyMono | -| lorentz_log_barrier | Positive | GConvex | GIncreasing | -| lorentz_homogeneous_quadratic | Positive | GConvex | GAnyMono | -| lorentz_homogeneous_diagonal | Positive | GConvex | GAnyMono | -| lorentz_least_squares | Positive | GConvex | GAnyMono | -| lorentz_transform | - | - | - | +```@raw html + +``` -Note: `lorentz_transform` does not have specific geodesic curvature properties by itself, but it preserves geodesic convexity when applied to geodesically convex functions. +!!! note + `lorentz_transform` does not have specific geodesic curvature properties by itself, + but it preserves geodesic convexity when applied to geodesically convex functions. From f500640b27bf4237a36d4eb19091a44804fb6ac7 Mon Sep 17 00:00:00 2001 From: Stefan de Lange <37669773+langestefan@users.noreply.github.com> Date: Thu, 5 Mar 2026 02:34:54 +0100 Subject: [PATCH 6/8] Delete .vscode/settings.json --- .vscode/settings.json | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 64b4def..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "julia.environmentPath": "/home/langestefan/dev/projects/2026/SymbolicAnalysis.jl" -} \ No newline at end of file From dfad5cd322463565c9d3c7fdbced891e60a6224b Mon Sep 17 00:00:00 2001 From: Stefan de Lange Date: Thu, 5 Mar 2026 03:06:36 +0100 Subject: [PATCH 7/8] Fix issue with table rendering --- .../.vitepress/theme/components/AtomTable.vue | 108 +++++++++++------- docs/src/data/dcp_atoms.json | 8 +- 2 files changed, 70 insertions(+), 46 deletions(-) diff --git a/docs/src/.vitepress/theme/components/AtomTable.vue b/docs/src/.vitepress/theme/components/AtomTable.vue index 1337629..d979713 100644 --- a/docs/src/.vitepress/theme/components/AtomTable.vue +++ b/docs/src/.vitepress/theme/components/AtomTable.vue @@ -355,30 +355,37 @@ function parseMonotonicity(raw: string): MonoPart[] { :class="['col-' + col.key, { sortable: col.sortable !== false, 'has-filter': col.filterable }]" >
- - - {{ col.label }} - - {{ sortIndicator(col.key) }} - - + + {{ col.label }} - - + +
+ + + + + +
@@ -565,6 +572,7 @@ function parseMonotonicity(raw: string): MonoPart[] { .atom-table td { padding: 0.35rem 0.5rem; text-align: left; + vertical-align: top; border-bottom: 1px solid var(--vp-c-divider); overflow: hidden; text-overflow: ellipsis; @@ -589,29 +597,42 @@ function parseMonotonicity(raw: string): MonoPart[] { /* ---- Header content layout ---- */ .th-content { - display: inline-flex; - align-items: center; - gap: 0.25rem; + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 0.15rem; } .th-label { + font-weight: 600; +} + +/* Controls row below label */ +.th-controls { display: inline-flex; align-items: center; - gap: 0.2rem; -} -.th-label.clickable { - cursor: pointer; -} -.th-label.clickable:hover { - color: var(--vp-c-brand-1); + gap: 0.15rem; } -.sort-indicator { - font-size: 0.625rem; - opacity: 0.4; +/* Sort button */ +.sort-btn { + display: inline-flex; + align-items: center; + justify-content: center; + width: 18px; + height: 18px; + padding: 0; + border: none; + border-radius: 3px; + background: transparent; + color: var(--vp-c-text-3); + cursor: pointer; + transition: all 0.15s; + flex-shrink: 0; } -.th-label.clickable:hover .sort-indicator { - opacity: 1; +.sort-btn:hover { + background: var(--vp-c-default-soft); + color: var(--vp-c-text-1); } /* ---- Filter toggle button (funnel icon in header) ---- */ @@ -629,7 +650,6 @@ function parseMonotonicity(raw: string): MonoPart[] { cursor: pointer; transition: all 0.15s; flex-shrink: 0; - margin-left: 2px; } .filter-toggle-btn:hover { background: var(--vp-c-default-soft); @@ -764,10 +784,14 @@ function parseMonotonicity(raw: string): MonoPart[] { word-break: break-word; } .col-atom, -.col-meaning, +.col-meaning { + white-space: normal; + word-break: break-word; +} .col-monotonicity { white-space: normal; word-break: break-word; + width: 1%; } .math-cell { font-size: inherit; @@ -797,7 +821,7 @@ function parseMonotonicity(raw: string): MonoPart[] { /* ---- Monotonicity cell ---- */ .mono-cell { - display: inline-flex; + display: flex; align-items: center; flex-wrap: wrap; gap: 0.15rem; @@ -807,7 +831,7 @@ function parseMonotonicity(raw: string): MonoPart[] { display: inline-flex; align-items: center; gap: 0.2rem; - white-space: nowrap; + white-space: normal; font-size: inherit; } diff --git a/docs/src/data/dcp_atoms.json b/docs/src/data/dcp_atoms.json index 9b0913d..0df5a40 100644 --- a/docs/src/data/dcp_atoms.json +++ b/docs/src/data/dcp_atoms.json @@ -144,7 +144,7 @@ "monotonicity": "(Incr. if pos., Increasing)" }, { - "atom": "quad_over_lin (array)", + "atom": "quad_over_lin", "meaning": "\\|x\\|_2^2 / y", "domain": "\\mathbb{R}^n \\times \\mathbb{R}_{++}", "sign": "Positive", @@ -152,7 +152,7 @@ "monotonicity": "(Incr. if pos., Decreasing)" }, { - "atom": "quad_over_lin (scalar)", + "atom": "quad_over_lin", "meaning": "x^2 / y", "domain": "\\mathbb{R} \\times \\mathbb{R}_{++}", "sign": "Positive", @@ -249,7 +249,7 @@ }, { "atom": "huber", - "meaning": "\\begin{cases} x^2 & |x|\\le M \\\\ 2M|x|-M^2 & \\text{else} \\end{cases}", + "meaning": "\\begin{cases} x^2 \\quad |x|\\le M & \\\\ 2M|x|-M^2 & \\text{else} \\end{cases}", "domain": "\\mathbb{R} \\times \\mathbb{R}_+", "sign": "Positive", "curvature": "Convex", @@ -431,4 +431,4 @@ "curvature": "Affine", "monotonicity": "Increasing" } -] \ No newline at end of file +] From cad41c8ceaebd954e21ec5dda51128a35347892f Mon Sep 17 00:00:00 2001 From: Stefan de Lange Date: Fri, 6 Mar 2026 02:49:17 +0100 Subject: [PATCH 8/8] Add external refs to atoms table --- .../.vitepress/theme/components/AtomTable.vue | 34 +++++- docs/src/atoms.md | 2 +- docs/src/data/dcp_atoms.json | 111 ++++++++++++------ docs/src/data/dgcp_lorentz_atoms.json | 5 +- docs/src/data/dgcp_spd_atoms.json | 29 +++-- 5 files changed, 129 insertions(+), 52 deletions(-) diff --git a/docs/src/.vitepress/theme/components/AtomTable.vue b/docs/src/.vitepress/theme/components/AtomTable.vue index d979713..1b756cd 100644 --- a/docs/src/.vitepress/theme/components/AtomTable.vue +++ b/docs/src/.vitepress/theme/components/AtomTable.vue @@ -106,6 +106,7 @@ const docLinks: Record = { 'tv (matrix)': 'SymbolicAnalysis.tv-Tuple{AbstractVector{<:AbstractMatrix}}', 'huber': 'SymbolicAnalysis.huber', 'lognormcdf': 'SymbolicAnalysis.lognormcdf-Tuple{Real}', + 'rel_entr': 'SymbolicAnalysis.rel_entr-Tuple{Real, Real}', // DGCP SPD atoms 'conjugation': 'SymbolicAnalysis.conjugation-Tuple{Any, Any}', 'scalar_mat': 'SymbolicAnalysis.scalar_mat', @@ -124,11 +125,18 @@ const docLinks: Record = { 'lorentz_transform': 'SymbolicAnalysis.lorentz_transform-Tuple{AbstractMatrix, AbstractVector}', } -function getDocLink(atomName: string): string | null { +function getDocLink(atomName: string, row?: Record): string | null { + // First check for external doc URL from JSON data (external packages) + if (row?.docUrl) return row.docUrl + // Then check for internal docstring link (SymbolicAnalysis functions) const anchor = docLinks[atomName] return anchor ? `./functions.html#${anchor}` : null } +function isExternalLink(row?: Record): boolean { + return !!row?.docUrl +} + /* ------------------------------------------------------------------ */ /* Search & filter state */ /* ------------------------------------------------------------------ */ @@ -489,8 +497,20 @@ function parseMonotonicity(raw: string): MonoPart[] { @@ -776,6 +796,16 @@ function parseMonotonicity(raw: string): MonoPart[] { background: var(--vp-c-brand-soft); color: var(--vp-c-brand-2, var(--vp-c-brand-1)); } +.atom-link .external-icon { + display: inline-block; + vertical-align: middle; + margin-left: 3px; + opacity: 0.5; + transition: opacity 0.15s; +} +.atom-link:hover .external-icon { + opacity: 0.85; +} /* ---- Math / domain cell ---- */ .col-domain, diff --git a/docs/src/atoms.md b/docs/src/atoms.md index f6f1b05..4b6ce16 100644 --- a/docs/src/atoms.md +++ b/docs/src/atoms.md @@ -2,7 +2,7 @@ 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](@ref) section of the documentation. -Use the **search box** to filter by name, or the **dropdown menus** to filter by curvature, sign, or monotonicity. Click any **column header** to sort. +Use the **dropdown menus** to filter by curvature, sign, or monotonicity. Click any **column header** to sort. Atom names link to their documentation — external links (marked with ↗) open in a new tab. ## DCP Atoms diff --git a/docs/src/data/dcp_atoms.json b/docs/src/data/dcp_atoms.json index 0df5a40..39ba613 100644 --- a/docs/src/data/dcp_atoms.json +++ b/docs/src/data/dcp_atoms.json @@ -5,7 +5,8 @@ "domain": "\\mathbb{R}^n \\times \\mathbb{R}^n", "sign": "AnySign", "curvature": "Affine", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#LinearAlgebra.dot" }, { "atom": "dotsort", @@ -21,7 +22,8 @@ "domain": "\\mathbb{R}_{++}^n", "sign": "Positive", "curvature": "Concave", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://juliastats.org/StatsBase.jl/stable/scalarstats/#StatsBase.geomean" }, { "atom": "harmmean", @@ -29,7 +31,8 @@ "domain": "\\mathbb{R}_{++}^n", "sign": "Positive", "curvature": "Concave", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://juliastats.org/StatsBase.jl/stable/scalarstats/#StatsBase.harmmean" }, { "atom": "invprod", @@ -45,7 +48,8 @@ "domain": "\\mathbb{S}^n", "sign": "AnySign", "curvature": "Convex", - "monotonicity": "Any" + "monotonicity": "Any", + "docUrl": "https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#LinearAlgebra.eigmax" }, { "atom": "eigmin", @@ -53,7 +57,8 @@ "domain": "\\mathbb{S}^n", "sign": "AnySign", "curvature": "Concave", - "monotonicity": "Any" + "monotonicity": "Any", + "docUrl": "https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#LinearAlgebra.eigmin" }, { "atom": "eigsummax", @@ -77,7 +82,8 @@ "domain": "\\mathbb{S}_+^n", "sign": "AnySign", "curvature": "Concave", - "monotonicity": "Any" + "monotonicity": "Any", + "docUrl": "https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#LinearAlgebra.logdet" }, { "atom": "logsumexp", @@ -85,7 +91,8 @@ "domain": "\\mathbb{R}^{m \\times n}", "sign": "AnySign", "curvature": "Convex", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://juliastats.org/LogExpFunctions.jl/stable/api/#LogExpFunctions.logsumexp" }, { "atom": "matrix_frac", @@ -101,7 +108,8 @@ "domain": "\\mathbb{R}^n", "sign": "AnySign", "curvature": "Convex", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://docs.julialang.org/en/v1/base/collections/#Base.maximum" }, { "atom": "minimum", @@ -109,7 +117,8 @@ "domain": "\\mathbb{R}^n", "sign": "AnySign", "curvature": "Concave", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://docs.julialang.org/en/v1/base/collections/#Base.minimum" }, { "atom": "norm (p ≥ 1)", @@ -117,7 +126,8 @@ "domain": "\\mathbb{R}^n \\times [1, \\infty)", "sign": "Positive", "curvature": "Convex", - "monotonicity": "Incr. if pos." + "monotonicity": "Incr. if pos.", + "docUrl": "https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#LinearAlgebra.norm" }, { "atom": "norm (0 < p < 1)", @@ -125,7 +135,8 @@ "domain": "\\mathbb{R}^n \\times [0, 1)", "sign": "Positive", "curvature": "Convex", - "monotonicity": "Incr. if pos." + "monotonicity": "Incr. if pos.", + "docUrl": "https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#LinearAlgebra.norm" }, { "atom": "perspective(f, x, s)", @@ -165,7 +176,8 @@ "domain": "\\mathbb{R}^{m \\times n}", "sign": "AnySign", "curvature": "Affine", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://docs.julialang.org/en/v1/base/collections/#Base.sum" }, { "atom": "sum_largest", @@ -189,7 +201,8 @@ "domain": "\\mathbb{R}^{m \\times n}", "sign": "AnySign", "curvature": "Affine", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#LinearAlgebra.tr" }, { "atom": "trinv", @@ -221,7 +234,8 @@ "domain": "\\mathbb{C}", "sign": "Positive", "curvature": "Convex", - "monotonicity": "Incr. if pos." + "monotonicity": "Incr. if pos.", + "docUrl": "https://docs.julialang.org/en/v1/base/math/#Base.abs" }, { "atom": "conj", @@ -229,7 +243,8 @@ "domain": "\\mathbb{C}", "sign": "AnySign", "curvature": "Affine", - "monotonicity": "Any" + "monotonicity": "Any", + "docUrl": "https://docs.julialang.org/en/v1/base/math/#Base.conj" }, { "atom": "exp", @@ -237,7 +252,8 @@ "domain": "\\mathbb{R}", "sign": "Positive", "curvature": "Convex", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://docs.julialang.org/en/v1/base/math/#Base.exp-Tuple{Float64}" }, { "atom": "xlogx", @@ -245,7 +261,8 @@ "domain": "\\mathbb{R}", "sign": "AnySign", "curvature": "Convex", - "monotonicity": "Any" + "monotonicity": "Any", + "docUrl": "https://juliastats.org/LogExpFunctions.jl/stable/api/#LogExpFunctions.xlogx" }, { "atom": "huber", @@ -261,7 +278,8 @@ "domain": "\\mathbb{C}", "sign": "AnySign", "curvature": "Affine", - "monotonicity": "Any" + "monotonicity": "Any", + "docUrl": "https://docs.julialang.org/en/v1/base/math/#Base.imag" }, { "atom": "inv (scalar)", @@ -269,7 +287,8 @@ "domain": "\\mathbb{R}_{++}", "sign": "Positive", "curvature": "Convex", - "monotonicity": "Decreasing" + "monotonicity": "Decreasing", + "docUrl": "https://docs.julialang.org/en/v1/base/math/#Base.inv-Tuple{Number}" }, { "atom": "log (scalar)", @@ -277,7 +296,8 @@ "domain": "\\mathbb{R}_{++}", "sign": "AnySign", "curvature": "Concave", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://docs.julialang.org/en/v1/base/math/#Base.log-Tuple{Number}" }, { "atom": "log (matrix)", @@ -285,7 +305,8 @@ "domain": "\\mathbb{R}^{m \\times n}", "sign": "Positive", "curvature": "Concave", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://docs.julialang.org/en/v1/base/math/#Base.log-Tuple{Number}" }, { "atom": "inv (matrix)", @@ -293,7 +314,8 @@ "domain": "\\mathbb{S}_+^n", "sign": "AnySign", "curvature": "Convex", - "monotonicity": "Decreasing" + "monotonicity": "Decreasing", + "docUrl": "https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#LinearAlgebra.inv-Tuple{AbstractMatrix}" }, { "atom": "sqrt (matrix)", @@ -301,7 +323,8 @@ "domain": "\\mathbb{S}_+^n", "sign": "Positive", "curvature": "Concave", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#LinearAlgebra.sqrt-Tuple{AbstractMatrix}" }, { "atom": "kldivergence", @@ -309,7 +332,8 @@ "domain": "\\mathbb{R}_{++}^n \\times \\mathbb{R}_{++}^n", "sign": "Positive", "curvature": "Convex", - "monotonicity": "Any" + "monotonicity": "Any", + "docUrl": "https://juliastats.org/StatsBase.jl/stable/signalcorr/#StatsBase.kldivergence" }, { "atom": "lognormcdf", @@ -325,7 +349,8 @@ "domain": "(-1, \\infty)", "sign": "Negative", "curvature": "Concave", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://docs.julialang.org/en/v1/base/math/#Base.log1p" }, { "atom": "logistic", @@ -333,7 +358,8 @@ "domain": "\\mathbb{R}", "sign": "Positive", "curvature": "Convex", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://juliastats.org/LogExpFunctions.jl/stable/api/#LogExpFunctions.logistic" }, { "atom": "max", @@ -341,7 +367,8 @@ "domain": "\\mathbb{R} \\times \\mathbb{R}", "sign": "AnySign", "curvature": "Convex", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://docs.julialang.org/en/v1/base/math/#Base.max" }, { "atom": "min", @@ -349,7 +376,8 @@ "domain": "\\mathbb{R} \\times \\mathbb{R}", "sign": "AnySign", "curvature": "Concave", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://docs.julialang.org/en/v1/base/math/#Base.min" }, { "atom": "real", @@ -357,7 +385,8 @@ "domain": "\\mathbb{C}", "sign": "AnySign", "curvature": "Affine", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://docs.julialang.org/en/v1/base/math/#Base.real" }, { "atom": "rel_entr", @@ -373,7 +402,8 @@ "domain": "\\mathbb{R}_+", "sign": "Positive", "curvature": "Concave", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://docs.julialang.org/en/v1/base/math/#Base.sqrt-Tuple{Real}" }, { "atom": "xexpx", @@ -381,7 +411,8 @@ "domain": "\\mathbb{R}_+", "sign": "Positive", "curvature": "Convex", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://juliastats.org/LogExpFunctions.jl/stable/api/#LogExpFunctions.xexpx" }, { "atom": "conv", @@ -389,7 +420,8 @@ "domain": "\\mathbb{R}^n \\times \\mathbb{R}^n", "sign": "AnySign", "curvature": "Affine", - "monotonicity": "Any" + "monotonicity": "Any", + "docUrl": "https://docs.juliadsp.org/stable/convolutions/#DSP.conv" }, { "atom": "cumsum", @@ -397,7 +429,8 @@ "domain": "\\mathbb{R}^n", "sign": "AnySign", "curvature": "Affine", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://docs.julialang.org/en/v1/base/arrays/#Base.cumsum" }, { "atom": "diagm", @@ -405,7 +438,8 @@ "domain": "\\mathbb{R}^n", "sign": "AnySign", "curvature": "Affine", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#LinearAlgebra.diagm" }, { "atom": "diag", @@ -413,7 +447,8 @@ "domain": "\\mathbb{R}^{m \\times n}", "sign": "AnySign", "curvature": "Affine", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#LinearAlgebra.diag" }, { "atom": "diff", @@ -421,7 +456,8 @@ "domain": "\\mathbb{R}^n", "sign": "AnySign", "curvature": "Affine", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://docs.julialang.org/en/v1/base/arrays/#Base.diff" }, { "atom": "kron", @@ -429,6 +465,7 @@ "domain": "\\mathbb{R}^{m \\times n} \\times \\mathbb{R}^{m \\times n}", "sign": "AnySign", "curvature": "Affine", - "monotonicity": "Increasing" + "monotonicity": "Increasing", + "docUrl": "https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#LinearAlgebra.kron" } ] diff --git a/docs/src/data/dgcp_lorentz_atoms.json b/docs/src/data/dgcp_lorentz_atoms.json index 2f06467..4bc7863 100644 --- a/docs/src/data/dgcp_lorentz_atoms.json +++ b/docs/src/data/dgcp_lorentz_atoms.json @@ -4,7 +4,8 @@ "meaning": "d_{\\mathbb{H}}(p, q)", "sign": "Positive", "curvature": "GConvex", - "monotonicity": "GAny" + "monotonicity": "GAny", + "docUrl": "https://juliamanifolds.github.io/Manifolds.jl/stable/interface/#ManifoldsBase.distance-Tuple{AbstractManifold,%20Any,%20Any}" }, { "atom": "lorentz_log_barrier", @@ -41,4 +42,4 @@ "curvature": "—", "monotonicity": "—" } -] \ No newline at end of file +] diff --git a/docs/src/data/dgcp_spd_atoms.json b/docs/src/data/dgcp_spd_atoms.json index b98ad55..6577d6f 100644 --- a/docs/src/data/dgcp_spd_atoms.json +++ b/docs/src/data/dgcp_spd_atoms.json @@ -4,7 +4,8 @@ "meaning": "\\log \\det(X)", "sign": "Positive", "curvature": "GLinear", - "monotonicity": "GIncreasing" + "monotonicity": "GIncreasing", + "docUrl": "https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#LinearAlgebra.logdet" }, { "atom": "conjugation", @@ -18,21 +19,24 @@ "meaning": "\\operatorname{tr}(X)", "sign": "Positive", "curvature": "GConvex", - "monotonicity": "GIncreasing" + "monotonicity": "GIncreasing", + "docUrl": "https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#LinearAlgebra.tr" }, { "atom": "sum", "meaning": "\\sum_{ij} X_{ij}", "sign": "Positive", "curvature": "GConvex", - "monotonicity": "GIncreasing" + "monotonicity": "GIncreasing", + "docUrl": "https://docs.julialang.org/en/v1/base/collections/#Base.sum" }, { "atom": "adjoint", "meaning": "X^\\top", "sign": "Positive", "curvature": "GLinear", - "monotonicity": "GIncreasing" + "monotonicity": "GIncreasing", + "docUrl": "https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#Base.adjoint" }, { "atom": "scalar_mat", @@ -46,7 +50,8 @@ "meaning": "[X_{11}, \\ldots, X_{nn}]", "sign": "Positive", "curvature": "GConvex", - "monotonicity": "GIncreasing" + "monotonicity": "GIncreasing", + "docUrl": "https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#LinearAlgebra.diag" }, { "atom": "sdivergence", @@ -60,7 +65,8 @@ "meaning": "d_{\\mathbb{S}_{++}^n}(X, Y)", "sign": "Positive", "curvature": "GConvex", - "monotonicity": "GAny" + "monotonicity": "GAny", + "docUrl": "https://juliamanifolds.github.io/Manifolds.jl/stable/interface/#ManifoldsBase.distance-Tuple{AbstractManifold,%20Any,%20Any}" }, { "atom": "quad_form", @@ -74,7 +80,8 @@ "meaning": "\\lambda_{\\max}(X)", "sign": "Positive", "curvature": "GConvex", - "monotonicity": "GIncreasing" + "monotonicity": "GIncreasing", + "docUrl": "https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#LinearAlgebra.eigmax" }, { "atom": "log_quad_form", @@ -88,14 +95,16 @@ "meaning": "X^{-1}", "sign": "Positive", "curvature": "GConvex", - "monotonicity": "GDecreasing" + "monotonicity": "GDecreasing", + "docUrl": "https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#LinearAlgebra.inv-Tuple{AbstractMatrix}" }, { "atom": "diag", "meaning": "[X_{11}, \\ldots, X_{nn}]", "sign": "Positive", "curvature": "GConvex", - "monotonicity": "GIncreasing" + "monotonicity": "GIncreasing", + "docUrl": "https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/#LinearAlgebra.diag" }, { "atom": "eigsummax", @@ -132,4 +141,4 @@ "curvature": "GConvex", "monotonicity": "GIncreasing" } -] \ No newline at end of file +]