Guides linting and formatting for Megatron-LM, covering autoformat.sh, ruff, black, isort, pylint, mypy and style rules.
- What it does
- This skill documents how to run linting and formatting for the Megatron-LM codebase. It explains invoking tools/autoformat.sh in check or fix mode, running isort on edited files, and installing the linting dependency group with uv sync. It also lists code style rules such as type hints, Google-style docstrings, naming conventions, a 119-character line length, and avoiding bare except clauses.
- When to use it
- Use it when running linting or autoformatting, fixing style violations before a pull request, or troubleshooting failures from pre-commit, ruff, isort, mypy, or autoformat.sh.
- Requirements
- Instructions only; no scripts are shipped. It assumes a Megatron-LM checkout with tools/autoformat.sh and pyproject.toml, plus the linting tools black, isort, pylint, ruff, and mypy, typically installed via uv sync --locked --only-group linting inside a container.
Linting and Formatting
Running the Formatter
Run before opening a PR:
Tools invoked: black, isort, pylint, ruff, mypy.
Import Ordering
After editing imports in any Python files, always run uv run isort on those
files before committing:
Setting Up the Linting Group
Inside the container:
This installs ruff, black, isort, pylint — the same tools used by
tools/autoformat.sh and CI's linting job.
Code Style Rules
- Type hints: required on all public API functions. Use
X | None, not Optional[X].
- Docstrings: Google-style on all public classes and functions.
- Naming: follow Python conventions —
snake_case for functions and variables, PascalCase for classes.
- Line length: 119 characters (configured in
pyproject.toml).
- No bare
except: always catch specific exception types.