Skip to content

Amalthea.jl v1.0.0

Choose a tag to compare

@vdiego28 vdiego28 released this 12 Jul 21:16

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 a solve, eliminating the per-stage Julia
    callback round-trip. Covers mode-averaged, radial, modal, and free-space
    geometries; RealGrid and EnvGrid; Kerr, plasma (PPT/ADK), and Raman
    (including :SiO2 intermediate-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_rust for
    Linux, macOS, and Windows; deps/build.jl downloads the matching prebuilt
    library for the installed version before falling back to a local
    cargo build.
  • Cross-platform scan-queue locking (flock on Unix, LockFileEx on
    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.ellipse angle calculation (was always 0; now
    angle(Q + 1im*U)/2), and other fork-vs-upstream parity fixes — see
    docs/dev/REVIEW.md for the full audit.
  • Shell/command-injection hardening in Scans.jl's SSH/Slurm/Condor
    submission paths (Cmd arrays 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::new by @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 makeinputs using lazy generator by @vdiego28 in #43
  • 🧪 Add test coverage for dopri.jl integrator and Butcher Tableau by @vdiego28 in #44
  • ⚡ perf: Use generator in tuple construction for scanshape by @vdiego28 in #46
  • ⚡ perf: optimize any allocation in doinput_sm by @vdiego28 in #47
  • Parallelize pointcalc! with Threads.@threads by @vdiego28 in #48
  • 🧹 Refactor sqrt handling 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 @views to 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 in NonlinearRHS.jl by @vdiego28 in #8
  • ⚡ Fix redundant array allocation in Stats array slicing by @vdiego28 in #9
  • ⚡ Hoist idcs allocation 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

Full Changelog: v0.7.0...v1.0.0