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,516 @@
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/common/checks.h>
11
+
12
+ #include <Eigen/Core>
13
+ #include <gsl/span>
14
+
15
+ #include <deque>
16
+ #include <vector>
17
+
18
+ namespace momentum {
19
+
20
+ void validateColumnIndices(gsl::span<const Eigen::Index> colIndices, Eigen::Index maxEntry);
21
+
22
+ // Remaps the matrix such that A_new.col(i) = A_orig.col(colIndices[i]).
23
+ // This can be used to perform QR on a subset of the matrix columns.
24
+ template <typename MatrixType>
25
+ class ColumnIndexedMatrix {
26
+ public:
27
+ using VectorType = Eigen::Matrix<typename MatrixType::Scalar, Eigen::Dynamic, 1>;
28
+
29
+ explicit ColumnIndexedMatrix(Eigen::Ref<MatrixType> mat) : mat_(mat), useColumnIndices_(false) {}
30
+
31
+ explicit ColumnIndexedMatrix(Eigen::Ref<MatrixType> mat, gsl::span<const Eigen::Index> colIndices)
32
+ : mat_(mat), columnIndices_(colIndices), useColumnIndices_(true) {
33
+ validateColumnIndices(colIndices, mat.cols());
34
+ }
35
+
36
+ [[nodiscard]] auto col(Eigen::Index colIdx) {
37
+ if (useColumnIndices_) {
38
+ return mat_.col(columnIndices_[colIdx]);
39
+ } else {
40
+ return mat_.col(colIdx);
41
+ }
42
+ }
43
+
44
+ [[nodiscard]] auto rows() const {
45
+ return mat_.rows();
46
+ }
47
+
48
+ [[nodiscard]] auto cols() const {
49
+ if (useColumnIndices_) {
50
+ return (Eigen::Index)columnIndices_.size();
51
+ } else {
52
+ return mat_.cols();
53
+ }
54
+ }
55
+
56
+ [[nodiscard]] gsl::span<const Eigen::Index> columnIndices() const {
57
+ return columnIndices_;
58
+ }
59
+
60
+ [[nodiscard]] VectorType transpose_times(Eigen::Ref<VectorType> b) const {
61
+ if (useColumnIndices_) {
62
+ VectorType result(columnIndices_.size());
63
+ for (Eigen::Index iCol = 0; iCol < (Eigen::Index)columnIndices_.size(); ++iCol) {
64
+ result[iCol] = mat_.col(iCol).dot(b);
65
+ }
66
+ return result;
67
+ } else {
68
+ return mat_.transpose() * b;
69
+ }
70
+ }
71
+
72
+ private:
73
+ Eigen::Ref<MatrixType> mat_;
74
+ gsl::span<const Eigen::Index> columnIndices_;
75
+ bool useColumnIndices_;
76
+ };
77
+
78
+ // The native Eigen matrix type reallocates the matrix every time you call
79
+ // either resize() or conservativeResize(), which means there is no way to
80
+ // have a matrix that reuses memory. This is inconvenient, because there are
81
+ // definitely cases where we want to be able to reuse the same memory over
82
+ // and over for slightly different matrix sizes (for example, if we are computing
83
+ // our Jacobian blockwise).
84
+ template <typename T>
85
+ class ResizeableMatrix {
86
+ public:
87
+ using MatrixType = Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>;
88
+
89
+ ResizeableMatrix() = default;
90
+ explicit ResizeableMatrix(Eigen::Index rows, Eigen::Index cols = 1) {
91
+ resizeAndSetZero(rows, cols);
92
+ }
93
+
94
+ void resizeAndSetZero(Eigen::Index rows, Eigen::Index cols = 1) {
95
+ rows_ = rows;
96
+ cols_ = cols;
97
+
98
+ // This will not reallocate unless needed.
99
+ data_.resize(rows * cols);
100
+ std::fill(std::begin(data_), std::end(data_), T(0));
101
+ }
102
+
103
+ [[nodiscard]] Eigen::Index rows() const {
104
+ return rows_;
105
+ }
106
+ [[nodiscard]] Eigen::Index cols() const {
107
+ return cols_;
108
+ }
109
+
110
+ Eigen::Map<MatrixType, Eigen::Aligned16> mat() {
111
+ return Eigen::Map<MatrixType, Eigen::Aligned16>(data_.data(), rows_, cols_);
112
+ }
113
+ Eigen::Map<const MatrixType, Eigen::Aligned16> mat() const {
114
+ return Eigen::Map<const MatrixType, Eigen::Aligned16>(data_.data(), rows_, cols_);
115
+ }
116
+
117
+ private:
118
+ Eigen::Index rows_ = 0;
119
+ Eigen::Index cols_ = 0;
120
+ std::vector<T> data_;
121
+ };
122
+
123
+ // This class is designed to solve least squares problems of the form:
124
+ // min || A * x - b ||_2
125
+ // where
126
+ // a. n is small-ish,
127
+ // b. A is tall and _sparse_ (m >> n), BUT
128
+ // c. (A^T * A) is _dense_.
129
+ //
130
+ // This turns out to be the common case for hand model IK, because:
131
+ // a. The hand has only ~22 DOF,
132
+ // b. Each constraint touches only a few DOFs (typically the 3-4 on a single finger), but
133
+ // c. Constraints that touch the global DOFs tend to densify A^T*A.
134
+ // From the perspective of a QR factorization: since the R matrix
135
+ // has the same sparsity pattern as the L matrix in the Cholesky factorization of
136
+ // A^T*A, there is no point trying to exploit sparsity in the computation of R
137
+ // (e.g. by reordering columns). So instead, we'll accept the O(n^2) cost of
138
+ // having a dense R and try to exploit sparsity in A.
139
+ //
140
+ // It turns out that it is possible to exploit sparsity in A if you do the factorization
141
+ // _row-wise_ instead of column-wise as is generally done. One paper that uses Givens
142
+ // rotations to zero out one row at a time is this one:
143
+ // Solution of Sparse Linear Squares Problems using Givens Rotations (1980)
144
+ // by Alan George and Michael T. Heath
145
+ //
146
+ // However, Givens rotations aren't really ideal for our case because you have
147
+ // to compute a c/s pair for each entry of the matrix, and it involves a square
148
+ // root. Also, row-wise operations are kind of slow in general due to poor
149
+ // cache locality on Eigen matrices. What we can do instead is to apply
150
+ // Householder reflections to (k x n) blocks of the matrix; computing a
151
+ // Householder vector for a whole column only requires one square root, and
152
+ // it can be applied as a level-2 BLAS operation. Moreover, this maps
153
+ // perfectly to our problem; a Jacobian matrix from a single constraint has
154
+ // the sparsity pattern where entire columns are dropped, and these zero
155
+ // columns can just be skipped entirely by the Householder process provided
156
+ // we are careful about the order we process them in. And by processing the
157
+ // J submatrices one at a time, we need never assemble the full A matrix,
158
+ // eliminating one major disadvantage of QR relative to the normal equations
159
+ // (hence the name "OnlineHouseholderQR").
160
+ //
161
+ // Even better, we can do the whole operation in-place: the caller passes in
162
+ // the J and r matrix, and the columns of the J matrix are rotated out one by
163
+ // one, revealing the R matrix. At the end, a simple back-substitution using
164
+ // R gives the x vector. (in fact, the answer for the current submatrix of
165
+ // A,b is always available, as a consequence of doing the factorization sort-of
166
+ // row-wise).
167
+ //
168
+ // Note that because we apply the transforms as we go, this method is not currently
169
+ // suitable for multiple right-hand-sides.
170
+ template <typename T>
171
+ class OnlineHouseholderQR {
172
+ public:
173
+ using MatrixType = Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>;
174
+ using VectorType = Eigen::Matrix<T, Eigen::Dynamic, 1>;
175
+
176
+ // The lambda here lets you pass in a lambda for a Gauss-Newton/Levenberg-Marquardt solver.
177
+ // Basically this emulates solving the following system, but without needing to append the
178
+ // extra matrix:
179
+ // | [ lambda * I ] [ x ] - [ 0 ] |^2
180
+ // | [ A ] [ b ] |
181
+ explicit OnlineHouseholderQR(Eigen::Index n, T lambda = T(0));
182
+
183
+ void addMutating(Eigen::Ref<MatrixType> A, Eigen::Ref<VectorType> b) {
184
+ addMutating(ColumnIndexedMatrix<MatrixType>(A), b);
185
+ }
186
+
187
+ // We require passing in both A and rhs so that we can multiply rhs by Q
188
+ // as R is being constructed.
189
+ // This is an 'in-place' version which computes the factorization inside the
190
+ // passed-in matrix; it is here so that use cases that don't need to re-use
191
+ // the matrix can avoid copying.
192
+ void addMutating(ColumnIndexedMatrix<MatrixType> A, Eigen::Ref<VectorType> b);
193
+
194
+ // This version can be made efficient if you std::move() the passed-in matrices.
195
+ void add(MatrixType A, VectorType b);
196
+
197
+ [[nodiscard]] VectorType result() const;
198
+
199
+ [[nodiscard]] const MatrixType& R() const {
200
+ return R_;
201
+ }
202
+ [[nodiscard]] const VectorType& y() const {
203
+ return y_;
204
+ }
205
+ [[nodiscard]] VectorType At_times_b() const;
206
+
207
+ void reset();
208
+ void reset(Eigen::Index n, T lambda = T(0));
209
+
210
+ private:
211
+ // R is defined by
212
+ // Q*A = ( R )
213
+ // ( 0 )
214
+ MatrixType R_;
215
+
216
+ // We define y as
217
+ // Q*b = y
218
+ VectorType y_;
219
+ };
220
+
221
+ // This class is designed to solve least squares problems of the form:
222
+ // min || A * x - b ||_2
223
+ // where A has the block structure:
224
+ // [ A_11 A_1n ]
225
+ // [ A_22 A_2n ]
226
+ // [ A_33 A_3n ]
227
+ // [ ... ... ]
228
+ //
229
+ // Basically, you have these blocks along the diagonal where each set of
230
+ // x parameters is disjoint and then you have a set of x's that are common
231
+ // to all blocks.
232
+ //
233
+ // This is basically the case for calibration problems, where each hand
234
+ // pose is independent but you have a set of common calibration parameters
235
+ // that connect them.
236
+ //
237
+ // Besides the blockwise structure, the behavior of this solver should be
238
+ // identical to the OnlineHouseholderQR solver above, so please see those
239
+ // note for more details. The key takeaway is that this can be used in an
240
+ // _online_ fashion, so you can pass in the individual poses one at a time
241
+ // and then throw away the Jacobians (in fact, a future version of this class
242
+ // could even consider throwing away the intermediate R matrices if memory
243
+ // becomes an issue).
244
+ template <typename T>
245
+ class OnlineBlockHouseholderQR {
246
+ public:
247
+ using MatrixType = Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>;
248
+ using VectorType = Eigen::Matrix<T, Eigen::Dynamic, 1>;
249
+
250
+ // The lambda here lets you pass in a lambda for a Gauss-Newton/Levenberg-Marquardt solver.
251
+ // Basically this emulates solving the following system, but without needing to append the
252
+ // extra matrix:
253
+ // | [ lambda * I ] [ x ] - [ 0 ] |^2
254
+ // | [ A ] [ b ] |
255
+ explicit OnlineBlockHouseholderQR(Eigen::Index n_common, T lambda = T(0));
256
+
257
+ void add(size_t iBlock, MatrixType A_diag, MatrixType A_common, VectorType b) {
258
+ addMutating(iBlock, A_diag, A_common, b);
259
+ }
260
+
261
+ // We require passing in both A and rhs so that we can multiply rhs by Q
262
+ // as R is being constructed.
263
+ // This is an 'in-place' version which computes the factorization inside the
264
+ // passed-in matrix; it is here so that use cases that don't need to re-use
265
+ // the matrix can avoid copying.
266
+ void addMutating(
267
+ size_t iBlock,
268
+ Eigen::Ref<MatrixType> A_diag,
269
+ Eigen::Ref<MatrixType> A_common,
270
+ Eigen::Ref<VectorType> b) {
271
+ addMutating(
272
+ iBlock,
273
+ ColumnIndexedMatrix<MatrixType>(A_diag),
274
+ ColumnIndexedMatrix<MatrixType>(A_common),
275
+ b);
276
+ }
277
+
278
+ // Mutating addition operator that also remaps the columns, allowing passing in arbitrary subsets
279
+ // of the columns in A_diag and A_common.
280
+ void addMutating(
281
+ size_t iBlock,
282
+ ColumnIndexedMatrix<MatrixType> A_diag,
283
+ ColumnIndexedMatrix<MatrixType> A_common,
284
+ Eigen::Ref<VectorType> b);
285
+
286
+ // You can retrieve the result x in one of two ways:
287
+ // 1. As a single, dense vector, which solves everything simultaneously, or
288
+ // 2. A block at a time.
289
+ // The latter is a little bit slower because it re-does the back-substitution
290
+ // for the final rows every time, but for the common case where the last set
291
+ // of variables is very small this should not be an issue.
292
+
293
+ // Retrieve the full dense result:
294
+ [[nodiscard]] VectorType x_dense() const;
295
+
296
+ // Retrieve the answer for a single block:
297
+ [[nodiscard]] VectorType x_i(size_t iBlock) const;
298
+
299
+ // Retrieve the answer for just the final "common" rows.
300
+ [[nodiscard]] VectorType x_n() const;
301
+
302
+ [[nodiscard]] const MatrixType& R_ii(size_t iBlock) const {
303
+ return R_ii_[iBlock];
304
+ }
305
+
306
+ [[nodiscard]] const VectorType& y_i(size_t iBlock) const {
307
+ return y_i_[iBlock];
308
+ }
309
+
310
+ [[nodiscard]] MatrixType R_dense() const;
311
+ [[nodiscard]] MatrixType y_dense() const;
312
+
313
+ [[nodiscard]] VectorType At_times_b_i(size_t iBlock) const;
314
+ [[nodiscard]] VectorType At_times_b_n() const;
315
+ [[nodiscard]] VectorType At_times_b_dense() const;
316
+ [[nodiscard]] T At_times_b_dot(Eigen::Ref<const VectorType> rhs) const;
317
+
318
+ void reset();
319
+
320
+ private:
321
+ const double lambda_;
322
+
323
+ // R is defined by
324
+ // Q*A = ( R )
325
+ // ( 0 )
326
+ // R looks like:
327
+ // [ R_ii[0] R_in[0] ]
328
+ // [ R_ii[1] R_in[1] ]
329
+ // [ R_ii[2] R_in[2] ]
330
+ // [ R_nn ]
331
+ std::deque<MatrixType> R_ii_;
332
+ std::deque<MatrixType> R_in_;
333
+ MatrixType R_nn_;
334
+
335
+ // We define y as
336
+ // Q*b = y
337
+ // y looks like:
338
+ // [ y_i ]
339
+ // [ ... ]
340
+ // [ y_n ]
341
+ std::deque<VectorType> y_i_;
342
+ VectorType y_n_;
343
+ };
344
+
345
+ // Another online QR solver, but for matrices that have a particular
346
+ // type of band structure. The left-hand part of the matrix is
347
+ // required to have a limited bandwidth, and we permit a "common"
348
+ // section at the right-hand side of the matrix, like this:
349
+ // ...b a n d e d... common
350
+ // [ a_11 a_15 ]
351
+ // [ a_21 a_22 a_25 ]
352
+ // [ a_31 a_32 a_35 ]
353
+ // [ a_42 a_43 a_45 ]
354
+ // [ a_53 a_54 a_55 ]
355
+ // [ a_64 a_65 ]
356
+ // Here, the "bandwidth" is in _columns_; that is, the above matrix
357
+ // has a bandwidth of 2 because no row spans more than two columns (excepting
358
+ // the "common" section).
359
+ // We also allow a "common" section at the right-hand side of the matrix
360
+ // which contains parameters that are allowed to be shared between all rows.
361
+ // This might seem very specialized, but it maps to an extremely common
362
+ // set of problems, where the band structure maps to the time dimension
363
+ // (where smoothness constraints tend to connect adjacent timepoints) while
364
+ // common parameters map to a set of common optimized parameters. For example:
365
+ // body tracking: band structure maps to smoothness constraints between adjacent frames,
366
+ // while common parameters control body scale
367
+ // camera calibration: band structure maps to smoothness constraints between
368
+ // adjacent frames of the extrinsics, while common parameters refer to
369
+ // intrinsics.
370
+ template <typename T>
371
+ class OnlineBandedHouseholderQR {
372
+ public:
373
+ using MatrixType = Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>;
374
+ using VectorType = Eigen::Matrix<T, Eigen::Dynamic, 1>;
375
+
376
+ // The lambda here lets you pass in a lambda for a Gauss-Newton/Levenberg-Marquardt solver.
377
+ // Basically this emulates solving the following system, but without needing to append the
378
+ // extra matrix:
379
+ // | [ lambda * I ] [ x ] - [ 0 ] |^2
380
+ // | [ A ] [ b ] |
381
+ explicit OnlineBandedHouseholderQR(
382
+ Eigen::Index n_band,
383
+ Eigen::Index n_common,
384
+ Eigen::Index bandwidth,
385
+ T lambda = T(0));
386
+
387
+ void add(size_t iCol_offset, MatrixType A_band, MatrixType A_common, VectorType b) {
388
+ addMutating(iCol_offset, A_band, A_common, b);
389
+ }
390
+
391
+ void add(MatrixType A_common, VectorType b) {
392
+ addMutating(A_common, b);
393
+ }
394
+
395
+ // We require passing in both A and rhs so that we can multiply rhs by Q
396
+ // as R is being constructed.
397
+ // This is an 'in-place' version which computes the factorization inside the
398
+ // passed-in matrix; it is here so that use cases that don't need to re-use
399
+ // the matrix can avoid copying.
400
+ void addMutating(
401
+ const Eigen::Index iCol_offset,
402
+ Eigen::Ref<MatrixType> A_band,
403
+ Eigen::Ref<MatrixType> A_common,
404
+ Eigen::Ref<VectorType> b) {
405
+ addMutating(
406
+ iCol_offset,
407
+ ColumnIndexedMatrix<MatrixType>(A_band),
408
+ ColumnIndexedMatrix<MatrixType>(A_common),
409
+ b);
410
+ }
411
+
412
+ void addMutating(Eigen::Ref<MatrixType> A_common, Eigen::Ref<VectorType> b) {
413
+ addMutating(ColumnIndexedMatrix<MatrixType>(A_common), b);
414
+ }
415
+
416
+ // Mutating addition operator that also remaps the columns, allowing passing in arbitrary subsets
417
+ // of the columns in A_diag and A_common.
418
+ void addMutating(
419
+ Eigen::Index iCol_offset,
420
+ ColumnIndexedMatrix<MatrixType> A_band,
421
+ ColumnIndexedMatrix<MatrixType> A_common,
422
+ Eigen::Ref<VectorType> b);
423
+
424
+ void addMutating(ColumnIndexedMatrix<MatrixType> A_common, Eigen::Ref<VectorType> b);
425
+
426
+ // Zeroes out just the banded part of the matrix; applies Householder rotations that
427
+ // zero out everything in A_band. The A_common will still have nonzero entries so
428
+ // after calling this you should call addMutating(A_common, b) to complete adding the
429
+ // columns to the matrix.
430
+ //
431
+ // Why is this useful? If you are careful about it, you can call zeroBandedPart on
432
+ // multiple non-overlapping segments of the banded matrix at a time, but processing
433
+ // A_common must be serialized. Since in many problems the number of common variables
434
+ // is much smaller than the number of banded variables this can provide a substantial
435
+ // speedup in practice.
436
+ void zeroBandedPart(
437
+ Eigen::Index iCol_offset,
438
+ ColumnIndexedMatrix<MatrixType> A_band,
439
+ ColumnIndexedMatrix<MatrixType> A_common,
440
+ Eigen::Ref<VectorType> b);
441
+
442
+ // You can retrieve the result x in one of two ways:
443
+ // 1. As a single, dense vector, which solves everything simultaneously, or
444
+ // 2. A block at a time.
445
+ // The latter is a little bit slower because it re-does the back-substitution
446
+ // for the final rows every time, but for the common case where the last set
447
+ // of variables is very small this should not be an issue.
448
+
449
+ // Retrieve the full dense result:
450
+ [[nodiscard]] VectorType x_dense() const;
451
+ [[nodiscard]] MatrixType R_dense() const;
452
+ [[nodiscard]] MatrixType y_dense() const {
453
+ return y_;
454
+ }
455
+
456
+ [[nodiscard]] VectorType At_times_b() const;
457
+
458
+ void reset();
459
+
460
+ [[nodiscard]] Eigen::Index bandwidth() const {
461
+ return R_band_.rows();
462
+ }
463
+
464
+ [[nodiscard]] Eigen::Index n_band() const {
465
+ return R_band_.cols();
466
+ }
467
+
468
+ [[nodiscard]] Eigen::Index n_common() const {
469
+ return R_common_.cols();
470
+ }
471
+
472
+ private:
473
+ // Sets the diagonal of the R matrix to lambda.
474
+ void initializeDiagonal();
475
+
476
+ [[nodiscard]] T R_band_entry(Eigen::Index iRow, Eigen::Index jCol) const {
477
+ const auto bandwidth = R_band_.rows();
478
+ MT_CHECK(iRow <= jCol);
479
+ MT_CHECK(jCol - iRow <= bandwidth);
480
+ return R_band_(bandwidth + iRow - jCol - 1, jCol);
481
+ }
482
+
483
+ [[nodiscard]] T& R_band_entry(Eigen::Index iRow, Eigen::Index jCol) {
484
+ const auto bandwidth = R_band_.rows();
485
+ MT_CHECK(iRow <= jCol);
486
+ MT_CHECK(jCol - iRow <= bandwidth);
487
+ return R_band_(bandwidth + iRow - jCol - 1, jCol);
488
+ }
489
+
490
+ const double lambda_;
491
+
492
+ // R is defined by
493
+ // Q*A = ( R )
494
+ // ( 0 )
495
+ // R looks like:
496
+ // [ * * * * * ]
497
+ // [ * * * * * ]
498
+ // [ * * * * * ]
499
+ // [ * * * * ]
500
+ // [ * * * ]
501
+ // [ * * ]
502
+ // [ * ]
503
+ // ^^^^^^^^^ ^^^^
504
+ // R_band_ R_common_
505
+ MatrixType R_common_;
506
+
507
+ // Uses "banded" storage, which looks like this:
508
+ // [ r_11 r_12 ]
509
+ // [ r_22 r_23 ]
510
+ // [ r_33 r_34 ]
511
+ MatrixType R_band_;
512
+
513
+ VectorType y_;
514
+ };
515
+
516
+ } // namespace momentum