pymomentum-cpu 0.0.0__cp312-cp312-manylinux_2_39_x86_64.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 (555) 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/KdTree.h +199 -0
  9. include/axel/Log.h +22 -0
  10. include/axel/MeshToSdf.h +123 -0
  11. include/axel/Profile.h +64 -0
  12. include/axel/Ray.h +45 -0
  13. include/axel/SignedDistanceField.h +237 -0
  14. include/axel/SimdKdTree.h +515 -0
  15. include/axel/TriBvh.h +157 -0
  16. include/axel/TriBvhEmbree.h +57 -0
  17. include/axel/common/Constants.h +27 -0
  18. include/axel/common/Types.h +21 -0
  19. include/axel/common/VectorizationTypes.h +58 -0
  20. include/axel/math/BoundingBoxUtils.h +54 -0
  21. include/axel/math/ContinuousCollisionDetection.h +48 -0
  22. include/axel/math/CoplanarityCheck.h +30 -0
  23. include/axel/math/EdgeEdgeDistance.h +31 -0
  24. include/axel/math/MeshHoleFilling.h +98 -0
  25. include/axel/math/PointTriangleProjection.h +34 -0
  26. include/axel/math/PointTriangleProjectionDefinitions.h +209 -0
  27. include/axel/math/RayTriangleIntersection.h +36 -0
  28. include/momentum/character/blend_shape.h +91 -0
  29. include/momentum/character/blend_shape_base.h +70 -0
  30. include/momentum/character/blend_shape_skinning.h +96 -0
  31. include/momentum/character/character.h +272 -0
  32. include/momentum/character/character_state.h +108 -0
  33. include/momentum/character/character_utility.h +128 -0
  34. include/momentum/character/collision_geometry.h +80 -0
  35. include/momentum/character/collision_geometry_state.h +130 -0
  36. include/momentum/character/fwd.h +243 -0
  37. include/momentum/character/inverse_parameter_transform.h +58 -0
  38. include/momentum/character/joint.h +82 -0
  39. include/momentum/character/joint_state.h +241 -0
  40. include/momentum/character/linear_skinning.h +139 -0
  41. include/momentum/character/locator.h +82 -0
  42. include/momentum/character/locator_state.h +43 -0
  43. include/momentum/character/marker.h +48 -0
  44. include/momentum/character/parameter_limits.h +144 -0
  45. include/momentum/character/parameter_transform.h +250 -0
  46. include/momentum/character/pose_shape.h +65 -0
  47. include/momentum/character/skeleton.h +85 -0
  48. include/momentum/character/skeleton_state.h +181 -0
  49. include/momentum/character/skeleton_utility.h +38 -0
  50. include/momentum/character/skin_weights.h +67 -0
  51. include/momentum/character/skinned_locator.h +80 -0
  52. include/momentum/character/types.h +202 -0
  53. include/momentum/character_sequence_solver/fwd.h +200 -0
  54. include/momentum/character_sequence_solver/model_parameters_sequence_error_function.h +62 -0
  55. include/momentum/character_sequence_solver/multipose_solver.h +63 -0
  56. include/momentum/character_sequence_solver/multipose_solver_function.h +80 -0
  57. include/momentum/character_sequence_solver/sequence_error_function.h +95 -0
  58. include/momentum/character_sequence_solver/sequence_solver.h +144 -0
  59. include/momentum/character_sequence_solver/sequence_solver_function.h +126 -0
  60. include/momentum/character_sequence_solver/state_sequence_error_function.h +106 -0
  61. include/momentum/character_sequence_solver/vertex_sequence_error_function.h +125 -0
  62. include/momentum/character_solver/aim_error_function.h +112 -0
  63. include/momentum/character_solver/collision_error_function.h +88 -0
  64. include/momentum/character_solver/collision_error_function_stateless.h +71 -0
  65. include/momentum/character_solver/constraint_error_function-inl.h +321 -0
  66. include/momentum/character_solver/constraint_error_function.h +241 -0
  67. include/momentum/character_solver/distance_error_function.h +74 -0
  68. include/momentum/character_solver/error_function_utils.h +60 -0
  69. include/momentum/character_solver/fixed_axis_error_function.h +139 -0
  70. include/momentum/character_solver/fwd.h +924 -0
  71. include/momentum/character_solver/gauss_newton_solver_qr.h +62 -0
  72. include/momentum/character_solver/limit_error_function.h +53 -0
  73. include/momentum/character_solver/model_parameters_error_function.h +61 -0
  74. include/momentum/character_solver/normal_error_function.h +73 -0
  75. include/momentum/character_solver/orientation_error_function.h +74 -0
  76. include/momentum/character_solver/plane_error_function.h +102 -0
  77. include/momentum/character_solver/point_triangle_vertex_error_function.h +140 -0
  78. include/momentum/character_solver/pose_prior_error_function.h +76 -0
  79. include/momentum/character_solver/position_error_function.h +75 -0
  80. include/momentum/character_solver/projection_error_function.h +90 -0
  81. include/momentum/character_solver/simd_collision_error_function.h +95 -0
  82. include/momentum/character_solver/simd_normal_error_function.h +151 -0
  83. include/momentum/character_solver/simd_plane_error_function.h +154 -0
  84. include/momentum/character_solver/simd_position_error_function.h +155 -0
  85. include/momentum/character_solver/skeleton_error_function.h +136 -0
  86. include/momentum/character_solver/skeleton_solver_function.h +72 -0
  87. include/momentum/character_solver/skinned_locator_error_function.h +163 -0
  88. include/momentum/character_solver/skinned_locator_triangle_error_function.h +138 -0
  89. include/momentum/character_solver/skinning_weight_iterator.h +80 -0
  90. include/momentum/character_solver/state_error_function.h +90 -0
  91. include/momentum/character_solver/transform_pose.h +80 -0
  92. include/momentum/character_solver/trust_region_qr.h +78 -0
  93. include/momentum/character_solver/vertex_error_function.h +154 -0
  94. include/momentum/character_solver/vertex_projection_error_function.h +118 -0
  95. include/momentum/character_solver/vertex_vertex_distance_error_function.h +143 -0
  96. include/momentum/common/aligned.h +155 -0
  97. include/momentum/common/checks.h +27 -0
  98. include/momentum/common/exception.h +70 -0
  99. include/momentum/common/filesystem.h +20 -0
  100. include/momentum/common/fwd.h +27 -0
  101. include/momentum/common/log.h +173 -0
  102. include/momentum/common/log_channel.h +17 -0
  103. include/momentum/common/memory.h +71 -0
  104. include/momentum/common/profile.h +79 -0
  105. include/momentum/common/progress_bar.h +37 -0
  106. include/momentum/common/string.h +52 -0
  107. include/momentum/diff_ik/ceres_utility.h +73 -0
  108. include/momentum/diff_ik/fully_differentiable_body_ik.h +58 -0
  109. include/momentum/diff_ik/fully_differentiable_distance_error_function.h +69 -0
  110. include/momentum/diff_ik/fully_differentiable_motion_error_function.h +46 -0
  111. include/momentum/diff_ik/fully_differentiable_orientation_error_function.h +109 -0
  112. include/momentum/diff_ik/fully_differentiable_pose_prior_error_function.h +76 -0
  113. include/momentum/diff_ik/fully_differentiable_position_error_function.h +133 -0
  114. include/momentum/diff_ik/fully_differentiable_projection_error_function.h +65 -0
  115. include/momentum/diff_ik/fully_differentiable_skeleton_error_function.h +160 -0
  116. include/momentum/diff_ik/fully_differentiable_state_error_function.h +54 -0
  117. include/momentum/diff_ik/fwd.h +385 -0
  118. include/momentum/diff_ik/union_error_function.h +63 -0
  119. include/momentum/gui/rerun/eigen_adapters.h +70 -0
  120. include/momentum/gui/rerun/logger.h +102 -0
  121. include/momentum/gui/rerun/logging_redirect.h +27 -0
  122. include/momentum/io/character_io.h +56 -0
  123. include/momentum/io/common/gsl_utils.h +50 -0
  124. include/momentum/io/common/stream_utils.h +65 -0
  125. include/momentum/io/fbx/fbx_io.h +109 -0
  126. include/momentum/io/fbx/fbx_memory_stream.h +66 -0
  127. include/momentum/io/fbx/openfbx_loader.h +49 -0
  128. include/momentum/io/fbx/polygon_data.h +60 -0
  129. include/momentum/io/gltf/gltf_builder.h +135 -0
  130. include/momentum/io/gltf/gltf_file_format.h +19 -0
  131. include/momentum/io/gltf/gltf_io.h +136 -0
  132. include/momentum/io/gltf/utils/accessor_utils.h +299 -0
  133. include/momentum/io/gltf/utils/coordinate_utils.h +60 -0
  134. include/momentum/io/gltf/utils/json_utils.h +102 -0
  135. include/momentum/io/legacy_json/legacy_json_io.h +70 -0
  136. include/momentum/io/marker/c3d_io.h +29 -0
  137. include/momentum/io/marker/conversions.h +57 -0
  138. include/momentum/io/marker/coordinate_system.h +30 -0
  139. include/momentum/io/marker/marker_io.h +54 -0
  140. include/momentum/io/marker/trc_io.h +27 -0
  141. include/momentum/io/motion/mmo_io.h +97 -0
  142. include/momentum/io/shape/blend_shape_io.h +70 -0
  143. include/momentum/io/shape/pose_shape_io.h +21 -0
  144. include/momentum/io/skeleton/locator_io.h +41 -0
  145. include/momentum/io/skeleton/mppca_io.h +26 -0
  146. include/momentum/io/skeleton/parameter_limits_io.h +25 -0
  147. include/momentum/io/skeleton/parameter_transform_io.h +41 -0
  148. include/momentum/io/skeleton/parameters_io.h +20 -0
  149. include/momentum/io/urdf/urdf_io.h +26 -0
  150. include/momentum/io/usd/usd_io.h +36 -0
  151. include/momentum/marker_tracking/app_utils.h +62 -0
  152. include/momentum/marker_tracking/marker_tracker.h +213 -0
  153. include/momentum/marker_tracking/process_markers.h +58 -0
  154. include/momentum/marker_tracking/tracker_utils.h +90 -0
  155. include/momentum/math/constants.h +82 -0
  156. include/momentum/math/covariance_matrix.h +84 -0
  157. include/momentum/math/fmt_eigen.h +23 -0
  158. include/momentum/math/fwd.h +132 -0
  159. include/momentum/math/generalized_loss.h +61 -0
  160. include/momentum/math/intersection.h +32 -0
  161. include/momentum/math/mesh.h +84 -0
  162. include/momentum/math/mppca.h +67 -0
  163. include/momentum/math/online_householder_qr.h +516 -0
  164. include/momentum/math/random-inl.h +404 -0
  165. include/momentum/math/random.h +310 -0
  166. include/momentum/math/simd_generalized_loss.h +40 -0
  167. include/momentum/math/transform.h +229 -0
  168. include/momentum/math/types.h +461 -0
  169. include/momentum/math/utility.h +251 -0
  170. include/momentum/rasterizer/camera.h +453 -0
  171. include/momentum/rasterizer/fwd.h +102 -0
  172. include/momentum/rasterizer/geometry.h +83 -0
  173. include/momentum/rasterizer/image.h +18 -0
  174. include/momentum/rasterizer/rasterizer.h +583 -0
  175. include/momentum/rasterizer/tensor.h +140 -0
  176. include/momentum/rasterizer/utility.h +268 -0
  177. include/momentum/simd/simd.h +221 -0
  178. include/momentum/solver/fwd.h +131 -0
  179. include/momentum/solver/gauss_newton_solver.h +136 -0
  180. include/momentum/solver/gradient_descent_solver.h +65 -0
  181. include/momentum/solver/solver.h +155 -0
  182. include/momentum/solver/solver_function.h +126 -0
  183. include/momentum/solver/subset_gauss_newton_solver.h +109 -0
  184. include/rerun/archetypes/annotation_context.hpp +157 -0
  185. include/rerun/archetypes/arrows2d.hpp +271 -0
  186. include/rerun/archetypes/arrows3d.hpp +257 -0
  187. include/rerun/archetypes/asset3d.hpp +262 -0
  188. include/rerun/archetypes/asset_video.hpp +275 -0
  189. include/rerun/archetypes/bar_chart.hpp +261 -0
  190. include/rerun/archetypes/boxes2d.hpp +293 -0
  191. include/rerun/archetypes/boxes3d.hpp +369 -0
  192. include/rerun/archetypes/capsules3d.hpp +333 -0
  193. include/rerun/archetypes/clear.hpp +180 -0
  194. include/rerun/archetypes/depth_image.hpp +425 -0
  195. include/rerun/archetypes/ellipsoids3d.hpp +384 -0
  196. include/rerun/archetypes/encoded_image.hpp +250 -0
  197. include/rerun/archetypes/geo_line_strings.hpp +166 -0
  198. include/rerun/archetypes/geo_points.hpp +177 -0
  199. include/rerun/archetypes/graph_edges.hpp +152 -0
  200. include/rerun/archetypes/graph_nodes.hpp +206 -0
  201. include/rerun/archetypes/image.hpp +434 -0
  202. include/rerun/archetypes/instance_poses3d.hpp +221 -0
  203. include/rerun/archetypes/line_strips2d.hpp +289 -0
  204. include/rerun/archetypes/line_strips3d.hpp +270 -0
  205. include/rerun/archetypes/mesh3d.hpp +387 -0
  206. include/rerun/archetypes/pinhole.hpp +385 -0
  207. include/rerun/archetypes/points2d.hpp +333 -0
  208. include/rerun/archetypes/points3d.hpp +369 -0
  209. include/rerun/archetypes/recording_properties.hpp +132 -0
  210. include/rerun/archetypes/scalar.hpp +170 -0
  211. include/rerun/archetypes/scalars.hpp +153 -0
  212. include/rerun/archetypes/segmentation_image.hpp +305 -0
  213. include/rerun/archetypes/series_line.hpp +274 -0
  214. include/rerun/archetypes/series_lines.hpp +271 -0
  215. include/rerun/archetypes/series_point.hpp +265 -0
  216. include/rerun/archetypes/series_points.hpp +251 -0
  217. include/rerun/archetypes/tensor.hpp +213 -0
  218. include/rerun/archetypes/text_document.hpp +200 -0
  219. include/rerun/archetypes/text_log.hpp +211 -0
  220. include/rerun/archetypes/transform3d.hpp +925 -0
  221. include/rerun/archetypes/video_frame_reference.hpp +295 -0
  222. include/rerun/archetypes/view_coordinates.hpp +393 -0
  223. include/rerun/archetypes.hpp +43 -0
  224. include/rerun/arrow_utils.hpp +32 -0
  225. include/rerun/as_components.hpp +90 -0
  226. include/rerun/blueprint/archetypes/background.hpp +113 -0
  227. include/rerun/blueprint/archetypes/container_blueprint.hpp +259 -0
  228. include/rerun/blueprint/archetypes/dataframe_query.hpp +178 -0
  229. include/rerun/blueprint/archetypes/entity_behavior.hpp +130 -0
  230. include/rerun/blueprint/archetypes/force_center.hpp +115 -0
  231. include/rerun/blueprint/archetypes/force_collision_radius.hpp +141 -0
  232. include/rerun/blueprint/archetypes/force_link.hpp +136 -0
  233. include/rerun/blueprint/archetypes/force_many_body.hpp +124 -0
  234. include/rerun/blueprint/archetypes/force_position.hpp +132 -0
  235. include/rerun/blueprint/archetypes/line_grid3d.hpp +178 -0
  236. include/rerun/blueprint/archetypes/map_background.hpp +104 -0
  237. include/rerun/blueprint/archetypes/map_zoom.hpp +103 -0
  238. include/rerun/blueprint/archetypes/near_clip_plane.hpp +109 -0
  239. include/rerun/blueprint/archetypes/panel_blueprint.hpp +95 -0
  240. include/rerun/blueprint/archetypes/plot_legend.hpp +118 -0
  241. include/rerun/blueprint/archetypes/scalar_axis.hpp +116 -0
  242. include/rerun/blueprint/archetypes/tensor_scalar_mapping.hpp +146 -0
  243. include/rerun/blueprint/archetypes/tensor_slice_selection.hpp +167 -0
  244. include/rerun/blueprint/archetypes/tensor_view_fit.hpp +95 -0
  245. include/rerun/blueprint/archetypes/view_blueprint.hpp +170 -0
  246. include/rerun/blueprint/archetypes/view_contents.hpp +142 -0
  247. include/rerun/blueprint/archetypes/viewport_blueprint.hpp +200 -0
  248. include/rerun/blueprint/archetypes/visible_time_ranges.hpp +116 -0
  249. include/rerun/blueprint/archetypes/visual_bounds2d.hpp +109 -0
  250. include/rerun/blueprint/archetypes/visualizer_overrides.hpp +113 -0
  251. include/rerun/blueprint/archetypes.hpp +29 -0
  252. include/rerun/blueprint/components/active_tab.hpp +82 -0
  253. include/rerun/blueprint/components/apply_latest_at.hpp +79 -0
  254. include/rerun/blueprint/components/auto_layout.hpp +77 -0
  255. include/rerun/blueprint/components/auto_views.hpp +77 -0
  256. include/rerun/blueprint/components/background_kind.hpp +66 -0
  257. include/rerun/blueprint/components/column_share.hpp +78 -0
  258. include/rerun/blueprint/components/component_column_selector.hpp +81 -0
  259. include/rerun/blueprint/components/container_kind.hpp +65 -0
  260. include/rerun/blueprint/components/corner2d.hpp +64 -0
  261. include/rerun/blueprint/components/enabled.hpp +77 -0
  262. include/rerun/blueprint/components/filter_by_range.hpp +74 -0
  263. include/rerun/blueprint/components/filter_is_not_null.hpp +77 -0
  264. include/rerun/blueprint/components/force_distance.hpp +82 -0
  265. include/rerun/blueprint/components/force_iterations.hpp +82 -0
  266. include/rerun/blueprint/components/force_strength.hpp +82 -0
  267. include/rerun/blueprint/components/grid_columns.hpp +78 -0
  268. include/rerun/blueprint/components/grid_spacing.hpp +78 -0
  269. include/rerun/blueprint/components/included_content.hpp +86 -0
  270. include/rerun/blueprint/components/lock_range_during_zoom.hpp +82 -0
  271. include/rerun/blueprint/components/map_provider.hpp +64 -0
  272. include/rerun/blueprint/components/near_clip_plane.hpp +82 -0
  273. include/rerun/blueprint/components/panel_state.hpp +61 -0
  274. include/rerun/blueprint/components/query_expression.hpp +89 -0
  275. include/rerun/blueprint/components/root_container.hpp +77 -0
  276. include/rerun/blueprint/components/row_share.hpp +78 -0
  277. include/rerun/blueprint/components/selected_columns.hpp +76 -0
  278. include/rerun/blueprint/components/tensor_dimension_index_slider.hpp +90 -0
  279. include/rerun/blueprint/components/timeline_name.hpp +76 -0
  280. include/rerun/blueprint/components/view_class.hpp +76 -0
  281. include/rerun/blueprint/components/view_fit.hpp +61 -0
  282. include/rerun/blueprint/components/view_maximized.hpp +79 -0
  283. include/rerun/blueprint/components/view_origin.hpp +81 -0
  284. include/rerun/blueprint/components/viewer_recommendation_hash.hpp +82 -0
  285. include/rerun/blueprint/components/visible_time_range.hpp +77 -0
  286. include/rerun/blueprint/components/visual_bounds2d.hpp +74 -0
  287. include/rerun/blueprint/components/visualizer_override.hpp +86 -0
  288. include/rerun/blueprint/components/zoom_level.hpp +78 -0
  289. include/rerun/blueprint/components.hpp +41 -0
  290. include/rerun/blueprint/datatypes/component_column_selector.hpp +61 -0
  291. include/rerun/blueprint/datatypes/filter_by_range.hpp +59 -0
  292. include/rerun/blueprint/datatypes/filter_is_not_null.hpp +61 -0
  293. include/rerun/blueprint/datatypes/selected_columns.hpp +62 -0
  294. include/rerun/blueprint/datatypes/tensor_dimension_index_slider.hpp +63 -0
  295. include/rerun/blueprint/datatypes.hpp +9 -0
  296. include/rerun/c/arrow_c_data_interface.h +111 -0
  297. include/rerun/c/compiler_utils.h +10 -0
  298. include/rerun/c/rerun.h +627 -0
  299. include/rerun/c/sdk_info.h +28 -0
  300. include/rerun/collection.hpp +496 -0
  301. include/rerun/collection_adapter.hpp +43 -0
  302. include/rerun/collection_adapter_builtins.hpp +138 -0
  303. include/rerun/compiler_utils.hpp +61 -0
  304. include/rerun/component_batch.hpp +163 -0
  305. include/rerun/component_column.hpp +111 -0
  306. include/rerun/component_descriptor.hpp +142 -0
  307. include/rerun/component_type.hpp +35 -0
  308. include/rerun/components/aggregation_policy.hpp +76 -0
  309. include/rerun/components/albedo_factor.hpp +74 -0
  310. include/rerun/components/annotation_context.hpp +102 -0
  311. include/rerun/components/axis_length.hpp +74 -0
  312. include/rerun/components/blob.hpp +73 -0
  313. include/rerun/components/class_id.hpp +71 -0
  314. include/rerun/components/clear_is_recursive.hpp +75 -0
  315. include/rerun/components/color.hpp +99 -0
  316. include/rerun/components/colormap.hpp +99 -0
  317. include/rerun/components/depth_meter.hpp +84 -0
  318. include/rerun/components/draw_order.hpp +79 -0
  319. include/rerun/components/entity_path.hpp +83 -0
  320. include/rerun/components/fill_mode.hpp +72 -0
  321. include/rerun/components/fill_ratio.hpp +79 -0
  322. include/rerun/components/gamma_correction.hpp +80 -0
  323. include/rerun/components/geo_line_string.hpp +63 -0
  324. include/rerun/components/graph_edge.hpp +75 -0
  325. include/rerun/components/graph_node.hpp +79 -0
  326. include/rerun/components/graph_type.hpp +57 -0
  327. include/rerun/components/half_size2d.hpp +91 -0
  328. include/rerun/components/half_size3d.hpp +95 -0
  329. include/rerun/components/image_buffer.hpp +86 -0
  330. include/rerun/components/image_format.hpp +84 -0
  331. include/rerun/components/image_plane_distance.hpp +77 -0
  332. include/rerun/components/interactive.hpp +76 -0
  333. include/rerun/components/keypoint_id.hpp +74 -0
  334. include/rerun/components/lat_lon.hpp +89 -0
  335. include/rerun/components/length.hpp +77 -0
  336. include/rerun/components/line_strip2d.hpp +73 -0
  337. include/rerun/components/line_strip3d.hpp +73 -0
  338. include/rerun/components/magnification_filter.hpp +63 -0
  339. include/rerun/components/marker_shape.hpp +82 -0
  340. include/rerun/components/marker_size.hpp +74 -0
  341. include/rerun/components/media_type.hpp +157 -0
  342. include/rerun/components/name.hpp +83 -0
  343. include/rerun/components/opacity.hpp +77 -0
  344. include/rerun/components/pinhole_projection.hpp +94 -0
  345. include/rerun/components/plane3d.hpp +75 -0
  346. include/rerun/components/pose_rotation_axis_angle.hpp +73 -0
  347. include/rerun/components/pose_rotation_quat.hpp +71 -0
  348. include/rerun/components/pose_scale3d.hpp +102 -0
  349. include/rerun/components/pose_transform_mat3x3.hpp +87 -0
  350. include/rerun/components/pose_translation3d.hpp +96 -0
  351. include/rerun/components/position2d.hpp +86 -0
  352. include/rerun/components/position3d.hpp +90 -0
  353. include/rerun/components/radius.hpp +98 -0
  354. include/rerun/components/range1d.hpp +75 -0
  355. include/rerun/components/resolution.hpp +88 -0
  356. include/rerun/components/rotation_axis_angle.hpp +72 -0
  357. include/rerun/components/rotation_quat.hpp +71 -0
  358. include/rerun/components/scalar.hpp +76 -0
  359. include/rerun/components/scale3d.hpp +102 -0
  360. include/rerun/components/series_visible.hpp +76 -0
  361. include/rerun/components/show_labels.hpp +79 -0
  362. include/rerun/components/stroke_width.hpp +74 -0
  363. include/rerun/components/tensor_data.hpp +94 -0
  364. include/rerun/components/tensor_dimension_index_selection.hpp +77 -0
  365. include/rerun/components/tensor_height_dimension.hpp +71 -0
  366. include/rerun/components/tensor_width_dimension.hpp +71 -0
  367. include/rerun/components/texcoord2d.hpp +101 -0
  368. include/rerun/components/text.hpp +83 -0
  369. include/rerun/components/text_log_level.hpp +110 -0
  370. include/rerun/components/timestamp.hpp +76 -0
  371. include/rerun/components/transform_mat3x3.hpp +92 -0
  372. include/rerun/components/transform_relation.hpp +66 -0
  373. include/rerun/components/translation3d.hpp +96 -0
  374. include/rerun/components/triangle_indices.hpp +85 -0
  375. include/rerun/components/value_range.hpp +78 -0
  376. include/rerun/components/vector2d.hpp +92 -0
  377. include/rerun/components/vector3d.hpp +96 -0
  378. include/rerun/components/video_timestamp.hpp +120 -0
  379. include/rerun/components/view_coordinates.hpp +346 -0
  380. include/rerun/components/visible.hpp +74 -0
  381. include/rerun/components.hpp +77 -0
  382. include/rerun/config.hpp +52 -0
  383. include/rerun/datatypes/angle.hpp +76 -0
  384. include/rerun/datatypes/annotation_info.hpp +76 -0
  385. include/rerun/datatypes/blob.hpp +67 -0
  386. include/rerun/datatypes/bool.hpp +57 -0
  387. include/rerun/datatypes/channel_datatype.hpp +87 -0
  388. include/rerun/datatypes/class_description.hpp +92 -0
  389. include/rerun/datatypes/class_description_map_elem.hpp +69 -0
  390. include/rerun/datatypes/class_id.hpp +62 -0
  391. include/rerun/datatypes/color_model.hpp +68 -0
  392. include/rerun/datatypes/dvec2d.hpp +76 -0
  393. include/rerun/datatypes/entity_path.hpp +60 -0
  394. include/rerun/datatypes/float32.hpp +62 -0
  395. include/rerun/datatypes/float64.hpp +62 -0
  396. include/rerun/datatypes/image_format.hpp +107 -0
  397. include/rerun/datatypes/keypoint_id.hpp +63 -0
  398. include/rerun/datatypes/keypoint_pair.hpp +65 -0
  399. include/rerun/datatypes/mat3x3.hpp +105 -0
  400. include/rerun/datatypes/mat4x4.hpp +119 -0
  401. include/rerun/datatypes/pixel_format.hpp +142 -0
  402. include/rerun/datatypes/plane3d.hpp +60 -0
  403. include/rerun/datatypes/quaternion.hpp +110 -0
  404. include/rerun/datatypes/range1d.hpp +59 -0
  405. include/rerun/datatypes/range2d.hpp +55 -0
  406. include/rerun/datatypes/rgba32.hpp +94 -0
  407. include/rerun/datatypes/rotation_axis_angle.hpp +67 -0
  408. include/rerun/datatypes/tensor_buffer.hpp +529 -0
  409. include/rerun/datatypes/tensor_data.hpp +100 -0
  410. include/rerun/datatypes/tensor_dimension_index_selection.hpp +58 -0
  411. include/rerun/datatypes/tensor_dimension_selection.hpp +56 -0
  412. include/rerun/datatypes/time_int.hpp +62 -0
  413. include/rerun/datatypes/time_range.hpp +55 -0
  414. include/rerun/datatypes/time_range_boundary.hpp +175 -0
  415. include/rerun/datatypes/uint16.hpp +62 -0
  416. include/rerun/datatypes/uint32.hpp +62 -0
  417. include/rerun/datatypes/uint64.hpp +62 -0
  418. include/rerun/datatypes/utf8.hpp +76 -0
  419. include/rerun/datatypes/utf8pair.hpp +62 -0
  420. include/rerun/datatypes/uuid.hpp +60 -0
  421. include/rerun/datatypes/uvec2d.hpp +76 -0
  422. include/rerun/datatypes/uvec3d.hpp +80 -0
  423. include/rerun/datatypes/uvec4d.hpp +59 -0
  424. include/rerun/datatypes/vec2d.hpp +76 -0
  425. include/rerun/datatypes/vec3d.hpp +80 -0
  426. include/rerun/datatypes/vec4d.hpp +84 -0
  427. include/rerun/datatypes/video_timestamp.hpp +67 -0
  428. include/rerun/datatypes/view_coordinates.hpp +87 -0
  429. include/rerun/datatypes/visible_time_range.hpp +57 -0
  430. include/rerun/datatypes.hpp +51 -0
  431. include/rerun/demo_utils.hpp +75 -0
  432. include/rerun/entity_path.hpp +20 -0
  433. include/rerun/error.hpp +180 -0
  434. include/rerun/half.hpp +10 -0
  435. include/rerun/image_utils.hpp +187 -0
  436. include/rerun/indicator_component.hpp +59 -0
  437. include/rerun/loggable.hpp +54 -0
  438. include/rerun/recording_stream.hpp +960 -0
  439. include/rerun/rerun_sdk_export.hpp +25 -0
  440. include/rerun/result.hpp +86 -0
  441. include/rerun/rotation3d.hpp +33 -0
  442. include/rerun/sdk_info.hpp +20 -0
  443. include/rerun/spawn.hpp +21 -0
  444. include/rerun/spawn_options.hpp +57 -0
  445. include/rerun/string_utils.hpp +16 -0
  446. include/rerun/third_party/cxxopts.hpp +2198 -0
  447. include/rerun/time_column.hpp +288 -0
  448. include/rerun/timeline.hpp +38 -0
  449. include/rerun/type_traits.hpp +40 -0
  450. include/rerun.hpp +86 -0
  451. lib/cmake/rerun_sdk/rerun_sdkConfig.cmake +70 -0
  452. lib/cmake/rerun_sdk/rerun_sdkConfigVersion.cmake +83 -0
  453. lib/cmake/rerun_sdk/rerun_sdkTargets-release.cmake +19 -0
  454. lib/cmake/rerun_sdk/rerun_sdkTargets.cmake +108 -0
  455. lib/libarrow.a +0 -0
  456. lib/libarrow_bundled_dependencies.a +0 -0
  457. lib/librerun_c__linux_x64.a +0 -0
  458. lib/librerun_sdk.a +0 -0
  459. lib64/cmake/axel/axel-config.cmake +45 -0
  460. lib64/cmake/axel/axelTargets-release.cmake +19 -0
  461. lib64/cmake/axel/axelTargets.cmake +108 -0
  462. lib64/cmake/momentum/Findre2.cmake +52 -0
  463. lib64/cmake/momentum/momentum-config.cmake +67 -0
  464. lib64/cmake/momentum/momentumTargets-release.cmake +269 -0
  465. lib64/cmake/momentum/momentumTargets.cmake +445 -0
  466. lib64/libaxel.a +0 -0
  467. lib64/libmomentum_app_utils.a +0 -0
  468. lib64/libmomentum_character.a +0 -0
  469. lib64/libmomentum_character_sequence_solver.a +0 -0
  470. lib64/libmomentum_character_solver.a +0 -0
  471. lib64/libmomentum_common.a +0 -0
  472. lib64/libmomentum_diff_ik.a +0 -0
  473. lib64/libmomentum_io.a +0 -0
  474. lib64/libmomentum_io_common.a +0 -0
  475. lib64/libmomentum_io_fbx.a +0 -0
  476. lib64/libmomentum_io_gltf.a +0 -0
  477. lib64/libmomentum_io_legacy_json.a +0 -0
  478. lib64/libmomentum_io_marker.a +0 -0
  479. lib64/libmomentum_io_motion.a +0 -0
  480. lib64/libmomentum_io_shape.a +0 -0
  481. lib64/libmomentum_io_skeleton.a +0 -0
  482. lib64/libmomentum_io_urdf.a +0 -0
  483. lib64/libmomentum_marker_tracker.a +0 -0
  484. lib64/libmomentum_math.a +0 -0
  485. lib64/libmomentum_online_qr.a +0 -0
  486. lib64/libmomentum_process_markers.a +0 -0
  487. lib64/libmomentum_rasterizer.a +0 -0
  488. lib64/libmomentum_rerun.a +0 -0
  489. lib64/libmomentum_simd_constraints.a +0 -0
  490. lib64/libmomentum_simd_generalized_loss.a +0 -0
  491. lib64/libmomentum_skeleton.a +0 -0
  492. lib64/libmomentum_solver.a +0 -0
  493. pymomentum/axel.cpython-312-x86_64-linux-gnu.so +0 -0
  494. pymomentum/backend/__init__.py +16 -0
  495. pymomentum/backend/skel_state_backend.py +614 -0
  496. pymomentum/backend/trs_backend.py +871 -0
  497. pymomentum/backend/utils.py +224 -0
  498. pymomentum/geometry.cpython-312-x86_64-linux-gnu.so +0 -0
  499. pymomentum/marker_tracking.cpython-312-x86_64-linux-gnu.so +0 -0
  500. pymomentum/quaternion.py +740 -0
  501. pymomentum/renderer.cpython-312-x86_64-linux-gnu.so +0 -0
  502. pymomentum/skel_state.py +514 -0
  503. pymomentum/solver.cpython-312-x86_64-linux-gnu.so +0 -0
  504. pymomentum/solver2.cpython-312-x86_64-linux-gnu.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.0.0.dist-info/METADATA +209 -0
  510. pymomentum_cpu-0.0.0.dist-info/RECORD +555 -0
  511. pymomentum_cpu-0.0.0.dist-info/WHEEL +5 -0
  512. pymomentum_cpu-0.0.0.dist-info/licenses/LICENSE +21 -0
  513. pymomentum_cpu.libs/libabsl_base-86f3b38c.so.2505.0.0 +0 -0
  514. pymomentum_cpu.libs/libabsl_city-31b65ca2.so.2505.0.0 +0 -0
  515. pymomentum_cpu.libs/libabsl_debugging_internal-38680253.so.2505.0.0 +0 -0
  516. pymomentum_cpu.libs/libabsl_decode_rust_punycode-750652c3.so.2505.0.0 +0 -0
  517. pymomentum_cpu.libs/libabsl_demangle_internal-9a0351a3.so.2505.0.0 +0 -0
  518. pymomentum_cpu.libs/libabsl_demangle_rust-71629506.so.2505.0.0 +0 -0
  519. pymomentum_cpu.libs/libabsl_examine_stack-57661ecd.so.2505.0.0 +0 -0
  520. pymomentum_cpu.libs/libabsl_hash-8c523b7e.so.2505.0.0 +0 -0
  521. pymomentum_cpu.libs/libabsl_hashtablez_sampler-b5c3e343.so.2505.0.0 +0 -0
  522. pymomentum_cpu.libs/libabsl_int128-295bfed5.so.2505.0.0 +0 -0
  523. pymomentum_cpu.libs/libabsl_kernel_timeout_internal-29296ac1.so.2505.0.0 +0 -0
  524. pymomentum_cpu.libs/libabsl_log_globals-6cfa8af5.so.2505.0.0 +0 -0
  525. pymomentum_cpu.libs/libabsl_log_internal_format-a5c79460.so.2505.0.0 +0 -0
  526. pymomentum_cpu.libs/libabsl_log_internal_globals-481e9a7c.so.2505.0.0 +0 -0
  527. pymomentum_cpu.libs/libabsl_log_internal_log_sink_set-ac08f942.so.2505.0.0 +0 -0
  528. pymomentum_cpu.libs/libabsl_log_internal_message-7dfe150a.so.2505.0.0 +0 -0
  529. pymomentum_cpu.libs/libabsl_log_internal_nullguard-883adc72.so.2505.0.0 +0 -0
  530. pymomentum_cpu.libs/libabsl_log_internal_proto-a5da8c75.so.2505.0.0 +0 -0
  531. pymomentum_cpu.libs/libabsl_log_internal_structured_proto-e601fd9b.so.2505.0.0 +0 -0
  532. pymomentum_cpu.libs/libabsl_log_sink-894261b2.so.2505.0.0 +0 -0
  533. pymomentum_cpu.libs/libabsl_low_level_hash-a3284638.so.2505.0.0 +0 -0
  534. pymomentum_cpu.libs/libabsl_malloc_internal-814569de.so.2505.0.0 +0 -0
  535. pymomentum_cpu.libs/libabsl_raw_hash_set-922d64ad.so.2505.0.0 +0 -0
  536. pymomentum_cpu.libs/libabsl_raw_logging_internal-477f78ec.so.2505.0.0 +0 -0
  537. pymomentum_cpu.libs/libabsl_spinlock_wait-8b85a473.so.2505.0.0 +0 -0
  538. pymomentum_cpu.libs/libabsl_stacktrace-7369e71d.so.2505.0.0 +0 -0
  539. pymomentum_cpu.libs/libabsl_str_format_internal-98de729d.so.2505.0.0 +0 -0
  540. pymomentum_cpu.libs/libabsl_strerror-39a52998.so.2505.0.0 +0 -0
  541. pymomentum_cpu.libs/libabsl_strings-a57d5127.so.2505.0.0 +0 -0
  542. pymomentum_cpu.libs/libabsl_strings_internal-ed8c7c0d.so.2505.0.0 +0 -0
  543. pymomentum_cpu.libs/libabsl_symbolize-eba17dd1.so.2505.0.0 +0 -0
  544. pymomentum_cpu.libs/libabsl_synchronization-2f8cf326.so.2505.0.0 +0 -0
  545. pymomentum_cpu.libs/libabsl_time-066c0dde.so.2505.0.0 +0 -0
  546. pymomentum_cpu.libs/libabsl_time_zone-72867365.so.2505.0.0 +0 -0
  547. pymomentum_cpu.libs/libabsl_tracing_internal-021e37ee.so.2505.0.0 +0 -0
  548. pymomentum_cpu.libs/libabsl_utf8_for_code_point-de2a4d4a.so.2505.0.0 +0 -0
  549. pymomentum_cpu.libs/libconsole_bridge-f26e11cc.so.1.0 +0 -0
  550. pymomentum_cpu.libs/libdeflate-577b71e3.so.0 +0 -0
  551. pymomentum_cpu.libs/libdispenso-67ac1721.so.1.4.0 +0 -0
  552. pymomentum_cpu.libs/libezc3d-4a95ab2c.so +0 -0
  553. pymomentum_cpu.libs/libre2-985fb83c.so.11 +0 -0
  554. pymomentum_cpu.libs/libtinyxml2-8d10763c.so.11.0.0 +0 -0
  555. pymomentum_cpu.libs/liburdfdom_model-7b26ae88.so.4.0 +0 -0
@@ -0,0 +1,321 @@
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
+ MT_PROFILE_FUNCTION();
36
+
37
+ // loop over all constraints and calculate the error
38
+ FuncType f;
39
+ double error = 0.0;
40
+ for (size_t iConstr = 0; iConstr < constraints_.size(); ++iConstr) {
41
+ const Data& constr = constraints_[iConstr];
42
+ if (constr.weight != 0) {
43
+ evalFunction(iConstr, state.jointState.at(constr.parent), f);
44
+ error += constr.weight * loss_.value(f.squaredNorm());
45
+ }
46
+ }
47
+ return this->weight_ * error;
48
+ }
49
+
50
+ template <typename T, class Data, size_t FuncDim, size_t NumVec, size_t NumPos>
51
+ double ConstraintErrorFunctionT<T, Data, FuncDim, NumVec, NumPos>::getJacobianForSingleConstraint(
52
+ const JointStateListT<T>& jointStates,
53
+ const size_t iConstr,
54
+ Ref<Eigen::MatrixX<T>> jacobian,
55
+ Ref<Eigen::VectorX<T>> residual) {
56
+ const Data& constr = this->constraints_[iConstr];
57
+ if (constr.weight == 0) {
58
+ return 0;
59
+ }
60
+
61
+ FuncType f;
62
+ std::array<VType, NumVec> v;
63
+ std::array<DfdvType, NumVec> dfdv;
64
+ evalFunction(iConstr, jointStates.at(constr.parent), f, v, dfdv);
65
+ const T sqrError = f.squaredNorm();
66
+ const T w = constr.weight * this->weight_;
67
+ const double error = w * this->loss_.value(sqrError);
68
+ const T deriv = std::sqrt(w * this->loss_.deriv(sqrError));
69
+
70
+ // The input jacobian is a subblock from the full jacobian tailored for this error function, so
71
+ // the rows start from zero.
72
+ const size_t rowIndex = FuncDim * iConstr;
73
+ // The gradient of the loss function needs to be split between J and r, so both J'J and
74
+ // J'r are scaled correctly. The factor 2 from the square term is accounted for in the base
75
+ // class function.
76
+ residual.template middleRows<FuncDim>(rowIndex).noalias() = deriv * f;
77
+
78
+ // Small optimization for early termination
79
+ if (isApprox<T>(deriv, T(0), Eps<T>(1e-9, 1e-16))) {
80
+ return error;
81
+ }
82
+ const bool zeroDeriv =
83
+ !std::any_of(dfdv.begin(), dfdv.end(), [](const auto& vec) { return !vec.isZero(); });
84
+ if (zeroDeriv) {
85
+ return error;
86
+ }
87
+
88
+ // shorthands for code readability
89
+ const auto outerIndexPtr = this->parameterTransform_.transform.outerIndexPtr();
90
+ const auto innerIndexPtr = this->parameterTransform_.transform.innerIndexPtr();
91
+ const auto valuePtr = this->parameterTransform_.transform.valuePtr();
92
+ auto&& jac = jacobian.template middleRows<FuncDim>(rowIndex);
93
+
94
+ // Fill in the jacobian by walking up the joint hierarchy for each constraint.
95
+ // Need to consider both active joints and enabled model parameters.
96
+ size_t jntIndex = constr.parent;
97
+ while (jntIndex != kInvalidIndex) {
98
+ // check for valid index
99
+ MT_CHECK(jntIndex < this->skeleton_.joints.size());
100
+
101
+ const auto& jntState = jointStates[jntIndex];
102
+ const size_t jntParamIndex = jntIndex * kParametersPerJoint;
103
+
104
+ for (size_t jVec = 0; jVec < NumVec; ++jVec) {
105
+ if (dfdv[jVec].isZero()) {
106
+ continue;
107
+ }
108
+
109
+ Eigen::Vector3<T> offset;
110
+ if (jVec < NumPos) {
111
+ offset.noalias() = v[jVec] - jntState.translation();
112
+ } else {
113
+ offset = v[jVec];
114
+ }
115
+
116
+ // Translational dofs -- only affect POINT
117
+ if (jVec < NumPos) {
118
+ for (size_t d = 0; d < 3; ++d) {
119
+ if (!this->activeJointParams_[jntParamIndex + d]) {
120
+ continue;
121
+ }
122
+
123
+ const FuncType jc = deriv * dfdv[jVec] * jntState.getTranslationDerivative(d);
124
+ for (auto index = outerIndexPtr[jntParamIndex + d];
125
+ index < outerIndexPtr[jntParamIndex + d + 1];
126
+ ++index) {
127
+ if (this->enabledParameters_.test(innerIndexPtr[index])) {
128
+ jac.col(innerIndexPtr[index]).noalias() += jc * valuePtr[index];
129
+ }
130
+ }
131
+ }
132
+ }
133
+
134
+ // Rotational dofs -- affect both POINT and AXIS
135
+ for (size_t d = 0; d < 3; ++d) {
136
+ if (!this->activeJointParams_[jntParamIndex + 3 + d]) {
137
+ continue;
138
+ }
139
+
140
+ const FuncType jc = deriv * dfdv[jVec] * jntState.getRotationDerivative(d, offset);
141
+ for (auto index = outerIndexPtr[jntParamIndex + 3 + d];
142
+ index < outerIndexPtr[jntParamIndex + 3 + d + 1];
143
+ ++index) {
144
+ if (this->enabledParameters_.test(innerIndexPtr[index])) {
145
+ jac.col(innerIndexPtr[index]).noalias() += jc * valuePtr[index];
146
+ }
147
+ }
148
+ }
149
+
150
+ // Scale dof -- only affect POINT
151
+ if (jVec < NumPos) {
152
+ if (this->activeJointParams_[jntParamIndex + 6]) {
153
+ const FuncType jc = deriv * dfdv[jVec] * jntState.getScaleDerivative(offset);
154
+ for (auto index = outerIndexPtr[jntParamIndex + 6];
155
+ index < outerIndexPtr[jntParamIndex + 6 + 1];
156
+ ++index) {
157
+ if (this->enabledParameters_.test(innerIndexPtr[index])) {
158
+ jac.col(innerIndexPtr[index]).noalias() += jc * valuePtr[index];
159
+ }
160
+ }
161
+ }
162
+ }
163
+ }
164
+ // go up the hierarchy to the parent
165
+ jntIndex = this->skeleton_.joints[jntIndex].parent;
166
+ }
167
+
168
+ return error;
169
+ }
170
+
171
+ template <typename T, class Data, size_t FuncDim, size_t NumVec, size_t NumPos>
172
+ double ConstraintErrorFunctionT<T, Data, FuncDim, NumVec, NumPos>::getJacobian(
173
+ const ModelParametersT<T>& /*params*/,
174
+ const SkeletonStateT<T>& state,
175
+ Ref<Eigen::MatrixX<T>> jacobian,
176
+ Ref<Eigen::VectorX<T>> residual,
177
+ int& usedRows) {
178
+ MT_PROFILE_FUNCTION();
179
+ usedRows = getJacobianSize();
180
+
181
+ double error = 0.0;
182
+ for (size_t iConstr = 0; iConstr < this->constraints_.size(); ++iConstr) {
183
+ error += getJacobianForSingleConstraint(state.jointState, iConstr, jacobian, residual);
184
+ }
185
+ return error;
186
+ }
187
+
188
+ template <typename T, class Data, size_t FuncDim, size_t NumVec, size_t NumPos>
189
+ double ConstraintErrorFunctionT<T, Data, FuncDim, NumVec, NumPos>::getGradientForSingleConstraint(
190
+ const JointStateListT<T>& jointStates,
191
+ size_t iConstr,
192
+ Ref<VectorX<T>> /*gradient*/) {
193
+ const Data& constr = this->constraints_[iConstr];
194
+ if (constr.weight == 0) {
195
+ return 0;
196
+ }
197
+
198
+ FuncType f;
199
+ std::array<VType, NumVec> v;
200
+ std::array<DfdvType, NumVec> dfdv;
201
+ evalFunction(iConstr, jointStates.at(constr.parent), f, v, dfdv);
202
+ if (f.isZero()) {
203
+ return 0;
204
+ }
205
+
206
+ const T sqrError = f.squaredNorm();
207
+ const T w = constr.weight * this->weight_;
208
+ const double error = w * this->loss_.value(sqrError);
209
+ // The gradient is scaled by the gradient of the loss function; factor 2 falls out of the
210
+ // square.
211
+ const FuncType deriv = T(2) * w * this->loss_.deriv(sqrError) * f;
212
+
213
+ const auto outerIndexPtr = this->parameterTransform_.transform.outerIndexPtr();
214
+ const auto innerIndexPtr = this->parameterTransform_.transform.innerIndexPtr();
215
+ const auto valuePtr = this->parameterTransform_.transform.valuePtr();
216
+ size_t jntIndex = constr.parent;
217
+ while (jntIndex != kInvalidIndex) {
218
+ // check for valid index
219
+ MT_CHECK(jntIndex < this->skeleton_.joints.size());
220
+
221
+ const auto& jntState = jointStates[jntIndex];
222
+ const size_t jntParamIndex = jntIndex * kParametersPerJoint;
223
+
224
+ for (size_t jVec = 0; jVec < NumVec; ++jVec) {
225
+ if (dfdv[jVec].isZero()) {
226
+ continue;
227
+ }
228
+
229
+ Eigen::Vector3<T> offset;
230
+ if (jVec < NumPos) {
231
+ offset.noalias() = v[jVec] - jntState.translation();
232
+ } else {
233
+ offset = v[jVec];
234
+ }
235
+
236
+ // Translational dofs -- only affect POINT
237
+ if (jVec < NumPos) {
238
+ for (size_t d = 0; d < 3; d++) {
239
+ if (!this->activeJointParams_[jntParamIndex + d]) {
240
+ continue;
241
+ }
242
+
243
+ // joint space gradient
244
+ const T val = deriv.dot(dfdv[jVec] * jntState.getTranslationDerivative(d));
245
+ // multiply with parameter transform to get model parameter gradient
246
+ for (auto index = outerIndexPtr[jntParamIndex + d];
247
+ index < outerIndexPtr[jntParamIndex + d + 1];
248
+ ++index) {
249
+ if (this->enabledParameters_.test(innerIndexPtr[index])) {
250
+ jointGrad_[innerIndexPtr[index]] += val * valuePtr[index];
251
+ }
252
+ }
253
+ }
254
+ }
255
+
256
+ // Rotational dofs -- affect both POINT and AXIS
257
+ for (size_t d = 0; d < 3; d++) {
258
+ if (!this->activeJointParams_[jntParamIndex + 3 + d]) {
259
+ continue;
260
+ }
261
+
262
+ // joint space gradient
263
+ const T val = deriv.dot(dfdv[jVec] * jntState.getRotationDerivative(d, offset));
264
+ // multiply with parameter transform to get model parameter gradient
265
+ for (auto index = outerIndexPtr[jntParamIndex + 3 + d];
266
+ index < outerIndexPtr[jntParamIndex + 3 + d + 1];
267
+ ++index) {
268
+ if (this->enabledParameters_.test(innerIndexPtr[index])) {
269
+ jointGrad_[innerIndexPtr[index]] += val * valuePtr[index];
270
+ }
271
+ }
272
+ }
273
+
274
+ // Scale dof -- only affect POINT
275
+ if (jVec < NumPos) {
276
+ if (this->activeJointParams_[jntParamIndex + 6]) {
277
+ // joint space gradient
278
+ const T val = deriv.dot(dfdv[jVec] * jntState.getScaleDerivative(offset));
279
+ // multiply with parameter transform to get model parameter gradient
280
+ for (auto index = outerIndexPtr[jntParamIndex + 6];
281
+ index < outerIndexPtr[jntParamIndex + 6 + 1];
282
+ ++index) {
283
+ if (this->enabledParameters_.test(innerIndexPtr[index])) {
284
+ jointGrad_[innerIndexPtr[index]] += val * valuePtr[index];
285
+ }
286
+ }
287
+ }
288
+ }
289
+ }
290
+ // go up the skeleton hierarchy to the parent joint
291
+ jntIndex = this->skeleton_.joints[jntIndex].parent;
292
+ }
293
+
294
+ return error;
295
+ }
296
+
297
+ template <typename T, class Data, size_t FuncDim, size_t NumVec, size_t NumPos>
298
+ double ConstraintErrorFunctionT<T, Data, FuncDim, NumVec, NumPos>::getGradient(
299
+ const ModelParametersT<T>& /*unused*/,
300
+ const SkeletonStateT<T>& state,
301
+ Ref<Eigen::VectorX<T>> gradient) {
302
+ MT_PROFILE_FUNCTION();
303
+
304
+ // initialize joint gradients storage
305
+ jointGrad_.setZero();
306
+
307
+ double error = 0.0;
308
+ for (size_t iConstr = 0; iConstr < this->constraints_.size(); ++iConstr) {
309
+ error += getGradientForSingleConstraint(state.jointState, iConstr, gradient);
310
+ }
311
+
312
+ gradient += jointGrad_;
313
+ return error;
314
+ }
315
+
316
+ template <typename T, class Data, size_t FuncDim, size_t NumVec, size_t NumPos>
317
+ size_t ConstraintErrorFunctionT<T, Data, FuncDim, NumVec, NumPos>::getJacobianSize() const {
318
+ return FuncDim * constraints_.size();
319
+ }
320
+
321
+ } // namespace momentum
@@ -0,0 +1,241 @@
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
+ ///
120
+ /// @return the error function value l
121
+ [[nodiscard]] double getError(const ModelParametersT<T>& params, const SkeletonStateT<T>& state)
122
+ final;
123
+
124
+ /// The gradient of the error function: dl/dq = dl/d[f^2] * 2f * df/dv * dv/dq. It gets df/dv from
125
+ /// the derived class, and implements the rest.
126
+ ///
127
+ /// @param[in] params: current model parameters
128
+ /// @param[in] state: curren global skeleton joint states computed from the model parameters
129
+ /// @param[out] gradient: the gradient vector to accumulate into
130
+ ///
131
+ /// @return the error function value l
132
+ double getGradient(
133
+ const ModelParametersT<T>& params,
134
+ const SkeletonStateT<T>& state,
135
+ Ref<VectorX<T>> gradient) final;
136
+
137
+ /// For least-square problems, we assume l is the square of a vector function F. The jacobian is
138
+ /// then dF/dq. (A factor 2 is implemented in the solver.) With l2 loss, we have F = sqrt(w) * f,
139
+ /// and the jacobian is sqrt(w) * df/dv * dv/dq. With the generalized loss, the jacobian becomes
140
+ /// sqrt(w * d[loss]/d[f^2]) * df/dv * dv/dq. It gets df/dv from the derived class, and implements
141
+ /// the rest.
142
+ ///
143
+ /// @param[in] params: current model parameters
144
+ /// @param[in] state: curren global skeleton joint states computed from the model parameters
145
+ /// @param[out] jacobian: the output jacobian matrix
146
+ /// @param[out] residual: the output function residual (ie. f scaled by the loss gradient)
147
+ /// @param[out] usedRows: number of rows in the jacobian/residual used by this error function
148
+ ///
149
+ /// @return the error function l
150
+ double getJacobian(
151
+ const ModelParametersT<T>& params,
152
+ const SkeletonStateT<T>& state,
153
+ Ref<MatrixX<T>> jacobian,
154
+ Ref<VectorX<T>> residual,
155
+ int& usedRows) final;
156
+
157
+ /// The number of rows in the jacobian is the dimension of f, FuncDim, times the number of
158
+ /// constraints.
159
+ ///
160
+ /// @return number of rows in the jacobian
161
+ [[nodiscard]] size_t getJacobianSize() const final;
162
+
163
+ /// Adds a constraint to the list
164
+ ///
165
+ /// @param[in] constr: the constraint to be added
166
+ void addConstraint(const Data& constr) {
167
+ constraints_.push_back(constr);
168
+ }
169
+
170
+ /// Appends a list of constraints
171
+ ///
172
+ /// @param[in] constrs: a list of constraints to be added
173
+ void addConstraints(gsl::span<const Data> constrs) {
174
+ constraints_.insert(constraints_.end(), constrs.begin(), constrs.end());
175
+ }
176
+
177
+ /// Replace the current list of constraints with the input
178
+ ///
179
+ /// @param[in] constrs: the new list of constraints
180
+ void setConstraints(gsl::span<const Data> constrs) {
181
+ constraints_.assign(constrs.begin(), constrs.end());
182
+ }
183
+
184
+ /// @return the current list of constraints immutable
185
+ [[nodiscard]] const std::vector<Data>& getConstraints() const {
186
+ return constraints_;
187
+ }
188
+
189
+ [[nodiscard]] size_t numConstraints() const {
190
+ return constraints_.size();
191
+ }
192
+
193
+ /// Clear the current list of constraints
194
+ void clearConstraints() {
195
+ constraints_.clear();
196
+ }
197
+
198
+ protected:
199
+ /// List of constraints
200
+ std::vector<Data> constraints_;
201
+ /// The generalized loss function that transforms f^2
202
+ const GeneralizedLossT<T> loss_;
203
+ /// Intermediate storage of the gradient from this error function. We can allocate the space in
204
+ /// the constructor to save some dynamic allocation.
205
+ VectorX<T> jointGrad_;
206
+
207
+ /// The only function a derived class needs to implement.
208
+ /// f is needed both for errors and derivatives, v and dfdv are needed only for computing
209
+ /// derivatives, and therefore optional. An implementation should check if they are provided
210
+ /// before computing and setting their values. And don't assume they are zero-initialized. Each
211
+ /// returned v and df/dv corresponds to a source 3-vector (eg. a position constraint, or each of
212
+ /// the three axis of a rotation constraint).
213
+ ///
214
+ /// @param[in] constrIndex: index of the constraint to evaluate
215
+ /// @param[in] state: JointState of the parent joint with transformation T
216
+ /// @param[out] f: output the value of f of dimension FuncDim
217
+ /// @param[out] v: if valid, output the vector v=T*source; there could be NumVec of vs
218
+ /// @param[out] dfdv: if valid, output the matrix df/dv of dimension FuncDim x 3 per v
219
+ virtual void evalFunction(
220
+ size_t constrIndex,
221
+ const JointStateT<T>& state,
222
+ FuncType& f,
223
+ optional_ref<std::array<VType, NumVec>> v = {},
224
+ optional_ref<std::array<DfdvType, NumVec>> dfdv = {}) const = 0;
225
+
226
+ private:
227
+ double getJacobianForSingleConstraint(
228
+ const JointStateListT<T>& jointStates,
229
+ size_t iConstr,
230
+ Ref<Eigen::MatrixX<T>> jacobian,
231
+ Ref<Eigen::VectorX<T>> residual);
232
+
233
+ double getGradientForSingleConstraint(
234
+ const JointStateListT<T>& jointStates,
235
+ size_t iConstr,
236
+ Ref<VectorX<T>> gradient);
237
+ };
238
+
239
+ } // namespace momentum
240
+
241
+ #include "momentum/character_solver/constraint_error_function-inl.h"
@@ -0,0 +1,74 @@
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) final;
35
+ double getGradient(
36
+ const momentum::ModelParametersT<T>& params,
37
+ const momentum::SkeletonStateT<T>& state,
38
+ Eigen::Ref<Eigen::VectorX<T>> gradient) final;
39
+ double getJacobian(
40
+ const momentum::ModelParametersT<T>& params,
41
+ const momentum::SkeletonStateT<T>& state,
42
+ Eigen::Ref<Eigen::MatrixX<T>> jacobian,
43
+ Eigen::Ref<Eigen::VectorX<T>> residual,
44
+ int& usedRows) final;
45
+ [[nodiscard]] size_t getJacobianSize() const final;
46
+
47
+ void addConstraint(const DistanceConstraintDataT<T>& constr) {
48
+ constraints_.push_back(constr);
49
+ }
50
+ void clearConstraints() {
51
+ constraints_.clear();
52
+ }
53
+ void setConstraints(std::vector<DistanceConstraintDataT<T>> constr) {
54
+ constraints_ = std::move(constr);
55
+ }
56
+ [[nodiscard]] bool empty() const {
57
+ return constraints_.empty();
58
+ }
59
+ [[nodiscard]] size_t numConstraints() const {
60
+ return constraints_.size();
61
+ }
62
+
63
+ [[nodiscard]] const std::vector<DistanceConstraintDataT<T>>& getConstraints() const {
64
+ return constraints_;
65
+ }
66
+
67
+ protected:
68
+ // TODO: what should we use here?
69
+ const T kDistanceWeight = 1.0f;
70
+
71
+ std::vector<DistanceConstraintDataT<T>> constraints_;
72
+ };
73
+
74
+ } // namespace momentum