Skip to content

Releases: vdiego28/Amalthea.jl

v1.0.3

Choose a tag to compare

@github-actions github-actions released this 10 Aug 11:32

Amalthea.jl v1.0.3

GPU geometry expansion and portable-installation update for the native
backend.

Highlights

  • Added explicit CUDA-resident support across additional radial, modal, and
    free-space Kerr, Raman, PPT, and ADK configurations on RealGrid and
    EnvGrid.
  • Corrected oversampled EnvGrid spectral-half handling in modal and
    free-space paths and released the free-space c2c cuFFT plan during teardown.
  • Made normal package and release builds CPU-only by default. CUDA is optional
    and enabled explicitly from source with AMALTHEA_CUDA_BUILD=required.
  • Added exact OS/architecture prebuilt selection and the first Linux ARM64
    release binary and native ARM64 installation/FFI CI gate.
  • Added a cross-platform installation and configuration guide for Linux,
    macOS, Windows, ARM64, source builds, CPU-only hosts, and optional CUDA.

Installation

Amalthea is not registered in Julia General. Install this release directly
from GitHub:

pkg> add https://github.com/vdiego28/Amalthea.jl#v1.0.3

Published CPU-only binaries cover Linux x86_64, Linux AArch64, macOS Apple
Silicon, and Windows x86_64. SHA256SUMS.txt authenticates all four assets.
Other platforms compile from source.

See the repository CHANGELOG
and full commit comparison.

v1.0.2

Choose a tag to compare

@github-actions github-actions released this 31 Jul 19:21

Full Changelog: v1.0.1...v1.0.2

v1.0.1

Choose a tag to compare

@github-actions github-actions released this 28 Jul 16:45

What's Changed

  • build(deps): bump actions/github-script from 7 to 9 by @dependabot[bot] in #61
  • build(deps): bump actions/checkout from 5 to 7 by @dependabot[bot] in #63
  • build(deps): bump softprops/action-gh-release from 2 to 3 by @dependabot[bot] in #59
  • build(deps): bump actions/download-artifact from 4 to 8 by @dependabot[bot] in #60
  • build(deps): bump actions/upload-artifact from 4 to 7 by @dependabot[bot] in #62

Full Changelog: v1.0.0...v1.0.1

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

v0.7.0 - Rust-Accelerated Backend and Python Wrapper

Choose a tag to compare

@vdiego28 vdiego28 released this 23 May 21:41

Release v0.7.0 — Rust-Accelerated Backend & Python Wrapper

This release introduces major performance and usability improvements to the Luna simulation suite, including a high-performance Rust core, a native Python wrapper, and customizable material properties.

What's New

Rust-Accelerated Backend (luna-rust)

  • Migrated core waveguide solvers and numerical integration algorithms to a stateless, cache-aligned Rust codebase.
  • Added multithreaded diffraction (QDHT) solver support via rayon.
  • Implemented zero-copy C-FFI memory boundaries for seamless in-place data transfer between Julia and Rust.

Native Python API

  • Released a pip-installable python package luna-rust under python/.
  • Embedded Julia interface calls using juliacall and juliapkg.
  • Built a zero-copy NumPy array wrapper LunaOutput to convert simulation output vectors on-the-fly.

Dynamic Material Properties

  • Added a global material registry with runtime registration APIs (register_material!) for gases and glasses.
  • Enabled loading custom Sellmeier configurations from TOML files without modifying package source code.

Spelled-Out Greek Keyword Aliases

  • Supported ASCII keyword arguments (e.g., lambda0, tau_fwhm, phi) interchangeably with Unicode keywords (λ0, τfwhm, ϕ) across all pulse constructors and entrypoints.

Parallelized CI Pipeline

  • Restructured the 31-test-set suite into 5 parallel job groups (physics, simulation, io, fields, rust), reducing CI wall-clock validation times from 32 minutes down to ~8 minutes.