Amalthea.jl v1.0.0
Important
Historical correction (2026-08-10): The original release text overstated compatibility and hardware dispatch. Amalthea intends to retain Luna-compatible APIs and tests its Julia/native paths for numerical equivalence, but it is a moving hard fork rather than an unconditional backwards-compatibility guarantee. dispatch.rs was detection-only and did not automatically dispatch propagation through CUDA, Vulkan, and CPU backends; no Vulkan propagation implementation existed. This release also incorrectly said Amalthea was registered in Julia General. It was not and remains installed from GitHub.
Amalthea.jl v1.0.0
First stable release, and first release under the new name: this package was
previously developed as Luna-Rust.jl, a performance-focused fork of
Luna.jl. The Julia API remains fully
backwards-compatible with Luna.jl; performance-critical numerical kernels are
offloaded to a native Rust backend (luna-rust), called transparently via
ccall — no Rust knowledge is required to use the package.
Added
- Native-Rust resident stepper (
RustNativeStepper/NativeSim): the
entire RK45 hot loop — field, RK scratch buffers, and FFTW plans — lives in
Rust for the duration of asolve, eliminating the per-stage Julia
callback round-trip. Covers mode-averaged, radial, modal, and free-space
geometries;RealGridandEnvGrid; Kerr, plasma (PPT/ADK), and Raman
(including:SiO2intermediate-broadening) nonlinearities; gas mixtures;
z-dependent (graded-core, tapered, multi-point gradient) linear operators;
and shot noise. Falls back to the Julia stepper automatically for any
configuration outside this scope (NativeIneligible). - Runtime hardware dispatch: automatic selection of CUDA → Vulkan →
AVX-512/Apple AMX → AVX2/NEON → portable scalar, including an opt-in
GPU-resident backend (LUNA_USE_RUST_CUDA_NATIVE=1). - Per-kernel Rust acceleration (opt-in via
LUNA_USE_RUST_*toggles,
used independently of the resident stepper): PPT ionisation rate,
time-domain Raman (ADE exponential integrator), Zeisberger/Marcatili
dispersion, and QDHT batch transforms. - Python bindings (
python/,juliacall-based, pip-installable) with a
numpy-backed output wrapper and ASCII/Unicode keyword translation
(lambda0↔λ0, etc.). - Prebuilt binary releases: tagged releases publish
libluna_rustfor
Linux, macOS, and Windows;deps/build.jldownloads the matching prebuilt
library for the installed version before falling back to a local
cargo build. - Cross-platform scan-queue locking (
flockon Unix,LockFileExon
Windows), validated by CI on all three platforms.
Changed
- Package renamed to Amalthea.jl (previously Luna-Rust.jl, itself a fork
of Luna.jl); citation metadata updated (Zenodo DOI), new package UUID
minted, registered as a new package in the Julia General registry.
Fixed
Polarisation.ellipseangle calculation (was always 0; now
angle(Q + 1im*U)/2), and other fork-vs-upstream parity fixes — see
docs/dev/REVIEW.mdfor the full audit.- Shell/command-injection hardening in
Scans.jl's SSH/Slurm/Condor
submission paths (Cmdarrays instead of interpolated shell strings).
See CHANGELOG.md for the full changelog and
docs/dev/BACKLOG.md / docs/dev/native-port/PORT_LOG.md
for the full phase-by-phase native-port development history.
What's Changed
- Bump julia-actions/cache from 2 to 3 by @dependabot[bot] in #3
- Bump criterion from 0.5.1 to 0.8.2 in /luna-rust by @dependabot[bot] in #4
- 🧪 Add tests for check_spline_args error path by @vdiego28 in #23
- ⚡ Optimize array slicing with @views in Stats.jl by @vdiego28 in #25
- ⚡ Optimize RK45 interpolator array allocations by @vdiego28 in #26
- 🧪 Test error path in Utils.jl at line 131 by @vdiego28 in #27
- 🧪 Add unit tests for
scans::FlockLock::newby @vdiego28 in #28 - 🧪 Add unit test for d2n_dω2 in dispersion.rs by @vdiego28 in #29
- ⚡ Optimize QDHT transform matrix population by @vdiego28 in #31
- 🧪 test(dispersion): add analytical derivative tests for SellmeierGas by @vdiego28 in #33
- 🧪 Add comprehensive tests for RectModes.jl by @vdiego28 in #37
- ⚡ Optimize Utils subscript functions to reduce array allocations by @vdiego28 in #39
- ⚡ Optimize string join functions in NonlinearRHS.jl to prevent temporary array allocations by @vdiego28 in #40
- ⚡ Optimize
makeinputsusing lazy generator by @vdiego28 in #43 - 🧪 Add test coverage for
dopri.jlintegrator and Butcher Tableau by @vdiego28 in #44 - ⚡ perf: Use generator in tuple construction for scanshape by @vdiego28 in #46
- ⚡ perf: optimize
anyallocation indoinput_smby @vdiego28 in #47 - Parallelize pointcalc! with Threads.@threads by @vdiego28 in #48
- 🧹 Refactor
sqrthandling in Sellmeier equations (PhysData.jl) by @vdiego28 in #50 - 🧹 Fix actionable TODO for branch-cut adjustment of SiO2 refractive index calculation by @vdiego28 in #21
- 🧪 Add test coverage for fftfreq and rfftfreq in Maths.jl by @vdiego28 in #22
- ⚡ Optimise fwhm and level_xings Memory Allocations by @vdiego28 in #24
- 🧪 Add tests for SellmeierGas dispersion functions by @vdiego28 in #30
- 🧪 [testing improvement] Add tests for translate_kwargs in python API by @vdiego28 in #32
- 🧪 Add unit test for translate_kwargs error path by @vdiego28 in #34
- 🧪 Add test for LunaOutput.getitem error path by @vdiego28 in #35
- 🧪 Add test coverage for Grid.jl by @vdiego28 in #36
- 🧪 add SimpleFibre tests by @vdiego28 in #38
- 🧪 Add test for arrivaltime error path by @vdiego28 in #10
- 🔒 Fix command injection in Scans job execution by @vdiego28 in #41
- ⚡ Use
@viewsto prevent array allocation in Maths.jl by @vdiego28 in #52 - 🔒 Fix Arbitrary Code Execution vulnerability in Scans UnitRange parsing by @vdiego28 in #42
- Bump actions/setup-python from 4 to 6 by @dependabot[bot] in #5
- 🧹 [Code Health] Parallelize
pointcalc!loop inNonlinearRHS.jlby @vdiego28 in #8 - ⚡ Fix redundant array allocation in Stats array slicing by @vdiego28 in #9
- ⚡ Hoist
idcsallocation out of save loops in Output.jl by @vdiego28 in #19 - ⚡ Optimize dense RK45 output interpolation to eliminate allocations by @vdiego28 in #53
- build(deps): bump actions/checkout from 6 to 7 by @dependabot[bot] in #55
- build(deps): bump windows-sys from 0.52.0 to 0.61.2 in /luna-rust by @dependabot[bot] in #56
- [ImgBot] Optimize images by @imgbot[bot] in #57
New Contributors
- @dependabot[bot] made their first contribution in #3
- @vdiego28 made their first contribution in #23
- @imgbot[bot] made their first contribution in #57
Full Changelog: v0.7.0...v1.0.0