Skip to main content

kinemotion-development

Apply kinemotion development standards. Use when writing Python code, creating tests, modifying the kinemotion codebase, or reviewing code quality.

Aller à l'installation

Informations de source

Dépôt
KinemotionInc/kinemotion
Dernière activité de la source
16 janvier 2026 à 04:26
Langue détectée de SKILL.md
anglais
Étoiles
1
Forks
1

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
kinemotion-development
description
Apply kinemotion development standards. Use when writing Python code, creating tests, modifying the kinemotion codebase, or reviewing code quality.
# Kinemotion Development Standards ## Pre-Commit Checklist Always run before committing: ```bash uv run ruff check --fix # Auto-fix linting uv run ruff format # Format code uv run pyright # Type check (strict) uv run pytest # Run all tests ``` Or combined: ```bash uv run ruff check --fix && uv run ruff format && uv run pyright && uv run pytest ``` ## Quality Targets | Metric | Target | Current | | ---------------- | ------ | ------- | | Test coverage | ≥ 50% | 80.86% | | Code duplication | < 3% | 2.96% | | Type errors | 0 | 0 | | Lint errors | 0 | 0 | Check duplication: `npx jscpd src/kinemotion` ## Type Hints - Use `NDArray[np.float64]` for numpy arrays - Use `TypedDict` for metric dictionaries - Use `Literal` for string unions - Pyright strict mode enforced ```python from numpy.typing import NDArray from typing import TypedDict, Literal QualityPreset = Literal["fast", "balanced", "accurate"] class CMJMetrics(TypedDict): jump_height_cm: float flight_time_ms: float ``` ## Module Structure ``` src/kinemotion/ ├── cli.py # Main CLI entry point ├── api.py # Public Python API ├── core/ # Shared utilities │ ├── validation.py # Base validation classes │ ├── pose.py # MediaPipe wrapper │ ├── filtering.py # Signal processing │ └── video_io.py # Video I/O handling ├── cmj/ # CMJ analysis module │ ├── cli.py # CMJ CLI subcommand │ ├── analysis.py # Core CMJ algorithm │ ├── kinematics.py # Velocity, position calc │ └── validation_bounds.py # CMJ-specific bounds └── dropjump/ # Drop jump module ├── cli.py # Drop jump CLI subcommand ├── analysis.py # Core drop jump algorithm └── validation_bounds.py # Drop jump bounds ``` ## Testing ### Structure Mirror source: `tests/core/`, `tests/cmj/`, `tests/dropjump/`, `tests/cli/` ### Fixtures Use centralized fixtures from `tests/conftest.py`: - `cli_runner`: Click test runner - `minimal_video`: Synthetic test video - `sample_video_path`: Path to test fixture ### Edge Cases to Test - Empty arrays - Single frame videos - NaN values in landmarks - Missing landmarks (occlusion) - Zero velocity scenarios ```python @pytest.mark.parametrize("input_data,expected", [ (np.array([]), None), # Empty (np.array([1.0]), 1.0), # Single value (np.array([np.nan, 1.0, 2.0]), None), # NaN handling ]) def test_edge_cases(input_data, expected): ... ``` ## Key Algorithm Differences | Aspect | CMJ | Drop Jump | | ----------------- | -------------------------- | -------------------- | | Search direction | Backward (from peak) | Forward | | Velocity type | Signed (direction matters) | Absolute (magnitude) | | Key phase | Countermovement detection | Ground contact | | Starting position | Floor level | Elevated (box) | ## Common Gotchas 1. **CMJ velocity must be signed** - backward search requires knowing direction 2. **Convert NumPy for JSON** - use `int()`, `float()` before serialization 3. **Handle video rotation** - mobile videos have rotation metadata 4. **Read first frame for dimensions** - don't trust OpenCV properties ## Commit Format Use Conventional Commits: ``` <type>(<scope>): <description> Types: feat, fix, docs, test, refactor, perf, chore ``` Examples: ``` feat(cmj): add triple extension tracking fix(dropjump): correct ground contact detection test(core): add filtering edge case tests ``` ## Code Style - 88 character line limit (ruff) - Use early returns to reduce nesting - Extract methods for complexity > 15 - Prefer composition over inheritance - Single Responsibility for all functions ## Adding New Analysis Type 1. Create module directory: `src/kinemotion/<type>/` 2. Implement: `cli.py`, `analysis.py`, `kinematics.py` 3. Add validation bounds in `validation_bounds.py` 4. Register CLI in main `cli.py` 5. Export in `api.py` and `__init__.py` 6. Add tests mirroring structure 7. Update CLAUDE.md quick reference
Voir sur GitHub