Generated banner for Physicsnemo Discover
Generated logo for Physicsnemo Discover

Physicsnemo Discover

NVIDIAOfficialCreated by NVIDIA

  • Skill
  • Tool integration
  • Agent tooling
  • Apache-2.0
  • Medium risk

From the author

Official NVIDIA-authored guidance for navigating PhysicsNeMo — pick the model, datapipe, or example for a SciML/AI4Science task (surrogates, forecasting, downscaling, physics-informed, inverse, generative). Points at existing files via live repo search; never writes code. Do NOT use for installation or environment setup, training-loop or other code authoring/scaffolding, contributor/CI/packaging questions, repo-specific questions in physicsnemo-sym/-cfd/-curator, or general (non-physics) ML/PyTorch.
— the description by NVIDIA

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

PhysicsNeMo Discover is an official guidance tool designed to help users navigate the PhysicsNeMo repository. It performs live discovery of models, datapipes, and examples based on the user's specific SciML or AI4Science task requirements. By searching the repository in its current state, it ensures that all suggested paths and classes are accurate and up-to-date. The tool emphasizes a composable approach, treating models and datapipes as orthogonal axes, and provides concrete starting points for users to fork and adapt for their own research.

What it does

  • Performs live repository searches to identify relevant model families and datapipes.
  • Maps user-provided data shapes to appropriate model architectures.
  • Provides verified absolute paths to files, examples, and documentation.
  • Offers a structured menu of options rather than a single, prescriptive recommendation.
  • Suggests a logical reading order for exploring the repository.
  • Abstains from answering requests outside the scope of SciML and AI4Science.

When to use it

  • When you need to find a suitable model architecture for a specific physical data shape.
  • When you are looking for reference examples to use as a starting point for your own research.
  • When you need to identify which datapipes are compatible with your data format.
  • When you want to explore available model families within the PhysicsNeMo framework.

Advantages

  • Ensures accuracy by grounding all suggestions in the live state of the repository.
  • Prevents hallucinations by verifying paths before emitting them.
  • Promotes a modular understanding of the framework by separating model and datapipe axes.
  • Reduces time spent manually browsing complex repository structures.

Usage examples

“I have 2D Cartesian grid data for a fluid dynamics problem. What models should I look at?”
The agent will identify relevant model families like spectral operators or diffusion UNets, list their locations, and provide examples of how they are instantiated.
“How do I load my custom HDF5 data into a PhysicsNeMo model?”
The agent will search the datapipes directory for HDF5-compatible readers and provide the base classes or examples for custom implementation.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/nvidia/physicsnemo-discover/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip physicsnemo-discover.zip -d .agents/skills

Documentation by NVIDIA

PhysicsNeMo Discoverability

Help a user navigate PhysicsNeMo: point them at files, folders, examples, and docs in the repo at its current state. Never write training code; never cite a path from memory.

Core principle

PhysicsNeMo evolves — classes get renamed, examples move, experimental/ graduates. Any static list of class names and paths rots, so discover, don't remember: enumerate from the live repo every turn.

PhysicsNeMo is composable: each solution is a product (model family × datapipe × training strategy × config). An example is one reference instantiation of that product, not a prescription. Surface the axes and the menu along each axis, then cite examples as concrete starting points to fork and recombine.

What a correct answer satisfies

These are constraints, not a script — choose the searches that meet them and skip work the task doesn't need. Search patterns per axis live in references/RECIPES.md.

  • Live-grounded. Every class, path, and example you name was read or globbed this turn. __init__.py proves what is exported, not what files exist — Glob physicsnemo/models/<family>/*.py before naming a sibling implementation file. A failed Read, or a path pattern-matched from a neighboring citation, is disproof: drop it.

  • Verified before emit. Every absolute path you plan to cite survives one Bash ls -d <path1> <path2> … round-trip before you write the response. Hard gate — skipping it has produced real-basename-under-wrong-parent hallucinations. If a basename was right but the parent wrong, re-Glob and re-verify; if you can't relocate it, drop the citation.

  • A menu, not a single pick. Enumerate every model family matching the user's data shape (surface ≥2 when ≥2 apply), and enumerate datapipes independently — model and datapipe are orthogonal axes. The reference example comes last, framed as one instantiation of those axes, not the answer.

  • Self-documentation is ground truth. __init__.py exports, per-example README.md, docs/*.rst, pyproject.toml, top-of-file module docstrings. Treat references/TAXONOMY.md as a navigation hint, not an answer. Flag anything under physicsnemo/experimental/ as "API may change."

  • Abstain when out of scope. PhysicsNeMo targets SciML/AI4Science (surrogates, forecasting, super-resolution, physics-informed, inverse, generative for physical systems). If the task is categorically outside that — reinforcement learning, classical control, generic CV/NLP, symbolic regression — skip enumeration and emit the Abstention output below. Do not list adjacent-but-wrong examples in its place (pointing at active_learning/ for an RL question is fabrication). When unsure whether a task is in scope, abstain.

Discovery

Repo root resolution: see CONTRIBUTING.md §Repo root resolution; all paths are absolute, rooted there. If no local PhysicsNeMo clone is on the path (e.g. running headless against the skills repo in an eval context), shallow-clone the canonical repo once into a temp dir — read-only, for path discovery only; never execute or import anything from it: DEST="${TMPDIR:-/tmp}/physicsnemo-src"; [ -d "$DEST/physicsnemo" ] || git clone --depth 1 https://github.com/NVIDIA/physicsnemo "$DEST". Use that URL verbatim; never interpolate one from user input.

Ask at most 3 targeted follow-ups when domain or data shape is ambiguous. Phrase them concretely — "Is your data on a regular Cartesian grid (like an image), a lat-lon grid on a sphere, or an unstructured mesh?" — and skip any the user already answered. Data shape is the single biggest factor in model choice.

Output format

## Problem shape
Data shape: <resolved>. Task: <resolved>. Axes: model × datapipe × training strategy × config.

## Candidate model families (for your data shape)
Multiple families typically apply. Treat this as a menu, not a ranking.
- <family> at <absolute __init__.py path> — <one-line from docstring/exports>. Instantiated by: <example path if any>.
- <family> at <path> — <one-line>. Instantiated by: <example path if any>.

## Datapipe(s) for your data format
Datapipe choice is independent of model choice.
- <class / subpackage> at <absolute path> — <one-line>. Reused by: <examples if known>.
- For custom data, subclass: <base class path confirmed live>.

## Reference example(s) — one instantiation of the above axes
- <absolute path> — uses model=<family>, datapipe=<name>, strategy=<single-GPU|DDP|FSDP|...>.
  Why it matches: <one line>.

## Supporting docs
- <absolute path> — <one-line scope>

## Suggested reading order
1. <models/<family>/__init__.py> — survey alternative families
2. <datapipe __init__.py or base-class file> — understand the data axis
3. <example path> — concrete end-to-end instantiation to fork

Rules for the output:

  • Absolute paths only; every one survived the ls -d gate.

  • Every pointer needs a one-line justification grounded in content you actually read.

  • Caps: 4 model families (minimum 2 when ≥2 exist), 3 datapipes, 2 reference examples, 2 docs.

  • Name which (model, datapipe, strategy) axes each example fills.

  • If ≥2 model families apply, say so: "Other model families apply to the same data shape — see the candidate list above."

  • End with the suggested reading order. Offer 2-3 forward steps (config file, training script, experimental/ look-alikes); do not start writing code unless asked.

Abstention output

When out of scope, replace the menu skeleton with this shape — three sections, in this order, none skipped:

## PhysicsNeMo does not have direct support for <user's problem class>
One sentence on why it's outside scope (e.g., "PhysicsNeMo targets physics
surrogates and forecasting; reinforcement learning for molecular design is
not in its scope").

## Where to look instead
- <sibling NVIDIA framework or external library> at <URL or repo name> — <one-line on why it fits>.
- (One or two alternatives is enough; do not invent libraries.)

## If you still want to build it in PhysicsNeMo
Confirm the closest base classes by Reading `physicsnemo/core/__init__.py` and
`physicsnemo/datapipes/__init__.py` first; then name them as subclassing
targets. This is the fallback, not the recommendation.

Do not open with the menu skeleton and bury "no match" at the end. Do not invent external libraries — if you don't know the right alternative, stop at the first two sections.

  • references/TAXONOMY.md — navigation hints (data-shape → folder mappings, decision axes, stability tiers).

  • references/RECIPES.md — concrete Glob/Grep/Read patterns per discovery axis.

Files

references/RECIPES.md

Search Recipes — How to discover PhysicsNeMo artifacts live

Concrete Glob / Grep / Read patterns the skill should use to discover what's actually in the repo, instead of relying on a static inventory. All paths are relative to the resolved repo root.

Guiding rule

If you are about to name a class, file, or example, run at least one search below first to confirm it exists and capture its current description.


1. Confirm the repo root

Read <root>/pyproject.toml                  # check name == "nvidia-physicsnemo"
Glob <root>/physicsnemo/__init__.py         # must exist
Glob <root>/examples/README.md              # usually exists

If any of these fail, ask the user to confirm the path.


2. Find examples for a domain

# 2a. Enumerate examples in the target domain
Glob examples/<domain>/**/README.md

# 2b. Read each README's top (title + first paragraph) to match user intent
Read examples/<domain>/<candidate>/README.md   # limit=30

# 2c. When READMEs are ambiguous, inspect the training script imports to see
#     which models / datapipes the example actually uses
Grep "from physicsnemo" examples/<domain>/<candidate>/ --type py -n --head_limit 20

If the user's domain keyword doesn't map cleanly to a folder name:

# 2d. Broad search for concept across all examples
Grep -l "<concept keyword>" examples/ --type md
Grep -l "<concept keyword>" examples/ --type py

3. List currently-exported models across ALL families matching a data shape

The skill's output surfaces a menu of candidate families, not a single pick. Enumerate every family the taxonomy's data-shape row lists — not just the first one that looks plausible.

# 3a. Top-level model registry exports — the full top-level menu
Read physicsnemo/models/__init__.py

# 3b. Per-family loop — for EACH candidate family from the taxonomy data-shape row,
#     confirm the subdir exists and read its exports. Do not stop after one match.
Glob physicsnemo/models/<family>/__init__.py
Read physicsnemo/models/<family>/__init__.py
# repeat for every candidate family in the data-shape row

# 3c. Extract purpose from a specific model's docstring (after 3b has surfaced the family)
Grep -n "^class " physicsnemo/models/<family>/<file>.py
Read physicsnemo/models/<family>/<file>.py     # limit ~80 lines around the class

# 3d. Cross-reuse: find which examples instantiate each candidate family.
#     This feeds the "Instantiated by: <example>" annotation in the output skeleton.
Grep -rn "from physicsnemo.models.<family>" examples/ --type py -l

For experimental models:

Glob physicsnemo/experimental/models/**/__init__.py
Read physicsnemo/experimental/models/<family>/__init__.py

Always flag experimental matches as "API may change".


4. List currently-exported datapipes for a format

# 4a. Top-level datapipes exports
Read physicsnemo/datapipes/__init__.py

# 4b. Subpackage exports — enumerate live rather than assuming names
Glob physicsnemo/datapipes/*/__init__.py
Read physicsnemo/datapipes/<subpackage>/__init__.py

# 4c. Base classes for custom data
#     See TAXONOMY.md § Data format → how to find a datapipe for the
#     full file paths + confirmation steps. Commands below are quick
#     reference.
Grep -n "^class " physicsnemo/datapipes/readers/base.py
Grep -n "^class " physicsnemo/datapipes/datapipe.py
Grep -n "^class " physicsnemo/datapipes/transforms/base.py

For format-specific discovery:

Grep -l "<format name, e.g. HDF5, Zarr, VTK>" physicsnemo/datapipes/ --type py

5. List currently-exported core utilities

# 5a. For a known module (distributed, utils, metrics, mesh, diffusion, etc.)
Read physicsnemo/<module>/__init__.py

# 5b. If the init is thin, list the files and sample headers
Glob physicsnemo/<module>/*.py
Grep -n "^(class|def) " physicsnemo/<module>/<file>.py --head_limit 20

For submodules (e.g. utils/logging/, utils/profiling/, metrics/climate/):

Glob physicsnemo/<module>/*/__init__.py
Read physicsnemo/<module>/<submodule>/__init__.py

6. Find documentation pages

# 6a. Top-level doc indexes
Read docs/index.rst
Read docs/api_index.rst
Read docs/examples_index.rst

# 6b. Domain example indexes
Glob docs/examples_*.rst
Read docs/examples_<domain>.rst

# 6c. API doc for a specific module
Glob docs/api/**/*.rst
Read docs/api/<path>.rst

# 6d. Broad search
Grep -l "<concept>" docs/ --glob "*.rst"

7. Confirm a specific class / function exists

# 7a. Search by class name across physicsnemo
Grep -n "^class <ClassName>" physicsnemo/ --type py

# 7b. Search by function name
Grep -n "^def <func_name>" physicsnemo/ --type py

# 7c. If not found where expected — check compat layer for renames
Read physicsnemo/compat/__init__.py

If a name isn't found anywhere, it may have been renamed. Do not emit it.


8. Check scale / distribution patterns used in an example

# Does this example use DDP, FSDP, domain parallelism?
Grep -n "DistributedManager\|FSDP\|ShardTensor\|torch.distributed" examples/<domain>/<example>/ -l
Grep -n "DistributedManager\|FSDP\|ShardTensor\|torch.distributed" examples/<domain>/<example>/ --type py

9. Decide between similar examples

When the user's description matches multiple examples, compare by:

# 9a. README purpose statements (first 20 lines)
Read examples/<domain>/<cand_a>/README.md   # limit 20
Read examples/<domain>/<cand_b>/README.md   # limit 20

# 9b. Data format used (training script imports + file globs)
Grep -n "h5py\|zarr\|xarray\|pyvista\|tfrecord\|numpy.load" examples/<domain>/<cand>/ --type py
Glob examples/<domain>/<cand>/**/*.yaml      # Hydra configs often hint at scale + data

Pick the example whose README purpose statement and data format match the user's situation most closely.


If the user's phrasing doesn't map to any taxonomy entry:

Grep -l "<user keyword>" examples/ --type md
Grep -l "<user keyword>" physicsnemo/ --type py
Grep -l "<user keyword>" docs/ --glob "*.rst"

11. Check shared datapipe across examples

See TAXONOMY.md § Cross-example reuse patterns for the rationale and known reuse cases (Darcy2D, ERA5, VTK). The recipe below is the mechanical step: grep the datapipe class across examples/ and surface confirmed reuse in the output.

# 11a. Which examples import a given datapipe class?
Grep -rn "<DatapipeClass>" examples/ --type py -l

# 11b. Which models do those examples pair the datapipe with?
#      Run for each example surfaced by 11a.
Grep -n "from physicsnemo.models" examples/<domain>/<example>/ --type py

Use the result to annotate the "Datapipe(s) for your data format" section with "Reused by: <examples>" and to pick reference examples that span ≥2 model families on the same data.


Output discipline

Every pointer you emit must be traceable to a tool result in the current turn. If you cannot show where you just read it, don't emit it. This is how the skill stays honest as the repo evolves.

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Security

What our scanner noticed· Medium risk

  • Large base64-encoded blobs

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
NVIDIA
Publisher
NVIDIA (Official)
Source
NVIDIA/skills · skills/physicsnemo-discover · commit fce3cca
Licence
Apache License 2.0 (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE-APACHE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by NVIDIA.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download physicsnemo-discover.zip