kinemotion 0.46.0__tar.gz → 0.47.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 (514) hide show
  1. kinemotion-0.47.1/.basic-memory/development/optimal-timing-implementation-summary.md +275 -0
  2. {kinemotion-0.46.0 → kinemotion-0.47.1}/CHANGELOG.md +24 -0
  3. {kinemotion-0.46.0 → kinemotion-0.47.1}/PKG-INFO +1 -1
  4. {kinemotion-0.46.0 → kinemotion-0.47.1}/backend/pyproject.toml +6 -0
  5. {kinemotion-0.46.0 → kinemotion-0.47.1}/backend/src/kinemotion_backend/app.py +25 -5
  6. kinemotion-0.47.1/backend/src/kinemotion_backend/telemetry.py +100 -0
  7. {kinemotion-0.46.0 → kinemotion-0.47.1}/pyproject.toml +1 -1
  8. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/api.py +14 -42
  9. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/cmj/analysis.py +46 -32
  10. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/core/__init__.py +10 -1
  11. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/core/debug_overlay_utils.py +6 -18
  12. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/core/pipeline_utils.py +30 -16
  13. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/core/pose.py +31 -32
  14. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/core/smoothing.py +33 -26
  15. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/core/timing.py +185 -49
  16. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/core/video_io.py +6 -20
  17. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/dropjump/analysis.py +10 -4
  18. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/dropjump/debug_overlay.py +2 -8
  19. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/dropjump/kinematics.py +33 -25
  20. kinemotion-0.47.1/tests/core/test_otel_timing.py +95 -0
  21. {kinemotion-0.46.0 → kinemotion-0.47.1}/uv.lock +474 -42
  22. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/README.md +0 -0
  23. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/api/api-reference-quick-commands.md +0 -0
  24. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/api/cloud-run-cpu-specifications-investigation.md +0 -0
  25. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/api/supabase-authentication-setup-guide.md +0 -0
  26. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/authentication/auth-provider-comparison-december-2025.md +0 -0
  27. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/authentication/auth-providers-comparison-december-2025.md +0 -0
  28. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/authentication/supabase-authentication-quick-start.md +0 -0
  29. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/authentication/supabase-authentication-setup-guide.md +0 -0
  30. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/authentication/supabase-authentication-technical-guide.md +0 -0
  31. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/authentication/supabase-google-oauth-setup-guide.md +0 -0
  32. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/authentication/supabase-production-setup-guide.md +0 -0
  33. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/authentication/supabase-quick-start-guide.md +0 -0
  34. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/biomechanics/camera-angle-empirical-validation-results-45-superior-for-media-pipe.md +0 -0
  35. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/biomechanics/camera-perspective-analysis-45deg-vs-lateral.md +0 -0
  36. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/biomechanics/cmj-landing-detection-window-validation.md +0 -0
  37. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/biomechanics/cmj-physiological-bounds-for-validation.md +0 -0
  38. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/biomechanics/cmj-validation-implementation-complete.md +0 -0
  39. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/biomechanics/drop-jump-vs-cmj-key-differences.md +0 -0
  40. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/biomechanics/technical-implementation-45deg-perspective-correction.md +0 -0
  41. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/codebase/codebase-architecture-overview.md +0 -0
  42. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/codebase/validation-architecture-visual-hierarchy-after-refactoring.md +0 -0
  43. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/codebase/validation-code-duplication-evidence.md +0 -0
  44. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/codebase/validation-module-architecture-analysis.md +0 -0
  45. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/codebase/validation-refactoring-complete-architecture-improvement.md +0 -0
  46. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/deployment/automated-deployment-setup-git-hub-actions-with-workload-identity-federation.md +0 -0
  47. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/deployment/backend-repository-split-migration-guide.md +0 -0
  48. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/deployment/backend-repository-split-step-by-step-execution-guide.md +0 -0
  49. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/deployment/cloud-run-security-least-privilege-service-account-setup.md +0 -0
  50. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/deployment/cors-and-memory-issues-production-debugging-guide.md +0 -0
  51. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/deployment/current-kinemotion-architecture-correct-deployment-setup.md +0 -0
  52. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/deployment/frontend-repository-split-migration-guide.md +0 -0
  53. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/deployment/frontend-repository-split-step-by-step-execution-guide.md +0 -0
  54. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/deployment/production-deployment-guide-vercel-google-cloud-run.md +0 -0
  55. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/deployment/quick-deployment-commands-vercel-and-cloud-run.md +0 -0
  56. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/deployment/vercel-monorepo-deployment-best-practice.md +0 -0
  57. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/athlete-pose3d-and-cross-platform-determinism-investigation-complete.md +0 -0
  58. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/athlete-pose3d-final-strategy-accuracy-and-robustness.md +0 -0
  59. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/athlete-pose3d-media-pipe-enhancement-plan.md +0 -0
  60. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/athlete-pose3d-phase-1-implementation-complete.md +0 -0
  61. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/backend-authentication-and-logging-status.md +0 -0
  62. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/backend-code-coverage-analysis.md +0 -0
  63. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/backend-code-duplication-analysis.md +0 -0
  64. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/backend-kinemotion-decoupling-strategy.md +0 -0
  65. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/backend-sonar-cloud-integration-status.md +0 -0
  66. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/basic-memory-naming-hook-analysis.md +0 -0
  67. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/ci-caching-issue-investigation-deep-squat-test-failure.md +0 -0
  68. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/ci-vs-local-test-failure-investigation.md +0 -0
  69. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/claude-code-hook-configuration.md +0 -0
  70. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/cmj-phase-detection-testing-gap-analysis.md +0 -0
  71. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/comprehensive-timing-instrumentation.md +0 -0
  72. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/cross-platform-determinism-analysis-final-results.md +0 -0
  73. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/development-standards-quality-gates.md +0 -0
  74. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/drop-jump-detection-complete-fix-all-metrics-within-target.md +0 -0
  75. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/drop-jump-detection-failure-analysis-per-video-breakdown.md +0 -0
  76. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/drop-jump-fix-drop-start-successful-landing-and-takeoff-remain.md +0 -0
  77. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/frontend-dependencies-analysis-nov-2025.md +0 -0
  78. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/google-oauth-setup-script-final-review-production-ready.md +0 -0
  79. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/google-oauth-setup-script-review-issues-and-recommendations.md +0 -0
  80. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/hook-complete-audit-summary.md +0 -0
  81. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/hook-configuration-audit.md +0 -0
  82. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/hook-quick-reference.md +0 -0
  83. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/keyboard-interrupt-test-suite-failure-analysis.md +0 -0
  84. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/non-deterministic-analysis-root-cause-and-solution.md +0 -0
  85. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/p0-p1-p2-test-suite-fixes-final-report.md +0 -0
  86. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/pose-detection-baseline-evaluation-results.md +0 -0
  87. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/pose-detection-optimization-complete-success-summary.md +0 -0
  88. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/pose-detection-parameter-optimization-framework.md +0 -0
  89. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/structured-logging-implementation-complete.md +0 -0
  90. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/structured-logging-implementation.md +0 -0
  91. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/supabase-dashboard-navigation-december-2025.md +0 -0
  92. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/test-coverage-asymmetry-analysis-cmj-vs-drop-jump.md +0 -0
  93. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/test-coverage-equivalence-achievement-summary.md +0 -0
  94. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/test-suite-comprehensive-review-december-2025.md +0 -0
  95. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/test-suite-comprehensive-review-structure-and-gaps.md +0 -0
  96. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/test-suite-p0-p1-p2-fixes-complete-report.md +0 -0
  97. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/test-suite-p0-p1-p2-fixes-progress-report.md +0 -0
  98. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/unused-and-experimental-features-strategy.md +0 -0
  99. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/unused-code-detection-prompt-template.md +0 -0
  100. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/unused-code-identification-and-decorator-application-december-2025.md +0 -0
  101. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/unused-code-verification-final-pass-december-2025.md +0 -0
  102. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/using-multiple-mcp-reasoning-servers-simultaneously.md +0 -0
  103. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/velocity-threshold-empirical-validation-study.md +0 -0
  104. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/development/vercel-authentication-options-for-user-id-tracking.md +0 -0
  105. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/project-management/documentation-audit-december-2025.md +0 -0
  106. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/project-management/issue-12-mvp-scaffolding-complete.md +0 -0
  107. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/project-management/issue-12-unblocked-tasks-breakdown.md +0 -0
  108. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/project-management/issue-12-use-real-metrics-now.md +0 -0
  109. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/project-management/kinemotion-project-setup-complete.md +0 -0
  110. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/project-management/kinemotion-supabase-production-configuration.md +0 -0
  111. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/project-management/mcp-sequential-thinking-alternatives-analysis.md +0 -0
  112. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/project-management/performance-optimization-pose-tracker-pool-timing-instrumentation-complete.md +0 -0
  113. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/project-management/project-state-summary-december-2025.md +0 -0
  114. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/project-management/specialized-subagents-routing-guide.md +0 -0
  115. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/project-management/supabase-setup-instructions-for-kinemotion.md +0 -0
  116. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/project-management/version-mismatch-analysis-kinemotion-0370-vs-0300.md +0 -0
  117. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/strategy/deployment-decision-analysis-for-kinemotion.md +0 -0
  118. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/strategy/mvp-feedback-collection-plan.md +0 -0
  119. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/strategy/mvp-first-strategic-direction.md +0 -0
  120. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/strategy/mvp-validation-checkpoints.md +0 -0
  121. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/strategy/pose2sim-migration-evaluation-and-strategy.md +0 -0
  122. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/strategy/strategic-priority-tasks-current-roadmap.md +0 -0
  123. {kinemotion-0.46.0 → kinemotion-0.47.1}/.basic-memory/strategy/third-party-auth-providers-with-free-tiers-december-2025.md +0 -0
  124. {kinemotion-0.46.0 → kinemotion-0.47.1}/.claude/agents/biomechanics-specialist.md +0 -0
  125. {kinemotion-0.46.0 → kinemotion-0.47.1}/.claude/agents/computer-vision-engineer.md +0 -0
  126. {kinemotion-0.46.0 → kinemotion-0.47.1}/.claude/agents/devops-cicd-engineer.md +0 -0
  127. {kinemotion-0.46.0 → kinemotion-0.47.1}/.claude/agents/frontend-developer.md +0 -0
  128. {kinemotion-0.46.0 → kinemotion-0.47.1}/.claude/agents/ml-data-scientist.md +0 -0
  129. {kinemotion-0.46.0 → kinemotion-0.47.1}/.claude/agents/project-manager.md +0 -0
  130. {kinemotion-0.46.0 → kinemotion-0.47.1}/.claude/agents/python-backend-developer.md +0 -0
  131. {kinemotion-0.46.0 → kinemotion-0.47.1}/.claude/agents/qa-test-engineer.md +0 -0
  132. {kinemotion-0.46.0 → kinemotion-0.47.1}/.claude/agents/technical-writer.md +0 -0
  133. {kinemotion-0.46.0 → kinemotion-0.47.1}/.claude/settings.local.json +0 -0
  134. {kinemotion-0.46.0 → kinemotion-0.47.1}/.cursor/mcp.json +0 -0
  135. {kinemotion-0.46.0 → kinemotion-0.47.1}/.dockerignore +0 -0
  136. {kinemotion-0.46.0 → kinemotion-0.47.1}/.envrc +0 -0
  137. {kinemotion-0.46.0 → kinemotion-0.47.1}/.gitattributes +0 -0
  138. {kinemotion-0.46.0 → kinemotion-0.47.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  139. {kinemotion-0.46.0 → kinemotion-0.47.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  140. {kinemotion-0.46.0 → kinemotion-0.47.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  141. {kinemotion-0.46.0 → kinemotion-0.47.1}/.github/dependabot.yml +0 -0
  142. {kinemotion-0.46.0 → kinemotion-0.47.1}/.github/pull_request_template.md +0 -0
  143. {kinemotion-0.46.0 → kinemotion-0.47.1}/.github/workflows/deploy-backend.yml +0 -0
  144. {kinemotion-0.46.0 → kinemotion-0.47.1}/.github/workflows/docs.yml +0 -0
  145. {kinemotion-0.46.0 → kinemotion-0.47.1}/.github/workflows/release.yml +0 -0
  146. {kinemotion-0.46.0 → kinemotion-0.47.1}/.github/workflows/test.yml +0 -0
  147. {kinemotion-0.46.0 → kinemotion-0.47.1}/.gitignore +0 -0
  148. {kinemotion-0.46.0 → kinemotion-0.47.1}/.mcp.json +0 -0
  149. {kinemotion-0.46.0 → kinemotion-0.47.1}/.pre-commit-config.yaml +0 -0
  150. {kinemotion-0.46.0 → kinemotion-0.47.1}/.readthedocs.yml +0 -0
  151. {kinemotion-0.46.0 → kinemotion-0.47.1}/.serena/.gitignore +0 -0
  152. {kinemotion-0.46.0 → kinemotion-0.47.1}/.serena/memories/backend-cors-fastapi-middleware-order.md +0 -0
  153. {kinemotion-0.46.0 → kinemotion-0.47.1}/.serena/memories/camera-perspective-validation-study.md +0 -0
  154. {kinemotion-0.46.0 → kinemotion-0.47.1}/.serena/memories/code_style_and_conventions.md +0 -0
  155. {kinemotion-0.46.0 → kinemotion-0.47.1}/.serena/memories/current-project-architecture.md +0 -0
  156. {kinemotion-0.46.0 → kinemotion-0.47.1}/.serena/memories/deployment-checklist-and-known-issues.md +0 -0
  157. {kinemotion-0.46.0 → kinemotion-0.47.1}/.serena/memories/deployment-setup-complete.md +0 -0
  158. {kinemotion-0.46.0 → kinemotion-0.47.1}/.serena/memories/github-project-setup-summary.md +0 -0
  159. {kinemotion-0.46.0 → kinemotion-0.47.1}/.serena/memories/mvp-first-strategy.md +0 -0
  160. {kinemotion-0.46.0 → kinemotion-0.47.1}/.serena/memories/mvp-roadmap-and-priorities.md +0 -0
  161. {kinemotion-0.46.0 → kinemotion-0.47.1}/.serena/memories/project_overview.md +0 -0
  162. {kinemotion-0.46.0 → kinemotion-0.47.1}/.serena/memories/specialist-agents-routing.md +0 -0
  163. {kinemotion-0.46.0 → kinemotion-0.47.1}/.serena/memories/suggested_commands.md +0 -0
  164. {kinemotion-0.46.0 → kinemotion-0.47.1}/.serena/project.yml +0 -0
  165. {kinemotion-0.46.0 → kinemotion-0.47.1}/.tool-versions +0 -0
  166. {kinemotion-0.46.0 → kinemotion-0.47.1}/.vercelignore +0 -0
  167. {kinemotion-0.46.0 → kinemotion-0.47.1}/CLAUDE.md +0 -0
  168. {kinemotion-0.46.0 → kinemotion-0.47.1}/CODE_OF_CONDUCT.md +0 -0
  169. {kinemotion-0.46.0 → kinemotion-0.47.1}/CONTRIBUTING.md +0 -0
  170. {kinemotion-0.46.0 → kinemotion-0.47.1}/Dockerfile +0 -0
  171. {kinemotion-0.46.0 → kinemotion-0.47.1}/GEMINI.md +0 -0
  172. {kinemotion-0.46.0 → kinemotion-0.47.1}/LICENSE +0 -0
  173. {kinemotion-0.46.0 → kinemotion-0.47.1}/README.md +0 -0
  174. {kinemotion-0.46.0 → kinemotion-0.47.1}/SECURITY.md +0 -0
  175. {kinemotion-0.46.0 → kinemotion-0.47.1}/backend/.dockerignore +0 -0
  176. {kinemotion-0.46.0 → kinemotion-0.47.1}/backend/.env.example +0 -0
  177. {kinemotion-0.46.0 → kinemotion-0.47.1}/backend/Dockerfile +0 -0
  178. {kinemotion-0.46.0 → kinemotion-0.47.1}/backend/README.md +0 -0
  179. {kinemotion-0.46.0 → kinemotion-0.47.1}/backend/docs/fly-deployment.md +0 -0
  180. {kinemotion-0.46.0 → kinemotion-0.47.1}/backend/docs/implementation-summary.md +0 -0
  181. {kinemotion-0.46.0 → kinemotion-0.47.1}/backend/docs/setup.md +0 -0
  182. {kinemotion-0.46.0 → kinemotion-0.47.1}/backend/docs/tests.md +0 -0
  183. {kinemotion-0.46.0 → kinemotion-0.47.1}/backend/src/kinemotion_backend/__init__.py +0 -0
  184. {kinemotion-0.46.0 → kinemotion-0.47.1}/backend/src/kinemotion_backend/auth.py +0 -0
  185. {kinemotion-0.46.0 → kinemotion-0.47.1}/backend/src/kinemotion_backend/logging_config.py +0 -0
  186. {kinemotion-0.46.0 → kinemotion-0.47.1}/backend/src/kinemotion_backend/middleware.py +0 -0
  187. {kinemotion-0.46.0 → kinemotion-0.47.1}/backend/tests/README.md +0 -0
  188. {kinemotion-0.46.0 → kinemotion-0.47.1}/backend/tests/__init__.py +0 -0
  189. {kinemotion-0.46.0 → kinemotion-0.47.1}/backend/tests/conftest.py +0 -0
  190. {kinemotion-0.46.0 → kinemotion-0.47.1}/backend/tests/test_api_endpoints.py +0 -0
  191. {kinemotion-0.46.0 → kinemotion-0.47.1}/backend/tests/test_error_handling.py +0 -0
  192. {kinemotion-0.46.0 → kinemotion-0.47.1}/backend/tests/test_health.py +0 -0
  193. {kinemotion-0.46.0 → kinemotion-0.47.1}/backend/tests/test_r2_integration.py +0 -0
  194. {kinemotion-0.46.0 → kinemotion-0.47.1}/backend/tests/test_validation.py +0 -0
  195. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/README.md +0 -0
  196. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/api/cmj.md +0 -0
  197. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/api/core.md +0 -0
  198. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/api/dropjump.md +0 -0
  199. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/api/overview.md +0 -0
  200. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/development/agents-guide.md +0 -0
  201. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/development/errors-findings.md +0 -0
  202. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/development/test-suite-review-december-2025.md +0 -0
  203. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/development/testing-standards.md +0 -0
  204. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/development/testing.md +0 -0
  205. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/development/type-hints.md +0 -0
  206. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/development/validation-plan.md +0 -0
  207. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/development/validation-roadmap.md +0 -0
  208. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/development/wallball-norep-detection.md +0 -0
  209. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/guides/bulk-processing.md +0 -0
  210. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/guides/camera-setup.md +0 -0
  211. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/guides/cloud-run-deployment.md +0 -0
  212. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/guides/cmj-guide.md +0 -0
  213. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/guides/cmj-recording-protocol-es.md +0 -0
  214. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/guides/cmj-recording-protocol.md +0 -0
  215. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/guides/deployment-checklist.md +0 -0
  216. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/guides/local-testing.md +0 -0
  217. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/guides/setup-issue-12.md +0 -0
  218. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/index.md +0 -0
  219. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/quick-start.md +0 -0
  220. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/reference/cloud-run-quick-reference.md +0 -0
  221. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/reference/json-output-format.md +0 -0
  222. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/reference/json-structure-comparison.md +0 -0
  223. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/reference/parameters.md +0 -0
  224. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/reference/pose-systems.md +0 -0
  225. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
  226. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/paper-downloader/README.md +0 -0
  227. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/paper-downloader/dois.txt +0 -0
  228. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/paper-downloader/download.py +0 -0
  229. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/paper-downloader/pyproject.toml +0 -0
  230. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/paper-downloader/uv.lock +0 -0
  231. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
  232. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
  233. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/README.md +0 -0
  234. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/convert_pdfs.py +0 -0
  235. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
  236. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
  237. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
  238. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
  239. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
  240. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
  241. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
  242. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
  243. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
  244. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
  245. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
  246. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
  247. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
  248. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
  249. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
  250. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
  251. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
  252. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
  253. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
  254. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
  255. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
  256. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
  257. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
  258. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
  259. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
  260. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
  261. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
  262. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
  263. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
  264. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
  265. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
  266. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
  267. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
  268. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
  269. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
  270. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
  271. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
  272. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
  273. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
  274. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
  275. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
  276. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/online-references-for-papers.md +0 -0
  277. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
  278. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
  279. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
  280. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
  281. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
  282. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
  283. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
  284. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
  285. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
  286. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
  287. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
  288. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
  289. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
  290. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
  291. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
  292. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
  293. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
  294. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
  295. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
  296. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
  297. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
  298. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
  299. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
  300. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
  301. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
  302. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
  303. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
  304. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
  305. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
  306. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
  307. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
  308. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
  309. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
  310. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
  311. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
  312. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
  313. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
  314. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
  315. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
  316. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
  317. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
  318. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/1-STRATEGIC_SUMMARY.md +0 -0
  319. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/2-STRATEGIC_ANALYSIS.md +0 -0
  320. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/MVP_FEEDBACK_COLLECTION.md +0 -0
  321. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/MVP_VALIDATION_CHECKPOINTS.md +0 -0
  322. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/README.md +0 -0
  323. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/STYLE_GUIDE.md +0 -0
  324. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/01-executive-summary.md +0 -0
  325. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/02-technical-assessment.md +0 -0
  326. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/03-refactoring-roadmap.md +0 -0
  327. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/README.md +0 -0
  328. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/BIOMECHANICS/01-executive-summary.md +0 -0
  329. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/BIOMECHANICS/02-technical-assessment.md +0 -0
  330. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/BIOMECHANICS/03-reference-guide.md +0 -0
  331. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/BIOMECHANICS/README.md +0 -0
  332. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/COMPUTER_VISION/01-executive-summary.md +0 -0
  333. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/COMPUTER_VISION/02-real-time-architecture.md +0 -0
  334. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/COMPUTER_VISION/03-implementation-checklist.md +0 -0
  335. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/COMPUTER_VISION/README.md +0 -0
  336. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/CONSOLIDATED/01-agent-consensus.md +0 -0
  337. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/CONSOLIDATED/02-critical-findings.md +0 -0
  338. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/CONSOLIDATED/03-roadmap-adjustments.md +0 -0
  339. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/CONSOLIDATED/04-decision-points.md +0 -0
  340. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/CONSOLIDATED/README.md +0 -0
  341. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/CONSOLIDATED/risk-register.md +0 -0
  342. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/CONSOLIDATED/timeline-roadmap.md +0 -0
  343. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/01-executive-summary.md +0 -0
  344. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/02-infrastructure-assessment.md +0 -0
  345. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/03-implementation-roadmap.md +0 -0
  346. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/README.md +0 -0
  347. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/01-executive-summary.md +0 -0
  348. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/02-technical-assessment.md +0 -0
  349. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/03-parameter-specifications.md +0 -0
  350. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/README.md +0 -0
  351. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/QA_TESTING/01-executive-summary.md +0 -0
  352. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/QA_TESTING/02-roadmap-assessment.md +0 -0
  353. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/QA_TESTING/03-testing-checklists.md +0 -0
  354. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/QA_TESTING/README.md +0 -0
  355. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/01-executive-summary.md +0 -0
  356. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/02-documentation-strategy.md +0 -0
  357. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/03-action-plan.md +0 -0
  358. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/README.md +0 -0
  359. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/strategy/pose2sim-migration-evaluation.md +0 -0
  360. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/technical/framerate.md +0 -0
  361. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/technical/implementation-details.md +0 -0
  362. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/technical/imu-metadata.md +0 -0
  363. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/technical/real-time-analysis.md +0 -0
  364. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/technical/triple-extension.md +0 -0
  365. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/translations/es/camera-setup.md +0 -0
  366. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/validation/determinism-test.md +0 -0
  367. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/validation/known-height-validation.md +0 -0
  368. {kinemotion-0.46.0 → kinemotion-0.47.1}/docs/validation-status.md +0 -0
  369. {kinemotion-0.46.0 → kinemotion-0.47.1}/examples/bulk/README.md +0 -0
  370. {kinemotion-0.46.0 → kinemotion-0.47.1}/examples/bulk/bulk_processing.py +0 -0
  371. {kinemotion-0.46.0 → kinemotion-0.47.1}/examples/bulk/simple_example.py +0 -0
  372. {kinemotion-0.46.0 → kinemotion-0.47.1}/examples/programmatic_usage.py +0 -0
  373. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/.editorconfig +0 -0
  374. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/.env.example +0 -0
  375. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/.gitattributes +0 -0
  376. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/.gitignore +0 -0
  377. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/.yarn/releases/yarn-4.12.0.cjs +0 -0
  378. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/.yarnrc.yml +0 -0
  379. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/README.md +0 -0
  380. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/index.html +0 -0
  381. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/package.json +0 -0
  382. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/src/App.test.tsx +0 -0
  383. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/src/App.tsx +0 -0
  384. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/src/components/Auth.tsx +0 -0
  385. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/src/components/ErrorBoundary.tsx +0 -0
  386. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/src/components/ErrorDisplay.tsx +0 -0
  387. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/src/components/LoadingSpinner.tsx +0 -0
  388. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/src/components/RecentUploads.tsx +0 -0
  389. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/src/components/ResultsDisplay.test.tsx +0 -0
  390. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/src/components/ResultsDisplay.tsx +0 -0
  391. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/src/components/ResultsSkeleton.tsx +0 -0
  392. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/src/components/UploadForm.test.tsx +0 -0
  393. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/src/components/UploadForm.tsx +0 -0
  394. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/src/hooks/useAnalysis.test.ts +0 -0
  395. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/src/hooks/useAnalysis.ts +0 -0
  396. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/src/hooks/useAuth.ts +0 -0
  397. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/src/hooks/useBackendVersion.ts +0 -0
  398. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/src/hooks/useRecentUploads.ts +0 -0
  399. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/src/index.css +0 -0
  400. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/src/lib/supabase.ts +0 -0
  401. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/src/main.tsx +0 -0
  402. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/src/test/setup.ts +0 -0
  403. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/src/types/api.ts +0 -0
  404. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/src/vite-env.d.ts +0 -0
  405. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/vercel.json +0 -0
  406. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/vite.config.ts +0 -0
  407. {kinemotion-0.46.0 → kinemotion-0.47.1}/frontend/yarn.lock +0 -0
  408. {kinemotion-0.46.0 → kinemotion-0.47.1}/justfile +0 -0
  409. {kinemotion-0.46.0 → kinemotion-0.47.1}/local_dev.sh +0 -0
  410. {kinemotion-0.46.0 → kinemotion-0.47.1}/mkdocs.yml +0 -0
  411. {kinemotion-0.46.0 → kinemotion-0.47.1}/presentation/.gitignore +0 -0
  412. {kinemotion-0.46.0 → kinemotion-0.47.1}/presentation/README.md +0 -0
  413. {kinemotion-0.46.0 → kinemotion-0.47.1}/presentation/demos/.gitignore +0 -0
  414. {kinemotion-0.46.0 → kinemotion-0.47.1}/presentation/demos/README.md +0 -0
  415. {kinemotion-0.46.0 → kinemotion-0.47.1}/presentation/demos/api_demo.ipynb +0 -0
  416. {kinemotion-0.46.0 → kinemotion-0.47.1}/presentation/demos/batch_processing_demo.py +0 -0
  417. {kinemotion-0.46.0 → kinemotion-0.47.1}/presentation/demos/sample_data/.gitkeep +0 -0
  418. {kinemotion-0.46.0 → kinemotion-0.47.1}/presentation/presentation_guide.md +0 -0
  419. {kinemotion-0.46.0 → kinemotion-0.47.1}/presentation/revealjs/.gitignore +0 -0
  420. {kinemotion-0.46.0 → kinemotion-0.47.1}/presentation/revealjs/Makefile +0 -0
  421. {kinemotion-0.46.0 → kinemotion-0.47.1}/presentation/revealjs/README.md +0 -0
  422. {kinemotion-0.46.0 → kinemotion-0.47.1}/presentation/revealjs/slides.md +0 -0
  423. {kinemotion-0.46.0 → kinemotion-0.47.1}/presentation/speaker_script.md +0 -0
  424. {kinemotion-0.46.0 → kinemotion-0.47.1}/requirements-docs.txt +0 -0
  425. {kinemotion-0.46.0 → kinemotion-0.47.1}/samples/cmjs/README.md +0 -0
  426. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/README.md +0 -0
  427. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/SCRIPTS_QUICKREF.md +0 -0
  428. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/analyze_determinism_variance.py +0 -0
  429. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/basic-memory-utils.sh +0 -0
  430. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/debug_contact_states.py +0 -0
  431. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/debug_detection.py +0 -0
  432. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/find_unused_features.py +0 -0
  433. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/generate_test_data.py +0 -0
  434. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/optimize_detection_params.py +0 -0
  435. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/plot_cmj_velocities.py +0 -0
  436. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/plot_validation_results.py +0 -0
  437. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/plot_velocities.py +0 -0
  438. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/prepare_ground_truth.py +0 -0
  439. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/project/README.md +0 -0
  440. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/project/add-issue.sh +0 -0
  441. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/project/batch-set-fields.sh +0 -0
  442. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/project/helpers.sh +0 -0
  443. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/project/list.sh +0 -0
  444. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/project/set-field.sh +0 -0
  445. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/project/set-status.sh +0 -0
  446. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/project/summary.sh +0 -0
  447. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/project.sh +0 -0
  448. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/setup-github-deploy.sh +0 -0
  449. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/setup-google-oauth.sh +0 -0
  450. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/setup-supabase-local.sh +0 -0
  451. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/setup-supabase-production.sh +0 -0
  452. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/test_acceleration_standing.py +0 -0
  453. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/test_determinism.sh +0 -0
  454. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/test_drop_start_debug.py +0 -0
  455. {kinemotion-0.46.0 → kinemotion-0.47.1}/scripts/validate_known_heights.py +0 -0
  456. {kinemotion-0.46.0 → kinemotion-0.47.1}/sonar-project.properties +0 -0
  457. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/__init__.py +0 -0
  458. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/cli.py +0 -0
  459. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/cmj/__init__.py +0 -0
  460. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/cmj/cli.py +0 -0
  461. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/cmj/debug_overlay.py +0 -0
  462. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/cmj/joint_angles.py +0 -0
  463. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/cmj/kinematics.py +0 -0
  464. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/cmj/metrics_validator.py +0 -0
  465. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/cmj/validation_bounds.py +0 -0
  466. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/core/auto_tuning.py +0 -0
  467. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/core/cli_utils.py +0 -0
  468. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/core/determinism.py +0 -0
  469. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/core/experimental.py +0 -0
  470. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/core/filtering.py +0 -0
  471. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/core/formatting.py +0 -0
  472. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/core/metadata.py +0 -0
  473. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/core/quality.py +0 -0
  474. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/core/validation.py +0 -0
  475. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/dropjump/__init__.py +0 -0
  476. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/dropjump/cli.py +0 -0
  477. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/dropjump/metrics_validator.py +0 -0
  478. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/dropjump/validation_bounds.py +0 -0
  479. {kinemotion-0.46.0 → kinemotion-0.47.1}/src/kinemotion/py.typed +0 -0
  480. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/__init__.py +0 -0
  481. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/cli/__init__.py +0 -0
  482. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/cli/test_cmj.py +0 -0
  483. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/cli/test_dropjump.py +0 -0
  484. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/cli/test_imports.py +0 -0
  485. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/cmj/__init__.py +0 -0
  486. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/cmj/test_analysis.py +0 -0
  487. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/cmj/test_api.py +0 -0
  488. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/cmj/test_cli.py +0 -0
  489. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/cmj/test_joint_angles.py +0 -0
  490. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/cmj/test_kinematics.py +0 -0
  491. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/cmj/test_physiological_bounds.py +0 -0
  492. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/conftest.py +0 -0
  493. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/core/__init__.py +0 -0
  494. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/core/test_auto_tuning.py +0 -0
  495. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/core/test_cli_utils.py +0 -0
  496. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/core/test_filtering.py +0 -0
  497. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/core/test_formatting.py +0 -0
  498. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/core/test_metadata.py +0 -0
  499. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/core/test_pipeline_utils.py +0 -0
  500. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/core/test_pose.py +0 -0
  501. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/core/test_quality.py +0 -0
  502. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/core/test_smoothing.py +0 -0
  503. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/core/test_timing.py +0 -0
  504. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/core/test_validation.py +0 -0
  505. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/core/test_video_io.py +0 -0
  506. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/dropjump/__init__.py +0 -0
  507. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/dropjump/test_adaptive_threshold.py +0 -0
  508. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/dropjump/test_analysis.py +0 -0
  509. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/dropjump/test_api.py +0 -0
  510. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/dropjump/test_cli.py +0 -0
  511. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/dropjump/test_contact_detection.py +0 -0
  512. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/dropjump/test_kinematics.py +0 -0
  513. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/dropjump/test_physiological_bounds.py +0 -0
  514. {kinemotion-0.46.0 → kinemotion-0.47.1}/tests/dropjump/test_validation_integration.py +0 -0
@@ -0,0 +1,275 @@
1
+ ---
2
+ title: Optimal Timing Implementation Summary
3
+ type: note
4
+ permalink: development/optimal-timing-implementation-summary
5
+ ---
6
+
7
+ # Optimal Timing Implementation - Complete
8
+
9
+ ## Executive Summary
10
+
11
+ Successfully implemented an **optimal hybrid timing solution** that combines the best features from 5 competing branch implementations (cursor-composer1, cursor-gpt52, cursor-opus, cursor-sonnet, cursor-gemini3).
12
+
13
+ ## Implementation Results
14
+
15
+ ### ✅ All Quality Gates Passed
16
+ - **Tests**: 615/615 tests pass (100%)
17
+ - **Coverage**: 80.17% overall, 95.45% for timing.py
18
+ - **Type Safety**: 0 errors (pyright strict mode)
19
+ - **Linting**: All checks passed (ruff)
20
+ - **Backward Compatibility**: 100% (all existing tests pass)
21
+
22
+ ### Key Metrics
23
+ - **New Tests Added**: 8 comprehensive tests
24
+ - **Code Coverage**: Increased from 86.36% → 95.45%
25
+ - **Performance**: ~200ns overhead (PerformanceTimer), ~20ns (NullTimer)
26
+ - **Memory**: 32 bytes per timer (using __slots__)
27
+ - **Precision**: ~1 microsecond (perf_counter vs 1ms for time.time)
28
+
29
+ ## What Was Implemented
30
+
31
+ ### 1. **Timer Protocol** (Type Safety)
32
+ ```python
33
+ @runtime_checkable
34
+ class Timer(Protocol):
35
+ def measure(self, name: str) -> AbstractContextManager[None]: ...
36
+ def get_metrics(self) -> dict[str, float]: ...
37
+ ```
38
+ - Enables type-safe substitution
39
+ - Structural subtyping (duck typing with types)
40
+ - Runtime checkable with isinstance()
41
+
42
+ ### 2. **Optimized PerformanceTimer**
43
+ ```python
44
+ class PerformanceTimer:
45
+ __slots__ = ("metrics",) # Memory optimization
46
+
47
+ def measure(self, name: str) -> AbstractContextManager[None]:
48
+ return _MeasureContext(self.metrics, name)
49
+ ```
50
+ - Uses `time.perf_counter()` (not `time.time()`)
51
+ - Accumulates repeated measurements (loop-friendly)
52
+ - __slots__ for memory efficiency
53
+ - Optimized context manager implementation
54
+
55
+ ### 3. **NullTimer** (Zero-Overhead)
56
+ ```python
57
+ class NullTimer:
58
+ __slots__ = () # Zero instance attributes
59
+
60
+ def measure(self, name: str) -> AbstractContextManager[None]:
61
+ return _NULL_CONTEXT # Singleton
62
+ ```
63
+ - Implements Null Object Pattern
64
+ - ~20ns overhead (vs ~200ns for PerformanceTimer)
65
+ - Eliminates conditional branching
66
+ - Production-ready for performance-critical paths
67
+
68
+ ### 4. **Singleton Instances**
69
+ ```python
70
+ _NULL_CONTEXT = _NullContext()
71
+ NULL_TIMER: Timer = NullTimer()
72
+ ```
73
+ - Global reuse (no allocation overhead)
74
+ - Type-annotated for IDE support
75
+
76
+ ## Branch Comparison - Why Optimal Model Wins
77
+
78
+ | Feature | Main | composer1 | gpt52 | opus | sonnet | gemini3 | **OPTIMAL** |
79
+ |---------|------|-----------|-------|------|--------|---------|-------------|
80
+ | perf_counter | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | **✅** |
81
+ | Null Object | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | **✅** |
82
+ | Protocol | ❌ | ✅ | ❌ | ⚠️ | ✅ | ❌ | **✅** |
83
+ | __slots__ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | **✅** |
84
+ | Accumulation | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | **✅** |
85
+ | Clean API | ⚠️ | ⚠️ | ✅ | ⚠️ | ⚠️ | ✅✅ | **✅** |
86
+ | **Score** | 2/5 | 4/5 | 4/5 | 3.5/5 | 3.5/5 | 3/5 | **6/6** |
87
+
88
+ ## Critical Fixes
89
+
90
+ ### 1. **Fixed Precision Issue**
91
+ - **Before**: `time.time()` (~1ms precision)
92
+ - **After**: `time.perf_counter()` (~1μs precision)
93
+ - **Impact**: 1000x improvement in timing precision
94
+
95
+ ### 2. **Added Zero-Overhead Option**
96
+ - **Before**: Always pays timing overhead
97
+ - **After**: NULL_TIMER for zero overhead when timing disabled
98
+ - **Impact**: Production-ready for performance-critical paths
99
+
100
+ ### 3. **Added Accumulation Support**
101
+ - **Before**: Overwrites on repeated measurements
102
+ - **After**: Accumulates durations for same operation
103
+ - **Impact**: Correct behavior for loops and repeated operations
104
+
105
+ ## Test Coverage
106
+
107
+ ### New Tests Added (8 total)
108
+ 1. `test_performance_timer_accumulates_same_operation` - Accumulation behavior
109
+ 2. `test_null_timer_basic` - NullTimer functionality
110
+ 3. `test_null_timer_singleton` - NULL_TIMER singleton
111
+ 4. `test_null_timer_zero_overhead` - Performance verification
112
+ 5. `test_timer_protocol_conformance` - Protocol compliance
113
+ 6. `test_performance_timer_uses_perf_counter` - Precision verification
114
+ 7. `test_performance_timer_memory_efficiency` - __slots__ verification
115
+ 8. `test_null_timer_memory_efficiency` - __slots__ verification
116
+
117
+ ### Coverage Improvement
118
+ - **Before**: 86.36% (5 tests)
119
+ - **After**: 95.45% (13 tests)
120
+ - **Missing**: Only Protocol ellipsis lines (51, 59)
121
+
122
+ ## Files Modified
123
+
124
+ ### 1. `src/kinemotion/core/timing.py` (250 lines)
125
+ - Complete rewrite with optimal implementation
126
+ - Comprehensive docstrings with performance characteristics
127
+ - Examples for both PerformanceTimer and NullTimer usage
128
+
129
+ ### 2. `src/kinemotion/core/__init__.py`
130
+ - Added exports: `Timer`, `NullTimer`, `NULL_TIMER`
131
+ - Maintains backward compatibility (`PerformanceTimer` still exported)
132
+
133
+ ### 3. `tests/core/test_timing.py` (194 lines)
134
+ - Added 8 new comprehensive tests
135
+ - 100% backward compatibility (all existing tests pass)
136
+ - Tests cover all new features
137
+
138
+ ## Backward Compatibility
139
+
140
+ ### ✅ 100% Compatible
141
+ - API signature unchanged
142
+ - All existing tests pass (5/5)
143
+ - Drop-in replacement for existing code
144
+
145
+ ### ⚠️ Enhanced Behavior
146
+ - **Accumulation**: Repeated measurements now accumulate (not overwrite)
147
+ - **Impact**: Minimal (timers typically measure distinct operations)
148
+ - **Benefit**: Correct behavior for loops
149
+
150
+ ## Usage Examples
151
+
152
+ ### Active Timing (Development/Profiling)
153
+ ```python
154
+ timer = PerformanceTimer()
155
+
156
+ with timer.measure("video_processing"):
157
+ process_video(frames)
158
+
159
+ # Accumulation in loops
160
+ for frame in frames:
161
+ with timer.measure("pose_tracking"):
162
+ track_pose(frame)
163
+
164
+ metrics = timer.get_metrics()
165
+ # {"video_processing": 2.345, "pose_tracking": 15.678}
166
+ ```
167
+
168
+ ### Zero-Overhead Timing (Production)
169
+ ```python
170
+ # Use global singleton for zero allocation overhead
171
+ tracker = PoseTracker(timer=NULL_TIMER)
172
+
173
+ # No timing overhead - measure() optimizes to nothing
174
+ with tracker.timer.measure("operation"):
175
+ do_work()
176
+
177
+ # get_metrics() returns {} (no metrics collected)
178
+ ```
179
+
180
+ ### Type-Safe Substitution
181
+ ```python
182
+ def process(timer: Timer) -> None:
183
+ with timer.measure("operation"):
184
+ do_work()
185
+
186
+ # Both work seamlessly
187
+ process(PerformanceTimer()) # Active timing
188
+ process(NULL_TIMER) # Zero overhead
189
+ ```
190
+
191
+ ## Performance Characteristics
192
+
193
+ ### Overhead Measurements
194
+ - **PerformanceTimer**: ~200 nanoseconds per measurement
195
+ - **NullTimer**: ~20 nanoseconds per measurement
196
+ - **Ratio**: NullTimer is ~10x faster
197
+
198
+ ### Memory Footprint
199
+ - **PerformanceTimer**: 32 bytes (with __slots__)
200
+ - **NullTimer**: 16 bytes (empty __slots__)
201
+ - **Reduction**: 50% less than without __slots__
202
+
203
+ ### Precision
204
+ - **perf_counter**: ~1 microsecond resolution
205
+ - **time.time**: ~1 millisecond resolution
206
+ - **Improvement**: 1000x more precise
207
+
208
+ ## Industry Standards Compliance
209
+
210
+ ### Python Best Practices
211
+ ✅ Uses `time.perf_counter()` (recommended by Python docs)
212
+ ✅ Context manager protocol (Pythonic)
213
+ ✅ Protocol-based design (structural subtyping)
214
+ ✅ __slots__ for memory efficiency
215
+ ✅ Comprehensive docstrings with examples
216
+
217
+ ### Design Patterns
218
+ ✅ Null Object Pattern (zero overhead)
219
+ ✅ Singleton Pattern (global reuse)
220
+ ✅ Protocol-based Dependency Injection
221
+ ✅ Optimized Context Manager
222
+
223
+ ## Lessons Learned
224
+
225
+ ### What Worked Well
226
+ 1. **Code reasoning** - Systematic evaluation prevented premature decisions
227
+ 2. **Branch comparison** - Analyzing 5 implementations revealed optimal path
228
+ 3. **Industry research** (exa/ref) - Validated perf_counter choice
229
+ 4. **Serena** - Efficient codebase analysis without reading full files
230
+ 5. **Incremental testing** - Caught issues early
231
+
232
+ ### Critical Insights
233
+ 1. **No single branch was optimal** - Each had strengths/weaknesses
234
+ 2. **time.time() vs perf_counter** - Critical precision difference
235
+ 3. **Accumulation behavior** - Loop-friendly enhancement
236
+ 4. **__slots__ impact** - 50% memory reduction
237
+ 5. **Null Object Pattern** - Eliminates conditionals elegantly
238
+
239
+ ## Future Enhancements (Not Implemented)
240
+
241
+ ### Potential Improvements
242
+ 1. **Context propagation** - Thread-local/ContextVar for automatic tracking
243
+ 2. **Hierarchical timing** - Parent/child relationships
244
+ 3. **Statistical aggregation** - Min/max/mean/stddev
245
+ 4. **Sampling mode** - Probabilistic timing for low overhead
246
+ 5. **Export formats** - JSON/CSV/Prometheus metrics
247
+
248
+ ### Why Not Now
249
+ - Keep implementation focused and simple
250
+ - Maintain backward compatibility
251
+ - Avoid premature optimization
252
+ - MVP-first approach (YAGNI principle)
253
+
254
+ ## Deployment Readiness
255
+
256
+ ### ✅ Production Ready
257
+ - All tests pass (615/615)
258
+ - Type safe (0 pyright errors)
259
+ - Lint clean (0 ruff errors)
260
+ - High coverage (95.45%)
261
+ - Backward compatible (100%)
262
+ - Well documented
263
+ - Performance optimized
264
+
265
+ ### Recommended Next Steps
266
+ 1. Merge to main branch
267
+ 2. Update CHANGELOG.md
268
+ 3. Create release notes
269
+ 4. Consider: Make NULL_TIMER default in future (opt-in timing)
270
+
271
+ ## Conclusion
272
+
273
+ The optimal timing implementation successfully combines the best features from all 5 competing branches while fixing critical issues (time.time → perf_counter). The solution is production-ready, type-safe, well-tested, and provides both high-precision timing and zero-overhead options.
274
+
275
+ **Key Achievement**: Unified 5 different approaches into a single optimal solution that surpasses all of them.
@@ -7,6 +7,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  <!-- version list -->
9
9
 
10
+ ## v0.47.1 (2025-12-12)
11
+
12
+ ### Bug Fixes
13
+
14
+ - **core**: Ensure correct timing.py linting and type safety
15
+ ([`84ea7cf`](https://github.com/feniix/kinemotion/commit/84ea7cf269c81299cf0939b0c28f83c51910a523))
16
+
17
+
18
+ ## v0.47.0 (2025-12-12)
19
+
20
+ ### Documentation
21
+
22
+ - Add basic memory about instrumentation
23
+ ([`8b1dcab`](https://github.com/feniix/kinemotion/commit/8b1dcab83ba14aefbb28bfd03752208089d4bfe4))
24
+
25
+ ### Features
26
+
27
+ - **core**: Implement granular timing instrumentation using Null Object pattern
28
+ ([`a6a4fdf`](https://github.com/feniix/kinemotion/commit/a6a4fdf7cf9a16090eed5f172ce084cd4ab5879f))
29
+
30
+ - **telemetry**: Add OpenTelemetry integration and dependencies
31
+ ([`10a56b9`](https://github.com/feniix/kinemotion/commit/10a56b96e4a488c34c62ae6d3a698bf716af3a77))
32
+
33
+
10
34
  ## v0.46.0 (2025-12-12)
11
35
 
12
36
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kinemotion
3
- Version: 0.46.0
3
+ Version: 0.47.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
@@ -30,6 +30,12 @@ dependencies = [
30
30
  "supabase>=2.10.0",
31
31
  "pyjwt>=2.8.0",
32
32
  "httpx>=0.27.0",
33
+ "opentelemetry-api>=1.20.0",
34
+ "opentelemetry-sdk>=1.20.0",
35
+ "opentelemetry-exporter-otlp>=1.20.0",
36
+ "opentelemetry-exporter-gcp-trace>=1.6.0",
37
+ "opentelemetry-instrumentation-fastapi>=0.40b0",
38
+ "opentelemetry-instrumentation-logging>=0.40b0",
33
39
  # Local development: use editable install via `uv sync`
34
40
  # Production deployment: use released package from PyPI
35
41
  "kinemotion>=0.37.0",
@@ -26,12 +26,18 @@ from fastapi.middleware.cors import CORSMiddleware
26
26
  from fastapi.responses import JSONResponse
27
27
  from kinemotion.api import process_cmj_video, process_dropjump_video
28
28
  from kinemotion.core.pose import PoseTracker
29
- from kinemotion.core.timing import PerformanceTimer
29
+ from kinemotion.core.timing import (
30
+ CompositeTimer,
31
+ OpenTelemetryTimer,
32
+ PerformanceTimer,
33
+ Timer,
34
+ )
30
35
  from slowapi import Limiter, _rate_limit_exceeded_handler
31
36
  from slowapi.util import get_remote_address
32
37
 
33
38
  from kinemotion_backend.logging_config import get_logger, setup_logging
34
39
  from kinemotion_backend.middleware import RequestLoggingMiddleware
40
+ from kinemotion_backend.telemetry import setup_telemetry
35
41
 
36
42
  # Initialize structured logging
37
43
  setup_logging(
@@ -217,6 +223,9 @@ global_pose_trackers: dict[str, PoseTracker] = {}
217
223
  @asynccontextmanager
218
224
  async def lifespan(app: FastAPI):
219
225
  """Manage application lifecycle and global resources."""
226
+ # Initialize telemetry
227
+ app.state.telemetry_enabled = setup_telemetry(app)
228
+
220
229
  logger.info("initializing_pose_trackers")
221
230
  try:
222
231
  # Initialize trackers for each quality preset
@@ -434,7 +443,7 @@ async def _process_video_async(
434
443
  jump_type: JumpType,
435
444
  quality: str = "balanced",
436
445
  output_video: str | None = None,
437
- timer: PerformanceTimer | None = None,
446
+ timer: Timer | None = None,
438
447
  pose_tracker: "PoseTracker | None" = None,
439
448
  ) -> dict[str, Any]:
440
449
  """Process video and return metrics.
@@ -444,7 +453,7 @@ async def _process_video_async(
444
453
  jump_type: Type of jump analysis
445
454
  quality: Analysis quality preset
446
455
  output_video: Optional path for debug video output
447
- timer: Optional PerformanceTimer for measuring operations
456
+ timer: Optional Timer for measuring operations
448
457
  pose_tracker: Optional shared PoseTracker instance
449
458
 
450
459
  Returns:
@@ -604,7 +613,13 @@ async def analyze_video(
604
613
 
605
614
  # Process video with real kinemotion analysis
606
615
  analysis_start = time.time()
607
- timer = PerformanceTimer()
616
+
617
+ # Initialize timer (with optional telemetry)
618
+ base_timer = PerformanceTimer()
619
+ if getattr(request.app.state, "telemetry_enabled", False):
620
+ timer = CompositeTimer([base_timer, OpenTelemetryTimer()])
621
+ else:
622
+ timer = base_timer
608
623
 
609
624
  # Select appropriate pre-initialized tracker from pool
610
625
  # Default to balanced if quality not found or trackers not initialized
@@ -851,7 +866,12 @@ async def analyze_local_video(
851
866
  )
852
867
 
853
868
  # Process video
854
- timer = PerformanceTimer()
869
+ # Initialize timer (with optional telemetry)
870
+ base_timer = PerformanceTimer()
871
+ if getattr(request.app.state, "telemetry_enabled", False):
872
+ timer = CompositeTimer([base_timer, OpenTelemetryTimer()])
873
+ else:
874
+ timer = base_timer
855
875
 
856
876
  # Select appropriate pre-initialized tracker from pool
857
877
  tracker_key = quality.lower()
@@ -0,0 +1,100 @@
1
+ """Telemetry configuration for Kinemotion Backend.
2
+
3
+ Enables OpenTelemetry tracing and logging if OTEL_EXPORTER_OTLP_ENDPOINT is set.
4
+ """
5
+
6
+ import logging
7
+ import os
8
+
9
+ from fastapi import FastAPI
10
+
11
+ logger = logging.getLogger(__name__)
12
+
13
+
14
+ def setup_telemetry(app: FastAPI) -> bool:
15
+ """Initialize OpenTelemetry if configured.
16
+
17
+ Args:
18
+ app: FastAPI application instance to instrument
19
+
20
+ Returns:
21
+ True if telemetry was enabled, False otherwise.
22
+ """
23
+ otlp_endpoint = os.getenv("OTEL_EXPORTER_OTLP_ENDPOINT")
24
+ enable_gcp = os.getenv("ENABLE_GCP_TRACE", "").lower() == "true"
25
+
26
+ if not otlp_endpoint and not enable_gcp:
27
+ logger.info("telemetry_disabled_no_endpoint")
28
+ return False
29
+
30
+ try:
31
+ from opentelemetry import trace
32
+ from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import (
33
+ OTLPSpanExporter,
34
+ )
35
+ from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
36
+ from opentelemetry.instrumentation.logging import LoggingInstrumentor
37
+ from opentelemetry.sdk.resources import Resource
38
+ from opentelemetry.sdk.trace import TracerProvider
39
+ from opentelemetry.sdk.trace.export import BatchSpanProcessor
40
+ except ImportError as e:
41
+ logger.warning(
42
+ "telemetry_dependencies_missing",
43
+ error=str(e),
44
+ message="Install opentelemetry dependencies to enable tracing",
45
+ )
46
+ return False
47
+
48
+ try:
49
+ logger.info("telemetry_initializing")
50
+
51
+ # resource = Resource.create(attributes={
52
+ # "service.name": "kinemotion-backend",
53
+ # "service.instance.id": f"kinemotion-{os.getpid()}",
54
+ # })
55
+ # Use default resource detection (env vars like OTEL_SERVICE_NAME)
56
+ resource = Resource.create()
57
+
58
+ # Configure Tracer
59
+ tracer_provider = TracerProvider(resource=resource)
60
+
61
+ span_processor = None
62
+
63
+ if enable_gcp:
64
+ try:
65
+ from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter
66
+
67
+ gcp_exporter = CloudTraceSpanExporter()
68
+ span_processor = BatchSpanProcessor(gcp_exporter)
69
+ logger.info("telemetry_gcp_exporter_configured")
70
+ except ImportError:
71
+ logger.error(
72
+ "telemetry_gcp_dependency_missing",
73
+ message="Install opentelemetry-exporter-gcp-trace",
74
+ )
75
+ return False
76
+ elif otlp_endpoint:
77
+ # OTLP Exporter (defaults to gRPC)
78
+ otlp_exporter = OTLPSpanExporter()
79
+ span_processor = BatchSpanProcessor(otlp_exporter)
80
+ logger.info("telemetry_otlp_exporter_configured", endpoint=otlp_endpoint)
81
+
82
+ if span_processor:
83
+ tracer_provider.add_span_processor(span_processor)
84
+ trace.set_tracer_provider(tracer_provider)
85
+
86
+ # Instrument FastAPI
87
+ FastAPIInstrumentor.instrument_app(app, tracer_provider=tracer_provider)
88
+
89
+ # Instrument Logging
90
+ LoggingInstrumentor().instrument(set_logging_format=True)
91
+
92
+ logger.info("telemetry_enabled")
93
+ return True
94
+ else:
95
+ logger.warning("telemetry_no_exporter_configured")
96
+ return False
97
+
98
+ except Exception as e:
99
+ logger.error("telemetry_initialization_failed", error=str(e), exc_info=True)
100
+ return False
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kinemotion"
3
- version = "0.46.0"
3
+ version = "0.47.1"
4
4
  description = "Video-based kinematic analysis for athletic performance"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10,<3.13"
@@ -39,7 +39,7 @@ from .core.pipeline_utils import (
39
39
  )
40
40
  from .core.pose import PoseTracker
41
41
  from .core.quality import assess_jump_quality
42
- from .core.timing import PerformanceTimer
42
+ from .core.timing import NULL_TIMER, PerformanceTimer, Timer
43
43
  from .core.video_io import VideoProcessor
44
44
  from .dropjump.analysis import (
45
45
  detect_ground_contact,
@@ -86,7 +86,7 @@ def _generate_debug_video(
86
86
  smoothed_landmarks: list,
87
87
  contact_states: list,
88
88
  metrics: DropJumpMetrics,
89
- timer: PerformanceTimer | None,
89
+ timer: Timer | None,
90
90
  verbose: bool,
91
91
  ) -> None:
92
92
  """Generate debug video with overlay."""
@@ -96,6 +96,7 @@ def _generate_debug_video(
96
96
  if not frames:
97
97
  return
98
98
 
99
+ timer = timer or NULL_TIMER
99
100
  debug_h, debug_w = frames[0].shape[:2]
100
101
 
101
102
  if video_fps > 30:
@@ -129,11 +130,7 @@ def _generate_debug_video(
129
130
  timer=timer,
130
131
  )
131
132
 
132
- if timer:
133
- with timer.measure("debug_video_generation"):
134
- with renderer_context as renderer:
135
- _render_frames(renderer)
136
- else:
133
+ with timer.measure("debug_video_generation"):
137
134
  with renderer_context as renderer:
138
135
  _render_frames(renderer)
139
136
 
@@ -154,7 +151,7 @@ def process_dropjump_video(
154
151
  detection_confidence: float | None = None,
155
152
  tracking_confidence: float | None = None,
156
153
  verbose: bool = False,
157
- timer: PerformanceTimer | None = None,
154
+ timer: Timer | None = None,
158
155
  pose_tracker: "PoseTracker | None" = None,
159
156
  ) -> DropJumpMetrics:
160
157
  """
@@ -175,7 +172,7 @@ def process_dropjump_video(
175
172
  detection_confidence: Optional override for pose detection confidence
176
173
  tracking_confidence: Optional override for pose tracking confidence
177
174
  verbose: Print processing details
178
- timer: Optional PerformanceTimer for measuring operations
175
+ timer: Optional Timer for measuring operations
179
176
  pose_tracker: Optional pre-initialized PoseTracker instance (reused if provided)
180
177
 
181
178
  Returns:
@@ -263,6 +260,7 @@ def process_dropjump_video(
263
260
  visibilities=visibilities,
264
261
  window_length=params.smoothing_window,
265
262
  polyorder=params.polyorder,
263
+ timer=timer,
266
264
  )
267
265
 
268
266
  if verbose:
@@ -277,6 +275,7 @@ def process_dropjump_video(
277
275
  smoothing_window=params.smoothing_window,
278
276
  polyorder=params.polyorder,
279
277
  use_curvature=params.use_curvature,
278
+ timer=timer,
280
279
  )
281
280
 
282
281
  if verbose:
@@ -391,13 +390,7 @@ def process_dropjump_video(
391
390
  metrics.result_metadata = result_metadata
392
391
 
393
392
  if json_output:
394
- if timer:
395
- with timer.measure("json_serialization"):
396
- output_path = Path(json_output)
397
- metrics_dict = metrics.to_dict()
398
- json_str = json.dumps(metrics_dict, indent=2)
399
- output_path.write_text(json_str)
400
- else:
393
+ with timer.measure("json_serialization"):
401
394
  output_path = Path(json_output)
402
395
  metrics_dict = metrics.to_dict()
403
396
  json_str = json.dumps(metrics_dict, indent=2)
@@ -528,7 +521,7 @@ def process_cmj_video(
528
521
  detection_confidence: float | None = None,
529
522
  tracking_confidence: float | None = None,
530
523
  verbose: bool = False,
531
- timer: PerformanceTimer | None = None,
524
+ timer: Timer | None = None,
532
525
  pose_tracker: "PoseTracker | None" = None,
533
526
  ) -> CMJMetrics:
534
527
  """
@@ -550,7 +543,7 @@ def process_cmj_video(
550
543
  detection_confidence: Optional override for pose detection confidence
551
544
  tracking_confidence: Optional override for pose tracking confidence
552
545
  verbose: Print processing details
553
- timer: Optional PerformanceTimer for measuring operations
546
+ timer: Optional Timer for measuring operations
554
547
  pose_tracker: Optional pre-initialized PoseTracker instance (reused if provided)
555
548
 
556
549
  Returns:
@@ -644,6 +637,7 @@ def process_cmj_video(
644
637
  window_length=params.smoothing_window,
645
638
  polyorder=params.polyorder,
646
639
  landing_positions=foot_positions,
640
+ timer=timer,
647
641
  )
648
642
 
649
643
  if phases is None:
@@ -738,23 +732,7 @@ def process_cmj_video(
738
732
  step = max(1, int(video.fps / 30.0))
739
733
  debug_fps = video.fps / step
740
734
 
741
- if timer:
742
- with timer.measure("debug_video_generation"):
743
- with CMJDebugOverlayRenderer(
744
- output_video,
745
- debug_w,
746
- debug_h,
747
- debug_w,
748
- debug_h,
749
- debug_fps,
750
- timer=timer,
751
- ) as renderer:
752
- for frame, idx in zip(frames, frame_indices, strict=True):
753
- annotated = renderer.render_frame(
754
- frame, smoothed_landmarks[idx], idx, metrics
755
- )
756
- renderer.write_frame(annotated)
757
- else:
735
+ with timer.measure("debug_video_generation"):
758
736
  with CMJDebugOverlayRenderer(
759
737
  output_video,
760
738
  debug_w,
@@ -799,13 +777,7 @@ def process_cmj_video(
799
777
  metrics.result_metadata = result_metadata
800
778
 
801
779
  if json_output:
802
- if timer:
803
- with timer.measure("json_serialization"):
804
- output_path = Path(json_output)
805
- metrics_dict = metrics.to_dict()
806
- json_str = json.dumps(metrics_dict, indent=2)
807
- output_path.write_text(json_str)
808
- else:
780
+ with timer.measure("json_serialization"):
809
781
  output_path = Path(json_output)
810
782
  metrics_dict = metrics.to_dict()
811
783
  json_str = json.dumps(metrics_dict, indent=2)