[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-nvidia-earth2studio-create-diagnostic":3,"mdc--1ii6u2-key":31,"related-repo-nvidia-earth2studio-create-diagnostic":2645,"related-org-nvidia-earth2studio-create-diagnostic":2749},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":20,"repoUrl":21,"updatedAt":22,"license":23,"forks":24,"topics":25,"repo":26,"sourceUrl":29,"mdContent":30},"earth2studio-create-diagnostic","create Earth2Studio diagnostic model wrappers","Create Earth2Studio diagnostic model wrappers for single-step data transformations, including simple derived diagnostics, packaged AutoModel diagnostics, and generative or diffusion diagnostics. Do NOT use for prognostic time-stepping models, data sources, or installation.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},"nvidia","NVIDIA","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fnvidia.png",[12,16,19],{"name":13,"slug":14,"type":15},"Machine Learning","machine-learning","tag",{"name":17,"slug":18,"type":15},"Data Analysis","data-analysis",{"name":9,"slug":8,"type":15},2473,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fskills","2026-07-14T05:26:41.547296","Apache-2.0",281,[],{"repoUrl":21,"stars":20,"forks":24,"topics":27,"description":28},[],"AI agent skills published by NVIDIA","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fearth2studio-create-diagnostic","---\nname: earth2studio-create-diagnostic\nversion: 0.16.0\nlicense: Apache-2.0\nmetadata:\n  author: NVIDIA Earth-2 Team \u003Cagent-skills@nvidia.com>\n  tags: [earth2studio, diagnostic-model, python]\ndescription: >\n  Create Earth2Studio diagnostic model wrappers for single-step data\n  transformations, including simple derived diagnostics, packaged AutoModel\n  diagnostics, and generative or diffusion diagnostics. Do NOT use for\n  prognostic time-stepping models, data sources, or installation.\nargument-hint: URL or local path to reference inference script (optional)\n---\n\n## Quick Start Checklist\n\nDo these steps in order. Do not skip ahead. Before editing, read this\nSKILL.md and load the relevant reference files for the model type. After\nimplementation, run the focused pytest command before saying tests pass. If\ntests cannot run, report the exact command and failure instead of claiming\nsuccess.\n\n- [ ] Read this SKILL.md completely first\n- [ ] Get the reference script, repo, paper, or model documentation (Step 0)\n- [ ] Classify the diagnostic as simple, AutoModel, or generative (Step 1)\n- [ ] Propose dependency extras before editing dependency files (Step 1)\n- [ ] Create `earth2studio\u002Fmodels\u002Fdx\u002F\u003Cname>.py` with diagnostic-only APIs\n- [ ] Create `test\u002Fmodels\u002Fdx\u002Ftest_\u003Cname>.py` with mock tests\n- [ ] Run: `uv run pytest test\u002Fmodels\u002Fdx\u002Ftest_\u003Cname>.py -m \"not package\" -v`\n- [ ] Add\u002Fupdate model extra, install docs, API docs, and changelog when required\n- [ ] Run: `make format && make lint && make license`\n\nCritical command rule: always use `uv run` for Python commands:\n\n- Use `uv run pytest ...` and `uv run python ...`\n- Do not use bare `pytest` or `python` in repo workflows\n\nIf the generated model is wrong, do not keep retrying the same fix. Follow\n[Self-Improvement](#self-improvement), patch this skill or its references, then\ncontinue with the corrected workflow.\n\n## Purpose\n\nImplement a diagnostic model wrapper connecting third-party or derived ML\ntransforms to Earth2Studio. Diagnostic models transform data at a single time\npoint: input fields in, output fields out, no forecast integration.\n\n## Prerequisites\n\n- Earth2Studio installed via `uv` with dev dependencies (`uv sync --all-extras`)\n- Python 3.10+ environment\n- Reference inference script, repo, paper, or model documentation\n- Checkpoint source and license information for packaged models\n\n## Limitations\n\n- Handles single-step transformations only\n- Does not support time-stepping forecast models; use `earth2studio-create-prognostic`\n- Real package tests can require network access to NGC, HuggingFace, S3, or other registries\n- Generative validation can require GPU and fixed seeds for meaningful comparison\n\n## Diagnostic Model Types\n\n| Type | Inheritance | Dependency extra | Example |\n|------|-------------|------------------|---------|\n| Simple derived diagnostic | `torch.nn.Module` only | Usually none | `Identity`, wind speed |\n| Packaged AutoModel diagnostic | `torch.nn.Module, AutoModelMixin` | Required, even if empty | `PrecipitationAFNO` |\n| Generative diagnostic | `torch.nn.Module, AutoModelMixin` | Required, even if empty | `CorrDiff` |\n\n## Workspace\n\n| Context | Location |\n|---------|----------|\n| Harbor eval | Write to `\u002Fworkspace\u002Foutput\u002Fearth2studio\u002Fmodels\u002Fdx\u002F...` |\n| Harbor + `--copy-repo` | Full checkout at `\u002Fworkspace\u002Frepo` |\n| Local clone | Directory with `pyproject.toml` |\n\nNever read `evals\u002Ftargets\u002F`; those files are grader references only.\n\n### Reference Files\n\nLoad these files on demand during the matching workflow:\n\n| File | Content | Load at |\n|------|---------|---------|\n| `references\u002Fskeleton-template.py` | Full diagnostic skeletons for simple, AutoModel, and generative wrappers | Steps 3-6 |\n| `references\u002Fmethod-templates.py` | Focused coordinate, loading, forward, and device method snippets | Steps 4-6 |\n| `references\u002Ftesting-guide.py` | Mock, package, exception, sample, and seed test patterns | Step 7 |\n| `references\u002Fvalidation-guide.md` | Reference comparison, plots, PR hygiene, and review follow-up | Steps 10-11 |\n| `references\u002Fpr-body-template.md` | PR body template | Step 11 |\n| `references\u002Fpr-comment-template.md` | Validation comment template | Step 11 |\n\n## Instructions\n\n### Step 0 - Get Reference Material\n\nIf `$ARGUMENTS` provides a URL or local path, use it. Otherwise ask:\n\n> Please provide a reference inference script, repository, paper, or model documentation.\n\nCapture the reference model's input variables, output variables, tensor shapes,\nnormalization, grid, checkpoint source, dependency requirements, and license.\n\n### Step 1 - Analyze Type and Propose Dependencies\n\nClassify the requested diagnostic before editing files:\n\n| If the model... | Then use... |\n|-----------------|-------------|\n| Computes a derived quantity with no checkpoint | Simple diagnostic |\n| Loads weights from `Package` or an external checkpoint | AutoModel diagnostic |\n| Produces multiple samples, diffusion outputs, VAE samples, or stochastic super-resolution | Generative diagnostic |\n\nDependency policy:\n\n- Simple derived diagnostics usually do not need a `pyproject.toml` extra.\n- AutoModel and generative diagnostics must have a named optional dependency extra, even if the list is empty.\n- Add the extra alphabetically under `[project.optional-dependencies]` and include it in the `all` aggregate.\n- Use the model-extra name in `OptionalDependencyFailure(\"model-extra\")` and `@check_optional_dependencies()`.\n\nPresent the proposed dependency extra and ask the user to approve before editing\n`pyproject.toml`:\n\n```toml\nmodel-name = [\"package1>=version\", \"package2\"]\n# or, when the packaged diagnostic needs no extra runtime packages:\nmodel-name = []\n```\n\n### Step 2 - Add Dependencies\n\nAfter approval, edit `pyproject.toml`:\n\n- Add the extra alphabetically.\n- Update the `all` aggregate.\n- Prefer minimum supported versions from the reference package documentation.\n- Do not add broad unpinned Git dependencies unless the reference model requires them and the user approves.\n\n### Step 3 - Create Model File\n\nFile: `earth2studio\u002Fmodels\u002Fdx\u002F\u003Clowercase>.py`\n\nUse the repo-standard SPDX\u002Flicense header shown in existing model files.\n\nSimple diagnostic imports commonly include:\n\n```python\nfrom collections import OrderedDict\nimport numpy as np\nimport torch\nfrom earth2studio.models.batch import batch_coords, batch_func\nfrom earth2studio.utils import handshake_coords, handshake_dim\nfrom earth2studio.utils.type import CoordSystem\n```\n\nPackaged and generative diagnostics commonly also include:\n\n```python\nfrom earth2studio.models.auto import AutoModelMixin, Package\nfrom earth2studio.models.dx.base import DiagnosticModel\nfrom earth2studio.utils.imports import OptionalDependencyFailure, check_optional_dependencies\nfrom loguru import logger\n```\n\nCanonical method order:\n\n1. `__init__`\n2. `input_coords`\n3. `output_coords` decorated with `@batch_coords()`\n4. `__str__` if useful\n5. `load_default_package` for AutoModel\u002Fgenerative diagnostics\n6. `load_model` for AutoModel\u002Fgenerative diagnostics\n7. `to` only when non-PyTorch state must move devices\n8. Private\u002Fsupport methods\n9. `__call__` decorated with `@torch.inference_mode()` and `@batch_func()`\n\nAvoid shared base classes or broad abstractions unless the wrapper naturally has\nmultiple closely related variants where a small base class reduces duplication.\n\n### Step 4 - Implement Coordinates\n\nDiagnostic input coordinates usually use this public Earth2Studio order:\n\n1. `batch`: `np.empty(0)` and first in the `OrderedDict`\n2. `variable`: input variable names using Earth2Studio vocabulary names\n3. `lat`: public latitude convention north-to-south, usually `90` to `-90`\n4. `lon`: public longitude convention `0` to `360`, endpoint normally false\n\nNo diagnostic wrapper should expose `lead_time`. If a diagnostic needs validity\ntime metadata, document it as per-sample metadata in `coords[\"time\"]`; do not make\nit a tensor dimension unless an existing dx pattern requires it.\n\n`output_coords` must validate inputs with `handshake_dim` and `handshake_coords`.\nThen update output variables and, when needed, output lat\u002Flon resolution.\nGenerative diagnostics must add a `sample` dimension after `batch`.\n\n### Step 5 - Implement Forward Pass\n\nUse a single-step `__call__`; never create an iterator. Validate coordinates\nbefore model execution, then return `(output_tensor, output_coords)`.\n\n```python\n@torch.inference_mode()\n@batch_func()\ndef __call__(self, x: torch.Tensor, coords: CoordSystem) -> tuple[torch.Tensor, CoordSystem]:\n    output_coords = self.output_coords(coords)\n    x = (x - self.center) \u002F self.scale\n    out = self.core_model(x)\n    return out, output_coords\n```\n\nFor generative diagnostics, loop over the batch dimension and generate\n`number_of_samples` per input item. Use explicit seeds for reproducibility when\nthe reference implementation supports seeded sampling.\n\n### Step 6 - Implement Model Loading\n\nFor packaged diagnostics:\n\n- `load_default_package` should lock HuggingFace URLs to a commit (`hf:\u002F\u002Forg\u002Frepo@commit`) or NGC\u002FS3 versions to an immutable release.\n- `load_model` should call `package.resolve(...)`, load checkpoints on CPU first, set modules to `eval()`, and disable gradients where appropriate.\n- Use `weights_only=False` only when loading a pickled full PyTorch object is required.\n- Decorate optional model classes and `load_model` with `@check_optional_dependencies()`.\n- Use `loguru.logger` for useful loading messages; do not use `print()` inside `earth2studio\u002F`.\n\n### Step 7 - Write Tests\n\nFile: `test\u002Fmodels\u002Fdx\u002Ftest_\u003Cname>.py`\n\nRequired tests:\n\n| Function | Purpose |\n|----------|---------|\n| `test_\u003Cmodel>_call` | Forward pass with mock or simple model |\n| `test_\u003Cmodel>_exceptions` | Invalid coordinate order, values, or variables raise errors |\n| `test_\u003Cmodel>_package` | Real weights with `@pytest.mark.package` for AutoModel\u002Fgenerative diagnostics |\n\nGenerative diagnostics also require sample-count and deterministic-seed tests.\nUse `references\u002Ftesting-guide.py`. Create a `Phoo\u003CModelName>` dummy that matches\nthe real core model's interface and produces deterministic output.\n\nRun focused tests:\n\n```bash\nuv run pytest test\u002Fmodels\u002Fdx\u002Ftest_\u003Cname>.py -m \"not package\" -v\nuv run pytest test\u002Fmodels\u002Fdx\u002Ftest_\u003Cname>.py::test_\u003Cmodel>_package --package -v\n```\n\nDo not omit package tests for packaged models. If arbitrary random inputs are not\nphysically valid for the real checkpoint, build a stable model-appropriate input\nwhile still loading real weights and running a forward pass.\n\n### Step 8 - Register Model\n\nFor public models, update `earth2studio\u002Fmodels\u002Fdx\u002F__init__.py` alphabetically.\nSkip registration only when the user explicitly wants an internal or experimental\nfile that should not be exported.\n\n### Step 9 - Documentation\n\nFor public models:\n\n- Add to `docs\u002Fmodules\u002Fmodels_dx.rst` alphabetically so API docs include the generated page.\n- Add to `docs\u002Fuserguide\u002Fabout\u002Finstall.md` if a model extra exists. Include model notes plus both `pip install earth2studio[model-name]` and `uv add earth2studio --extra model-name` instructions.\n- Update `CHANGELOG.md` under `### Added`.\n\nFormat and lint:\n\n```bash\nmake format && make lint && make license\n```\n\n### Step 10 - Validation (if requested)\n\nFollow `references\u002Fvalidation-guide.md`. Create uncommitted vanilla,\nEarth2Studio, comparison, and sanity-check scripts. Do not commit generated\noutputs, checkpoints, images, or local validation scripts.\n\nFor generative diagnostics, fix seeds and compare matching samples or report\nstatistical\u002Ftolerance-based agreement when exact equality is impossible.\nAsk the user to visually inspect plots before proceeding.\n\n### Step 11 - PR (if requested)\n\nFollow `references\u002Fvalidation-guide.md` and use:\n\n- `references\u002Fpr-body-template.md`\n- `references\u002Fpr-comment-template.md`\n\nBefore creating the PR, verify dependency extras, `all`, install docs, API docs,\nchangelog, tests, and validation artifacts are consistent. Do not include machine\nnames, hostnames, absolute paths, cache paths, device inventory, or uploaded image\nlinks in PR text. Use plot placeholders for manual image upload.\n\n## Examples\n\n### Simple Diagnostic\n\n```text\nUser: Create a diagnostic that computes wind speed from u10m and v10m.\nAgent: Reads SKILL.md, classifies as simple, creates windspeed.py with only\n       torch.nn.Module, writes call and exception tests, runs focused pytest.\n```\n\n### AutoModel Diagnostic\n\n```text\nUser: Add a precipitation estimator from this reference script.\nAgent: Reads SKILL.md and references, proposes dependency extra, creates a\n       torch.nn.Module + AutoModelMixin wrapper, writes mock\u002Fpackage tests,\n       updates docs\u002Fchangelog\u002Fdependencies, and runs validation commands.\n```\n\n### Generative Diagnostic\n\n```text\nUser: Wrap this diffusion super-resolution model.\nAgent: Classifies as generative, adds sample output coordinates, supports seed\n       handling, writes sample and deterministic-seed tests, and prepares seeded\n       validation comparisons.\n```\n\n## Troubleshooting\n\n| Error | Solution |\n|-------|----------|\n| `OptionalDependencyFailure` | Install with `uv sync --extra \u003Cmodel-extra>` or fix the extra name |\n| Coordinate handshake fails | Check `OrderedDict` order and `handshake_dim` indices |\n| Wrong output shape | Verify `output_coords` lengths match returned tensor shape |\n| `ModuleNotFoundError: pytest` | Use `uv run pytest`, not bare `pytest` |\n| Package test fails on random input | Use a stable physically plausible input while still loading real weights |\n\n## Reminders\n\nDo:\n\n- Use `uv run python` and `uv run pytest` for all Python commands.\n- Use `@batch_coords()` on `output_coords`.\n- Use `@torch.inference_mode()` and `@batch_func()` on `__call__`.\n- Keep `batch` as the first coordinate with `np.empty(0)` in `input_coords`.\n- Validate coordinates with `handshake_dim()` and `handshake_coords()`.\n- Add `sample` in generative `output_coords`.\n- Include the repo-standard SPDX\u002Flicense header in every Python file.\n- Use `loguru.logger`, never `print()`, inside `earth2studio\u002F`.\n\nDo not:\n\n- Inherit from `PrognosticMixin`.\n- Include `lead_time` coordinates.\n- Create `create_iterator`.\n- Create general base classes for a single wrapper without a clear multi-variant need.\n- Commit API keys, credentials, validation scripts, plots, or generated outputs.\n- Read from `evals\u002Ftargets\u002F`.\n\n## Self-Improvement\n\nIf this skill produces incorrect outputs, update it before continuing:\n\n1. Identify the issue in the generated code or workflow.\n2. Edit `SKILL.md` or the relevant file in `references\u002F` to fix the guidance.\n3. Run focused validation for the changed skill files.\n4. Commit the skill fix separately when working in a branch that expects commits.\n5. Continue the model implementation with the corrected workflow.\n",{"data":32,"body":41},{"name":4,"version":33,"license":23,"metadata":34,"description":6,"argument-hint":40},"0.16.0",{"author":35,"tags":36},"NVIDIA Earth-2 Team \u003Cagent-skills@nvidia.com>",[37,38,39],"earth2studio","diagnostic-model","python","URL or local path to reference inference script (optional)",{"type":42,"children":43},"root",[44,53,59,178,191,233,247,253,258,264,303,309,338,344,477,483,568,581,588,593,751,757,763,776,785,790,796,801,869,874,935,947,987,993,1004,1033,1039,1050,1055,1060,1119,1124,1163,1168,1278,1283,1289,1294,1384,1405,1444,1450,1469,1533,1546,1552,1557,1661,1667,1676,1681,1760,1780,1785,1942,1947,1953,1966,1972,1977,2040,2045,2093,2099,2111,2116,2122,2133,2152,2164,2170,2176,2186,2192,2201,2207,2216,2222,2358,2364,2369,2520,2525,2585,2590,2595,2639],{"type":45,"tag":46,"props":47,"children":49},"element","h2",{"id":48},"quick-start-checklist",[50],{"type":51,"value":52},"text","Quick Start Checklist",{"type":45,"tag":54,"props":55,"children":56},"p",{},[57],{"type":51,"value":58},"Do these steps in order. Do not skip ahead. Before editing, read this\nSKILL.md and load the relevant reference files for the model type. After\nimplementation, run the focused pytest command before saying tests pass. If\ntests cannot run, report the exact command and failure instead of claiming\nsuccess.",{"type":45,"tag":60,"props":61,"children":64},"ul",{"className":62},[63],"contains-task-list",[65,79,88,97,106,124,140,155,164],{"type":45,"tag":66,"props":67,"children":70},"li",{"className":68},[69],"task-list-item",[71,77],{"type":45,"tag":72,"props":73,"children":76},"input",{"disabled":74,"type":75},true,"checkbox",[],{"type":51,"value":78}," Read this SKILL.md completely first",{"type":45,"tag":66,"props":80,"children":82},{"className":81},[69],[83,86],{"type":45,"tag":72,"props":84,"children":85},{"disabled":74,"type":75},[],{"type":51,"value":87}," Get the reference script, repo, paper, or model documentation (Step 0)",{"type":45,"tag":66,"props":89,"children":91},{"className":90},[69],[92,95],{"type":45,"tag":72,"props":93,"children":94},{"disabled":74,"type":75},[],{"type":51,"value":96}," Classify the diagnostic as simple, AutoModel, or generative (Step 1)",{"type":45,"tag":66,"props":98,"children":100},{"className":99},[69],[101,104],{"type":45,"tag":72,"props":102,"children":103},{"disabled":74,"type":75},[],{"type":51,"value":105}," Propose dependency extras before editing dependency files (Step 1)",{"type":45,"tag":66,"props":107,"children":109},{"className":108},[69],[110,113,115,122],{"type":45,"tag":72,"props":111,"children":112},{"disabled":74,"type":75},[],{"type":51,"value":114}," Create ",{"type":45,"tag":116,"props":117,"children":119},"code",{"className":118},[],[120],{"type":51,"value":121},"earth2studio\u002Fmodels\u002Fdx\u002F\u003Cname>.py",{"type":51,"value":123}," with diagnostic-only APIs",{"type":45,"tag":66,"props":125,"children":127},{"className":126},[69],[128,131,132,138],{"type":45,"tag":72,"props":129,"children":130},{"disabled":74,"type":75},[],{"type":51,"value":114},{"type":45,"tag":116,"props":133,"children":135},{"className":134},[],[136],{"type":51,"value":137},"test\u002Fmodels\u002Fdx\u002Ftest_\u003Cname>.py",{"type":51,"value":139}," with mock tests",{"type":45,"tag":66,"props":141,"children":143},{"className":142},[69],[144,147,149],{"type":45,"tag":72,"props":145,"children":146},{"disabled":74,"type":75},[],{"type":51,"value":148}," Run: ",{"type":45,"tag":116,"props":150,"children":152},{"className":151},[],[153],{"type":51,"value":154},"uv run pytest test\u002Fmodels\u002Fdx\u002Ftest_\u003Cname>.py -m \"not package\" -v",{"type":45,"tag":66,"props":156,"children":158},{"className":157},[69],[159,162],{"type":45,"tag":72,"props":160,"children":161},{"disabled":74,"type":75},[],{"type":51,"value":163}," Add\u002Fupdate model extra, install docs, API docs, and changelog when required",{"type":45,"tag":66,"props":165,"children":167},{"className":166},[69],[168,171,172],{"type":45,"tag":72,"props":169,"children":170},{"disabled":74,"type":75},[],{"type":51,"value":148},{"type":45,"tag":116,"props":173,"children":175},{"className":174},[],[176],{"type":51,"value":177},"make format && make lint && make license",{"type":45,"tag":54,"props":179,"children":180},{},[181,183,189],{"type":51,"value":182},"Critical command rule: always use ",{"type":45,"tag":116,"props":184,"children":186},{"className":185},[],[187],{"type":51,"value":188},"uv run",{"type":51,"value":190}," for Python commands:",{"type":45,"tag":60,"props":192,"children":193},{},[194,213],{"type":45,"tag":66,"props":195,"children":196},{},[197,199,205,207],{"type":51,"value":198},"Use ",{"type":45,"tag":116,"props":200,"children":202},{"className":201},[],[203],{"type":51,"value":204},"uv run pytest ...",{"type":51,"value":206}," and ",{"type":45,"tag":116,"props":208,"children":210},{"className":209},[],[211],{"type":51,"value":212},"uv run python ...",{"type":45,"tag":66,"props":214,"children":215},{},[216,218,224,226,231],{"type":51,"value":217},"Do not use bare ",{"type":45,"tag":116,"props":219,"children":221},{"className":220},[],[222],{"type":51,"value":223},"pytest",{"type":51,"value":225}," or ",{"type":45,"tag":116,"props":227,"children":229},{"className":228},[],[230],{"type":51,"value":39},{"type":51,"value":232}," in repo workflows",{"type":45,"tag":54,"props":234,"children":235},{},[236,238,245],{"type":51,"value":237},"If the generated model is wrong, do not keep retrying the same fix. Follow\n",{"type":45,"tag":239,"props":240,"children":242},"a",{"href":241},"#self-improvement",[243],{"type":51,"value":244},"Self-Improvement",{"type":51,"value":246},", patch this skill or its references, then\ncontinue with the corrected workflow.",{"type":45,"tag":46,"props":248,"children":250},{"id":249},"purpose",[251],{"type":51,"value":252},"Purpose",{"type":45,"tag":54,"props":254,"children":255},{},[256],{"type":51,"value":257},"Implement a diagnostic model wrapper connecting third-party or derived ML\ntransforms to Earth2Studio. Diagnostic models transform data at a single time\npoint: input fields in, output fields out, no forecast integration.",{"type":45,"tag":46,"props":259,"children":261},{"id":260},"prerequisites",[262],{"type":51,"value":263},"Prerequisites",{"type":45,"tag":60,"props":265,"children":266},{},[267,288,293,298],{"type":45,"tag":66,"props":268,"children":269},{},[270,272,278,280,286],{"type":51,"value":271},"Earth2Studio installed via ",{"type":45,"tag":116,"props":273,"children":275},{"className":274},[],[276],{"type":51,"value":277},"uv",{"type":51,"value":279}," with dev dependencies (",{"type":45,"tag":116,"props":281,"children":283},{"className":282},[],[284],{"type":51,"value":285},"uv sync --all-extras",{"type":51,"value":287},")",{"type":45,"tag":66,"props":289,"children":290},{},[291],{"type":51,"value":292},"Python 3.10+ environment",{"type":45,"tag":66,"props":294,"children":295},{},[296],{"type":51,"value":297},"Reference inference script, repo, paper, or model documentation",{"type":45,"tag":66,"props":299,"children":300},{},[301],{"type":51,"value":302},"Checkpoint source and license information for packaged models",{"type":45,"tag":46,"props":304,"children":306},{"id":305},"limitations",[307],{"type":51,"value":308},"Limitations",{"type":45,"tag":60,"props":310,"children":311},{},[312,317,328,333],{"type":45,"tag":66,"props":313,"children":314},{},[315],{"type":51,"value":316},"Handles single-step transformations only",{"type":45,"tag":66,"props":318,"children":319},{},[320,322],{"type":51,"value":321},"Does not support time-stepping forecast models; use ",{"type":45,"tag":116,"props":323,"children":325},{"className":324},[],[326],{"type":51,"value":327},"earth2studio-create-prognostic",{"type":45,"tag":66,"props":329,"children":330},{},[331],{"type":51,"value":332},"Real package tests can require network access to NGC, HuggingFace, S3, or other registries",{"type":45,"tag":66,"props":334,"children":335},{},[336],{"type":51,"value":337},"Generative validation can require GPU and fixed seeds for meaningful comparison",{"type":45,"tag":46,"props":339,"children":341},{"id":340},"diagnostic-model-types",[342],{"type":51,"value":343},"Diagnostic Model Types",{"type":45,"tag":345,"props":346,"children":347},"table",{},[348,377],{"type":45,"tag":349,"props":350,"children":351},"thead",{},[352],{"type":45,"tag":353,"props":354,"children":355},"tr",{},[356,362,367,372],{"type":45,"tag":357,"props":358,"children":359},"th",{},[360],{"type":51,"value":361},"Type",{"type":45,"tag":357,"props":363,"children":364},{},[365],{"type":51,"value":366},"Inheritance",{"type":45,"tag":357,"props":368,"children":369},{},[370],{"type":51,"value":371},"Dependency extra",{"type":45,"tag":357,"props":373,"children":374},{},[375],{"type":51,"value":376},"Example",{"type":45,"tag":378,"props":379,"children":380},"tbody",{},[381,417,448],{"type":45,"tag":353,"props":382,"children":383},{},[384,390,401,406],{"type":45,"tag":385,"props":386,"children":387},"td",{},[388],{"type":51,"value":389},"Simple derived diagnostic",{"type":45,"tag":385,"props":391,"children":392},{},[393,399],{"type":45,"tag":116,"props":394,"children":396},{"className":395},[],[397],{"type":51,"value":398},"torch.nn.Module",{"type":51,"value":400}," only",{"type":45,"tag":385,"props":402,"children":403},{},[404],{"type":51,"value":405},"Usually none",{"type":45,"tag":385,"props":407,"children":408},{},[409,415],{"type":45,"tag":116,"props":410,"children":412},{"className":411},[],[413],{"type":51,"value":414},"Identity",{"type":51,"value":416},", wind speed",{"type":45,"tag":353,"props":418,"children":419},{},[420,425,434,439],{"type":45,"tag":385,"props":421,"children":422},{},[423],{"type":51,"value":424},"Packaged AutoModel diagnostic",{"type":45,"tag":385,"props":426,"children":427},{},[428],{"type":45,"tag":116,"props":429,"children":431},{"className":430},[],[432],{"type":51,"value":433},"torch.nn.Module, AutoModelMixin",{"type":45,"tag":385,"props":435,"children":436},{},[437],{"type":51,"value":438},"Required, even if empty",{"type":45,"tag":385,"props":440,"children":441},{},[442],{"type":45,"tag":116,"props":443,"children":445},{"className":444},[],[446],{"type":51,"value":447},"PrecipitationAFNO",{"type":45,"tag":353,"props":449,"children":450},{},[451,456,464,468],{"type":45,"tag":385,"props":452,"children":453},{},[454],{"type":51,"value":455},"Generative diagnostic",{"type":45,"tag":385,"props":457,"children":458},{},[459],{"type":45,"tag":116,"props":460,"children":462},{"className":461},[],[463],{"type":51,"value":433},{"type":45,"tag":385,"props":465,"children":466},{},[467],{"type":51,"value":438},{"type":45,"tag":385,"props":469,"children":470},{},[471],{"type":45,"tag":116,"props":472,"children":474},{"className":473},[],[475],{"type":51,"value":476},"CorrDiff",{"type":45,"tag":46,"props":478,"children":480},{"id":479},"workspace",[481],{"type":51,"value":482},"Workspace",{"type":45,"tag":345,"props":484,"children":485},{},[486,502],{"type":45,"tag":349,"props":487,"children":488},{},[489],{"type":45,"tag":353,"props":490,"children":491},{},[492,497],{"type":45,"tag":357,"props":493,"children":494},{},[495],{"type":51,"value":496},"Context",{"type":45,"tag":357,"props":498,"children":499},{},[500],{"type":51,"value":501},"Location",{"type":45,"tag":378,"props":503,"children":504},{},[505,524,549],{"type":45,"tag":353,"props":506,"children":507},{},[508,513],{"type":45,"tag":385,"props":509,"children":510},{},[511],{"type":51,"value":512},"Harbor eval",{"type":45,"tag":385,"props":514,"children":515},{},[516,518],{"type":51,"value":517},"Write to ",{"type":45,"tag":116,"props":519,"children":521},{"className":520},[],[522],{"type":51,"value":523},"\u002Fworkspace\u002Foutput\u002Fearth2studio\u002Fmodels\u002Fdx\u002F...",{"type":45,"tag":353,"props":525,"children":526},{},[527,538],{"type":45,"tag":385,"props":528,"children":529},{},[530,532],{"type":51,"value":531},"Harbor + ",{"type":45,"tag":116,"props":533,"children":535},{"className":534},[],[536],{"type":51,"value":537},"--copy-repo",{"type":45,"tag":385,"props":539,"children":540},{},[541,543],{"type":51,"value":542},"Full checkout at ",{"type":45,"tag":116,"props":544,"children":546},{"className":545},[],[547],{"type":51,"value":548},"\u002Fworkspace\u002Frepo",{"type":45,"tag":353,"props":550,"children":551},{},[552,557],{"type":45,"tag":385,"props":553,"children":554},{},[555],{"type":51,"value":556},"Local clone",{"type":45,"tag":385,"props":558,"children":559},{},[560,562],{"type":51,"value":561},"Directory with ",{"type":45,"tag":116,"props":563,"children":565},{"className":564},[],[566],{"type":51,"value":567},"pyproject.toml",{"type":45,"tag":54,"props":569,"children":570},{},[571,573,579],{"type":51,"value":572},"Never read ",{"type":45,"tag":116,"props":574,"children":576},{"className":575},[],[577],{"type":51,"value":578},"evals\u002Ftargets\u002F",{"type":51,"value":580},"; those files are grader references only.",{"type":45,"tag":582,"props":583,"children":585},"h3",{"id":584},"reference-files",[586],{"type":51,"value":587},"Reference Files",{"type":45,"tag":54,"props":589,"children":590},{},[591],{"type":51,"value":592},"Load these files on demand during the matching workflow:",{"type":45,"tag":345,"props":594,"children":595},{},[596,617],{"type":45,"tag":349,"props":597,"children":598},{},[599],{"type":45,"tag":353,"props":600,"children":601},{},[602,607,612],{"type":45,"tag":357,"props":603,"children":604},{},[605],{"type":51,"value":606},"File",{"type":45,"tag":357,"props":608,"children":609},{},[610],{"type":51,"value":611},"Content",{"type":45,"tag":357,"props":613,"children":614},{},[615],{"type":51,"value":616},"Load at",{"type":45,"tag":378,"props":618,"children":619},{},[620,642,664,686,708,730],{"type":45,"tag":353,"props":621,"children":622},{},[623,632,637],{"type":45,"tag":385,"props":624,"children":625},{},[626],{"type":45,"tag":116,"props":627,"children":629},{"className":628},[],[630],{"type":51,"value":631},"references\u002Fskeleton-template.py",{"type":45,"tag":385,"props":633,"children":634},{},[635],{"type":51,"value":636},"Full diagnostic skeletons for simple, AutoModel, and generative wrappers",{"type":45,"tag":385,"props":638,"children":639},{},[640],{"type":51,"value":641},"Steps 3-6",{"type":45,"tag":353,"props":643,"children":644},{},[645,654,659],{"type":45,"tag":385,"props":646,"children":647},{},[648],{"type":45,"tag":116,"props":649,"children":651},{"className":650},[],[652],{"type":51,"value":653},"references\u002Fmethod-templates.py",{"type":45,"tag":385,"props":655,"children":656},{},[657],{"type":51,"value":658},"Focused coordinate, loading, forward, and device method snippets",{"type":45,"tag":385,"props":660,"children":661},{},[662],{"type":51,"value":663},"Steps 4-6",{"type":45,"tag":353,"props":665,"children":666},{},[667,676,681],{"type":45,"tag":385,"props":668,"children":669},{},[670],{"type":45,"tag":116,"props":671,"children":673},{"className":672},[],[674],{"type":51,"value":675},"references\u002Ftesting-guide.py",{"type":45,"tag":385,"props":677,"children":678},{},[679],{"type":51,"value":680},"Mock, package, exception, sample, and seed test patterns",{"type":45,"tag":385,"props":682,"children":683},{},[684],{"type":51,"value":685},"Step 7",{"type":45,"tag":353,"props":687,"children":688},{},[689,698,703],{"type":45,"tag":385,"props":690,"children":691},{},[692],{"type":45,"tag":116,"props":693,"children":695},{"className":694},[],[696],{"type":51,"value":697},"references\u002Fvalidation-guide.md",{"type":45,"tag":385,"props":699,"children":700},{},[701],{"type":51,"value":702},"Reference comparison, plots, PR hygiene, and review follow-up",{"type":45,"tag":385,"props":704,"children":705},{},[706],{"type":51,"value":707},"Steps 10-11",{"type":45,"tag":353,"props":709,"children":710},{},[711,720,725],{"type":45,"tag":385,"props":712,"children":713},{},[714],{"type":45,"tag":116,"props":715,"children":717},{"className":716},[],[718],{"type":51,"value":719},"references\u002Fpr-body-template.md",{"type":45,"tag":385,"props":721,"children":722},{},[723],{"type":51,"value":724},"PR body template",{"type":45,"tag":385,"props":726,"children":727},{},[728],{"type":51,"value":729},"Step 11",{"type":45,"tag":353,"props":731,"children":732},{},[733,742,747],{"type":45,"tag":385,"props":734,"children":735},{},[736],{"type":45,"tag":116,"props":737,"children":739},{"className":738},[],[740],{"type":51,"value":741},"references\u002Fpr-comment-template.md",{"type":45,"tag":385,"props":743,"children":744},{},[745],{"type":51,"value":746},"Validation comment template",{"type":45,"tag":385,"props":748,"children":749},{},[750],{"type":51,"value":729},{"type":45,"tag":46,"props":752,"children":754},{"id":753},"instructions",[755],{"type":51,"value":756},"Instructions",{"type":45,"tag":582,"props":758,"children":760},{"id":759},"step-0-get-reference-material",[761],{"type":51,"value":762},"Step 0 - Get Reference Material",{"type":45,"tag":54,"props":764,"children":765},{},[766,768,774],{"type":51,"value":767},"If ",{"type":45,"tag":116,"props":769,"children":771},{"className":770},[],[772],{"type":51,"value":773},"$ARGUMENTS",{"type":51,"value":775}," provides a URL or local path, use it. Otherwise ask:",{"type":45,"tag":777,"props":778,"children":779},"blockquote",{},[780],{"type":45,"tag":54,"props":781,"children":782},{},[783],{"type":51,"value":784},"Please provide a reference inference script, repository, paper, or model documentation.",{"type":45,"tag":54,"props":786,"children":787},{},[788],{"type":51,"value":789},"Capture the reference model's input variables, output variables, tensor shapes,\nnormalization, grid, checkpoint source, dependency requirements, and license.",{"type":45,"tag":582,"props":791,"children":793},{"id":792},"step-1-analyze-type-and-propose-dependencies",[794],{"type":51,"value":795},"Step 1 - Analyze Type and Propose Dependencies",{"type":45,"tag":54,"props":797,"children":798},{},[799],{"type":51,"value":800},"Classify the requested diagnostic before editing files:",{"type":45,"tag":345,"props":802,"children":803},{},[804,820],{"type":45,"tag":349,"props":805,"children":806},{},[807],{"type":45,"tag":353,"props":808,"children":809},{},[810,815],{"type":45,"tag":357,"props":811,"children":812},{},[813],{"type":51,"value":814},"If the model...",{"type":45,"tag":357,"props":816,"children":817},{},[818],{"type":51,"value":819},"Then use...",{"type":45,"tag":378,"props":821,"children":822},{},[823,836,857],{"type":45,"tag":353,"props":824,"children":825},{},[826,831],{"type":45,"tag":385,"props":827,"children":828},{},[829],{"type":51,"value":830},"Computes a derived quantity with no checkpoint",{"type":45,"tag":385,"props":832,"children":833},{},[834],{"type":51,"value":835},"Simple diagnostic",{"type":45,"tag":353,"props":837,"children":838},{},[839,852],{"type":45,"tag":385,"props":840,"children":841},{},[842,844,850],{"type":51,"value":843},"Loads weights from ",{"type":45,"tag":116,"props":845,"children":847},{"className":846},[],[848],{"type":51,"value":849},"Package",{"type":51,"value":851}," or an external checkpoint",{"type":45,"tag":385,"props":853,"children":854},{},[855],{"type":51,"value":856},"AutoModel diagnostic",{"type":45,"tag":353,"props":858,"children":859},{},[860,865],{"type":45,"tag":385,"props":861,"children":862},{},[863],{"type":51,"value":864},"Produces multiple samples, diffusion outputs, VAE samples, or stochastic super-resolution",{"type":45,"tag":385,"props":866,"children":867},{},[868],{"type":51,"value":455},{"type":45,"tag":54,"props":870,"children":871},{},[872],{"type":51,"value":873},"Dependency policy:",{"type":45,"tag":60,"props":875,"children":876},{},[877,889,894,915],{"type":45,"tag":66,"props":878,"children":879},{},[880,882,887],{"type":51,"value":881},"Simple derived diagnostics usually do not need a ",{"type":45,"tag":116,"props":883,"children":885},{"className":884},[],[886],{"type":51,"value":567},{"type":51,"value":888}," extra.",{"type":45,"tag":66,"props":890,"children":891},{},[892],{"type":51,"value":893},"AutoModel and generative diagnostics must have a named optional dependency extra, even if the list is empty.",{"type":45,"tag":66,"props":895,"children":896},{},[897,899,905,907,913],{"type":51,"value":898},"Add the extra alphabetically under ",{"type":45,"tag":116,"props":900,"children":902},{"className":901},[],[903],{"type":51,"value":904},"[project.optional-dependencies]",{"type":51,"value":906}," and include it in the ",{"type":45,"tag":116,"props":908,"children":910},{"className":909},[],[911],{"type":51,"value":912},"all",{"type":51,"value":914}," aggregate.",{"type":45,"tag":66,"props":916,"children":917},{},[918,920,926,927,933],{"type":51,"value":919},"Use the model-extra name in ",{"type":45,"tag":116,"props":921,"children":923},{"className":922},[],[924],{"type":51,"value":925},"OptionalDependencyFailure(\"model-extra\")",{"type":51,"value":206},{"type":45,"tag":116,"props":928,"children":930},{"className":929},[],[931],{"type":51,"value":932},"@check_optional_dependencies()",{"type":51,"value":934},".",{"type":45,"tag":54,"props":936,"children":937},{},[938,940,945],{"type":51,"value":939},"Present the proposed dependency extra and ask the user to approve before editing\n",{"type":45,"tag":116,"props":941,"children":943},{"className":942},[],[944],{"type":51,"value":567},{"type":51,"value":946},":",{"type":45,"tag":948,"props":949,"children":954},"pre",{"className":950,"code":951,"language":952,"meta":953,"style":953},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","model-name = [\"package1>=version\", \"package2\"]\n# or, when the packaged diagnostic needs no extra runtime packages:\nmodel-name = []\n","toml","",[955],{"type":45,"tag":116,"props":956,"children":957},{"__ignoreMap":953},[958,969,978],{"type":45,"tag":959,"props":960,"children":963},"span",{"class":961,"line":962},"line",1,[964],{"type":45,"tag":959,"props":965,"children":966},{},[967],{"type":51,"value":968},"model-name = [\"package1>=version\", \"package2\"]\n",{"type":45,"tag":959,"props":970,"children":972},{"class":961,"line":971},2,[973],{"type":45,"tag":959,"props":974,"children":975},{},[976],{"type":51,"value":977},"# or, when the packaged diagnostic needs no extra runtime packages:\n",{"type":45,"tag":959,"props":979,"children":981},{"class":961,"line":980},3,[982],{"type":45,"tag":959,"props":983,"children":984},{},[985],{"type":51,"value":986},"model-name = []\n",{"type":45,"tag":582,"props":988,"children":990},{"id":989},"step-2-add-dependencies",[991],{"type":51,"value":992},"Step 2 - Add Dependencies",{"type":45,"tag":54,"props":994,"children":995},{},[996,998,1003],{"type":51,"value":997},"After approval, edit ",{"type":45,"tag":116,"props":999,"children":1001},{"className":1000},[],[1002],{"type":51,"value":567},{"type":51,"value":946},{"type":45,"tag":60,"props":1005,"children":1006},{},[1007,1012,1023,1028],{"type":45,"tag":66,"props":1008,"children":1009},{},[1010],{"type":51,"value":1011},"Add the extra alphabetically.",{"type":45,"tag":66,"props":1013,"children":1014},{},[1015,1017,1022],{"type":51,"value":1016},"Update the ",{"type":45,"tag":116,"props":1018,"children":1020},{"className":1019},[],[1021],{"type":51,"value":912},{"type":51,"value":914},{"type":45,"tag":66,"props":1024,"children":1025},{},[1026],{"type":51,"value":1027},"Prefer minimum supported versions from the reference package documentation.",{"type":45,"tag":66,"props":1029,"children":1030},{},[1031],{"type":51,"value":1032},"Do not add broad unpinned Git dependencies unless the reference model requires them and the user approves.",{"type":45,"tag":582,"props":1034,"children":1036},{"id":1035},"step-3-create-model-file",[1037],{"type":51,"value":1038},"Step 3 - Create Model File",{"type":45,"tag":54,"props":1040,"children":1041},{},[1042,1044],{"type":51,"value":1043},"File: ",{"type":45,"tag":116,"props":1045,"children":1047},{"className":1046},[],[1048],{"type":51,"value":1049},"earth2studio\u002Fmodels\u002Fdx\u002F\u003Clowercase>.py",{"type":45,"tag":54,"props":1051,"children":1052},{},[1053],{"type":51,"value":1054},"Use the repo-standard SPDX\u002Flicense header shown in existing model files.",{"type":45,"tag":54,"props":1056,"children":1057},{},[1058],{"type":51,"value":1059},"Simple diagnostic imports commonly include:",{"type":45,"tag":948,"props":1061,"children":1064},{"className":1062,"code":1063,"language":39,"meta":953,"style":953},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","from collections import OrderedDict\nimport numpy as np\nimport torch\nfrom earth2studio.models.batch import batch_coords, batch_func\nfrom earth2studio.utils import handshake_coords, handshake_dim\nfrom earth2studio.utils.type import CoordSystem\n",[1065],{"type":45,"tag":116,"props":1066,"children":1067},{"__ignoreMap":953},[1068,1076,1084,1092,1101,1110],{"type":45,"tag":959,"props":1069,"children":1070},{"class":961,"line":962},[1071],{"type":45,"tag":959,"props":1072,"children":1073},{},[1074],{"type":51,"value":1075},"from collections import OrderedDict\n",{"type":45,"tag":959,"props":1077,"children":1078},{"class":961,"line":971},[1079],{"type":45,"tag":959,"props":1080,"children":1081},{},[1082],{"type":51,"value":1083},"import numpy as np\n",{"type":45,"tag":959,"props":1085,"children":1086},{"class":961,"line":980},[1087],{"type":45,"tag":959,"props":1088,"children":1089},{},[1090],{"type":51,"value":1091},"import torch\n",{"type":45,"tag":959,"props":1093,"children":1095},{"class":961,"line":1094},4,[1096],{"type":45,"tag":959,"props":1097,"children":1098},{},[1099],{"type":51,"value":1100},"from earth2studio.models.batch import batch_coords, batch_func\n",{"type":45,"tag":959,"props":1102,"children":1104},{"class":961,"line":1103},5,[1105],{"type":45,"tag":959,"props":1106,"children":1107},{},[1108],{"type":51,"value":1109},"from earth2studio.utils import handshake_coords, handshake_dim\n",{"type":45,"tag":959,"props":1111,"children":1113},{"class":961,"line":1112},6,[1114],{"type":45,"tag":959,"props":1115,"children":1116},{},[1117],{"type":51,"value":1118},"from earth2studio.utils.type import CoordSystem\n",{"type":45,"tag":54,"props":1120,"children":1121},{},[1122],{"type":51,"value":1123},"Packaged and generative diagnostics commonly also include:",{"type":45,"tag":948,"props":1125,"children":1127},{"className":1062,"code":1126,"language":39,"meta":953,"style":953},"from earth2studio.models.auto import AutoModelMixin, Package\nfrom earth2studio.models.dx.base import DiagnosticModel\nfrom earth2studio.utils.imports import OptionalDependencyFailure, check_optional_dependencies\nfrom loguru import logger\n",[1128],{"type":45,"tag":116,"props":1129,"children":1130},{"__ignoreMap":953},[1131,1139,1147,1155],{"type":45,"tag":959,"props":1132,"children":1133},{"class":961,"line":962},[1134],{"type":45,"tag":959,"props":1135,"children":1136},{},[1137],{"type":51,"value":1138},"from earth2studio.models.auto import AutoModelMixin, Package\n",{"type":45,"tag":959,"props":1140,"children":1141},{"class":961,"line":971},[1142],{"type":45,"tag":959,"props":1143,"children":1144},{},[1145],{"type":51,"value":1146},"from earth2studio.models.dx.base import DiagnosticModel\n",{"type":45,"tag":959,"props":1148,"children":1149},{"class":961,"line":980},[1150],{"type":45,"tag":959,"props":1151,"children":1152},{},[1153],{"type":51,"value":1154},"from earth2studio.utils.imports import OptionalDependencyFailure, check_optional_dependencies\n",{"type":45,"tag":959,"props":1156,"children":1157},{"class":961,"line":1094},[1158],{"type":45,"tag":959,"props":1159,"children":1160},{},[1161],{"type":51,"value":1162},"from loguru import logger\n",{"type":45,"tag":54,"props":1164,"children":1165},{},[1166],{"type":51,"value":1167},"Canonical method order:",{"type":45,"tag":1169,"props":1170,"children":1171},"ol",{},[1172,1181,1190,1207,1218,1229,1239,1250,1255],{"type":45,"tag":66,"props":1173,"children":1174},{},[1175],{"type":45,"tag":116,"props":1176,"children":1178},{"className":1177},[],[1179],{"type":51,"value":1180},"__init__",{"type":45,"tag":66,"props":1182,"children":1183},{},[1184],{"type":45,"tag":116,"props":1185,"children":1187},{"className":1186},[],[1188],{"type":51,"value":1189},"input_coords",{"type":45,"tag":66,"props":1191,"children":1192},{},[1193,1199,1201],{"type":45,"tag":116,"props":1194,"children":1196},{"className":1195},[],[1197],{"type":51,"value":1198},"output_coords",{"type":51,"value":1200}," decorated with ",{"type":45,"tag":116,"props":1202,"children":1204},{"className":1203},[],[1205],{"type":51,"value":1206},"@batch_coords()",{"type":45,"tag":66,"props":1208,"children":1209},{},[1210,1216],{"type":45,"tag":116,"props":1211,"children":1213},{"className":1212},[],[1214],{"type":51,"value":1215},"__str__",{"type":51,"value":1217}," if useful",{"type":45,"tag":66,"props":1219,"children":1220},{},[1221,1227],{"type":45,"tag":116,"props":1222,"children":1224},{"className":1223},[],[1225],{"type":51,"value":1226},"load_default_package",{"type":51,"value":1228}," for AutoModel\u002Fgenerative diagnostics",{"type":45,"tag":66,"props":1230,"children":1231},{},[1232,1238],{"type":45,"tag":116,"props":1233,"children":1235},{"className":1234},[],[1236],{"type":51,"value":1237},"load_model",{"type":51,"value":1228},{"type":45,"tag":66,"props":1240,"children":1241},{},[1242,1248],{"type":45,"tag":116,"props":1243,"children":1245},{"className":1244},[],[1246],{"type":51,"value":1247},"to",{"type":51,"value":1249}," only when non-PyTorch state must move devices",{"type":45,"tag":66,"props":1251,"children":1252},{},[1253],{"type":51,"value":1254},"Private\u002Fsupport methods",{"type":45,"tag":66,"props":1256,"children":1257},{},[1258,1264,1265,1271,1272],{"type":45,"tag":116,"props":1259,"children":1261},{"className":1260},[],[1262],{"type":51,"value":1263},"__call__",{"type":51,"value":1200},{"type":45,"tag":116,"props":1266,"children":1268},{"className":1267},[],[1269],{"type":51,"value":1270},"@torch.inference_mode()",{"type":51,"value":206},{"type":45,"tag":116,"props":1273,"children":1275},{"className":1274},[],[1276],{"type":51,"value":1277},"@batch_func()",{"type":45,"tag":54,"props":1279,"children":1280},{},[1281],{"type":51,"value":1282},"Avoid shared base classes or broad abstractions unless the wrapper naturally has\nmultiple closely related variants where a small base class reduces duplication.",{"type":45,"tag":582,"props":1284,"children":1286},{"id":1285},"step-4-implement-coordinates",[1287],{"type":51,"value":1288},"Step 4 - Implement Coordinates",{"type":45,"tag":54,"props":1290,"children":1291},{},[1292],{"type":51,"value":1293},"Diagnostic input coordinates usually use this public Earth2Studio order:",{"type":45,"tag":1169,"props":1295,"children":1296},{},[1297,1322,1333,1358],{"type":45,"tag":66,"props":1298,"children":1299},{},[1300,1306,1308,1314,1316],{"type":45,"tag":116,"props":1301,"children":1303},{"className":1302},[],[1304],{"type":51,"value":1305},"batch",{"type":51,"value":1307},": ",{"type":45,"tag":116,"props":1309,"children":1311},{"className":1310},[],[1312],{"type":51,"value":1313},"np.empty(0)",{"type":51,"value":1315}," and first in the ",{"type":45,"tag":116,"props":1317,"children":1319},{"className":1318},[],[1320],{"type":51,"value":1321},"OrderedDict",{"type":45,"tag":66,"props":1323,"children":1324},{},[1325,1331],{"type":45,"tag":116,"props":1326,"children":1328},{"className":1327},[],[1329],{"type":51,"value":1330},"variable",{"type":51,"value":1332},": input variable names using Earth2Studio vocabulary names",{"type":45,"tag":66,"props":1334,"children":1335},{},[1336,1342,1344,1350,1352],{"type":45,"tag":116,"props":1337,"children":1339},{"className":1338},[],[1340],{"type":51,"value":1341},"lat",{"type":51,"value":1343},": public latitude convention north-to-south, usually ",{"type":45,"tag":116,"props":1345,"children":1347},{"className":1346},[],[1348],{"type":51,"value":1349},"90",{"type":51,"value":1351}," to ",{"type":45,"tag":116,"props":1353,"children":1355},{"className":1354},[],[1356],{"type":51,"value":1357},"-90",{"type":45,"tag":66,"props":1359,"children":1360},{},[1361,1367,1369,1375,1376,1382],{"type":45,"tag":116,"props":1362,"children":1364},{"className":1363},[],[1365],{"type":51,"value":1366},"lon",{"type":51,"value":1368},": public longitude convention ",{"type":45,"tag":116,"props":1370,"children":1372},{"className":1371},[],[1373],{"type":51,"value":1374},"0",{"type":51,"value":1351},{"type":45,"tag":116,"props":1377,"children":1379},{"className":1378},[],[1380],{"type":51,"value":1381},"360",{"type":51,"value":1383},", endpoint normally false",{"type":45,"tag":54,"props":1385,"children":1386},{},[1387,1389,1395,1397,1403],{"type":51,"value":1388},"No diagnostic wrapper should expose ",{"type":45,"tag":116,"props":1390,"children":1392},{"className":1391},[],[1393],{"type":51,"value":1394},"lead_time",{"type":51,"value":1396},". If a diagnostic needs validity\ntime metadata, document it as per-sample metadata in ",{"type":45,"tag":116,"props":1398,"children":1400},{"className":1399},[],[1401],{"type":51,"value":1402},"coords[\"time\"]",{"type":51,"value":1404},"; do not make\nit a tensor dimension unless an existing dx pattern requires it.",{"type":45,"tag":54,"props":1406,"children":1407},{},[1408,1413,1415,1421,1422,1428,1430,1436,1438,1443],{"type":45,"tag":116,"props":1409,"children":1411},{"className":1410},[],[1412],{"type":51,"value":1198},{"type":51,"value":1414}," must validate inputs with ",{"type":45,"tag":116,"props":1416,"children":1418},{"className":1417},[],[1419],{"type":51,"value":1420},"handshake_dim",{"type":51,"value":206},{"type":45,"tag":116,"props":1423,"children":1425},{"className":1424},[],[1426],{"type":51,"value":1427},"handshake_coords",{"type":51,"value":1429},".\nThen update output variables and, when needed, output lat\u002Flon resolution.\nGenerative diagnostics must add a ",{"type":45,"tag":116,"props":1431,"children":1433},{"className":1432},[],[1434],{"type":51,"value":1435},"sample",{"type":51,"value":1437}," dimension after ",{"type":45,"tag":116,"props":1439,"children":1441},{"className":1440},[],[1442],{"type":51,"value":1305},{"type":51,"value":934},{"type":45,"tag":582,"props":1445,"children":1447},{"id":1446},"step-5-implement-forward-pass",[1448],{"type":51,"value":1449},"Step 5 - Implement Forward Pass",{"type":45,"tag":54,"props":1451,"children":1452},{},[1453,1455,1460,1462,1468],{"type":51,"value":1454},"Use a single-step ",{"type":45,"tag":116,"props":1456,"children":1458},{"className":1457},[],[1459],{"type":51,"value":1263},{"type":51,"value":1461},"; never create an iterator. Validate coordinates\nbefore model execution, then return ",{"type":45,"tag":116,"props":1463,"children":1465},{"className":1464},[],[1466],{"type":51,"value":1467},"(output_tensor, output_coords)",{"type":51,"value":934},{"type":45,"tag":948,"props":1470,"children":1472},{"className":1062,"code":1471,"language":39,"meta":953,"style":953},"@torch.inference_mode()\n@batch_func()\ndef __call__(self, x: torch.Tensor, coords: CoordSystem) -> tuple[torch.Tensor, CoordSystem]:\n    output_coords = self.output_coords(coords)\n    x = (x - self.center) \u002F self.scale\n    out = self.core_model(x)\n    return out, output_coords\n",[1473],{"type":45,"tag":116,"props":1474,"children":1475},{"__ignoreMap":953},[1476,1484,1492,1500,1508,1516,1524],{"type":45,"tag":959,"props":1477,"children":1478},{"class":961,"line":962},[1479],{"type":45,"tag":959,"props":1480,"children":1481},{},[1482],{"type":51,"value":1483},"@torch.inference_mode()\n",{"type":45,"tag":959,"props":1485,"children":1486},{"class":961,"line":971},[1487],{"type":45,"tag":959,"props":1488,"children":1489},{},[1490],{"type":51,"value":1491},"@batch_func()\n",{"type":45,"tag":959,"props":1493,"children":1494},{"class":961,"line":980},[1495],{"type":45,"tag":959,"props":1496,"children":1497},{},[1498],{"type":51,"value":1499},"def __call__(self, x: torch.Tensor, coords: CoordSystem) -> tuple[torch.Tensor, CoordSystem]:\n",{"type":45,"tag":959,"props":1501,"children":1502},{"class":961,"line":1094},[1503],{"type":45,"tag":959,"props":1504,"children":1505},{},[1506],{"type":51,"value":1507},"    output_coords = self.output_coords(coords)\n",{"type":45,"tag":959,"props":1509,"children":1510},{"class":961,"line":1103},[1511],{"type":45,"tag":959,"props":1512,"children":1513},{},[1514],{"type":51,"value":1515},"    x = (x - self.center) \u002F self.scale\n",{"type":45,"tag":959,"props":1517,"children":1518},{"class":961,"line":1112},[1519],{"type":45,"tag":959,"props":1520,"children":1521},{},[1522],{"type":51,"value":1523},"    out = self.core_model(x)\n",{"type":45,"tag":959,"props":1525,"children":1527},{"class":961,"line":1526},7,[1528],{"type":45,"tag":959,"props":1529,"children":1530},{},[1531],{"type":51,"value":1532},"    return out, output_coords\n",{"type":45,"tag":54,"props":1534,"children":1535},{},[1536,1538,1544],{"type":51,"value":1537},"For generative diagnostics, loop over the batch dimension and generate\n",{"type":45,"tag":116,"props":1539,"children":1541},{"className":1540},[],[1542],{"type":51,"value":1543},"number_of_samples",{"type":51,"value":1545}," per input item. Use explicit seeds for reproducibility when\nthe reference implementation supports seeded sampling.",{"type":45,"tag":582,"props":1547,"children":1549},{"id":1548},"step-6-implement-model-loading",[1550],{"type":51,"value":1551},"Step 6 - Implement Model Loading",{"type":45,"tag":54,"props":1553,"children":1554},{},[1555],{"type":51,"value":1556},"For packaged diagnostics:",{"type":45,"tag":60,"props":1558,"children":1559},{},[1560,1578,1604,1616,1634],{"type":45,"tag":66,"props":1561,"children":1562},{},[1563,1568,1570,1576],{"type":45,"tag":116,"props":1564,"children":1566},{"className":1565},[],[1567],{"type":51,"value":1226},{"type":51,"value":1569}," should lock HuggingFace URLs to a commit (",{"type":45,"tag":116,"props":1571,"children":1573},{"className":1572},[],[1574],{"type":51,"value":1575},"hf:\u002F\u002Forg\u002Frepo@commit",{"type":51,"value":1577},") or NGC\u002FS3 versions to an immutable release.",{"type":45,"tag":66,"props":1579,"children":1580},{},[1581,1586,1588,1594,1596,1602],{"type":45,"tag":116,"props":1582,"children":1584},{"className":1583},[],[1585],{"type":51,"value":1237},{"type":51,"value":1587}," should call ",{"type":45,"tag":116,"props":1589,"children":1591},{"className":1590},[],[1592],{"type":51,"value":1593},"package.resolve(...)",{"type":51,"value":1595},", load checkpoints on CPU first, set modules to ",{"type":45,"tag":116,"props":1597,"children":1599},{"className":1598},[],[1600],{"type":51,"value":1601},"eval()",{"type":51,"value":1603},", and disable gradients where appropriate.",{"type":45,"tag":66,"props":1605,"children":1606},{},[1607,1608,1614],{"type":51,"value":198},{"type":45,"tag":116,"props":1609,"children":1611},{"className":1610},[],[1612],{"type":51,"value":1613},"weights_only=False",{"type":51,"value":1615}," only when loading a pickled full PyTorch object is required.",{"type":45,"tag":66,"props":1617,"children":1618},{},[1619,1621,1626,1628,1633],{"type":51,"value":1620},"Decorate optional model classes and ",{"type":45,"tag":116,"props":1622,"children":1624},{"className":1623},[],[1625],{"type":51,"value":1237},{"type":51,"value":1627}," with ",{"type":45,"tag":116,"props":1629,"children":1631},{"className":1630},[],[1632],{"type":51,"value":932},{"type":51,"value":934},{"type":45,"tag":66,"props":1635,"children":1636},{},[1637,1638,1644,1646,1652,1654,1660],{"type":51,"value":198},{"type":45,"tag":116,"props":1639,"children":1641},{"className":1640},[],[1642],{"type":51,"value":1643},"loguru.logger",{"type":51,"value":1645}," for useful loading messages; do not use ",{"type":45,"tag":116,"props":1647,"children":1649},{"className":1648},[],[1650],{"type":51,"value":1651},"print()",{"type":51,"value":1653}," inside ",{"type":45,"tag":116,"props":1655,"children":1657},{"className":1656},[],[1658],{"type":51,"value":1659},"earth2studio\u002F",{"type":51,"value":934},{"type":45,"tag":582,"props":1662,"children":1664},{"id":1663},"step-7-write-tests",[1665],{"type":51,"value":1666},"Step 7 - Write Tests",{"type":45,"tag":54,"props":1668,"children":1669},{},[1670,1671],{"type":51,"value":1043},{"type":45,"tag":116,"props":1672,"children":1674},{"className":1673},[],[1675],{"type":51,"value":137},{"type":45,"tag":54,"props":1677,"children":1678},{},[1679],{"type":51,"value":1680},"Required tests:",{"type":45,"tag":345,"props":1682,"children":1683},{},[1684,1699],{"type":45,"tag":349,"props":1685,"children":1686},{},[1687],{"type":45,"tag":353,"props":1688,"children":1689},{},[1690,1695],{"type":45,"tag":357,"props":1691,"children":1692},{},[1693],{"type":51,"value":1694},"Function",{"type":45,"tag":357,"props":1696,"children":1697},{},[1698],{"type":51,"value":252},{"type":45,"tag":378,"props":1700,"children":1701},{},[1702,1719,1736],{"type":45,"tag":353,"props":1703,"children":1704},{},[1705,1714],{"type":45,"tag":385,"props":1706,"children":1707},{},[1708],{"type":45,"tag":116,"props":1709,"children":1711},{"className":1710},[],[1712],{"type":51,"value":1713},"test_\u003Cmodel>_call",{"type":45,"tag":385,"props":1715,"children":1716},{},[1717],{"type":51,"value":1718},"Forward pass with mock or simple model",{"type":45,"tag":353,"props":1720,"children":1721},{},[1722,1731],{"type":45,"tag":385,"props":1723,"children":1724},{},[1725],{"type":45,"tag":116,"props":1726,"children":1728},{"className":1727},[],[1729],{"type":51,"value":1730},"test_\u003Cmodel>_exceptions",{"type":45,"tag":385,"props":1732,"children":1733},{},[1734],{"type":51,"value":1735},"Invalid coordinate order, values, or variables raise errors",{"type":45,"tag":353,"props":1737,"children":1738},{},[1739,1748],{"type":45,"tag":385,"props":1740,"children":1741},{},[1742],{"type":45,"tag":116,"props":1743,"children":1745},{"className":1744},[],[1746],{"type":51,"value":1747},"test_\u003Cmodel>_package",{"type":45,"tag":385,"props":1749,"children":1750},{},[1751,1753,1759],{"type":51,"value":1752},"Real weights with ",{"type":45,"tag":116,"props":1754,"children":1756},{"className":1755},[],[1757],{"type":51,"value":1758},"@pytest.mark.package",{"type":51,"value":1228},{"type":45,"tag":54,"props":1761,"children":1762},{},[1763,1765,1770,1772,1778],{"type":51,"value":1764},"Generative diagnostics also require sample-count and deterministic-seed tests.\nUse ",{"type":45,"tag":116,"props":1766,"children":1768},{"className":1767},[],[1769],{"type":51,"value":675},{"type":51,"value":1771},". Create a ",{"type":45,"tag":116,"props":1773,"children":1775},{"className":1774},[],[1776],{"type":51,"value":1777},"Phoo\u003CModelName>",{"type":51,"value":1779}," dummy that matches\nthe real core model's interface and produces deterministic output.",{"type":45,"tag":54,"props":1781,"children":1782},{},[1783],{"type":51,"value":1784},"Run focused tests:",{"type":45,"tag":948,"props":1786,"children":1790},{"className":1787,"code":1788,"language":1789,"meta":953,"style":953},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","uv run pytest test\u002Fmodels\u002Fdx\u002Ftest_\u003Cname>.py -m \"not package\" -v\nuv run pytest test\u002Fmodels\u002Fdx\u002Ftest_\u003Cname>.py::test_\u003Cmodel>_package --package -v\n","bash",[1791],{"type":45,"tag":116,"props":1792,"children":1793},{"__ignoreMap":953},[1794,1870],{"type":45,"tag":959,"props":1795,"children":1796},{"class":961,"line":962},[1797,1802,1808,1813,1818,1824,1829,1835,1840,1845,1850,1855,1860,1865],{"type":45,"tag":959,"props":1798,"children":1800},{"style":1799},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1801],{"type":51,"value":277},{"type":45,"tag":959,"props":1803,"children":1805},{"style":1804},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1806],{"type":51,"value":1807}," run",{"type":45,"tag":959,"props":1809,"children":1810},{"style":1804},[1811],{"type":51,"value":1812}," pytest",{"type":45,"tag":959,"props":1814,"children":1815},{"style":1804},[1816],{"type":51,"value":1817}," test\u002Fmodels\u002Fdx\u002Ftest_",{"type":45,"tag":959,"props":1819,"children":1821},{"style":1820},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1822],{"type":51,"value":1823},"\u003C",{"type":45,"tag":959,"props":1825,"children":1826},{"style":1804},[1827],{"type":51,"value":1828},"nam",{"type":45,"tag":959,"props":1830,"children":1832},{"style":1831},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1833],{"type":51,"value":1834},"e",{"type":45,"tag":959,"props":1836,"children":1837},{"style":1820},[1838],{"type":51,"value":1839},">",{"type":45,"tag":959,"props":1841,"children":1842},{"style":1804},[1843],{"type":51,"value":1844},".py",{"type":45,"tag":959,"props":1846,"children":1847},{"style":1804},[1848],{"type":51,"value":1849}," -m",{"type":45,"tag":959,"props":1851,"children":1852},{"style":1820},[1853],{"type":51,"value":1854}," \"",{"type":45,"tag":959,"props":1856,"children":1857},{"style":1804},[1858],{"type":51,"value":1859},"not package",{"type":45,"tag":959,"props":1861,"children":1862},{"style":1820},[1863],{"type":51,"value":1864},"\"",{"type":45,"tag":959,"props":1866,"children":1867},{"style":1804},[1868],{"type":51,"value":1869}," -v\n",{"type":45,"tag":959,"props":1871,"children":1872},{"class":961,"line":971},[1873,1877,1881,1885,1889,1893,1897,1901,1905,1910,1914,1919,1924,1928,1933,1938],{"type":45,"tag":959,"props":1874,"children":1875},{"style":1799},[1876],{"type":51,"value":277},{"type":45,"tag":959,"props":1878,"children":1879},{"style":1804},[1880],{"type":51,"value":1807},{"type":45,"tag":959,"props":1882,"children":1883},{"style":1804},[1884],{"type":51,"value":1812},{"type":45,"tag":959,"props":1886,"children":1887},{"style":1804},[1888],{"type":51,"value":1817},{"type":45,"tag":959,"props":1890,"children":1891},{"style":1820},[1892],{"type":51,"value":1823},{"type":45,"tag":959,"props":1894,"children":1895},{"style":1804},[1896],{"type":51,"value":1828},{"type":45,"tag":959,"props":1898,"children":1899},{"style":1831},[1900],{"type":51,"value":1834},{"type":45,"tag":959,"props":1902,"children":1903},{"style":1820},[1904],{"type":51,"value":1839},{"type":45,"tag":959,"props":1906,"children":1907},{"style":1804},[1908],{"type":51,"value":1909},".py::test_",{"type":45,"tag":959,"props":1911,"children":1912},{"style":1820},[1913],{"type":51,"value":1823},{"type":45,"tag":959,"props":1915,"children":1916},{"style":1804},[1917],{"type":51,"value":1918},"mode",{"type":45,"tag":959,"props":1920,"children":1921},{"style":1831},[1922],{"type":51,"value":1923},"l",{"type":45,"tag":959,"props":1925,"children":1926},{"style":1820},[1927],{"type":51,"value":1839},{"type":45,"tag":959,"props":1929,"children":1930},{"style":1804},[1931],{"type":51,"value":1932},"_package",{"type":45,"tag":959,"props":1934,"children":1935},{"style":1804},[1936],{"type":51,"value":1937}," --package",{"type":45,"tag":959,"props":1939,"children":1940},{"style":1804},[1941],{"type":51,"value":1869},{"type":45,"tag":54,"props":1943,"children":1944},{},[1945],{"type":51,"value":1946},"Do not omit package tests for packaged models. If arbitrary random inputs are not\nphysically valid for the real checkpoint, build a stable model-appropriate input\nwhile still loading real weights and running a forward pass.",{"type":45,"tag":582,"props":1948,"children":1950},{"id":1949},"step-8-register-model",[1951],{"type":51,"value":1952},"Step 8 - Register Model",{"type":45,"tag":54,"props":1954,"children":1955},{},[1956,1958,1964],{"type":51,"value":1957},"For public models, update ",{"type":45,"tag":116,"props":1959,"children":1961},{"className":1960},[],[1962],{"type":51,"value":1963},"earth2studio\u002Fmodels\u002Fdx\u002F__init__.py",{"type":51,"value":1965}," alphabetically.\nSkip registration only when the user explicitly wants an internal or experimental\nfile that should not be exported.",{"type":45,"tag":582,"props":1967,"children":1969},{"id":1968},"step-9-documentation",[1970],{"type":51,"value":1971},"Step 9 - Documentation",{"type":45,"tag":54,"props":1973,"children":1974},{},[1975],{"type":51,"value":1976},"For public models:",{"type":45,"tag":60,"props":1978,"children":1979},{},[1980,1993,2020],{"type":45,"tag":66,"props":1981,"children":1982},{},[1983,1985,1991],{"type":51,"value":1984},"Add to ",{"type":45,"tag":116,"props":1986,"children":1988},{"className":1987},[],[1989],{"type":51,"value":1990},"docs\u002Fmodules\u002Fmodels_dx.rst",{"type":51,"value":1992}," alphabetically so API docs include the generated page.",{"type":45,"tag":66,"props":1994,"children":1995},{},[1996,1997,2003,2005,2011,2012,2018],{"type":51,"value":1984},{"type":45,"tag":116,"props":1998,"children":2000},{"className":1999},[],[2001],{"type":51,"value":2002},"docs\u002Fuserguide\u002Fabout\u002Finstall.md",{"type":51,"value":2004}," if a model extra exists. Include model notes plus both ",{"type":45,"tag":116,"props":2006,"children":2008},{"className":2007},[],[2009],{"type":51,"value":2010},"pip install earth2studio[model-name]",{"type":51,"value":206},{"type":45,"tag":116,"props":2013,"children":2015},{"className":2014},[],[2016],{"type":51,"value":2017},"uv add earth2studio --extra model-name",{"type":51,"value":2019}," instructions.",{"type":45,"tag":66,"props":2021,"children":2022},{},[2023,2025,2031,2033,2039],{"type":51,"value":2024},"Update ",{"type":45,"tag":116,"props":2026,"children":2028},{"className":2027},[],[2029],{"type":51,"value":2030},"CHANGELOG.md",{"type":51,"value":2032}," under ",{"type":45,"tag":116,"props":2034,"children":2036},{"className":2035},[],[2037],{"type":51,"value":2038},"### Added",{"type":51,"value":934},{"type":45,"tag":54,"props":2041,"children":2042},{},[2043],{"type":51,"value":2044},"Format and lint:",{"type":45,"tag":948,"props":2046,"children":2048},{"className":1787,"code":2047,"language":1789,"meta":953,"style":953},"make format && make lint && make license\n",[2049],{"type":45,"tag":116,"props":2050,"children":2051},{"__ignoreMap":953},[2052],{"type":45,"tag":959,"props":2053,"children":2054},{"class":961,"line":962},[2055,2060,2065,2070,2075,2080,2084,2088],{"type":45,"tag":959,"props":2056,"children":2057},{"style":1799},[2058],{"type":51,"value":2059},"make",{"type":45,"tag":959,"props":2061,"children":2062},{"style":1804},[2063],{"type":51,"value":2064}," format",{"type":45,"tag":959,"props":2066,"children":2067},{"style":1820},[2068],{"type":51,"value":2069}," &&",{"type":45,"tag":959,"props":2071,"children":2072},{"style":1799},[2073],{"type":51,"value":2074}," make",{"type":45,"tag":959,"props":2076,"children":2077},{"style":1804},[2078],{"type":51,"value":2079}," lint",{"type":45,"tag":959,"props":2081,"children":2082},{"style":1820},[2083],{"type":51,"value":2069},{"type":45,"tag":959,"props":2085,"children":2086},{"style":1799},[2087],{"type":51,"value":2074},{"type":45,"tag":959,"props":2089,"children":2090},{"style":1804},[2091],{"type":51,"value":2092}," license\n",{"type":45,"tag":582,"props":2094,"children":2096},{"id":2095},"step-10-validation-if-requested",[2097],{"type":51,"value":2098},"Step 10 - Validation (if requested)",{"type":45,"tag":54,"props":2100,"children":2101},{},[2102,2104,2109],{"type":51,"value":2103},"Follow ",{"type":45,"tag":116,"props":2105,"children":2107},{"className":2106},[],[2108],{"type":51,"value":697},{"type":51,"value":2110},". Create uncommitted vanilla,\nEarth2Studio, comparison, and sanity-check scripts. Do not commit generated\noutputs, checkpoints, images, or local validation scripts.",{"type":45,"tag":54,"props":2112,"children":2113},{},[2114],{"type":51,"value":2115},"For generative diagnostics, fix seeds and compare matching samples or report\nstatistical\u002Ftolerance-based agreement when exact equality is impossible.\nAsk the user to visually inspect plots before proceeding.",{"type":45,"tag":582,"props":2117,"children":2119},{"id":2118},"step-11-pr-if-requested",[2120],{"type":51,"value":2121},"Step 11 - PR (if requested)",{"type":45,"tag":54,"props":2123,"children":2124},{},[2125,2126,2131],{"type":51,"value":2103},{"type":45,"tag":116,"props":2127,"children":2129},{"className":2128},[],[2130],{"type":51,"value":697},{"type":51,"value":2132}," and use:",{"type":45,"tag":60,"props":2134,"children":2135},{},[2136,2144],{"type":45,"tag":66,"props":2137,"children":2138},{},[2139],{"type":45,"tag":116,"props":2140,"children":2142},{"className":2141},[],[2143],{"type":51,"value":719},{"type":45,"tag":66,"props":2145,"children":2146},{},[2147],{"type":45,"tag":116,"props":2148,"children":2150},{"className":2149},[],[2151],{"type":51,"value":741},{"type":45,"tag":54,"props":2153,"children":2154},{},[2155,2157,2162],{"type":51,"value":2156},"Before creating the PR, verify dependency extras, ",{"type":45,"tag":116,"props":2158,"children":2160},{"className":2159},[],[2161],{"type":51,"value":912},{"type":51,"value":2163},", install docs, API docs,\nchangelog, tests, and validation artifacts are consistent. Do not include machine\nnames, hostnames, absolute paths, cache paths, device inventory, or uploaded image\nlinks in PR text. Use plot placeholders for manual image upload.",{"type":45,"tag":46,"props":2165,"children":2167},{"id":2166},"examples",[2168],{"type":51,"value":2169},"Examples",{"type":45,"tag":582,"props":2171,"children":2173},{"id":2172},"simple-diagnostic",[2174],{"type":51,"value":2175},"Simple Diagnostic",{"type":45,"tag":948,"props":2177,"children":2181},{"className":2178,"code":2180,"language":51,"meta":953},[2179],"language-text","User: Create a diagnostic that computes wind speed from u10m and v10m.\nAgent: Reads SKILL.md, classifies as simple, creates windspeed.py with only\n       torch.nn.Module, writes call and exception tests, runs focused pytest.\n",[2182],{"type":45,"tag":116,"props":2183,"children":2184},{"__ignoreMap":953},[2185],{"type":51,"value":2180},{"type":45,"tag":582,"props":2187,"children":2189},{"id":2188},"automodel-diagnostic",[2190],{"type":51,"value":2191},"AutoModel Diagnostic",{"type":45,"tag":948,"props":2193,"children":2196},{"className":2194,"code":2195,"language":51,"meta":953},[2179],"User: Add a precipitation estimator from this reference script.\nAgent: Reads SKILL.md and references, proposes dependency extra, creates a\n       torch.nn.Module + AutoModelMixin wrapper, writes mock\u002Fpackage tests,\n       updates docs\u002Fchangelog\u002Fdependencies, and runs validation commands.\n",[2197],{"type":45,"tag":116,"props":2198,"children":2199},{"__ignoreMap":953},[2200],{"type":51,"value":2195},{"type":45,"tag":582,"props":2202,"children":2204},{"id":2203},"generative-diagnostic",[2205],{"type":51,"value":2206},"Generative Diagnostic",{"type":45,"tag":948,"props":2208,"children":2211},{"className":2209,"code":2210,"language":51,"meta":953},[2179],"User: Wrap this diffusion super-resolution model.\nAgent: Classifies as generative, adds sample output coordinates, supports seed\n       handling, writes sample and deterministic-seed tests, and prepares seeded\n       validation comparisons.\n",[2212],{"type":45,"tag":116,"props":2213,"children":2214},{"__ignoreMap":953},[2215],{"type":51,"value":2210},{"type":45,"tag":46,"props":2217,"children":2219},{"id":2218},"troubleshooting",[2220],{"type":51,"value":2221},"Troubleshooting",{"type":45,"tag":345,"props":2223,"children":2224},{},[2225,2241],{"type":45,"tag":349,"props":2226,"children":2227},{},[2228],{"type":45,"tag":353,"props":2229,"children":2230},{},[2231,2236],{"type":45,"tag":357,"props":2232,"children":2233},{},[2234],{"type":51,"value":2235},"Error",{"type":45,"tag":357,"props":2237,"children":2238},{},[2239],{"type":51,"value":2240},"Solution",{"type":45,"tag":378,"props":2242,"children":2243},{},[2244,2269,2296,2316,2345],{"type":45,"tag":353,"props":2245,"children":2246},{},[2247,2256],{"type":45,"tag":385,"props":2248,"children":2249},{},[2250],{"type":45,"tag":116,"props":2251,"children":2253},{"className":2252},[],[2254],{"type":51,"value":2255},"OptionalDependencyFailure",{"type":45,"tag":385,"props":2257,"children":2258},{},[2259,2261,2267],{"type":51,"value":2260},"Install with ",{"type":45,"tag":116,"props":2262,"children":2264},{"className":2263},[],[2265],{"type":51,"value":2266},"uv sync --extra \u003Cmodel-extra>",{"type":51,"value":2268}," or fix the extra name",{"type":45,"tag":353,"props":2270,"children":2271},{},[2272,2277],{"type":45,"tag":385,"props":2273,"children":2274},{},[2275],{"type":51,"value":2276},"Coordinate handshake fails",{"type":45,"tag":385,"props":2278,"children":2279},{},[2280,2282,2287,2289,2294],{"type":51,"value":2281},"Check ",{"type":45,"tag":116,"props":2283,"children":2285},{"className":2284},[],[2286],{"type":51,"value":1321},{"type":51,"value":2288}," order and ",{"type":45,"tag":116,"props":2290,"children":2292},{"className":2291},[],[2293],{"type":51,"value":1420},{"type":51,"value":2295}," indices",{"type":45,"tag":353,"props":2297,"children":2298},{},[2299,2304],{"type":45,"tag":385,"props":2300,"children":2301},{},[2302],{"type":51,"value":2303},"Wrong output shape",{"type":45,"tag":385,"props":2305,"children":2306},{},[2307,2309,2314],{"type":51,"value":2308},"Verify ",{"type":45,"tag":116,"props":2310,"children":2312},{"className":2311},[],[2313],{"type":51,"value":1198},{"type":51,"value":2315}," lengths match returned tensor shape",{"type":45,"tag":353,"props":2317,"children":2318},{},[2319,2328],{"type":45,"tag":385,"props":2320,"children":2321},{},[2322],{"type":45,"tag":116,"props":2323,"children":2325},{"className":2324},[],[2326],{"type":51,"value":2327},"ModuleNotFoundError: pytest",{"type":45,"tag":385,"props":2329,"children":2330},{},[2331,2332,2338,2340],{"type":51,"value":198},{"type":45,"tag":116,"props":2333,"children":2335},{"className":2334},[],[2336],{"type":51,"value":2337},"uv run pytest",{"type":51,"value":2339},", not bare ",{"type":45,"tag":116,"props":2341,"children":2343},{"className":2342},[],[2344],{"type":51,"value":223},{"type":45,"tag":353,"props":2346,"children":2347},{},[2348,2353],{"type":45,"tag":385,"props":2349,"children":2350},{},[2351],{"type":51,"value":2352},"Package test fails on random input",{"type":45,"tag":385,"props":2354,"children":2355},{},[2356],{"type":51,"value":2357},"Use a stable physically plausible input while still loading real weights",{"type":45,"tag":46,"props":2359,"children":2361},{"id":2360},"reminders",[2362],{"type":51,"value":2363},"Reminders",{"type":45,"tag":54,"props":2365,"children":2366},{},[2367],{"type":51,"value":2368},"Do:",{"type":45,"tag":60,"props":2370,"children":2371},{},[2372,2390,2407,2429,2454,2473,2491,2496],{"type":45,"tag":66,"props":2373,"children":2374},{},[2375,2376,2382,2383,2388],{"type":51,"value":198},{"type":45,"tag":116,"props":2377,"children":2379},{"className":2378},[],[2380],{"type":51,"value":2381},"uv run python",{"type":51,"value":206},{"type":45,"tag":116,"props":2384,"children":2386},{"className":2385},[],[2387],{"type":51,"value":2337},{"type":51,"value":2389}," for all Python commands.",{"type":45,"tag":66,"props":2391,"children":2392},{},[2393,2394,2399,2401,2406],{"type":51,"value":198},{"type":45,"tag":116,"props":2395,"children":2397},{"className":2396},[],[2398],{"type":51,"value":1206},{"type":51,"value":2400}," on ",{"type":45,"tag":116,"props":2402,"children":2404},{"className":2403},[],[2405],{"type":51,"value":1198},{"type":51,"value":934},{"type":45,"tag":66,"props":2408,"children":2409},{},[2410,2411,2416,2417,2422,2423,2428],{"type":51,"value":198},{"type":45,"tag":116,"props":2412,"children":2414},{"className":2413},[],[2415],{"type":51,"value":1270},{"type":51,"value":206},{"type":45,"tag":116,"props":2418,"children":2420},{"className":2419},[],[2421],{"type":51,"value":1277},{"type":51,"value":2400},{"type":45,"tag":116,"props":2424,"children":2426},{"className":2425},[],[2427],{"type":51,"value":1263},{"type":51,"value":934},{"type":45,"tag":66,"props":2430,"children":2431},{},[2432,2434,2439,2441,2446,2448,2453],{"type":51,"value":2433},"Keep ",{"type":45,"tag":116,"props":2435,"children":2437},{"className":2436},[],[2438],{"type":51,"value":1305},{"type":51,"value":2440}," as the first coordinate with ",{"type":45,"tag":116,"props":2442,"children":2444},{"className":2443},[],[2445],{"type":51,"value":1313},{"type":51,"value":2447}," in ",{"type":45,"tag":116,"props":2449,"children":2451},{"className":2450},[],[2452],{"type":51,"value":1189},{"type":51,"value":934},{"type":45,"tag":66,"props":2455,"children":2456},{},[2457,2459,2465,2466,2472],{"type":51,"value":2458},"Validate coordinates with ",{"type":45,"tag":116,"props":2460,"children":2462},{"className":2461},[],[2463],{"type":51,"value":2464},"handshake_dim()",{"type":51,"value":206},{"type":45,"tag":116,"props":2467,"children":2469},{"className":2468},[],[2470],{"type":51,"value":2471},"handshake_coords()",{"type":51,"value":934},{"type":45,"tag":66,"props":2474,"children":2475},{},[2476,2478,2483,2485,2490],{"type":51,"value":2477},"Add ",{"type":45,"tag":116,"props":2479,"children":2481},{"className":2480},[],[2482],{"type":51,"value":1435},{"type":51,"value":2484}," in generative ",{"type":45,"tag":116,"props":2486,"children":2488},{"className":2487},[],[2489],{"type":51,"value":1198},{"type":51,"value":934},{"type":45,"tag":66,"props":2492,"children":2493},{},[2494],{"type":51,"value":2495},"Include the repo-standard SPDX\u002Flicense header in every Python file.",{"type":45,"tag":66,"props":2497,"children":2498},{},[2499,2500,2505,2507,2512,2514,2519],{"type":51,"value":198},{"type":45,"tag":116,"props":2501,"children":2503},{"className":2502},[],[2504],{"type":51,"value":1643},{"type":51,"value":2506},", never ",{"type":45,"tag":116,"props":2508,"children":2510},{"className":2509},[],[2511],{"type":51,"value":1651},{"type":51,"value":2513},", inside ",{"type":45,"tag":116,"props":2515,"children":2517},{"className":2516},[],[2518],{"type":51,"value":1659},{"type":51,"value":934},{"type":45,"tag":54,"props":2521,"children":2522},{},[2523],{"type":51,"value":2524},"Do not:",{"type":45,"tag":60,"props":2526,"children":2527},{},[2528,2540,2552,2564,2569,2574],{"type":45,"tag":66,"props":2529,"children":2530},{},[2531,2533,2539],{"type":51,"value":2532},"Inherit from ",{"type":45,"tag":116,"props":2534,"children":2536},{"className":2535},[],[2537],{"type":51,"value":2538},"PrognosticMixin",{"type":51,"value":934},{"type":45,"tag":66,"props":2541,"children":2542},{},[2543,2545,2550],{"type":51,"value":2544},"Include ",{"type":45,"tag":116,"props":2546,"children":2548},{"className":2547},[],[2549],{"type":51,"value":1394},{"type":51,"value":2551}," coordinates.",{"type":45,"tag":66,"props":2553,"children":2554},{},[2555,2557,2563],{"type":51,"value":2556},"Create ",{"type":45,"tag":116,"props":2558,"children":2560},{"className":2559},[],[2561],{"type":51,"value":2562},"create_iterator",{"type":51,"value":934},{"type":45,"tag":66,"props":2565,"children":2566},{},[2567],{"type":51,"value":2568},"Create general base classes for a single wrapper without a clear multi-variant need.",{"type":45,"tag":66,"props":2570,"children":2571},{},[2572],{"type":51,"value":2573},"Commit API keys, credentials, validation scripts, plots, or generated outputs.",{"type":45,"tag":66,"props":2575,"children":2576},{},[2577,2579,2584],{"type":51,"value":2578},"Read from ",{"type":45,"tag":116,"props":2580,"children":2582},{"className":2581},[],[2583],{"type":51,"value":578},{"type":51,"value":934},{"type":45,"tag":46,"props":2586,"children":2588},{"id":2587},"self-improvement",[2589],{"type":51,"value":244},{"type":45,"tag":54,"props":2591,"children":2592},{},[2593],{"type":51,"value":2594},"If this skill produces incorrect outputs, update it before continuing:",{"type":45,"tag":1169,"props":2596,"children":2597},{},[2598,2603,2624,2629,2634],{"type":45,"tag":66,"props":2599,"children":2600},{},[2601],{"type":51,"value":2602},"Identify the issue in the generated code or workflow.",{"type":45,"tag":66,"props":2604,"children":2605},{},[2606,2608,2614,2616,2622],{"type":51,"value":2607},"Edit ",{"type":45,"tag":116,"props":2609,"children":2611},{"className":2610},[],[2612],{"type":51,"value":2613},"SKILL.md",{"type":51,"value":2615}," or the relevant file in ",{"type":45,"tag":116,"props":2617,"children":2619},{"className":2618},[],[2620],{"type":51,"value":2621},"references\u002F",{"type":51,"value":2623}," to fix the guidance.",{"type":45,"tag":66,"props":2625,"children":2626},{},[2627],{"type":51,"value":2628},"Run focused validation for the changed skill files.",{"type":45,"tag":66,"props":2630,"children":2631},{},[2632],{"type":51,"value":2633},"Commit the skill fix separately when working in a branch that expects commits.",{"type":45,"tag":66,"props":2635,"children":2636},{},[2637],{"type":51,"value":2638},"Continue the model implementation with the corrected workflow.",{"type":45,"tag":2640,"props":2641,"children":2642},"style",{},[2643],{"type":51,"value":2644},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2646,"total":2748},[2647,2662,2676,2690,2702,2719,2734],{"slug":2648,"name":2648,"fn":2649,"description":2650,"org":2651,"tags":2652,"stars":20,"repoUrl":21,"updatedAt":2661},"accelerated-computing-cudf","accelerate data processing with cuDF","Official NVIDIA-authored guidance for NVIDIA cuDF GPU DataFrames, pandas acceleration, dask-cuDF, ETL, joins, groupby, CSV\u002FParquet I\u002FO, nullable semantics, and multi-GPU DataFrame workloads.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2653,2654,2657,2658],{"name":17,"slug":18,"type":15},{"name":2655,"slug":2656,"type":15},"Data Engineering","data-engineering",{"name":9,"slug":8,"type":15},{"name":2659,"slug":2660,"type":15},"Performance","performance","2026-07-14T05:28:43.176466",{"slug":2663,"name":2663,"fn":2664,"description":2665,"org":2666,"tags":2667,"stars":20,"repoUrl":21,"updatedAt":2675},"aiq-deploy","deploy and manage NVIDIA AI-Q infrastructure","Use when asked to install, deploy, run, validate, troubleshoot, or stop NVIDIA AI-Q Blueprint infrastructure.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2668,2671,2674],{"name":2669,"slug":2670,"type":15},"Deployment","deployment",{"name":2672,"slug":2673,"type":15},"Infrastructure","infrastructure",{"name":9,"slug":8,"type":15},"2026-07-14T05:29:06.667109",{"slug":2677,"name":2677,"fn":2678,"description":2679,"org":2680,"tags":2681,"stars":20,"repoUrl":21,"updatedAt":2689},"aiq-research","conduct deep research with AI-Q","Use when asked to run deep research or AI-Q research through a reachable NVIDIA AI-Q Blueprint backend.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2682,2685,2686],{"name":2683,"slug":2684,"type":15},"Agents","agents",{"name":9,"slug":8,"type":15},{"name":2687,"slug":2688,"type":15},"Research","research","2026-07-14T05:28:06.816956",{"slug":2691,"name":2691,"fn":2692,"description":2693,"org":2694,"tags":2695,"stars":20,"repoUrl":21,"updatedAt":2701},"amc-run-sample-calibration","run AMC sample dataset calibration","Run end-to-end calibration on the shipped sample dataset (sdg_08_2_sample_data_010926.zip) against a running AMC microservice. Use when user says 'test sample dataset', 'run sample calibration', 'verify AMC install', or 'launch and test'.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2696,2697,2698],{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"name":2699,"slug":2700,"type":15},"Testing","testing","2026-07-17T05:29:03.913266",{"slug":2703,"name":2703,"fn":2704,"description":2705,"org":2706,"tags":2707,"stars":20,"repoUrl":21,"updatedAt":2718},"amc-run-video-calibration","calibrate video datasets with AutoMagicCalib","Calibrate a new dataset from pre-recorded video files via the AutoMagicCalib REST API. Use when user has local MP4s and says 'calibrate my videos', 'run AMC on these videos', or similar. For RTSP\u002Flive streams, use amc-run-rtsp-calibration instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2708,2711,2714,2715],{"name":2709,"slug":2710,"type":15},"Automation","automation",{"name":2712,"slug":2713,"type":15},"Imaging","imaging",{"name":9,"slug":8,"type":15},{"name":2716,"slug":2717,"type":15},"Video","video","2026-07-17T05:28:53.905004",{"slug":2720,"name":2720,"fn":2721,"description":2722,"org":2723,"tags":2724,"stars":20,"repoUrl":21,"updatedAt":2733},"amc-setup-calibration-stack","deploy AutoMagicCalib microservice with Docker","Launch AutoMagicCalib microservice and web UI from NGC release images via Docker Compose. Use when user says 'deploy auto calibration', 'launch auto calibration', 'launch AMC', 'start MS+UI', or 'set up auto-magic-calib'. Requires NGC API key.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2725,2726,2729,2730],{"name":2669,"slug":2670,"type":15},{"name":2727,"slug":2728,"type":15},"Docker","docker",{"name":9,"slug":8,"type":15},{"name":2731,"slug":2732,"type":15},"Operations","operations","2026-07-17T05:28:56.913999",{"slug":2735,"name":2735,"fn":2736,"description":2737,"org":2738,"tags":2739,"stars":20,"repoUrl":21,"updatedAt":2747},"cudaq-guide","develop quantum applications with CUDA-Q","CUDA-Q onboarding guide for installation, test programs, GPU simulation, QPU hardware, and quantum applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2740,2741,2744],{"name":9,"slug":8,"type":15},{"name":2742,"slug":2743,"type":15},"Quantum Computing","quantum-computing",{"name":2745,"slug":2746,"type":15},"Simulation","simulation","2026-07-14T05:26:58.898253",305,{"items":2750,"total":2898},[2751,2769,2784,2795,2807,2821,2834,2846,2857,2866,2880,2889],{"slug":2752,"name":2752,"fn":2753,"description":2754,"org":2755,"tags":2756,"stars":2766,"repoUrl":2767,"updatedAt":2768},"nemoclaw-user-guide","retrieve NemoClaw documentation and configuration","Guides human users' AI agents to the NemoClaw docs MCP server and canonical Fern documentation in Markdown form. Use when users ask how to install, configure, operate, troubleshoot, secure, or learn NemoClaw with an AI coding assistant. Trigger keywords - nemoclaw docs, use nemoclaw with ai agent, nemoclaw mcp docs, nemoclaw install help, nemoclaw quickstart, nemoclaw markdown docs, llms.txt, agent skills.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2757,2760,2763],{"name":2758,"slug":2759,"type":15},"Documentation","documentation",{"name":2761,"slug":2762,"type":15},"MCP","mcp",{"name":2764,"slug":2765,"type":15},"Search","search",21777,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNemoClaw","2026-07-20T06:00:01.461044",{"slug":2770,"name":2770,"fn":2771,"description":2772,"org":2773,"tags":2774,"stars":2781,"repoUrl":2782,"updatedAt":2783},"mcore-build-and-dependency","manage Megatron-LM development environments","Container-based dev environment setup and dependency management for Megatron-LM. Covers acquiring and launching the CI container, uv package management, and updating uv.lock.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2775,2778,2779],{"name":2776,"slug":2777,"type":15},"Containers","containers",{"name":2669,"slug":2670,"type":15},{"name":2780,"slug":39,"type":15},"Python",17049,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FMegatron-LM","2026-07-27T06:06:11.249662",{"slug":2785,"name":2785,"fn":2786,"description":2787,"org":2788,"tags":2789,"stars":2781,"repoUrl":2782,"updatedAt":2794},"mcore-bump-base-image","update NVIDIA PyTorch base images","Bump the NVIDIA PyTorch base image (`nvcr.io\u002Fnvidia\u002Fpytorch:YY.MM-py3`) used by Megatron-LM CI. Covers the two pin sites (GitHub CI in `docker\u002F.ngc_version.dev` and GitLab CI in `.gitlab\u002Fstages\u002F01.build.yml`), the post-bump CI loop (re-run functional tests, refresh golden values, mark broken tests), and the gotchas that bit PRs",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2790,2793],{"name":2791,"slug":2792,"type":15},"CI\u002FCD","ci-cd",{"name":2669,"slug":2670,"type":15},"2026-07-14T05:25:59.97109",{"slug":2796,"name":2796,"fn":2797,"description":2798,"org":2799,"tags":2800,"stars":2781,"repoUrl":2782,"updatedAt":2806},"mcore-cicd","manage CI\u002FCD pipelines for Megatron-LM","CI\u002FCD reference for Megatron-LM. Covers CI pipeline structure, PR scope labels, triggering internal GitLab CI (which force-pushes the current branch to a pull-request\u002FBRANCH ref — always dry-run and verify the destination first; never run against shared or protected branches), and CI failure investigation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2801,2802,2803],{"name":2791,"slug":2792,"type":15},{"name":2669,"slug":2670,"type":15},{"name":2804,"slug":2805,"type":15},"GitHub","github","2026-07-27T06:06:12.278222",{"slug":2808,"name":2808,"fn":2809,"description":2810,"org":2811,"tags":2812,"stars":2781,"repoUrl":2782,"updatedAt":2820},"mcore-create-issue","investigate CI failures and create issues","Investigate a failing GitHub Actions run or job and create a GitHub issue for the failure.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2813,2816,2817],{"name":2814,"slug":2815,"type":15},"Debugging","debugging",{"name":2804,"slug":2805,"type":15},{"name":2818,"slug":2819,"type":15},"Triage","triage","2026-07-14T05:25:57.442089",{"slug":2822,"name":2822,"fn":2823,"description":2824,"org":2825,"tags":2826,"stars":2781,"repoUrl":2782,"updatedAt":2833},"mcore-linting-and-formatting","lint and format Megatron-LM code","Linting and formatting for Megatron-LM. Covers running autoformat.sh, tools (ruff, black, isort, pylint, mypy), and code style rules.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2827,2830],{"name":2828,"slug":2829,"type":15},"Best Practices","best-practices",{"name":2831,"slug":2832,"type":15},"Code Analysis","code-analysis","2026-07-14T05:25:56.18433",{"slug":2835,"name":2835,"fn":2836,"description":2837,"org":2838,"tags":2839,"stars":2781,"repoUrl":2782,"updatedAt":2845},"mcore-migrate-gpt-to-hybrid","migrate Megatron-LM models to HybridModel","Migration guide for moving Megatron Core GPTModel checkpoints, model providers, training commands, and layer mappings to HybridModel.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2840,2841,2844],{"name":13,"slug":14,"type":15},{"name":2842,"slug":2843,"type":15},"Migration","migration",{"name":9,"slug":8,"type":15},"2026-07-17T06:07:11.777011",{"slug":2847,"name":2847,"fn":2848,"description":2849,"org":2850,"tags":2851,"stars":2781,"repoUrl":2782,"updatedAt":2856},"mcore-onboard-gb200-1node-tests","onboard functional tests for GB200","Onboard 1-node GitHub MR functional tests for GB200 from existing mr-scoped 2-node tests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2852,2855],{"name":2853,"slug":2854,"type":15},"QA","qa",{"name":2699,"slug":2700,"type":15},"2026-07-14T05:25:53.673039",{"slug":2858,"name":2858,"fn":2859,"description":2860,"org":2861,"tags":2862,"stars":2781,"repoUrl":2782,"updatedAt":2865},"mcore-run-on-slurm","launch distributed training jobs on SLURM","How to launch distributed Megatron-LM training jobs on a SLURM cluster. Covers a minimal sbatch skeleton, environment-variable setup for torch.distributed.run, CUDA_DEVICE_MAX_CONNECTIONS rules across hardware and parallelism modes, container conventions, monitoring, and per-rank failure diagnosis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2863,2864],{"name":2669,"slug":2670,"type":15},{"name":2672,"slug":2673,"type":15},"2026-07-14T05:25:49.362534",{"slug":2867,"name":2867,"fn":2868,"description":2869,"org":2870,"tags":2871,"stars":2781,"repoUrl":2782,"updatedAt":2879},"mcore-split-pr","split pull requests to reduce review load","Split a PR into multiple PRs to reduce the number of required CODEOWNERS reviewer groups.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2872,2875,2876],{"name":2873,"slug":2874,"type":15},"Code Review","code-review",{"name":2804,"slug":2805,"type":15},{"name":2877,"slug":2878,"type":15},"Pull Requests","pull-requests","2026-07-14T05:26:01.226578",{"slug":2881,"name":2881,"fn":2882,"description":2883,"org":2884,"tags":2885,"stars":2781,"repoUrl":2782,"updatedAt":2888},"mcore-testing","run and manage Megatron-LM tests","Test system for Megatron-LM. Covers test layout, recipe YAML structure, adding and running unit and functional tests, golden values, marker filters, and CI parity.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2886,2887],{"name":2853,"slug":2854,"type":15},{"name":2699,"slug":2700,"type":15},"2026-07-14T05:25:54.928983",{"slug":2890,"name":2890,"fn":2891,"description":2892,"org":2893,"tags":2894,"stars":2781,"repoUrl":2782,"updatedAt":2897},"nightly-sync","manage nightly main-to-dev sync workflows","Domain knowledge for the nightly main-to-dev sync workflow. Covers merge strategy, CI architecture, failure investigation, and known issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2895,2896],{"name":2709,"slug":2710,"type":15},{"name":2791,"slug":2792,"type":15},"2026-07-30T05:29:03.275638",496]