Skip to main content

symbolic_data

The model-agnostic symbolic-regression data layer, carved out of flash-ansr: skeleton/expression sampling, priors, (X, y) support sampling, holdout management, and dataset construction.

Both symbolic-regression methods (for training holdout) and the srbf eval framework depend on it, so training, holdout, and evaluation draw from one source of truth. Its only heavy dependency is simplipy; otherwise just numpy/sklearn plus huggingface_hub (for resolving versioned catalogs from the HF asset repo).

Install

pip install symbolic-data

Quick start

import symbolic_data

# 1. Load a curated catalog (level 1: expressions + their intrinsic per-variable sampling). The
#    curated sets are Hugging Face artifacts (not bundled in the wheel): a bare `name` needs network
#    on first use, then caches; pass an explicit local path for offline use. `load_catalog("name@version")`
#    resolves a versioned catalog from the HF manifest, and `load_catalog("user/repo:name")` loads a
#    third party's published catalog.
feynman = symbolic_data.load_catalog("feynman")            # 100 equations (Udrescu & Tegmark 2020)
entry = feynman["I.6.2a"]
entry.prepared, entry.variables                            # expression + intrinsic per-variable sampling

# 2. Draw (X, y) Problems from a ProblemSource (level 2). Mode is inferred from the config:
#    a declarative/frozen `catalog` ref (set), a generative `catalog` ref (generate, on-the-fly),
#    or inline `problems` (fixed).
src = symbolic_data.ProblemSource({"catalog": "feynman",
                                   "sampling": {"n_support": 32, "n_validation": 32, "noise": 0.01}})
for problem in src:
    if problem.is_placeholder:                                                        # a slot the source could not fill (recorded, not skipped)
        continue
    problem.x_support, problem.y_support, problem.y_support_noisy, problem.expression  # fit / tokenize

# 3. Freeze for exact reproduction (no seeds): materialize() -> a fixed source that re-iterates
#    byte-identical Problems, identical across models/runs.
frozen = src.materialize()

Extensibility

Distributions are pluggable via a registry: in-process with @symbolic_data.DISTRIBUTIONS.register("name"), or across packages via an importlib.metadata entry point in the symbolic_data.distributions group. A registered name drops into the same {"name": ..., "kwargs": ...} config slot as a builtin (e.g. the fastsrb distribution).

Catalogs are extensible through the resolver: publish your own to a Hugging Face dataset repo with a manifest.json, then symbolic_data.load_catalog("your-user/your-repo:name@version").

Versioning / reproducibility

Reproducibility comes from fixed data, not seeds: sampling draws from a threaded numpy.random.Generator (entropy by default), and exact reproduction across runs/models is obtained from a fixed (materialized) catalog rather than by re-seeding. Versioned catalogs resolve from Hugging Face with a pinned revision and a sha256 integrity check. Catalogs are HF artifacts (not bundled in the wheel since 0.8.0): a bare name needs network on first use, then caches; pass an explicit local path for fully offline operation.

Status: 0.10.0. The full public stack: Problem, the unified distribution framework (incl. the fastsrb distribution), and the Catalog a ProblemSource samples from -- either a declarative ProblemCatalog (+ load_catalog + the versioned HF resolver) or an on-the-fly GenerativeCatalog (LampleChartonCatalog: random unary-binary operator trees; build_catalog dispatches a catalog: {type: ...} config). ProblemSource adds the usage policy (draw method, support/validation counts, noise, holdouts/filters, problems_per_expression, unbounded streaming, materialize() + to_catalog() for frozen, byte-reproducible catalogs). Generate-mode is fully Generator-driven (no global np.random). The skeleton/support/holdout machinery stays private (_generate); the public face is LampleChartonCatalog. Curated catalogs (FastSRB, Feynman, Nguyen) are published to the HF assets repo and resolved by name (not bundled in the wheel). CLI: symbolic-data materialize. 0.10.0 breaking: LampleChartonCatalog.load(directory) now returns the catalog object only (was (config_dict, catalog)), consistent with ProblemCatalog.load; read the config separately via load_config(<dir>/catalog.yaml) if you need it (see the CHANGELOG). Deferred: a frozen holdout grid; functional-equivalence exclude (currently exact normalized-expression match).

Licensing

The repository is MIT-licensed (see LICENSE) with one carve-out: everything under assets_sa/ is CC BY-SA 4.0 (OEIS-/Wikipedia-derived benchmark catalogs; see assets_sa/LICENSE for the full legal code + derivation statement). Vendored upstream data under assets/upstream/*/ carries per-directory NOTICE + license files; THIRD_PARTY_LICENSES has the summary table. The share-alike catalogs publish to a separate HF repo (psaegert/symbolic-data-assets-sa), never mixed into the permissive artifact repo.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

symbolic_data-0.14.0.tar.gz (90.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

symbolic_data-0.14.0-py3-none-any.whl (75.5 kB view details)

Uploaded Python 3

File details

Details for the file symbolic_data-0.14.0.tar.gz.

File metadata

  • Download URL: symbolic_data-0.14.0.tar.gz
  • Upload date:
  • Size: 90.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for symbolic_data-0.14.0.tar.gz
Algorithm Hash digest
SHA256 548813b4a3a1c018241858247830633e93f728851ed00a36d515b0dac32de1cb
MD5 c083e77ef2160a43444b2a81c30e6cf1
BLAKE2b-256 d7934f2c440d24ed28700596a89c016baede0c1588f034dbc23c2a84c3d9afa0

See more details on using hashes here.

Provenance

The following attestation bundles were made for symbolic_data-0.14.0.tar.gz:

Publisher: publish.yaml on psaegert/symbolic-data

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file symbolic_data-0.14.0-py3-none-any.whl.

File metadata

  • Download URL: symbolic_data-0.14.0-py3-none-any.whl
  • Upload date:
  • Size: 75.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for symbolic_data-0.14.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0b55c762733f33ab01657a5a722195ea1683c9b6435df6034682786d08970ba6
MD5 387abf7c82a6d0089b8d2512db0297b8
BLAKE2b-256 0308f0378429ed849f59460f426c9ecc4d3e45b4928c63bbcba059fd0065a66c

See more details on using hashes here.

Provenance

The following attestation bundles were made for symbolic_data-0.14.0-py3-none-any.whl:

Publisher: publish.yaml on psaegert/symbolic-data

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.15.0

2 files

This release

0.14.0 This release

2 files

0.13.0

2 files

0.12.4

2 files

0.12.3

2 files

0.12.2

2 files

0.12.1

2 files

0.12.0

2 files

0.11.0

2 files

0.10.0

2 files

0.9.5

2 files

0.9.4

2 files

0.9.3

2 files

0.9.2

2 files

0.9.1

2 files

0.9.0

2 files

0.3.0

2 files

0.2.0

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page