test-python-binding

par nvidia

Construire et tester la liaison Python NeMo Relay et le SDK du plugin worker ; utiliser pour les modifications de python/nemo_relay, python/plugin ou crates/python.

npx skills add https://github.com/nvidia/nemo-relay --skill test-python-binding

Build And Test Python Binding

Companion Guidance

Use karpathy-guidelines alongside this skill for implementation or review work. Keep changes scoped, surface assumptions, and define focused validation before editing.

Use this skill when the change is primarily in python/nemo_relay, python/plugin, python/tests, crates/python, or Python-facing docs/examples.

Default Path

  1. Format changed Python wrapper and test files with uv run ruff format python python/plugin.
  2. Run focused pytest first when you know the affected area.
  3. Run just test-python-plugin when the Python worker SDK changed.
  4. Run the full Python suite with just test-python before review.
  5. If any Rust files changed as part of the Python work, also run cargo fmt --all, just test-rust, and cargo clippy --workspace --all-targets -- -D warnings.
  6. Use just build-python when you want an explicit build-only pass.
  7. Use just build-python-plugin when the Python worker SDK changed.
  8. If the native Rust bridge changed, add the Rust crate tests for nemo-relay-python.

Python Test Style

  • Pytest is used to run tests.
  • Do not add @pytest.mark.asyncio to any test. Async tests are automatically detected and run by the async runner; the decorator is unnecessary clutter.
  • Do not add a -> None return type annotation to test functions. This is not a common convention in pytest and adds unnecessary verbosity.
  • When mocking a class, do not define a new class. Use unittest.mock.MagicMock or unittest.mock.AsyncMock, with the spec constructor argument when necessary.
  • The name of the mocked class should be prefixed with mock, not fake.
  • Prefer pytest fixtures over helper methods.
  • Do not repeat fixtures, if a fixture is needed in multiple test files, place it in a conftest.py file.
  • When creating a fixture follow this pattern:
    @pytest.fixture(name="<fixture_name>"[, scope="<scope>"])
    def <fixture_name>_fixture() -> <return_type>:
        ...
    
    Only specify the scope argument when the value is something other than "function".
  • Prefer pytest.mark.parametrize over creating individual tests for different input types.

Common Commands

# Focused test loop
uv run pytest -k "<pattern>"

# Required first for focused dynamic-plugin host tests
just build-test-plugin-fixtures
uv run pytest python/tests/test_dynamic_plugin_host.py

# Focused Python worker plugin SDK suite
just test-python-plugin

# Format Python files
uv run ruff format python python/plugin

# Full Python suite
just test-python

# Required when the Python change also touched Rust code
cargo fmt --all
just test-rust
cargo clippy --workspace --all-targets -- -D warnings

# Rebuild the editable package plus native extension
just build-python

# Rebuild/install the Python worker plugin SDK
just build-python-plugin

# Native extension crate when crates/python changed
cargo test -p nemo-relay-python

When To Escalate

  • If crates/core, crates/adaptive, or shared runtime semantics changed, also use validate-change.
  • If python/plugin or worker protocol behavior changed, also use maintain-dynamic-plugins.
  • If the change is actually about docs only, prefer contribute-docs plus targeted command checks.

References

  • pyproject.toml
  • crates/python/Cargo.toml
  • crates/python/README.md
  • python/nemo_relay/README.md
  • python/plugin/pyproject.toml
  • python/plugin/src/nemo_relay_plugin
  • python/tests/plugin
  • docs/getting-started/quick-start/python.mdx
  • docs/contribute/testing-and-docs.mdx
  • validate-change

Plus de skills de nvidia

compileiq-debug
nvidia
Utilisez quand quelque chose ne va pas : Search() bloque, toutes les évaluations retournent INVALID_SCORE, les scores ne s'améliorent pas, chaque configuration retourne le même nombre, erreurs ptxas…
create-github-pr
nvidia
Créer des pull requests GitHub en utilisant l'interface en ligne de commande gh. Utiliser lorsque l'utilisateur souhaite créer une nouvelle PR, soumettre du code pour révision, ou ouvrir une pull request. Mots-clés de déclenchement -…
nemoclaw-maintainer-cross-issue-sweep
nvidia
Analyse les autres problèmes ouverts pour trouver ceux qu’une PR donnée pourrait également corriger ou casser accidentellement. Génère des opportunités de correctifs adjacents et des risques de contradiction avec fichier:ligne…
fhir-basics
nvidia
Apprend aux agents comment fonctionnent les API FHIR R4, quelles ressources sont disponibles, comment les interroger avec des paramètres de recherche, et comment analyser correctement tous les formats de réponse…
compileiq-validate-result
nvidia
Utiliser APRÈS qu'une recherche soit terminée et AVANT de réclamer un accélérateur ou d'expédier un ACF. Charge le CSV dump_results, extrait les K meilleurs candidats (mono-objectif)…
changelog-audit
nvidia
Auditer le CHANGELOG.md de Warp avant une publication : récupérer les entrées perdues, trier par impact utilisateur, affiner le langage des entrées, ajuster les retours à la ligne et (en mode branche de publication) mettre à jour la comparaison…
maintain-dynamic-plugins
nvidia
Maintenir les chargeurs de plugins dynamiques NeMo Relay, les manifestes, les SDK natifs Rust, le protocole worker gRPC, le SDK worker Python, la documentation, les tests et la couverture du workflow de publication
dgx-diagnose
nvidia
Diagnostiquer les problèmes courants du DGX Station GB300 — plantages CUDA, ciblage incorrect du GPU, bugs de conteneur vLLM/SGLang, problèmes d'état MIG, erreurs NVLink/Fabric Manager,…