Command-line reference¶
ace-jax and its short alias aj are the same program. The documentation
build makes this page from the --help output of the program. Thus the page
agrees with the installed version.
The commands, in the order of a typical workflow:
aj fitfits a model to labelled extxyz data. It builds the basis from--order/--max-degree, or uses a saved basis from--model. It writes the fitted model, the metrics and afit.yamlrun file to--out.aj evalevaluates a fitted model (ACE.npz,gp_model.npzor PACE.yace) on an extxyz file.aj calibraterecalibrates the per-atom force uncertainty of a--uq ardfit on labelled target-regime data.aj basisbuilds a basis and saves it on its own.
Each command exits with status 0 if it is successful. The default label
keys are energy, forces and virial. For other names, use
--energy-key, --force-key and --virial-key.
usage: ace-jax [-h] [--version] {fit,eval,calibrate,export,native,basis} ...
Fit and evaluate ACE models in JAX (short alias: aj)
positional arguments:
{fit,eval,calibrate,export,native,basis}
fit fit a linear ACE model (default), or with --m-per-species > 0
the experimental hybrid ACE + residual GP
eval evaluate a model on a dataset: RMSE table vs the labels,
predictions to extxyz
calibrate recalibrate the per-group conformal scales of an ARD posterior
on a labelled set (per-group replace by default)
export write a model for LAMMPS: an ML-PACE .yace (pair_style pace)
or a lammps-jax bundle (.json, pair_style jax)
native the native acceleration here: the C++ kernel's compiler, flags
and cache, on a CUDA GPU the CUDA kernel's, and matscipy-
neighbours; --build compiles the kernels now
basis author a new ACE basis: a frozen model (seeded radial init)
saved as .npz
options:
-h, --help show this help message and exit
--version show program's version number and exit
aj fit¶
The options fall into groups:
- data:
--train/--testfiles, or one--datafile divided by a seeded permutation (--ntrain,--ntest,--test-start).--oodadds a second test set.--weightssets weights for each configuration type. - basis: the options under "basis" below build the basis in the fit.
Alternatively,
--modeluses a saved basis; then--r0is necessary. - model:
--m-per-species 0(the default) is linear ACE. A positive value adds a Gaussian-process arm, with that number of inducing sites for each species. The GP arm is experimental. The GP options (--kernel,--no-bump,--density,--pca-d,--embedding) need--m-per-species> 0. - hyperparameters:
--opt,--map-steps,--map-restarts,--map-polish,--strict,--init,--noise.--noise sharedlearns one noise scale for all weighted rows, so--weightssets the balance of E, F and V (as in ACEpotentials). The default--noise autousessharedwhen you give--weights, andper-quantitywhen you do not.--rungsother thanmapadds approximations of the hyperparameter posterior, at a much higher cost. - uncertainty:
--uq blr(default),popsorardfor the linear model. The--ard-*and--force-shapeoptions configureard(Per-atom force uncertainty). - run file:
--config fit.yaml. Command-line flags override the file (Run files).
usage: ace-jax fit [-h] [--config CONFIG] [--model MODEL]
[--train TRAIN | --data DATA] [--test TEST] [--ood OOD]
[--ntrain NTRAIN] [--ntest NTEST] [--test-start TEST_START]
[--energy-key ENERGY_KEY] [--force-key FORCE_KEY]
[--virial-key VIRIAL_KEY] [--stress-key STRESS_KEY]
[--weights WEIGHTS] [--e0 {model,lsq,prefit}] [--baseline BASELINE]
[--configs-per-batch CONFIGS_PER_BATCH]
[--batch-pack {auto,on,off}] [--m-per-species M_PER_SPECIES]
[--kernel {cosine,matern32}] [--no-bump]
[--density {none,pair,pca}] [--pca-d PCA_D] [--embedding EMBEDDING]
[--objective {lml,loo}] [--lml {device,host-cache}]
[--lml-solver {qr,cholesky}] [--row-precision {float64,float32}]
[--row-check] [--opt {adam,lbfgs}] [--map-polish {auto,on,off}]
[--strict] [--noise {auto,per-quantity,shared}]
[--solver {evidence,lstsq}] [--map-restarts MAP_RESTARTS]
[--init INIT] [--checkpoint DIR] [--checkpoint-every MIN]
[--rungs RUNGS] [--n-draws N_DRAWS] [--laplace {svi,fd}]
[--map-steps MAP_STEPS] [--vi-steps VI_STEPS]
[--nuts-warmup NUTS_WARMUP] [--nuts-samples NUTS_SAMPLES]
[--nuts-chains NUTS_CHAINS] [--r0 R0] [--uq {blr,pops,ard,ard-gp}]
[--ard-mode {joint,sequential}] [--ard-variance {sandwich,kappa}]
[--ard-solver {auto,qr,cholesky}] [--ard-cond-max ARD_COND_MAX]
[--ard-allow-degenerate] [--ard-val-frac ARD_VAL_FRAC]
[--force-shape {iso,aniso}] [--ard-coverage ARD_COVERAGE]
[--ard-groups {distortion,none}]
[--ard-cluster-size ARD_CLUSTER_SIZE] [--ard-press {exact,block}]
[--ard-transfer {exponent,sqrt,none}] [--ard-n-min ARD_N_MIN]
[--no-ard-support] [--ard-support-features {raw,normalised}]
[--learn-radial] [--radial-n-q RADIAL_N_Q]
[--radial-steps RADIAL_STEPS]
[--radial-reprofile-every RADIAL_REPROFILE_EVERY]
[--radial-opt {lbfgs,newton}] [--radial-cg-iters RADIAL_CG_ITERS]
[--radial-lam-grid RADIAL_LAM_GRID]
[--radial-val-frac RADIAL_VAL_FRAC] [--pops-ridge POPS_RIDGE]
[--seed SEED] [--out OUT] [--model-draws MODEL_DRAWS]
[--no-save-model] [--devices DEVICES] [--elements ELEMENTS]
[--order ORDER] [--max-degree MAX_DEGREE] [--wL WL] [--rcut RCUT]
[--rin RIN] [--radial-mode {onehot,glorot_normal,zero}]
[--pair-mode PAIR_MODE] [--radial-basis {poly,sbessel}]
[--no-gamma] [--no-coupling-cache]
[--coupling-cache-dir COUPLING_CACHE_DIR]
[--basis-embedding BASIS_EMBEDDING] [--nmax-by-order NMAX_BY_ORDER]
[--lmax-by-order LMAX_BY_ORDER] [--d-max D_MAX] [--maxl MAXL]
[--reduction {pca,truncate}]
options:
-h, --help show this help message and exit
--config CONFIG a fit.yaml run file (flag names as keys, the basis in a
`basis:` block); command-line flags override it
--model MODEL an ACE basis/model .npz (or give --order/--max-degree to build
the basis)
--train TRAIN training extxyz (with --test, or tested on itself)
--data DATA one extxyz split by a seeded permutation
(--ntrain/--ntest/--test-start)
--test TEST
--ood OOD extra out-of-distribution test extxyz
--ntrain NTRAIN
--ntest NTEST
--test-start TEST_START
--energy-key ENERGY_KEY
--force-key FORCE_KEY
--virial-key VIRIAL_KEY
--stress-key STRESS_KEY
stress label (eV/A^3, 3x3 or Voigt-6) used as the virial,
virial = -stress * volume, when a config has no virial label
--weights WEIGHTS JSON: an ACEfit weights dict {"default":
{"E":..,"F":..,"V":..}, <config_type>: ..} or a list of weight
factors [{"Structural": {}}, {"ConfigType": {...}}]; or the
path of a .json file holding either
--e0 {model,lsq,prefit}
per-species E0: the model's (default); lsq fits it jointly
with the readout (a wide prior around a least-squares start);
prefit fixes it at least squares on the training energies
before the fit
--baseline BASELINE dimer_mean.npz: fit the residual to this pair mean
--configs-per-batch CONFIGS_PER_BATCH
--batch-pack {auto,on,off}
size-aware batching: pack configs into batches by an atom
budget (the largest config) instead of fixed groups of
--configs-per-batch; auto = only when the fixed layout would
pad badly (mixed bulk + big cells)
--m-per-species M_PER_SPECIES
inducing points per species of the residual GP. 0 (default) =
linear ACE; > 0 adds the GP arm (experimental, advanced: much
slower and more memory; try 6-100)
--kernel {cosine,matern32}
--no-bump
--density {none,pair,pca}
GP feature map: full descriptor, pair densities, or a PCA view
(--pca-d)
--pca-d PCA_D
--embedding EMBEDDING
MACE element table (JSON): frozen species coregionalization
--objective {lml,loo}
--lml {device,host-cache}
host-cache: cache the linear design rows in host RAM (GP,
pair|pca, L-BFGS, map only)
--lml-solver {qr,cholesky}
linear arm: the evidence and posterior by QR (stable; default)
or by a Cholesky of the Gram (faster at large basis, but loses
accuracy when the fit nearly interpolates its data). The GP
arm always uses the Cholesky
--row-precision {float64,float32}
float32: compute the design rows (and, on a GPU, their QR) in
float32, the bulk of a fit's work; the evidence and
coefficients stay float64. Linear arm with the QR solver only:
the GP arm and --learn-radial are not supported yet
--row-check with --row-precision float32: after the MAP, refit on
statistics perturbed at float32 rounding and record how much
the training RMSE changes (warns above 10%; it costs a second
MAP)
--opt {adam,lbfgs} hyperparameter MAP optimiser: lbfgs (default) = bounded
L-BFGS-B, then (linear arm, see --map-polish) a Newton polish
to a stationary point; adam = numpyro SVI for --map-steps
steps, which can stop far from the optimum on large data
--map-polish {auto,on,off}
Newton polish of the L-BFGS MAP to a stationary point, with
the exact Hessian built one Hessian-vector product per free
hyperparameter (~2.3x the gradient's memory). auto (default):
on for the linear arm, off for the GP arm, where each HVP is a
forward-over-reverse pass through the streamed objective (one
gradient can take a minute, a polish hours at large scale)
--strict fail, instead of warning, when the MAP ends away from a
stationary point (a predicted Newton gain above 1e-3 nats)
--noise {auto,per-quantity,shared}
noise hyperparameters: per-quantity learns sigma_E, sigma_F
and sigma_V separately, and at the optimum each cancels its
quantity's --weights; shared learns ONE sigma for every
weighted row (ACEpotentials' BLR), so the E:F:V weights set
the balance. auto (default): shared when --weights is given,
per-quantity otherwise (and per-quantity where shared is not
available: --sigma-type, joint ARD, --solver lstsq)
--solver {evidence,lstsq}
lstsq: plain weighted least squares with no prior (teaching;
overfits a large basis)
--map-restarts MAP_RESTARTS
L-BFGS multi-start (best log-posterior)
--init INIT theta_map.json to start the MAP from
--checkpoint DIR resumable fit: save the training statistics (CPU) every
--checkpoint-every minutes and the MAP's best hyperparameters
to DIR; rerunning the same command resumes from them (GBs: 8
L^2 bytes per quantity)
--checkpoint-every MIN
minutes between training-statistics checkpoints (default 45)
--rungs RUNGS comma-separated from map,laplace,pathfinder,vi,nuts (default
map; the others add hyperparameter draws and cost far more
than the MAP)
--n-draws N_DRAWS
--laplace {svi,fd}
--map-steps MAP_STEPS
MAP iterations: L-BFGS-B iterations (at most 4x as many
evaluations), or Adam steps
--vi-steps VI_STEPS
--nuts-warmup NUTS_WARMUP
--nuts-samples NUTS_SAMPLES
--nuts-chains NUTS_CHAINS
--r0 R0 typical nearest-neighbour distance (A); centres the GP
hyperprior (default when building the basis: its mean bond
length)
--uq {blr,pops,ard,ard-gp}
pops/ard: linear arm (--m-per-species 0); ard = ARD posterior
with a calibrated per-atom forces_std (see --ard-variance),
writes posterior.npz; ard-gp: the same calibrated force UQ on
the GP arm (--m-per-species > 0), from the jackknife-sandwich
posterior over [B | k(B, B_M)] at the MAP hyperparameters;
writes gp_model.npz (the ARD mean) and posterior.npz
--ard-mode {joint,sequential}
joint: noise + ARD scales by evidence; sequential: ARD only,
one Gram (low memory with --uq ard; --uq ard-gp still holds ~4
Dt^2 joint arrays)
--ard-variance {sandwich,kappa}
ARD force-uncertainty shape: sandwich (default) = delete-one-
cluster PRESS jackknife (misspecification-robust); kappa = the
posterior A^-1 shape. Both get the per-group scales
--ard-solver {auto,qr,cholesky}
ard: factorisation of the ARD evidence and posterior -- qr
(auto with --uq ard) factors the data rows, so the prior floor
can sit decades lower than cholesky's (auto with --uq ard-gp)
--ard-cond-max ARD_COND_MAX
ard: the prior floor keeps cond(S) below this (default: 1e22
qr, 1e14 cholesky)
--ard-allow-degenerate
ard: write the posterior even when every ARD scale ends on the
prior floor with the evidence pointing below it (by default
the fit stops with an error)
--ard-val-frac ARD_VAL_FRAC
stratified train fraction held out to score the per-group
force scales (rms factor and conformal quantile) with the
hold-out posterior
--force-shape {iso,aniso}
ard: anisotropic (Mahalanobis, default) or isotropic
(|e|/sqrt(v/3), spherical radius) conformal force scores
--ard-coverage ARD_COVERAGE
ard: nominal coverage 1 - alpha of the per-group conformal
quantile
--ard-groups {distortion,none}
ard: conformal groups = distortion bands x [z = z*] (8), or
none (2)
--ard-cluster-size ARD_CLUSTER_SIZE
ard: sandwich block side in units of r_cut ('inf': whole
configurations)
--ard-press {exact,block}
ard: PRESS correction of the jackknife scores (exact: per-
cluster solve; block: block approximation)
--ard-transfer {exponent,sqrt,none}
ard: carry the hold-out scales to the served posterior by
(N/N_fit)^beta -- exponent: beta fitted per run from a second,
smaller hold-out fit (clipped to [0, 1/2]); sqrt: beta = 1/2;
none: beta = 0
--ard-n-min ARD_N_MIN
ard: groups with fewer configurations borrow a neighbouring
group's scales
--no-ard-support ard: skip the covariate-shift support reference
--ard-support-features {raw,normalised}
ard: support-reference features -- raw descriptors, or
normalised (unit-norm descriptor plus log-norm channels per
body order, which flag atoms losing neighbours)
--learn-radial learn the tensor radials (VarPro, held-out gate) before the
fit; the saved model is marked radial_learned and splined at
deploy time
--radial-n-q RADIAL_N_Q
tensor-radial polynomial span after widening (with --learn-
radial)
--radial-steps RADIAL_STEPS
optimiser iterations per roughness weight (with --learn-
radial)
--radial-reprofile-every RADIAL_REPROFILE_EVERY
re-fit the evidence hyperparameters every this many radial
steps; each re-fit restarts the optimiser (with --learn-
radial)
--radial-opt {lbfgs,newton}
radial optimiser: L-BFGS-B, or trust-region Newton with exact
Hessian-vector products (each costs about two gradients;
capped by --radial-cg-iters per iteration)
--radial-cg-iters RADIAL_CG_ITERS
Hessian-vector products per Newton iteration, at most (with
--radial-opt newton)
--radial-lam-grid RADIAL_LAM_GRID
comma-separated relative roughness weights the gate picks
among, alongside the initial radials (with --learn-radial)
--radial-val-frac RADIAL_VAL_FRAC
fraction of the training configs held out for the gate (with
--learn-radial)
--pops-ridge POPS_RIDGE
--seed SEED
--out OUT
--model-draws MODEL_DRAWS
GP arm: hyperparameter draws stored in gp_model.npz (1 = the
MAP; more = evenly spaced draws of the last rung, each adding
a (Dt, Dt) factor)
--no-save-model skip writing the fitted model (model.npz linear / gp_model.npz
GP)
--devices DEVICES shard sufficient statistics over this many devices
(experimental)
basis (built in memory; instead of --model):
--elements ELEMENTS comma-separated Z numbers or symbols (default: the species in
the data)
--order ORDER correlation order
--max-degree MAX_DEGREE
TotalDegree level bound
--wL WL
--rcut RCUT cutoff (default 5.5; with an embedding, 2.5 x mean bond
length)
--rin RIN
--radial-mode {onehot,glorot_normal,zero}
initial tensor radials: onehot (R_n = P_n, the frozen-fit
default) or seeded glorot_normal mixtures (a random start,
e.g. for learned radials)
--pair-mode PAIR_MODE
--radial-basis {poly,sbessel}
tensor-radial basis: poly (ACEpotentials, polynomials of a
transformed distance) or sbessel (PACE's simplified spherical
Bessel functions of r, as pacemaker's radials)
--no-gamma skip the smoothness prior
--no-coupling-cache always compute the coupling instead of using the per-shape
cache
--coupling-cache-dir COUPLING_CACHE_DIR
coupling cache directory (default: $ACEJAX_COUPLING_CACHE or
~/.cache/ace-jax/coupling)
--basis-embedding BASIS_EMBEDDING
frozen element embedding of the basis: a JSON table {Z, emb}
or 'identity' (builds ace_embedding_model: ace1-compatible,
factorised radial)
--nmax-by-order NMAX_BY_ORDER
comma-separated cap on the radial degree n of each many-body
term, per correlation order from 1 (pacemaker's
nradmax_by_orders; the last entry repeats)
--lmax-by-order LMAX_BY_ORDER
comma-separated cap on l per correlation order (pacemaker's
lmax_by_orders); with --wL 1 the TotalDegree level is
pacemaker's power order
--d-max D_MAX cap on per-order channel widths (default lossless)
--maxl MAXL
--reduction {pca,truncate}
aj eval¶
With --posterior (a posterior.npz from aj fit --uq ard), --per-atom
writes the per-atom force uncertainty, and --support adds the support flag
(Per-atom force uncertainty).
usage: ace-jax eval [-h] --model MODEL --data DATA [--energy-key ENERGY_KEY]
[--force-key FORCE_KEY] [--virial-key VIRIAL_KEY]
[--stress-key STRESS_KEY] [--out OUT] [--prefix PREFIX]
[--posterior POSTERIOR] [--per-atom PER_ATOM] [--support]
[--shape-path {rows,committee}] [--no-deriv-dtc]
options:
-h, --help show this help message and exit
--model MODEL
--data DATA
--energy-key ENERGY_KEY
--force-key FORCE_KEY
--virial-key VIRIAL_KEY
--stress-key STRESS_KEY
stress label (eV/A^3, 3x3 or Voigt-6) used as the virial,
virial = -stress * volume, when a config has no virial label
--out OUT extxyz to write: the input structures, every label kept, plus
the predictions (<prefix>energy, <prefix>forces,
<prefix>stress, and *_std for UQ models)
--prefix PREFIX name prefix of the predicted keys (default ace_)
--posterior POSTERIOR
posterior.npz from `fit --uq ard` (with its model.npz) or `fit
--uq ard-gp` (with its gp_model.npz): adds <prefix>forces_std
--per-atom PER_ATOM with --posterior: extxyz of the served per-atom arrays
(forces_pred, forces_std, forces_q, forces_group; forces_cov,
forces_q_mahal for an aniso posterior)
--support with --posterior --per-atom: add support_ok and support_q
(covariate-shift support)
--shape-path {rows,committee}
ard: evaluate the uncertainty shape from the whole cell's
force design rows (rows) or as the forces of an r-output
linear ACE (committee: same values, memory O(N r) not O(N L))
--no-deriv-dtc gp_model.npz only: SoR-only forces_std, without the
derivative-DTC term (whose whole-cell (n, K, d, 3) arrays may
not fit for a big cell)
aj calibrate¶
Calculates the group scales of an ARD posterior again, on labelled configurations that were not in the training set. It writes a new posterior. The model does not change. See Recalibrate on target data.
usage: ace-jax calibrate [-h] --model MODEL --posterior POSTERIOR --data DATA
[--energy-key ENERGY_KEY] [--force-key FORCE_KEY]
[--virial-key VIRIAL_KEY] [--shape-path {rows,committee}]
[--append | --replace] --out OUT
options:
-h, --help show this help message and exit
--model MODEL
--posterior POSTERIOR
--data DATA labelled extxyz U (needs forces under --force-key)
--energy-key ENERGY_KEY
--force-key FORCE_KEY
--virial-key VIRIAL_KEY
--shape-path {rows,committee}
ard: evaluate the uncertainty shape from the whole cell's
force design rows (rows) or as the forces of an r-output
linear ACE (committee: same values, memory O(N r) not O(N L))
--append pool U with the stored T_val scores in every group
--replace use U only in every group
--out OUT
aj export¶
Writes a model for LAMMPS: an ML-PACE .yace file, or a lammps-jax bundle.
See Export a model to LAMMPS.
usage: ace-jax export [-h] [--model MODEL] [--out OUT] [--format {yace,lammps}]
[--delta DELTA] [--structure STRUCTURE] [--skin SKIN]
[--slots {skin,cutoff}] [--layout {auto,sparse,dense,matrix}]
[--dtype {float64,float32}] [--platform {cuda,cpu}]
[--procs PROCS] [--aa-dag {auto,chain,greedy,prefix}]
[--print-env BUNDLE] [--ffi] [--no-ffi] [--ffi-flags FFI_FLAGS]
[--type-elements TYPE_ELEMENTS]
options:
-h, --help show this help message and exit
--model MODEL a model .npz (linear ACE) or .yace (required)
--out OUT the file to write: .yace or .json (else give --format;
required)
--format {yace,lammps}
yace: ML-PACE C-tilde (exact, tabulated radials); lammps: a
lammps-jax bundle (default: from the --out extension)
--delta DELTA yace: radial table spacing and ML-PACE deltaSplineBins in Å
(default 0.001; the cutoff must be a whole number of it)
--structure STRUCTURE
lammps: the extxyz LAMMPS starts from (first configuration);
it sizes the buffers
--skin SKIN lammps: the LAMMPS neighbour skin (Å)
--slots {skin,cutoff}
lammps: neighbour slots for rcut + skin (safe) or rcut
(tighter; stable MD only)
--layout {auto,sparse,dense,matrix}
lammps: bundle layout
--dtype {float64,float32}
lammps: precision
--platform {cuda,cpu}
lammps: the lammps-jax backend the bundle runs on (default
cuda)
--procs PROCS lammps: the LAMMPS processor grid px,py,pz; sizes one MPI
rank's buffers (run LAMMPS with `processors px py pz`)
--aa-dag {auto,chain,greedy,prefix}
lammps: the product basis form: auto (greedy for large bases,
else chain), chain, or the DAG plans greedy / prefix (on a
CUDA GPU, --ffi is faster than any of them)
--print-env BUNDLE instead of an export: print the environment that runs LAMMPS
on an exported kernel bundle, resolved on this machine (run it
where LAMMPS runs; a kernel library missing here is compiled
here)
--ffi lammps: require ace-jax's kernel for linear ACE (one FFI call
per step; on --platform cpu the default takes it when it can
and says why not), compiled on first use with the C++ compiler
($CXX, c++, g++ or clang++), or nvcc for a GPU bundle, and
cached
--no-ffi lammps, --platform cpu: the XLA program, not the C++ kernel
--ffi-flags FFI_FLAGS
lammps: the kernel's compiler flags (implies --ffi; default
"-O3 -march=native", or "-O3 -arch=sm_XY" for a GPU): on a
login node for compute nodes of another CPU type, e.g. --ffi-
flags="-O3 -march=x86-64-v3" (with =), or -arch=sm_80 for an
A100
--type-elements TYPE_ELEMENTS
lammps: comma-separated element of each LAMMPS atom type, in
type order (default: the model's element order)
aj native¶
Shows the native C++ code that ace-jax can use on this machine: the compiler,
the C++ kernel and the neighbour list. --build compiles the kernel. See
Installation.
usage: ace-jax native [-h] [--build] [--flags FLAGS] [--gpu-flags GPU_FLAGS]
options:
-h, --help show this help message and exit
--build compile the C++ kernel, and on a CUDA GPU the CUDA kernel,
into the cache now (else each is compiled on first use); on a
cluster, run it on a compute node. Exits 1 when one cannot be
compiled
--flags FLAGS the kernel's compiler flags (default "-O3 -march=native", or
ACEJAX_FFI_FLAGS), e.g. --flags="-O3 -march=x86-64-v3" (with
=)
--gpu-flags GPU_FLAGS
the CUDA kernel's nvcc flags (default "-O3 -arch=sm_XY" for
this GPU, or ACEJAX_FFI_GPU_FLAGS)
aj basis¶
usage: ace-jax basis [-h] --elements ELEMENTS --order ORDER --max-degree MAX_DEGREE
[--wL WL] [--rcut RCUT] [--rin RIN]
[--radial-mode {onehot,glorot_normal,zero}]
[--pair-mode PAIR_MODE] [--radial-basis {poly,sbessel}]
[--no-gamma] [--no-coupling-cache]
[--coupling-cache-dir COUPLING_CACHE_DIR] [--embedding EMBEDDING]
[--nmax-by-order NMAX_BY_ORDER] [--lmax-by-order LMAX_BY_ORDER]
[--d-max D_MAX] [--maxl MAXL] [--reduction {pca,truncate}]
[--seed SEED] --out OUT [--config CONFIG]
options:
-h, --help show this help message and exit
--elements ELEMENTS comma-separated Z numbers or symbols
--order ORDER correlation order
--max-degree MAX_DEGREE
TotalDegree level bound
--wL WL
--rcut RCUT cutoff (default 5.5; with an embedding, 2.5 x mean bond
length)
--rin RIN
--radial-mode {onehot,glorot_normal,zero}
initial tensor radials: onehot (R_n = P_n, the frozen-fit
default) or seeded glorot_normal mixtures (a random start,
e.g. for learned radials)
--pair-mode PAIR_MODE
--radial-basis {poly,sbessel}
tensor-radial basis: poly (ACEpotentials, polynomials of a
transformed distance) or sbessel (PACE's simplified spherical
Bessel functions of r, as pacemaker's radials)
--no-gamma skip the smoothness prior
--no-coupling-cache always compute the coupling instead of using the per-shape
cache
--coupling-cache-dir COUPLING_CACHE_DIR
coupling cache directory (default: $ACEJAX_COUPLING_CACHE or
~/.cache/ace-jax/coupling)
--embedding EMBEDDING
frozen element embedding of the basis: a JSON table {Z, emb}
or 'identity' (builds ace_embedding_model: ace1-compatible,
factorised radial)
--nmax-by-order NMAX_BY_ORDER
comma-separated cap on the radial degree n of each many-body
term, per correlation order from 1 (pacemaker's
nradmax_by_orders; the last entry repeats)
--lmax-by-order LMAX_BY_ORDER
comma-separated cap on l per correlation order (pacemaker's
lmax_by_orders); with --wL 1 the TotalDegree level is
pacemaker's power order
--d-max D_MAX cap on per-order channel widths (default lossless)
--maxl MAXL
--reduction {pca,truncate}
--seed SEED
--out OUT
--config CONFIG a fit.yaml: its `basis:` block (and `seed`); command-line
flags override it