# cyancirrus/stellar-math architecture

> Architecture diagram of the GitHub repository cyancirrus/stellar-math, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/cyancirrus/stellar-math
- Repository: https://github.com/cyancirrus/stellar-math

## Overview

StellarMath is a low-level Rust numerical library for array operations, transforms, matrix decompositions, solvers, and learning algorithms. Users invoke these library domains to compute results over numerical data. The README documents row-major contiguous arrays and the major capabilities; sampled source confirms the module layout, but does not show internal call sites, so the graph avoids speculative links between subsystems.

Main entry points: [`src/structure/ndarray.rs`](https://github.com/cyancirrus/stellar-math/blob/main/src/structure/ndarray.rs) (Array structures), [`src/algebra/mod.rs`](https://github.com/cyancirrus/stellar-math/blob/main/src/algebra/mod.rs) (Algebra operations), [`src/algebra/fourier.rs`](https://github.com/cyancirrus/stellar-math/blob/main/src/algebra/fourier.rs) (Fourier transforms), [`src/algebra/signal.rs`](https://github.com/cyancirrus/stellar-math/blob/main/src/algebra/signal.rs) (Signal operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_data["Data and algebra"]
  node_arrays["Array structures<br/>[ndarray.rs]"]
  node_algebra["Algebra operations<br/>[mod.rs]"]
  node_fourier["Fourier transforms<br/>[fourier.rs]"]
  node_signal["Signal operations<br/>[signal.rs]"]
end

subgraph group_decomp["Decompositions"]
  node_decomp_chol_lu["Cholesky and LU<br/>[mod.rs]"]
  node_decomp_qr_lq["QR and LQ<br/>[mod.rs]"]
  node_decomp_svd["SVD<br/>[mod.rs]"]
  node_decomp_schur["Schur methods<br/>[schur.rs]"]
  node_decomp_transforms["Rotation transforms<br/>[mod.rs]"]
end

subgraph group_analysis["Solvers and control"]
  node_linear["Linear solver<br/>[linear.rs]"]
  node_eigen["Eigenvector solver<br/>[eigenvector.rs]"]
  node_random_svd["Randomized SVD<br/>[randomized_svd.rs]"]
  node_ekf["EKF filtering<br/>[ekf_filter.rs]"]
  node_ekf_signal["EKF signal control<br/>[ekf_signal.rs]"]
end

subgraph group_learning["Learning and randomness"]
  node_learning["Learning algorithms<br/>[mod.rs]"]
  node_random["Random generation<br/>[mod.rs]"]
end

subgraph group_compute["Compute kernels"]
  node_kernels["Matrix kernels<br/>[mod.rs]"]
end

node_user(("Library user"))

node_user -->|"uses arrays"| node_arrays
node_user -->|"invokes"| node_algebra
node_user -->|"invokes"| node_fourier
node_user -->|"invokes"| node_signal
node_user -->|"invokes"| node_decomp_chol_lu
node_user -->|"invokes"| node_decomp_qr_lq
node_user -->|"invokes"| node_decomp_svd
node_user -->|"invokes"| node_decomp_schur
node_user -->|"invokes"| node_decomp_transforms
node_user -->|"invokes"| node_linear
node_user -->|"invokes"| node_eigen
node_user -->|"invokes"| node_random_svd
node_user -->|"invokes"| node_ekf
node_user -->|"invokes"| node_ekf_signal
node_user -->|"invokes"| node_learning
node_user -->|"invokes"| node_random

click node_arrays "https://github.com/cyancirrus/stellar-math/blob/main/src/structure/ndarray.rs"
click node_algebra "https://github.com/cyancirrus/stellar-math/blob/main/src/algebra/mod.rs"
click node_fourier "https://github.com/cyancirrus/stellar-math/blob/main/src/algebra/fourier.rs"
click node_signal "https://github.com/cyancirrus/stellar-math/blob/main/src/algebra/signal.rs"
click node_decomp_chol_lu "https://github.com/cyancirrus/stellar-math/blob/main/src/decomposition/mod.rs"
click node_decomp_qr_lq "https://github.com/cyancirrus/stellar-math/blob/main/src/decomposition/mod.rs"
click node_decomp_svd "https://github.com/cyancirrus/stellar-math/blob/main/src/decomposition/svd/mod.rs"
click node_decomp_schur "https://github.com/cyancirrus/stellar-math/blob/main/src/decomposition/schur.rs"
click node_decomp_transforms "https://github.com/cyancirrus/stellar-math/blob/main/src/decomposition/mod.rs"
click node_linear "https://github.com/cyancirrus/stellar-math/blob/main/src/solver/linear.rs"
click node_eigen "https://github.com/cyancirrus/stellar-math/blob/main/src/solver/eigenvector.rs"
click node_random_svd "https://github.com/cyancirrus/stellar-math/blob/main/src/solver/randomized_svd.rs"
click node_ekf "https://github.com/cyancirrus/stellar-math/blob/main/src/solver/ekf_filter.rs"
click node_ekf_signal "https://github.com/cyancirrus/stellar-math/blob/main/src/control/ekf_signal.rs"
click node_learning "https://github.com/cyancirrus/stellar-math/blob/main/src/learning/mod.rs"
click node_random "https://github.com/cyancirrus/stellar-math/blob/main/src/random/mod.rs"
click node_kernels "https://github.com/cyancirrus/stellar-math/blob/main/src/kernel/mod.rs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_arrays,node_algebra,node_fourier,node_signal,node_user toneBlue
class node_decomp_chol_lu,node_decomp_qr_lq,node_decomp_svd,node_decomp_schur,node_decomp_transforms toneAmber
class node_linear,node_eigen,node_random_svd,node_ekf,node_ekf_signal toneMint
class node_learning,node_random toneRose
class node_kernels toneIndigo
```

## Components

### Data and algebra

- [Array structures](https://github.com/cyancirrus/stellar-math/blob/main/src/structure/ndarray.rs): `src/structure/ndarray.rs`
- [Algebra operations](https://github.com/cyancirrus/stellar-math/blob/main/src/algebra/mod.rs): `src/algebra/mod.rs`
- [Fourier transforms](https://github.com/cyancirrus/stellar-math/blob/main/src/algebra/fourier.rs): `src/algebra/fourier.rs`
- [Signal operations](https://github.com/cyancirrus/stellar-math/blob/main/src/algebra/signal.rs): `src/algebra/signal.rs`

### Decompositions

- [Cholesky and LU](https://github.com/cyancirrus/stellar-math/blob/main/src/decomposition/mod.rs): `src/decomposition/mod.rs`
- [QR and LQ](https://github.com/cyancirrus/stellar-math/blob/main/src/decomposition/mod.rs): `src/decomposition/mod.rs`
- [SVD](https://github.com/cyancirrus/stellar-math/blob/main/src/decomposition/svd/mod.rs): `src/decomposition/svd/mod.rs`
- [Schur methods](https://github.com/cyancirrus/stellar-math/blob/main/src/decomposition/schur.rs): `src/decomposition/schur.rs`
- [Rotation transforms](https://github.com/cyancirrus/stellar-math/blob/main/src/decomposition/mod.rs): `src/decomposition/mod.rs`

### Solvers and control

- [Linear solver](https://github.com/cyancirrus/stellar-math/blob/main/src/solver/linear.rs): `src/solver/linear.rs`
- [Eigenvector solver](https://github.com/cyancirrus/stellar-math/blob/main/src/solver/eigenvector.rs): `src/solver/eigenvector.rs`
- [Randomized SVD](https://github.com/cyancirrus/stellar-math/blob/main/src/solver/randomized_svd.rs): `src/solver/randomized_svd.rs`
- [EKF filtering](https://github.com/cyancirrus/stellar-math/blob/main/src/solver/ekf_filter.rs): `src/solver/ekf_filter.rs`
- [EKF signal control](https://github.com/cyancirrus/stellar-math/blob/main/src/control/ekf_signal.rs): `src/control/ekf_signal.rs`

### Learning and randomness

- [Learning algorithms](https://github.com/cyancirrus/stellar-math/blob/main/src/learning/mod.rs): `src/learning/mod.rs`
- [Random generation](https://github.com/cyancirrus/stellar-math/blob/main/src/random/mod.rs): `src/random/mod.rs`

### Compute kernels

- [Matrix kernels](https://github.com/cyancirrus/stellar-math/blob/main/src/kernel/mod.rs): `src/kernel/mod.rs`

### Other components

- **Library user**

## Connections

- Library user → Array structures: uses arrays
- Library user → Algebra operations: invokes
- Library user → Fourier transforms: invokes
- Library user → Signal operations: invokes
- Library user → Cholesky and LU: invokes
- Library user → QR and LQ: invokes
- Library user → SVD: invokes
- Library user → Schur methods: invokes
- Library user → Rotation transforms: invokes
- Library user → Linear solver: invokes
- Library user → Eigenvector solver: invokes
- Library user → Randomized SVD: invokes
- Library user → EKF filtering: invokes
- Library user → EKF signal control: invokes
- Library user → Learning algorithms: invokes
- Library user → Random generation: invokes
