pymomentum-cpu 0.1.77.post26__cp312-cp312-macosx_15_0_arm64.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/cmake/axel/axel-config.cmake +45 -0
  454. lib/cmake/axel/axelTargets-release.cmake +19 -0
  455. lib/cmake/axel/axelTargets.cmake +108 -0
  456. lib/cmake/momentum/Findre2.cmake +52 -0
  457. lib/cmake/momentum/momentum-config.cmake +67 -0
  458. lib/cmake/momentum/momentumTargets-release.cmake +259 -0
  459. lib/cmake/momentum/momentumTargets.cmake +377 -0
  460. lib/cmake/rerun_sdk/rerun_sdkConfig.cmake +70 -0
  461. lib/cmake/rerun_sdk/rerun_sdkConfigVersion.cmake +83 -0
  462. lib/cmake/rerun_sdk/rerun_sdkTargets-release.cmake +19 -0
  463. lib/cmake/rerun_sdk/rerun_sdkTargets.cmake +108 -0
  464. lib/libarrow.a +0 -0
  465. lib/libarrow_bundled_dependencies.a +0 -0
  466. lib/libaxel.a +0 -0
  467. lib/libmomentum_app_utils.a +0 -0
  468. lib/libmomentum_character.a +0 -0
  469. lib/libmomentum_character_sequence_solver.a +0 -0
  470. lib/libmomentum_character_solver.a +0 -0
  471. lib/libmomentum_common.a +0 -0
  472. lib/libmomentum_diff_ik.a +0 -0
  473. lib/libmomentum_io.a +0 -0
  474. lib/libmomentum_io_common.a +0 -0
  475. lib/libmomentum_io_fbx.a +0 -0
  476. lib/libmomentum_io_gltf.a +0 -0
  477. lib/libmomentum_io_legacy_json.a +0 -0
  478. lib/libmomentum_io_marker.a +0 -0
  479. lib/libmomentum_io_motion.a +0 -0
  480. lib/libmomentum_io_shape.a +0 -0
  481. lib/libmomentum_io_skeleton.a +0 -0
  482. lib/libmomentum_io_urdf.a +0 -0
  483. lib/libmomentum_marker_tracker.a +0 -0
  484. lib/libmomentum_math.a +0 -0
  485. lib/libmomentum_online_qr.a +0 -0
  486. lib/libmomentum_process_markers.a +0 -0
  487. lib/libmomentum_rerun.a +0 -0
  488. lib/libmomentum_simd_constraints.a +0 -0
  489. lib/libmomentum_simd_generalized_loss.a +0 -0
  490. lib/libmomentum_skeleton.a +0 -0
  491. lib/libmomentum_solver.a +0 -0
  492. lib/librerun_c__macos_arm64.a +0 -0
  493. lib/librerun_sdk.a +0 -0
  494. pymomentum/axel.cpython-312-darwin.so +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.cpython-312-darwin.so +0 -0
  500. pymomentum/marker_tracking.cpython-312-darwin.so +0 -0
  501. pymomentum/quaternion.py +740 -0
  502. pymomentum/skel_state.py +514 -0
  503. pymomentum/solver.cpython-312-darwin.so +0 -0
  504. pymomentum/solver2.cpython-312-darwin.so +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.77.post26.dist-info/METADATA +208 -0
  510. pymomentum_cpu-0.1.77.post26.dist-info/RECORD +512 -0
  511. pymomentum_cpu-0.1.77.post26.dist-info/WHEEL +5 -0
  512. pymomentum_cpu-0.1.77.post26.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,514 @@
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
+ Skeleton State Utilities
8
+ ========================
9
+
10
+ This module provides utilities for working with skeleton states in PyMomentum.
11
+
12
+ A skeleton state is a compact 8-dimensional representation of a 3D transformation
13
+ that encodes translation, rotation, and uniform scale. The 8 components are organized as:
14
+
15
+ - **Translation (3 components)**: tx, ty, tz - 3D position offset
16
+ - **Rotation (4 components)**: rx, ry, rz, rw - quaternion rotation (x, y, z, w)
17
+ - **Scale (1 component)**: s - uniform scale factor
18
+
19
+ This representation is generated by forward kinematics functions like
20
+ :func:`pymomentum.geometry.joint_parameters_to_skeleton_state` and represents the
21
+ transformation from a local joint space to the world space.
22
+
23
+ - Creating skeleton states from individual components (:func:`from_translation`,
24
+ :func:`from_quaternion`, :func:`from_scale`)
25
+ - Converting between skeleton states and 4x4 transformation matrices
26
+ (:func:`to_matrix`, :func:`from_matrix`)
27
+ - Performing transformations and operations (:func:`multiply`, :func:`inverse`,
28
+ :func:`transform_points`)
29
+ - Interpolation and blending (:func:`slerp`, :func:`blend`)
30
+ - Validation and manipulation (:func:`check`, :func:`split`)
31
+
32
+ Example:
33
+ Creating and using a skeleton state::
34
+
35
+ import torch
36
+ from pymomentum import skel_state
37
+
38
+ # Create identity transform
39
+ identity = skel_state.identity()
40
+
41
+ # Create from translation
42
+ translation = torch.tensor([1.0, 2.0, 3.0])
43
+ state = skel_state.from_translation(translation)
44
+
45
+ # Transform points
46
+ points = torch.tensor([[0.0, 0.0, 0.0], [1.0, 1.0, 1.0]])
47
+ transformed = skel_state.transform_points(state, points)
48
+
49
+ Note:
50
+ All functions in this module expect skeleton states to be PyTorch tensors
51
+ with the last dimension having size 8, following the (tx, ty, tz, rx, ry, rz, rw, s)
52
+ format.
53
+ """
54
+
55
+ from typing import Sequence
56
+
57
+ import torch
58
+ from pymomentum import quaternion
59
+
60
+ # pyre-strict
61
+
62
+
63
+ def check(skel_state: torch.Tensor) -> None:
64
+ """
65
+ Check if the skeleton state has the correct shape.
66
+
67
+ :parameter skel_state: The skeleton state to check.
68
+ :type skel_state: torch.Tensor
69
+ :raises ValueError: If the skeleton state does not have the correct shape.
70
+ """
71
+ if skel_state.shape[-1] != 8:
72
+ raise ValueError(
73
+ "Expected skeleton state to have last dimension 8 (tx, ty, tz, rx, ry, rz, rw, s)"
74
+ )
75
+
76
+
77
+ def split(skel_state: torch.Tensor) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor]:
78
+ """
79
+ Split a skeleton state into translation, rotation, and scale components.
80
+
81
+ :parameter skel_state: The skeleton state to split.
82
+ :type skel_state: torch.Tensor
83
+ :return: A tuple of tensors (translation, rotation, scale).
84
+ :rtype: tuple[torch.Tensor, torch.Tensor, torch.Tensor]
85
+ """
86
+ check(skel_state)
87
+ return skel_state[..., :3], skel_state[..., 3:7], skel_state[..., 7:]
88
+
89
+
90
+ def from_translation(translation: torch.Tensor) -> torch.Tensor:
91
+ """
92
+ Create a skeleton state from translation.
93
+
94
+ :parameter translation: The translation component.
95
+ :type translation: torch.Tensor
96
+ :return: The skeleton state.
97
+ :rtype: torch.Tensor
98
+ """
99
+ return torch.cat(
100
+ (
101
+ translation,
102
+ quaternion.identity(
103
+ size=translation.shape[:-1],
104
+ device=translation.device,
105
+ dtype=translation.dtype,
106
+ ),
107
+ torch.ones(
108
+ *translation.shape[:-1],
109
+ 1,
110
+ dtype=translation.dtype,
111
+ device=translation.device,
112
+ ),
113
+ ),
114
+ -1,
115
+ )
116
+
117
+
118
+ def from_quaternion(rotation: torch.Tensor) -> torch.Tensor:
119
+ """
120
+ Create a skeleton state from rotation.
121
+
122
+ :parameter rotation: The rotation component.
123
+ :type rotation: torch.Tensor
124
+ :return: The skeleton state.
125
+ :rtype: torch.Tensor
126
+ """
127
+ return torch.cat(
128
+ (
129
+ torch.zeros(
130
+ *rotation.shape[:-1],
131
+ 3,
132
+ dtype=rotation.dtype,
133
+ device=rotation.device,
134
+ ),
135
+ rotation,
136
+ torch.ones(
137
+ *rotation.shape[:-1], 1, dtype=rotation.dtype, device=rotation.device
138
+ ),
139
+ ),
140
+ -1,
141
+ )
142
+
143
+
144
+ def from_scale(scale: torch.Tensor) -> torch.Tensor:
145
+ """
146
+ Create a skeleton state from scale.
147
+
148
+ :parameter scale: The scale component.
149
+ :type scale: torch.Tensor
150
+ :return: The skeleton state.
151
+ :rtype: torch.Tensor
152
+ """
153
+ return torch.cat(
154
+ (
155
+ torch.zeros(
156
+ *scale.shape[:-1],
157
+ 3,
158
+ dtype=scale.dtype,
159
+ device=scale.device,
160
+ ),
161
+ quaternion.identity(
162
+ size=scale.shape[:-1],
163
+ device=scale.device,
164
+ dtype=scale.dtype,
165
+ ),
166
+ scale,
167
+ ),
168
+ -1,
169
+ )
170
+
171
+
172
+ def to_matrix(skeleton_state: torch.Tensor) -> torch.Tensor:
173
+ """
174
+ Convert skeleton state to a tensor of 4x4 matrices. The matrix represents the transform from a local joint space to the world space.
175
+
176
+ :parameter skeleton_state: The skeleton state to convert.
177
+ :type skeleton_state: torch.Tensor
178
+ :return: A tensor containing 4x4 matrix transforms.
179
+ :rtype: torch.Tensor
180
+ """
181
+ check(skeleton_state)
182
+ t, q, s = split(skeleton_state)
183
+
184
+ # Assuming quaternionToRotationMatrix is implemented elsewhere
185
+ rot_mat = quaternion.to_rotation_matrix(q)
186
+ linear = rot_mat * s.unsqueeze(-2).expand_as(rot_mat)
187
+ affine = torch.cat((linear, t.unsqueeze(-1)), -1)
188
+
189
+ last_row = (
190
+ torch.tensor(
191
+ [0.0, 0.0, 0.0, 1.0],
192
+ device=skeleton_state.device,
193
+ dtype=skeleton_state.dtype,
194
+ )
195
+ .unsqueeze(0)
196
+ .expand(*affine.shape[:-2], 1, 4)
197
+ )
198
+ result = torch.cat((affine, last_row), -2)
199
+ return result
200
+
201
+
202
+ def _normalize_split_skel_state(
203
+ components: tuple[torch.Tensor, torch.Tensor, torch.Tensor],
204
+ ) -> tuple[torch.Tensor, torch.Tensor, torch.Tensor]:
205
+ """
206
+ Normalize the quaternion component of a split skeleton state.
207
+
208
+ :parameter components: Tuple of (translation, rotation, scale) components.
209
+ :type components: tuple[torch.Tensor, torch.Tensor, torch.Tensor]
210
+ :return: Tuple of (translation, normalized_rotation, scale) components.
211
+ :rtype: tuple[torch.Tensor, torch.Tensor, torch.Tensor]
212
+ """
213
+ t, q, s = components
214
+ return t, quaternion.normalize(q), s
215
+
216
+
217
+ def _multiply_split_skel_states(
218
+ skel_state1: tuple[torch.Tensor, torch.Tensor, torch.Tensor],
219
+ skel_state2: tuple[torch.Tensor, torch.Tensor, torch.Tensor],
220
+ ) -> torch.Tensor:
221
+ """
222
+ Helper function to multiply two skeleton states from their split components.
223
+ Assumes quaternions are already normalized.
224
+
225
+ :parameter skel_state1: Tuple of (translation, rotation, scale) for first skeleton state.
226
+ :type skel_state1: tuple[torch.Tensor, torch.Tensor, torch.Tensor]
227
+ :parameter skel_state2: Tuple of (translation, rotation, scale) for second skeleton state.
228
+ :type skel_state2: tuple[torch.Tensor, torch.Tensor, torch.Tensor]
229
+ :return: The product of the two skeleton states.
230
+ :rtype: torch.Tensor
231
+ """
232
+ t1, q1, s1 = skel_state1
233
+ t2, q2, s2 = skel_state2
234
+
235
+ t_res = t1 + s1 * quaternion.rotate_vector_assume_normalized(q1, t2)
236
+ s_res = s1 * s2
237
+ q_res = quaternion.multiply_assume_normalized(q1, q2)
238
+
239
+ return torch.cat((t_res, q_res, s_res), -1)
240
+
241
+
242
+ def multiply(s1: torch.Tensor, s2: torch.Tensor) -> torch.Tensor:
243
+ """
244
+ Multiply two skeleton states.
245
+
246
+ :parameter s1: The first skeleton state.
247
+ :type s1: torch.Tensor
248
+ :parameter s2: The second skeleton state.
249
+ :type s2: torch.Tensor
250
+ :return: The product of the two skeleton states.
251
+ :rtype: torch.Tensor
252
+ """
253
+ check(s1)
254
+ check(s2)
255
+ while s1.ndim < s2.ndim:
256
+ s1 = s1.unsqueeze(0)
257
+
258
+ return _multiply_split_skel_states(
259
+ _normalize_split_skel_state(split(s1)), _normalize_split_skel_state(split(s2))
260
+ )
261
+
262
+
263
+ def multiply_assume_normalized(s1: torch.Tensor, s2: torch.Tensor) -> torch.Tensor:
264
+ """
265
+ Multiply two skeleton states.
266
+ This is an optimized version that assumes both skeleton states are already properly
267
+ formatted and the quaternions are normalized, skipping validation checks.
268
+
269
+ :parameter s1: The first skeleton state.
270
+ :type s1: torch.Tensor
271
+ :parameter s2: The second skeleton state.
272
+ :type s2: torch.Tensor
273
+ :return: The product of the two skeleton states.
274
+ :rtype: torch.Tensor
275
+ """
276
+ while s1.ndim < s2.ndim:
277
+ s1 = s1.unsqueeze(0)
278
+
279
+ return _multiply_split_skel_states(split(s1), split(s2))
280
+
281
+
282
+ def inverse(skeleton_states: torch.Tensor) -> torch.Tensor:
283
+ """
284
+ Compute the inverse of a skeleton state.
285
+
286
+ :parameter skeleton_states: The skeleton state to invert.
287
+ :type skeleton_states: torch.Tensor
288
+ :return: The inverted skeleton state.
289
+ :rtype: torch.Tensor
290
+ """
291
+ t, q, s = split(skeleton_states)
292
+ q_inv = quaternion.inverse(q)
293
+ s_inv = torch.reciprocal(s)
294
+
295
+ return torch.cat((-s_inv * quaternion.rotate_vector(q_inv, t), q_inv, s_inv), -1)
296
+
297
+
298
+ def _transform_points_split_skel_state(
299
+ skel_state: tuple[torch.Tensor, torch.Tensor, torch.Tensor],
300
+ points: torch.Tensor,
301
+ ) -> torch.Tensor:
302
+ """
303
+ Helper function to transform points using skeleton state components.
304
+ Assumes quaternion is already normalized.
305
+
306
+ :parameter skel_state: Tuple of (translation, rotation, scale) components.
307
+ :type skel_state: tuple[torch.Tensor, torch.Tensor, torch.Tensor]
308
+ :parameter points: The points to transform.
309
+ :type points: torch.Tensor
310
+ :return: The transformed points.
311
+ :rtype: torch.Tensor
312
+ """
313
+ t, q, s = skel_state
314
+ return t + quaternion.rotate_vector(q, s * points)
315
+
316
+
317
+ def transform_points(skel_state: torch.Tensor, points: torch.Tensor) -> torch.Tensor:
318
+ """
319
+ Transform 3d points by the transform represented by the skeleton state.
320
+
321
+ :parameter skel_state: The skeleton state to use for transformation.
322
+ :type skel_state: torch.Tensor
323
+ :parameter points: The points to transform.
324
+ :type points: torch.Tensor
325
+ :return: The transformed points.
326
+ :rtype: torch.Tensor
327
+ """
328
+ check(skel_state)
329
+ if points.dim() < 1 or points.shape[-1] != 3:
330
+ raise ValueError("Points tensor should have last dimension 3.")
331
+
332
+ # allow transforming multiple points with a single skel_state.
333
+ while skel_state.ndim < points.ndim:
334
+ skel_state = skel_state.unsqueeze(0)
335
+
336
+ return _transform_points_split_skel_state(
337
+ _normalize_split_skel_state(split(skel_state)), points
338
+ )
339
+
340
+
341
+ def transform_points_assume_normalized(
342
+ skel_state: torch.Tensor, points: torch.Tensor
343
+ ) -> torch.Tensor:
344
+ """
345
+ Transform 3d points by the transform represented by the skeleton state.
346
+ This is an optimized version that assumes the skeleton state is already properly
347
+ formatted and the quaternion is normalized, skipping validation checks.
348
+
349
+ :parameter skel_state: The skeleton state to use for transformation.
350
+ :type skel_state: torch.Tensor
351
+ :parameter points: The points to transform.
352
+ :type points: torch.Tensor
353
+ :return: The transformed points.
354
+ :rtype: torch.Tensor
355
+ """
356
+ # when multipying by points, we'll allow a single skel_state to transform multiple points. So we'll allow adding a single extra dimension to the skel_state.
357
+ if skel_state.ndim < points.ndim:
358
+ skel_state = skel_state.unsqueeze(0)
359
+ return _transform_points_split_skel_state(split(skel_state), points)
360
+
361
+
362
+ def identity(
363
+ size: Sequence[int] | None = None, device: torch.device | None = None
364
+ ) -> torch.Tensor:
365
+ """
366
+ Returns a skeleton state representing the identity transform.
367
+
368
+ :parameter sizes: The size of each dimension in the output tensor. Defaults to None, which means the output will be a 1D tensor with 8 elements.
369
+ :type sizes: list[int], optional
370
+ :parameter device: The device on which to create the tensor. Defaults to None, which means the tensor will be created on the default device.
371
+ :type device: torch.device, optional
372
+ :return: The identity skeleton state.
373
+ :rtype: torch.Tensor
374
+ """
375
+ zeros = (
376
+ torch.zeros(*size, 3, device=device) if size else torch.zeros(3, device=device)
377
+ )
378
+ ones = torch.ones(*size, 1, device=device) if size else torch.ones(1, device=device)
379
+ q_identity = quaternion.identity(size=size, device=device)
380
+
381
+ return torch.cat((zeros, q_identity, ones), -1)
382
+
383
+
384
+ def blend(
385
+ skel_states: torch.Tensor, weights: torch.Tensor | None = None
386
+ ) -> torch.Tensor:
387
+ """
388
+ Blend k skeleton states with the passed-in weights.
389
+
390
+ :parameter skel_states: The skeleton states to blend.
391
+ :type skel_states: torch.Tensor
392
+ :parameter weights: The weights to use, if not provided, weights are assumed to be all 1s
393
+ :return: The blended skeleton state.
394
+ """
395
+ t, q, s = split(skel_states)
396
+ weights = quaternion.check_and_normalize_weights(q, weights)
397
+ t_blend = (weights.unsqueeze(-1).expand_as(t) * t).sum(-2)
398
+ q_blend = quaternion.blend(q, weights)
399
+ s_blend = (weights.unsqueeze(-1).expand_as(s) * s).sum(-2)
400
+ return torch.cat((t_blend, q_blend, s_blend), -1)
401
+
402
+
403
+ def slerp(s0: torch.Tensor, s1: torch.Tensor, t: torch.Tensor) -> torch.Tensor:
404
+ """
405
+ Spherical linear interpolation between two skeleton states.
406
+
407
+ :parameter s0: The first skeleton state.
408
+ :parameter s1: The second skeleton state.
409
+ :parameter t: The interpolation factor, where 0 <= t <= 1. t=0 corresponds to s0, t=1 corresponds to s1.
410
+ :return: The interpolated skeleton state.
411
+ """
412
+ check(s0)
413
+ check(s1)
414
+
415
+ if t.ndim < s0.ndim:
416
+ t = t.unsqueeze(0)
417
+
418
+ t0, q0, s0 = split(s0)
419
+ t1, q1, s1 = split(s1)
420
+
421
+ s = (1 - t) * s0 + t * s1
422
+ q = quaternion.slerp(q0, q1, t)
423
+ t = (1 - t) * t0 + t * t1
424
+ return torch.cat((t, q, s), -1)
425
+
426
+
427
+ def from_matrix(matrices: torch.Tensor) -> torch.Tensor:
428
+ """
429
+ Convert 4x4 matrices to skeleton states. Assumes that the scale is uniform.
430
+
431
+ Args:
432
+ matrices (torch.Tensor): A tensor of 4x4 matrices.
433
+
434
+ Returns:
435
+ torch.Tensor: The corresponding skeleton states.
436
+ """
437
+ if matrices.dim() < 2 or matrices.shape[-1] != 4 or matrices.shape[-2] != 4:
438
+ raise ValueError("Expected a tensor of 4x4 matrices")
439
+ initial_shape = matrices.shape
440
+ if matrices.dim() == 2:
441
+ matrices = matrices.unsqueeze(0)
442
+ else:
443
+ matrices = matrices.flatten(0, -3)
444
+ linear = matrices[..., :3, :3]
445
+ translations = matrices[..., :3, 3]
446
+ U, S, Vt = torch.linalg.svd(linear)
447
+ scales = S[..., :1]
448
+ rotation_matrices = torch.bmm(U, Vt)
449
+ quaternions = quaternion.from_rotation_matrix(rotation_matrices)
450
+ result = torch.cat((translations, quaternions, scales), -1)
451
+ result_shape = list(initial_shape[:-2]) + [8]
452
+ return result.reshape(result_shape)
453
+
454
+
455
+ @torch.jit.script
456
+ def multiply_backprop(
457
+ state1: torch.Tensor, state2: torch.Tensor, grad_state: torch.Tensor
458
+ ) -> tuple[torch.Tensor, torch.Tensor]:
459
+ """
460
+ Backpropagate gradients through skeleton state multiplication.
461
+
462
+ This function computes the gradients with respect to the two input skeleton states
463
+ given the gradient with respect to the output of skeleton state multiplication.
464
+
465
+ The forward formula is (matching the corrected skel_state.multiply):
466
+ - t = t1 + s1 * quaternion.rotate_vector(q1, t2)
467
+ - q = quaternion.multiply(q1, q2)
468
+ - s = s1 * s2
469
+
470
+ :parameter state1: The first skeleton state (parent).
471
+ :type state1: torch.Tensor
472
+ :parameter state2: The second skeleton state (child).
473
+ :type state2: torch.Tensor
474
+ :parameter grad_state: The gradient with respect to the output skeleton state.
475
+ :type grad_state: torch.Tensor
476
+ :return: A tuple of (grad_state1, grad_state2) representing gradients with respect
477
+ to the first and second skeleton states respectively.
478
+ :rtype: tuple[torch.Tensor, torch.Tensor]
479
+ """
480
+ with torch.no_grad():
481
+ t1, q1, s1 = split(state1)
482
+ t2, q2, s2 = split(state2)
483
+ gt, gq, gs = split(grad_state)
484
+
485
+ # Gradient with respect to s2: gs * s1
486
+ gs2 = gs * s1
487
+
488
+ # Gradient with respect to quaternions from quaternion multiplication
489
+ # Use the "assume normalized" version to avoid norm computation
490
+ gq1_from_gq, gq2 = quaternion.multiply_backprop_assume_normalized(q1, q2, gq)
491
+
492
+ # Gradient with respect to quaternions from translation computation
493
+ # Following the corrected forward: t = t1 + s1 * quaternion.rotate_vector(q1, t2)
494
+ # We need gradients from: quaternion.rotate_vector(q1, t2) with gt scaled by s1
495
+ gq1_from_gt, gt2 = quaternion.rotate_vector_backprop_assume_normalized(
496
+ q1, t2, gt
497
+ )
498
+ gt2 = gt2 * s1.expand_as(t2)
499
+
500
+ # Combine quaternion gradients - add the missing s1 factor!
501
+ gq1 = gq1_from_gq + gq1_from_gt * s1.expand_as(gq1_from_gt)
502
+
503
+ # Gradient with respect to t1: direct passthrough
504
+ gt1 = gt
505
+
506
+ # Gradient with respect to s1: from both scale multiplication and rotation
507
+ # From scale multiplication: gs * s2
508
+ # From rotation: sum over the dot product of rotated vector with gradient
509
+ gs1_from_rotation = (quaternion.rotate_vector(q1, t2) * gt).sum(
510
+ dim=-1, keepdim=True
511
+ )
512
+ gs1 = gs1_from_rotation + gs * s2
513
+
514
+ return torch.cat([gt1, gq1, gs1], dim=-1), torch.cat([gt2, gq2, gs2], dim=-1)
Binary file
Binary file