kinemotion 0.16.0__tar.gz → 0.17.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. kinemotion-0.17.1/.github/workflows/test.yml +94 -0
  2. {kinemotion-0.16.0 → kinemotion-0.17.1}/CHANGELOG.md +16 -0
  3. {kinemotion-0.16.0 → kinemotion-0.17.1}/CLAUDE.md +23 -0
  4. {kinemotion-0.16.0 → kinemotion-0.17.1}/PKG-INFO +1 -1
  5. {kinemotion-0.16.0 → kinemotion-0.17.1}/pyproject.toml +1 -1
  6. kinemotion-0.17.1/sonar-project.properties +42 -0
  7. {kinemotion-0.16.0 → kinemotion-0.17.1}/uv.lock +1 -1
  8. {kinemotion-0.16.0 → kinemotion-0.17.1}/.dockerignore +0 -0
  9. {kinemotion-0.16.0 → kinemotion-0.17.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  10. {kinemotion-0.16.0 → kinemotion-0.17.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  11. {kinemotion-0.16.0 → kinemotion-0.17.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  12. {kinemotion-0.16.0 → kinemotion-0.17.1}/.github/pull_request_template.md +0 -0
  13. {kinemotion-0.16.0 → kinemotion-0.17.1}/.github/workflows/docs.yml +0 -0
  14. {kinemotion-0.16.0 → kinemotion-0.17.1}/.github/workflows/release.yml +0 -0
  15. {kinemotion-0.16.0 → kinemotion-0.17.1}/.gitignore +0 -0
  16. {kinemotion-0.16.0 → kinemotion-0.17.1}/.pre-commit-config.yaml +0 -0
  17. {kinemotion-0.16.0 → kinemotion-0.17.1}/.readthedocs.yml +0 -0
  18. {kinemotion-0.16.0 → kinemotion-0.17.1}/.tool-versions +0 -0
  19. {kinemotion-0.16.0 → kinemotion-0.17.1}/CODE_OF_CONDUCT.md +0 -0
  20. {kinemotion-0.16.0 → kinemotion-0.17.1}/CONTRIBUTING.md +0 -0
  21. {kinemotion-0.16.0 → kinemotion-0.17.1}/Dockerfile +0 -0
  22. {kinemotion-0.16.0 → kinemotion-0.17.1}/GEMINI.md +0 -0
  23. {kinemotion-0.16.0 → kinemotion-0.17.1}/LICENSE +0 -0
  24. {kinemotion-0.16.0 → kinemotion-0.17.1}/README.md +0 -0
  25. {kinemotion-0.16.0 → kinemotion-0.17.1}/SECURITY.md +0 -0
  26. {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/README.md +0 -0
  27. {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/api/cmj.md +0 -0
  28. {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/api/core.md +0 -0
  29. {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/api/dropjump.md +0 -0
  30. {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/api/overview.md +0 -0
  31. {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/development/errors-findings.md +0 -0
  32. {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/development/validation-plan.md +0 -0
  33. {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/development/wallball-norep-detection.md +0 -0
  34. {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/guides/bulk-processing.md +0 -0
  35. {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/guides/camera-setup.md +0 -0
  36. {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/guides/cmj-guide.md +0 -0
  37. {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/index.md +0 -0
  38. {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/reference/parameters.md +0 -0
  39. {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/reference/pose-systems.md +0 -0
  40. {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
  41. {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/technical/framerate.md +0 -0
  42. {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/technical/imu-metadata.md +0 -0
  43. {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/technical/real-time-analysis.md +0 -0
  44. {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/technical/triple-extension.md +0 -0
  45. {kinemotion-0.16.0 → kinemotion-0.17.1}/docs/translations/es/camera-setup.md +0 -0
  46. {kinemotion-0.16.0 → kinemotion-0.17.1}/examples/bulk/README.md +0 -0
  47. {kinemotion-0.16.0 → kinemotion-0.17.1}/examples/bulk/bulk_processing.py +0 -0
  48. {kinemotion-0.16.0 → kinemotion-0.17.1}/examples/bulk/simple_example.py +0 -0
  49. {kinemotion-0.16.0 → kinemotion-0.17.1}/examples/programmatic_usage.py +0 -0
  50. {kinemotion-0.16.0 → kinemotion-0.17.1}/mkdocs.yml +0 -0
  51. {kinemotion-0.16.0 → kinemotion-0.17.1}/requirements-docs.txt +0 -0
  52. {kinemotion-0.16.0 → kinemotion-0.17.1}/samples/cmjs/README.md +0 -0
  53. {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/__init__.py +0 -0
  54. {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/api.py +0 -0
  55. {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/cli.py +0 -0
  56. {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/cmj/__init__.py +0 -0
  57. {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/cmj/analysis.py +0 -0
  58. {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/cmj/cli.py +0 -0
  59. {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/cmj/debug_overlay.py +0 -0
  60. {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/cmj/joint_angles.py +0 -0
  61. {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/cmj/kinematics.py +0 -0
  62. {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/core/__init__.py +0 -0
  63. {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/core/auto_tuning.py +0 -0
  64. {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/core/cli_utils.py +0 -0
  65. {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/core/debug_overlay_utils.py +0 -0
  66. {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/core/filtering.py +0 -0
  67. {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/core/pose.py +0 -0
  68. {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/core/smoothing.py +0 -0
  69. {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/core/video_io.py +0 -0
  70. {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/dropjump/__init__.py +0 -0
  71. {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/dropjump/analysis.py +0 -0
  72. {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/dropjump/cli.py +0 -0
  73. {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/dropjump/debug_overlay.py +0 -0
  74. {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/dropjump/kinematics.py +0 -0
  75. {kinemotion-0.16.0 → kinemotion-0.17.1}/src/kinemotion/py.typed +0 -0
  76. {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/__init__.py +0 -0
  77. {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/test_adaptive_threshold.py +0 -0
  78. {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/test_api.py +0 -0
  79. {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/test_aspect_ratio.py +0 -0
  80. {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/test_cli_imports.py +0 -0
  81. {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/test_cmj_analysis.py +0 -0
  82. {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/test_cmj_kinematics.py +0 -0
  83. {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/test_com_estimation.py +0 -0
  84. {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/test_contact_detection.py +0 -0
  85. {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/test_filtering.py +0 -0
  86. {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/test_kinematics.py +0 -0
  87. {kinemotion-0.16.0 → kinemotion-0.17.1}/tests/test_polyorder.py +0 -0
@@ -0,0 +1,94 @@
1
+ name: Test & Quality
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ branches:
9
+ - main
10
+
11
+ jobs:
12
+ test:
13
+ name: Test (Python ${{ matrix.python-version }})
14
+ runs-on: ubuntu-latest
15
+ strategy:
16
+ fail-fast: false # Continue running other matrix jobs even if one fails
17
+ matrix:
18
+ python-version: ["3.10", "3.11", "3.12"]
19
+
20
+ steps:
21
+ - name: Checkout repository
22
+ uses: actions/checkout@v4
23
+ with:
24
+ fetch-depth: 0 # Shallow clones should be disabled for better SonarQube analysis
25
+
26
+ - name: Set up Python ${{ matrix.python-version }}
27
+ uses: actions/setup-python@v5
28
+ with:
29
+ python-version: ${{ matrix.python-version }}
30
+
31
+ - name: Install system dependencies
32
+ run: |
33
+ sudo apt-get update
34
+ sudo apt-get install -y \
35
+ libgl1-mesa-glx \
36
+ libglib2.0-0 \
37
+ libsm6 \
38
+ libxext6 \
39
+ libxrender-dev \
40
+ libgomp1 \
41
+ ffmpeg
42
+
43
+ - name: Set up uv
44
+ uses: astral-sh/setup-uv@v5
45
+ with:
46
+ version: "0.8.17"
47
+
48
+ - name: Install dependencies
49
+ run: uv sync
50
+
51
+ - name: Run linting
52
+ run: |
53
+ uv run ruff check --output-format=github
54
+ continue-on-error: true # Don't fail the build on linting errors
55
+
56
+ - name: Run type checking
57
+ run: |
58
+ uv run pyright
59
+ continue-on-error: true # Don't fail the build on type errors
60
+
61
+ - name: Run tests with coverage
62
+ run: |
63
+ uv run pytest --cov --cov-report=xml --cov-report=term
64
+
65
+ - name: Upload coverage artifact
66
+ if: matrix.python-version == '3.12'
67
+ uses: actions/upload-artifact@v4
68
+ with:
69
+ name: coverage-report
70
+ path: coverage.xml
71
+ retention-days: 5
72
+
73
+ sonarqube:
74
+ name: SonarQube Scan
75
+ needs: test
76
+ runs-on: ubuntu-latest
77
+ if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository
78
+
79
+ steps:
80
+ - name: Checkout repository
81
+ uses: actions/checkout@v4
82
+ with:
83
+ fetch-depth: 0 # Disable shallow clone for better analysis
84
+
85
+ - name: Download coverage artifact
86
+ uses: actions/download-artifact@v4
87
+ with:
88
+ name: coverage-report
89
+
90
+ - name: SonarQube Scan
91
+ uses: SonarSource/sonarcloud-github-action@master
92
+ env:
93
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
94
+ SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
@@ -7,6 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  <!-- version list -->
9
9
 
10
+ ## v0.17.1 (2025-11-10)
11
+
12
+ ### Bug Fixes
13
+
14
+ - **ci**: Add system dependencies for OpenCV and MediaPipe
15
+ ([`bb48049`](https://github.com/feniix/kinemotion/commit/bb480498e04689c3deac443fdc162efe1c59e1e2))
16
+
17
+
18
+ ## v0.17.0 (2025-11-10)
19
+
20
+ ### Features
21
+
22
+ - **ci**: Add SonarQube Cloud integration for coverage reporting
23
+ ([`cdc710f`](https://github.com/feniix/kinemotion/commit/cdc710f7a4c215e570eaa2b58a13f994ea7bae7c))
24
+
25
+
10
26
  ## v0.16.0 (2025-11-10)
11
27
 
12
28
 
@@ -29,6 +29,29 @@ uv run ruff check --fix && uv run pyright # Lint + type check
29
29
  - HTML: `htmlcov/index.html` (open in browser)
30
30
  - XML: `coverage.xml` (for CI integration)
31
31
 
32
+ **SonarQube Cloud Integration:**
33
+
34
+ The project integrates with SonarQube Cloud for continuous code quality and coverage tracking.
35
+
36
+ Setup (one-time):
37
+ 1. Visit [SonarCloud](https://sonarcloud.io/) and sign in with GitHub
38
+ 2. Import the `feniix/kinemotion` repository
39
+ 3. Generate a token: My Account > Security > Generate Tokens
40
+ 4. Add token to GitHub: Repository > Settings > Secrets and variables > Actions
41
+ - Name: `SONAR_TOKEN`
42
+ - Value: Your generated token
43
+
44
+ Configuration files:
45
+ - `sonar-project.properties` - SonarQube project configuration
46
+ - `.github/workflows/test.yml` - CI workflow with SonarQube scan
47
+
48
+ The workflow automatically:
49
+ - Runs tests with coverage on every PR and push to main
50
+ - Uploads coverage.xml to SonarQube Cloud
51
+ - Runs quality gate checks
52
+
53
+ View results: https://sonarcloud.io/project/overview?id=feniix_kinemotion
54
+
32
55
  ## Architecture
33
56
 
34
57
  ### Module Structure
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kinemotion
3
- Version: 0.16.0
3
+ Version: 0.17.1
4
4
  Summary: Video-based kinematic analysis for athletic performance
5
5
  Project-URL: Homepage, https://github.com/feniix/kinemotion
6
6
  Project-URL: Repository, https://github.com/feniix/kinemotion
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kinemotion"
3
- version = "0.16.0"
3
+ version = "0.17.1"
4
4
  description = "Video-based kinematic analysis for athletic performance"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10,<3.13"
@@ -0,0 +1,42 @@
1
+ # Project identification
2
+ sonar.projectKey=feniix_kinemotion
3
+ sonar.projectName=Kinemotion
4
+ sonar.projectVersion=0.16.0
5
+ sonar.organization=feniix
6
+
7
+ # Project metadata
8
+ sonar.projectDescription=Video-based kinematic analysis for athletic performance using MediaPipe pose tracking
9
+ sonar.links.homepage=https://github.com/feniix/kinemotion
10
+ sonar.links.scm=https://github.com/feniix/kinemotion
11
+ sonar.links.issue=https://github.com/feniix/kinemotion/issues
12
+ sonar.links.ci=https://github.com/feniix/kinemotion/actions
13
+
14
+ # Source code
15
+ sonar.sources=src/kinemotion
16
+ sonar.tests=tests
17
+
18
+ # Python version
19
+ sonar.python.version=3.10, 3.11, 3.12
20
+
21
+ # Encoding
22
+ sonar.sourceEncoding=UTF-8
23
+
24
+ # Coverage report path (generated by pytest-cov)
25
+ sonar.python.coverage.reportPaths=coverage.xml
26
+
27
+ # Exclusions
28
+ sonar.exclusions=\
29
+ **/__pycache__/**,\
30
+ **/*.pyc,\
31
+ **/venv/**,\
32
+ **/.venv/**,\
33
+ **/htmlcov/**,\
34
+ **/dist/**,\
35
+ **/build/**,\
36
+ **/*.egg-info/**
37
+
38
+ # Test exclusions (don't analyze test files as production code)
39
+ sonar.test.inclusions=tests/**/*.py
40
+
41
+ # Coverage exclusions (already covered by sonar.tests)
42
+ sonar.coverage.exclusions=tests/**/*.py
@@ -700,7 +700,7 @@ wheels = [
700
700
 
701
701
  [[package]]
702
702
  name = "kinemotion"
703
- version = "0.16.0"
703
+ version = "0.17.1"
704
704
  source = { editable = "." }
705
705
  dependencies = [
706
706
  { name = "click" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes