Releases: JuliaMeshless/RadialBasisFunctions.jl
Releases · JuliaMeshless/RadialBasisFunctions.jl
v0.4.1
RadialBasisFunctions v0.4.1
Bug Fixes
- Fixed missing compat entry for RadialBasisFunctions 0.4 in docs/Project.toml, which caused docs CI to fail
v0.4.0
RadialBasisFunctions v0.4.0
Breaking changes
- The operator type hierarchy now uses
AbstractOperator{N}whereNindicates the rank of the operator output. This replaces the previous flat hierarchy. Customoperator now requires an explicit rank parameter:Custom{N}. UseCustom{0}for rank-preserving operators andCustom{1}for rank-increasing operators.
Features
- Added
RBFLayeras a LuxCore package extension for integrating RBF interpolation into Lux.jl neural networks
Bug Fixes
- Reject
ε=0in Gaussian and IMQ constructors with a clear error - Fixed Lux guide and examples to use DifferentiationInterface with Mooncake backend for Julia 1.12 compatibility
Refactoring
- Replaced
OperatorAritytrait with directTupledispatch for cleaner operator weight handling - Constrained operator method signatures to
AbstractOperatorfor type safety
Documentation
- Added docstring for
AbstractOperator{N} - Updated references after operator type hierarchy refactor
- Added Julia best practices section to CLAUDE.md
CI & Maintenance
- Fixed downgrade CI failures across Julia 1.10–1.12
- Updated dependency compat bounds for docs and benchmarks
Merged pull requests:
- chore(deps): bump actions/upload-artifact from 6 to 7 (#98) (@dependabot[bot])
- chore(deps): bump the all-julia-packages group across 1 directory with 9 updates (#108) (@dependabot[bot])
- feat: RBFLayer for Lux.jl, fix Gaussian/IMQ ε validation (#109) (@kylebeggs)
Closed issues:
v0.3.0
RadialBasisFunctions v0.3.0
Breaking Changes
Gradienttype removed —gradient(...)is now a convenience alias forjacobian(...). Code that usedGradientas a type directly will break.- Basis operator closures replaced with functor structs —
∂,∇,∂²,∇²,D,D²are now callable structs instead of closure-returning functions. The public API (∂(basis, dim), etc.) is unchanged, but code dispatching on closure types will need updating. RadialBasisOperatorgained adevicetype parameter — struct now has 7 type parameters (was 6). Code pattern-matching on the full parametric type may need updating.
New Features
Automatic Differentiation Support (Enzyme.jl & Mooncake.jl)
- Native reverse-mode AD via package extensions (auto-activated when Enzyme or Mooncake is loaded)
- Enzyme extension —
EnzymeRules(augmented_primal+reverse) for operator application,_build_weights, and basis evaluation - Mooncake extension —
rrule!!with@is_primitivefor operator application,_build_weights,Interpolatorconstruction, and basis evaluation - Shared backward pass (
src/solve/backward.jl) using the implicit function theorem to differentiate through the stencil linear solve - Differentiable w.r.t. data point locations and basis shape parameter
ε - Analytic second derivatives for all PHS orders, Gaussian, and IMQ (needed for chain rule through RHS assembly)
- Shape parameter derivatives (
∂φ/∂ε,∂∇²φ/∂ε,∂∂φ/∂ε) for Gaussian and IMQ bases - BLAS-optimized backward pass using
mul!rank-1 updates - Compatible with
DifferentiationInterface.jlfor a unified AD interface
Jacobian Operator
- New
Jacobianoperator replaces the oldGradienttype - Generalizes beyond scalar fields: scalar input →
(N_eval × D)gradient; vector input →(N_eval × D × D)Jacobian; higher-rank tensor support gradient(...)is preserved as a convenience alias
Hessian Basis Functor
- New
H(Hessian) functor for all basis types (PHS 1/3/5/7, Gaussian, IMQ) - Returns
SMatrix{N,N,T}for second-derivative matrix of basis functions - Used internally by Hermite dispatch for optimized second-derivative computation
GPU Improvements
devicekeyword on all operator constructors — auto-detects backend viaKernelAbstractions.get_backend(data)or explicit override (e.g.,device=CUDABackend())Adapt.jlsupport —Adapt.adapt_structureforRadialBasisOperatorandInterpolator, enablingadapt(CUDABackend(), op)- GPU array types preserved in operator algebra (
+/-) VectorValuedOperatorevaluation usesmul!with views to eliminate temporariesInterpolatorbatch evaluation acceptsAbstractVector{<:AbstractVector}(not justVector)showmethods useeltype()instead oftypeof(first())for GPU compatibility
Unified Keyword-Based Constructor API
- Primary
RadialBasisOperatorconstructor rewritten with keyword arguments:RadialBasisOperator(ℒ, data; eval_points=data, basis=PHS(3; poly_deg=2), k=autoselect_k(data, basis), adjl=..., hermite=nothing, device=get_backend(data))
hermitekeyword accepts aNamedTuple(is_boundary=..., bc=..., normals=...)replacing old positional arguments- All operator constructors (
laplacian,partial,gradient,jacobian,directional,custom,regrid) forwardkw...to unified constructor
Refactoring
Basis Functions: Closures to Functors
- All differential operator factories replaced with typed callable structs (
∂{B},∇{B},∂²{B},∇²{B},D{B,V},D²{B,V1,V2},H{B}) - Enables multiple dispatch in AD rules and across the codebase
- PHS normal dispatch refactored to use 3-argument call instead of
Union{AbstractVector,Nothing}
Solve System Reorganization
stencil_math.jl→assembly.jl(pure math: collocation matrix, RHS, stencil assembly)kernel_exec.jl→execution.jl(memory allocation, kernel launching, batch processing)- New
BasisOperatorsstruct packages basis + gradient + Hessian functors, computed once per stencil - 6 new files for AD support (
ad_shared.jl,backward.jl,backward_cache.jl,forward_cache.jl,operator_second_derivatives.jl,shape_parameter_derivatives.jl)
Performance
- Pre-allocated
λbuffer reused across stencils in solve loop (fewer allocations) view(data, neighbors)instead of[data[i] for i in neighbors]per stencildot()instead of intermediate allocations in polynomial evaluationmul!with views inVectorValuedOperatorevaluation (zero-allocation GPU-friendly)
Testing
- Comprehensive AD test suite (
test/extensions/autodiff_di.jl) testing Laplacian, Gradient, Partial, Interpolator (construction + evaluation), basis functions, shape parameter differentiation, and 3D operators against finite differences - All
rand/randncalls seeded withMersenneTwisterfor deterministic CI - New test files for Jacobian operator, device keyword, and individual extension tests
- Enzyme tests skipped on Julia 1.12+ (
VERSION < v"1.12")
Documentation
- Switched to DocumenterVitepress.jl frontend
- New autodiff guide (
docs/src/guides/autodiff.md) with runnable examples usingDI.AutoMooncake - New quick reference page (
docs/src/guides/quickref.md) - Restructured navigation with Guides and Reference sections
- Refreshed landing page and README
Infrastructure
- Formatter switched from JuliaFormatter.jl to Runic.jl
- New dependencies:
Adapt.jl,StaticArrays.jl(direct);Enzyme.jl,EnzymeCore.jl,Mooncake.jl(weak deps) - CI action bumps (checkout v6, upload-artifact v6, etc.)
ChainRulesCoredependency removed
Merged pull requests:
- Refactor polynomial for Hermite (#60) (@kylebeggs)
- Jacobian operator and autodiff support (#61) (@kylebeggs)
- refactor(basis): replace operator closures with functor types (#64) (@kylebeggs)
- Feature/runic formatter (#66) (@kylebeggs)
- docs: enhance LLM discoverability and developer documentation (#68) (@kylebeggs)
- chore(deps): bump Mooncake compat to 0.5 (#72) (@kylebeggs)
- add native Enzyme rules and enhanced autodiff support (#76) (@kylebeggs)
- Bump julia-actions/julia-downgrade-compat from 1 to 2 (#77) (@dependabot[bot])
- Bump peter-evans/create-or-update-comment from 4 to 5 (#78) (@dependabot[bot])
- Bump peter-evans/find-comment from 3 to 4 (#79) (@dependabot[bot])
- Bump actions/upload-artifact from 4 to 6 (#80) (@dependabot[bot])
- Bump actions/checkout from 4 to 6 (#81) (@dependabot[bot])
- feat(ad): replace CRC extension with native Enzyme and Mooncake rules (#83) (@kylebeggs)
- perf(solve): reduce memory allocations in solve system hot paths (#85) (@kylebeggs)
- docs refresh (#87) (@kylebeggs)
- GPU updates (#89) (@kylebeggs)
Closed issues:
- improve the code for boundary conditions (#47)
- improve handling of polynomial terms (#48)
- Refactor RBF operators to use functor pattern for proper multiple dispatch (#62)
- Removal of repeated code in src/operators (#63)
- EnzymeRules? (#71)
- perf: optimize memory allocations in solve system hot paths (#73)
- feat(enzyme): add _build_weights support for IMQ and Gaussian basis functions (#74)
v0.2.6
RadialBasisFunctions v0.2.6
✨ New Features
Hermite Interpolation with Boundary Conditions
Added comprehensive support for Hermite interpolation, enabling derivative boundary conditions alongside
function values for PDE solving:
- Dirichlet Boundary Conditions: Specify function values at boundaries
- Neumann Boundary Conditions: Specify derivative values at boundaries
- Robin Boundary Conditions: Specify linear combinations of function and derivative values
- Mixed Boundary Conditions: Combine different boundary condition types in the same problem
- Works seamlessly with all RBF operators (Gradient, Laplacian, Partial, Directional, Custom)
GPU/CPU Parallelization with KernelAbstractions.jl
Migrated to KernelAbstractions.jl for improved parallel execution:
- Unified GPU and CPU computation backends
- Improved performance for weight computation
- Better memory management with stencil weight preallocation
🐛 Bug Fixes
- Fixed bug in Hermite weight computation (solve_hermite.jl)
- Fixed polyharmonic spline derivative calculation bug
- Fixed interpolation weights to correctly include last data point in linear system solve
- Corrected polyharmonic spline keyword constructors
Merged pull requests:
- Refactor of operator typing (#37) (@kylebeggs)
- Update README.md (#38) (@kylebeggs)
- Hermite conditions (#40) (@Davide-Miotti)
- Use KernelAbstractions.jl (#41) (@kylebeggs)
- Add Claude Code GitHub Workflow (#42) (@kylebeggs)
- Hermite kyle davide (#44) (@Davide-Miotti)
- Include last data point in linear system solve for interpolating weights (#46) (@cgeoga)
- Hermite refactor (#53) (@kylebeggs)
- Addition of Hermite method (#54) (@kylebeggs)
- add description of Hermite approach (#56) (@Davide-Miotti)
- add multithread CI and update actions (#58) (@kylebeggs)
Closed issues:
v0.2.5
RadialBasisFunctions v0.2.5
Merged pull requests:
- Update CI and test tolerances (#32) (@kylebeggs)
- add some tests for basis functions (#33) (@kylebeggs)
- add print tests (#34) (@kylebeggs)
- add more test coverage for operators (#35) (@kylebeggs)
v0.2.4
RadialBasisFunctions v0.2.4
Merged pull requests:
- Feature/clean up (#28) (@kylebeggs)
- update ChunkSplitters compat and add Downgrade CI (#31) (@kylebeggs)
v0.2.3
RadialBasisFunctions v0.2.3
Merged pull requests:
- Slight refactor of monomial basis (#27) (@kylebeggs)
v0.2.2
RadialBasisFunctions v0.2.2
Merged pull requests:
- fix directional deivative to be scalar output (#24) (@kylebeggs)
- Feature/virtual (#26) (@kylebeggs)
v0.2.1
v0.2.0
RadialBasisFunctions v0.2.0
Merged pull requests:
- Add
Regrid(#22) (@kylebeggs) - Rename
RadialBasisInterptoInterpolator