Code Contribution Guide
Contributing to UWA-Channels (MATLAB & Python)
First off — thank you for considering a contribution! Bug reports, feature requests, documentation improvements, and code changes are all welcome.
This guide explains how to contribute effectively to the two companion repositories hosted at https://github.com/uwa-channels:
| Repository | Language | Main Branch | Folder Layout |
|---|---|---|---|
| uwa-channels/matlab | MATLAB (R2021a+) | main | src/, tests/, examples/ |
| uwa-channels/python | Python (≥ 3.10) | main | uwa_channels/, tests/, docs/ |
Getting Started
Prerequisites
Familiarity with Git, GitHub, Markdown, and either MATLAB or Python.
Helpful references: GitHub Quickstart, Markdown Guide.Development environment:
MATLAB repository
git clone https://github.com/uwa-channels/matlab.gitTo run example scripts:
cd examples example_replayTo run tests:
cd tests addpath('../src') runtests('testReplay')Python repository — create a virtual environment and install dependencies:
git clone https://github.com/uwa-channels/python.git cd python pip install numpy scipy matplotlib h5py pytest pytest-benchmark pre-commitTo run example scripts:
PYTHONPATH=src python examples/example_replay.pyTo run tests:
PYTHONPATH=src pytestTo initialize
pre-commit:pre-commit install pre-commit run --all-files
Code of Conduct
We expect all contributors to be professional, respectful, and constructive. By participating, you agree to uphold these standards.
Bug Reports, Feature Requests, & Discussions
Bug Reports
- Search existing issues and pull requests—your bug may already be reported or fixed.
- Provide a minimal, reproducible example (MATLAB
.mfile or live script, or a Python snippet), along with:- Package versions (
uwa_channels.__version__or MATLABver) - OS and MATLAB/Python version, if relevant
- Package versions (
Feature Requests
Describe both the motivation and the proposed change. Sketch a possible API or workflow if applicable.
Discussions
General Q&A, design ideas, and roadmap conversations belong in GitHub Discussions, not in Issues.
Issue Labels
| Label | Meaning |
|---|---|
high-priority / low-priority | Relative urgency |
good first issue | Suitable for newcomers |
breaking-change | API/behavior change |
| Milestone assigned | Planned for release |
Workflow for Code & Documentation Changes
- Fork the repository and clone your fork.
- Create a branch from
main, named liketopic-short-description(lowercase, hyphen-separated). - Develop locally:
- MATLAB — run
runtests('tests')and address Code Analyzer (MLint) warnings. - Python — run
PYTHONPATH=src pytestfrequently.
- MATLAB — run
- Write tests for new features or bug fixes.
- Document your changes:
- Use NumPy-style docstrings in Python functions and classes.
- Use MATLAB help text headers; add usage examples for public APIs.
- Commit with clear messages, then push to your fork.
- Open a pull request (PR) against
main. Mark it as “Draft” if it’s not yet ready for review. Reference any related issues. - Address reviewer feedback. Once all checks pass and approvals are received, a maintainer will merge.
Commit Message Style
We follow a simplified version of Conventional Commits:
<type>(<scope>): <summary>
<body>
- type ∈ {
feat,fix,docs,test,perf,refactor,style,chore,revert} - scope identifies the module or subsystem (e.g.,
io,replay,noisegen) - Use imperative mood for the summary (e.g., “add support…” not “added”)
- Limit the summary to ≤ 50 characters; wrap the body at 72 characters
- If the change is breaking, begin the body with
BREAKING CHANGE:
Examples:
feat(replay): add resampling support for replay channels
fix(io): handle empty .mat files (issue #42)
Coding Standards
MATLAB, follow the MATLAB Style Guide:
- 4-space indentation;
camelCasefor functions,PascalCasefor classes - Each function/class in its own
.mfile - Use
argumentsblocks for input validation where possible - Add unit tests under
tests/testPkgName/using MATLAB Unit Test - Vectorize where possible; comment non-obvious logic
Python
- Formatting is enforced via Black and isort
- Static analysis via Flake8 and Ruff
- Use NumPy-style doc strings with LaTeX equations where helpful
- Keep functions short, prefer clarity to cleverness, and avoid premature optimization
Testing & Continuous Integration
| Repository | Local Test Command | CI Matrix |
|---|---|---|
| Python | PYTHONPATH=src pytest | Python 3.10 – 3.12 |
| MATLAB | runtests('tests') | MATLAB R2021a and latest |
All CI checks must pass before a pull request is merged.
Release Process (Python only)
Maintainers tag releases using git tag -s vX.Y.Z following Semantic Versioning (SemVer).
Merged PRs are reflected in CHANGELOG.md, with entries auto-generated from commit messages.
Acknowledgments
This guide was inspired by the excellent UnderwaterAcoustics.jl contributing guide, as well as the contribution guidelines from NumPy, SciPy, and MATLAB Style Guide.
Happy hacking – may your channels be peaceful and your SNR high!