2026-03-07 13:39:43 +01:00
|
|
|
|
"""Replace the 4 remaining ASCII diagram blocks in mathematical_foundations.md
|
|
|
|
|
|
with {figure} directives pointing to the new SVGs.
|
|
|
|
|
|
"""
|
|
|
|
|
|
import pathlib
|
|
|
|
|
|
|
|
|
|
|
|
MD = pathlib.Path(__file__).parent / "theory" / "mathematical_foundations.md"
|
|
|
|
|
|
text = MD.read_text(encoding="utf-8")
|
|
|
|
|
|
|
|
|
|
|
|
# ── 1. HMM regime state machine → fig_hmm_regime ──────────────────────────
|
|
|
|
|
|
old1 = '''\
|
|
|
|
|
|
```
|
|
|
|
|
|
HMM regime state machine (K = 3)
|
|
|
|
|
|
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
|
|
|
|
|
|
|
|
|
|
|
|
A₁₂ → A₂₃ →
|
|
|
|
|
|
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
|
|
|
|
|
│ State 1 │──────▶│ State 2 │──────▶│ State 3 │
|
|
|
|
|
|
│ Bull │◀──────│ Neutral │◀──────│ Bear │
|
|
|
|
|
|
└─────────────┘ └─────────────┘ └─────────────┘
|
|
|
|
|
|
← A₂₁ ← A₃₂
|
|
|
|
|
|
|
|
|
|
|
|
Emission B_k(y) = 𝒩(μ_k, σ_k²):
|
|
|
|
|
|
┌────────┬────────┬────────┬──────────────────┐
|
|
|
|
|
|
│ State │ μ │ σ │ Character │
|
|
|
|
|
|
├────────┼────────┼────────┼──────────────────┤
|
|
|
|
|
|
│ Bull │ +0.05 │ 0.12 │ high return, low vol │
|
|
|
|
|
|
│ Neutral│ 0.00 │ 0.18 │ flat, medium vol │
|
|
|
|
|
|
│ Bear │ -0.08 │ 0.35 │ crash, high vol │
|
|
|
|
|
|
└────────┴────────┴────────┴──────────────────┘
|
|
|
|
|
|
(self-transition: A₁₁=0.97, A₂₂=0.97, A₃₃=0.90)
|
|
|
|
|
|
```'''
|
|
|
|
|
|
|
|
|
|
|
|
new1 = '''\
|
|
|
|
|
|
```{figure} ../_static/diagrams/fig_hmm_regime.svg
|
|
|
|
|
|
:align: center
|
|
|
|
|
|
:width: 90%
|
|
|
|
|
|
|
|
|
|
|
|
HMM $K=3$ state machine with Bull / Neutral / Bear regimes and Gaussian emission
|
|
|
|
|
|
parameters. Self-transitions $A_{11}=A_{22}=0.97$, $A_{33}=0.90$.
|
|
|
|
|
|
```'''
|
|
|
|
|
|
|
|
|
|
|
|
# ── 2. Viterbi trellis → fig_viterbi_trellis ───────────────────────────────
|
|
|
|
|
|
old2 = '''\
|
|
|
|
|
|
```
|
|
|
|
|
|
Viterbi trellis (K=3, T=4)
|
|
|
|
|
|
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
|
|
|
|
|
|
|
|
|
|
|
|
State t=1 t=2 t=3 t=4
|
|
|
|
|
|
|
|
|
|
|
|
1 ○─────────▶○─────────▶○─────────▶○
|
|
|
|
|
|
╲ ╳
|
|
|
|
|
|
2 ○─────────▶●─────────▶●─────────▶○ ● = MAP path
|
|
|
|
|
|
╲ ╲ ╲
|
|
|
|
|
|
3 ○─────────▶○─────────▶○─────────▶○
|
|
|
|
|
|
|
|
|
|
|
|
δ_t(k) = max_j [δ_{t−1}(j) · A_jk · B_k(y_t)]
|
|
|
|
|
|
ψ_t(k) = argmax_j ← backtrack pointer
|
|
|
|
|
|
|
|
|
|
|
|
Traceback: z_4★ ← z_3★ ← z_2★ ← z_1★ via ψ
|
|
|
|
|
|
```'''
|
|
|
|
|
|
|
2026-03-08 11:26:37 +01:00
|
|
|
|
new2 = r'''\
|
2026-03-07 13:39:43 +01:00
|
|
|
|
```{figure} ../_static/diagrams/fig_viterbi_trellis.svg
|
|
|
|
|
|
:align: center
|
|
|
|
|
|
:width: 82%
|
|
|
|
|
|
|
|
|
|
|
|
Viterbi trellis ($K=3$, $T=4$). Filled nodes mark the MAP (most probable) state
|
|
|
|
|
|
sequence; arrows show transition candidates. Backtracking via $\psi_t(k)$ recovers
|
|
|
|
|
|
$z_1^\star \to z_4^\star$.
|
|
|
|
|
|
```'''
|
|
|
|
|
|
|
|
|
|
|
|
# ── 3. Standard vs natural gradient (text comparison) → fig_std_vs_nat_gradient
|
|
|
|
|
|
old3 = '''\
|
|
|
|
|
|
```
|
|
|
|
|
|
Standard vs natural gradient
|
|
|
|
|
|
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
|
|
|
|
|
|
|
|
|
|
|
|
Standard: θ_{k+1} = θ_k − η·∇ℒ Natural: θ_{k+1} = θ_k − η·ℐ(θ)^{−1}∇ℒ
|
|
|
|
|
|
────────────────────────────────────────────
|
|
|
|
|
|
|
|
|
|
|
|
┌────────────────────┐ ┌────────────────────┐
|
|
|
|
|
|
│ Flat ℝᵈ geometry │ │ Riemannian metric ℐ(θ) │
|
|
|
|
|
|
│ Ignores curvature │ │ Adapts to geometry │
|
|
|
|
|
|
│ Slow on ill-cond ℐ │ │ Reparam invariant │
|
|
|
|
|
|
│ O(κ(ℐ)) iters │ │ O(1) on exp families │
|
|
|
|
|
|
└────────────────────┘ └────────────────────┘
|
|
|
|
|
|
|
|
|
|
|
|
On Gaussian / exponential family: ℐ⁻¹∇ℒ = MLE step → 1 iteration!
|
|
|
|
|
|
```'''
|
|
|
|
|
|
|
|
|
|
|
|
new3 = '''\
|
|
|
|
|
|
```{figure} ../_static/diagrams/fig_std_vs_nat_gradient.svg
|
|
|
|
|
|
:align: center
|
|
|
|
|
|
:width: 88%
|
|
|
|
|
|
|
|
|
|
|
|
Standard versus natural gradient: geometric properties. On exponential families
|
|
|
|
|
|
the natural gradient equals the MLE Newton step, achieving convergence in one
|
|
|
|
|
|
iteration.
|
|
|
|
|
|
```'''
|
|
|
|
|
|
|
|
|
|
|
|
# ── 4. Matrix Lie group hierarchy → fig_lie_group_hierarchy ─────────────────
|
|
|
|
|
|
old4 = '''\
|
|
|
|
|
|
```
|
|
|
|
|
|
Matrix Lie group hierarchy
|
|
|
|
|
|
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
|
|
|
|
|
|
|
|
|
|
|
|
GL(n,ℝ) ─ all invertible n×n real matrices
|
|
|
|
|
|
│
|
|
|
|
|
|
├──▶ SL(n,ℝ) det = 1
|
|
|
|
|
|
│
|
|
|
|
|
|
├──▶ O(n) RᵀR = I (orthogonal)
|
|
|
|
|
|
│ └─▶ SO(n) det = +1 (pure rotations)
|
|
|
|
|
|
│ ↳ portfolio factor rotation, PCA constraints
|
|
|
|
|
|
│
|
|
|
|
|
|
└──▶ Sp(2n,ℝ) preserves symplectic form ω
|
|
|
|
|
|
↳ Hamiltonian mechanics, PMP §4.2 / §10.4
|
|
|
|
|
|
|
|
|
|
|
|
H(n) Heisenberg ─ upper triangular, 1s on diagonal
|
|
|
|
|
|
↳ path-signature feature maps
|
|
|
|
|
|
```'''
|
|
|
|
|
|
|
2026-03-08 11:26:37 +01:00
|
|
|
|
new4 = r'''\
|
2026-03-07 13:39:43 +01:00
|
|
|
|
```{figure} ../_static/diagrams/fig_lie_group_hierarchy.svg
|
|
|
|
|
|
:align: center
|
|
|
|
|
|
:width: 90%
|
|
|
|
|
|
|
|
|
|
|
|
Matrix Lie group hierarchy: subgroup inclusions and their quantitative-finance
|
|
|
|
|
|
applications. $SO(n)$ underpins PCA factor rotation; $\mathrm{Sp}(2n,\mathbb{R})$
|
|
|
|
|
|
governs Hamiltonian mechanics (PMP §10.4); $H(n)$ drives path-signature features.
|
|
|
|
|
|
```'''
|
|
|
|
|
|
|
|
|
|
|
|
replacements = [(old1, new1), (old2, new2), (old3, new3), (old4, new4)]
|
|
|
|
|
|
for i, (old, new) in enumerate(replacements, 1):
|
|
|
|
|
|
if old in text:
|
|
|
|
|
|
text = text.replace(old, new, 1)
|
|
|
|
|
|
print(f" Block {i}: replaced OK")
|
|
|
|
|
|
else:
|
|
|
|
|
|
print(f" Block {i}: NOT FOUND — check encoding/whitespace")
|
|
|
|
|
|
|
|
|
|
|
|
MD.write_text(text, encoding="utf-8")
|
|
|
|
|
|
print("Done.")
|