Coverage for src/cvx/linalg/__init__.py: 100%
47 statements
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-03 18:56 +0000
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-03 18:56 +0000
1"""Linear algebra utilities for risk models.
3This subpackage provides linear algebra utilities commonly used in risk modeling,
4including Cholesky decomposition, Principal Component Analysis, matrix norms,
5linear-system solving, and matrix validation.
7Example:
8 >>> import numpy as np
9 >>> from cvx.linalg import a_norm, cholesky, eigh, inv_a_norm, pca, qr, rand_cov, solve, svd, valid
10 >>> # Cholesky decomposition
11 >>> cov = np.array([[4.0, 2.0], [2.0, 5.0]])
12 >>> R = cholesky(cov)
13 >>> np.allclose(R.T @ R, cov)
14 True
16Functions:
17 a_norm: Compute the matrix norm of a vector
18 check_and_warn_condition: Compute the condition number and warn if ill-conditioned
19 cholesky: Compute upper triangular Cholesky decomposition
20 cholesky_solve: Solve a linear system via Cholesky with LU fallback
21 cond: Return the condition number of a matrix (NaN-aware)
22 cov_to_corr: Convert a covariance matrix to a correlation matrix
23 det: Compute the determinant of a square matrix
24 eigvals: Compute eigenvalues of a general square matrix
25 eigh: Compute eigenvalues and eigenvectors of a symmetric/Hermitian matrix
26 eigvalsh: Compute eigenvalues of a symmetric/Hermitian matrix
27 inv: Invert a matrix with NaN-aware matrix filtering and condition-number guarding
28 inv_a_norm: Compute the inverse matrix norm of a vector
29 is_positive_definite: Test whether a matrix is positive definite
30 lstsq: Solve least-squares problems with NaN-aware row filtering
31 norm: Compute the norm of a vector or matrix, ignoring non-finite entries
32 pca: Compute principal components of return data
33 power_iteration: Estimate the dominant eigenpair of a symmetric matrix
34 qr: Compute reduced QR decomposition of a matrix
35 rand_cov: Generate a random positive semi-definite covariance matrix
36 solve: Solve linear systems with NaN-aware matrix filtering
37 svd: Compute compact singular value decomposition
38 svd_k: Compute the truncated rank-k singular value decomposition
39 valid: Extract valid submatrix from a matrix with NaN values
40 warn_ill_conditioned: Emit an IllConditionedMatrixWarning for a condition number
42Operators:
43 SymmetricOperator: Protocol exposing a symmetric matrix through block products and a free-block solve
44 DenseOperator: SymmetricOperator backed by an explicit dense matrix
45 GramOperator: SymmetricOperator A = M.T @ M represented by its factor M (matrix-free)
46 FactorOperator: Diagonal-plus-low-rank SymmetricOperator with Woodbury free-block solves
47 IncrementalDenseOperator: DenseOperator maintaining the free-block inverse across single-index flips
48 SumOperator: Weighted sum of symmetric operators (forward-only; feed apply_free to a Krylov solver)
50Constrained solves:
51 bordered_solve: Range-space (Schur complement) solve of a bordered KKT system over a SymmetricOperator
52 AffineProjection: Euclidean projection onto the affine set {x : C x = d}, caching the Gram matrix
54Types:
55 Matrix: Type alias for a 2-D NumPy array
56 Vector: Type alias for a 1-D NumPy array
58Exceptions:
59 DimensionMismatchError: Raised when operand dimensions are incompatible
60 InvalidComponentsError: Raised when the requested number of components is invalid
61 NegativeWarmupError: Raised when an EWM warmup period is negative
62 NonIntegerWarmupError: Raised when an EWM warmup period is not an integer
63 NonSquareMatrixError: Raised when a square matrix is required but not given
64 NotAMatrixError: Raised when an input is not a 2-D matrix
65 SingularMatrixError: Raised when a matrix is singular and cannot be inverted/solved
67Warnings:
68 IllConditionedMatrixWarning: Emitted when a matrix is ill-conditioned
70Constants:
71 DEFAULT_COND_THRESHOLD: Default condition-number threshold for ill-conditioning checks
73"""
75from importlib.metadata import PackageNotFoundError, version
77from .core import DEFAULT_COND_THRESHOLD as DEFAULT_COND_THRESHOLD
78from .core import DimensionMismatchError as DimensionMismatchError
79from .core import IllConditionedMatrixWarning as IllConditionedMatrixWarning
80from .core import InvalidComponentsError as InvalidComponentsError
81from .core import Matrix as Matrix
82from .core import NegativeWarmupError as NegativeWarmupError
83from .core import NonIntegerWarmupError as NonIntegerWarmupError
84from .core import NonSquareMatrixError as NonSquareMatrixError
85from .core import NotAMatrixError as NotAMatrixError
86from .core import SingularMatrixError as SingularMatrixError
87from .core import Vector as Vector
88from .core import check_and_warn_condition as check_and_warn_condition
89from .core import cond as cond
90from .core import valid as valid
91from .core import warn_ill_conditioned as warn_ill_conditioned
92from .covariance import cov_to_corr as cov_to_corr
93from .covariance import pca as pca
94from .covariance import rand_cov as rand_cov
95from .decomposition import cholesky as cholesky
96from .decomposition import cholesky_solve as cholesky_solve
97from .decomposition import eigh as eigh
98from .decomposition import eigvals as eigvals
99from .decomposition import eigvalsh as eigvalsh
100from .decomposition import is_positive_definite as is_positive_definite
101from .decomposition import power_iteration as power_iteration
102from .decomposition import qr as qr
103from .decomposition import svd as svd
104from .decomposition import svd_k as svd_k
105from .kkt import AffineProjection as AffineProjection
106from .kkt import bordered_solve as bordered_solve
107from .norm import a_norm as a_norm
108from .norm import inv_a_norm as inv_a_norm
109from .norm import norm as norm
110from .operators import DenseOperator as DenseOperator
111from .operators import FactorOperator as FactorOperator
112from .operators import GramOperator as GramOperator
113from .operators import IncrementalDenseOperator as IncrementalDenseOperator
114from .operators import SumOperator as SumOperator
115from .operators import SymmetricOperator as SymmetricOperator
116from .solve import det as det
117from .solve import inv as inv
118from .solve import lstsq as lstsq
119from .solve import solve as solve
121__all__ = [
122 "DEFAULT_COND_THRESHOLD",
123 "AffineProjection",
124 "DenseOperator",
125 "DimensionMismatchError",
126 "FactorOperator",
127 "GramOperator",
128 "IllConditionedMatrixWarning",
129 "IncrementalDenseOperator",
130 "InvalidComponentsError",
131 "Matrix",
132 "NegativeWarmupError",
133 "NonIntegerWarmupError",
134 "NonSquareMatrixError",
135 "NotAMatrixError",
136 "SingularMatrixError",
137 "SumOperator",
138 "SymmetricOperator",
139 "Vector",
140 "a_norm",
141 "bordered_solve",
142 "check_and_warn_condition",
143 "cholesky",
144 "cholesky_solve",
145 "cond",
146 "cov_to_corr",
147 "det",
148 "eigh",
149 "eigvals",
150 "eigvalsh",
151 "inv",
152 "inv_a_norm",
153 "is_positive_definite",
154 "lstsq",
155 "norm",
156 "pca",
157 "power_iteration",
158 "qr",
159 "rand_cov",
160 "solve",
161 "svd",
162 "svd_k",
163 "valid",
164 "warn_ill_conditioned",
165]
167try:
168 __version__ = version("cvx-linalg")
169except PackageNotFoundError: # pragma: no cover
170 __version__ = "0.0.0"