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.

@@ -15,64 +15,7 @@ References:
15
15
  - Covens et al. (2019): Drop jump kinetics across athletes
16
16
  """
17
17
 
18
- from dataclasses import dataclass
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.33.2
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=IcvtjK38Eoh5u53yu99NaeChLDNvv7NSnlDcK8fhVS8,39349
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=88zRNufM88Mc4p_YdnbXoSJM-pWAe4C9I7TqcH7QM9U,19815
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=8xQvTiZFAQULGdpB9g-Mvf0doSgoXi1ZZfVY2T2zWss,7278
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/dropjump_metrics_validator.py,sha256=zTkWslex9qGQuJSEZltUXYyFLBtisPGGxwqpYpE_Mx4,12040
17
- kinemotion/core/dropjump_validation_bounds.py,sha256=Ow7T-0IK_qy0k9UZdiCuT_tttxklWAkuXFalQkF8Jbs,6927
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=J-GjFP6xW9TO4teOqFd5523zTY2jYIY1Nd99cZvoM3s,14110
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=yc1XiZ9vfo5h_n7PKVSiX2TTgaIfGL7Y7SkQtiDZj_E,838
26
- kinemotion/dropjump/analysis.py,sha256=Sz1lnAsQSp9fzkDy8AuqQtE47LKBqNwiLkaKzz4W_Wk,29099
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.33.2.dist-info/METADATA,sha256=lrrZbUyBwPks7pcGRSKJhpFn6FRdelSXutSAfAzaxRs,26020
32
- kinemotion-0.33.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
33
- kinemotion-0.33.2.dist-info/entry_points.txt,sha256=zaqnAnjLvcdrk1Qvj5nvXZCZ2gp0prS7it1zTJygcIY,50
34
- kinemotion-0.33.2.dist-info/licenses/LICENSE,sha256=KZajvqsHw0NoOHOi2q0FZ4NBe9HdV6oey-IPYAtHXfg,1088
35
- kinemotion-0.33.2.dist-info/RECORD,,
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,,