koblas

F64LinearAlgebra

Both halves of the compute seam at once; implement F64Blas or F64Decompositions alone when a backend has one.

Inheritors

Properties

kernels

open override val kernels: F64Kernels(source)

Resolves the two halves' declarations, so implementing both does not force a choice.

Link copied to clipboard

Whether this backend can do work on this host. koblas's own implementations always can, so the default is true; a binding reports whether the library it calls resolved.

Link copied to clipboard

Whether this is koblas's own implementation rather than a binding to a host library. The compiled-in SIMD kernels are portable however fast they are; only something calling out counts as accelerated.

Link copied to clipboard
abstract val name: String

A short backend identifier for diagnostics (e.g. "reference").

Link copied to clipboard
open val priority: Int

Relative preference among the backends offered for one half (F64Blas, F64Decompositions, F64Kernels or a sparse counterpart). registerBackend picks the highest; the portable reference is 0.

Functions

Link copied to clipboard
open fun applyQ(qr: F64QrDecomposition, y: DoubleArray, transpose: Boolean = false): DoubleArray

Apply Q, or Qᵀ when transpose, from qr to a length-m y, into a fresh result (LAPACK dormqr restricted to a single column).

Link copied to clipboard
abstract fun applyQInto(qr: F64QrDecomposition, y: DoubleArray, out: DoubleArray, transpose: Boolean = false): DoubleArray

Apply Q, or Qᵀ when transpose, from qr to y into out, which is returned. out may be y.

Link copied to clipboard
abstract fun cholesky(a: F64DenseMatrix, policy: CholeskyPolicy = CholeskyPolicy.Strict): F64CholeskyDecomposition

Cholesky factorization A = L·Lᵀ of a symmetric positive-definite a (dpotrf with uplo = 'L'). Reads only the lower triangle of a, so an upper-only matrix factors to silent nonsense.

Link copied to clipboard

LU factorization with partial pivoting of a square a (LAPACK dgetrf). a is not modified.

Link copied to clipboard

Refactorize a into out's existing buffers, returning out. out must have a's dimension and its previous contents are discarded.

Link copied to clipboard

gemm with alpha = 1, beta = 0, into a fresh matrix. A.cols must equal B.rows.

abstract fun gemm(alpha: Double, a: F64DenseMatrix, transposeA: Boolean, b: F64DenseMatrix, transposeB: Boolean, beta: Double, c: F64DenseMatrix)

C = alpha · op(A) · op(B) + beta · C (BLAS dgemm), with shapes op(A): m×k, op(B): k×n, C: m×n. beta == 0.0 overwrites c without reading it.

Link copied to clipboard
open fun gemv(a: F64DenseMatrix, x: DoubleArray, transpose: Boolean = false): DoubleArray

gemv with alpha = 1, beta = 0, into a fresh result.

abstract fun gemv(alpha: Double, a: F64DenseMatrix, x: DoubleArray, beta: Double, y: DoubleArray, transpose: Boolean = false)

y = alpha · op(A) · x + beta · y (BLAS dgemv), with op(A) being Aᵀ when transpose. beta == 0.0 overwrites y without reading it.

Link copied to clipboard
abstract fun ger(alpha: Double, x: DoubleArray, y: DoubleArray, a: F64DenseMatrix)

A = A + alpha · x · yᵀ (BLAS dger), the dense form a backend can dispatch. The free ger accepts F64VectorView operands and takes a sparse fast path.

Link copied to clipboard
abstract fun invert(chol: F64CholeskyDecomposition, workspace: Workspace? = null): F64DenseMatrix

Invert an SPD matrix from its Cholesky factorization, returning A⁻¹ given chol (LAPACK dpotri).

abstract fun invert(lu: F64LuDecomposition, workspace: Workspace? = null): F64DenseMatrix

Invert a general matrix from its LU factorization, returning A⁻¹ given P·A = L·U (LAPACK dgetri). Prefer solve to apply A⁻¹, which costs less and is more accurate.

Link copied to clipboard
abstract fun ldl(a: F64DenseMatrix, workspace: Workspace? = null): F64LdlDecomposition

Symmetric indefinite factorization A = L·D·Lᵀ with Bunch-Kaufman pivoting (LAPACK dsytrf, lower). Reads only the lower triangle of a, so an upper-only matrix factors to silent nonsense.

Link copied to clipboard
abstract fun qr(a: F64DenseMatrix, workspace: Workspace? = null): F64QrDecomposition

QR factorization A = Q·R of an m×n a via Householder reflections (LAPACK dgeqrf). a is not modified, any shape is accepted, and rank deficiency is not detected.

Link copied to clipboard
abstract fun qrPivoted(a: F64DenseMatrix, tolerance: Double = AUTOMATIC_RANK_TOLERANCE, workspace: Workspace? = null): F64PivotedQrDecomposition

QR with column pivoting, A·P = Q·R (LAPACK dgeqp3), reporting F64PivotedQrDecomposition.rank as the count of leading diagonal entries with |R_kk| > tolerance · |R₀₀|. tolerance is a fraction of |R₀₀|; AUTOMATIC_RANK_TOLERANCE derives one from the shape, max(m, n) · ε, and a negative value is rejected.

Link copied to clipboard
abstract fun rcond(lu: F64LuDecomposition, anorm: Double, workspace: Workspace? = null): Double

Order-of-magnitude estimate of 1 / (anorm · est(‖A⁻¹‖₁)) (LAPACK dgecon), where anorm is the 1-norm of the unfactored matrix (see norm1). Returns 1.0 when n == 0 and 0.0 when singular.

Link copied to clipboard

Solve A · x = b for the Cholesky factorization chol (LAPACK dpotrs). b is not modified.

Solve A · X = B for all right-hand-side columns of b at once against a symmetric indefinite factorization (LAPACK dsytrs with nrhs).

Solve A · x = b for a symmetric indefinite factorization ldl (LAPACK dsytrs).

open fun solve(lu: F64LuDecomposition, b: F64DenseMatrix, transpose: Boolean = false): F64DenseMatrix

Solve A · X = B, or Aᵀ · X = B when transpose, for all right-hand-side columns of b at once (LAPACK dgetrs with nrhs).

open fun solve(lu: F64LuDecomposition, b: DoubleArray, transpose: Boolean = false): DoubleArray

Solve A · x = b, or Aᵀ · x = b when transpose, for the factorization lu (LAPACK dgetrs).

open fun solve(qr: F64PivotedQrDecomposition, b: DoubleArray, workspace: Workspace? = null): DoubleArray

Least-squares solve from a pivoted factorization, with the column permutation undone. A rank-deficient factorization returns the basic solution, not the minimum-norm one: zero outside the pivoted rank.

open fun solve(qr: F64QrDecomposition, b: DoubleArray, minimumNorm: Boolean = false, workspace: Workspace? = null): DoubleArray

Solve from a QR factorization. By default, finds the least-squares solution min ‖A·x − b‖₂ for a tall or square A; it requires full column rank and returns R⁻¹·(Qᵀb). With minimumNorm, finds the minimum-norm solution of a consistent wide system from qr(Aᵀ); it requires full row rank.

Link copied to clipboard

Solve A · x = b into out, which is returned. out may be b.

abstract fun solveInto(ldl: F64LdlDecomposition, b: F64DenseMatrix, out: F64DenseMatrix, workspace: Workspace? = null): F64DenseMatrix

Solve A · X = B into out, which is returned. out may be b.

abstract fun solveInto(qr: F64PivotedQrDecomposition, b: DoubleArray, out: DoubleArray, workspace: Workspace? = null): DoubleArray

solve into out, which is returned.

abstract fun solveInto(lu: F64LuDecomposition, b: F64DenseMatrix, out: F64DenseMatrix, transpose: Boolean = false, workspace: Workspace? = null): F64DenseMatrix

Solve A · X = B, or Aᵀ · X = B when transpose, into out, which is returned. out may be b, and a workspace lends the transposed direction's n·nrhs staging block.

abstract fun solveInto(lu: F64LuDecomposition, b: DoubleArray, out: DoubleArray, transpose: Boolean = false, workspace: Workspace? = null): DoubleArray

Solve A · x = b, or Aᵀ · x = b when transpose, into out, which is returned. out may be b, and a workspace lends the transposed direction's staging buffer.

abstract fun solveInto(qr: F64QrDecomposition, b: DoubleArray, out: DoubleArray, minimumNorm: Boolean = false, workspace: Workspace? = null): DoubleArray

solve into out, which is returned. Its length is n by default and m with minimumNorm. A workspace lends the intermediate for applying Q or Qᵀ.

Link copied to clipboard
abstract fun symm(alpha: Double, a: F64DenseMatrix, b: F64DenseMatrix, beta: Double, c: F64DenseMatrix, lower: Boolean = true, right: Boolean = false)

C = alpha · A · B + beta · C, or C = alpha · B · A + beta · C when right (BLAS dsymm). Only the lower triangle of a is read; beta == 0.0 overwrites c without reading it.

Link copied to clipboard
abstract fun symv(alpha: Double, a: F64DenseMatrix, x: DoubleArray, beta: Double, y: DoubleArray, lower: Boolean = true)

y = alpha · A · x + beta · y for a symmetric a (BLAS dsymv). Only the lower triangle is read, diagonal included; beta == 0.0 overwrites y without reading it.

Link copied to clipboard
abstract fun syr(alpha: Double, x: F64VectorLike, a: F64DenseMatrix, uplo: Uplo = Uplo.FULL)

A += alpha · x · xᵀ (BLAS dsyr), writing the triangles uplo selects. syrk is the rank-k form.

Link copied to clipboard
abstract fun syr2(alpha: Double, x: F64VectorLike, y: F64VectorLike, a: F64DenseMatrix, uplo: Uplo = Uplo.FULL)

A += alpha · (x · yᵀ + y · xᵀ) (BLAS dsyr2), writing the triangles uplo selects.

Link copied to clipboard
abstract fun syr2k(alpha: Double, a: F64DenseMatrix, b: F64DenseMatrix, transpose: Boolean, beta: Double, c: F64DenseMatrix, uplo: Uplo = Uplo.FULL, workspace: Workspace? = null)

C = alpha · (op(A) · op(B)ᵀ + op(B) · op(A)ᵀ) + beta · C (BLAS dsyr2k), where op transposes when transpose. Writes the triangles uplo selects.

Link copied to clipboard
abstract fun syrk(alpha: Double, a: F64DenseMatrix, transpose: Boolean, beta: Double, c: F64DenseMatrix, uplo: Uplo = Uplo.FULL, workspace: Workspace? = null)

C = alpha · A·Aᵀ + beta · C, or alpha · Aᵀ·A + beta · C when transpose (BLAS dsyrk). Uplo.FULL writes both triangles, unlike standard dsyrk; beta == 0.0 overwrites without reading.

Link copied to clipboard
abstract fun trmm(a: F64DenseMatrix, b: F64DenseMatrix, lower: Boolean, transpose: Boolean = false, unitDiag: Boolean = false, right: Boolean = false, alpha: Double = 1.0)

B = alpha · op(T) · B, or B = alpha · B · op(T) when right (BLAS dtrmm), the counterpart of trsm.

Link copied to clipboard
abstract fun trmv(a: F64DenseMatrix, x: DoubleArray, lower: Boolean, transpose: Boolean = false, unitDiag: Boolean = false)

x = op(T) · x in place (BLAS dtrmv), the product counterpart of trsv.

Link copied to clipboard
abstract fun trsm(a: F64DenseMatrix, b: F64DenseMatrix, lower: Boolean, transpose: Boolean = false, unitDiag: Boolean = false, right: Boolean = false, alpha: Double = 1.0)

B = alpha · op(T)⁻¹ · B in place, or B = alpha · B · op(T)⁻¹ when right (BLAS dtrsm). Flags follow trsv; the right-hand sides are the columns of b from the left and its rows from the right.

Link copied to clipboard
abstract fun trsv(a: F64DenseMatrix, x: DoubleArray, lower: Boolean, transpose: Boolean = false, unitDiag: Boolean = false)

Solve op(T) · x = b in place (BLAS dtrsv) for the lower or upper triangle of the square a, op transposing when transpose and unitDiag taking the diagonal as 1. x carries b in and x out.

Link copied to clipboard
abstract fun trtri(a: F64DenseMatrix, lower: Boolean, unitDiag: Boolean = false): F64DenseMatrix

Invert a triangular matrix into a fresh result (LAPACK dtrtri), returning T⁻¹ for the lower or upper triangle of the square a, taking the diagonal as 1 when unitDiag.