Skip to content
Back to skills

Benchmarks

ASecurity

"Load PhySO's shipped Feynman and Class benchmark problems,

  • 247 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 8, 2026
datapythongobashexpress

Security analysis

A100/100

Pro scans all 5 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add VectorSpaceLab/AREX-Skill --skill benchmarks --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Benchmarks?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Benchmarks
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vectorspacelab-benchmarks/badge)](https://www.skillsdirectory.com/skills/vectorspacelab-benchmarks)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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)

Files in this skill

  • SKILL.md8.5 KB
  • references/problem-loaders.md5.8 KB
  • references/symbolic-equivalence.md5.7 KB
  • references/troubleshooting.md6.3 KB
  • scripts/smoke_benchmark_loaders.py2.9 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.