Tensor AD Oracles Support Coverage
This file is a checked-in support snapshot derived from the vendored third_party/tensor-ad-oracles subtree. The crate-local replay entrypoint lives under crates/tenferro-linalg/tests/integration/oracle_replay.rs, with helpers under crates/tenferro-linalg/tests/oracle_replay, and is env-gated for local or nightly execution rather than default PR CI.
Summary
- Total published records: 9585
- Supported success records: 2090
- Supported success records with HVP payloads: 1339
- Expected error records: 2
- Unsupported success records: 7493
Local Replay
The default test target validates the harness and representative cases without replaying the whole database. Full replay is opt-in:
RUST_TEST_THREADS=1 RUN_ORACLE_REPLAY=1 ORACLE_REPLAY_JOBS=48 \
cargo test -p tenferro-linalg --features autodiff --test integration \
oracle_replays_supported_db_cases_when_requested -- --nocapture
ORACLE_REPLAY_JOBS controls record-level parallelism. The harness uses plain OS worker threads instead of an outer Rayon pool because replayed cases execute CPU backend kernels that may use backend-owned Rayon scopes internally.
Crate-Local AD Coverage Outside Replay
The support tables below describe the active env-gated oracle replay adapter snapshot. Some AD manifest entries are also guarded by crate-local finite-difference tests because the public oracle family is not yet replayable.
| manifest op | coverage type | public path | test |
|---|---|---|---|
| Einsum extension | finite-difference | einsum_with(..., "ij,jk->ik", ...) |
cargo test -p tenferro-einsum --features autodiff --test integration grad_einsum_matmul_real_matches_finite_diff_for_both_inputs |
| FFT C2C extension | finite-difference | fft(...).jvp(...) |
cargo test -p tenferro-fft --features autodiff --test fft_ops fft_c64_jvp_matches_finite_diff |
| Lu | finite-difference | grad(sum(l) + sum(u)) |
cargo test -p tenferro-linalg --features autodiff --test integration lu_qr_sum_grads_match_finite_diff |
| Qr | finite-difference | grad(sum(q) + sum(r)) |
cargo test -p tenferro-linalg --features autodiff --test integration lu_qr_sum_grads_match_finite_diff |
| SvdVals | finite-difference | norm(..., ord=2) |
cargo test -p tenferro-linalg --features autodiff --test integration spectral_norm_jvp_matches_finite_diff_through_values_only_svd |
| Eigh | finite-difference | grad(sum(values) + sum(vectors)) |
cargo test -p tenferro-linalg --features autodiff --test integration full_eigh_sum_grad_matches_finite_diff |
| EighVals | finite-difference | eigvalsh |
cargo test -p tenferro-linalg --features autodiff --test integration eigvalsh_jvp_matches_finite_diff_through_values_only_eigh |
| EigVals | finite-difference | eigvals |
cargo test -p tenferro-linalg --features autodiff --test integration eigvals_jvp_matches_finite_diff |
Supported
| op | family | observable | sample count |
|---|---|---|---|
| cholesky | identity | identity | 48 |
| cholesky_ex | identity | identity | 48 |
| det | identity | identity | 36 |
| eigh | values_vectors_abs | eigh_values_vectors_abs | 32 |
| full_pivot_lu | identity | identity | 4 |
| inv | identity | identity | 24 |
| inv_ex | identity | identity | 24 |
| lstsq_grad_oriented | identity | identity | 42 |
| lu | identity | identity | 80 |
| matrix_norm | identity | identity | 40 |
| norm | identity | identity | 176 |
| pinv | identity | identity | 72 |
| qr | identity | identity | 36 |
| slogdet | identity | identity | 36 |
| solve | identity | identity | 24 |
| solve_ex | identity | identity | 24 |
| solve_triangular | identity | identity | 432 |
| svd | s | svd_s | 216 |
| svd | u_abs | svd_u_abs | 216 |
| svd | uvh_product | svd_uvh_product | 216 |
| svd | vh_abs | svd_vh_abs | 216 |
| vector_norm | identity | identity | 48 |
Expected Errors
| op | family | observable | sample count |
|---|---|---|---|
| eigh | gauge_ill_defined | eigh_values_vectors_abs | 1 |
| svd | gauge_ill_defined | svd_uvh_product | 1 |
Unsupported
| op | family | observable | sample count | reason |
|---|---|---|---|---|
| radd | identity | identity | 36 | tenferro replay does not implement this oracle family yet |
| rdiv | identity | identity | 36 | tenferro replay does not implement this oracle family yet |
| rmod | identity | identity | 18 | tenferro replay does not implement this oracle family yet |
| rmul | identity | identity | 36 | tenferro replay does not implement this oracle family yet |
| rpow | identity | identity | 22 | tenferro replay does not implement this oracle family yet |
| rsub | identity | identity | 36 | tenferro replay does not implement this oracle family yet |
| abs | identity | identity | 4 | tenferro replay does not implement this oracle family yet |
| acos | identity | identity | 12 | tenferro replay does not implement this oracle family yet |
| acosh | identity | identity | 12 | tenferro replay does not implement this oracle family yet |
| add | identity | identity | 44 | tenferro replay does not implement this oracle family yet |
| amax | identity | identity | 40 | tenferro replay does not implement this oracle family yet |
| amin | identity | identity | 40 | tenferro replay does not implement this oracle family yet |
| angle | identity | identity | 4 | tenferro replay does not implement this oracle family yet |
| asin | identity | identity | 4 | tenferro replay does not implement this oracle family yet |
| asinh | identity | identity | 4 | tenferro replay does not implement this oracle family yet |
| atan | identity | identity | 4 | tenferro replay does not implement this oracle family yet |
| atan2 | identity | identity | 18 | tenferro replay does not implement this oracle family yet |
| atanh | identity | identity | 4 | tenferro replay does not implement this oracle family yet |
| cdouble | identity | identity | 20 | tenferro replay does not implement this oracle family yet |
| ceil | identity | identity | 2 | tenferro replay does not implement this oracle family yet |
| cholesky | identity | identity | 16 | tenferro replay currently supports this family only for float64/complex64/complex128 |
| cholesky_ex | identity | identity | 16 | tenferro replay currently supports this family only for float64/complex64/complex128 |
| clamp_max | identity | identity | 18 | tenferro replay does not implement this oracle family yet |
| clamp_min | identity | identity | 18 | tenferro replay does not implement this oracle family yet |
| complex | identity | identity | 18 | tenferro replay does not implement this oracle family yet |
| cond | identity | identity | 12 | tenferro has no public traced condition-number API to replay this oracle family yet |
| conj | identity | identity | 12 | tenferro replay does not implement this oracle family yet |
| conj_physical | identity | identity | 4 | tenferro replay does not implement this oracle family yet |
| copysign | identity | identity | 20 | tenferro replay does not implement this oracle family yet |
| cos | identity | identity | 12 | tenferro replay does not implement this oracle family yet |
| cosh | identity | identity | 12 | tenferro replay does not implement this oracle family yet |
| cross | identity | identity | 12 | tenferro has no matching public traced linalg API to replay this oracle family yet |
| deg2rad | identity | identity | 2 | tenferro replay does not implement this oracle family yet |
| diagonal | identity | identity | 60 | tenferro replay does not implement this tensor-construction oracle family yet |
| digamma | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| div_no_rounding_mode | identity | identity | 36 | tenferro replay does not implement this oracle family yet |
| double | identity | identity | 20 | tenferro replay does not implement this oracle family yet |
| eig | values_vectors_abs | eig_values_vectors_abs | 32 | tenferro Eig AD support is values-only; eigenvector observables are unsupported by the manifest |
| eigvals | identity | identity | 32 | tenferro replay does not implement this scalar-output oracle family yet |
| eigvalsh | identity | identity | 32 | tenferro replay does not implement this scalar-output oracle family yet |
| erf | identity | identity | 2 | tenferro replay does not implement this oracle family yet |
| erfc | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| erfinv | identity | identity | 2 | tenferro replay does not implement this oracle family yet |
| exp | identity | identity | 12 | tenferro replay does not implement this oracle family yet |
| exp2 | identity | identity | 12 | tenferro replay does not implement this oracle family yet |
| expm1 | identity | identity | 4 | tenferro replay does not implement this oracle family yet |
| fill | identity | identity | 12 | tenferro replay does not implement this oracle family yet |
| float_power | identity | identity | 36 | tenferro replay does not implement this oracle family yet |
| floor | identity | identity | 2 | tenferro replay does not implement this oracle family yet |
| fmax | identity | identity | 18 | tenferro replay does not implement this oracle family yet |
| fmin | identity | identity | 18 | tenferro replay does not implement this oracle family yet |
| frac | identity | identity | 2 | tenferro replay does not implement this oracle family yet |
| frexp | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| full_pivot_lu | identity | identity | 8 | tenferro replay currently supports this family only for square float32/float64/complex64/complex128 inputs |
| householder_product | identity | identity | 32 | tenferro has no matching public traced linalg API to replay this oracle family yet |
| hypot | identity | identity | 18 | tenferro replay does not implement this oracle family yet |
| i0 | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| imag | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| inv | identity | identity | 8 | tenferro replay currently supports this family only for float64/complex64/complex128 |
| inv_ex | identity | identity | 8 | tenferro replay currently supports this family only for float64/complex64/complex128 |
| ldexp | identity | identity | 36 | tenferro replay does not implement this oracle family yet |
| lgamma | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| log | identity | identity | 12 | tenferro replay does not implement this oracle family yet |
| log10 | identity | identity | 12 | tenferro replay does not implement this oracle family yet |
| log1p | identity | identity | 4 | tenferro replay does not implement this oracle family yet |
| log2 | identity | identity | 12 | tenferro replay does not implement this oracle family yet |
| logaddexp | identity | identity | 36 | tenferro replay does not implement this oracle family yet |
| logit | identity | identity | 8 | tenferro replay does not implement this oracle family yet |
| lstsq_grad_oriented | identity | identity | 102 | tenferro replay currently supports only the real-valued m>=n least-squares subset excluding unsupported driver-specific oracle cases |
| lu_factor | identity | identity | 80 | tenferro lu_factor is a prepared factor carrier whose AD rule is intentionally unsupported |
| lu_factor_ex | identity | identity | 80 | tenferro lu_factor is a prepared factor carrier whose AD rule is intentionally unsupported |
| lu_solve | identity | identity | 1248 | tenferro has no public traced lu_solve replay adapter for this oracle family yet |
| matrix_norm | identity | identity | 216 | tenferro replay currently supports only the rank-2 scalar-output matrix_norm slice accepted by the current NormKind adapter; complex inputs are further restricted to ord=Fro |
| matrix_power | identity | identity | 72 | tenferro has no public traced matrix_power API to replay this oracle family yet |
| max_binary | identity | identity | 18 | tenferro replay does not implement this oracle family yet |
| maximum | identity | identity | 18 | tenferro replay does not implement this oracle family yet |
| mean | identity | identity | 80 | tenferro replay does not implement this oracle family yet |
| min_binary | identity | identity | 18 | tenferro replay does not implement this oracle family yet |
| minimum | identity | identity | 18 | tenferro replay does not implement this oracle family yet |
| mul | identity | identity | 36 | tenferro replay does not implement this oracle family yet |
| multi_dot | identity | identity | 28 | tenferro has no matching public traced linalg API to replay this oracle family yet |
| mvlgamma_mvlgamma_p_1 | identity | identity | 20 | tenferro replay does not implement this oracle family yet |
| mvlgamma_mvlgamma_p_3 | identity | identity | 20 | tenferro replay does not implement this oracle family yet |
| mvlgamma_mvlgamma_p_5 | identity | identity | 20 | tenferro replay does not implement this oracle family yet |
| nan_to_num | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| nanmean | identity | identity | 70 | tenferro replay does not implement this oracle family yet |
| nansum | identity | identity | 70 | tenferro replay does not implement this oracle family yet |
| neg | identity | identity | 4 | tenferro replay does not implement this oracle family yet |
| nn_functional_celu | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| nn_functional_elu | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| nn_functional_hardshrink | identity | identity | 12 | tenferro replay does not implement this oracle family yet |
| nn_functional_hardsigmoid | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| nn_functional_hardtanh | identity | identity | 10 | tenferro replay does not implement this oracle family yet |
| nn_functional_logsigmoid | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| nn_functional_mish | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| nn_functional_prelu | identity | identity | 50 | tenferro replay does not implement this oracle family yet |
| nn_functional_relu | identity | identity | 8 | tenferro replay does not implement this oracle family yet |
| nn_functional_relu6 | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| nn_functional_rrelu | identity | identity | 10 | tenferro replay does not implement this oracle family yet |
| nn_functional_selu | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| nn_functional_silu | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| nn_functional_softplus | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| nn_functional_softshrink | identity | identity | 10 | tenferro replay does not implement this oracle family yet |
| nn_functional_softsign | identity | identity | 12 | tenferro replay does not implement this oracle family yet |
| nn_functional_tanhshrink | identity | identity | 12 | tenferro replay does not implement this oracle family yet |
| nn_functional_threshold | identity | identity | 8 | tenferro replay does not implement this oracle family yet |
| norm | identity | identity | 232 | tenferro replay currently supports only the whole-tensor torch.linalg.norm subset expressible by current NormKind AD rules; remaining dim-aware and unsupported ord/rank cases are not replayed yet |
| pinv | identity | identity | 24 | tenferro replay currently supports this family only for float64/complex64/complex128 |
| pinv_hermitian | identity | identity | 32 | tenferro has no matching public traced linalg API to replay this oracle family yet |
| pinv_singular | identity | identity | 192 | tenferro replay does not expose the two-input pinv_singular oracle family |
| polar | identity | identity | 18 | tenferro replay does not implement this oracle family yet |
| polygamma_polygamma_n_0 | identity | identity | 20 | tenferro replay does not implement this oracle family yet |
| polygamma_polygamma_n_1 | identity | identity | 20 | tenferro replay does not implement this oracle family yet |
| polygamma_polygamma_n_2 | identity | identity | 20 | tenferro replay does not implement this oracle family yet |
| polygamma_polygamma_n_3 | identity | identity | 20 | tenferro replay does not implement this oracle family yet |
| polygamma_polygamma_n_4 | identity | identity | 20 | tenferro replay does not implement this oracle family yet |
| positive | identity | identity | 4 | tenferro replay does not implement this oracle family yet |
| pow | identity | identity | 36 | tenferro replay does not implement this oracle family yet |
| prod | identity | identity | 156 | tenferro replay does not implement this oracle family yet |
| qr | identity | identity | 108 | tenferro replay currently supports this family only for float64 |
| rad2deg | identity | identity | 2 | tenferro replay does not implement this oracle family yet |
| real | identity | identity | 12 | tenferro replay does not implement this oracle family yet |
| reciprocal | identity | identity | 12 | tenferro replay does not implement this oracle family yet |
| round | identity | identity | 2 | tenferro replay does not implement this oracle family yet |
| round_decimals_0 | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| round_decimals_3 | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| round_decimals_neg_3 | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| rsqrt | identity | identity | 12 | tenferro replay does not implement this oracle family yet |
| rsub | identity | identity | 44 | tenferro replay does not implement this oracle family yet |
| sgn | identity | identity | 4 | tenferro replay does not implement this oracle family yet |
| sigmoid | identity | identity | 12 | tenferro replay does not implement this oracle family yet |
| sign | identity | identity | 2 | tenferro replay does not implement this oracle family yet |
| sin | identity | identity | 4 | tenferro replay does not implement this oracle family yet |
| sinc | identity | identity | 12 | tenferro replay does not implement this oracle family yet |
| sinh | identity | identity | 4 | tenferro replay does not implement this oracle family yet |
| solve | identity | identity | 72 | tenferro replay currently supports this family only for float64 |
| solve_ex | identity | identity | 72 | tenferro replay currently supports this family only for float64 |
| solve_triangular | identity | identity | 1296 | tenferro replay currently supports this family only for float64 |
| special_entr | identity | identity | 4 | tenferro replay does not implement this oracle family yet |
| special_erfcx | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| special_i0e | identity | identity | 4 | tenferro replay does not implement this oracle family yet |
| special_i1 | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| special_i1e | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| special_log_ndtr | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| special_ndtr | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| special_ndtri | identity | identity | 6 | tenferro replay does not implement this oracle family yet |
| special_polygamma_special_polygamma_n_0 | identity | identity | 20 | tenferro replay does not implement this oracle family yet |
| special_xlog1py | identity | identity | 18 | tenferro replay does not implement this oracle family yet |
| sqrt | identity | identity | 4 | tenferro replay does not implement this oracle family yet |
| square | identity | identity | 12 | tenferro replay does not implement this oracle family yet |
| std | identity | identity | 56 | tenferro replay does not implement this oracle family yet |
| std_unbiased | identity | identity | 8 | tenferro replay does not implement this oracle family yet |
| sub | identity | identity | 44 | tenferro replay does not implement this oracle family yet |
| sum | identity | identity | 80 | tenferro replay does not implement this oracle family yet |
| svdvals | identity | identity | 144 | tenferro replay does not implement this scalar-output oracle family yet |
| tan | identity | identity | 4 | tenferro replay does not implement this oracle family yet |
| tanh | identity | identity | 4 | tenferro replay does not implement this oracle family yet |
| tensorinv | identity | identity | 8 | tenferro has no matching public traced linalg API to replay this oracle family yet |
| tensorsolve | identity | identity | 16 | tenferro has no matching public traced linalg API to replay this oracle family yet |
| tropical_einsum_maxplus | identity | identity | 1 | tenferro replay does not implement this oracle family yet |
| true_divide | identity | identity | 36 | tenferro replay does not implement this oracle family yet |
| trunc | identity | identity | 2 | tenferro replay does not implement this oracle family yet |
| vander | identity | identity | 40 | tenferro has no matching public traced linalg API to replay this oracle family yet |
| var | identity | identity | 56 | tenferro replay does not implement this oracle family yet |
| var_unbiased | identity | identity | 8 | tenferro replay does not implement this oracle family yet |
| vecdot | identity | identity | 176 | tenferro has no matching public traced linalg API to replay this oracle family yet |
| vector_norm | identity | identity | 672 | tenferro replay currently supports only the rank-1 scalar-output vector_norm slice accepted by the current NormKind adapter; complex inputs are further restricted to ord=P(2) |
| xlogy | identity | identity | 18 | tenferro replay does not implement this oracle family yet |