Skip to content

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 fit fits 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 a fit.yaml run file to --out.
  • aj eval evaluates a fitted model (ACE .npz, gp_model.npz or PACE .yace) on an extxyz file.
  • aj calibrate recalibrates the per-atom force uncertainty of a --uq ard fit on labelled target-regime data.
  • aj basis builds 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/--test files, or one --data file divided by a seeded permutation (--ntrain, --ntest, --test-start). --ood adds a second test set. --weights sets weights for each configuration type.
  • basis: the options under "basis" below build the basis in the fit. Alternatively, --model uses a saved basis; then --r0 is 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 shared learns one noise scale for all weighted rows, so --weights sets the balance of E, F and V (as in ACEpotentials). The default --noise auto uses shared when you give --weights, and per-quantity when you do not. --rungs other than map adds approximations of the hyperparameter posterior, at a much higher cost.
  • uncertainty: --uq blr (default), pops or ard for the linear model. The --ard-* and --force-shape options configure ard (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