pymomentum-cpu 0.1.78.post11__cp312-cp312-win_amd64.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 pymomentum-cpu might be problematic. Click here for more details.

Files changed (512) hide show
  1. include/axel/BoundingBox.h +58 -0
  2. include/axel/Bvh.h +708 -0
  3. include/axel/BvhBase.h +75 -0
  4. include/axel/BvhCommon.h +43 -0
  5. include/axel/BvhEmbree.h +86 -0
  6. include/axel/BvhFactory.h +34 -0
  7. include/axel/Checks.h +21 -0
  8. include/axel/DualContouring.h +79 -0
  9. include/axel/KdTree.h +199 -0
  10. include/axel/Log.h +22 -0
  11. include/axel/MeshToSdf.h +123 -0
  12. include/axel/Profile.h +64 -0
  13. include/axel/Ray.h +45 -0
  14. include/axel/SignedDistanceField.h +248 -0
  15. include/axel/SimdKdTree.h +515 -0
  16. include/axel/TriBvh.h +157 -0
  17. include/axel/TriBvhEmbree.h +57 -0
  18. include/axel/common/Constants.h +27 -0
  19. include/axel/common/Types.h +21 -0
  20. include/axel/common/VectorizationTypes.h +58 -0
  21. include/axel/math/BoundingBoxUtils.h +54 -0
  22. include/axel/math/ContinuousCollisionDetection.h +48 -0
  23. include/axel/math/CoplanarityCheck.h +30 -0
  24. include/axel/math/EdgeEdgeDistance.h +31 -0
  25. include/axel/math/MeshHoleFilling.h +117 -0
  26. include/axel/math/PointTriangleProjection.h +34 -0
  27. include/axel/math/PointTriangleProjectionDefinitions.h +209 -0
  28. include/axel/math/RayTriangleIntersection.h +36 -0
  29. include/momentum/character/blend_shape.h +91 -0
  30. include/momentum/character/blend_shape_base.h +70 -0
  31. include/momentum/character/blend_shape_skinning.h +96 -0
  32. include/momentum/character/character.h +272 -0
  33. include/momentum/character/character_state.h +108 -0
  34. include/momentum/character/character_utility.h +128 -0
  35. include/momentum/character/collision_geometry.h +80 -0
  36. include/momentum/character/collision_geometry_state.h +130 -0
  37. include/momentum/character/fwd.h +262 -0
  38. include/momentum/character/inverse_parameter_transform.h +58 -0
  39. include/momentum/character/joint.h +82 -0
  40. include/momentum/character/joint_state.h +241 -0
  41. include/momentum/character/linear_skinning.h +139 -0
  42. include/momentum/character/locator.h +82 -0
  43. include/momentum/character/locator_state.h +43 -0
  44. include/momentum/character/marker.h +48 -0
  45. include/momentum/character/mesh_state.h +71 -0
  46. include/momentum/character/parameter_limits.h +144 -0
  47. include/momentum/character/parameter_transform.h +250 -0
  48. include/momentum/character/pose_shape.h +65 -0
  49. include/momentum/character/skeleton.h +85 -0
  50. include/momentum/character/skeleton_state.h +181 -0
  51. include/momentum/character/skeleton_utility.h +38 -0
  52. include/momentum/character/skin_weights.h +67 -0
  53. include/momentum/character/skinned_locator.h +80 -0
  54. include/momentum/character/types.h +202 -0
  55. include/momentum/character_sequence_solver/fwd.h +200 -0
  56. include/momentum/character_sequence_solver/model_parameters_sequence_error_function.h +65 -0
  57. include/momentum/character_sequence_solver/multipose_solver.h +65 -0
  58. include/momentum/character_sequence_solver/multipose_solver_function.h +82 -0
  59. include/momentum/character_sequence_solver/sequence_error_function.h +104 -0
  60. include/momentum/character_sequence_solver/sequence_solver.h +144 -0
  61. include/momentum/character_sequence_solver/sequence_solver_function.h +134 -0
  62. include/momentum/character_sequence_solver/state_sequence_error_function.h +109 -0
  63. include/momentum/character_sequence_solver/vertex_sequence_error_function.h +128 -0
  64. include/momentum/character_solver/aim_error_function.h +112 -0
  65. include/momentum/character_solver/collision_error_function.h +92 -0
  66. include/momentum/character_solver/collision_error_function_stateless.h +75 -0
  67. include/momentum/character_solver/constraint_error_function-inl.h +324 -0
  68. include/momentum/character_solver/constraint_error_function.h +248 -0
  69. include/momentum/character_solver/distance_error_function.h +77 -0
  70. include/momentum/character_solver/error_function_utils.h +60 -0
  71. include/momentum/character_solver/fixed_axis_error_function.h +139 -0
  72. include/momentum/character_solver/fwd.h +924 -0
  73. include/momentum/character_solver/gauss_newton_solver_qr.h +64 -0
  74. include/momentum/character_solver/limit_error_function.h +57 -0
  75. include/momentum/character_solver/model_parameters_error_function.h +64 -0
  76. include/momentum/character_solver/normal_error_function.h +73 -0
  77. include/momentum/character_solver/orientation_error_function.h +74 -0
  78. include/momentum/character_solver/plane_error_function.h +102 -0
  79. include/momentum/character_solver/point_triangle_vertex_error_function.h +141 -0
  80. include/momentum/character_solver/pose_prior_error_function.h +80 -0
  81. include/momentum/character_solver/position_error_function.h +75 -0
  82. include/momentum/character_solver/projection_error_function.h +93 -0
  83. include/momentum/character_solver/simd_collision_error_function.h +99 -0
  84. include/momentum/character_solver/simd_normal_error_function.h +157 -0
  85. include/momentum/character_solver/simd_plane_error_function.h +164 -0
  86. include/momentum/character_solver/simd_position_error_function.h +165 -0
  87. include/momentum/character_solver/skeleton_error_function.h +151 -0
  88. include/momentum/character_solver/skeleton_solver_function.h +94 -0
  89. include/momentum/character_solver/skinned_locator_error_function.h +166 -0
  90. include/momentum/character_solver/skinned_locator_triangle_error_function.h +146 -0
  91. include/momentum/character_solver/skinning_weight_iterator.h +80 -0
  92. include/momentum/character_solver/state_error_function.h +94 -0
  93. include/momentum/character_solver/transform_pose.h +80 -0
  94. include/momentum/character_solver/trust_region_qr.h +80 -0
  95. include/momentum/character_solver/vertex_error_function.h +155 -0
  96. include/momentum/character_solver/vertex_projection_error_function.h +126 -0
  97. include/momentum/character_solver/vertex_vertex_distance_error_function.h +151 -0
  98. include/momentum/common/aligned.h +155 -0
  99. include/momentum/common/checks.h +27 -0
  100. include/momentum/common/exception.h +70 -0
  101. include/momentum/common/filesystem.h +20 -0
  102. include/momentum/common/fwd.h +27 -0
  103. include/momentum/common/log.h +173 -0
  104. include/momentum/common/log_channel.h +17 -0
  105. include/momentum/common/memory.h +71 -0
  106. include/momentum/common/profile.h +79 -0
  107. include/momentum/common/progress_bar.h +37 -0
  108. include/momentum/common/string.h +52 -0
  109. include/momentum/diff_ik/ceres_utility.h +73 -0
  110. include/momentum/diff_ik/fully_differentiable_body_ik.h +58 -0
  111. include/momentum/diff_ik/fully_differentiable_distance_error_function.h +69 -0
  112. include/momentum/diff_ik/fully_differentiable_motion_error_function.h +46 -0
  113. include/momentum/diff_ik/fully_differentiable_orientation_error_function.h +114 -0
  114. include/momentum/diff_ik/fully_differentiable_pose_prior_error_function.h +76 -0
  115. include/momentum/diff_ik/fully_differentiable_position_error_function.h +138 -0
  116. include/momentum/diff_ik/fully_differentiable_projection_error_function.h +65 -0
  117. include/momentum/diff_ik/fully_differentiable_skeleton_error_function.h +160 -0
  118. include/momentum/diff_ik/fully_differentiable_state_error_function.h +54 -0
  119. include/momentum/diff_ik/fwd.h +385 -0
  120. include/momentum/diff_ik/union_error_function.h +67 -0
  121. include/momentum/gui/rerun/eigen_adapters.h +70 -0
  122. include/momentum/gui/rerun/logger.h +102 -0
  123. include/momentum/gui/rerun/logging_redirect.h +27 -0
  124. include/momentum/io/character_io.h +56 -0
  125. include/momentum/io/common/gsl_utils.h +50 -0
  126. include/momentum/io/common/stream_utils.h +65 -0
  127. include/momentum/io/fbx/fbx_io.h +109 -0
  128. include/momentum/io/fbx/fbx_memory_stream.h +66 -0
  129. include/momentum/io/fbx/openfbx_loader.h +49 -0
  130. include/momentum/io/fbx/polygon_data.h +60 -0
  131. include/momentum/io/gltf/gltf_builder.h +132 -0
  132. include/momentum/io/gltf/gltf_file_format.h +19 -0
  133. include/momentum/io/gltf/gltf_io.h +148 -0
  134. include/momentum/io/gltf/utils/accessor_utils.h +299 -0
  135. include/momentum/io/gltf/utils/coordinate_utils.h +60 -0
  136. include/momentum/io/gltf/utils/json_utils.h +102 -0
  137. include/momentum/io/legacy_json/legacy_json_io.h +70 -0
  138. include/momentum/io/marker/c3d_io.h +29 -0
  139. include/momentum/io/marker/conversions.h +57 -0
  140. include/momentum/io/marker/coordinate_system.h +30 -0
  141. include/momentum/io/marker/marker_io.h +54 -0
  142. include/momentum/io/marker/trc_io.h +27 -0
  143. include/momentum/io/motion/mmo_io.h +97 -0
  144. include/momentum/io/shape/blend_shape_io.h +70 -0
  145. include/momentum/io/shape/pose_shape_io.h +21 -0
  146. include/momentum/io/skeleton/locator_io.h +41 -0
  147. include/momentum/io/skeleton/mppca_io.h +26 -0
  148. include/momentum/io/skeleton/parameter_limits_io.h +25 -0
  149. include/momentum/io/skeleton/parameter_transform_io.h +41 -0
  150. include/momentum/io/skeleton/parameters_io.h +20 -0
  151. include/momentum/io/urdf/urdf_io.h +26 -0
  152. include/momentum/io/usd/usd_io.h +36 -0
  153. include/momentum/marker_tracking/app_utils.h +62 -0
  154. include/momentum/marker_tracking/marker_tracker.h +213 -0
  155. include/momentum/marker_tracking/process_markers.h +58 -0
  156. include/momentum/marker_tracking/tracker_utils.h +90 -0
  157. include/momentum/math/constants.h +82 -0
  158. include/momentum/math/covariance_matrix.h +84 -0
  159. include/momentum/math/fmt_eigen.h +23 -0
  160. include/momentum/math/fwd.h +132 -0
  161. include/momentum/math/generalized_loss.h +61 -0
  162. include/momentum/math/intersection.h +32 -0
  163. include/momentum/math/mesh.h +84 -0
  164. include/momentum/math/mppca.h +67 -0
  165. include/momentum/math/online_householder_qr.h +516 -0
  166. include/momentum/math/random-inl.h +404 -0
  167. include/momentum/math/random.h +310 -0
  168. include/momentum/math/simd_generalized_loss.h +40 -0
  169. include/momentum/math/transform.h +229 -0
  170. include/momentum/math/types.h +461 -0
  171. include/momentum/math/utility.h +251 -0
  172. include/momentum/rasterizer/camera.h +453 -0
  173. include/momentum/rasterizer/fwd.h +102 -0
  174. include/momentum/rasterizer/geometry.h +83 -0
  175. include/momentum/rasterizer/image.h +18 -0
  176. include/momentum/rasterizer/rasterizer.h +583 -0
  177. include/momentum/rasterizer/tensor.h +140 -0
  178. include/momentum/rasterizer/utility.h +268 -0
  179. include/momentum/simd/simd.h +221 -0
  180. include/momentum/solver/fwd.h +131 -0
  181. include/momentum/solver/gauss_newton_solver.h +136 -0
  182. include/momentum/solver/gradient_descent_solver.h +65 -0
  183. include/momentum/solver/solver.h +155 -0
  184. include/momentum/solver/solver_function.h +126 -0
  185. include/momentum/solver/subset_gauss_newton_solver.h +109 -0
  186. include/rerun/archetypes/annotation_context.hpp +157 -0
  187. include/rerun/archetypes/arrows2d.hpp +271 -0
  188. include/rerun/archetypes/arrows3d.hpp +257 -0
  189. include/rerun/archetypes/asset3d.hpp +262 -0
  190. include/rerun/archetypes/asset_video.hpp +275 -0
  191. include/rerun/archetypes/bar_chart.hpp +261 -0
  192. include/rerun/archetypes/boxes2d.hpp +293 -0
  193. include/rerun/archetypes/boxes3d.hpp +369 -0
  194. include/rerun/archetypes/capsules3d.hpp +333 -0
  195. include/rerun/archetypes/clear.hpp +180 -0
  196. include/rerun/archetypes/depth_image.hpp +425 -0
  197. include/rerun/archetypes/ellipsoids3d.hpp +384 -0
  198. include/rerun/archetypes/encoded_image.hpp +250 -0
  199. include/rerun/archetypes/geo_line_strings.hpp +166 -0
  200. include/rerun/archetypes/geo_points.hpp +177 -0
  201. include/rerun/archetypes/graph_edges.hpp +152 -0
  202. include/rerun/archetypes/graph_nodes.hpp +206 -0
  203. include/rerun/archetypes/image.hpp +434 -0
  204. include/rerun/archetypes/instance_poses3d.hpp +221 -0
  205. include/rerun/archetypes/line_strips2d.hpp +289 -0
  206. include/rerun/archetypes/line_strips3d.hpp +270 -0
  207. include/rerun/archetypes/mesh3d.hpp +387 -0
  208. include/rerun/archetypes/pinhole.hpp +385 -0
  209. include/rerun/archetypes/points2d.hpp +333 -0
  210. include/rerun/archetypes/points3d.hpp +369 -0
  211. include/rerun/archetypes/recording_properties.hpp +132 -0
  212. include/rerun/archetypes/scalar.hpp +170 -0
  213. include/rerun/archetypes/scalars.hpp +153 -0
  214. include/rerun/archetypes/segmentation_image.hpp +305 -0
  215. include/rerun/archetypes/series_line.hpp +274 -0
  216. include/rerun/archetypes/series_lines.hpp +271 -0
  217. include/rerun/archetypes/series_point.hpp +265 -0
  218. include/rerun/archetypes/series_points.hpp +251 -0
  219. include/rerun/archetypes/tensor.hpp +213 -0
  220. include/rerun/archetypes/text_document.hpp +200 -0
  221. include/rerun/archetypes/text_log.hpp +211 -0
  222. include/rerun/archetypes/transform3d.hpp +925 -0
  223. include/rerun/archetypes/video_frame_reference.hpp +295 -0
  224. include/rerun/archetypes/view_coordinates.hpp +393 -0
  225. include/rerun/archetypes.hpp +43 -0
  226. include/rerun/arrow_utils.hpp +32 -0
  227. include/rerun/as_components.hpp +90 -0
  228. include/rerun/blueprint/archetypes/background.hpp +113 -0
  229. include/rerun/blueprint/archetypes/container_blueprint.hpp +259 -0
  230. include/rerun/blueprint/archetypes/dataframe_query.hpp +178 -0
  231. include/rerun/blueprint/archetypes/entity_behavior.hpp +130 -0
  232. include/rerun/blueprint/archetypes/force_center.hpp +115 -0
  233. include/rerun/blueprint/archetypes/force_collision_radius.hpp +141 -0
  234. include/rerun/blueprint/archetypes/force_link.hpp +136 -0
  235. include/rerun/blueprint/archetypes/force_many_body.hpp +124 -0
  236. include/rerun/blueprint/archetypes/force_position.hpp +132 -0
  237. include/rerun/blueprint/archetypes/line_grid3d.hpp +178 -0
  238. include/rerun/blueprint/archetypes/map_background.hpp +104 -0
  239. include/rerun/blueprint/archetypes/map_zoom.hpp +103 -0
  240. include/rerun/blueprint/archetypes/near_clip_plane.hpp +109 -0
  241. include/rerun/blueprint/archetypes/panel_blueprint.hpp +95 -0
  242. include/rerun/blueprint/archetypes/plot_legend.hpp +118 -0
  243. include/rerun/blueprint/archetypes/scalar_axis.hpp +116 -0
  244. include/rerun/blueprint/archetypes/tensor_scalar_mapping.hpp +146 -0
  245. include/rerun/blueprint/archetypes/tensor_slice_selection.hpp +167 -0
  246. include/rerun/blueprint/archetypes/tensor_view_fit.hpp +95 -0
  247. include/rerun/blueprint/archetypes/view_blueprint.hpp +170 -0
  248. include/rerun/blueprint/archetypes/view_contents.hpp +142 -0
  249. include/rerun/blueprint/archetypes/viewport_blueprint.hpp +200 -0
  250. include/rerun/blueprint/archetypes/visible_time_ranges.hpp +116 -0
  251. include/rerun/blueprint/archetypes/visual_bounds2d.hpp +109 -0
  252. include/rerun/blueprint/archetypes/visualizer_overrides.hpp +113 -0
  253. include/rerun/blueprint/archetypes.hpp +29 -0
  254. include/rerun/blueprint/components/active_tab.hpp +82 -0
  255. include/rerun/blueprint/components/apply_latest_at.hpp +79 -0
  256. include/rerun/blueprint/components/auto_layout.hpp +77 -0
  257. include/rerun/blueprint/components/auto_views.hpp +77 -0
  258. include/rerun/blueprint/components/background_kind.hpp +66 -0
  259. include/rerun/blueprint/components/column_share.hpp +78 -0
  260. include/rerun/blueprint/components/component_column_selector.hpp +81 -0
  261. include/rerun/blueprint/components/container_kind.hpp +65 -0
  262. include/rerun/blueprint/components/corner2d.hpp +64 -0
  263. include/rerun/blueprint/components/enabled.hpp +77 -0
  264. include/rerun/blueprint/components/filter_by_range.hpp +74 -0
  265. include/rerun/blueprint/components/filter_is_not_null.hpp +77 -0
  266. include/rerun/blueprint/components/force_distance.hpp +82 -0
  267. include/rerun/blueprint/components/force_iterations.hpp +82 -0
  268. include/rerun/blueprint/components/force_strength.hpp +82 -0
  269. include/rerun/blueprint/components/grid_columns.hpp +78 -0
  270. include/rerun/blueprint/components/grid_spacing.hpp +78 -0
  271. include/rerun/blueprint/components/included_content.hpp +86 -0
  272. include/rerun/blueprint/components/lock_range_during_zoom.hpp +82 -0
  273. include/rerun/blueprint/components/map_provider.hpp +64 -0
  274. include/rerun/blueprint/components/near_clip_plane.hpp +82 -0
  275. include/rerun/blueprint/components/panel_state.hpp +61 -0
  276. include/rerun/blueprint/components/query_expression.hpp +89 -0
  277. include/rerun/blueprint/components/root_container.hpp +77 -0
  278. include/rerun/blueprint/components/row_share.hpp +78 -0
  279. include/rerun/blueprint/components/selected_columns.hpp +76 -0
  280. include/rerun/blueprint/components/tensor_dimension_index_slider.hpp +90 -0
  281. include/rerun/blueprint/components/timeline_name.hpp +76 -0
  282. include/rerun/blueprint/components/view_class.hpp +76 -0
  283. include/rerun/blueprint/components/view_fit.hpp +61 -0
  284. include/rerun/blueprint/components/view_maximized.hpp +79 -0
  285. include/rerun/blueprint/components/view_origin.hpp +81 -0
  286. include/rerun/blueprint/components/viewer_recommendation_hash.hpp +82 -0
  287. include/rerun/blueprint/components/visible_time_range.hpp +77 -0
  288. include/rerun/blueprint/components/visual_bounds2d.hpp +74 -0
  289. include/rerun/blueprint/components/visualizer_override.hpp +86 -0
  290. include/rerun/blueprint/components/zoom_level.hpp +78 -0
  291. include/rerun/blueprint/components.hpp +41 -0
  292. include/rerun/blueprint/datatypes/component_column_selector.hpp +61 -0
  293. include/rerun/blueprint/datatypes/filter_by_range.hpp +59 -0
  294. include/rerun/blueprint/datatypes/filter_is_not_null.hpp +61 -0
  295. include/rerun/blueprint/datatypes/selected_columns.hpp +62 -0
  296. include/rerun/blueprint/datatypes/tensor_dimension_index_slider.hpp +63 -0
  297. include/rerun/blueprint/datatypes.hpp +9 -0
  298. include/rerun/c/arrow_c_data_interface.h +111 -0
  299. include/rerun/c/compiler_utils.h +10 -0
  300. include/rerun/c/rerun.h +627 -0
  301. include/rerun/c/sdk_info.h +28 -0
  302. include/rerun/collection.hpp +496 -0
  303. include/rerun/collection_adapter.hpp +43 -0
  304. include/rerun/collection_adapter_builtins.hpp +138 -0
  305. include/rerun/compiler_utils.hpp +61 -0
  306. include/rerun/component_batch.hpp +163 -0
  307. include/rerun/component_column.hpp +111 -0
  308. include/rerun/component_descriptor.hpp +142 -0
  309. include/rerun/component_type.hpp +35 -0
  310. include/rerun/components/aggregation_policy.hpp +76 -0
  311. include/rerun/components/albedo_factor.hpp +74 -0
  312. include/rerun/components/annotation_context.hpp +102 -0
  313. include/rerun/components/axis_length.hpp +74 -0
  314. include/rerun/components/blob.hpp +73 -0
  315. include/rerun/components/class_id.hpp +71 -0
  316. include/rerun/components/clear_is_recursive.hpp +75 -0
  317. include/rerun/components/color.hpp +99 -0
  318. include/rerun/components/colormap.hpp +99 -0
  319. include/rerun/components/depth_meter.hpp +84 -0
  320. include/rerun/components/draw_order.hpp +79 -0
  321. include/rerun/components/entity_path.hpp +83 -0
  322. include/rerun/components/fill_mode.hpp +72 -0
  323. include/rerun/components/fill_ratio.hpp +79 -0
  324. include/rerun/components/gamma_correction.hpp +80 -0
  325. include/rerun/components/geo_line_string.hpp +63 -0
  326. include/rerun/components/graph_edge.hpp +75 -0
  327. include/rerun/components/graph_node.hpp +79 -0
  328. include/rerun/components/graph_type.hpp +57 -0
  329. include/rerun/components/half_size2d.hpp +91 -0
  330. include/rerun/components/half_size3d.hpp +95 -0
  331. include/rerun/components/image_buffer.hpp +86 -0
  332. include/rerun/components/image_format.hpp +84 -0
  333. include/rerun/components/image_plane_distance.hpp +77 -0
  334. include/rerun/components/interactive.hpp +76 -0
  335. include/rerun/components/keypoint_id.hpp +74 -0
  336. include/rerun/components/lat_lon.hpp +89 -0
  337. include/rerun/components/length.hpp +77 -0
  338. include/rerun/components/line_strip2d.hpp +73 -0
  339. include/rerun/components/line_strip3d.hpp +73 -0
  340. include/rerun/components/magnification_filter.hpp +63 -0
  341. include/rerun/components/marker_shape.hpp +82 -0
  342. include/rerun/components/marker_size.hpp +74 -0
  343. include/rerun/components/media_type.hpp +157 -0
  344. include/rerun/components/name.hpp +83 -0
  345. include/rerun/components/opacity.hpp +77 -0
  346. include/rerun/components/pinhole_projection.hpp +94 -0
  347. include/rerun/components/plane3d.hpp +75 -0
  348. include/rerun/components/pose_rotation_axis_angle.hpp +73 -0
  349. include/rerun/components/pose_rotation_quat.hpp +71 -0
  350. include/rerun/components/pose_scale3d.hpp +102 -0
  351. include/rerun/components/pose_transform_mat3x3.hpp +87 -0
  352. include/rerun/components/pose_translation3d.hpp +96 -0
  353. include/rerun/components/position2d.hpp +86 -0
  354. include/rerun/components/position3d.hpp +90 -0
  355. include/rerun/components/radius.hpp +98 -0
  356. include/rerun/components/range1d.hpp +75 -0
  357. include/rerun/components/resolution.hpp +88 -0
  358. include/rerun/components/rotation_axis_angle.hpp +72 -0
  359. include/rerun/components/rotation_quat.hpp +71 -0
  360. include/rerun/components/scalar.hpp +76 -0
  361. include/rerun/components/scale3d.hpp +102 -0
  362. include/rerun/components/series_visible.hpp +76 -0
  363. include/rerun/components/show_labels.hpp +79 -0
  364. include/rerun/components/stroke_width.hpp +74 -0
  365. include/rerun/components/tensor_data.hpp +94 -0
  366. include/rerun/components/tensor_dimension_index_selection.hpp +77 -0
  367. include/rerun/components/tensor_height_dimension.hpp +71 -0
  368. include/rerun/components/tensor_width_dimension.hpp +71 -0
  369. include/rerun/components/texcoord2d.hpp +101 -0
  370. include/rerun/components/text.hpp +83 -0
  371. include/rerun/components/text_log_level.hpp +110 -0
  372. include/rerun/components/timestamp.hpp +76 -0
  373. include/rerun/components/transform_mat3x3.hpp +92 -0
  374. include/rerun/components/transform_relation.hpp +66 -0
  375. include/rerun/components/translation3d.hpp +96 -0
  376. include/rerun/components/triangle_indices.hpp +85 -0
  377. include/rerun/components/value_range.hpp +78 -0
  378. include/rerun/components/vector2d.hpp +92 -0
  379. include/rerun/components/vector3d.hpp +96 -0
  380. include/rerun/components/video_timestamp.hpp +120 -0
  381. include/rerun/components/view_coordinates.hpp +346 -0
  382. include/rerun/components/visible.hpp +74 -0
  383. include/rerun/components.hpp +77 -0
  384. include/rerun/config.hpp +52 -0
  385. include/rerun/datatypes/angle.hpp +76 -0
  386. include/rerun/datatypes/annotation_info.hpp +76 -0
  387. include/rerun/datatypes/blob.hpp +67 -0
  388. include/rerun/datatypes/bool.hpp +57 -0
  389. include/rerun/datatypes/channel_datatype.hpp +87 -0
  390. include/rerun/datatypes/class_description.hpp +92 -0
  391. include/rerun/datatypes/class_description_map_elem.hpp +69 -0
  392. include/rerun/datatypes/class_id.hpp +62 -0
  393. include/rerun/datatypes/color_model.hpp +68 -0
  394. include/rerun/datatypes/dvec2d.hpp +76 -0
  395. include/rerun/datatypes/entity_path.hpp +60 -0
  396. include/rerun/datatypes/float32.hpp +62 -0
  397. include/rerun/datatypes/float64.hpp +62 -0
  398. include/rerun/datatypes/image_format.hpp +107 -0
  399. include/rerun/datatypes/keypoint_id.hpp +63 -0
  400. include/rerun/datatypes/keypoint_pair.hpp +65 -0
  401. include/rerun/datatypes/mat3x3.hpp +105 -0
  402. include/rerun/datatypes/mat4x4.hpp +119 -0
  403. include/rerun/datatypes/pixel_format.hpp +142 -0
  404. include/rerun/datatypes/plane3d.hpp +60 -0
  405. include/rerun/datatypes/quaternion.hpp +110 -0
  406. include/rerun/datatypes/range1d.hpp +59 -0
  407. include/rerun/datatypes/range2d.hpp +55 -0
  408. include/rerun/datatypes/rgba32.hpp +94 -0
  409. include/rerun/datatypes/rotation_axis_angle.hpp +67 -0
  410. include/rerun/datatypes/tensor_buffer.hpp +529 -0
  411. include/rerun/datatypes/tensor_data.hpp +100 -0
  412. include/rerun/datatypes/tensor_dimension_index_selection.hpp +58 -0
  413. include/rerun/datatypes/tensor_dimension_selection.hpp +56 -0
  414. include/rerun/datatypes/time_int.hpp +62 -0
  415. include/rerun/datatypes/time_range.hpp +55 -0
  416. include/rerun/datatypes/time_range_boundary.hpp +175 -0
  417. include/rerun/datatypes/uint16.hpp +62 -0
  418. include/rerun/datatypes/uint32.hpp +62 -0
  419. include/rerun/datatypes/uint64.hpp +62 -0
  420. include/rerun/datatypes/utf8.hpp +76 -0
  421. include/rerun/datatypes/utf8pair.hpp +62 -0
  422. include/rerun/datatypes/uuid.hpp +60 -0
  423. include/rerun/datatypes/uvec2d.hpp +76 -0
  424. include/rerun/datatypes/uvec3d.hpp +80 -0
  425. include/rerun/datatypes/uvec4d.hpp +59 -0
  426. include/rerun/datatypes/vec2d.hpp +76 -0
  427. include/rerun/datatypes/vec3d.hpp +80 -0
  428. include/rerun/datatypes/vec4d.hpp +84 -0
  429. include/rerun/datatypes/video_timestamp.hpp +67 -0
  430. include/rerun/datatypes/view_coordinates.hpp +87 -0
  431. include/rerun/datatypes/visible_time_range.hpp +57 -0
  432. include/rerun/datatypes.hpp +51 -0
  433. include/rerun/demo_utils.hpp +75 -0
  434. include/rerun/entity_path.hpp +20 -0
  435. include/rerun/error.hpp +180 -0
  436. include/rerun/half.hpp +10 -0
  437. include/rerun/image_utils.hpp +187 -0
  438. include/rerun/indicator_component.hpp +59 -0
  439. include/rerun/loggable.hpp +54 -0
  440. include/rerun/recording_stream.hpp +960 -0
  441. include/rerun/rerun_sdk_export.hpp +25 -0
  442. include/rerun/result.hpp +86 -0
  443. include/rerun/rotation3d.hpp +33 -0
  444. include/rerun/sdk_info.hpp +20 -0
  445. include/rerun/spawn.hpp +21 -0
  446. include/rerun/spawn_options.hpp +57 -0
  447. include/rerun/string_utils.hpp +16 -0
  448. include/rerun/third_party/cxxopts.hpp +2198 -0
  449. include/rerun/time_column.hpp +288 -0
  450. include/rerun/timeline.hpp +38 -0
  451. include/rerun/type_traits.hpp +40 -0
  452. include/rerun.hpp +86 -0
  453. lib/arrow_bundled_dependencies.lib +0 -0
  454. lib/arrow_static.lib +0 -0
  455. lib/axel.lib +0 -0
  456. lib/cmake/axel/axel-config.cmake +45 -0
  457. lib/cmake/axel/axelTargets-release.cmake +19 -0
  458. lib/cmake/axel/axelTargets.cmake +108 -0
  459. lib/cmake/momentum/Findre2.cmake +52 -0
  460. lib/cmake/momentum/momentum-config.cmake +67 -0
  461. lib/cmake/momentum/momentumTargets-release.cmake +259 -0
  462. lib/cmake/momentum/momentumTargets.cmake +377 -0
  463. lib/cmake/rerun_sdk/rerun_sdkConfig.cmake +70 -0
  464. lib/cmake/rerun_sdk/rerun_sdkConfigVersion.cmake +83 -0
  465. lib/cmake/rerun_sdk/rerun_sdkTargets-release.cmake +19 -0
  466. lib/cmake/rerun_sdk/rerun_sdkTargets.cmake +108 -0
  467. lib/momentum_app_utils.lib +0 -0
  468. lib/momentum_character.lib +0 -0
  469. lib/momentum_character_sequence_solver.lib +0 -0
  470. lib/momentum_character_solver.lib +0 -0
  471. lib/momentum_common.lib +0 -0
  472. lib/momentum_diff_ik.lib +0 -0
  473. lib/momentum_io.lib +0 -0
  474. lib/momentum_io_common.lib +0 -0
  475. lib/momentum_io_fbx.lib +0 -0
  476. lib/momentum_io_gltf.lib +0 -0
  477. lib/momentum_io_legacy_json.lib +0 -0
  478. lib/momentum_io_marker.lib +0 -0
  479. lib/momentum_io_motion.lib +0 -0
  480. lib/momentum_io_shape.lib +0 -0
  481. lib/momentum_io_skeleton.lib +0 -0
  482. lib/momentum_io_urdf.lib +0 -0
  483. lib/momentum_marker_tracker.lib +0 -0
  484. lib/momentum_math.lib +0 -0
  485. lib/momentum_online_qr.lib +0 -0
  486. lib/momentum_process_markers.lib +0 -0
  487. lib/momentum_rerun.lib +0 -0
  488. lib/momentum_simd_constraints.lib +0 -0
  489. lib/momentum_simd_generalized_loss.lib +0 -0
  490. lib/momentum_skeleton.lib +0 -0
  491. lib/momentum_solver.lib +0 -0
  492. lib/rerun_c__win_x64.lib +0 -0
  493. lib/rerun_sdk.lib +0 -0
  494. pymomentum/axel.cp312-win_amd64.pyd +0 -0
  495. pymomentum/backend/__init__.py +16 -0
  496. pymomentum/backend/skel_state_backend.py +614 -0
  497. pymomentum/backend/trs_backend.py +871 -0
  498. pymomentum/backend/utils.py +224 -0
  499. pymomentum/geometry.cp312-win_amd64.pyd +0 -0
  500. pymomentum/marker_tracking.cp312-win_amd64.pyd +0 -0
  501. pymomentum/quaternion.py +740 -0
  502. pymomentum/skel_state.py +514 -0
  503. pymomentum/solver.cp312-win_amd64.pyd +0 -0
  504. pymomentum/solver2.cp312-win_amd64.pyd +0 -0
  505. pymomentum/torch/character.py +809 -0
  506. pymomentum/torch/parameter_limits.py +494 -0
  507. pymomentum/torch/utility.py +20 -0
  508. pymomentum/trs.py +535 -0
  509. pymomentum_cpu-0.1.78.post11.dist-info/METADATA +121 -0
  510. pymomentum_cpu-0.1.78.post11.dist-info/RECORD +512 -0
  511. pymomentum_cpu-0.1.78.post11.dist-info/WHEEL +5 -0
  512. pymomentum_cpu-0.1.78.post11.dist-info/licenses/LICENSE +21 -0
pymomentum/trs.py ADDED
@@ -0,0 +1,535 @@
1
+ # Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ #
3
+ # This source code is licensed under the MIT license found in the
4
+ # LICENSE file in the root directory of this source tree.
5
+
6
+ """
7
+ TRS (Translation-Rotation-Scale) Utilities
8
+ ===========================================
9
+
10
+ This module provides utilities for working with TRS (Translation-Rotation-Scale)
11
+ transforms in PyMomentum.
12
+
13
+ A TRS transform is represented as a tuple of three separate tensors:
14
+
15
+ - **Translation (t)**: tensor of shape [..., 3] - 3D position offset
16
+ - **Rotation (r)**: tensor of shape [..., 3, 3] - 3x3 rotation matrix
17
+ - **Scale (s)**: tensor of shape [..., 1] - uniform scale factor
18
+
19
+ This representation provides efficient operations since rotation matrices can be
20
+ directly used for transformations and inverted via transpose, avoiding quaternion
21
+ to matrix conversions. It is also preferable to working with 4x4 matrices, because
22
+ extracting the scale from a fully general 4x4 matrix is expensive.
23
+
24
+ Note that internally, momentum mostly uses skel_states which use quaternions rather
25
+ than rotation matrices. However, many use cases (particularly for ML) prefer rotation
26
+ matrices (such as the widely-used 6D rotation representation), so this library provides
27
+ useful functionality for converting between the two.
28
+
29
+ Key features:
30
+
31
+ - Creating TRS transforms from individual components (:func:`from_translation`,
32
+ :func:`from_rotation_matrix`, :func:`from_scale`)
33
+ - Converting between TRS transforms and 4x4 transformation matrices
34
+ (:func:`to_matrix`, :func:`from_matrix`)
35
+ - Performing transformations and operations (:func:`multiply`, :func:`inverse`,
36
+ :func:`transform_points`)
37
+ - Interoperability with skeleton states (:func:`from_skeleton_state`,
38
+ :func:`to_skeleton_state`)
39
+ - Fast inverse computation using rotation matrix transpose
40
+
41
+ Example:
42
+ Creating and using a TRS transform::
43
+
44
+ import torch
45
+ from pymomentum import trs
46
+
47
+ # Create identity transform
48
+ t, r, s = trs.identity()
49
+
50
+ # Create from translation
51
+ translation = torch.tensor([1.0, 2.0, 3.0])
52
+ t, r, s = trs.from_translation(translation)
53
+
54
+ # Transform points
55
+ points = torch.tensor([[0.0, 0.0, 0.0], [1.0, 1.0, 1.0]])
56
+ transformed = trs.transform_points((t, r, s), points)
57
+
58
+ Note:
59
+ All functions in this module work with TRS transforms represented as tuples
60
+ of (translation, rotation_matrix, scale) tensors.
61
+ """
62
+
63
+ from typing import Sequence
64
+
65
+ import torch
66
+ from pymomentum import quaternion
67
+
68
+ # pyre-strict
69
+
70
+ # Type alias for TRS transform tuple
71
+ TRSTransform = tuple[torch.Tensor, torch.Tensor, torch.Tensor]
72
+
73
+
74
+ def from_translation(translation: torch.Tensor) -> TRSTransform:
75
+ """
76
+ Create a TRS transform from translation.
77
+
78
+ :parameter translation: The translation component of shape [..., 3].
79
+ :type translation: torch.Tensor
80
+ :return: TRS transform tuple (translation, identity_rotation, unit_scale).
81
+ :rtype: TRSTransform
82
+ """
83
+ batch_shape = translation.shape[:-1]
84
+ device = translation.device
85
+ dtype = translation.dtype
86
+
87
+ # Identity rotation matrix
88
+ rotation = (
89
+ torch.eye(3, device=device, dtype=dtype).expand(*batch_shape, 3, 3).contiguous()
90
+ )
91
+
92
+ # Unit scale
93
+ scale = torch.ones(*batch_shape, 1, device=device, dtype=dtype)
94
+
95
+ return translation, rotation, scale
96
+
97
+
98
+ def from_rotation_matrix(rotation_matrix: torch.Tensor) -> TRSTransform:
99
+ """
100
+ Create a TRS transform from rotation matrix.
101
+
102
+ :parameter rotation_matrix: The rotation matrix component of shape [..., 3, 3].
103
+ :type rotation_matrix: torch.Tensor
104
+ :return: TRS transform tuple (zero_translation, rotation_matrix, unit_scale).
105
+ :rtype: TRSTransform
106
+ """
107
+ batch_shape = rotation_matrix.shape[:-2]
108
+ device = rotation_matrix.device
109
+ dtype = rotation_matrix.dtype
110
+
111
+ # Zero translation
112
+ translation = torch.zeros(*batch_shape, 3, device=device, dtype=dtype)
113
+
114
+ # Unit scale
115
+ scale = torch.ones(*batch_shape, 1, device=device, dtype=dtype)
116
+
117
+ return translation, rotation_matrix, scale
118
+
119
+
120
+ def from_scale(scale: torch.Tensor) -> TRSTransform:
121
+ """
122
+ Create a TRS transform from scale.
123
+
124
+ :parameter scale: The scale component of shape [..., 1].
125
+ :type scale: torch.Tensor
126
+ :return: TRS transform tuple (zero_translation, identity_rotation, scale).
127
+ :rtype: TRSTransform
128
+ """
129
+ batch_shape = scale.shape[:-1]
130
+ device = scale.device
131
+ dtype = scale.dtype
132
+
133
+ # Zero translation
134
+ translation = torch.zeros(*batch_shape, 3, device=device, dtype=dtype)
135
+
136
+ # Identity rotation matrix
137
+ rotation = (
138
+ torch.eye(3, device=device, dtype=dtype).expand(*batch_shape, 3, 3).contiguous()
139
+ )
140
+
141
+ return translation, rotation, scale
142
+
143
+
144
+ def identity(
145
+ size: Sequence[int] | None = None,
146
+ device: torch.device | None = None,
147
+ dtype: torch.dtype | None = None,
148
+ ) -> TRSTransform:
149
+ """
150
+ Returns a TRS transform representing the identity transform.
151
+
152
+ :parameter size: The size of each batch dimension in the output tensors.
153
+ Defaults to None, which means the output will have no batch dimensions.
154
+ :type size: Sequence[int], optional
155
+ :parameter device: The device on which to create the tensors. Defaults to None.
156
+ :type device: torch.device, optional
157
+ :parameter dtype: The data type of the tensors. Defaults to None (float32).
158
+ :type dtype: torch.dtype, optional
159
+ :return: Identity TRS transform tuple.
160
+ :rtype: TRSTransform
161
+ """
162
+ if dtype is None:
163
+ dtype = torch.float32
164
+
165
+ if size is None:
166
+ size = []
167
+
168
+ # Zero translation
169
+ translation = torch.zeros(*size, 3, device=device, dtype=dtype)
170
+
171
+ # Identity rotation matrix
172
+ rotation = torch.eye(3, device=device, dtype=dtype).expand(*size, 3, 3).contiguous()
173
+
174
+ # Unit scale
175
+ scale = torch.ones(*size, 1, device=device, dtype=dtype)
176
+
177
+ return translation, rotation, scale
178
+
179
+
180
+ def multiply(trs1: TRSTransform, trs2: TRSTransform) -> TRSTransform:
181
+ """
182
+ Multiply (compose) two TRS transforms.
183
+
184
+ :parameter trs1: The first TRS transform tuple (t1, r1, s1).
185
+ :type trs1: TRSTransform
186
+ :parameter trs2: The second TRS transform tuple (t2, r2, s2).
187
+ :type trs2: TRSTransform
188
+ :return: The composed TRS transform tuple representing trs1 * trs2.
189
+ :rtype: TRSTransform
190
+ """
191
+ t1, r1, s1 = trs1
192
+ t2, r2, s2 = trs2
193
+
194
+ # Composed rotation: r1 @ r2
195
+ r_result = rotmat_multiply(r1, r2)
196
+
197
+ # Composed scale: s1 * s2
198
+ s_result = s1 * s2
199
+
200
+ # Composed translation: t1 + r1 @ (s1 * t2)
201
+ # First scale t2 by s1, then rotate by r1, then add t1
202
+ scaled_t2 = s1 * t2 # [..., 3, 1]
203
+ rotated_scaled_t2 = rotmat_rotate_vector(r1, scaled_t2)
204
+ t_result = t1 + rotated_scaled_t2
205
+
206
+ return t_result, r_result, s_result
207
+
208
+
209
+ def inverse(trs: TRSTransform) -> TRSTransform:
210
+ """
211
+ Compute the inverse of a TRS transform. This is efficient since rotation
212
+ matrix inverse is just transpose.
213
+
214
+ :parameter trs: The TRS transform tuple to invert.
215
+ :type trs: TRSTransform
216
+ :return: The inverted TRS transform tuple.
217
+ :rtype: TRSTransform
218
+ """
219
+ t, r, s = trs
220
+
221
+ # Inverse rotation: transpose of rotation matrix
222
+ r_inv = r.transpose(-2, -1)
223
+
224
+ # Inverse scale: reciprocal
225
+ s_inv = torch.reciprocal(s)
226
+
227
+ # Inverse translation: -R^T * (t / s)
228
+ # First scale translation by inverse scale, then apply inverse rotation
229
+ scaled_t = s_inv.unsqueeze(-1) * t.unsqueeze(-1) # [..., 3, 1]
230
+ t_inv = -rotmat_multiply(r_inv, scaled_t).view_as(t)
231
+
232
+ return t_inv, r_inv, s_inv
233
+
234
+
235
+ def transform_points(trs: TRSTransform, points: torch.Tensor) -> torch.Tensor:
236
+ """
237
+ Transform 3D points by the TRS transform.
238
+
239
+ :parameter trs: The TRS transform tuple to use for transformation.
240
+ :type trs: TRSTransform
241
+ :parameter points: The points to transform of shape [..., 3].
242
+ :type points: torch.Tensor
243
+ :return: The transformed points of shape [..., 3].
244
+ :rtype: torch.Tensor
245
+ """
246
+ if points.dim() < 1 or points.shape[-1] != 3:
247
+ raise ValueError("Points tensor should have last dimension 3.")
248
+
249
+ t, r, s = trs
250
+
251
+ # Apply scale, then rotation, then translation: t + r @ (s * points)
252
+ transformed_points = t + rotmat_rotate_vector(r, s * points)
253
+
254
+ return transformed_points
255
+
256
+
257
+ def to_matrix(trs: TRSTransform) -> torch.Tensor:
258
+ """
259
+ Convert TRS transform to 4x4 transformation matrix.
260
+
261
+ :parameter trs: The TRS transform tuple to convert.
262
+ :type trs: TRSTransform
263
+ :return: A tensor containing 4x4 transformation matrices of shape [..., 4, 4].
264
+ :rtype: torch.Tensor
265
+ """
266
+ t, r, s = trs
267
+
268
+ # Scale the rotation matrix
269
+ linear = r * s.unsqueeze(-2).expand_as(r)
270
+
271
+ # Construct the affine part [linear | translation]
272
+ affine = torch.cat((linear, t.unsqueeze(-1)), -1)
273
+
274
+ # Add the homogeneous row [0, 0, 0, 1]
275
+ batch_shape = t.shape[:-1]
276
+ last_row = torch.tensor([0, 0, 0, 1], device=t.device, dtype=t.dtype)
277
+ last_row = last_row.expand(*batch_shape, 1, 4)
278
+
279
+ # Combine affine and homogeneous row
280
+ matrix = torch.cat((affine, last_row), -2)
281
+
282
+ return matrix
283
+
284
+
285
+ def from_matrix(matrices: torch.Tensor) -> TRSTransform:
286
+ """
287
+ Convert 4x4 transformation matrices to TRS transforms. Assumes uniform scaling.
288
+
289
+ :parameter matrices: A tensor of 4x4 matrices of shape [..., 4, 4].
290
+ :type matrices: torch.Tensor
291
+ :return: TRS transform tuple (translation, rotation_matrix, scale).
292
+ :rtype: TRSTransform
293
+ """
294
+ if matrices.dim() < 2 or matrices.shape[-1] != 4 or matrices.shape[-2] != 4:
295
+ raise ValueError("Expected a tensor of 4x4 matrices")
296
+
297
+ initial_shape = matrices.shape
298
+ if matrices.dim() == 2:
299
+ matrices = matrices.unsqueeze(0)
300
+ else:
301
+ matrices = matrices.flatten(0, -3)
302
+
303
+ # Extract linear part and translation
304
+ linear = matrices[..., :3, :3]
305
+ translation = matrices[..., :3, 3]
306
+
307
+ # Use SVD to decompose linear part: linear = U * S * V^T
308
+ # where U and V^T are rotations and S contains scales
309
+ U, S, Vt = torch.linalg.svd(linear)
310
+
311
+ # Extract scale (assuming uniform scaling, take first singular value)
312
+ scale = S[..., :1]
313
+
314
+ # Extract rotation matrix: R = U * V^T
315
+ rotation_matrix = torch.bmm(U, Vt)
316
+
317
+ # Reshape back to original batch dimensions
318
+ result_shape_t = list(initial_shape[:-2]) + [3]
319
+ result_shape_r = list(initial_shape[:-2]) + [3, 3]
320
+ result_shape_s = list(initial_shape[:-2]) + [1]
321
+
322
+ translation = translation.reshape(result_shape_t)
323
+ rotation_matrix = rotation_matrix.reshape(result_shape_r)
324
+ scale = scale.reshape(result_shape_s)
325
+
326
+ return translation, rotation_matrix, scale
327
+
328
+
329
+ def from_skeleton_state(skeleton_state: torch.Tensor) -> TRSTransform:
330
+ """
331
+ Convert skeleton state to TRS transform.
332
+
333
+ :parameter skeleton_state: The skeleton state tensor of shape [..., 8] containing
334
+ (tx, ty, tz, rx, ry, rz, rw, s).
335
+ :type skeleton_state: torch.Tensor
336
+ :return: TRS transform tuple (translation, rotation_matrix, scale).
337
+ :rtype: TRSTransform
338
+ """
339
+ if skeleton_state.shape[-1] != 8:
340
+ raise ValueError("Expected skeleton state to have last dimension 8")
341
+
342
+ # Extract translation, quaternion, and scale
343
+ translation = skeleton_state[..., :3]
344
+ quaternion_xyzw = skeleton_state[..., 3:7]
345
+ scale = skeleton_state[..., 7:]
346
+
347
+ # Convert quaternion to rotation matrix
348
+ rotation_matrix = quaternion.to_rotation_matrix(quaternion_xyzw)
349
+
350
+ return translation, rotation_matrix, scale
351
+
352
+
353
+ def to_skeleton_state(trs: TRSTransform) -> torch.Tensor:
354
+ """
355
+ Convert TRS transform to skeleton state.
356
+
357
+ :parameter trs: The TRS transform tuple to convert.
358
+ :type trs: TRSTransform
359
+ :return: Skeleton state tensor of shape [..., 8] containing (tx, ty, tz, rx, ry, rz, rw, s).
360
+ :rtype: torch.Tensor
361
+ """
362
+ t, r, s = trs
363
+
364
+ # Convert rotation matrix to quaternion
365
+ quaternion_xyzw = quaternion.from_rotation_matrix(r)
366
+
367
+ # Combine into skeleton state format
368
+ skeleton_state = torch.cat([t, quaternion_xyzw, s], dim=-1)
369
+
370
+ return skeleton_state
371
+
372
+
373
+ def slerp(trs0: TRSTransform, trs1: TRSTransform, t: torch.Tensor) -> TRSTransform:
374
+ """
375
+ Spherical linear interpolation between two TRS transforms.
376
+
377
+ :parameter trs0: The first TRS transform tuple.
378
+ :type trs0: TRSTransform
379
+ :parameter trs1: The second TRS transform tuple.
380
+ :type trs1: TRSTransform
381
+ :parameter t: The interpolation factor where 0 <= t <= 1. t=0 corresponds to trs0, t=1 corresponds to trs1.
382
+ :type t: torch.Tensor
383
+ :return: The interpolated TRS transform.
384
+ :rtype: TRSTransform
385
+ """
386
+ t0, r0, s0 = trs0
387
+ t1, r1, s1 = trs1
388
+
389
+ # Linear interpolation for translation and scale
390
+ t_interp = (1 - t).unsqueeze(-1) * t0 + t.unsqueeze(-1) * t1
391
+ s_interp = (1 - t).unsqueeze(-1) * s0 + t.unsqueeze(-1) * s1
392
+
393
+ # Spherical interpolation for rotation matrices via quaternions
394
+ q0 = quaternion.from_rotation_matrix(r0)
395
+ q1 = quaternion.from_rotation_matrix(r1)
396
+ q_interp = quaternion.slerp(q0, q1, t)
397
+ r_interp = quaternion.to_rotation_matrix(q_interp)
398
+
399
+ return t_interp, r_interp, s_interp
400
+
401
+
402
+ def blend(
403
+ trs_transforms: Sequence[TRSTransform], weights: torch.Tensor | None = None
404
+ ) -> TRSTransform:
405
+ """
406
+ Blend multiple TRS transforms with the given weights.
407
+
408
+ :parameter trs_transforms: A sequence of TRS transform tuples to blend.
409
+ :type trs_transforms: Sequence[TRSTransform]
410
+ :parameter weights: The weights to use for blending. If not provided, equal weights are used.
411
+ Should have shape [num_transforms] or [..., num_transforms].
412
+ :type weights: torch.Tensor, optional
413
+ :return: The blended TRS transform.
414
+ :rtype: TRSTransform
415
+ """
416
+ if len(trs_transforms) == 0:
417
+ raise ValueError("Cannot blend empty list of transforms")
418
+
419
+ if len(trs_transforms) == 1:
420
+ return trs_transforms[0]
421
+
422
+ # Stack all transforms
423
+ translations = torch.stack([trs[0] for trs in trs_transforms], dim=-2)
424
+ rotations = torch.stack([trs[1] for trs in trs_transforms], dim=-3)
425
+ scales = torch.stack([trs[2] for trs in trs_transforms], dim=-2)
426
+
427
+ # Handle weights
428
+ if weights is None:
429
+ num_transforms = len(trs_transforms)
430
+ device = translations.device
431
+ dtype = translations.dtype
432
+ weights = (
433
+ torch.ones(num_transforms, device=device, dtype=dtype) / num_transforms
434
+ )
435
+
436
+ # Normalize weights
437
+ weights = weights / weights.sum(dim=-1, keepdim=True)
438
+
439
+ # Blend translation and scale with linear interpolation
440
+ t_blend = (weights.unsqueeze(-1) * translations).sum(dim=-2)
441
+ s_blend = (weights.unsqueeze(-1) * scales).sum(dim=-2)
442
+
443
+ # Blend rotations via quaternions
444
+ quaternions = torch.stack(
445
+ [quaternion.from_rotation_matrix(r) for r in rotations], dim=-2
446
+ )
447
+ q_blend = quaternion.blend(quaternions, weights)
448
+ r_blend = quaternion.to_rotation_matrix(q_blend)
449
+
450
+ return t_blend, r_blend, s_blend
451
+
452
+
453
+ # ======================================================================
454
+ # Rotation Matrix Utilities
455
+ # ======================================================================
456
+
457
+
458
+ def rotmat_inverse(r: torch.Tensor) -> torch.Tensor:
459
+ """
460
+ Compute the inverse of rotation matrices.
461
+
462
+ For orthogonal rotation matrices, the inverse is simply the transpose.
463
+
464
+ :parameter r: Rotation matrices of shape [..., 3, 3].
465
+ :type r: torch.Tensor
466
+ :return: Inverse rotation matrices of shape [..., 3, 3].
467
+ :rtype: torch.Tensor
468
+ """
469
+ return r.transpose(-2, -1)
470
+
471
+
472
+ def rotmat_multiply(r1: torch.Tensor, r2: torch.Tensor) -> torch.Tensor:
473
+ """
474
+ Multiply two rotation matrices.
475
+
476
+ :parameter r1: First rotation matrices of shape [..., 3, 3].
477
+ :type r1: torch.Tensor
478
+ :parameter r2: Second rotation matrices of shape [..., 3, 3].
479
+ :type r2: torch.Tensor
480
+ :return: Product r1 @ r2 of shape [..., 3, 3].
481
+ :rtype: torch.Tensor
482
+ """
483
+ return torch.einsum("...ij,...jk->...ik", r1, r2)
484
+
485
+
486
+ def rotmat_rotate_vector(r: torch.Tensor, v: torch.Tensor) -> torch.Tensor:
487
+ """
488
+ Apply rotation matrices to vectors.
489
+
490
+ :parameter r: Rotation matrices of shape [..., 3, 3].
491
+ :type r: torch.Tensor
492
+ :parameter v: Vectors of shape [..., 3].
493
+ :type v: torch.Tensor
494
+ :return: Rotated vectors r @ v of shape [..., 3].
495
+ :rtype: torch.Tensor
496
+ """
497
+ return torch.einsum("...ij,...j->...i", r, v)
498
+
499
+
500
+ def rotmat_from_euler_xyz(euler: torch.Tensor) -> torch.Tensor:
501
+ """
502
+ Create rotation matrices from XYZ Euler angles.
503
+
504
+ This function converts XYZ Euler angles to rotation matrices using the
505
+ ZYX rotation order (also known as Tait-Bryan angles). The rotation is
506
+ applied as follows: first around the X-axis, then Y-axis, then Z-axis.
507
+
508
+ :parameter euler: Euler angles of shape [..., 3] where the last dimension
509
+ contains [rx, ry, rz] rotations in radians.
510
+ :type euler: torch.Tensor
511
+ :return: Rotation matrices of shape [..., 3, 3].
512
+ :rtype: torch.Tensor
513
+ """
514
+ cos_angles = torch.cos(euler)
515
+ sin_angles = torch.sin(euler)
516
+
517
+ cx, cy, cz = cos_angles.unbind(-1)
518
+ sx, sy, sz = sin_angles.unbind(-1)
519
+
520
+ result = torch.stack(
521
+ [
522
+ cy * cz,
523
+ -cx * sz + sx * sy * cz,
524
+ sx * sz + cx * sy * cz,
525
+ cy * sz,
526
+ cx * cz + sx * sy * sz,
527
+ -sx * cz + cx * sy * sz,
528
+ -sy,
529
+ sx * cy,
530
+ cx * cy,
531
+ ],
532
+ dim=-1,
533
+ )
534
+ result_shape = result.shape[:-1] + (3, 3)
535
+ return result.view(result_shape)
@@ -0,0 +1,121 @@
1
+ Metadata-Version: 2.1
2
+ Name: pymomentum-cpu
3
+ Version: 0.1.78.post11
4
+ Summary: A library providing foundational algorithms for human kinematic motion and numerical optimization solvers to apply human motion in various applications (CPU-only version for Linux, macOS Intel, and macOS ARM)
5
+ Keywords: kinematics,motion,optimization,human-motion,inverse-kinematics,forward-kinematics,body-tracking,motion-capture,character-animation,robotics,cpu
6
+ Author-Email: Meta Reality Labs Research <jeongseok@meta.com>
7
+ License: MIT
8
+ Classifier: Development Status :: 4 - Beta
9
+ Classifier: Intended Audience :: Developers
10
+ Classifier: Intended Audience :: Science/Research
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Operating System :: POSIX :: Linux
13
+ Classifier: Operating System :: MacOS
14
+ Classifier: Programming Language :: C++
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Programming Language :: Python :: Implementation :: CPython
19
+ Classifier: Topic :: Scientific/Engineering
20
+ Classifier: Topic :: Scientific/Engineering :: Mathematics
21
+ Classifier: Topic :: Scientific/Engineering :: Physics
22
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
23
+ Project-URL: Homepage, https://github.com/facebookresearch/momentum
24
+ Project-URL: Documentation, https://facebookresearch.github.io/momentum/
25
+ Project-URL: Repository, https://github.com/facebookresearch/momentum
26
+ Project-URL: Bug tracker, https://github.com/facebookresearch/momentum/issues
27
+ Project-URL: Changelog, https://github.com/facebookresearch/momentum/releases
28
+ Requires-Python: <3.14,>=3.12
29
+ Requires-Dist: numpy>=1.20.0
30
+ Requires-Dist: scipy>=1.7.0
31
+ Requires-Dist: torch<2.9,>=2.8.0; (platform_system == "Linux" or platform_system == "Windows") and python_version == "3.12"
32
+ Requires-Dist: torch<2.9,>=2.8.0; (platform_system == "Linux" or platform_system == "Windows") and python_version >= "3.13"
33
+ Requires-Dist: torch<2.3,>=2.2.0; platform_system == "Darwin" and python_version == "3.12"
34
+ Requires-Dist: torch<2.7,>=2.6.0; platform_system == "Darwin" and python_version >= "3.13"
35
+ Description-Content-Type: text/markdown
36
+
37
+ # Momentum
38
+
39
+ [![CI Windows][ci-windows-badge]][ci-windows]
40
+ [![CI macOS][ci-macos-badge]][ci-macos]
41
+ [![CI Ubuntu][ci-ubuntu-badge]][ci-ubuntu]
42
+ [![Publish Website][website-badge]][website]
43
+
44
+ [ci-windows-badge]: https://github.com/facebookresearch/momentum/actions/workflows/ci_windows.yml/badge.svg
45
+ [ci-windows]: https://github.com/facebookresearch/momentum/actions/workflows/ci_windows.yml
46
+ [ci-macos-badge]: https://github.com/facebookresearch/momentum/actions/workflows/ci_macos.yml/badge.svg
47
+ [ci-macos]: https://github.com/facebookresearch/momentum/actions/workflows/ci_macos.yml
48
+ [ci-ubuntu-badge]: https://github.com/facebookresearch/momentum/actions/workflows/ci_ubuntu.yml/badge.svg
49
+ [ci-ubuntu]: https://github.com/facebookresearch/momentum/actions/workflows/ci_ubuntu.yml
50
+ [website-badge]: https://github.com/facebookresearch/momentum/actions/workflows/publish_website.yml/badge.svg
51
+ [website]: https://github.com/facebookresearch/momentum/actions/workflows/publish_website.yml
52
+
53
+ Momentum provides foundational algorithms for human kinematic motion and
54
+ numerical optimization solvers to apply human motion in various applications.
55
+
56
+ <p align="center">
57
+ <img src="momentum/website/static/img/momentum_1.png" width="30%" alt="Forward and Inverse Kinematics with Interpretable Parameterization" />
58
+ <img src="momentum/website/static/img/momentum_3.png" width="30%" alt="RGBD Body Tracking Solver" />
59
+ <img src="momentum/website/static/img/momentum_4.png" width="30%" alt="Monocular RGB Body Tracking Solver" />
60
+ </p>
61
+
62
+ ## Quick Start
63
+
64
+ ### Installation
65
+
66
+ Pre-built binaries are available for Windows, macOS, and Linux:
67
+
68
+ ```bash
69
+ # Python (PyPI)
70
+ pip install pymomentum-cpu # CPU version
71
+ pip install pymomentum-gpu # GPU version with CUDA
72
+
73
+ # Python (Conda/Pixi)
74
+ pixi add pymomentum # Auto-detects GPU/CPU
75
+ conda install -c conda-forge pymomentum
76
+
77
+ # C++ (Conda/Pixi only)
78
+ pixi add momentum-cpp
79
+ conda install -c conda-forge momentum-cpp
80
+ ```
81
+
82
+ **📦 Browse packages:** [PyPI](https://pypi.org/search/?q=pymomentum) • [conda-forge](https://anaconda.org/conda-forge/momentum) • [prefix.dev](https://prefix.dev/channels/conda-forge/packages/momentum)
83
+
84
+ ### Quick Example
85
+
86
+ ```bash
87
+ # Install and run
88
+ pip install pymomentum-cpu
89
+ python -c "import pymomentum as pm; print(pm.__version__)"
90
+ ```
91
+
92
+ ### Building from Source
93
+
94
+ ```bash
95
+ git clone https://github.com/facebookresearch/momentum
96
+ cd momentum
97
+ pixi run build # Builds C++ library and Python bindings
98
+ pixi run test # Runs tests
99
+ pixi run hello_world # Runs example
100
+ ```
101
+
102
+ **For detailed instructions**, see the comprehensive guides on our website:
103
+ - 📘 [**Python Getting Started**](https://facebookresearch.github.io/momentum/pymomentum/user_guide/getting_started) - Installation, building from source, troubleshooting
104
+ - 📗 [**C++ Getting Started**](https://facebookresearch.github.io/momentum/docs/user_guide/getting_started) - Full build instructions, FBX support, examples
105
+
106
+ ## 📖 Documentation
107
+
108
+ Visit our [**documentation website**](https://facebookresearch.github.io/momentum/) for comprehensive guides, examples, and API references:
109
+
110
+ - 🐍 [**Python API Reference**](https://facebookresearch.github.io/momentum/python_api_doc/index.html) - Complete Python API documentation
111
+ - ⚙️ [**C++ API Reference**](https://facebookresearch.github.io/momentum/doxygen/index.html) - Complete C++ API documentation
112
+
113
+ ## Contributing
114
+
115
+ Check our [contributing guide](CONTRIBUTING.md) to learn about how to contribute
116
+ to the project.
117
+
118
+ ## License
119
+
120
+ Momentum is licensed under the MIT License. A copy of the license
121
+ [can be found here.](LICENSE)