PINNMark inverse PDE benchmarking toolkit and CLI facade
Project description
PINNMark
pinn_bench is a governed, reviewable benchmark system for PINN and operator-ready AI4S evaluation, anchored on a frozen formal baseline, fair-budget nominal benchmarking, structured OOD benchmarking, comparison-rights methodology, and bounded benchmark recoverability.
PyPI package:
pip install pinnmark
Facade usage:
from pinnmark import run_full_inverse_benchmark
run_full_inverse_benchmark.main(["--help"])
Project layers:
pinn_benchcore is the governed benchmark OSpinn_bench.easyis the sklearn-like researcher front doorPINNAtlasis the evidence/publication product built on top of that OS
Start Here
- I need benchmark truth / release semantics.
Layer 1.
Goal: understand the benchmark OS, the current canonical roots, and the governed paper-facing benchmark identity.
First destination:
docs/product/getting_started.mdSecond destination:docs/product/core_story.md,docs/product/project_positioning.md - I need Python-first research workflow.
Layer 2.
Goal: run, inspect, compare, study, or sweep from the researcher front door without entering governance surfaces first.
First destination:
docs/easy/index.mdSecond destination:docs/easy/quickstart.md,docs/easy/choose_guide.md - I need review / paper-facing benchmark package.
Layer 1.
Goal: inspect the current NeurIPS-facing benchmark-system package, evidence path, and reviewer route.
First destination:
docs/product/reviewer_summary.mdSecond destination:paper/neurips2026/paper_reviewer_safe_summary.md,docs/product/paper_submission_package.md - I need PINNAtlas corpus / method atlas / supplement / TPAMI package.
Layer 3.
Goal: enter the companion evidence/publication product without confusing it with the runtime system.
First destination:
docs/product/pinnatlas_program.mdSecond destination:paper/pinnatlas_supplement/README.md,paper/pinnatlas_tpami/README.md
Easy Path (Python-first researcher core)
The Python-first Easy Path provides one unified researcher core: the six easy objects ([ModelSpec, TaskSpec, BenchmarkEstimator, BenchmarkSuite, BenchmarkReport, BenchmarkComparison]) behave like a sklearn estimator graph with shared config discovery, fitting, and inspection semantics. Every BenchmarkEstimator still compiles down to ExperimentConfig, runs through the standard runner, and writes the governance artifacts (config_snapshot.yaml, metrics.json, train_log.csv, model.pt, loss_curve.png). The easy layer is additive: it exposes a single researcher-front door while leaving CLI commands, sectioned configs, and governance artifacts untouched.
from pinn_bench.easy import BenchmarkEstimator
est = BenchmarkEstimator(
task="heat1d",
model="mlp",
epochs=5,
lr=1e-3,
metrics=("mse", "relative_l2"),
)
est.fit(output_dir="outputs_playground/easy_nominal")
print("Score:", est.score())
print("Report:", est.report().summary())
Need to tweak robustness, comparison, or metrics? The Easy Path helpers clone the estimator to adjust parameters, so you keep a chainable API that still resolves to a valid config:
est.with_robustness(protocol="noise", level=0.05).fit()
est.with_comparison(
baseline_family="pinn",
data_budget_class="sparse",
compute_budget_class="medium",
tuning_budget_class="fixed_recipe",
comparison_scope="matched_all",
).score()
For small multi-run research workflows, stay in the same object graph with BenchmarkSuite and BenchmarkComparison instead of dropping into a separate toolchain immediately, and use the starter catalog (all_starters() / describe_starter(...)) when you need ready-made task+model+profile combos.
See docs/easy/quickstart.md, docs/easy/python_api.md, docs/easy/which_path_should_i_use.md, docs/easy/compatibility_policy.md, docs/easy/error_guide.md, and docs/easy/sklearn_gap_scorecard.md for the easy-path workflow guidance, and examples/easy for runnable recipes (single run, starter run, comparison, study, sweep, inspection). Use describe_model(...) and describe_task(...) when you want the docs card, starter configs, source path, and parameter signature for a component before running it, and use describe_metric(...) when you only need the metric source path and callable signature.
External Model Integration
PINNMark now keeps a unified native + external model universe with:
- a checked-in external family registry
- adapter-backed first-wave PINN family integration
- source benchmark / state / capability / provenance metadata
Canonical-first discovery examples:
pinn-bench list families --json
pinn-bench list families --name pinnmark.pinn.vanilla --json
pinn-bench list models --external-only --source-benchmark PINNacle --json
pinn-bench list models --name PINNacle::fnn --json
Python equivalents:
from pinn_bench.easy import all_external_models, all_families, describe_family, describe_model
print(all_families())
print(describe_family("pinnmark.pinn.vanilla"))
print(all_external_models(source_benchmark="PINNacle"))
print(describe_model("PINNacle::fnn")) # lineage / variant lookup
Current integration boundary:
- some external families are runnable through thin adapters or native proxies
- some are registry-only or adapter-ready but intentionally not runnable yet
- the registry is broader than the runnable subset by design
Canonical Family Layer
PINNMark now distinguishes three layers:
- canonical family
- benchmark-facing identity
- example:
pinnmark.pinn.vanilla
- implementation variant
- runnable or reference implementation backend
- example:
native.mlp,external.pdebench.pinn_proxy
- provenance / lineage
- source benchmark or source family reference
- example:
PDEBench::pinn,PDENNEval::PINN,PINNacle::fnn
This is not just aliasing. It means the platform can now say:
- these original source families collapse into one canonical
PINNMarkfamily - but their provenance and fidelity differences are still preserved below that identity
See:
docs/models/native_family_internalization.mdartifacts/benchmark_model_inventory/canonical_family_collapse_map.csvartifacts/benchmark_model_inventory/native_family_internalization_status.csvpaper/neurips2026/canonical_family_wording_migration_report.mdpaper/neurips2026/canonical_family_authoring_style_guide.md
Canonical-family discovery examples:
pinn-bench list families --json
pinn-bench list families --name pinnmark.pinn.vanilla --json
from pinn_bench.easy import all_families, describe_family
print(all_families())
print(describe_family("pinnmark.operator.fno"))
Canonical-family wording rule:
- README, docs, paper summaries, figure titles, and table method columns should lead with canonical family ids such as
pinnmark.pinn.vanillaandpinnmark.operator.fno. - External names such as
PDEBench::pinn,PDENNEval::PINN, andPINNacle::fnnare still kept, but as lineage / provenance notes rather than the primary benchmark-facing method names. - If a paper or appendix surface needs both layers, use the canonical family in the main label and move the external name into a lineage note, provenance clause, or dedicated mapping column.
Primary Method Layer
PINNMark now also tracks a benchmark-primary method universe above raw runtime selectors.
- top-level families remain the stable long-horizon taxonomy
- primary methods are the author-facing benchmark method objects
- runtime selectors remain the concrete constructible defaults when they exist
Examples:
pinnmark.pinn.cpinnpinnmark.hybrid.fbpinnpinnmark.pinn.vpinnpinnmark.pinn.hpinnpinnmark.operator.fnopinnmark.operator.deeponetpinnmark.operator.pinopinnmark.multifidelity.mf_pidnn
Primary-method discovery examples:
pinn-bench list methods
pinn-bench list methods --name cPINN --json
from pinn_bench.easy import all_primary_methods, describe_primary_method
print(all_primary_methods())
print(describe_primary_method("cPINN"))
Primary-method implementation report:
paper/neurips2026/twenty_method_internalization_report.md
Suite Path (NeurIPS 2026 first wave)
Need one suite-level front door instead of piecing together matrix / transfer / reference runners by hand?
pinn-bench suite list
pinn-bench suite run --suite inverse_main_benchmark --family-id inverse_main_benchmark__allencahn1d__parameter_recovery__epsilon_family_v1__mlp__physics_on --seeds 0
pinn-bench suite inspect --suite inverse_main_benchmark
Or stay in Python with the unified suite object:
from pinn_bench import Suite
suite = Suite.load("small_sample_inverse_suite")
result = suite.run(dry_run=True)
summary = suite.summary()
print(summary.execution_state, summary.figure_state)
print([figure.figure_id for figure in suite.figures()])
print([claim.claim_id for claim in suite.claims()])
Use paper/neurips2026/zero_to_suite_quickstart.md for the shortest “run one suite, find the results, find the figure, find the claim” path.
External Variant Lookup
PINNMark still supports external-variant lookup when authors or reviewers need to trace runnable proxies and source-benchmark lineage.
Useful discovery paths:
pinn-bench list models --json
pinn-bench list models --external-only --json
pinn-bench list models --external-only --source-benchmark PINNacle --json
pinn-bench list models --external-only --integration-state external_runnable --json
pinn-bench list models --external-only --runnable-only --json
Python discovery:
from pinn_bench.easy import all_external_models, describe_model
print(all_external_models(source_benchmark="PINNacle"))
print(describe_model("PINNacle::fnn"))
Implementation anchors:
pinn_bench/models/external_registry.pypinn_bench/models/external_adapters/artifacts/benchmark_model_inventory/external_model_integration_status.csv
Current boundary:
- not every external family is runnable
- runnable families are adapter-backed, not full native rewrites of the upstream benchmarks
- blocked or registry-only families are still discoverable and provenance-traceable
Current implementation report:
paper/neurips2026/external_model_integration_report.md
Current machine-readable status export:
artifacts/benchmark_model_inventory/external_model_integration_status.csvartifacts/benchmark_model_inventory/external_model_integration_status.json
PINNAtlas Companion
PINNAtlas is not the runtime front door. It is the companion evidence/publication product layered on top of pinn_bench. Use it when you need field-scale corpus, audited claim, method-atlas, supplement, or TPAMI package surfaces.
A reproducible PINN benchmark toolkit with frozen formal baselines, a current six-suite execution truth layer, reviewer-facing bundle controls, and explicit formal-freeze workflows.
Core Claim Surfaces
- governed nominal benchmarking
- structured OOD benchmarking
- comparison-rights methodology
- benchmark recoverability
Supporting Mechanisms
- stable truth and governance
- DX and role-specific entry surfaces
- operator-ready abstraction without silent relabeling
- synthesis and packaging for external inspection
Not This Project
- not a Main Track algorithm paper
- not a hosted leaderboard or hosted service
- not a complete geometry benchmark
- not a complete inverse-trust benchmark
- not a complete operator benchmark
- not a participant-validated recoverability paper
- not an all-AI4S breadth paper
Fast Start
- Inspect repo truth:
pinn-bench version --json
- List the current suite front door:
pinn-bench suite list
- Inspect the flagship current suite:
pinn-bench suite inspect --suite inverse_main_benchmark
- Read the current execution truth:
paper/neurips2026/current_execution_result_audit.md - Read the reviewer-safe package route:
paper/neurips2026/paper_reviewer_safe_summary.md,paper/neurips2026/submission_bundle_manifest.md,docs/product/paper_submission_package.md
Principal 50-Seed Package
For a seed-expanded principal inverse package that keeps the current 20-seed submission route intact, materialize a separate package directory:
PYTHONPATH=. python3 scripts/run_full_inverse_benchmark.py \
--seeds 50 \
--stress-seeds 50 \
--flagship-seeds 50 \
--outdir artifacts/submission_50seed \
--figdir artifacts/submission_50seed/figures
This package writes:
- principal per-seed metrics, main-board summaries, sidecar/plausibility metrics, and audit summaries under
artifacts/submission_50seed/ - bounded OOD and flagship summaries under the same package root
- LaTeX snippets under
artifacts/submission_50seed/latex/ - a package README at
artifacts/submission_50seed/README.md
Reviewer/user navigation assets for the current branch live at:
paper/neurips2026/user_playbook_quick_reference.mdpaper/neurips2026/adoption_checklist.mdpaper/neurips2026/method_family_lane_guide.mdpaper/neurips2026/scenario_matrix_coverage.md
Reader Paths
Supporting navigation:
- first-time reader:
docs/product/core_story.md,docs/product/why_pinn_bench.md,docs/product/getting_started.md - benchmark user:
paper/neurips2026/zero_to_suite_quickstart.md,paper/neurips2026/current_execution_result_audit.md - benchmark contributor:
docs/product/contribution_path.md,paper/neurips2026/execution/real_result_inventory.md,paper/neurips2026/execution/suite_status_board.csv - governance / review reader:
docs/product/reviewer_summary.md,paper/neurips2026/paper_reviewer_safe_summary.md,docs/product/paper_submission_package.md,paper/neurips2026/submission_bundle_manifest.md
Highlights
- Frozen formal benchmark lines for
v0.1,v0.2,v0.3,v0.4,v0.5,v0.6, andv1.0 - Unified
pinn-benchCLI for runs, matrix execution, reporting, presets, demos, scaffold flows, doctor checks, summaries, audits, formalization, and community bundle workflows - Current 2026 paper route is anchored on one frozen fair-board layer, one current six-suite executed extension line, and one reviewer-safe truth chain
- Comparison-rights support remains bounded and reviewer-legible through current paper/package surfaces rather than preview-era launch routing
- Recoverability remains bounded and not participant-validated; no completed B1 participant outcome ledger is checked into current truth
- Reviewer-facing bundle controls, metadata routing, and claim-evidence crosswalks aligned to the NeurIPS Datasets & Benchmarks paper package
- Additive
v3.0-previewsuper-benchmark registry scaffolding for strict official/staging/evidence cohort governance across absorbed SciML sources
Install
pip install pinnmark
# local development install
pip install -e .
Minimum Python version: 3.9
Core runtime dependencies:
numpypandasmatplotlibtqdmPyYAMLtorchscipy
The PyPI-facing CLI is pinnmark-run. The repository-native CLI pinn-bench remains supported, including python -m pinn_bench.run --config ....
Reproducibility note:
- benchmark outputs depend on the selected config, explicit seed, and available hardware/runtime backend
- for reproducible runs, prefer passing explicit seeds and retaining
config_snapshot.yaml,metrics.json, andtrain_log.csv
Version State
v0.1: frozen historical baseline formlp+sirenonoutputs/v0.2: frozen historical baseline formlp+siren+kanonoutputs_v02/v0.3: frozen historical baseline for the 33-family benchmark core and first product-layer formalization, onoutputs_v03/v0.4: frozen historical baseline for the 47-family union baseline and first community-layer formalization, onoutputs_v04/v0.5: frozen historical baseline for the thin-delta submission/community/platform release, onoutputs_v05/v0.6: frozen historical operator-ready formal baseline, onoutputs_v06/v1.0: current frozen formal baseline, onoutputs_v10/- current preview line:
none - latest completed preview line:
v1.9-preview - archived preview provenance docs:
docs/product/v1_9_preview.md,docs/product/v1_9_scope.md,docs/product/v1_9_governance.md,docs/product/v1_9_closeout.md - previous completed preview docs:
docs/product/v1_8_preview.md,docs/product/v1_8_scope.md,docs/product/v1_8_governance.md,docs/product/v1_8_closeout.md - freeze completion record:
docs/product/v1_0_freeze_complete.md
Formal v1.0 source-of-truth assets:
- manifest:
configs/matrix/baseline_v1_0_formal.yaml - canonical formal root:
outputs_v10/
Researcher Path
Formal v1.0 workflow
Use the current frozen formal manifest and formal outputs root:
pinn-bench formalize --from-preview v0.9-preview --source-root outputs_preview_v09 --target-root outputs_v10 --target-version v1.0 --dry-run
pinn-bench formalize --from-preview v0.9-preview --source-root outputs_preview_v09 --target-root outputs_v10 --target-version v1.0
pinn-bench doctor --formal --outputs-root outputs_v10 --matrix-manifest baseline_v1_0_formal.yaml
# read-only doctor verification
pinn-bench doctor --formal --outputs-root outputs_v10 --json
# explicit doctor artifact refresh
pinn-bench doctor --formal --outputs-root outputs_v10 --json --write
pinn-bench doctor --formal --outputs-root outputs_v10 --write
# read-only audit verification
pinn-bench audit --formal v1.0 --outputs-root outputs_v10 --json
# explicit audit artifact refresh
pinn-bench audit --formal v1.0 --outputs-root outputs_v10 --json --write
pinn-bench audit --formal v1.0 --outputs-root outputs_v10 --write
Archived Preview Provenance
The older preview closeout package is still preserved for historical traceability.
Use these archived surfaces only when you need preview-era provenance rather than the current 2026 paper route:
docs/product/v1_9_preview.mddocs/product/v1_9_scope.mddocs/product/v1_9_governance.mddocs/product/v1_9_closeout.mddocs/product/public_quickstart.md
Community Path
Package, validate, compare, and import one official run bundle against the current formal line:
pinn-bench package-run outputs_v06/heat1d_mlp_seed0 --output-dir outputs_playground/example_bundle
pinn-bench validate-submission outputs_playground/example_bundle --against-manifest baseline_v1_0_formal.yaml
pinn-bench compare-bundle outputs_playground/example_bundle --against outputs_v10/_leaderboard/leaderboard_grouped.json
pinn-bench import-bundle outputs_playground/example_bundle --against outputs_v10/_leaderboard/leaderboard_grouped.json --output-dir outputs_playground/imported_bundle_views/example_bundle
Build the additive v3.0-preview super-benchmark registry from absorbed source packs:
pinn-bench superbench-registry --source-root examples/superbench_v3_preview/sources --output-dir /tmp/pinn_superbench_registry
Run one absorbed source entry through the native rerun + bundle + registry-sync path:
pinn-bench superbench-rerun-entry --source-record examples/superbench_v3_preview/sources/PINNacle/source_record.json --entry-id PINNacle::poisson2d::mlp::official_rerun --workspace-root examples/superbench_v3_preview/sources/PINNacle --registry-root /tmp/pinn_superbench_registry
Run one ordered SciML tranche through the same orchestration path:
pinn-bench superbench-run-tranche --tranche-manifest examples/superbench_v3_preview/tranches/sciml_platform_tranche_01.json --registry-root /tmp/pinn_superbench_registry
Docs Hubs
- Product docs hub:
docs/product/index.md - Experiment docs hub:
docs/experiments/index.md - Community docs hub:
docs/community/index.md - Paper packaging hub:
docs/product/paper_submission_package.md
Historical Formal Releases
docs/experiments/v0_6_release.mddocs/experiments/v0_6_runbook.mddocs/experiments/v0_5_release.mddocs/experiments/v0_5_runbook.mddocs/experiments/v0_4_release.mddocs/experiments/v0_4_runbook.mddocs/experiments/v0_3_release.mddocs/experiments/v0_3_runbook.md
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pinnmark-0.1.1.tar.gz.
File metadata
- Download URL: pinnmark-0.1.1.tar.gz
- Upload date:
- Size: 427.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8be8f1c426aa19e036f43ec8d2cc2b38028e794679fc8975d2fc5525ac09a0eb
|
|
| MD5 |
bfc457b0abe986b48c62915e64558e91
|
|
| BLAKE2b-256 |
68fa9935a08fb827316cfbb05847d87929d43dab66c27ebf0e54bd958e2556e2
|
File details
Details for the file pinnmark-0.1.1-py3-none-any.whl.
File metadata
- Download URL: pinnmark-0.1.1-py3-none-any.whl
- Upload date:
- Size: 516.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f8a1fc87188db0e8c220228f4b5786442e898d6e47c444a2a5f594bcad89d37
|
|
| MD5 |
c07f61290b094480286500c640fa031b
|
|
| BLAKE2b-256 |
2fa827f02de85b1a0496c7e0810f957210b5b73b5b8316164ba7fe664b39e4b9
|