pymomentum-cpu 0.1.82.post0__cp312-cp312-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-312-darwin.so +0 -0
  495. pymomentum/backend/__init__.py +16 -0
  496. pymomentum/backend/skel_state_backend.py +614 -0
  497. pymomentum/backend/trs_backend.py +871 -0
  498. pymomentum/backend/utils.py +224 -0
  499. pymomentum/geometry.cpython-312-darwin.so +0 -0
  500. pymomentum/marker_tracking.cpython-312-darwin.so +0 -0
  501. pymomentum/quaternion.py +740 -0
  502. pymomentum/skel_state.py +514 -0
  503. pymomentum/solver.cpython-312-darwin.so +0 -0
  504. pymomentum/solver2.cpython-312-darwin.so +0 -0
  505. pymomentum/torch/character.py +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,494 @@
1
+ # Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ #
3
+ # This source code is licensed under the MIT license found in the
4
+ # LICENSE file in the root directory of this source tree.
5
+
6
+ from typing import List, Optional
7
+
8
+ import pymomentum.geometry as pym_geometry
9
+ import pymomentum.skel_state as pym_skel_state
10
+ import torch
11
+
12
+ from .utility import _squeeze_joint_params
13
+
14
+ # pyre-strict
15
+
16
+
17
+ class ParameterLimits(torch.nn.Module):
18
+ """Native PyTorch implementation of momentum's LimitErrorFunction, used to
19
+ enforce parameter limits using a soft constraint."""
20
+
21
+ def __init__(
22
+ self,
23
+ parameter_limits: list[pym_geometry.ParameterLimit],
24
+ dtype: torch.dtype = torch.float32,
25
+ ) -> None:
26
+ super().__init__()
27
+
28
+ kLimitWeight: float = 10.0 # https://www.internalfb.com/code/fbsource/arvr/libraries/momentum/character_solver/limit_error_function.h?lines=48
29
+ kPositionWeight: float = 1e-4 # https://www.internalfb.com/code/fbsource/arvr/libraries/momentum/character_solver/limit_error_function.cpp?lines=21
30
+
31
+ minmax_min: list[float] = []
32
+ minmax_max: list[float] = []
33
+ minmax_weight: list[float] = []
34
+ minmax_parameter_index: list[int] = []
35
+
36
+ minmaxjoint_index: list[int] = []
37
+ minmaxjoint_min: list[float] = []
38
+ minmaxjoint_max: list[float] = []
39
+ minmaxjoint_weight: list[float] = []
40
+
41
+ linear_refidx: list[int] = []
42
+ linear_targetidx: list[int] = []
43
+ linear_scale: list[float] = []
44
+ linear_offset: list[float] = []
45
+ linear_weight: list[float] = []
46
+ linear_range_min: list[float | None] = []
47
+ linear_range_max: list[float | None] = []
48
+
49
+ linear_joint_refidx: List[int] = []
50
+ linear_joint_targetidx: List[int] = []
51
+ linear_joint_scale: List[float] = []
52
+ linear_joint_offset: List[float] = []
53
+ linear_joint_weight: List[float] = []
54
+ linear_joint_range_min: List[Optional[float]] = []
55
+ linear_joint_range_max: List[Optional[float]] = []
56
+
57
+ halfplane_param1_idx: list[int] = []
58
+ halfplane_param2_idx: list[int] = []
59
+ halfplane_normal: list[list[float]] = []
60
+ halfplane_offset: list[float] = []
61
+ halfplane_weight: list[float] = []
62
+
63
+ ellipsoid_parent: list[int] = []
64
+ ellipsoid_ellipsoid_parent: list[int] = []
65
+ ellipsoid_offset: list[torch.Tensor] = []
66
+ ellipsoid_ellipsoid: list[torch.Tensor] = []
67
+ ellipsoid_ellipsoid_inv: list[torch.Tensor] = []
68
+ ellipsoid_weight: list[float] = []
69
+
70
+ self.has_minmax: bool = False
71
+ self.has_minmaxjoint: bool = False
72
+ self.has_linear: bool = False
73
+ self.has_linear_joint: bool = False
74
+ self.has_halfplane: bool = False
75
+ self.has_ellipsoid: bool = False
76
+
77
+ for limit in parameter_limits:
78
+ if limit.type == pym_geometry.LimitType.MinMax:
79
+ self.has_minmax = True
80
+ minmax_min.append(limit.data.minmax.min)
81
+ minmax_max.append(limit.data.minmax.max)
82
+ minmax_parameter_index.append(limit.data.minmax.model_parameter_index)
83
+ minmax_weight.append(limit.weight)
84
+ elif limit.type == pym_geometry.LimitType.MinMaxJoint:
85
+ self.has_minmaxjoint = True
86
+ minmaxjoint_index.append(
87
+ limit.data.minmax_joint.joint_index
88
+ * pym_geometry.PARAMETERS_PER_JOINT
89
+ + limit.data.minmax_joint.joint_parameter_index
90
+ )
91
+ minmaxjoint_min.append(limit.data.minmax_joint.min)
92
+ minmaxjoint_max.append(limit.data.minmax_joint.max)
93
+ minmaxjoint_weight.append(limit.weight)
94
+ elif limit.type == pym_geometry.LimitType.MinMaxJointPassive:
95
+ # It appears these limits are not used in error_function.cpp
96
+ pass
97
+ elif limit.type == pym_geometry.LimitType.Linear:
98
+ self.has_linear = True
99
+ linear_refidx.append(limit.data.linear.reference_model_parameter_index)
100
+ linear_targetidx.append(limit.data.linear.target_model_parameter_index)
101
+ linear_scale.append(limit.data.linear.scale)
102
+ linear_offset.append(limit.data.linear.offset)
103
+ linear_weight.append(limit.weight)
104
+ linear_range_min.append(limit.data.linear.range_min)
105
+ linear_range_max.append(limit.data.linear.range_max)
106
+ elif limit.type == pym_geometry.LimitType.LinearJoint:
107
+ self.has_linear_joint = True
108
+ linear_joint_refidx.append(
109
+ limit.data.linear_joint.reference_joint_index
110
+ * pym_geometry.PARAMETERS_PER_JOINT
111
+ + limit.data.linear_joint.reference_joint_parameter
112
+ )
113
+ linear_joint_targetidx.append(
114
+ limit.data.linear_joint.target_joint_index
115
+ * pym_geometry.PARAMETERS_PER_JOINT
116
+ + limit.data.linear_joint.target_joint_parameter
117
+ )
118
+ linear_joint_scale.append(limit.data.linear_joint.scale)
119
+ linear_joint_offset.append(limit.data.linear_joint.offset)
120
+ linear_joint_weight.append(limit.weight)
121
+ linear_joint_range_min.append(limit.data.linear_joint.range_min)
122
+ linear_joint_range_max.append(limit.data.linear_joint.range_max)
123
+ elif limit.type == pym_geometry.LimitType.HalfPlane:
124
+ self.has_halfplane = True
125
+ halfplane_param1_idx.append(limit.data.halfplane.param1_index)
126
+ halfplane_param2_idx.append(limit.data.halfplane.param2_index)
127
+ halfplane_normal.append(limit.data.halfplane.normal.tolist())
128
+ halfplane_offset.append(limit.data.halfplane.offset)
129
+ halfplane_weight.append(limit.weight)
130
+ elif limit.type == pym_geometry.LimitType.Ellipsoid:
131
+ self.has_ellipsoid = True
132
+ ellipsoid_parent.append(limit.data.ellipsoid.parent)
133
+ ellipsoid_ellipsoid_parent.append(limit.data.ellipsoid.ellipsoid_parent)
134
+ ellipsoid_offset.append(
135
+ torch.tensor(limit.data.ellipsoid.offset, dtype=dtype)
136
+ )
137
+ ellipsoid_ellipsoid.append(
138
+ torch.tensor(limit.data.ellipsoid.ellipsoid, dtype=dtype)
139
+ )
140
+ ellipsoid_ellipsoid_inv.append(
141
+ torch.tensor(limit.data.ellipsoid.ellipsoid_inv, dtype=dtype)
142
+ )
143
+ ellipsoid_weight.append(limit.weight)
144
+ pass
145
+
146
+ if self.has_minmax:
147
+ self.register_buffer("minmax_min", torch.tensor(minmax_min, dtype=dtype))
148
+ self.register_buffer("minmax_max", torch.tensor(minmax_max, dtype=dtype))
149
+ self.register_buffer(
150
+ "minmax_weight",
151
+ (kLimitWeight * torch.tensor(minmax_weight, dtype=dtype))
152
+ .sqrt()
153
+ .detach(),
154
+ )
155
+ self.register_buffer(
156
+ "minmax_parameter_index",
157
+ torch.tensor(minmax_parameter_index, dtype=torch.int32),
158
+ )
159
+
160
+ if self.has_minmaxjoint:
161
+ self.register_buffer(
162
+ "minmaxjoint_index",
163
+ torch.tensor(minmaxjoint_index, dtype=torch.int32),
164
+ )
165
+ self.register_buffer(
166
+ "minmaxjoint_min",
167
+ torch.tensor(minmaxjoint_min, dtype=dtype),
168
+ )
169
+ self.register_buffer(
170
+ "minmaxjoint_max",
171
+ torch.tensor(minmaxjoint_max, dtype=dtype),
172
+ )
173
+ self.register_buffer(
174
+ "minmaxjoint_weight",
175
+ (kLimitWeight * torch.tensor(minmaxjoint_weight, dtype=dtype))
176
+ .sqrt()
177
+ .detach(),
178
+ )
179
+
180
+ if self.has_linear:
181
+ self.register_buffer(
182
+ "linear_refidx", torch.tensor(linear_refidx, dtype=torch.int32)
183
+ )
184
+ self.register_buffer(
185
+ "linear_targetidx",
186
+ torch.tensor(linear_targetidx, dtype=torch.int32),
187
+ )
188
+ self.register_buffer(
189
+ "linear_scale", torch.tensor(linear_scale, dtype=dtype)
190
+ )
191
+ self.register_buffer(
192
+ "linear_offset",
193
+ torch.tensor(linear_offset, dtype=dtype),
194
+ )
195
+ self.register_buffer(
196
+ "linear_weight",
197
+ (kLimitWeight * torch.tensor(linear_weight, dtype=dtype))
198
+ .sqrt()
199
+ .detach(),
200
+ )
201
+ self.register_buffer(
202
+ "linear_range_min",
203
+ torch.tensor(
204
+ [-float("inf") if x is None else x for x in linear_range_min],
205
+ dtype=dtype,
206
+ ),
207
+ )
208
+ self.register_buffer(
209
+ "linear_range_max",
210
+ torch.tensor(
211
+ [float("inf") if x is None else x for x in linear_range_max],
212
+ dtype=dtype,
213
+ ),
214
+ )
215
+
216
+ if self.has_linear_joint:
217
+ self.register_buffer(
218
+ "linear_joint_refidx",
219
+ torch.tensor(linear_joint_refidx, dtype=torch.int32),
220
+ )
221
+ self.register_buffer(
222
+ "linear_joint_targetidx",
223
+ torch.tensor(linear_joint_targetidx, dtype=torch.int32),
224
+ )
225
+ self.register_buffer(
226
+ "linear_joint_scale", torch.tensor(linear_joint_scale, dtype=dtype)
227
+ )
228
+ self.register_buffer(
229
+ "linear_joint_offset",
230
+ torch.tensor(linear_joint_offset, dtype=dtype),
231
+ )
232
+ self.register_buffer(
233
+ "linear_joint_weight",
234
+ (kLimitWeight * torch.tensor(linear_joint_weight, dtype=dtype))
235
+ .sqrt()
236
+ .detach(),
237
+ )
238
+ self.register_buffer(
239
+ "linear_joint_range_min",
240
+ torch.tensor(
241
+ [-float("inf") if x is None else x for x in linear_joint_range_min],
242
+ dtype=dtype,
243
+ ),
244
+ )
245
+ self.register_buffer(
246
+ "linear_joint_range_max",
247
+ torch.tensor(
248
+ [float("inf") if x is None else x for x in linear_joint_range_max],
249
+ dtype=dtype,
250
+ ),
251
+ )
252
+
253
+ if self.has_halfplane:
254
+ self.register_buffer(
255
+ "halfplane_param1_idx",
256
+ torch.tensor(halfplane_param1_idx, dtype=torch.int32),
257
+ )
258
+ self.register_buffer(
259
+ "halfplane_param2_idx",
260
+ torch.tensor(halfplane_param2_idx, dtype=torch.int32),
261
+ )
262
+ self.register_buffer(
263
+ "halfplane_normal",
264
+ torch.tensor(halfplane_normal, dtype=dtype),
265
+ )
266
+ self.register_buffer(
267
+ "halfplane_offset", torch.tensor(halfplane_offset, dtype=dtype)
268
+ )
269
+ self.register_buffer(
270
+ "halfplane_weight",
271
+ (kLimitWeight * torch.tensor(halfplane_weight, dtype=dtype))
272
+ .sqrt()
273
+ .detach(),
274
+ )
275
+
276
+ if self.has_ellipsoid:
277
+ self.register_buffer(
278
+ "ellipsoid_parent", torch.tensor(ellipsoid_parent, dtype=torch.int32)
279
+ )
280
+ self.register_buffer(
281
+ "ellipsoid_ellipsoid_parent",
282
+ torch.tensor(ellipsoid_ellipsoid_parent, dtype=torch.int32),
283
+ )
284
+ self.register_buffer(
285
+ "ellipsoid_offset", torch.stack(ellipsoid_offset, dim=0)
286
+ )
287
+ self.register_buffer(
288
+ "ellipsoid_ellipsoid", torch.stack(ellipsoid_ellipsoid, dim=0)
289
+ )
290
+ self.register_buffer(
291
+ "ellipsoid_ellipsoid_inv", torch.stack(ellipsoid_ellipsoid_inv, dim=0)
292
+ )
293
+ self.register_buffer(
294
+ "ellipsoid_weight",
295
+ (
296
+ kLimitWeight
297
+ * kPositionWeight
298
+ * torch.tensor(ellipsoid_weight, dtype=dtype)
299
+ )
300
+ .sqrt()
301
+ .detach(),
302
+ )
303
+
304
+ def evaluate_minmax_error(self, model_params: torch.Tensor) -> torch.Tensor:
305
+ if not self.has_minmax:
306
+ return torch.zeros(
307
+ (model_params.shape[0], 0),
308
+ dtype=model_params.dtype,
309
+ device=model_params.device,
310
+ )
311
+
312
+ selected_model_params = model_params[..., self.minmax_parameter_index]
313
+
314
+ return self.minmax_weight * (
315
+ torch.where(
316
+ selected_model_params < self.minmax_min,
317
+ self.minmax_min - selected_model_params,
318
+ torch.zeros_like(selected_model_params),
319
+ )
320
+ + torch.where(
321
+ selected_model_params > self.minmax_max,
322
+ selected_model_params - self.minmax_max,
323
+ torch.zeros_like(selected_model_params),
324
+ )
325
+ )
326
+
327
+ def evaluate_minmaxjoint_error(self, joint_params: torch.Tensor) -> torch.Tensor:
328
+ if not self.has_minmaxjoint:
329
+ return torch.zeros(
330
+ (joint_params.shape[0], 0),
331
+ dtype=joint_params.dtype,
332
+ device=joint_params.device,
333
+ )
334
+
335
+ selected_joint_params = _squeeze_joint_params(joint_params)[
336
+ ..., self.minmaxjoint_index
337
+ ]
338
+
339
+ return self.minmaxjoint_weight * (
340
+ torch.where(
341
+ selected_joint_params < self.minmaxjoint_min,
342
+ self.minmaxjoint_min - selected_joint_params,
343
+ torch.zeros_like(selected_joint_params),
344
+ )
345
+ + torch.where(
346
+ selected_joint_params > self.minmaxjoint_max,
347
+ selected_joint_params - self.minmaxjoint_max,
348
+ torch.zeros_like(selected_joint_params),
349
+ )
350
+ )
351
+
352
+ def evaluate_linear_error(self, model_params: torch.Tensor) -> torch.Tensor:
353
+ if not self.has_linear:
354
+ return torch.zeros(
355
+ (model_params.shape[0], 0),
356
+ dtype=model_params.dtype,
357
+ device=model_params.device,
358
+ )
359
+
360
+ ref_params = model_params[:, self.linear_refidx]
361
+ target_params = model_params[:, self.linear_targetidx]
362
+
363
+ is_in_range = torch.logical_and(
364
+ target_params >= self.linear_range_min,
365
+ target_params < self.linear_range_max,
366
+ )
367
+
368
+ linear_res = self.linear_weight * (
369
+ self.linear_scale * target_params - self.linear_offset - ref_params
370
+ )
371
+
372
+ return torch.where(is_in_range, linear_res, torch.zeros_like(linear_res))
373
+
374
+ def evaluate_linear_joint_error(self, joint_params: torch.Tensor) -> torch.Tensor:
375
+ if not self.has_linear_joint:
376
+ return torch.zeros(
377
+ (joint_params.shape[0], 0),
378
+ dtype=joint_params.dtype,
379
+ device=joint_params.device,
380
+ )
381
+
382
+ ref_joint_params = joint_params[:, self.linear_joint_refidx]
383
+ target_joint_params = joint_params[:, self.linear_joint_targetidx]
384
+
385
+ is_in_range = torch.logical_and(
386
+ target_joint_params >= self.linear_joint_range_min,
387
+ target_joint_params < self.linear_joint_range_max,
388
+ )
389
+
390
+ linear_res = self.linear_joint_weight * (
391
+ self.linear_joint_scale * target_joint_params
392
+ - self.linear_joint_offset
393
+ - ref_joint_params
394
+ )
395
+
396
+ return torch.where(is_in_range, linear_res, torch.zeros_like(linear_res))
397
+
398
+ def evaluate_halfplane_error(self, model_params: torch.Tensor) -> torch.Tensor:
399
+ if not self.has_halfplane:
400
+ return torch.zeros(
401
+ (model_params.shape[0], 0),
402
+ dtype=model_params.dtype,
403
+ device=model_params.device,
404
+ )
405
+
406
+ # n_batch x n_constraints
407
+ param1 = model_params[:, self.halfplane_param1_idx]
408
+ param2 = model_params[:, self.halfplane_param2_idx]
409
+
410
+ fn_val = (
411
+ param1 * self.halfplane_normal[None, :, 0]
412
+ + param2 * self.halfplane_normal[None, :, 1]
413
+ - self.halfplane_offset[None, :]
414
+ )
415
+
416
+ return self.halfplane_weight * torch.where(
417
+ fn_val < 0, fn_val, torch.zeros_like(fn_val)
418
+ )
419
+
420
+ def _transform_points(
421
+ self, transforms: torch.Tensor, points: torch.Tensor
422
+ ) -> torch.Tensor:
423
+ return (
424
+ torch.einsum("...ij,...j->...i", transforms[:, :, 0:3, 0:3], points)
425
+ + transforms[:, :, 0:3, 3]
426
+ )
427
+
428
+ def evaluate_ellipsoid_error(self, skel_state: torch.Tensor) -> torch.Tensor:
429
+ if not self.has_ellipsoid:
430
+ return torch.zeros(
431
+ (skel_state.shape[0], 0),
432
+ dtype=skel_state.dtype,
433
+ device=skel_state.device,
434
+ )
435
+
436
+ skel_state_inv = pym_skel_state.inverse(skel_state)
437
+
438
+ n_batch = skel_state.shape[0]
439
+ n_constraints = self.ellipsoid_parent.shape[0]
440
+
441
+ # Following the code here: https://www.internalfb.com/code/fbsource/arvr/libraries/momentum/character_solver/limit_error_function.cpp?lines=433
442
+
443
+ # get the constraint position in global space
444
+ position: torch.Tensor = pym_skel_state.transform_points(
445
+ skel_state[:, self.ellipsoid_parent],
446
+ self.ellipsoid_offset[None, ...].expand(n_batch, n_constraints, 3),
447
+ )
448
+ # get the constraint position in local ellipsoid space
449
+ local_position: torch.Tensor = pym_skel_state.transform_points(
450
+ skel_state_inv[:, self.ellipsoid_ellipsoid_parent], position
451
+ )
452
+ # calculate constraint position in ellipsoid space
453
+ ellipsoid_position: torch.Tensor = self._transform_points(
454
+ self.ellipsoid_ellipsoid_inv[None, :, :], local_position
455
+ )
456
+ # project onto closest surface point
457
+ normalized_position = ellipsoid_position / torch.norm(
458
+ ellipsoid_position, dim=-1, keepdim=True
459
+ )
460
+ # go back to ellipsoid frame
461
+ projected_position = self._transform_points(
462
+ self.ellipsoid_ellipsoid[None, :, :], normalized_position
463
+ )
464
+ # calculate the difference between projected position and actual position
465
+ diff = position - pym_skel_state.transform_points(
466
+ skel_state[:, self.ellipsoid_ellipsoid_parent], projected_position
467
+ )
468
+ result = (self.ellipsoid_weight[None, :, None] * diff).flatten(-2)
469
+ return result
470
+
471
+ def forward(
472
+ self,
473
+ model_parameters: torch.Tensor,
474
+ joint_parameters: torch.Tensor,
475
+ skel_state: torch.Tensor,
476
+ ) -> torch.Tensor:
477
+ minmax_error = self.evaluate_minmax_error(model_parameters)
478
+ minmaxjoint_error = self.evaluate_minmaxjoint_error(joint_parameters)
479
+ linear_error = self.evaluate_linear_error(model_parameters)
480
+ linear_joint_error = self.evaluate_linear_joint_error(joint_parameters)
481
+ halfplane_error = self.evaluate_halfplane_error(model_parameters)
482
+ ellipsoid_error = self.evaluate_ellipsoid_error(skel_state)
483
+
484
+ return torch.cat(
485
+ [
486
+ minmax_error,
487
+ minmaxjoint_error,
488
+ linear_error,
489
+ linear_joint_error,
490
+ halfplane_error,
491
+ ellipsoid_error,
492
+ ],
493
+ -1,
494
+ )
@@ -0,0 +1,20 @@
1
+ # Copyright (c) Meta Platforms, Inc. and affiliates.
2
+ #
3
+ # This source code is licensed under the MIT license found in the
4
+ # LICENSE file in the root directory of this source tree.
5
+
6
+ import torch
7
+
8
+ # pyre-strict
9
+
10
+
11
+ def _squeeze_joint_params(joint_params: torch.Tensor) -> torch.Tensor:
12
+ if joint_params.shape[-1] == 7:
13
+ joint_params = joint_params.flatten(start_dim=-2)
14
+ return joint_params
15
+
16
+
17
+ def _unsqueeze_joint_params(joint_params: torch.Tensor) -> torch.Tensor:
18
+ if joint_params.shape[-1] != 7:
19
+ return joint_params.view(list(joint_params.shape[:-1]) + [-1, 7])
20
+ return joint_params