kinemotion 0.33.2__py3-none-any.whl → 0.35.0__py3-none-any.whl
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/api.py +2 -2
- kinemotion/cmj/analysis.py +21 -101
- kinemotion/{core/cmj_metrics_validator.py → cmj/metrics_validator.py} +27 -123
- kinemotion/{core/cmj_validation_bounds.py → cmj/validation_bounds.py} +1 -58
- kinemotion/core/cli_utils.py +26 -0
- kinemotion/core/experimental.py +103 -0
- kinemotion/core/filtering.py +7 -0
- kinemotion/core/smoothing.py +34 -0
- kinemotion/core/validation.py +198 -0
- kinemotion/dropjump/__init__.py +1 -1
- kinemotion/dropjump/analysis.py +23 -34
- kinemotion/{core/dropjump_metrics_validator.py → dropjump/metrics_validator.py} +20 -114
- kinemotion/{core/dropjump_validation_bounds.py → dropjump/validation_bounds.py} +1 -58
- {kinemotion-0.33.2.dist-info → kinemotion-0.35.0.dist-info}/METADATA +1 -1
- {kinemotion-0.33.2.dist-info → kinemotion-0.35.0.dist-info}/RECORD +18 -16
- {kinemotion-0.33.2.dist-info → kinemotion-0.35.0.dist-info}/WHEEL +0 -0
- {kinemotion-0.33.2.dist-info → kinemotion-0.35.0.dist-info}/entry_points.txt +0 -0
- {kinemotion-0.33.2.dist-info → kinemotion-0.35.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -15,64 +15,7 @@ References:
|
|
|
15
15
|
- Covens et al. (2019): Drop jump kinetics across athletes
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
|
-
from
|
|
19
|
-
from enum import Enum
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
class AthleteProfile(Enum):
|
|
23
|
-
"""Athlete performance categories for metric bounds."""
|
|
24
|
-
|
|
25
|
-
ELDERLY = "elderly" # 70+, deconditioned
|
|
26
|
-
UNTRAINED = "untrained" # Sedentary, no training
|
|
27
|
-
RECREATIONAL = "recreational" # Fitness class, moderate activity
|
|
28
|
-
TRAINED = "trained" # Regular athlete, 3-5 years training
|
|
29
|
-
ELITE = "elite" # Competitive athlete, college/professional level
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
@dataclass
|
|
33
|
-
class MetricBounds:
|
|
34
|
-
"""Physiological bounds for a single metric.
|
|
35
|
-
|
|
36
|
-
Attributes:
|
|
37
|
-
absolute_min: Absolute minimum value (error threshold)
|
|
38
|
-
practical_min: Practical minimum for weakest athletes
|
|
39
|
-
recreational_min: Minimum for recreational athletes
|
|
40
|
-
recreational_max: Maximum for recreational athletes
|
|
41
|
-
elite_min: Minimum for elite athletes
|
|
42
|
-
elite_max: Maximum for elite athletes
|
|
43
|
-
absolute_max: Absolute maximum value (error threshold)
|
|
44
|
-
unit: Unit of measurement (e.g., "s", "m", "ratio")
|
|
45
|
-
"""
|
|
46
|
-
|
|
47
|
-
absolute_min: float
|
|
48
|
-
practical_min: float
|
|
49
|
-
recreational_min: float
|
|
50
|
-
recreational_max: float
|
|
51
|
-
elite_min: float
|
|
52
|
-
elite_max: float
|
|
53
|
-
absolute_max: float
|
|
54
|
-
unit: str
|
|
55
|
-
|
|
56
|
-
def contains(self, value: float, profile: AthleteProfile) -> bool:
|
|
57
|
-
"""Check if value is within bounds for athlete profile."""
|
|
58
|
-
if profile == AthleteProfile.ELDERLY:
|
|
59
|
-
return self.practical_min <= value <= self.recreational_max
|
|
60
|
-
elif profile == AthleteProfile.UNTRAINED:
|
|
61
|
-
return self.practical_min <= value <= self.recreational_max
|
|
62
|
-
elif profile == AthleteProfile.RECREATIONAL:
|
|
63
|
-
return self.recreational_min <= value <= self.recreational_max
|
|
64
|
-
elif profile == AthleteProfile.TRAINED:
|
|
65
|
-
# Trained athletes: midpoint between recreational and elite
|
|
66
|
-
trained_min = (self.recreational_min + self.elite_min) / 2
|
|
67
|
-
trained_max = (self.recreational_max + self.elite_max) / 2
|
|
68
|
-
return trained_min <= value <= trained_max
|
|
69
|
-
elif profile == AthleteProfile.ELITE:
|
|
70
|
-
return self.elite_min <= value <= self.elite_max
|
|
71
|
-
return False
|
|
72
|
-
|
|
73
|
-
def is_physically_possible(self, value: float) -> bool:
|
|
74
|
-
"""Check if value is within absolute physiological limits."""
|
|
75
|
-
return self.absolute_min <= value <= self.absolute_max
|
|
18
|
+
from kinemotion.core.validation import AthleteProfile, MetricBounds
|
|
76
19
|
|
|
77
20
|
|
|
78
21
|
class DropJumpBounds:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kinemotion
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.35.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
|
|
@@ -1,35 +1,37 @@
|
|
|
1
1
|
kinemotion/__init__.py,sha256=sxdDOekOrIgjxm842gy-6zfq7OWmGl9ShJtXCm4JI7c,723
|
|
2
|
-
kinemotion/api.py,sha256=
|
|
2
|
+
kinemotion/api.py,sha256=Rdz5XjFsIMK-9rByzOYiDTPz27vINB01fmdeDzPoxZY,39339
|
|
3
3
|
kinemotion/cli.py,sha256=cqYV_7URH0JUDy1VQ_EDLv63FmNO4Ns20m6s1XAjiP4,464
|
|
4
4
|
kinemotion/cmj/__init__.py,sha256=Ynv0-Oco4I3Y1Ubj25m3h9h2XFqeNwpAewXmAYOmwfU,127
|
|
5
|
-
kinemotion/cmj/analysis.py,sha256=
|
|
5
|
+
kinemotion/cmj/analysis.py,sha256=DmZ7vptPd5PAkaWW-oSablA6DWrCj8u2qPxlKQm9cVU,17089
|
|
6
6
|
kinemotion/cmj/cli.py,sha256=Mj2h9It1jVjAauvtCxfLWTRijj7zbYhxZuebhw2Zz6w,10828
|
|
7
7
|
kinemotion/cmj/debug_overlay.py,sha256=fXmWoHhqMLGo4vTtB6Ezs3yLUDOLw63zLIgU2gFlJQU,15892
|
|
8
8
|
kinemotion/cmj/joint_angles.py,sha256=HmheIEiKcQz39cRezk4h-htorOhGNPsqKIR9RsAEKts,9960
|
|
9
9
|
kinemotion/cmj/kinematics.py,sha256=qRBe87NkX-7HQTQ8RoF-EpvfcffgP5vycJJRrxpHboc,10307
|
|
10
|
+
kinemotion/cmj/metrics_validator.py,sha256=p_hgg0Q0UAiWGNXKSW4E9kPvyEgPNAujaxrk2XUmsBY,28619
|
|
11
|
+
kinemotion/cmj/validation_bounds.py,sha256=yRhmpUzGJs0QYyL1o3mOkgUSTe4XTO2MONMITTjCv3c,11778
|
|
10
12
|
kinemotion/core/__init__.py,sha256=HsqolRa60cW3vrG8F9Lvr9WvWcs5hCmsTzSgo7imi-4,1278
|
|
11
13
|
kinemotion/core/auto_tuning.py,sha256=j6cul_qC6k0XyryCG93C1AWH2MKPj3UBMzuX02xaqfI,11235
|
|
12
|
-
kinemotion/core/cli_utils.py,sha256=
|
|
13
|
-
kinemotion/core/cmj_metrics_validator.py,sha256=VVRn56pG3GKna_EDv8jQ5msYNv4VOUR5fTcqpSUzdIA,31334
|
|
14
|
-
kinemotion/core/cmj_validation_bounds.py,sha256=NXW0d4S8hDqSkzAiyX9UyWDnKsWf61ygEKTKE2a1uNc,14069
|
|
14
|
+
kinemotion/core/cli_utils.py,sha256=zbnifPhD-OYofJioeYfJtshuWcl8OAEWtqCGVF4ctAI,7966
|
|
15
15
|
kinemotion/core/debug_overlay_utils.py,sha256=TyUb5okv5qw8oeaX3jsUO_kpwf1NnaHEAOTm-8LwTno,4587
|
|
16
|
-
kinemotion/core/
|
|
17
|
-
kinemotion/core/
|
|
18
|
-
kinemotion/core/filtering.py,sha256=f-m-aA59e4WqE6u-9MA51wssu7rI-Y_7n1cG8IWdeRQ,11241
|
|
16
|
+
kinemotion/core/experimental.py,sha256=IK05AF4aZS15ke85hF3TWCqRIXU1AlD_XKzFz735Ua8,3640
|
|
17
|
+
kinemotion/core/filtering.py,sha256=GsC9BB71V07LJJHgS2lsaxUAtJsupcUiwtZFDgODh8c,11417
|
|
19
18
|
kinemotion/core/formatting.py,sha256=G_3eqgOtym9RFOZVEwCxye4A2cyrmgvtQ214vIshowU,2480
|
|
20
19
|
kinemotion/core/metadata.py,sha256=iz9YdkesHo-85TVBCoQVn7zkbrSde_fqjU79s_b-TZk,6829
|
|
21
20
|
kinemotion/core/pose.py,sha256=ztemdZ_ysVVK3gbXabm8qS_dr1VfJX9KZjmcO-Z-iNE,8532
|
|
22
21
|
kinemotion/core/quality.py,sha256=dPGQp08y8DdEUbUdjTThnUOUsALgF0D2sdz50cm6wLI,13098
|
|
23
|
-
kinemotion/core/smoothing.py,sha256=
|
|
22
|
+
kinemotion/core/smoothing.py,sha256=GAfC-jxu1eqNyDjsUXqUBicKx9um5hrk49wz1FxfRNM,15219
|
|
23
|
+
kinemotion/core/validation.py,sha256=LmKfSl4Ayw3DgwKD9IrhsPdzp5ia4drLsHA2UuU1SCM,6310
|
|
24
24
|
kinemotion/core/video_io.py,sha256=fDdyYVIKqUSgCjBJa8l_S0SrDPDAhrWYfsDBNRuz1oM,7549
|
|
25
|
-
kinemotion/dropjump/__init__.py,sha256=
|
|
26
|
-
kinemotion/dropjump/analysis.py,sha256=
|
|
25
|
+
kinemotion/dropjump/__init__.py,sha256=tC3H3BrCg8Oj-db-Vrtx4PH_llR1Ppkd5jwaOjhQcLg,862
|
|
26
|
+
kinemotion/dropjump/analysis.py,sha256=B_N_51WoChyQ8I7yaeKeqj3vw7NufgV_3QL-FBZEtW4,28752
|
|
27
27
|
kinemotion/dropjump/cli.py,sha256=n_Wfv3AC6YIgRPYhO3F2nTSai0NR7fh95nAoWjryQeY,16250
|
|
28
28
|
kinemotion/dropjump/debug_overlay.py,sha256=LkPw6ucb7beoYWS4L-Lvjs1KLCm5wAWDAfiznUeV2IQ,5668
|
|
29
29
|
kinemotion/dropjump/kinematics.py,sha256=IH6nCOwTuocQNX1VPS_am9vPpMRUUla0a0MjDhEiXnA,17129
|
|
30
|
+
kinemotion/dropjump/metrics_validator.py,sha256=sx4RodHpeiW8_PRB0GUJvkUWto1Ard1Dvrc9z8eKk7M,9351
|
|
31
|
+
kinemotion/dropjump/validation_bounds.py,sha256=5b4I3CKPybuvrbn-nP5yCcGF_sH4Vtyw3a5AWWvWnBk,4645
|
|
30
32
|
kinemotion/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
31
|
-
kinemotion-0.
|
|
32
|
-
kinemotion-0.
|
|
33
|
-
kinemotion-0.
|
|
34
|
-
kinemotion-0.
|
|
35
|
-
kinemotion-0.
|
|
33
|
+
kinemotion-0.35.0.dist-info/METADATA,sha256=vMAyXr_N5nJrQ4WvcnmQClVOw_EyvliO3PN09HMIsMw,26020
|
|
34
|
+
kinemotion-0.35.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
35
|
+
kinemotion-0.35.0.dist-info/entry_points.txt,sha256=zaqnAnjLvcdrk1Qvj5nvXZCZ2gp0prS7it1zTJygcIY,50
|
|
36
|
+
kinemotion-0.35.0.dist-info/licenses/LICENSE,sha256=KZajvqsHw0NoOHOi2q0FZ4NBe9HdV6oey-IPYAtHXfg,1088
|
|
37
|
+
kinemotion-0.35.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|