kinemotion 0.13.0__tar.gz → 0.14.0__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.
Potentially problematic release.
This version of kinemotion might be problematic. Click here for more details.
- kinemotion-0.14.0/.github/workflows/docs.yml +65 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/.gitignore +3 -0
- kinemotion-0.14.0/.readthedocs.yml +29 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/CHANGELOG.md +8 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/PKG-INFO +1 -1
- kinemotion-0.14.0/docs/api/cmj.md +87 -0
- kinemotion-0.14.0/docs/api/core.md +81 -0
- kinemotion-0.14.0/docs/api/dropjump.md +81 -0
- kinemotion-0.14.0/docs/api/overview.md +73 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/docs/guides/camera-setup.md +1 -1
- kinemotion-0.14.0/docs/index.md +54 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/docs/translations/es/camera-setup.md +1 -1
- kinemotion-0.14.0/mkdocs.yml +99 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/pyproject.toml +4 -1
- {kinemotion-0.13.0 → kinemotion-0.14.0}/uv.lock +253 -1
- {kinemotion-0.13.0 → kinemotion-0.14.0}/.dockerignore +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/.github/pull_request_template.md +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/.github/workflows/release.yml +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/.pre-commit-config.yaml +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/.tool-versions +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/CLAUDE.md +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/CODE_OF_CONDUCT.md +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/CONTRIBUTING.md +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/Dockerfile +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/GEMINI.md +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/LICENSE +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/README.md +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/SECURITY.md +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/docs/README.md +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/docs/development/errors-findings.md +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/docs/development/validation-plan.md +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/docs/guides/bulk-processing.md +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/docs/guides/cmj-guide.md +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/docs/reference/parameters.md +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/docs/reference/pose-systems.md +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/docs/technical/framerate.md +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/docs/technical/imu-metadata.md +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/docs/technical/real-time-analysis.md +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/docs/technical/triple-extension.md +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/examples/bulk/README.md +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/examples/bulk/bulk_processing.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/examples/bulk/simple_example.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/examples/programmatic_usage.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/samples/cmjs/README.md +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/src/kinemotion/__init__.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/src/kinemotion/api.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/src/kinemotion/cli.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/src/kinemotion/cmj/__init__.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/src/kinemotion/cmj/analysis.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/src/kinemotion/cmj/cli.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/src/kinemotion/cmj/debug_overlay.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/src/kinemotion/cmj/joint_angles.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/src/kinemotion/cmj/kinematics.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/src/kinemotion/core/__init__.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/src/kinemotion/core/auto_tuning.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/src/kinemotion/core/cli_utils.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/src/kinemotion/core/debug_overlay_utils.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/src/kinemotion/core/filtering.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/src/kinemotion/core/pose.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/src/kinemotion/core/smoothing.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/src/kinemotion/core/video_io.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/src/kinemotion/dropjump/__init__.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/src/kinemotion/dropjump/analysis.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/src/kinemotion/dropjump/cli.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/src/kinemotion/dropjump/debug_overlay.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/src/kinemotion/dropjump/kinematics.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/src/kinemotion/py.typed +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/tests/__init__.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/tests/test_adaptive_threshold.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/tests/test_api.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/tests/test_aspect_ratio.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/tests/test_cmj_analysis.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/tests/test_cmj_kinematics.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/tests/test_com_estimation.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/tests/test_contact_detection.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/tests/test_filtering.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/tests/test_kinematics.py +0 -0
- {kinemotion-0.13.0 → kinemotion-0.14.0}/tests/test_polyorder.py +0 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
name: Documentation
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
release:
|
|
9
|
+
types: [published]
|
|
10
|
+
workflow_dispatch:
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
build:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
|
|
18
|
+
- name: Set up Python
|
|
19
|
+
uses: actions/setup-python@v5
|
|
20
|
+
with:
|
|
21
|
+
python-version: "3.12"
|
|
22
|
+
|
|
23
|
+
- name: Install uv
|
|
24
|
+
uses: astral-sh/setup-uv@v3
|
|
25
|
+
with:
|
|
26
|
+
enable-cache: true
|
|
27
|
+
|
|
28
|
+
- name: Install dependencies
|
|
29
|
+
run: |
|
|
30
|
+
uv sync --frozen
|
|
31
|
+
|
|
32
|
+
- name: Build documentation
|
|
33
|
+
run: |
|
|
34
|
+
uv run mkdocs build --strict
|
|
35
|
+
|
|
36
|
+
- name: Upload docs artifact
|
|
37
|
+
uses: actions/upload-artifact@v4
|
|
38
|
+
with:
|
|
39
|
+
name: docs
|
|
40
|
+
path: site/
|
|
41
|
+
|
|
42
|
+
deploy:
|
|
43
|
+
if: github.event_name == 'release'
|
|
44
|
+
needs: build
|
|
45
|
+
runs-on: ubuntu-latest
|
|
46
|
+
permissions:
|
|
47
|
+
contents: write
|
|
48
|
+
steps:
|
|
49
|
+
- uses: actions/checkout@v4
|
|
50
|
+
|
|
51
|
+
- name: Set up Python
|
|
52
|
+
uses: actions/setup-python@v5
|
|
53
|
+
with:
|
|
54
|
+
python-version: "3.12"
|
|
55
|
+
|
|
56
|
+
- name: Install uv
|
|
57
|
+
uses: astral-sh/setup-uv@v3
|
|
58
|
+
|
|
59
|
+
- name: Install dependencies
|
|
60
|
+
run: |
|
|
61
|
+
uv sync --frozen
|
|
62
|
+
|
|
63
|
+
- name: Deploy to GitHub Pages
|
|
64
|
+
run: |
|
|
65
|
+
uv run mkdocs gh-deploy --force
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Read the Docs configuration file
|
|
2
|
+
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
|
3
|
+
|
|
4
|
+
version: 2
|
|
5
|
+
|
|
6
|
+
# Build documentation with MkDocs
|
|
7
|
+
mkdocs:
|
|
8
|
+
configuration: mkdocs.yml
|
|
9
|
+
fail_on_warning: false
|
|
10
|
+
|
|
11
|
+
# Build environment
|
|
12
|
+
build:
|
|
13
|
+
os: ubuntu-22.04
|
|
14
|
+
tools:
|
|
15
|
+
python: "3.12"
|
|
16
|
+
jobs:
|
|
17
|
+
post_install:
|
|
18
|
+
# Install uv for faster dependency resolution
|
|
19
|
+
- pip install uv
|
|
20
|
+
# Install project dependencies including mkdocs
|
|
21
|
+
- uv sync --frozen
|
|
22
|
+
|
|
23
|
+
# Python configuration
|
|
24
|
+
python:
|
|
25
|
+
install:
|
|
26
|
+
- method: pip
|
|
27
|
+
path: .
|
|
28
|
+
extra_requirements:
|
|
29
|
+
- dev
|
|
@@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
<!-- version list -->
|
|
9
9
|
|
|
10
|
+
## v0.14.0 (2025-11-06)
|
|
11
|
+
|
|
12
|
+
### Features
|
|
13
|
+
|
|
14
|
+
- **docs**: Add MkDocs documentation with auto-generated API reference
|
|
15
|
+
([`cb5cd31`](https://github.com/feniix/kinemotion/commit/cb5cd313e43c6ba0c95c8e77b5651e7c86c73902))
|
|
16
|
+
|
|
17
|
+
|
|
10
18
|
## v0.13.0 (2025-11-06)
|
|
11
19
|
|
|
12
20
|
### Documentation
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kinemotion
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.14.0
|
|
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
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# CMJ API
|
|
2
|
+
|
|
3
|
+
The CMJ API provides functions for analyzing counter movement jump videos and extracting kinematic metrics including triple extension analysis.
|
|
4
|
+
|
|
5
|
+
## Quick Example
|
|
6
|
+
|
|
7
|
+
```python
|
|
8
|
+
from kinemotion import process_cmj_video
|
|
9
|
+
|
|
10
|
+
metrics = process_cmj_video(
|
|
11
|
+
video_path="cmj.mp4",
|
|
12
|
+
output_path="debug.mp4", # optional
|
|
13
|
+
smoothing=True
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
print(f"Jump height: {metrics.jump_height:.2f}m")
|
|
17
|
+
print(f"Flight time: {metrics.flight_time:.3f}s")
|
|
18
|
+
print(f"Countermovement depth: {metrics.countermovement_depth:.3f}m")
|
|
19
|
+
print(f"Triple extension: {metrics.triple_extension_percentage:.1f}%")
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Main Functions
|
|
23
|
+
|
|
24
|
+
::: kinemotion.api.process_cmj_video
|
|
25
|
+
options:
|
|
26
|
+
show_root_heading: true
|
|
27
|
+
show_source: false
|
|
28
|
+
|
|
29
|
+
::: kinemotion.api.process_cmj_videos_bulk
|
|
30
|
+
options:
|
|
31
|
+
show_root_heading: true
|
|
32
|
+
show_source: false
|
|
33
|
+
|
|
34
|
+
## Configuration
|
|
35
|
+
|
|
36
|
+
::: kinemotion.api.CMJVideoConfig
|
|
37
|
+
options:
|
|
38
|
+
show_root_heading: true
|
|
39
|
+
show_source: false
|
|
40
|
+
|
|
41
|
+
## Results
|
|
42
|
+
|
|
43
|
+
::: kinemotion.api.CMJVideoResult
|
|
44
|
+
options:
|
|
45
|
+
show_root_heading: true
|
|
46
|
+
show_source: false
|
|
47
|
+
|
|
48
|
+
## Metrics
|
|
49
|
+
|
|
50
|
+
::: kinemotion.cmj.kinematics.CMJMetrics
|
|
51
|
+
options:
|
|
52
|
+
show_root_heading: true
|
|
53
|
+
show_source: false
|
|
54
|
+
|
|
55
|
+
## Key Differences from Drop Jump
|
|
56
|
+
|
|
57
|
+
### No Calibration Required
|
|
58
|
+
|
|
59
|
+
Unlike drop jumps, CMJ analysis doesn't require a `drop_height` parameter. All measurements are relative to the starting position.
|
|
60
|
+
|
|
61
|
+
### Backward Search Algorithm
|
|
62
|
+
|
|
63
|
+
CMJ detection uses a backward search algorithm starting from the peak height, making it more robust than forward search.
|
|
64
|
+
|
|
65
|
+
### Signed Velocity
|
|
66
|
+
|
|
67
|
+
CMJ analysis uses signed velocity (direction matters) to distinguish upward vs downward motion phases.
|
|
68
|
+
|
|
69
|
+
### Lateral View Required
|
|
70
|
+
|
|
71
|
+
CMJ analysis requires a lateral (side) view for accurate depth and triple extension measurements. Front view will not work due to parallax errors.
|
|
72
|
+
|
|
73
|
+
## Triple Extension Analysis
|
|
74
|
+
|
|
75
|
+
The CMJ API includes detailed triple extension analysis:
|
|
76
|
+
|
|
77
|
+
```python
|
|
78
|
+
metrics = process_cmj_video("cmj.mp4")
|
|
79
|
+
|
|
80
|
+
# Triple extension metrics
|
|
81
|
+
print(f"Hip extension: {metrics.hip_extension_angle:.1f}°")
|
|
82
|
+
print(f"Knee extension: {metrics.knee_extension_angle:.1f}°")
|
|
83
|
+
print(f"Ankle plantar flexion: {metrics.ankle_plantar_flexion_angle:.1f}°")
|
|
84
|
+
print(f"Overall triple extension: {metrics.triple_extension_percentage:.1f}%")
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
See [Triple Extension Technical Documentation](../technical/triple-extension.md) for biomechanics details.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Core Utilities
|
|
2
|
+
|
|
3
|
+
Lower-level utilities for advanced usage and custom analysis pipelines.
|
|
4
|
+
|
|
5
|
+
## Pose Detection
|
|
6
|
+
|
|
7
|
+
::: kinemotion.core.pose.PoseTracker
|
|
8
|
+
options:
|
|
9
|
+
show_root_heading: true
|
|
10
|
+
show_source: false
|
|
11
|
+
|
|
12
|
+
::: kinemotion.core.pose.compute_center_of_mass
|
|
13
|
+
options:
|
|
14
|
+
show_root_heading: true
|
|
15
|
+
show_source: false
|
|
16
|
+
|
|
17
|
+
## Smoothing & Filtering
|
|
18
|
+
|
|
19
|
+
::: kinemotion.core.smoothing.smooth_landmarks
|
|
20
|
+
options:
|
|
21
|
+
show_root_heading: true
|
|
22
|
+
show_source: false
|
|
23
|
+
|
|
24
|
+
::: kinemotion.core.smoothing.smooth_landmarks_advanced
|
|
25
|
+
options:
|
|
26
|
+
show_root_heading: true
|
|
27
|
+
show_source: false
|
|
28
|
+
|
|
29
|
+
## Video Processing
|
|
30
|
+
|
|
31
|
+
::: kinemotion.core.video_io.VideoProcessor
|
|
32
|
+
options:
|
|
33
|
+
show_root_heading: true
|
|
34
|
+
show_source: false
|
|
35
|
+
|
|
36
|
+
## Auto-Tuning
|
|
37
|
+
|
|
38
|
+
::: kinemotion.core.auto_tuning.auto_tune_parameters
|
|
39
|
+
options:
|
|
40
|
+
show_root_heading: true
|
|
41
|
+
show_source: false
|
|
42
|
+
|
|
43
|
+
::: kinemotion.core.auto_tuning.analyze_video_sample
|
|
44
|
+
options:
|
|
45
|
+
show_root_heading: true
|
|
46
|
+
show_source: false
|
|
47
|
+
|
|
48
|
+
::: kinemotion.core.auto_tuning.QualityPreset
|
|
49
|
+
options:
|
|
50
|
+
show_root_heading: true
|
|
51
|
+
show_source: false
|
|
52
|
+
|
|
53
|
+
## Usage Example
|
|
54
|
+
|
|
55
|
+
```python
|
|
56
|
+
from kinemotion.core.pose import PoseTracker
|
|
57
|
+
from kinemotion.core.smoothing import smooth_landmarks
|
|
58
|
+
from kinemotion.core.video_io import VideoProcessor
|
|
59
|
+
|
|
60
|
+
# Initialize pose tracker
|
|
61
|
+
tracker = PoseTracker(
|
|
62
|
+
min_detection_confidence=0.5,
|
|
63
|
+
min_tracking_confidence=0.5
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
# Process video
|
|
67
|
+
video = VideoProcessor("video.mp4")
|
|
68
|
+
landmarks = []
|
|
69
|
+
|
|
70
|
+
for frame in video:
|
|
71
|
+
result = tracker.process_frame(frame)
|
|
72
|
+
if result:
|
|
73
|
+
landmarks.append(result)
|
|
74
|
+
|
|
75
|
+
# Apply smoothing
|
|
76
|
+
smoothed = smooth_landmarks(
|
|
77
|
+
landmarks,
|
|
78
|
+
window_length=13,
|
|
79
|
+
polyorder=3
|
|
80
|
+
)
|
|
81
|
+
```
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Drop Jump API
|
|
2
|
+
|
|
3
|
+
The drop jump API provides functions for analyzing drop jump videos and extracting kinematic metrics.
|
|
4
|
+
|
|
5
|
+
## Quick Example
|
|
6
|
+
|
|
7
|
+
```python
|
|
8
|
+
from kinemotion import process_video
|
|
9
|
+
|
|
10
|
+
metrics = process_video(
|
|
11
|
+
video_path="dropjump.mp4",
|
|
12
|
+
drop_height=0.40, # meters
|
|
13
|
+
output_path="debug.mp4", # optional
|
|
14
|
+
smoothing=True
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
print(f"Ground contact time: {metrics.ground_contact_time:.3f}s")
|
|
18
|
+
print(f"Flight time: {metrics.flight_time:.3f}s")
|
|
19
|
+
print(f"RSI: {metrics.reactive_strength_index:.2f}")
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Main Functions
|
|
23
|
+
|
|
24
|
+
::: kinemotion.api.process_video
|
|
25
|
+
options:
|
|
26
|
+
show_root_heading: true
|
|
27
|
+
show_source: false
|
|
28
|
+
|
|
29
|
+
::: kinemotion.api.process_videos_bulk
|
|
30
|
+
options:
|
|
31
|
+
show_root_heading: true
|
|
32
|
+
show_source: false
|
|
33
|
+
|
|
34
|
+
## Configuration
|
|
35
|
+
|
|
36
|
+
::: kinemotion.api.VideoConfig
|
|
37
|
+
options:
|
|
38
|
+
show_root_heading: true
|
|
39
|
+
show_source: false
|
|
40
|
+
|
|
41
|
+
## Results
|
|
42
|
+
|
|
43
|
+
::: kinemotion.api.VideoResult
|
|
44
|
+
options:
|
|
45
|
+
show_root_heading: true
|
|
46
|
+
show_source: false
|
|
47
|
+
|
|
48
|
+
## Metrics
|
|
49
|
+
|
|
50
|
+
::: kinemotion.dropjump.kinematics.DropJumpMetrics
|
|
51
|
+
options:
|
|
52
|
+
show_root_heading: true
|
|
53
|
+
show_source: false
|
|
54
|
+
|
|
55
|
+
## Key Parameters
|
|
56
|
+
|
|
57
|
+
### drop_height
|
|
58
|
+
|
|
59
|
+
**Required.** The height of the drop box in meters. This is critical for accurate velocity calculations.
|
|
60
|
+
|
|
61
|
+
```python
|
|
62
|
+
metrics = process_video("video.mp4", drop_height=0.40) # 40cm box
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### smoothing
|
|
66
|
+
|
|
67
|
+
Apply Savitzky-Golay smoothing to landmark positions before analysis. Reduces noise but may slightly delay event detection.
|
|
68
|
+
|
|
69
|
+
Default: `True`
|
|
70
|
+
|
|
71
|
+
### output_path
|
|
72
|
+
|
|
73
|
+
Path to write debug video with overlay visualization. If not provided, no debug video is created.
|
|
74
|
+
|
|
75
|
+
```python
|
|
76
|
+
metrics = process_video(
|
|
77
|
+
"video.mp4",
|
|
78
|
+
drop_height=0.40,
|
|
79
|
+
output_path="debug.mp4"
|
|
80
|
+
)
|
|
81
|
+
```
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# API Overview
|
|
2
|
+
|
|
3
|
+
Kinemotion provides a Python API for video-based kinematic analysis. The API is organized around two main jump types:
|
|
4
|
+
|
|
5
|
+
## Main Functions
|
|
6
|
+
|
|
7
|
+
### Drop Jump Analysis
|
|
8
|
+
|
|
9
|
+
Process drop jump videos and extract kinematic metrics:
|
|
10
|
+
|
|
11
|
+
- `process_video()` - Analyze a single drop jump video
|
|
12
|
+
- `process_videos_bulk()` - Batch process multiple drop jump videos
|
|
13
|
+
- `VideoConfig` - Configuration for drop jump analysis
|
|
14
|
+
- `VideoResult` - Results from drop jump analysis
|
|
15
|
+
- `DropJumpMetrics` - Kinematic metrics for drop jumps
|
|
16
|
+
|
|
17
|
+
See [Drop Jump API](dropjump.md) for detailed documentation.
|
|
18
|
+
|
|
19
|
+
### CMJ Analysis
|
|
20
|
+
|
|
21
|
+
Process counter movement jump videos and extract kinematic metrics:
|
|
22
|
+
|
|
23
|
+
- `process_cmj_video()` - Analyze a single CMJ video
|
|
24
|
+
- `process_cmj_videos_bulk()` - Batch process multiple CMJ videos
|
|
25
|
+
- `CMJVideoConfig` - Configuration for CMJ analysis
|
|
26
|
+
- `CMJVideoResult` - Results from CMJ analysis
|
|
27
|
+
- `CMJMetrics` - Kinematic metrics for CMJs
|
|
28
|
+
|
|
29
|
+
See [CMJ API](cmj.md) for detailed documentation.
|
|
30
|
+
|
|
31
|
+
## Basic Usage
|
|
32
|
+
|
|
33
|
+
```python
|
|
34
|
+
from kinemotion import process_video, process_cmj_video
|
|
35
|
+
|
|
36
|
+
# Drop jump analysis
|
|
37
|
+
drop_metrics = process_video("dropjump.mp4", drop_height=0.40)
|
|
38
|
+
|
|
39
|
+
# CMJ analysis
|
|
40
|
+
cmj_metrics = process_cmj_video("cmj.mp4")
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Batch Processing
|
|
44
|
+
|
|
45
|
+
```python
|
|
46
|
+
from kinemotion import process_videos_bulk, process_cmj_videos_bulk
|
|
47
|
+
|
|
48
|
+
# Batch drop jump analysis
|
|
49
|
+
results = process_videos_bulk(
|
|
50
|
+
video_paths=["video1.mp4", "video2.mp4"],
|
|
51
|
+
drop_height=0.40,
|
|
52
|
+
output_dir="results/",
|
|
53
|
+
workers=4
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
# Batch CMJ analysis
|
|
57
|
+
cmj_results = process_cmj_videos_bulk(
|
|
58
|
+
video_paths=["cmj1.mp4", "cmj2.mp4"],
|
|
59
|
+
output_dir="results/",
|
|
60
|
+
workers=4
|
|
61
|
+
)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Core Utilities
|
|
65
|
+
|
|
66
|
+
For advanced usage, you can access lower-level utilities:
|
|
67
|
+
|
|
68
|
+
- Pose detection and tracking
|
|
69
|
+
- Velocity computation
|
|
70
|
+
- Smoothing and filtering
|
|
71
|
+
- Video I/O with rotation handling
|
|
72
|
+
|
|
73
|
+
See [Core Utilities](core.md) for detailed documentation.
|
|
@@ -941,7 +941,7 @@ ______________________________________________________________________
|
|
|
941
941
|
- **[Pose Systems Quick Reference](../reference/pose-systems.md)** - System comparison guide
|
|
942
942
|
- [CLI Parameters Guide](../reference/parameters.md) - Analysis parameters
|
|
943
943
|
- [CMJ Guide](cmj-guide.md) - Counter-movement jump specifics
|
|
944
|
-
-
|
|
944
|
+
- [CLAUDE.md](https://github.com/feniix/kinemotion/blob/main/CLAUDE.md) - Complete project documentation (GitHub)
|
|
945
945
|
|
|
946
946
|
______________________________________________________________________
|
|
947
947
|
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Quick Start
|
|
2
|
+
|
|
3
|
+
Kinemotion provides video-based kinematic analysis for athletic performance using MediaPipe pose tracking.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pip install kinemotion
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Supported Jump Types
|
|
12
|
+
|
|
13
|
+
- **Drop Jump**: Ground contact time, flight time, reactive strength index
|
|
14
|
+
- **Counter Movement Jump (CMJ)**: Jump height, flight time, countermovement depth, triple extension
|
|
15
|
+
|
|
16
|
+
## Quick Examples
|
|
17
|
+
|
|
18
|
+
### Drop Jump Analysis
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
kinemotion dropjump-analyze video.mp4 --drop-height 0.40
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Or via Python API:
|
|
25
|
+
|
|
26
|
+
```python
|
|
27
|
+
from kinemotion import process_video
|
|
28
|
+
|
|
29
|
+
metrics = process_video("video.mp4", drop_height=0.40)
|
|
30
|
+
print(f"Ground contact time: {metrics.ground_contact_time:.3f}s")
|
|
31
|
+
print(f"RSI: {metrics.reactive_strength_index:.2f}")
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### CMJ Analysis
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
kinemotion cmj-analyze video.mp4
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Or via Python API:
|
|
41
|
+
|
|
42
|
+
```python
|
|
43
|
+
from kinemotion import process_cmj_video
|
|
44
|
+
|
|
45
|
+
metrics = process_cmj_video("video.mp4")
|
|
46
|
+
print(f"Jump height: {metrics.jump_height:.2f}m")
|
|
47
|
+
print(f"Flight time: {metrics.flight_time:.3f}s")
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Next Steps
|
|
51
|
+
|
|
52
|
+
- [CMJ Analysis Guide](guides/cmj-guide.md) - Detailed guide for CMJ analysis
|
|
53
|
+
- [Camera Setup](guides/camera-setup.md) - How to set up your camera for best results
|
|
54
|
+
- [API Reference](api/overview.md) - Complete API documentation
|
|
@@ -941,7 +941,7 @@ ______________________________________________________________________
|
|
|
941
941
|
- **[Referencia Rápida de Sistemas de Pose](../../reference/pose-systems.md)** - Guía de comparación de sistemas
|
|
942
942
|
- [Guía de Parámetros CLI](../../reference/parameters.md) - Parámetros de análisis
|
|
943
943
|
- [Guía CMJ](../../guides/cmj-guide.md) - Especificaciones de salto con contramovimiento
|
|
944
|
-
- [CLAUDE.md](
|
|
944
|
+
- [CLAUDE.md](https://github.com/feniix/kinemotion/blob/main/CLAUDE.md) principal - Documentación completa del proyecto (GitHub)
|
|
945
945
|
|
|
946
946
|
______________________________________________________________________
|
|
947
947
|
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
site_name: Kinemotion
|
|
2
|
+
site_description: Video-based kinematic analysis for athletic performance
|
|
3
|
+
site_author: Sebastian Otaegui
|
|
4
|
+
site_url: https://kinemotion.readthedocs.io
|
|
5
|
+
repo_url: https://github.com/feniix/kinemotion
|
|
6
|
+
repo_name: feniix/kinemotion
|
|
7
|
+
edit_uri: edit/main/docs/
|
|
8
|
+
|
|
9
|
+
theme:
|
|
10
|
+
name: material
|
|
11
|
+
palette:
|
|
12
|
+
# Light mode
|
|
13
|
+
- scheme: default
|
|
14
|
+
primary: indigo
|
|
15
|
+
accent: indigo
|
|
16
|
+
toggle:
|
|
17
|
+
icon: material/brightness-7
|
|
18
|
+
name: Switch to dark mode
|
|
19
|
+
# Dark mode
|
|
20
|
+
- scheme: slate
|
|
21
|
+
primary: indigo
|
|
22
|
+
accent: indigo
|
|
23
|
+
toggle:
|
|
24
|
+
icon: material/brightness-4
|
|
25
|
+
name: Switch to light mode
|
|
26
|
+
features:
|
|
27
|
+
- navigation.tabs
|
|
28
|
+
- navigation.sections
|
|
29
|
+
- navigation.top
|
|
30
|
+
- navigation.tracking
|
|
31
|
+
- search.suggest
|
|
32
|
+
- search.highlight
|
|
33
|
+
- content.code.copy
|
|
34
|
+
- content.code.annotate
|
|
35
|
+
|
|
36
|
+
plugins:
|
|
37
|
+
- search
|
|
38
|
+
- mkdocstrings:
|
|
39
|
+
handlers:
|
|
40
|
+
python:
|
|
41
|
+
options:
|
|
42
|
+
docstring_style: google
|
|
43
|
+
show_source: true
|
|
44
|
+
show_root_heading: true
|
|
45
|
+
show_root_full_path: false
|
|
46
|
+
show_symbol_type_heading: true
|
|
47
|
+
show_symbol_type_toc: true
|
|
48
|
+
signature_crossrefs: true
|
|
49
|
+
separate_signature: true
|
|
50
|
+
merge_init_into_class: true
|
|
51
|
+
|
|
52
|
+
markdown_extensions:
|
|
53
|
+
- admonition
|
|
54
|
+
- pymdownx.details
|
|
55
|
+
- pymdownx.superfences
|
|
56
|
+
- pymdownx.highlight:
|
|
57
|
+
anchor_linenums: true
|
|
58
|
+
- pymdownx.inlinehilite
|
|
59
|
+
- pymdownx.snippets
|
|
60
|
+
- pymdownx.tabbed:
|
|
61
|
+
alternate_style: true
|
|
62
|
+
- tables
|
|
63
|
+
- toc:
|
|
64
|
+
permalink: true
|
|
65
|
+
|
|
66
|
+
nav:
|
|
67
|
+
- Home: index.md
|
|
68
|
+
- Guides:
|
|
69
|
+
- CMJ Analysis: guides/cmj-guide.md
|
|
70
|
+
- Camera Setup: guides/camera-setup.md
|
|
71
|
+
- Bulk Processing: guides/bulk-processing.md
|
|
72
|
+
- Reference:
|
|
73
|
+
- CLI Parameters: reference/parameters.md
|
|
74
|
+
- Pose Systems: reference/pose-systems.md
|
|
75
|
+
- API Reference:
|
|
76
|
+
- Overview: api/overview.md
|
|
77
|
+
- Drop Jump API: api/dropjump.md
|
|
78
|
+
- CMJ API: api/cmj.md
|
|
79
|
+
- Core Utilities: api/core.md
|
|
80
|
+
- Technical:
|
|
81
|
+
- Triple Extension: technical/triple-extension.md
|
|
82
|
+
- Framerate: technical/framerate.md
|
|
83
|
+
- Real-time Analysis: technical/real-time-analysis.md
|
|
84
|
+
- IMU Metadata: technical/imu-metadata.md
|
|
85
|
+
- Research:
|
|
86
|
+
- Sports Biomechanics: research/sports-biomechanics-pose-estimation.md
|
|
87
|
+
- Development:
|
|
88
|
+
- Validation Plan: development/validation-plan.md
|
|
89
|
+
- Error Findings: development/errors-findings.md
|
|
90
|
+
- Translations:
|
|
91
|
+
- Español:
|
|
92
|
+
- Configuración de Cámara: translations/es/camera-setup.md
|
|
93
|
+
|
|
94
|
+
# Exclude files from the documentation build
|
|
95
|
+
exclude_docs: |
|
|
96
|
+
README.md
|
|
97
|
+
|
|
98
|
+
watch:
|
|
99
|
+
- src/kinemotion
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "kinemotion"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.14.0"
|
|
4
4
|
description = "Video-based kinematic analysis for athletic performance"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.10,<3.13"
|
|
@@ -55,6 +55,9 @@ dev = [
|
|
|
55
55
|
"pyright>=1.1.380",
|
|
56
56
|
"pre-commit>=3.6.0",
|
|
57
57
|
"python-semantic-release>=9.8.2",
|
|
58
|
+
"mkdocs>=1.5.0",
|
|
59
|
+
"mkdocs-material>=9.5.0",
|
|
60
|
+
"mkdocstrings[python]>=0.24.0",
|
|
58
61
|
]
|
|
59
62
|
|
|
60
63
|
|
|
@@ -40,6 +40,27 @@ wheels = [
|
|
|
40
40
|
{ url = "https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373", size = 67615, upload-time = "2025-10-06T13:54:43.17Z" },
|
|
41
41
|
]
|
|
42
42
|
|
|
43
|
+
[[package]]
|
|
44
|
+
name = "babel"
|
|
45
|
+
version = "2.17.0"
|
|
46
|
+
source = { registry = "https://pypi.org/simple" }
|
|
47
|
+
sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852, upload-time = "2025-02-01T15:17:41.026Z" }
|
|
48
|
+
wheels = [
|
|
49
|
+
{ url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload-time = "2025-02-01T15:17:37.39Z" },
|
|
50
|
+
]
|
|
51
|
+
|
|
52
|
+
[[package]]
|
|
53
|
+
name = "backrefs"
|
|
54
|
+
version = "5.9"
|
|
55
|
+
source = { registry = "https://pypi.org/simple" }
|
|
56
|
+
sdist = { url = "https://files.pythonhosted.org/packages/eb/a7/312f673df6a79003279e1f55619abbe7daebbb87c17c976ddc0345c04c7b/backrefs-5.9.tar.gz", hash = "sha256:808548cb708d66b82ee231f962cb36faaf4f2baab032f2fbb783e9c2fdddaa59", size = 5765857, upload-time = "2025-06-22T19:34:13.97Z" }
|
|
57
|
+
wheels = [
|
|
58
|
+
{ url = "https://files.pythonhosted.org/packages/19/4d/798dc1f30468134906575156c089c492cf79b5a5fd373f07fe26c4d046bf/backrefs-5.9-py310-none-any.whl", hash = "sha256:db8e8ba0e9de81fcd635f440deab5ae5f2591b54ac1ebe0550a2ca063488cd9f", size = 380267, upload-time = "2025-06-22T19:34:05.252Z" },
|
|
59
|
+
{ url = "https://files.pythonhosted.org/packages/55/07/f0b3375bf0d06014e9787797e6b7cc02b38ac9ff9726ccfe834d94e9991e/backrefs-5.9-py311-none-any.whl", hash = "sha256:6907635edebbe9b2dc3de3a2befff44d74f30a4562adbb8b36f21252ea19c5cf", size = 392072, upload-time = "2025-06-22T19:34:06.743Z" },
|
|
60
|
+
{ url = "https://files.pythonhosted.org/packages/9d/12/4f345407259dd60a0997107758ba3f221cf89a9b5a0f8ed5b961aef97253/backrefs-5.9-py312-none-any.whl", hash = "sha256:7fdf9771f63e6028d7fee7e0c497c81abda597ea45d6b8f89e8ad76994f5befa", size = 397947, upload-time = "2025-06-22T19:34:08.172Z" },
|
|
61
|
+
{ url = "https://files.pythonhosted.org/packages/41/ff/392bff89415399a979be4a65357a41d92729ae8580a66073d8ec8d810f98/backrefs-5.9-py39-none-any.whl", hash = "sha256:f48ee18f6252b8f5777a22a00a09a85de0ca931658f1dd96d4406a34f3748c60", size = 380265, upload-time = "2025-06-22T19:34:12.405Z" },
|
|
62
|
+
]
|
|
63
|
+
|
|
43
64
|
[[package]]
|
|
44
65
|
name = "black"
|
|
45
66
|
version = "25.9.0"
|
|
@@ -427,6 +448,18 @@ wheels = [
|
|
|
427
448
|
{ url = "https://files.pythonhosted.org/packages/c7/93/0dd45cd283c32dea1545151d8c3637b4b8c53cdb3a625aeb2885b184d74d/fonttools-4.60.1-py3-none-any.whl", hash = "sha256:906306ac7afe2156fcf0042173d6ebbb05416af70f6b370967b47f8f00103bbb", size = 1143175, upload-time = "2025-09-29T21:13:24.134Z" },
|
|
428
449
|
]
|
|
429
450
|
|
|
451
|
+
[[package]]
|
|
452
|
+
name = "ghp-import"
|
|
453
|
+
version = "2.1.0"
|
|
454
|
+
source = { registry = "https://pypi.org/simple" }
|
|
455
|
+
dependencies = [
|
|
456
|
+
{ name = "python-dateutil" },
|
|
457
|
+
]
|
|
458
|
+
sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload-time = "2022-05-02T15:47:16.11Z" }
|
|
459
|
+
wheels = [
|
|
460
|
+
{ url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload-time = "2022-05-02T15:47:14.552Z" },
|
|
461
|
+
]
|
|
462
|
+
|
|
430
463
|
[[package]]
|
|
431
464
|
name = "gitdb"
|
|
432
465
|
version = "4.0.12"
|
|
@@ -451,6 +484,18 @@ wheels = [
|
|
|
451
484
|
{ url = "https://files.pythonhosted.org/packages/01/61/d4b89fec821f72385526e1b9d9a3a0385dda4a72b206d28049e2c7cd39b8/gitpython-3.1.45-py3-none-any.whl", hash = "sha256:8908cb2e02fb3b93b7eb0f2827125cb699869470432cc885f019b8fd0fccff77", size = 208168, upload-time = "2025-07-24T03:45:52.517Z" },
|
|
452
485
|
]
|
|
453
486
|
|
|
487
|
+
[[package]]
|
|
488
|
+
name = "griffe"
|
|
489
|
+
version = "1.14.0"
|
|
490
|
+
source = { registry = "https://pypi.org/simple" }
|
|
491
|
+
dependencies = [
|
|
492
|
+
{ name = "colorama" },
|
|
493
|
+
]
|
|
494
|
+
sdist = { url = "https://files.pythonhosted.org/packages/ec/d7/6c09dd7ce4c7837e4cdb11dce980cb45ae3cd87677298dc3b781b6bce7d3/griffe-1.14.0.tar.gz", hash = "sha256:9d2a15c1eca966d68e00517de5d69dd1bc5c9f2335ef6c1775362ba5b8651a13", size = 424684, upload-time = "2025-09-05T15:02:29.167Z" }
|
|
495
|
+
wheels = [
|
|
496
|
+
{ url = "https://files.pythonhosted.org/packages/2a/b1/9ff6578d789a89812ff21e4e0f80ffae20a65d5dd84e7a17873fe3b365be/griffe-1.14.0-py3-none-any.whl", hash = "sha256:0e9d52832cccf0f7188cfe585ba962d2674b241c01916d780925df34873bceb0", size = 144439, upload-time = "2025-09-05T15:02:27.511Z" },
|
|
497
|
+
]
|
|
498
|
+
|
|
454
499
|
[[package]]
|
|
455
500
|
name = "identify"
|
|
456
501
|
version = "2.6.15"
|
|
@@ -603,7 +648,7 @@ wheels = [
|
|
|
603
648
|
|
|
604
649
|
[[package]]
|
|
605
650
|
name = "kinemotion"
|
|
606
|
-
version = "0.
|
|
651
|
+
version = "0.14.0"
|
|
607
652
|
source = { editable = "." }
|
|
608
653
|
dependencies = [
|
|
609
654
|
{ name = "click" },
|
|
@@ -617,6 +662,9 @@ dependencies = [
|
|
|
617
662
|
[package.dev-dependencies]
|
|
618
663
|
dev = [
|
|
619
664
|
{ name = "black" },
|
|
665
|
+
{ name = "mkdocs" },
|
|
666
|
+
{ name = "mkdocs-material" },
|
|
667
|
+
{ name = "mkdocstrings", extra = ["python"] },
|
|
620
668
|
{ name = "pre-commit" },
|
|
621
669
|
{ name = "pyright" },
|
|
622
670
|
{ name = "pytest" },
|
|
@@ -636,6 +684,9 @@ requires-dist = [
|
|
|
636
684
|
[package.metadata.requires-dev]
|
|
637
685
|
dev = [
|
|
638
686
|
{ name = "black", specifier = ">=23.12.0" },
|
|
687
|
+
{ name = "mkdocs", specifier = ">=1.5.0" },
|
|
688
|
+
{ name = "mkdocs-material", specifier = ">=9.5.0" },
|
|
689
|
+
{ name = "mkdocstrings", extras = ["python"], specifier = ">=0.24.0" },
|
|
639
690
|
{ name = "pre-commit", specifier = ">=3.6.0" },
|
|
640
691
|
{ name = "pyright", specifier = ">=1.1.380" },
|
|
641
692
|
{ name = "pytest", specifier = ">=7.4.3" },
|
|
@@ -700,6 +751,15 @@ wheels = [
|
|
|
700
751
|
{ url = "https://files.pythonhosted.org/packages/da/e9/0d4add7873a73e462aeb45c036a2dead2562b825aa46ba326727b3f31016/kiwisolver-1.4.9-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:fb940820c63a9590d31d88b815e7a3aa5915cad3ce735ab45f0c730b39547de1", size = 73929, upload-time = "2025-08-10T21:27:48.236Z" },
|
|
701
752
|
]
|
|
702
753
|
|
|
754
|
+
[[package]]
|
|
755
|
+
name = "markdown"
|
|
756
|
+
version = "3.10"
|
|
757
|
+
source = { registry = "https://pypi.org/simple" }
|
|
758
|
+
sdist = { url = "https://files.pythonhosted.org/packages/7d/ab/7dd27d9d863b3376fcf23a5a13cb5d024aed1db46f963f1b5735ae43b3be/markdown-3.10.tar.gz", hash = "sha256:37062d4f2aa4b2b6b32aefb80faa300f82cc790cb949a35b8caede34f2b68c0e", size = 364931, upload-time = "2025-11-03T19:51:15.007Z" }
|
|
759
|
+
wheels = [
|
|
760
|
+
{ url = "https://files.pythonhosted.org/packages/70/81/54e3ce63502cd085a0c556652a4e1b919c45a446bd1e5300e10c44c8c521/markdown-3.10-py3-none-any.whl", hash = "sha256:b5b99d6951e2e4948d939255596523444c0e677c669700b1d17aa4a8a464cb7c", size = 107678, upload-time = "2025-11-03T19:51:13.887Z" },
|
|
761
|
+
]
|
|
762
|
+
|
|
703
763
|
[[package]]
|
|
704
764
|
name = "markdown-it-py"
|
|
705
765
|
version = "4.0.0"
|
|
@@ -842,6 +902,135 @@ wheels = [
|
|
|
842
902
|
{ url = "https://files.pythonhosted.org/packages/b7/79/b77808f8195f229ef0c15875540dfdd36724748a4b3de53d993f23336839/mediapipe-0.10.21-cp312-cp312-win_amd64.whl", hash = "sha256:d07b5e69308411161286ea4e48be2ea3e9ab62745143fcb0cb4acced0517e341", size = 50967082, upload-time = "2025-02-06T19:07:26.979Z" },
|
|
843
903
|
]
|
|
844
904
|
|
|
905
|
+
[[package]]
|
|
906
|
+
name = "mergedeep"
|
|
907
|
+
version = "1.3.4"
|
|
908
|
+
source = { registry = "https://pypi.org/simple" }
|
|
909
|
+
sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload-time = "2021-02-05T18:55:30.623Z" }
|
|
910
|
+
wheels = [
|
|
911
|
+
{ url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload-time = "2021-02-05T18:55:29.583Z" },
|
|
912
|
+
]
|
|
913
|
+
|
|
914
|
+
[[package]]
|
|
915
|
+
name = "mkdocs"
|
|
916
|
+
version = "1.6.1"
|
|
917
|
+
source = { registry = "https://pypi.org/simple" }
|
|
918
|
+
dependencies = [
|
|
919
|
+
{ name = "click" },
|
|
920
|
+
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
|
921
|
+
{ name = "ghp-import" },
|
|
922
|
+
{ name = "jinja2" },
|
|
923
|
+
{ name = "markdown" },
|
|
924
|
+
{ name = "markupsafe" },
|
|
925
|
+
{ name = "mergedeep" },
|
|
926
|
+
{ name = "mkdocs-get-deps" },
|
|
927
|
+
{ name = "packaging" },
|
|
928
|
+
{ name = "pathspec" },
|
|
929
|
+
{ name = "pyyaml" },
|
|
930
|
+
{ name = "pyyaml-env-tag" },
|
|
931
|
+
{ name = "watchdog" },
|
|
932
|
+
]
|
|
933
|
+
sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload-time = "2024-08-30T12:24:06.899Z" }
|
|
934
|
+
wheels = [
|
|
935
|
+
{ url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload-time = "2024-08-30T12:24:05.054Z" },
|
|
936
|
+
]
|
|
937
|
+
|
|
938
|
+
[[package]]
|
|
939
|
+
name = "mkdocs-autorefs"
|
|
940
|
+
version = "1.4.3"
|
|
941
|
+
source = { registry = "https://pypi.org/simple" }
|
|
942
|
+
dependencies = [
|
|
943
|
+
{ name = "markdown" },
|
|
944
|
+
{ name = "markupsafe" },
|
|
945
|
+
{ name = "mkdocs" },
|
|
946
|
+
]
|
|
947
|
+
sdist = { url = "https://files.pythonhosted.org/packages/51/fa/9124cd63d822e2bcbea1450ae68cdc3faf3655c69b455f3a7ed36ce6c628/mkdocs_autorefs-1.4.3.tar.gz", hash = "sha256:beee715b254455c4aa93b6ef3c67579c399ca092259cc41b7d9342573ff1fc75", size = 55425, upload-time = "2025-08-26T14:23:17.223Z" }
|
|
948
|
+
wheels = [
|
|
949
|
+
{ url = "https://files.pythonhosted.org/packages/9f/4d/7123b6fa2278000688ebd338e2a06d16870aaf9eceae6ba047ea05f92df1/mkdocs_autorefs-1.4.3-py3-none-any.whl", hash = "sha256:469d85eb3114801d08e9cc55d102b3ba65917a869b893403b8987b601cf55dc9", size = 25034, upload-time = "2025-08-26T14:23:15.906Z" },
|
|
950
|
+
]
|
|
951
|
+
|
|
952
|
+
[[package]]
|
|
953
|
+
name = "mkdocs-get-deps"
|
|
954
|
+
version = "0.2.0"
|
|
955
|
+
source = { registry = "https://pypi.org/simple" }
|
|
956
|
+
dependencies = [
|
|
957
|
+
{ name = "mergedeep" },
|
|
958
|
+
{ name = "platformdirs" },
|
|
959
|
+
{ name = "pyyaml" },
|
|
960
|
+
]
|
|
961
|
+
sdist = { url = "https://files.pythonhosted.org/packages/98/f5/ed29cd50067784976f25ed0ed6fcd3c2ce9eb90650aa3b2796ddf7b6870b/mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c", size = 10239, upload-time = "2023-11-20T17:51:09.981Z" }
|
|
962
|
+
wheels = [
|
|
963
|
+
{ url = "https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134", size = 9521, upload-time = "2023-11-20T17:51:08.587Z" },
|
|
964
|
+
]
|
|
965
|
+
|
|
966
|
+
[[package]]
|
|
967
|
+
name = "mkdocs-material"
|
|
968
|
+
version = "9.6.23"
|
|
969
|
+
source = { registry = "https://pypi.org/simple" }
|
|
970
|
+
dependencies = [
|
|
971
|
+
{ name = "babel" },
|
|
972
|
+
{ name = "backrefs" },
|
|
973
|
+
{ name = "colorama" },
|
|
974
|
+
{ name = "jinja2" },
|
|
975
|
+
{ name = "markdown" },
|
|
976
|
+
{ name = "mkdocs" },
|
|
977
|
+
{ name = "mkdocs-material-extensions" },
|
|
978
|
+
{ name = "paginate" },
|
|
979
|
+
{ name = "pygments" },
|
|
980
|
+
{ name = "pymdown-extensions" },
|
|
981
|
+
{ name = "requests" },
|
|
982
|
+
]
|
|
983
|
+
sdist = { url = "https://files.pythonhosted.org/packages/57/de/cc1d5139c2782b1a49e1ed1845b3298ed6076b9ba1c740ad7c952d8ffcf9/mkdocs_material-9.6.23.tar.gz", hash = "sha256:62ebc9cdbe90e1ae4f4e9b16a6aa5c69b93474c7b9e79ebc0b11b87f9f055e00", size = 4048130, upload-time = "2025-11-01T16:33:11.782Z" }
|
|
984
|
+
wheels = [
|
|
985
|
+
{ url = "https://files.pythonhosted.org/packages/f5/df/bc583e857174b0dc6df67d555123533f09e7e1ac0f3fae7693fb6840c0a3/mkdocs_material-9.6.23-py3-none-any.whl", hash = "sha256:3bf3f1d82d269f3a14ed6897bfc3a844cc05e1dc38045386691b91d7e6945332", size = 9210689, upload-time = "2025-11-01T16:33:08.196Z" },
|
|
986
|
+
]
|
|
987
|
+
|
|
988
|
+
[[package]]
|
|
989
|
+
name = "mkdocs-material-extensions"
|
|
990
|
+
version = "1.3.1"
|
|
991
|
+
source = { registry = "https://pypi.org/simple" }
|
|
992
|
+
sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847, upload-time = "2023-11-22T19:09:45.208Z" }
|
|
993
|
+
wheels = [
|
|
994
|
+
{ url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728, upload-time = "2023-11-22T19:09:43.465Z" },
|
|
995
|
+
]
|
|
996
|
+
|
|
997
|
+
[[package]]
|
|
998
|
+
name = "mkdocstrings"
|
|
999
|
+
version = "0.30.1"
|
|
1000
|
+
source = { registry = "https://pypi.org/simple" }
|
|
1001
|
+
dependencies = [
|
|
1002
|
+
{ name = "jinja2" },
|
|
1003
|
+
{ name = "markdown" },
|
|
1004
|
+
{ name = "markupsafe" },
|
|
1005
|
+
{ name = "mkdocs" },
|
|
1006
|
+
{ name = "mkdocs-autorefs" },
|
|
1007
|
+
{ name = "pymdown-extensions" },
|
|
1008
|
+
]
|
|
1009
|
+
sdist = { url = "https://files.pythonhosted.org/packages/c5/33/2fa3243439f794e685d3e694590d28469a9b8ea733af4b48c250a3ffc9a0/mkdocstrings-0.30.1.tar.gz", hash = "sha256:84a007aae9b707fb0aebfc9da23db4b26fc9ab562eb56e335e9ec480cb19744f", size = 106350, upload-time = "2025-09-19T10:49:26.446Z" }
|
|
1010
|
+
wheels = [
|
|
1011
|
+
{ url = "https://files.pythonhosted.org/packages/7b/2c/f0dc4e1ee7f618f5bff7e05898d20bf8b6e7fa612038f768bfa295f136a4/mkdocstrings-0.30.1-py3-none-any.whl", hash = "sha256:41bd71f284ca4d44a668816193e4025c950b002252081e387433656ae9a70a82", size = 36704, upload-time = "2025-09-19T10:49:24.805Z" },
|
|
1012
|
+
]
|
|
1013
|
+
|
|
1014
|
+
[package.optional-dependencies]
|
|
1015
|
+
python = [
|
|
1016
|
+
{ name = "mkdocstrings-python" },
|
|
1017
|
+
]
|
|
1018
|
+
|
|
1019
|
+
[[package]]
|
|
1020
|
+
name = "mkdocstrings-python"
|
|
1021
|
+
version = "1.18.2"
|
|
1022
|
+
source = { registry = "https://pypi.org/simple" }
|
|
1023
|
+
dependencies = [
|
|
1024
|
+
{ name = "griffe" },
|
|
1025
|
+
{ name = "mkdocs-autorefs" },
|
|
1026
|
+
{ name = "mkdocstrings" },
|
|
1027
|
+
{ name = "typing-extensions", marker = "python_full_version < '3.11'" },
|
|
1028
|
+
]
|
|
1029
|
+
sdist = { url = "https://files.pythonhosted.org/packages/95/ae/58ab2bfbee2792e92a98b97e872f7c003deb903071f75d8d83aa55db28fa/mkdocstrings_python-1.18.2.tar.gz", hash = "sha256:4ad536920a07b6336f50d4c6d5603316fafb1172c5c882370cbbc954770ad323", size = 207972, upload-time = "2025-08-28T16:11:19.847Z" }
|
|
1030
|
+
wheels = [
|
|
1031
|
+
{ url = "https://files.pythonhosted.org/packages/d5/8f/ce008599d9adebf33ed144e7736914385e8537f5fc686fdb7cceb8c22431/mkdocstrings_python-1.18.2-py3-none-any.whl", hash = "sha256:944fe6deb8f08f33fa936d538233c4036e9f53e840994f6146e8e94eb71b600d", size = 138215, upload-time = "2025-08-28T16:11:18.176Z" },
|
|
1032
|
+
]
|
|
1033
|
+
|
|
845
1034
|
[[package]]
|
|
846
1035
|
name = "ml-dtypes"
|
|
847
1036
|
version = "0.5.3"
|
|
@@ -969,6 +1158,15 @@ wheels = [
|
|
|
969
1158
|
{ url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" },
|
|
970
1159
|
]
|
|
971
1160
|
|
|
1161
|
+
[[package]]
|
|
1162
|
+
name = "paginate"
|
|
1163
|
+
version = "0.5.7"
|
|
1164
|
+
source = { registry = "https://pypi.org/simple" }
|
|
1165
|
+
sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252, upload-time = "2024-08-25T14:17:24.139Z" }
|
|
1166
|
+
wheels = [
|
|
1167
|
+
{ url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746, upload-time = "2024-08-25T14:17:22.55Z" },
|
|
1168
|
+
]
|
|
1169
|
+
|
|
972
1170
|
[[package]]
|
|
973
1171
|
name = "pathspec"
|
|
974
1172
|
version = "0.12.1"
|
|
@@ -1183,6 +1381,19 @@ wheels = [
|
|
|
1183
1381
|
{ url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" },
|
|
1184
1382
|
]
|
|
1185
1383
|
|
|
1384
|
+
[[package]]
|
|
1385
|
+
name = "pymdown-extensions"
|
|
1386
|
+
version = "10.16.1"
|
|
1387
|
+
source = { registry = "https://pypi.org/simple" }
|
|
1388
|
+
dependencies = [
|
|
1389
|
+
{ name = "markdown" },
|
|
1390
|
+
{ name = "pyyaml" },
|
|
1391
|
+
]
|
|
1392
|
+
sdist = { url = "https://files.pythonhosted.org/packages/55/b3/6d2b3f149bc5413b0a29761c2c5832d8ce904a1d7f621e86616d96f505cc/pymdown_extensions-10.16.1.tar.gz", hash = "sha256:aace82bcccba3efc03e25d584e6a22d27a8e17caa3f4dd9f207e49b787aa9a91", size = 853277, upload-time = "2025-07-28T16:19:34.167Z" }
|
|
1393
|
+
wheels = [
|
|
1394
|
+
{ url = "https://files.pythonhosted.org/packages/e4/06/43084e6cbd4b3bc0e80f6be743b2e79fbc6eed8de9ad8c629939fa55d972/pymdown_extensions-10.16.1-py3-none-any.whl", hash = "sha256:d6ba157a6c03146a7fb122b2b9a121300056384eafeec9c9f9e584adfdb2a32d", size = 266178, upload-time = "2025-07-28T16:19:31.401Z" },
|
|
1395
|
+
]
|
|
1396
|
+
|
|
1186
1397
|
[[package]]
|
|
1187
1398
|
name = "pyparsing"
|
|
1188
1399
|
version = "3.2.5"
|
|
@@ -1317,6 +1528,18 @@ wheels = [
|
|
|
1317
1528
|
{ url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" },
|
|
1318
1529
|
]
|
|
1319
1530
|
|
|
1531
|
+
[[package]]
|
|
1532
|
+
name = "pyyaml-env-tag"
|
|
1533
|
+
version = "1.1"
|
|
1534
|
+
source = { registry = "https://pypi.org/simple" }
|
|
1535
|
+
dependencies = [
|
|
1536
|
+
{ name = "pyyaml" },
|
|
1537
|
+
]
|
|
1538
|
+
sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload-time = "2025-05-13T15:24:01.64Z" }
|
|
1539
|
+
wheels = [
|
|
1540
|
+
{ url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload-time = "2025-05-13T15:23:59.629Z" },
|
|
1541
|
+
]
|
|
1542
|
+
|
|
1320
1543
|
[[package]]
|
|
1321
1544
|
name = "requests"
|
|
1322
1545
|
version = "2.32.5"
|
|
@@ -1618,6 +1841,35 @@ wheels = [
|
|
|
1618
1841
|
{ url = "https://files.pythonhosted.org/packages/27/73/d9a94da0e9d470a543c1b9d3ccbceb0f59455983088e727b8a1824ed90fb/virtualenv-20.35.3-py3-none-any.whl", hash = "sha256:63d106565078d8c8d0b206d48080f938a8b25361e19432d2c9db40d2899c810a", size = 5981061, upload-time = "2025-10-10T21:23:30.433Z" },
|
|
1619
1842
|
]
|
|
1620
1843
|
|
|
1844
|
+
[[package]]
|
|
1845
|
+
name = "watchdog"
|
|
1846
|
+
version = "6.0.0"
|
|
1847
|
+
source = { registry = "https://pypi.org/simple" }
|
|
1848
|
+
sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" }
|
|
1849
|
+
wheels = [
|
|
1850
|
+
{ url = "https://files.pythonhosted.org/packages/0c/56/90994d789c61df619bfc5ce2ecdabd5eeff564e1eb47512bd01b5e019569/watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26", size = 96390, upload-time = "2024-11-01T14:06:24.793Z" },
|
|
1851
|
+
{ url = "https://files.pythonhosted.org/packages/55/46/9a67ee697342ddf3c6daa97e3a587a56d6c4052f881ed926a849fcf7371c/watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112", size = 88389, upload-time = "2024-11-01T14:06:27.112Z" },
|
|
1852
|
+
{ url = "https://files.pythonhosted.org/packages/44/65/91b0985747c52064d8701e1075eb96f8c40a79df889e59a399453adfb882/watchdog-6.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3", size = 89020, upload-time = "2024-11-01T14:06:29.876Z" },
|
|
1853
|
+
{ url = "https://files.pythonhosted.org/packages/e0/24/d9be5cd6642a6aa68352ded4b4b10fb0d7889cb7f45814fb92cecd35f101/watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c", size = 96393, upload-time = "2024-11-01T14:06:31.756Z" },
|
|
1854
|
+
{ url = "https://files.pythonhosted.org/packages/63/7a/6013b0d8dbc56adca7fdd4f0beed381c59f6752341b12fa0886fa7afc78b/watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2", size = 88392, upload-time = "2024-11-01T14:06:32.99Z" },
|
|
1855
|
+
{ url = "https://files.pythonhosted.org/packages/d1/40/b75381494851556de56281e053700e46bff5b37bf4c7267e858640af5a7f/watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c", size = 89019, upload-time = "2024-11-01T14:06:34.963Z" },
|
|
1856
|
+
{ url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471, upload-time = "2024-11-01T14:06:37.745Z" },
|
|
1857
|
+
{ url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449, upload-time = "2024-11-01T14:06:39.748Z" },
|
|
1858
|
+
{ url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054, upload-time = "2024-11-01T14:06:41.009Z" },
|
|
1859
|
+
{ url = "https://files.pythonhosted.org/packages/30/ad/d17b5d42e28a8b91f8ed01cb949da092827afb9995d4559fd448d0472763/watchdog-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881", size = 87902, upload-time = "2024-11-01T14:06:53.119Z" },
|
|
1860
|
+
{ url = "https://files.pythonhosted.org/packages/5c/ca/c3649991d140ff6ab67bfc85ab42b165ead119c9e12211e08089d763ece5/watchdog-6.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11", size = 88380, upload-time = "2024-11-01T14:06:55.19Z" },
|
|
1861
|
+
{ url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload-time = "2024-11-01T14:06:59.472Z" },
|
|
1862
|
+
{ url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload-time = "2024-11-01T14:07:01.431Z" },
|
|
1863
|
+
{ url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload-time = "2024-11-01T14:07:02.568Z" },
|
|
1864
|
+
{ url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077, upload-time = "2024-11-01T14:07:03.893Z" },
|
|
1865
|
+
{ url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078, upload-time = "2024-11-01T14:07:05.189Z" },
|
|
1866
|
+
{ url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077, upload-time = "2024-11-01T14:07:06.376Z" },
|
|
1867
|
+
{ url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload-time = "2024-11-01T14:07:07.547Z" },
|
|
1868
|
+
{ url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065, upload-time = "2024-11-01T14:07:09.525Z" },
|
|
1869
|
+
{ url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload-time = "2024-11-01T14:07:10.686Z" },
|
|
1870
|
+
{ url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload-time = "2024-11-01T14:07:11.845Z" },
|
|
1871
|
+
]
|
|
1872
|
+
|
|
1621
1873
|
[[package]]
|
|
1622
1874
|
name = "wrapt"
|
|
1623
1875
|
version = "1.17.3"
|
|
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
|
|
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
|
{kinemotion-0.13.0 → kinemotion-0.14.0}/docs/research/sports-biomechanics-pose-estimation.md
RENAMED
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|