pymomentum-cpu 0.1.82.post0__cp313-cp313-macosx_14_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 +123 -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 +117 -0
  97. include/momentum/character_solver/vertex_vertex_distance_error_function.h +147 -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 +30 -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 +56 -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-313-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-313-darwin.so +0 -0
  500. pymomentum/marker_tracking.cpython-313-darwin.so +0 -0
  501. pymomentum/quaternion.py +740 -0
  502. pymomentum/skel_state.py +514 -0
  503. pymomentum/solver.cpython-313-darwin.so +0 -0
  504. pymomentum/solver2.cpython-313-darwin.so +0 -0
  505. pymomentum/torch/character.py +856 -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.82.post0.dist-info/METADATA +121 -0
  510. pymomentum_cpu-0.1.82.post0.dist-info/RECORD +512 -0
  511. pymomentum_cpu-0.1.82.post0.dist-info/WHEEL +5 -0
  512. pymomentum_cpu-0.1.82.post0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,324 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <momentum/character/skeleton_state.h>
11
+ #include <momentum/common/checks.h>
12
+ #include <momentum/common/profile.h>
13
+
14
+ namespace momentum {
15
+
16
+ template <typename T, class Data, size_t FuncDim, size_t NumVec, size_t NumPos>
17
+ ConstraintErrorFunctionT<T, Data, FuncDim, NumVec, NumPos>::ConstraintErrorFunctionT(
18
+ const Skeleton& skel,
19
+ const ParameterTransform& pt,
20
+ const T& lossAlpha,
21
+ const T& lossC)
22
+ : SkeletonErrorFunctionT<T>(skel, pt),
23
+ loss_(lossAlpha, lossC),
24
+ jointGrad_(pt.numAllModelParameters()) {
25
+ static_assert(FuncDim > 0, "The error function cannot be empty.");
26
+ static_assert(NumVec > 0, "At least one vector is required in the constraint.");
27
+ static_assert(
28
+ NumVec >= NumPos, "The number of points cannot be more than the total number of vectors.");
29
+ }
30
+
31
+ template <typename T, class Data, size_t FuncDim, size_t NumVec, size_t NumPos>
32
+ double ConstraintErrorFunctionT<T, Data, FuncDim, NumVec, NumPos>::getError(
33
+ const ModelParametersT<T>& /* params */,
34
+ const SkeletonStateT<T>& state,
35
+ const MeshStateT<T>& /* meshState */) {
36
+ MT_PROFILE_FUNCTION();
37
+
38
+ // loop over all constraints and calculate the error
39
+ FuncType f;
40
+ double error = 0.0;
41
+ for (size_t iConstr = 0; iConstr < constraints_.size(); ++iConstr) {
42
+ const Data& constr = constraints_[iConstr];
43
+ if (constr.weight != 0) {
44
+ evalFunction(iConstr, state.jointState.at(constr.parent), f);
45
+ error += constr.weight * loss_.value(f.squaredNorm());
46
+ }
47
+ }
48
+ return this->weight_ * error;
49
+ }
50
+
51
+ template <typename T, class Data, size_t FuncDim, size_t NumVec, size_t NumPos>
52
+ double ConstraintErrorFunctionT<T, Data, FuncDim, NumVec, NumPos>::getJacobianForSingleConstraint(
53
+ const JointStateListT<T>& jointStates,
54
+ const size_t iConstr,
55
+ Ref<Eigen::MatrixX<T>> jacobian,
56
+ Ref<Eigen::VectorX<T>> residual) {
57
+ const Data& constr = this->constraints_[iConstr];
58
+ if (constr.weight == 0) {
59
+ return 0;
60
+ }
61
+
62
+ FuncType f;
63
+ std::array<VType, NumVec> v;
64
+ std::array<DfdvType, NumVec> dfdv;
65
+ evalFunction(iConstr, jointStates.at(constr.parent), f, v, dfdv);
66
+ const T sqrError = f.squaredNorm();
67
+ const T w = constr.weight * this->weight_;
68
+ const double error = w * this->loss_.value(sqrError);
69
+ const T deriv = std::sqrt(w * this->loss_.deriv(sqrError));
70
+
71
+ // The input jacobian is a subblock from the full jacobian tailored for this error function, so
72
+ // the rows start from zero.
73
+ const size_t rowIndex = FuncDim * iConstr;
74
+ // The gradient of the loss function needs to be split between J and r, so both J'J and
75
+ // J'r are scaled correctly. The factor 2 from the square term is accounted for in the base
76
+ // class function.
77
+ residual.template middleRows<FuncDim>(rowIndex).noalias() = deriv * f;
78
+
79
+ // Small optimization for early termination
80
+ if (isApprox<T>(deriv, T(0), Eps<T>(1e-9, 1e-16))) {
81
+ return error;
82
+ }
83
+ const bool zeroDeriv =
84
+ !std::any_of(dfdv.begin(), dfdv.end(), [](const auto& vec) { return !vec.isZero(); });
85
+ if (zeroDeriv) {
86
+ return error;
87
+ }
88
+
89
+ // shorthands for code readability
90
+ const auto outerIndexPtr = this->parameterTransform_.transform.outerIndexPtr();
91
+ const auto innerIndexPtr = this->parameterTransform_.transform.innerIndexPtr();
92
+ const auto valuePtr = this->parameterTransform_.transform.valuePtr();
93
+ auto&& jac = jacobian.template middleRows<FuncDim>(rowIndex);
94
+
95
+ // Fill in the jacobian by walking up the joint hierarchy for each constraint.
96
+ // Need to consider both active joints and enabled model parameters.
97
+ size_t jntIndex = constr.parent;
98
+ while (jntIndex != kInvalidIndex) {
99
+ // check for valid index
100
+ MT_CHECK(jntIndex < this->skeleton_.joints.size());
101
+
102
+ const auto& jntState = jointStates[jntIndex];
103
+ const size_t jntParamIndex = jntIndex * kParametersPerJoint;
104
+
105
+ for (size_t jVec = 0; jVec < NumVec; ++jVec) {
106
+ if (dfdv[jVec].isZero()) {
107
+ continue;
108
+ }
109
+
110
+ Eigen::Vector3<T> offset;
111
+ if (jVec < NumPos) {
112
+ offset.noalias() = v[jVec] - jntState.translation();
113
+ } else {
114
+ offset = v[jVec];
115
+ }
116
+
117
+ // Translational dofs -- only affect POINT
118
+ if (jVec < NumPos) {
119
+ for (size_t d = 0; d < 3; ++d) {
120
+ if (!this->activeJointParams_[jntParamIndex + d]) {
121
+ continue;
122
+ }
123
+
124
+ const FuncType jc = deriv * dfdv[jVec] * jntState.getTranslationDerivative(d);
125
+ for (auto index = outerIndexPtr[jntParamIndex + d];
126
+ index < outerIndexPtr[jntParamIndex + d + 1];
127
+ ++index) {
128
+ if (this->enabledParameters_.test(innerIndexPtr[index])) {
129
+ jac.col(innerIndexPtr[index]).noalias() += jc * valuePtr[index];
130
+ }
131
+ }
132
+ }
133
+ }
134
+
135
+ // Rotational dofs -- affect both POINT and AXIS
136
+ for (size_t d = 0; d < 3; ++d) {
137
+ if (!this->activeJointParams_[jntParamIndex + 3 + d]) {
138
+ continue;
139
+ }
140
+
141
+ const FuncType jc = deriv * dfdv[jVec] * jntState.getRotationDerivative(d, offset);
142
+ for (auto index = outerIndexPtr[jntParamIndex + 3 + d];
143
+ index < outerIndexPtr[jntParamIndex + 3 + d + 1];
144
+ ++index) {
145
+ if (this->enabledParameters_.test(innerIndexPtr[index])) {
146
+ jac.col(innerIndexPtr[index]).noalias() += jc * valuePtr[index];
147
+ }
148
+ }
149
+ }
150
+
151
+ // Scale dof -- only affect POINT
152
+ if (jVec < NumPos) {
153
+ if (this->activeJointParams_[jntParamIndex + 6]) {
154
+ const FuncType jc = deriv * dfdv[jVec] * jntState.getScaleDerivative(offset);
155
+ for (auto index = outerIndexPtr[jntParamIndex + 6];
156
+ index < outerIndexPtr[jntParamIndex + 6 + 1];
157
+ ++index) {
158
+ if (this->enabledParameters_.test(innerIndexPtr[index])) {
159
+ jac.col(innerIndexPtr[index]).noalias() += jc * valuePtr[index];
160
+ }
161
+ }
162
+ }
163
+ }
164
+ }
165
+ // go up the hierarchy to the parent
166
+ jntIndex = this->skeleton_.joints[jntIndex].parent;
167
+ }
168
+
169
+ return error;
170
+ }
171
+
172
+ template <typename T, class Data, size_t FuncDim, size_t NumVec, size_t NumPos>
173
+ double ConstraintErrorFunctionT<T, Data, FuncDim, NumVec, NumPos>::getJacobian(
174
+ const ModelParametersT<T>& /*params*/,
175
+ const SkeletonStateT<T>& state,
176
+ const MeshStateT<T>& /* meshState */,
177
+ Ref<Eigen::MatrixX<T>> jacobian,
178
+ Ref<Eigen::VectorX<T>> residual,
179
+ int& usedRows) {
180
+ MT_PROFILE_FUNCTION();
181
+ usedRows = getJacobianSize();
182
+
183
+ double error = 0.0;
184
+ for (size_t iConstr = 0; iConstr < this->constraints_.size(); ++iConstr) {
185
+ error += getJacobianForSingleConstraint(state.jointState, iConstr, jacobian, residual);
186
+ }
187
+ return error;
188
+ }
189
+
190
+ template <typename T, class Data, size_t FuncDim, size_t NumVec, size_t NumPos>
191
+ double ConstraintErrorFunctionT<T, Data, FuncDim, NumVec, NumPos>::getGradientForSingleConstraint(
192
+ const JointStateListT<T>& jointStates,
193
+ size_t iConstr,
194
+ Ref<VectorX<T>> /*gradient*/) {
195
+ const Data& constr = this->constraints_[iConstr];
196
+ if (constr.weight == 0) {
197
+ return 0;
198
+ }
199
+
200
+ FuncType f;
201
+ std::array<VType, NumVec> v;
202
+ std::array<DfdvType, NumVec> dfdv;
203
+ evalFunction(iConstr, jointStates.at(constr.parent), f, v, dfdv);
204
+ if (f.isZero()) {
205
+ return 0;
206
+ }
207
+
208
+ const T sqrError = f.squaredNorm();
209
+ const T w = constr.weight * this->weight_;
210
+ const double error = w * this->loss_.value(sqrError);
211
+ // The gradient is scaled by the gradient of the loss function; factor 2 falls out of the
212
+ // square.
213
+ const FuncType deriv = T(2) * w * this->loss_.deriv(sqrError) * f;
214
+
215
+ const auto outerIndexPtr = this->parameterTransform_.transform.outerIndexPtr();
216
+ const auto innerIndexPtr = this->parameterTransform_.transform.innerIndexPtr();
217
+ const auto valuePtr = this->parameterTransform_.transform.valuePtr();
218
+ size_t jntIndex = constr.parent;
219
+ while (jntIndex != kInvalidIndex) {
220
+ // check for valid index
221
+ MT_CHECK(jntIndex < this->skeleton_.joints.size());
222
+
223
+ const auto& jntState = jointStates[jntIndex];
224
+ const size_t jntParamIndex = jntIndex * kParametersPerJoint;
225
+
226
+ for (size_t jVec = 0; jVec < NumVec; ++jVec) {
227
+ if (dfdv[jVec].isZero()) {
228
+ continue;
229
+ }
230
+
231
+ Eigen::Vector3<T> offset;
232
+ if (jVec < NumPos) {
233
+ offset.noalias() = v[jVec] - jntState.translation();
234
+ } else {
235
+ offset = v[jVec];
236
+ }
237
+
238
+ // Translational dofs -- only affect POINT
239
+ if (jVec < NumPos) {
240
+ for (size_t d = 0; d < 3; d++) {
241
+ if (!this->activeJointParams_[jntParamIndex + d]) {
242
+ continue;
243
+ }
244
+
245
+ // joint space gradient
246
+ const T val = deriv.dot(dfdv[jVec] * jntState.getTranslationDerivative(d));
247
+ // multiply with parameter transform to get model parameter gradient
248
+ for (auto index = outerIndexPtr[jntParamIndex + d];
249
+ index < outerIndexPtr[jntParamIndex + d + 1];
250
+ ++index) {
251
+ if (this->enabledParameters_.test(innerIndexPtr[index])) {
252
+ jointGrad_[innerIndexPtr[index]] += val * valuePtr[index];
253
+ }
254
+ }
255
+ }
256
+ }
257
+
258
+ // Rotational dofs -- affect both POINT and AXIS
259
+ for (size_t d = 0; d < 3; d++) {
260
+ if (!this->activeJointParams_[jntParamIndex + 3 + d]) {
261
+ continue;
262
+ }
263
+
264
+ // joint space gradient
265
+ const T val = deriv.dot(dfdv[jVec] * jntState.getRotationDerivative(d, offset));
266
+ // multiply with parameter transform to get model parameter gradient
267
+ for (auto index = outerIndexPtr[jntParamIndex + 3 + d];
268
+ index < outerIndexPtr[jntParamIndex + 3 + d + 1];
269
+ ++index) {
270
+ if (this->enabledParameters_.test(innerIndexPtr[index])) {
271
+ jointGrad_[innerIndexPtr[index]] += val * valuePtr[index];
272
+ }
273
+ }
274
+ }
275
+
276
+ // Scale dof -- only affect POINT
277
+ if (jVec < NumPos) {
278
+ if (this->activeJointParams_[jntParamIndex + 6]) {
279
+ // joint space gradient
280
+ const T val = deriv.dot(dfdv[jVec] * jntState.getScaleDerivative(offset));
281
+ // multiply with parameter transform to get model parameter gradient
282
+ for (auto index = outerIndexPtr[jntParamIndex + 6];
283
+ index < outerIndexPtr[jntParamIndex + 6 + 1];
284
+ ++index) {
285
+ if (this->enabledParameters_.test(innerIndexPtr[index])) {
286
+ jointGrad_[innerIndexPtr[index]] += val * valuePtr[index];
287
+ }
288
+ }
289
+ }
290
+ }
291
+ }
292
+ // go up the skeleton hierarchy to the parent joint
293
+ jntIndex = this->skeleton_.joints[jntIndex].parent;
294
+ }
295
+
296
+ return error;
297
+ }
298
+
299
+ template <typename T, class Data, size_t FuncDim, size_t NumVec, size_t NumPos>
300
+ double ConstraintErrorFunctionT<T, Data, FuncDim, NumVec, NumPos>::getGradient(
301
+ const ModelParametersT<T>& /*unused*/,
302
+ const SkeletonStateT<T>& state,
303
+ const MeshStateT<T>& /* meshState */,
304
+ Ref<Eigen::VectorX<T>> gradient) {
305
+ MT_PROFILE_FUNCTION();
306
+
307
+ // initialize joint gradients storage
308
+ jointGrad_.setZero();
309
+
310
+ double error = 0.0;
311
+ for (size_t iConstr = 0; iConstr < this->constraints_.size(); ++iConstr) {
312
+ error += getGradientForSingleConstraint(state.jointState, iConstr, gradient);
313
+ }
314
+
315
+ gradient += jointGrad_;
316
+ return error;
317
+ }
318
+
319
+ template <typename T, class Data, size_t FuncDim, size_t NumVec, size_t NumPos>
320
+ size_t ConstraintErrorFunctionT<T, Data, FuncDim, NumVec, NumPos>::getJacobianSize() const {
321
+ return FuncDim * constraints_.size();
322
+ }
323
+
324
+ } // namespace momentum
@@ -0,0 +1,248 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <momentum/character/character.h>
11
+ #include <momentum/character/types.h>
12
+ #include <momentum/character_solver/skeleton_error_function.h>
13
+ #include <momentum/math/generalized_loss.h>
14
+ #include <momentum/math/types.h>
15
+
16
+ #include <optional>
17
+
18
+ namespace momentum {
19
+
20
+ /// Base structure of constraint data
21
+ struct ConstraintData {
22
+ /// Parent joint index this constraint is under
23
+ size_t parent = kInvalidIndex;
24
+ /// Weight of the constraint
25
+ float weight = 0.0;
26
+ /// Name of the constraint
27
+ std::string name = {};
28
+
29
+ ConstraintData(size_t pIndex, float w, const std::string& n = "")
30
+ : parent(pIndex), weight(w), name(n) {}
31
+ };
32
+
33
+ /// A list of ConstraintData
34
+ using ConstraintDataList = std::vector<ConstraintData>;
35
+
36
+ /// An optional of a reference. Because optional<T&> is invalid, we need to use reference_wrapper to
37
+ /// make the reference of T as an optional.
38
+ template <typename T>
39
+ using optional_ref = std::optional<std::reference_wrapper<T>>;
40
+
41
+ /// The ConstraintErrorFunction is a base class of a general form of constraint errors l = w *
42
+ /// loss(f^2), where w is the weight (could be a product of different weighting terms), loss() is
43
+ /// the generalized loss function (see math/generalized_loss.h), and f is a difference vector we
44
+ /// want to minimize.
45
+ ///
46
+ /// f takes the form of f(v, target), where v = T(q)*source. T is the global transformation of the
47
+ /// parent joint of the source, and target is the desired value of source in global space. f
48
+ /// computes the differences between v and target.
49
+ ///
50
+ /// Based on the above, we have
51
+ /// Jacobian: df/dq = df/dv * dv/dT * dT/dq, and
52
+ /// Gradient: dl/dq = dl/df * Jac
53
+ /// Both dl/df and dT/dq are boiler plate code that we can implement in the base class, so a derived
54
+ /// class only needs to implement f and df/dT. However, dT/dq is not efficient to compute, and
55
+ /// Momentum instead implements dv/dq, for any 3-vector v. Therefore, we will compute df/dq = df/dv
56
+ /// * dv/dq, and implement dv/dq in the base class. So a derived class now needs to implement f and
57
+ /// df/dv.
58
+ ///
59
+ /// This should work for a point (eg. PositionErrorFunction), or an axis (eg.
60
+ /// FixedAxisErrorFunction), but it can also work for a rotation matrix, or a 3x4 transformation
61
+ /// matrix, by applying the transformation one axis/point at a time.The number of 3-vectors to be
62
+ /// transformed in a constraint is NumVec.
63
+ template <
64
+ typename T, // float or double
65
+ class Data, // derived types from ConstraintData
66
+ size_t FuncDim = 3, // dimension of f
67
+ size_t NumVec =
68
+ 1, // how many 3-vector v in one constraint, eg. a point is 1, and a rotation matrix is 3
69
+ size_t NumPos =
70
+ 1> // we assume a constraint can be a function of both points and axes, and points come
71
+ // before axes in the NumVec of "v"s. This specifies how many "v"s are points. For
72
+ // example, it's 1 for a point constraint, and 0 for a rotation matrix.
73
+ class ConstraintErrorFunctionT : public SkeletonErrorFunctionT<T> {
74
+ public:
75
+ static constexpr size_t kFuncDim = FuncDim;
76
+ static constexpr size_t kNumVec = NumVec;
77
+ static constexpr size_t kNumPos = NumPos;
78
+
79
+ using FuncType = Vector<T, FuncDim>; // vector type for f
80
+ using VType = Vector3<T>; // vector type for v
81
+ using DfdvType = Eigen::Matrix<T, FuncDim, 3>; // type for dfdv - it's effectively a vector if f
82
+ // is a scalar (FuncDim=1, eg. PlaneErrorFunction)
83
+ /// Constructor
84
+ ///
85
+ /// @param[in] skel: character skeleton
86
+ /// @param[in] pt: parameter transformation
87
+ /// @param[in] lossAlpha: alpha parameter for the loss function
88
+ /// @param[in] lossC: c parameter for the loss function
89
+ explicit ConstraintErrorFunctionT(
90
+ const Skeleton& skel,
91
+ const ParameterTransform& pt,
92
+ const T& lossAlpha = GeneralizedLossT<T>::kL2,
93
+ const T& lossC = T(1));
94
+
95
+ /// A convenience constructor where character contains info of the skeleton and parameter
96
+ /// transform.
97
+ ///
98
+ /// @param[in] character: character definition
99
+ /// @param[in] lossAlpha: alpha parameter for the loss function
100
+ /// @param[in] lossC: c parameter for the loss function
101
+ explicit ConstraintErrorFunctionT(
102
+ const Character& character,
103
+ const T& lossAlpha = GeneralizedLossT<T>::kL2,
104
+ const T& lossC = T(1))
105
+ : ConstraintErrorFunctionT<T, Data, FuncDim, NumVec, NumPos>(
106
+ character.skeleton,
107
+ character.parameterTransform,
108
+ lossAlpha,
109
+ lossC) {}
110
+
111
+ // The functions below should just work for most constraints. When we have new constraints that
112
+ // don't fit these implementations, we can remove the "final" annotation to allow override.
113
+
114
+ /// Computes the error function value l = w * loss(f^2). It gets f from the derived class, and
115
+ /// implements the rest.
116
+ ///
117
+ /// @param[in] params: current model parameters
118
+ /// @param[in] state: curren global skeleton joint states computed from the model parameters
119
+ /// @param[in] meshState: current mesh state (unused by this base class)
120
+ ///
121
+ /// @return the error function value l
122
+ [[nodiscard]] double getError(
123
+ const ModelParametersT<T>& params,
124
+ const SkeletonStateT<T>& state,
125
+ const MeshStateT<T>& /* meshState */) final;
126
+
127
+ /// The gradient of the error function: dl/dq = dl/d[f^2] * 2f * df/dv * dv/dq. It gets df/dv from
128
+ /// the derived class, and implements the rest.
129
+ ///
130
+ /// @param[in] params: current model parameters
131
+ /// @param[in] state: curren global skeleton joint states computed from the model parameters
132
+ /// @param[in] meshState: current mesh state (unused by this base class)
133
+ /// @param[out] gradient: the gradient vector to accumulate into
134
+ ///
135
+ /// @return the error function value l
136
+ double getGradient(
137
+ const ModelParametersT<T>& params,
138
+ const SkeletonStateT<T>& state,
139
+ const MeshStateT<T>& /* meshState */,
140
+ Ref<VectorX<T>> gradient) final;
141
+
142
+ /// For least-square problems, we assume l is the square of a vector function F. The jacobian is
143
+ /// then dF/dq. (A factor 2 is implemented in the solver.) With l2 loss, we have F = sqrt(w) * f,
144
+ /// and the jacobian is sqrt(w) * df/dv * dv/dq. With the generalized loss, the jacobian becomes
145
+ /// sqrt(w * d[loss]/d[f^2]) * df/dv * dv/dq. It gets df/dv from the derived class, and implements
146
+ /// the rest.
147
+ ///
148
+ /// @param[in] params: current model parameters
149
+ /// @param[in] state: curren global skeleton joint states computed from the model parameters
150
+ /// @param[in] meshState: current mesh state (unused by this base class)
151
+ /// @param[out] jacobian: the output jacobian matrix
152
+ /// @param[out] residual: the output function residual (ie. f scaled by the loss gradient)
153
+ /// @param[out] usedRows: number of rows in the jacobian/residual used by this error function
154
+ ///
155
+ /// @return the error function l
156
+ double getJacobian(
157
+ const ModelParametersT<T>& params,
158
+ const SkeletonStateT<T>& state,
159
+ const MeshStateT<T>& /* meshState */,
160
+ Ref<MatrixX<T>> jacobian,
161
+ Ref<VectorX<T>> residual,
162
+ int& usedRows) final;
163
+
164
+ /// The number of rows in the jacobian is the dimension of f, FuncDim, times the number of
165
+ /// constraints.
166
+ ///
167
+ /// @return number of rows in the jacobian
168
+ [[nodiscard]] size_t getJacobianSize() const final;
169
+
170
+ /// Adds a constraint to the list
171
+ ///
172
+ /// @param[in] constr: the constraint to be added
173
+ void addConstraint(const Data& constr) {
174
+ constraints_.push_back(constr);
175
+ }
176
+
177
+ /// Appends a list of constraints
178
+ ///
179
+ /// @param[in] constrs: a list of constraints to be added
180
+ void addConstraints(gsl::span<const Data> constrs) {
181
+ constraints_.insert(constraints_.end(), constrs.begin(), constrs.end());
182
+ }
183
+
184
+ /// Replace the current list of constraints with the input
185
+ ///
186
+ /// @param[in] constrs: the new list of constraints
187
+ void setConstraints(gsl::span<const Data> constrs) {
188
+ constraints_.assign(constrs.begin(), constrs.end());
189
+ }
190
+
191
+ /// @return the current list of constraints immutable
192
+ [[nodiscard]] const std::vector<Data>& getConstraints() const {
193
+ return constraints_;
194
+ }
195
+
196
+ [[nodiscard]] size_t numConstraints() const {
197
+ return constraints_.size();
198
+ }
199
+
200
+ /// Clear the current list of constraints
201
+ void clearConstraints() {
202
+ constraints_.clear();
203
+ }
204
+
205
+ protected:
206
+ /// List of constraints
207
+ std::vector<Data> constraints_;
208
+ /// The generalized loss function that transforms f^2
209
+ const GeneralizedLossT<T> loss_;
210
+ /// Intermediate storage of the gradient from this error function. We can allocate the space in
211
+ /// the constructor to save some dynamic allocation.
212
+ VectorX<T> jointGrad_;
213
+
214
+ /// The only function a derived class needs to implement.
215
+ /// f is needed both for errors and derivatives, v and dfdv are needed only for computing
216
+ /// derivatives, and therefore optional. An implementation should check if they are provided
217
+ /// before computing and setting their values. And don't assume they are zero-initialized. Each
218
+ /// returned v and df/dv corresponds to a source 3-vector (eg. a position constraint, or each of
219
+ /// the three axis of a rotation constraint).
220
+ ///
221
+ /// @param[in] constrIndex: index of the constraint to evaluate
222
+ /// @param[in] state: JointState of the parent joint with transformation T
223
+ /// @param[out] f: output the value of f of dimension FuncDim
224
+ /// @param[out] v: if valid, output the vector v=T*source; there could be NumVec of vs
225
+ /// @param[out] dfdv: if valid, output the matrix df/dv of dimension FuncDim x 3 per v
226
+ virtual void evalFunction(
227
+ size_t constrIndex,
228
+ const JointStateT<T>& state,
229
+ FuncType& f,
230
+ optional_ref<std::array<VType, NumVec>> v = {},
231
+ optional_ref<std::array<DfdvType, NumVec>> dfdv = {}) const = 0;
232
+
233
+ private:
234
+ double getJacobianForSingleConstraint(
235
+ const JointStateListT<T>& jointStates,
236
+ size_t iConstr,
237
+ Ref<Eigen::MatrixX<T>> jacobian,
238
+ Ref<Eigen::VectorX<T>> residual);
239
+
240
+ double getGradientForSingleConstraint(
241
+ const JointStateListT<T>& jointStates,
242
+ size_t iConstr,
243
+ Ref<VectorX<T>> gradient);
244
+ };
245
+
246
+ } // namespace momentum
247
+
248
+ #include "momentum/character_solver/constraint_error_function-inl.h"
@@ -0,0 +1,77 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "momentum/character/locator.h"
11
+ #include "momentum/character_solver/skeleton_error_function.h"
12
+
13
+ namespace momentum {
14
+
15
+ // The distance constraint is defined as ||(p_joint - origin)^2 - target||^2
16
+ template <typename T>
17
+ struct DistanceConstraintDataT {
18
+ Eigen::Vector3<T> origin = Eigen::Vector3<T>::Zero(); // origin in world space
19
+ T target{}; // distance target in world space
20
+ size_t parent{}; // parent joint of the constraint
21
+ Eigen::Vector3<T> offset; // relative offset to the parent
22
+ T weight{}; // constraint weight
23
+ // comment for now
24
+ static DistanceConstraintDataT<T> createFromLocator(const momentum::Locator& locator);
25
+ };
26
+
27
+ template <typename T>
28
+ class DistanceErrorFunctionT : public momentum::SkeletonErrorFunctionT<T> {
29
+ public:
30
+ DistanceErrorFunctionT(const momentum::Skeleton& skel, const momentum::ParameterTransform& pt);
31
+
32
+ [[nodiscard]] double getError(
33
+ const momentum::ModelParametersT<T>& params,
34
+ const momentum::SkeletonStateT<T>& state,
35
+ const momentum::MeshStateT<T>& meshState) final;
36
+ double getGradient(
37
+ const momentum::ModelParametersT<T>& params,
38
+ const momentum::SkeletonStateT<T>& state,
39
+ const momentum::MeshStateT<T>& meshState,
40
+ Eigen::Ref<Eigen::VectorX<T>> gradient) final;
41
+ double getJacobian(
42
+ const momentum::ModelParametersT<T>& params,
43
+ const momentum::SkeletonStateT<T>& state,
44
+ const momentum::MeshStateT<T>& meshState,
45
+ Eigen::Ref<Eigen::MatrixX<T>> jacobian,
46
+ Eigen::Ref<Eigen::VectorX<T>> residual,
47
+ int& usedRows) final;
48
+ [[nodiscard]] size_t getJacobianSize() const final;
49
+
50
+ void addConstraint(const DistanceConstraintDataT<T>& constr) {
51
+ constraints_.push_back(constr);
52
+ }
53
+ void clearConstraints() {
54
+ constraints_.clear();
55
+ }
56
+ void setConstraints(std::vector<DistanceConstraintDataT<T>> constr) {
57
+ constraints_ = std::move(constr);
58
+ }
59
+ [[nodiscard]] bool empty() const {
60
+ return constraints_.empty();
61
+ }
62
+ [[nodiscard]] size_t numConstraints() const {
63
+ return constraints_.size();
64
+ }
65
+
66
+ [[nodiscard]] const std::vector<DistanceConstraintDataT<T>>& getConstraints() const {
67
+ return constraints_;
68
+ }
69
+
70
+ protected:
71
+ // TODO: what should we use here?
72
+ const T kDistanceWeight = 1.0f;
73
+
74
+ std::vector<DistanceConstraintDataT<T>> constraints_;
75
+ };
76
+
77
+ } // namespace momentum