"Load PhySO's shipped Feynman and Class benchmark problems,
Scanned 9/8/2026
Install to Claude Code
npx -y skills add VectorSpaceLab/AREX-Skill --skill benchmarks --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Benchmarks?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/vectorspacelab-benchmarks)More formats (shields.io, HTML) on the badges page.
---
name: benchmarks
description: "Load PhySO's shipped Feynman and Class benchmark problems,
generate bounded samples, inspect symbolic metadata, and compare candidate
SymPy expressions."
read_when: "Use when a task needs benchmark-problem data or symbolic-equivalence
checks; do not use it to launch the maintainer benchmark suites."
disable-model-invocation: true
metadata:
disco-role: operating
license: MIT
---
# PhySO benchmark problems
## Role
This sub-skill is the bounded, read-only benchmark-data route for the installed
`physo` package. It teaches a Researcher to select a Feynman or Class problem,
inspect its target and metadata, generate a small in-memory sample, obtain the
prefix form, and apply the package's symbolic comparison convention.
It is not a general benchmarking or model-training skill. Keep generated arrays
small unless the caller explicitly owns a separate experiment workflow.
## Boundaries
**Included**
- `FeynmanProblem` for the 120 Feynman entries (bulk indices 0--99 and bonus
indices 100--119), including equation-name lookup.
- `ClassProblem` for the 8 Class entries, including realization-specific `K`
constants and equation-name lookup.
- Formula, variable, target, range, unit, SymPy-assumption, and prefix metadata.
- `generate_data_points`, `target_function`, `get_sympy`, and non-blocking
`show_sample` usage.
- `FeynmanProblem.compare_expression` and
`physo.benchmark.utils.symbolic_utils.compare_expression`.
- The small loader check in `scripts/smoke_benchmark_loaders.py`.
**Excluded**
- Running SR or Class SR (`physo.SR` and `physo.ClassSR`); route those requests
to [`sr`](../sr/SKILL.md) or [`class-sr`](../class-sr/SKILL.md).
- Full benchmark reproduction, noisy benchmark campaigns, result analysis,
cluster/HPC jobfiles, and long-running runners.
- Generic data-science benchmark design or numerical-only model scoring.
- Pareto-front and training-log handling; route those questions to
[`toolkit`](../toolkit/SKILL.md) or the root skill.
The maintainer scripts `benchmarking/FeynmanBenchmark/feynman_run.py` and
`benchmarking/ClassBenchmark/classbench_run.py` are reference-only. The
`benchmarking/*_make_run_file.py` files and `benchmarking/utils.py` jobfile
helper are deliberately outside this runtime skill.
## Verified entry points
The following imports and package facts are verified for PhySO 1.2.0:
```python
import physo.benchmark.FeynmanDataset.FeynmanProblem as Feyn
import physo.benchmark.ClassDataset.ClassProblem as Cls
from physo.benchmark.utils import symbolic_utils as su
feyn_pb = Feyn.FeynmanProblem(i_eq=0)
class_pb = Cls.ClassProblem(i_eq=0)
```
The verified inspection/runtime baseline is CPU-only Python 3.12 with NumPy,
SymPy, pandas, Matplotlib, scikit-learn, and a CPU PyTorch build. No CUDA claim
is made here. Import-time warnings about unavailable system LaTeX are expected
and do not by themselves invalidate loading or comparison.
## Workflow
1. **Validate the selector before constructing the object.** Use an integer in
`0 <= i_eq < Feyn.N_EQS` (120) or `0 <= i_eq < Cls.N_EQS` (8), or use the
exact `eq_name` from the dataset. A name can be inspected with
`Feyn.EQS_FEYNMAN_DF["Name"]` or `Cls.EQS_CLASS_DF["Name"]`. If both selector
arguments are supplied, the current constructors take the index branch.
2. **Load and inspect metadata.** Start with `print(pb)`, then inspect
`formula_sympy`, `formula_sympy_eval`, `formula_latex`, `X_names`,
`X_lows`, `X_highs`, `X_units`, `y_name`, and `y_units`. Class problems also
expose `K_names`, `K_lows`, `K_highs`, and `K_units`; `K` means one row of
realization-specific constants, not a Class SR class constant.
3. **Generate a bounded sample.** Set `np.random.seed(...)` when reproducible
values matter and pass an explicit small `n_samples`. Feynman returns
`X.shape == (pb.n_vars, n_samples)` and `y.shape == (n_samples,)`. Class
returns `multi_X.shape == (n_realizations, pb.n_vars, n_samples)` and
`multi_y.shape == (n_realizations, n_samples)`; with `return_K=True`, it
also returns `K.shape == (n_realizations, pb.n_spe)`.
4. **Check the target directly.** For Feynman use `pb.target_function(X)`.
For a Class realization use `pb.target_function(multi_X[i], K[i])`. Compare
shapes before calling `np.allclose`; do not transpose the package's
`(variables, samples)` convention.
5. **Inspect the expression representation.**
`pb.get_prefix_expression()` returns a dictionary with `tokens_str`,
`arities`, and `tokens`, traversed in SymPy pre-order. For a Class problem,
the prefix form still contains symbolic `k*` tokens. Use
`pb.get_sympy(K_vals=...)` to substitute one or more concrete `K` rows.
6. **Compare symbolically.** Parse a candidate with the problem's assumption-
carrying symbol dictionary, then call the problem wrapper for Feynman or
`su.compare_expression` for Class. Follow the exact examples in
[symbolic-equivalence.md](references/symbolic-equivalence.md), and retain
the returned `report` instead of relying only on the Boolean.
7. **Stop at inspection.** If the request asks for all equations, noise sweeps,
SR training, job submission, or result reproduction, hand off to the
appropriate root/SR/Class SR workflow and keep this route as the loader and
equivalence utility only.
## Input/output contracts
| Operation | Inputs | Outputs and invariants |
| --- | --- | --- |
| `FeynmanProblem(i_eq=...)` or `eq_name=...` | Valid index or exact name | One problem; `X` is variables-first; target `y` is one-dimensional. |
| `ClassProblem(i_eq=...)` or `eq_name=...` | Valid index or exact name | One problem; `K` has one row per realization and one column per `K_names`. |
| `generate_data_points` | Small positive `n_samples`; Class also `n_realizations` | NumPy float arrays sampled within declared input and constant ranges. |
| `target_function` | Feynman `X`, or Class `X` plus one `K` row | Target values for the supplied shape; it does not validate a transposed data layout for you. |
| `get_prefix_expression` | No arguments | Dict keys `tokens_str`, `arities`, `tokens` with equal lengths. |
| `compare_expression` | SymPy expressions with matching assumption-aware symbols | `(is_equivalent: bool, report: dict)`; report includes symbolic error/fraction and solution flags. |
## Safe helper and native checks
Run the bundled helper from an environment where `physo` is installed:
```bash
python skills/disco/physo/sub-skills/benchmarks/scripts/smoke_benchmark_loaders.py
```
It loads Feynman problem 0 and Class problem 0, generates only a few points,
checks target evaluation and array shapes, and prints stable metadata. It never
runs a benchmark trainer or creates result directories.
The corresponding native candidates are:
- `python -m unittest physo.benchmark.FeynmanDataset.tests.FeynmanProblem_UnitTest -q`
- `python -m unittest physo.benchmark.ClassDataset.tests.ClassProblem_UnitTest -q`
These tests iterate over all shipped equations with small samples; they are
CPU-safe correctness checks, not full SR benchmark reproduction.
## Troubleshooting
See [problem-loaders.md](references/problem-loaders.md) for selector, shape,
metadata, and plotting details; [symbolic-equivalence.md](references/symbolic-equivalence.md)
for assumptions, rounding, and trigonometric comparison; and
[troubleshooting.md](references/troubleshooting.md) for recovery and the
maintainer-runner boundary.
Common first responses:
- Normalize an index before construction. Positive out-of-range and unknown
names currently surface as pandas `IndexError`; negative `.iloc` indices can
accidentally select the last row, so reject them in caller code.
- Use the exact shape contracts above. Feynman is `(n_vars, n_samples)`, not
`(n_samples, n_vars)`; Class adds a realization axis.
- Parse candidates with `pb.sympy_X_symbols_dict` (or the documented original-
name dictionary), not fresh symbols with different assumptions.
- Treat `compare_expression` as the benchmark's symbolic convention, not as a
numerical error metric. Inspect its report, especially when rounding or
trigonometric handling is enabled.
- Use `show_sample(..., do_show=False)` in headless work. Missing Matplotlib is
an installation problem because these benchmark modules import it; missing
system LaTeX only affects optional display and is normally warning-level.
## Related routes
- Root routing: [`../../SKILL.md`](../../SKILL.md)
- Single-dataset SR: [`../sr/SKILL.md`](../sr/SKILL.md)
- Class SR data-shape and training guidance: [`../class-sr/SKILL.md`](../class-sr/SKILL.md)
- Low-level expression and result inspection: [`../toolkit/SKILL.md`](../toolkit/SKILL.md)
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!