Skip to content

Releases: Flux-Frontiers/waverider

WaveRider v0.14.0

Choose a tag to compare

@github-actions github-actions released this 10 Aug 22:41

Release Notes — v0.14.0

Released: 2026-08-10

Real brains on holographic hardware. waverider-voxel-viz gains a --tvb-demo mode that renders cortical surfaces and structural connectomes from The Virtual Brain to Looking Glass quilts and HLD video, sitting alongside the biomedical --ct-demo presets that were already there. Everything else in this release is the dependency floor that makes it work.

What changed

Eight brain scenes, one flag. --tvb-demo takes a --tvb-dataset of cortex, cortex_80k, cortex_hires, connectome, connectome_998, head_layers, macaque or macaque_connectome. Surface density and connectome thresholding are tunable through --tvb-decimate, --tvb-smooth and --tvb-percentile, and --tvb-clear-cache drops the downloaded data when you are done with it. The shared output flags — --hld, --quilt, --still, --cast — behave exactly as they do for --ct-demo, so an existing quilt or HLD workflow transfers over without change.

The data lives in quiltwright, not here. Loading is handled by quiltwright.tvb_data, new in quiltwright 0.3.0. Brain geometry is a scene source in the same sense as a POV-Ray scene or a PyVista example dataset — it is something to put on a display, not manifold science — and quiltwright already owns that job. The ~337 MB tvb-data archive (doi:10.5281/zenodo.10128131, GPL-3.0) is fetched on demand and cached there. Nothing is vendored into either package, and the GPL-3.0 corpus stays outside both distributions.

WaveRider re-exports the renderers that matter for this mode: render_tvb_viewer, render_tvb_quilt, render_tvb_hld, render_tvb_still and TVB_PRESETS. Full reference in docs/waverider/tvb_data.md.

Citation metadata now points at the concept DOI. CITATION.cff and the README declared 10.5281/zenodo.20383651 — not a mistyped concept DOI but a different kind of identifier entirely, the frozen version-specific archive for v0.8.0. Every citation of WaveRider had been resolving to that snapshot, and would have kept doing so through every future release. All four declarations (both badges, APA, BibTeX) now carry the concept DOI, 10.5281/zenodo.20383650, which always resolves to the newest archived version.

Upgrading

Nothing to migrate. The minimum quiltwright is now 0.3.0 and resolves automatically as a WaveRider dependency — poetry update quiltwright or a fresh install is all it takes.

The brain datasets are not bundled. The first --tvb-demo run downloads and caches them, so budget the bandwidth and disk on that first invocation:

waverider-voxel-viz --tvb-demo                                     # interactive
waverider-voxel-viz --tvb-demo --tvb-dataset cortex --hld --out cortex
waverider-voxel-viz --tvb-demo --tvb-dataset connectome \
    --quilt portrait --out connectome --cast

Full changelog: CHANGELOG.md

WaveRider v0.13.0

Choose a tag to compare

@github-actions github-actions released this 09 Aug 17:16
f4f1455

Release Notes — v0.13.0

Released: 2026-08-09

WaveRider sheds its holographic output layer. Everything that turned arrays into Looking Glass quilts, HLD video, or POV-Ray scenes now lives in quiltwright, a separate BSD-3 package that WaveRider depends on. This is a boundary correction, not a feature release — plus a Bridge hang that had to be fixed and a lock-file security sweep.

What changed

Holographic output is now quiltwright. waverider.lfd, waverider.hld and waverider.povray moved out wholesale. The split was overdue: none of that code ever imported anything from WaveRider — lfd.py needed only stdlib, numpy and pillow — while three unrelated consumers had accumulated around it. Manifold visualisation, molecular rendering through proteusPy, and a POV-Ray scene archive were all reaching for the same module, and none of them should have to carry the other two as dependencies. Git history for the moved files is preserved in the quiltwright repository, so git log --follow still works there.

waverider.voxel_viz and its CLI are untouched.

stop_quilt() no longer hangs Bridge. The v0.12.0 implementation followed bridge.js's documented stopStudioPlaylist pattern — delete_playlist, then show_window(false). On Looking Glass Bridge 2.6.3 (macOS), delete_playlist reliably hung the process: reproduced twice, once mid-video and once on a single still, each time requiring kill -9 and a Bridge relaunch to recover. stop_quilt() now reaches the same end state — nothing visible, playback halted — using only transport_control_pause and show_window(false), both independently verified safe. Confirmed against a live device: Bridge stayed responsive, the display went blank.

Dependency security sweep. Seventeen packages flagged by OSV.dev were bumped in poetry.lock, including aiohttp, cryptography, pillow, torch and starlette. No pyproject.toml bounds changed, so this is lock-only and does not constrain downstream resolution.

Upgrading

from waverider import render_quilt, QUILT_PRESETS, cast_quilt, ... continues to work unchanged — waverider/__init__ re-exports the full holographic surface from quiltwright.

Direct submodule imports must be repointed:

from waverider.lfd import render_quilt   # no longer resolves
from quiltwright.lfd import render_quilt # use this

The same applies to waverider.hld and waverider.povray. quiltwright>=0.1.0 installs automatically as a WaveRider dependency; nothing extra to add.


Full changelog: CHANGELOG.md

WaveRider v0.12.0

Choose a tag to compare

@github-actions github-actions released this 04 Aug 18:12

Release Notes — v0.12.0

Released: 2026-08-04

The Looking Glass Bridge integration now covers a full playback lifecycle, not just casting: pause, resume, and stop are real functions with real Bridge endpoints behind them, discovered the hard way after two plausible-sounding endpoint names turned out not to exist.

What changed

Quilt playback controls. waverider.lfd gains pause_quilt(), resume_quilt(), and stop_quilt() alongside the existing cast_quilt(), all exported from the top-level waverider package. Bridge has no stop_playlist or pause_playlist endpoint — calling one silently returns 200 OK with an empty body instead of erroring, which looks identical to a slow success until you notice the response has no status field. The real control group is Bridge's transport control API (transport_control_play/_pause, plus delete_playlist to remove a playlist outright), confirmed against the official bridge.js SDK source rather than guessed from naming conventions. All three functions were verified live against a physical Looking Glass. docs/waverider/lfd.md gained a "Control playback" section documenting the full endpoint reference and the trap itself, so the next person doesn't have to reverse-engineer it again.

Upgrading

Nothing to do — this is additive. Existing cast_quilt() / --cast usage is unchanged.


Full changelog: CHANGELOG.md

WaveRider v0.11.0

Choose a tag to compare

@github-actions github-actions released this 04 Aug 15:44

Release Notes — v0.11.0

Released: 2026-08-04

CT/MRI demo mode can now render straight to a Looking Glass light-field display, closing a gap where that path only reached the Hololuminescent line. The README's Looking Glass section also gained links to the vendor and an explicit non-affiliation disclaimer.

What changed

CT/MRI demo mode reaches light-field displays. --ct-demo previously only reached the Hololuminescent (HLD) line via --hld; the light-field (LFD) quilt path was manifold-mode-only. A new render_ct_quilt() mirrors render_quilt_single() for the CT isosurface scene, and --ct-demo --quilt <device> now renders a still or, with --quilt-video, a turntable MP4 — reusing the same --quilt-grid, --quilt-zoom, --cast, and video-timing flags manifold mode already had. --hld and --quilt remain mutually exclusive, and that guard now covers CT demo mode too.

Looking Glass attribution. The README's holographic-display sections now link to Looking Glass Factory's site and documentation (the quilt spec, Bridge, and HLD spec) and close with a disclaimer: WaveRider's author is a customer and user of the hardware, not affiliated with, sponsored by, or endorsed by Looking Glass Factory.

Upgrading

Nothing to do — this is additive. Existing --hld usage and manifold-mode --quilt usage are unchanged.


Full changelog: CHANGELOG.md

WaveRider v0.10.1

Choose a tag to compare

@github-actions github-actions released this 04 Aug 14:39

Release Notes — v0.10.1

Released: 2026-08-04

A documentation-integrity release. v0.10.0 shipped the holographic output paths but left a README that had outgrown itself and drifted from the repository it describes: 429 lines, half the modules missing from the Algorithms table, four result links pointing at files git had never tracked, and a flagship CIFAR-100 comparison measured against a network that failed to train. Everything a reader meets first is now half the length and checked against the artifact it describes. No public API, CLI, or on-disk format changed.

What changed

The README is half its former size, with nothing deleted. It went from 429 to 229 lines by relocating detail rather than dropping it: the zero-parameter-classifier and parameter-efficiency tables and both provenance notes moved to the new docs/RESULTS.md, each left behind as a one-line claim with a link; Quick Start, Installation, and Usage merged into one Getting Started; the Algorithms table became "The Stack", one row per layer naming all 17 modules inline — it previously listed 8 of them, omitting Turtle3D, Vector3D, discover_dimensionality, UniversalEmbedder, GeodesicEncoder, the Keras ManifoldAdam optimizer (now explicitly distinguished from ManifoldAdamWalker), the three backbone_* modules, KnowledgeGraph, and the two new rendering modules.

The CIFAR-100 headline now cites a baseline that converged. The parameter-efficiency row quoted 5.21% at 3.7M parameters — the standard arm of a 30-epoch run in which all three trials diverged, with test losses of 23,371 / 30,574 / 46,555 against roughly 2.5 for the manifold arms. Keeping the comparison same-run had the side effect of measuring the manifold against a network that never trained. The row now cites the converged 21.31% from the 100-epoch results, which puts the accuracy advantage at 1.8× rather than 7×; the 5.8× parameter reduction is unchanged. The divergence is recorded as a finding in its own right — the 3.7M-parameter dense net is unstable at the 30-epoch setting — rather than as the point being made. Alongside it, the intrinsic-dimension and noise figures were reconciled with the results JSONs, and the dimension-probe claim was corrected to match Table 8 of the paper: the geometry and class-separation components sum to d*, they do not sit beside it.

Benchmark reports are tracked and current. benchmarks/canonical_tests/*.pdf was gitignored, so the CIFAR result rows linked to PDFs that could never resolve on github.com. The 11 typeset *_report.pdf files are now committed through a narrow gitignore negation that still excludes ad-hoc build output, CIFAR-10 and CIFAR-100 gained the Markdown reports every other dataset already had, and both CIFAR reports were regenerated after drifting from an April run.

pytest works on headless machines again. A rendering-capability probe ran at module import time in two test files, and VTK aborts with SIGSEGV rather than raising when no OpenGL implementation is reachable — so a try/except could not contain it and a bare pytest died during collection, exit 139, before any test ran. The probe now executes in a subprocess, turning the crash into an inspectable exit code: 281 passed / 9 skipped without a display, all 290 under xvfb-run -a pytest.

The private agent-kg dependency is gone. The optional kgdeps group pointed at a private git repository, so any resolution touching it — including a plain poetry lock — failed for anyone without access. Nothing in waverider imports agent_kg.

Upgrading

Nothing to do. If you previously installed with --with kgdeps, that group no longer exists — drop the flag; plain poetry install was never affected by it. Readers who miss the detail that left the README will find it in docs/RESULTS.md and docs/INDEX.md.


Full changelog: CHANGELOG.md

WaveRider v0.10.0

Choose a tag to compare

@github-actions github-actions released this 02 Aug 21:06

Release Notes — v0.10.0

Released: 2026-08-02

WaveRider manifolds now render as true holograms. This release adds two output paths for Looking Glass hardware — waverider.lfd for the light-field line, which consumes multi-view quilts, and waverider.hld for the Hololuminescent line, which plays ordinary video into a fixed optical volume. Any PyVista scene can drive either. The whole path was validated end to end against a physical Gen3 16″ landscape panel, which is how three bugs that had never been exercised came to light.

What changed

Holographic output. The quilt renderer sweeps a camera across the device's view cone using off-axis asymmetric-frustum projections rather than orbiting it. That distinction matters: rotating the camera ("toe-in") shears the focal plane differently in each view, and a lenticular display cannot fuse views that disagree about where the focal plane sits. Keeping it pixel-identical across all views is what makes a quilt work. Output covers still quilts, turntable quilt videos, and live casting to a connected display through Looking Glass Bridge.

Hardware truth over documentation. The published quilt table and the panel on the desk disagreed. The 16-landscape preset described a 7×7 grid at 5999², where a Gen3 panel reports 8×6 at 7680×4320 with a 50° view cone rather than the 35° default — meaning roughly a third of the available parallax was being discarded. The preset now matches what Bridge reports, and the docs carry the probe command so you can confirm your own hardware instead of trusting a table that has no generation column.

Casting used to fail silently. Bridge's HTTP API requires PUT. The client sent POST, which Bridge answers with 200 OK and an empty body — so the orchestration token came back empty, every subsequent call quietly did nothing, and --cast reported success while the display stayed dark. An empty token now raises.

Framing as a depth budget. Perceived depth scales with how much of each view the subject fills, so the default framing was wasting both resolution and parallax. Quilt rendering now dollies the camera in by default, which preserves the field of view the parallax geometry assumes. On the iris manifold this moved subject coverage from 35% to 85% of frame width and more than tripled the measured difference between extreme views. The colour scale bar is off by default for quilts — a 2-D overlay has no parallax, so the display pins it to the focal plane where it reads as a flat pane through the middle of the hologram.

CT and MRI mode. --ct-demo bypasses manifold fitting entirely and renders layered isosurfaces from PyVista's built-in biomedical volumes, either interactively or as a display-ready turntable.

Project infrastructure. GitHub Actions CI now runs lint, type-check, and tests on every push and pull request, and tagged releases build and publish automatically. Type checking moved from mypy to ty and pylint was dropped in favour of ruff alone, matching the pycode_kg and doc_kg repos. pyproject.toml migrated to PEP 621. Building the CI surfaced a latent defect: graph_reasoner imported TurtleND from proteusPy, an optional extra, so its test module could not be collected in a lean install.

Upgrading

Rendering needs the viz extras — poetry install --with viz — plus ffmpeg for video, which imageio-ffmpeg now supplies. Casting to a display additionally needs Looking Glass Bridge 2.2 or newer running on the machine the panel is plugged into.

If you imported waverider.looking_glass, it is now waverider.lfd. The rename pairs it with waverider.hld so each module names the display technology it targets rather than the vendor, since HLDs are Looking Glass products too. There is no compatibility shim, because that module had not appeared in a tagged release.

Before your first quilt, ask the panel what it wants rather than trusting the preset table — the procedure is in docs/waverider/lfd.md. Two new knobs are worth knowing: --quilt-zoom controls framing (1.6 by default) and --quilt-scalar-bar restores the colour bar if you need the values more than the depth.

Nothing changes for existing manifold or classifier code.


Full changelog: CHANGELOG.md

v0.9.0 — UniversalEmbedder: geometry-grounded PCA drop-in

Choose a tag to compare

@suchanek suchanek released this 26 May 15:29

Release Notes — v0.9.0

Released: 2026-05-26

The headline change is UniversalEmbedder — a geometry-grounded, modality-agnostic dimensionality reducer that exposes the same fit / transform / fit_transform surface as sklearn.decomposition.PCA. Any benchmark pipeline that currently calls PCA(n_components=…) can swap in UniversalEmbedder() without touching the surrounding code. Under the hood it discovers d* from local manifold geometry (ManifoldModel) and then auto-selects between a global-PCA projection (for near-linear data) and BFS Procrustes-transported TurtleND frames (for genuinely curved manifolds) based on the Manifold Linearity Index MLI = global_d_at_τ / d*. Explicit modes are available when you want to force one strategy. Ships with 362 lines of unit tests covering all four modes plus the sklearn drop-in contract.

The release also lands a documentation audit triggered by an external claim-verification request: the README's CIFAR-10 "+8.5 pp over ResNet" UB headline has been re-grounded against the raw JSON trial data, the column header now honestly names the dropout variant (ManifoldResNet-UB+Drop), and per-row stats across CIFAR-10 / Fashion-MNIST / MNIST are re-aligned to JSON-computed sample stds. A standalone CIFAR10_CLAIM_VERIFICATION.md report sits at the repo root with the full audit, including a "What 'Matched' Means" architecture table so a reviewer who clones the repo can reproduce.

Smaller items:

  • New Manifold Voxel Visualizer section in the README under Algorithms — hero figure, CLI examples for every built-in dataset, per-voxel scalar-field inventory, and links to the CLI+API reference, USAGE examples, and method paper.
  • File-tree refresh and a handful of dead *_report.md README links redirected to the existing .pdf reports.
  • Minor: pyproject.toml section-header comment retitled CodeKG → PyCodeKG.

Full changelog: CHANGELOG.md

v0.8.1 — Zenodo DOI wired into citation metadata

Choose a tag to compare

@suchanek suchanek released this 25 May 17:39

Citation patch. The v0.8.0 GitHub Release triggered Zenodo, which minted 10.5281/zenodo.20383651. This release wires that identifier into the repo so anything pinned to a released tag — pip install, git checkout v0.8.1, the Zenodo deposit of this tag itself — sees a fully resolved citation.

What changed

  • CITATION.cffdoi field activated with the minted Zenodo identifier.
  • README.md — header DOI badge and Citation-section DOI badge now resolve to the live Zenodo concept badge (zenodo.org/badge/1234120398.svg), which always tracks the latest release. Prose citation resolves to https://doi.org/10.5281/zenodo.20383651. BibTeX entry replaces the placeholder note with a proper doi field.

No code, no benchmarks, no documentation prose changed in this release.

How to cite

Suchanek, E. G. (2026). WaveRider: Manifold-Aware Geometric Machine Learning (Version 0.8.1) [Software]. Flux-Frontiers. https://doi.org/10.5281/zenodo.20383651

BibTeX in README.md and machine-readable metadata in CITATION.cff.

v0.8.0 — Universal Bottleneck phase boundary, controlled CIFAR-100 sweep, public release

Choose a tag to compare

@suchanek suchanek released this 25 May 17:27

First public release on the new GitHub home, and the first that's citable: a CITATION.cff ships in this tag and the Zenodo integration is now live.

Highlights

Universal Bottleneck — formula-derived architectures beat ResNet at fewer params.
On Fashion-MNIST (60 epochs, 4 trials), the UB+Dropout architecture at the predicted width w* = d* + C − 1 hits 88.38% ± 0.32% versus ResNet-32's 82.85% ± 2.25% — +5.5 pp with 38% fewer parameters. On MNIST, UB matches ResNet (98.98% vs 99.27%) at 38% fewer parameters. The theorem's width prediction holds without a hyperparameter search.

CIFAR-100 controlled comparison. Re-ran all seven architectures with uniform early stopping (patience=10) so every model peaks against the same stopping criterion. Result: Intrinsic-Dim (PCA → 100D) hits 25.60% ± 0.12% versus Standard MLP at 21.31% ± 0.28% — +4.29 pp at 184× fewer parameters. The standard model converges fast (stopped ep18); the manifold-informed model converges slowly (stopped ep65) but wins decisively.

CIFAR-100 τ/d sweep → a design rule. A 9-point sweep over PCA compression d establishes that optimal d sits between intrinsic d* and class count C, empirically d ≈ 0.75 × n_classes. Optimal at d=75 for CIFAR-100 (not 100), with a clean crossover from PCA+MLP to Intrinsic-Dim winning at d ≈ 50. Geometric τ-values (d=13–21) are insufficient for 100-class discrimination — a useful boundary condition for the theory.

CIFAR-10 refresh at 60 epochs. d*=34 (truck class drives the ceiling), PCA+MLP at 5,076 parameters reaches 95.1% of standard-model accuracy (49.12% vs 51.67%) — a 724× parameter reduction. The 43pp train–test gap on the Standard MLP is now called out as memorization, and ManifoldAdam's regression on overparameterized architectures is traced to cold-init projection layers.

What's new for users running the benchmarks

  • --plot-only on every canonical benchmark script — regenerate figures from saved JSON without re-running training. Fast figure-tweak cycles after long runs.
  • --tau-sweep mode on cifar100_manifold_architecture.py — Phase 4 sweep over τ-derived and fixed d-values, saves to cifar100_tau_sweep_results.json.
  • --patience / early-stopping uniformly applied across all CIFAR-100 architectures, with EpochHeartbeat progress callback. best_val_acc, best_val_epoch, stopped_epoch now persisted in the results JSON.
  • benchmarks/tf_setup.py — CPU is now the default device (Metal is opt-in via --metal/--gpu), per the M-series finding that Metal serializes per-op on small MLPs.
  • Plot layout — taller figures, 45° rotated tick labels, more bottom-row gridspec room. Stops accuracy/param bar charts from overlapping their labels.

Citation

CITATION.cff is included and the README now has a Citation section with prose + BibTeX. The Zenodo DOI fields are stubbed with TODO markers in this release and will be filled in a 0.8.1 patch once Zenodo mints the DOI for this tag.

Reproducing

All benchmark JSONs are seed-locked (seeds 42–51, 3–10 trials) and committed alongside their scripts. The numbers cited in this release and in the papers (papers/manifold_classification/DATA.md, docs/waverider/waverider.md) come from those committed JSONs.


Full changelog: CHANGELOG.md · Release notes file: release-notes.md