pymomentum-cpu 0.1.93.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.
- include/axel/BoundingBox.h +59 -0
- include/axel/Bvh.h +708 -0
- include/axel/BvhBase.h +75 -0
- include/axel/BvhCommon.h +43 -0
- include/axel/BvhEmbree.h +87 -0
- include/axel/BvhFactory.h +34 -0
- include/axel/Checks.h +21 -0
- include/axel/DualContouring.h +79 -0
- include/axel/KdTree.h +208 -0
- include/axel/Log.h +22 -0
- include/axel/MeshToSdf.h +123 -0
- include/axel/Profile.h +64 -0
- include/axel/Ray.h +45 -0
- include/axel/SignedDistanceField.h +248 -0
- include/axel/SimdKdTree.h +515 -0
- include/axel/TriBvh.h +157 -0
- include/axel/TriBvhEmbree.h +57 -0
- include/axel/common/Constants.h +27 -0
- include/axel/common/Types.h +21 -0
- include/axel/common/VectorizationTypes.h +58 -0
- include/axel/math/BoundingBoxUtils.h +54 -0
- include/axel/math/ContinuousCollisionDetection.h +48 -0
- include/axel/math/CoplanarityCheck.h +30 -0
- include/axel/math/EdgeEdgeDistance.h +31 -0
- include/axel/math/MeshHoleFilling.h +117 -0
- include/axel/math/PointTriangleProjection.h +34 -0
- include/axel/math/PointTriangleProjectionDefinitions.h +209 -0
- include/axel/math/RayTriangleIntersection.h +36 -0
- include/momentum/character/blend_shape.h +97 -0
- include/momentum/character/blend_shape_base.h +86 -0
- include/momentum/character/blend_shape_skinning.h +96 -0
- include/momentum/character/character.h +272 -0
- include/momentum/character/character_state.h +108 -0
- include/momentum/character/character_utility.h +128 -0
- include/momentum/character/collision_geometry.h +80 -0
- include/momentum/character/collision_geometry_state.h +130 -0
- include/momentum/character/fwd.h +262 -0
- include/momentum/character/inverse_parameter_transform.h +58 -0
- include/momentum/character/joint.h +82 -0
- include/momentum/character/joint_state.h +241 -0
- include/momentum/character/linear_skinning.h +139 -0
- include/momentum/character/locator.h +94 -0
- include/momentum/character/locator_state.h +43 -0
- include/momentum/character/marker.h +48 -0
- include/momentum/character/mesh_state.h +71 -0
- include/momentum/character/parameter_limits.h +144 -0
- include/momentum/character/parameter_transform.h +207 -0
- include/momentum/character/pose_shape.h +65 -0
- include/momentum/character/skeleton.h +85 -0
- include/momentum/character/skeleton_state.h +227 -0
- include/momentum/character/skeleton_utility.h +38 -0
- include/momentum/character/skin_weights.h +67 -0
- include/momentum/character/skinned_locator.h +80 -0
- include/momentum/character/types.h +202 -0
- include/momentum/character_sequence_solver/fwd.h +200 -0
- include/momentum/character_sequence_solver/model_parameters_sequence_error_function.h +65 -0
- include/momentum/character_sequence_solver/multipose_solver.h +65 -0
- include/momentum/character_sequence_solver/multipose_solver_function.h +82 -0
- include/momentum/character_sequence_solver/sequence_error_function.h +104 -0
- include/momentum/character_sequence_solver/sequence_solver.h +155 -0
- include/momentum/character_sequence_solver/sequence_solver_function.h +158 -0
- include/momentum/character_sequence_solver/state_sequence_error_function.h +117 -0
- include/momentum/character_sequence_solver/vertex_sequence_error_function.h +123 -0
- include/momentum/character_solver/aim_error_function.h +112 -0
- include/momentum/character_solver/collision_error_function.h +92 -0
- include/momentum/character_solver/collision_error_function_stateless.h +75 -0
- include/momentum/character_solver/constraint_error_function-inl.h +324 -0
- include/momentum/character_solver/constraint_error_function.h +248 -0
- include/momentum/character_solver/distance_error_function.h +77 -0
- include/momentum/character_solver/error_function_utils.h +60 -0
- include/momentum/character_solver/fixed_axis_error_function.h +139 -0
- include/momentum/character_solver/fwd.h +943 -0
- include/momentum/character_solver/gauss_newton_solver_qr.h +64 -0
- include/momentum/character_solver/height_error_function.h +176 -0
- include/momentum/character_solver/joint_to_joint_distance_error_function.h +111 -0
- include/momentum/character_solver/limit_error_function.h +57 -0
- include/momentum/character_solver/model_parameters_error_function.h +64 -0
- include/momentum/character_solver/normal_error_function.h +73 -0
- include/momentum/character_solver/orientation_error_function.h +74 -0
- include/momentum/character_solver/plane_error_function.h +102 -0
- include/momentum/character_solver/point_triangle_vertex_error_function.h +141 -0
- include/momentum/character_solver/pose_prior_error_function.h +80 -0
- include/momentum/character_solver/position_error_function.h +75 -0
- include/momentum/character_solver/projection_error_function.h +93 -0
- include/momentum/character_solver/simd_collision_error_function.h +99 -0
- include/momentum/character_solver/simd_normal_error_function.h +157 -0
- include/momentum/character_solver/simd_plane_error_function.h +164 -0
- include/momentum/character_solver/simd_position_error_function.h +165 -0
- include/momentum/character_solver/skeleton_error_function.h +151 -0
- include/momentum/character_solver/skeleton_solver_function.h +94 -0
- include/momentum/character_solver/skinned_locator_error_function.h +166 -0
- include/momentum/character_solver/skinned_locator_triangle_error_function.h +146 -0
- include/momentum/character_solver/skinning_weight_iterator.h +80 -0
- include/momentum/character_solver/state_error_function.h +119 -0
- include/momentum/character_solver/transform_pose.h +80 -0
- include/momentum/character_solver/trust_region_qr.h +80 -0
- include/momentum/character_solver/vertex_error_function.h +155 -0
- include/momentum/character_solver/vertex_projection_error_function.h +117 -0
- include/momentum/character_solver/vertex_vertex_distance_error_function.h +147 -0
- include/momentum/common/aligned.h +155 -0
- include/momentum/common/checks.h +27 -0
- include/momentum/common/exception.h +70 -0
- include/momentum/common/filesystem.h +20 -0
- include/momentum/common/fwd.h +27 -0
- include/momentum/common/log.h +173 -0
- include/momentum/common/log_channel.h +17 -0
- include/momentum/common/memory.h +71 -0
- include/momentum/common/profile.h +79 -0
- include/momentum/common/progress_bar.h +37 -0
- include/momentum/common/string.h +52 -0
- include/momentum/diff_ik/ceres_utility.h +73 -0
- include/momentum/diff_ik/fully_differentiable_body_ik.h +58 -0
- include/momentum/diff_ik/fully_differentiable_distance_error_function.h +69 -0
- include/momentum/diff_ik/fully_differentiable_motion_error_function.h +46 -0
- include/momentum/diff_ik/fully_differentiable_orientation_error_function.h +114 -0
- include/momentum/diff_ik/fully_differentiable_pose_prior_error_function.h +76 -0
- include/momentum/diff_ik/fully_differentiable_position_error_function.h +138 -0
- include/momentum/diff_ik/fully_differentiable_projection_error_function.h +65 -0
- include/momentum/diff_ik/fully_differentiable_skeleton_error_function.h +160 -0
- include/momentum/diff_ik/fully_differentiable_state_error_function.h +54 -0
- include/momentum/diff_ik/fwd.h +385 -0
- include/momentum/diff_ik/union_error_function.h +67 -0
- include/momentum/gui/rerun/eigen_adapters.h +70 -0
- include/momentum/gui/rerun/logger.h +102 -0
- include/momentum/gui/rerun/logging_redirect.h +27 -0
- include/momentum/io/character_io.h +98 -0
- include/momentum/io/common/gsl_utils.h +50 -0
- include/momentum/io/common/stream_utils.h +65 -0
- include/momentum/io/fbx/fbx_io.h +135 -0
- include/momentum/io/fbx/fbx_memory_stream.h +70 -0
- include/momentum/io/fbx/openfbx_loader.h +62 -0
- include/momentum/io/fbx/polygon_data.h +60 -0
- include/momentum/io/file_save_options.h +107 -0
- include/momentum/io/gltf/gltf_builder.h +141 -0
- include/momentum/io/gltf/gltf_io.h +149 -0
- include/momentum/io/gltf/utils/accessor_utils.h +299 -0
- include/momentum/io/gltf/utils/coordinate_utils.h +60 -0
- include/momentum/io/gltf/utils/json_utils.h +102 -0
- include/momentum/io/legacy_json/legacy_json_io.h +70 -0
- include/momentum/io/marker/c3d_io.h +30 -0
- include/momentum/io/marker/conversions.h +57 -0
- include/momentum/io/marker/coordinate_system.h +30 -0
- include/momentum/io/marker/marker_io.h +56 -0
- include/momentum/io/marker/trc_io.h +27 -0
- include/momentum/io/motion/mmo_io.h +97 -0
- include/momentum/io/shape/blend_shape_io.h +82 -0
- include/momentum/io/shape/pose_shape_io.h +21 -0
- include/momentum/io/skeleton/locator_io.h +41 -0
- include/momentum/io/skeleton/mppca_io.h +26 -0
- include/momentum/io/skeleton/parameter_limits_io.h +38 -0
- include/momentum/io/skeleton/parameter_transform_io.h +80 -0
- include/momentum/io/skeleton/parameters_io.h +20 -0
- include/momentum/io/skeleton/utility.h +67 -0
- include/momentum/io/urdf/urdf_io.h +26 -0
- include/momentum/io/usd/usd_io.h +36 -0
- include/momentum/marker_tracking/app_utils.h +64 -0
- include/momentum/marker_tracking/marker_tracker.h +221 -0
- include/momentum/marker_tracking/process_markers.h +58 -0
- include/momentum/marker_tracking/tracker_utils.h +99 -0
- include/momentum/math/constants.h +82 -0
- include/momentum/math/covariance_matrix.h +84 -0
- include/momentum/math/fmt_eigen.h +23 -0
- include/momentum/math/fwd.h +132 -0
- include/momentum/math/generalized_loss.h +61 -0
- include/momentum/math/intersection.h +32 -0
- include/momentum/math/mesh.h +84 -0
- include/momentum/math/mppca.h +67 -0
- include/momentum/math/online_householder_qr.h +516 -0
- include/momentum/math/random-inl.h +404 -0
- include/momentum/math/random.h +310 -0
- include/momentum/math/simd_generalized_loss.h +40 -0
- include/momentum/math/transform.h +229 -0
- include/momentum/math/types.h +461 -0
- include/momentum/math/utility.h +324 -0
- include/momentum/rasterizer/camera.h +453 -0
- include/momentum/rasterizer/fwd.h +102 -0
- include/momentum/rasterizer/geometry.h +83 -0
- include/momentum/rasterizer/image.h +18 -0
- include/momentum/rasterizer/rasterizer.h +583 -0
- include/momentum/rasterizer/tensor.h +140 -0
- include/momentum/rasterizer/text_rasterizer.h +89 -0
- include/momentum/rasterizer/utility.h +268 -0
- include/momentum/simd/simd.h +221 -0
- include/momentum/solver/fwd.h +131 -0
- include/momentum/solver/gauss_newton_solver.h +136 -0
- include/momentum/solver/gradient_descent_solver.h +65 -0
- include/momentum/solver/solver.h +155 -0
- include/momentum/solver/solver_function.h +126 -0
- include/momentum/solver/subset_gauss_newton_solver.h +109 -0
- include/rerun/archetypes/annotation_context.hpp +157 -0
- include/rerun/archetypes/arrows2d.hpp +271 -0
- include/rerun/archetypes/arrows3d.hpp +257 -0
- include/rerun/archetypes/asset3d.hpp +262 -0
- include/rerun/archetypes/asset_video.hpp +275 -0
- include/rerun/archetypes/bar_chart.hpp +261 -0
- include/rerun/archetypes/boxes2d.hpp +293 -0
- include/rerun/archetypes/boxes3d.hpp +369 -0
- include/rerun/archetypes/capsules3d.hpp +333 -0
- include/rerun/archetypes/clear.hpp +180 -0
- include/rerun/archetypes/depth_image.hpp +425 -0
- include/rerun/archetypes/ellipsoids3d.hpp +384 -0
- include/rerun/archetypes/encoded_image.hpp +250 -0
- include/rerun/archetypes/geo_line_strings.hpp +166 -0
- include/rerun/archetypes/geo_points.hpp +177 -0
- include/rerun/archetypes/graph_edges.hpp +152 -0
- include/rerun/archetypes/graph_nodes.hpp +206 -0
- include/rerun/archetypes/image.hpp +434 -0
- include/rerun/archetypes/instance_poses3d.hpp +221 -0
- include/rerun/archetypes/line_strips2d.hpp +289 -0
- include/rerun/archetypes/line_strips3d.hpp +270 -0
- include/rerun/archetypes/mesh3d.hpp +387 -0
- include/rerun/archetypes/pinhole.hpp +385 -0
- include/rerun/archetypes/points2d.hpp +333 -0
- include/rerun/archetypes/points3d.hpp +369 -0
- include/rerun/archetypes/recording_properties.hpp +132 -0
- include/rerun/archetypes/scalar.hpp +170 -0
- include/rerun/archetypes/scalars.hpp +153 -0
- include/rerun/archetypes/segmentation_image.hpp +305 -0
- include/rerun/archetypes/series_line.hpp +274 -0
- include/rerun/archetypes/series_lines.hpp +271 -0
- include/rerun/archetypes/series_point.hpp +265 -0
- include/rerun/archetypes/series_points.hpp +251 -0
- include/rerun/archetypes/tensor.hpp +213 -0
- include/rerun/archetypes/text_document.hpp +200 -0
- include/rerun/archetypes/text_log.hpp +211 -0
- include/rerun/archetypes/transform3d.hpp +925 -0
- include/rerun/archetypes/video_frame_reference.hpp +295 -0
- include/rerun/archetypes/view_coordinates.hpp +393 -0
- include/rerun/archetypes.hpp +43 -0
- include/rerun/arrow_utils.hpp +32 -0
- include/rerun/as_components.hpp +90 -0
- include/rerun/blueprint/archetypes/background.hpp +113 -0
- include/rerun/blueprint/archetypes/container_blueprint.hpp +259 -0
- include/rerun/blueprint/archetypes/dataframe_query.hpp +178 -0
- include/rerun/blueprint/archetypes/entity_behavior.hpp +130 -0
- include/rerun/blueprint/archetypes/force_center.hpp +115 -0
- include/rerun/blueprint/archetypes/force_collision_radius.hpp +141 -0
- include/rerun/blueprint/archetypes/force_link.hpp +136 -0
- include/rerun/blueprint/archetypes/force_many_body.hpp +124 -0
- include/rerun/blueprint/archetypes/force_position.hpp +132 -0
- include/rerun/blueprint/archetypes/line_grid3d.hpp +178 -0
- include/rerun/blueprint/archetypes/map_background.hpp +104 -0
- include/rerun/blueprint/archetypes/map_zoom.hpp +103 -0
- include/rerun/blueprint/archetypes/near_clip_plane.hpp +109 -0
- include/rerun/blueprint/archetypes/panel_blueprint.hpp +95 -0
- include/rerun/blueprint/archetypes/plot_legend.hpp +118 -0
- include/rerun/blueprint/archetypes/scalar_axis.hpp +116 -0
- include/rerun/blueprint/archetypes/tensor_scalar_mapping.hpp +146 -0
- include/rerun/blueprint/archetypes/tensor_slice_selection.hpp +167 -0
- include/rerun/blueprint/archetypes/tensor_view_fit.hpp +95 -0
- include/rerun/blueprint/archetypes/view_blueprint.hpp +170 -0
- include/rerun/blueprint/archetypes/view_contents.hpp +142 -0
- include/rerun/blueprint/archetypes/viewport_blueprint.hpp +200 -0
- include/rerun/blueprint/archetypes/visible_time_ranges.hpp +116 -0
- include/rerun/blueprint/archetypes/visual_bounds2d.hpp +109 -0
- include/rerun/blueprint/archetypes/visualizer_overrides.hpp +113 -0
- include/rerun/blueprint/archetypes.hpp +29 -0
- include/rerun/blueprint/components/active_tab.hpp +82 -0
- include/rerun/blueprint/components/apply_latest_at.hpp +79 -0
- include/rerun/blueprint/components/auto_layout.hpp +77 -0
- include/rerun/blueprint/components/auto_views.hpp +77 -0
- include/rerun/blueprint/components/background_kind.hpp +66 -0
- include/rerun/blueprint/components/column_share.hpp +78 -0
- include/rerun/blueprint/components/component_column_selector.hpp +81 -0
- include/rerun/blueprint/components/container_kind.hpp +65 -0
- include/rerun/blueprint/components/corner2d.hpp +64 -0
- include/rerun/blueprint/components/enabled.hpp +77 -0
- include/rerun/blueprint/components/filter_by_range.hpp +74 -0
- include/rerun/blueprint/components/filter_is_not_null.hpp +77 -0
- include/rerun/blueprint/components/force_distance.hpp +82 -0
- include/rerun/blueprint/components/force_iterations.hpp +82 -0
- include/rerun/blueprint/components/force_strength.hpp +82 -0
- include/rerun/blueprint/components/grid_columns.hpp +78 -0
- include/rerun/blueprint/components/grid_spacing.hpp +78 -0
- include/rerun/blueprint/components/included_content.hpp +86 -0
- include/rerun/blueprint/components/lock_range_during_zoom.hpp +82 -0
- include/rerun/blueprint/components/map_provider.hpp +64 -0
- include/rerun/blueprint/components/near_clip_plane.hpp +82 -0
- include/rerun/blueprint/components/panel_state.hpp +61 -0
- include/rerun/blueprint/components/query_expression.hpp +89 -0
- include/rerun/blueprint/components/root_container.hpp +77 -0
- include/rerun/blueprint/components/row_share.hpp +78 -0
- include/rerun/blueprint/components/selected_columns.hpp +76 -0
- include/rerun/blueprint/components/tensor_dimension_index_slider.hpp +90 -0
- include/rerun/blueprint/components/timeline_name.hpp +76 -0
- include/rerun/blueprint/components/view_class.hpp +76 -0
- include/rerun/blueprint/components/view_fit.hpp +61 -0
- include/rerun/blueprint/components/view_maximized.hpp +79 -0
- include/rerun/blueprint/components/view_origin.hpp +81 -0
- include/rerun/blueprint/components/viewer_recommendation_hash.hpp +82 -0
- include/rerun/blueprint/components/visible_time_range.hpp +77 -0
- include/rerun/blueprint/components/visual_bounds2d.hpp +74 -0
- include/rerun/blueprint/components/visualizer_override.hpp +86 -0
- include/rerun/blueprint/components/zoom_level.hpp +78 -0
- include/rerun/blueprint/components.hpp +41 -0
- include/rerun/blueprint/datatypes/component_column_selector.hpp +61 -0
- include/rerun/blueprint/datatypes/filter_by_range.hpp +59 -0
- include/rerun/blueprint/datatypes/filter_is_not_null.hpp +61 -0
- include/rerun/blueprint/datatypes/selected_columns.hpp +62 -0
- include/rerun/blueprint/datatypes/tensor_dimension_index_slider.hpp +63 -0
- include/rerun/blueprint/datatypes.hpp +9 -0
- include/rerun/c/arrow_c_data_interface.h +111 -0
- include/rerun/c/compiler_utils.h +10 -0
- include/rerun/c/rerun.h +627 -0
- include/rerun/c/sdk_info.h +28 -0
- include/rerun/collection.hpp +496 -0
- include/rerun/collection_adapter.hpp +43 -0
- include/rerun/collection_adapter_builtins.hpp +138 -0
- include/rerun/compiler_utils.hpp +61 -0
- include/rerun/component_batch.hpp +163 -0
- include/rerun/component_column.hpp +111 -0
- include/rerun/component_descriptor.hpp +142 -0
- include/rerun/component_type.hpp +35 -0
- include/rerun/components/aggregation_policy.hpp +76 -0
- include/rerun/components/albedo_factor.hpp +74 -0
- include/rerun/components/annotation_context.hpp +102 -0
- include/rerun/components/axis_length.hpp +74 -0
- include/rerun/components/blob.hpp +73 -0
- include/rerun/components/class_id.hpp +71 -0
- include/rerun/components/clear_is_recursive.hpp +75 -0
- include/rerun/components/color.hpp +99 -0
- include/rerun/components/colormap.hpp +99 -0
- include/rerun/components/depth_meter.hpp +84 -0
- include/rerun/components/draw_order.hpp +79 -0
- include/rerun/components/entity_path.hpp +83 -0
- include/rerun/components/fill_mode.hpp +72 -0
- include/rerun/components/fill_ratio.hpp +79 -0
- include/rerun/components/gamma_correction.hpp +80 -0
- include/rerun/components/geo_line_string.hpp +63 -0
- include/rerun/components/graph_edge.hpp +75 -0
- include/rerun/components/graph_node.hpp +79 -0
- include/rerun/components/graph_type.hpp +57 -0
- include/rerun/components/half_size2d.hpp +91 -0
- include/rerun/components/half_size3d.hpp +95 -0
- include/rerun/components/image_buffer.hpp +86 -0
- include/rerun/components/image_format.hpp +84 -0
- include/rerun/components/image_plane_distance.hpp +77 -0
- include/rerun/components/interactive.hpp +76 -0
- include/rerun/components/keypoint_id.hpp +74 -0
- include/rerun/components/lat_lon.hpp +89 -0
- include/rerun/components/length.hpp +77 -0
- include/rerun/components/line_strip2d.hpp +73 -0
- include/rerun/components/line_strip3d.hpp +73 -0
- include/rerun/components/magnification_filter.hpp +63 -0
- include/rerun/components/marker_shape.hpp +82 -0
- include/rerun/components/marker_size.hpp +74 -0
- include/rerun/components/media_type.hpp +157 -0
- include/rerun/components/name.hpp +83 -0
- include/rerun/components/opacity.hpp +77 -0
- include/rerun/components/pinhole_projection.hpp +94 -0
- include/rerun/components/plane3d.hpp +75 -0
- include/rerun/components/pose_rotation_axis_angle.hpp +73 -0
- include/rerun/components/pose_rotation_quat.hpp +71 -0
- include/rerun/components/pose_scale3d.hpp +102 -0
- include/rerun/components/pose_transform_mat3x3.hpp +87 -0
- include/rerun/components/pose_translation3d.hpp +96 -0
- include/rerun/components/position2d.hpp +86 -0
- include/rerun/components/position3d.hpp +90 -0
- include/rerun/components/radius.hpp +98 -0
- include/rerun/components/range1d.hpp +75 -0
- include/rerun/components/resolution.hpp +88 -0
- include/rerun/components/rotation_axis_angle.hpp +72 -0
- include/rerun/components/rotation_quat.hpp +71 -0
- include/rerun/components/scalar.hpp +76 -0
- include/rerun/components/scale3d.hpp +102 -0
- include/rerun/components/series_visible.hpp +76 -0
- include/rerun/components/show_labels.hpp +79 -0
- include/rerun/components/stroke_width.hpp +74 -0
- include/rerun/components/tensor_data.hpp +94 -0
- include/rerun/components/tensor_dimension_index_selection.hpp +77 -0
- include/rerun/components/tensor_height_dimension.hpp +71 -0
- include/rerun/components/tensor_width_dimension.hpp +71 -0
- include/rerun/components/texcoord2d.hpp +101 -0
- include/rerun/components/text.hpp +83 -0
- include/rerun/components/text_log_level.hpp +110 -0
- include/rerun/components/timestamp.hpp +76 -0
- include/rerun/components/transform_mat3x3.hpp +92 -0
- include/rerun/components/transform_relation.hpp +66 -0
- include/rerun/components/translation3d.hpp +96 -0
- include/rerun/components/triangle_indices.hpp +85 -0
- include/rerun/components/value_range.hpp +78 -0
- include/rerun/components/vector2d.hpp +92 -0
- include/rerun/components/vector3d.hpp +96 -0
- include/rerun/components/video_timestamp.hpp +120 -0
- include/rerun/components/view_coordinates.hpp +346 -0
- include/rerun/components/visible.hpp +74 -0
- include/rerun/components.hpp +77 -0
- include/rerun/config.hpp +52 -0
- include/rerun/datatypes/angle.hpp +76 -0
- include/rerun/datatypes/annotation_info.hpp +76 -0
- include/rerun/datatypes/blob.hpp +67 -0
- include/rerun/datatypes/bool.hpp +57 -0
- include/rerun/datatypes/channel_datatype.hpp +87 -0
- include/rerun/datatypes/class_description.hpp +92 -0
- include/rerun/datatypes/class_description_map_elem.hpp +69 -0
- include/rerun/datatypes/class_id.hpp +62 -0
- include/rerun/datatypes/color_model.hpp +68 -0
- include/rerun/datatypes/dvec2d.hpp +76 -0
- include/rerun/datatypes/entity_path.hpp +60 -0
- include/rerun/datatypes/float32.hpp +62 -0
- include/rerun/datatypes/float64.hpp +62 -0
- include/rerun/datatypes/image_format.hpp +107 -0
- include/rerun/datatypes/keypoint_id.hpp +63 -0
- include/rerun/datatypes/keypoint_pair.hpp +65 -0
- include/rerun/datatypes/mat3x3.hpp +105 -0
- include/rerun/datatypes/mat4x4.hpp +119 -0
- include/rerun/datatypes/pixel_format.hpp +142 -0
- include/rerun/datatypes/plane3d.hpp +60 -0
- include/rerun/datatypes/quaternion.hpp +110 -0
- include/rerun/datatypes/range1d.hpp +59 -0
- include/rerun/datatypes/range2d.hpp +55 -0
- include/rerun/datatypes/rgba32.hpp +94 -0
- include/rerun/datatypes/rotation_axis_angle.hpp +67 -0
- include/rerun/datatypes/tensor_buffer.hpp +529 -0
- include/rerun/datatypes/tensor_data.hpp +100 -0
- include/rerun/datatypes/tensor_dimension_index_selection.hpp +58 -0
- include/rerun/datatypes/tensor_dimension_selection.hpp +56 -0
- include/rerun/datatypes/time_int.hpp +62 -0
- include/rerun/datatypes/time_range.hpp +55 -0
- include/rerun/datatypes/time_range_boundary.hpp +175 -0
- include/rerun/datatypes/uint16.hpp +62 -0
- include/rerun/datatypes/uint32.hpp +62 -0
- include/rerun/datatypes/uint64.hpp +62 -0
- include/rerun/datatypes/utf8.hpp +76 -0
- include/rerun/datatypes/utf8pair.hpp +62 -0
- include/rerun/datatypes/uuid.hpp +60 -0
- include/rerun/datatypes/uvec2d.hpp +76 -0
- include/rerun/datatypes/uvec3d.hpp +80 -0
- include/rerun/datatypes/uvec4d.hpp +59 -0
- include/rerun/datatypes/vec2d.hpp +76 -0
- include/rerun/datatypes/vec3d.hpp +80 -0
- include/rerun/datatypes/vec4d.hpp +84 -0
- include/rerun/datatypes/video_timestamp.hpp +67 -0
- include/rerun/datatypes/view_coordinates.hpp +87 -0
- include/rerun/datatypes/visible_time_range.hpp +57 -0
- include/rerun/datatypes.hpp +51 -0
- include/rerun/demo_utils.hpp +75 -0
- include/rerun/entity_path.hpp +20 -0
- include/rerun/error.hpp +180 -0
- include/rerun/half.hpp +10 -0
- include/rerun/image_utils.hpp +187 -0
- include/rerun/indicator_component.hpp +59 -0
- include/rerun/loggable.hpp +54 -0
- include/rerun/recording_stream.hpp +960 -0
- include/rerun/rerun_sdk_export.hpp +25 -0
- include/rerun/result.hpp +86 -0
- include/rerun/rotation3d.hpp +33 -0
- include/rerun/sdk_info.hpp +20 -0
- include/rerun/spawn.hpp +21 -0
- include/rerun/spawn_options.hpp +57 -0
- include/rerun/string_utils.hpp +16 -0
- include/rerun/third_party/cxxopts.hpp +2198 -0
- include/rerun/time_column.hpp +288 -0
- include/rerun/timeline.hpp +38 -0
- include/rerun/type_traits.hpp +40 -0
- include/rerun.hpp +86 -0
- lib/cmake/axel/axel-config.cmake +45 -0
- lib/cmake/axel/axelTargets-release.cmake +19 -0
- lib/cmake/axel/axelTargets.cmake +108 -0
- lib/cmake/momentum/FindFbxSdk.cmake +115 -0
- lib/cmake/momentum/Findre2.cmake +52 -0
- lib/cmake/momentum/momentum-config.cmake +67 -0
- lib/cmake/momentum/momentumTargets-release.cmake +259 -0
- lib/cmake/momentum/momentumTargets.cmake +385 -0
- lib/cmake/rerun_sdk/rerun_sdkConfig.cmake +70 -0
- lib/cmake/rerun_sdk/rerun_sdkConfigVersion.cmake +83 -0
- lib/cmake/rerun_sdk/rerun_sdkTargets-release.cmake +19 -0
- lib/cmake/rerun_sdk/rerun_sdkTargets.cmake +108 -0
- lib/libarrow.a +0 -0
- lib/libarrow_bundled_dependencies.a +0 -0
- lib/libaxel.a +0 -0
- lib/libmomentum_app_utils.a +0 -0
- lib/libmomentum_character.a +0 -0
- lib/libmomentum_character_sequence_solver.a +0 -0
- lib/libmomentum_character_solver.a +0 -0
- lib/libmomentum_common.a +0 -0
- lib/libmomentum_diff_ik.a +0 -0
- lib/libmomentum_io.a +0 -0
- lib/libmomentum_io_common.a +0 -0
- lib/libmomentum_io_fbx.a +0 -0
- lib/libmomentum_io_gltf.a +0 -0
- lib/libmomentum_io_legacy_json.a +0 -0
- lib/libmomentum_io_marker.a +0 -0
- lib/libmomentum_io_motion.a +0 -0
- lib/libmomentum_io_shape.a +0 -0
- lib/libmomentum_io_skeleton.a +0 -0
- lib/libmomentum_io_urdf.a +0 -0
- lib/libmomentum_marker_tracker.a +0 -0
- lib/libmomentum_math.a +0 -0
- lib/libmomentum_online_qr.a +0 -0
- lib/libmomentum_process_markers.a +0 -0
- lib/libmomentum_rerun.a +0 -0
- lib/libmomentum_simd_constraints.a +0 -0
- lib/libmomentum_simd_generalized_loss.a +0 -0
- lib/libmomentum_skeleton.a +0 -0
- lib/libmomentum_solver.a +0 -0
- lib/librerun_c__macos_arm64.a +0 -0
- lib/librerun_sdk.a +0 -0
- pymomentum/axel.cpython-312-darwin.so +0 -0
- pymomentum/backend/__init__.py +16 -0
- pymomentum/backend/skel_state_backend.py +631 -0
- pymomentum/backend/trs_backend.py +889 -0
- pymomentum/backend/utils.py +224 -0
- pymomentum/geometry.cpython-312-darwin.so +0 -0
- pymomentum/marker_tracking.cpython-312-darwin.so +0 -0
- pymomentum/quaternion.py +740 -0
- pymomentum/skel_state.py +514 -0
- pymomentum/solver.cpython-312-darwin.so +0 -0
- pymomentum/solver2.cpython-312-darwin.so +0 -0
- pymomentum/torch/character.py +868 -0
- pymomentum/torch/parameter_limits.py +494 -0
- pymomentum/torch/utility.py +20 -0
- pymomentum/trs.py +535 -0
- pymomentum_cpu-0.1.93.post0.dist-info/METADATA +126 -0
- pymomentum_cpu-0.1.93.post0.dist-info/RECORD +517 -0
- pymomentum_cpu-0.1.93.post0.dist-info/WHEEL +5 -0
- pymomentum_cpu-0.1.93.post0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,221 @@
|
|
|
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/exception.h>
|
|
11
|
+
#include <momentum/math/transform.h>
|
|
12
|
+
|
|
13
|
+
#include <drjit/array.h>
|
|
14
|
+
#include <drjit/array_router.h>
|
|
15
|
+
#include <drjit/packet.h>
|
|
16
|
+
#include <drjit/util.h>
|
|
17
|
+
#include <Eigen/Core>
|
|
18
|
+
#include <Eigen/Geometry>
|
|
19
|
+
|
|
20
|
+
#define DRJIT_VERSION_GE(major, minor, patch) \
|
|
21
|
+
((DRJIT_VERSION_MAJOR > (major)) || \
|
|
22
|
+
(DRJIT_VERSION_MAJOR == (major) && DRJIT_VERSION_MINOR > (minor)) || \
|
|
23
|
+
(DRJIT_VERSION_MAJOR == (major) && DRJIT_VERSION_MINOR == (minor) && \
|
|
24
|
+
DRJIT_VERSION_PATCH >= (patch)))
|
|
25
|
+
|
|
26
|
+
// Utilities for writing cross-platform SIMD code.
|
|
27
|
+
// This currently uses the DrJit library for SIMD primitives.
|
|
28
|
+
|
|
29
|
+
namespace momentum {
|
|
30
|
+
|
|
31
|
+
inline constexpr size_t kAvxPacketSize = 8;
|
|
32
|
+
inline constexpr size_t kAvxAlignment = kAvxPacketSize * sizeof(float);
|
|
33
|
+
|
|
34
|
+
inline constexpr size_t kSimdPacketSize = drjit::DefaultSize;
|
|
35
|
+
inline constexpr size_t kSimdAlignment = kSimdPacketSize * sizeof(float);
|
|
36
|
+
|
|
37
|
+
template <typename T>
|
|
38
|
+
using Packet = drjit::Packet<T, kSimdPacketSize>;
|
|
39
|
+
|
|
40
|
+
using FloatP = Packet<float>;
|
|
41
|
+
using DoubleP = Packet<double>;
|
|
42
|
+
using IntP = Packet<int>;
|
|
43
|
+
|
|
44
|
+
template <typename T, int Dim>
|
|
45
|
+
using VectorP = drjit::Array<Packet<T>, Dim>;
|
|
46
|
+
|
|
47
|
+
template <typename T>
|
|
48
|
+
using Vector2P = VectorP<T, 2>;
|
|
49
|
+
|
|
50
|
+
template <typename T>
|
|
51
|
+
using Vector3P = VectorP<T, 3>;
|
|
52
|
+
|
|
53
|
+
using Vector2fP = Vector2P<float>;
|
|
54
|
+
using Vector3fP = Vector3P<float>;
|
|
55
|
+
|
|
56
|
+
using Vector2dP = Vector2P<double>;
|
|
57
|
+
using Vector3dP = Vector3P<double>;
|
|
58
|
+
|
|
59
|
+
/// Computes the offset required for the matrix data to meet the alignment requirement.
|
|
60
|
+
template <size_t Alignment>
|
|
61
|
+
[[nodiscard]] size_t computeOffset(const Eigen::Ref<Eigen::MatrixXf>& mat) {
|
|
62
|
+
constexpr size_t sizeOfScalar = sizeof(typename Eigen::MatrixXf::Scalar);
|
|
63
|
+
const size_t addressOffset =
|
|
64
|
+
Alignment / sizeOfScalar - (((size_t)mat.data() % Alignment) / sizeOfScalar);
|
|
65
|
+
|
|
66
|
+
// If the current alignment already meets the requirement, no offset is needed.
|
|
67
|
+
if (addressOffset == Alignment / sizeOfScalar) {
|
|
68
|
+
return 0;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return addressOffset;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/// Checks if the data of the matrix is aligned correctly.
|
|
75
|
+
template <size_t Alignment>
|
|
76
|
+
void checkAlignment(const Eigen::Ref<Eigen::MatrixXf>& mat, size_t offset = 0) {
|
|
77
|
+
MT_THROW_IF(
|
|
78
|
+
(uintptr_t(mat.data() + offset)) % Alignment != 0,
|
|
79
|
+
"Matrix ({}x{}, ptr: {}) is not aligned ({}) correctly.",
|
|
80
|
+
mat.rows(),
|
|
81
|
+
mat.cols(),
|
|
82
|
+
uintptr_t(mat.data()),
|
|
83
|
+
Alignment);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/// Calculates dot product of Eigen::Vector3f and 3-vector of packets.
|
|
87
|
+
///
|
|
88
|
+
/// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
|
|
89
|
+
/// Eigen::Vector3f.
|
|
90
|
+
/// @param[in] v1 A 3D vector of Eigen.
|
|
91
|
+
/// @param[in] v2 A 3-vector of packets.
|
|
92
|
+
template <typename Derived, typename S>
|
|
93
|
+
FloatP dot(const Eigen::MatrixBase<Derived>& v1, const Vector3P<S>& v2) {
|
|
94
|
+
return drjit::fmadd(v1.x(), v2.x(), drjit::fmadd(v1.y(), v2.y(), v1.z() * v2.z()));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/// Calculates dot product of Vector3P and Eigen::Vector3f.
|
|
98
|
+
///
|
|
99
|
+
/// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
|
|
100
|
+
/// Eigen::Vector3f.
|
|
101
|
+
/// @param[in] v1 A 3-vector of packets.
|
|
102
|
+
/// @param[in] v2 A 3D vector of Eigen.
|
|
103
|
+
template <typename Derived, typename S>
|
|
104
|
+
FloatP dot(const Vector3P<S>& v1, const Eigen::MatrixBase<Derived>& v2) {
|
|
105
|
+
return drjit::fmadd(v1.x(), v2.x(), drjit::fmadd(v1.y(), v2.y(), v1.z() * v2.z()));
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/// Calculates summation of Eigen::Vector3f and Vector3P
|
|
109
|
+
///
|
|
110
|
+
/// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
|
|
111
|
+
/// Eigen::Vector3f.
|
|
112
|
+
/// @param[in] v1 A 3D vector of Eigen.
|
|
113
|
+
/// @param[in] v2 A 3-vector of packets.
|
|
114
|
+
template <typename S, typename Derived>
|
|
115
|
+
Vector3P<S> operator+(const Eigen::MatrixBase<Derived>& v1, const Vector3P<S>& v2) {
|
|
116
|
+
return {v1.x() + v2.x(), v1.y() + v2.y(), v1.z() + v2.z()};
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/// Calculates summation of Vector3P and Eigen::Vector3f
|
|
120
|
+
///
|
|
121
|
+
/// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
|
|
122
|
+
/// Eigen::Vector3f.
|
|
123
|
+
/// @param[in] v1 A 3-vector of packets.
|
|
124
|
+
/// @param[in] v2 A 3D vector of Eigen.
|
|
125
|
+
template <typename S, typename Derived>
|
|
126
|
+
Vector3P<S> operator+(const Vector3P<S>& v1, const Eigen::MatrixBase<Derived>& v2) {
|
|
127
|
+
return {v1.x() + v2.x(), v1.y() + v2.y(), v1.z() + v2.z()};
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/// Calculates subtraction of Eigen::Vector3f and Vector3P
|
|
131
|
+
///
|
|
132
|
+
/// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
|
|
133
|
+
/// Eigen::Vector3f.
|
|
134
|
+
/// @param[in] v1 A 3D vector of Eigen.
|
|
135
|
+
/// @param[in] v2 A 3-vector of packets.
|
|
136
|
+
template <typename S, typename Derived>
|
|
137
|
+
Vector3P<S> operator-(const Eigen::MatrixBase<Derived>& v1, const Vector3P<S>& v2) {
|
|
138
|
+
return {v1.x() - v2.x(), v1.y() - v2.y(), v1.z() - v2.z()};
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/// Calculates subtraction of Vector3P and Eigen::Vector3f
|
|
142
|
+
///
|
|
143
|
+
/// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
|
|
144
|
+
/// Eigen::Vector3f.
|
|
145
|
+
/// @param[in] v1 A 3-vector of packets.
|
|
146
|
+
/// @param[in] v2 A 3D vector of Eigen.
|
|
147
|
+
template <typename S, typename Derived>
|
|
148
|
+
Vector3P<S> operator-(const Vector3P<S>& v1, const Eigen::MatrixBase<Derived>& v2) {
|
|
149
|
+
return {v1.x() - v2.x(), v1.y() - v2.y(), v1.z() - v2.z()};
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/// Calculates multiplication of quaternion and each 3x1 vector in packet
|
|
153
|
+
///
|
|
154
|
+
/// @param[in] q A quaternion.
|
|
155
|
+
/// @param[in] vec A 3-vector of packets.
|
|
156
|
+
template <typename S>
|
|
157
|
+
Vector3P<S> operator*(const Eigen::Quaternion<S>& q, const Vector3P<S>& vec) {
|
|
158
|
+
return q * vec;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/// Calculates multiplication of 3x3 matrix and each 3x1 vector in packet
|
|
162
|
+
///
|
|
163
|
+
/// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
|
|
164
|
+
/// Eigen::Matrix3f.
|
|
165
|
+
/// @param[in] xf A 3x3 matrix.
|
|
166
|
+
/// @param[in] vec A 3-vector of packets.
|
|
167
|
+
template <typename S, typename Derived>
|
|
168
|
+
Vector3P<S> operator*(const Eigen::MatrixBase<Derived>& xf, const Vector3P<S>& vec) {
|
|
169
|
+
return Vector3P<S>{
|
|
170
|
+
momentum::dot(xf.row(0), vec), momentum::dot(xf.row(1), vec), momentum::dot(xf.row(2), vec)};
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/// Calculates affine transformation on each 3x1 vector in packet
|
|
174
|
+
///
|
|
175
|
+
/// @param[in] xf An affine transformation matrix.
|
|
176
|
+
/// @param[in] vec A 3-vector of packets.
|
|
177
|
+
template <typename S>
|
|
178
|
+
Vector3P<S> operator*(const Eigen::Transform<S, 3, Eigen::Affine>& xf, const Vector3P<S>& vec) {
|
|
179
|
+
return momentum::operator+(momentum::operator*(xf.linear(), vec), xf.translation());
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/// Calculates transformation on each 3x1 vector in packet using momentum::Transform
|
|
183
|
+
///
|
|
184
|
+
/// @param[in] xf A momentum transform.
|
|
185
|
+
/// @param[in] vec A 3-vector of packets.
|
|
186
|
+
template <typename S>
|
|
187
|
+
Vector3P<S> operator*(const TransformT<S>& xf, const Vector3P<S>& vec) {
|
|
188
|
+
return momentum::operator+(momentum::operator*(xf.toLinear(), vec), xf.translation);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/// Calculates cross product of Eigen::Vector3f and Vector3P
|
|
192
|
+
///
|
|
193
|
+
/// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
|
|
194
|
+
/// Eigen::Vector3f.
|
|
195
|
+
/// @param[in] v1 A 3D vector of Eigen.
|
|
196
|
+
/// @param[in] v2 A 3-vector of packets.
|
|
197
|
+
template <typename S, typename Derived>
|
|
198
|
+
Vector3P<S> cross(const Eigen::MatrixBase<Derived>& v1, const Vector3P<S>& v2) {
|
|
199
|
+
return {
|
|
200
|
+
drjit::fmsub(v1.y(), v2.z(), v1.z() * v2.y()),
|
|
201
|
+
drjit::fmsub(v1.z(), v2.x(), v1.x() * v2.z()),
|
|
202
|
+
drjit::fmsub(v1.x(), v2.y(), v1.y() * v2.x()),
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/// Calculates cross product of Vector3P and Eigen::Vector3f
|
|
207
|
+
///
|
|
208
|
+
/// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
|
|
209
|
+
/// Eigen::Vector3f.
|
|
210
|
+
/// @param[in] v1 A 3-vector of packets.
|
|
211
|
+
/// @param[in] v2 A 3D vector of Eigen.
|
|
212
|
+
template <typename S, typename Derived>
|
|
213
|
+
Vector3P<S> cross(const Vector3P<S>& v1, const Eigen::MatrixBase<Derived>& v2) {
|
|
214
|
+
return {
|
|
215
|
+
drjit::fmsub(v1.y(), v2.z(), v1.z() * v2.y()),
|
|
216
|
+
drjit::fmsub(v1.z(), v2.x(), v1.x() * v2.z()),
|
|
217
|
+
drjit::fmsub(v1.x(), v2.y(), v1.y() * v2.x()),
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
} // namespace momentum
|
|
@@ -0,0 +1,131 @@
|
|
|
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
|
+
// This file is @generated by gen_fwd.py
|
|
9
|
+
// Do not edit this file directly, instead update gen_fwd_input.toml and run:
|
|
10
|
+
// buck run @arvr/mode/platform010/opt //arvr/libraries/momentum:gen_fwd
|
|
11
|
+
|
|
12
|
+
#pragma once
|
|
13
|
+
|
|
14
|
+
#include <memory>
|
|
15
|
+
|
|
16
|
+
namespace momentum {
|
|
17
|
+
|
|
18
|
+
struct SolverOptions;
|
|
19
|
+
|
|
20
|
+
using SolverOptions_p = ::std::shared_ptr<SolverOptions>;
|
|
21
|
+
using SolverOptions_u = ::std::unique_ptr<SolverOptions>;
|
|
22
|
+
using SolverOptions_w = ::std::weak_ptr<SolverOptions>;
|
|
23
|
+
using SolverOptions_const_p = ::std::shared_ptr<const SolverOptions>;
|
|
24
|
+
using SolverOptions_const_u = ::std::unique_ptr<const SolverOptions>;
|
|
25
|
+
using SolverOptions_const_w = ::std::weak_ptr<const SolverOptions>;
|
|
26
|
+
|
|
27
|
+
struct GaussNewtonSolverOptions;
|
|
28
|
+
|
|
29
|
+
using GaussNewtonSolverOptions_p = ::std::shared_ptr<GaussNewtonSolverOptions>;
|
|
30
|
+
using GaussNewtonSolverOptions_u = ::std::unique_ptr<GaussNewtonSolverOptions>;
|
|
31
|
+
using GaussNewtonSolverOptions_w = ::std::weak_ptr<GaussNewtonSolverOptions>;
|
|
32
|
+
using GaussNewtonSolverOptions_const_p = ::std::shared_ptr<const GaussNewtonSolverOptions>;
|
|
33
|
+
using GaussNewtonSolverOptions_const_u = ::std::unique_ptr<const GaussNewtonSolverOptions>;
|
|
34
|
+
using GaussNewtonSolverOptions_const_w = ::std::weak_ptr<const GaussNewtonSolverOptions>;
|
|
35
|
+
|
|
36
|
+
template <typename T>
|
|
37
|
+
class SolverT;
|
|
38
|
+
using Solver = SolverT<float>;
|
|
39
|
+
using Solverd = SolverT<double>;
|
|
40
|
+
|
|
41
|
+
using Solver_p = ::std::shared_ptr<Solver>;
|
|
42
|
+
using Solver_u = ::std::unique_ptr<Solver>;
|
|
43
|
+
using Solver_w = ::std::weak_ptr<Solver>;
|
|
44
|
+
using Solver_const_p = ::std::shared_ptr<const Solver>;
|
|
45
|
+
using Solver_const_u = ::std::unique_ptr<const Solver>;
|
|
46
|
+
using Solver_const_w = ::std::weak_ptr<const Solver>;
|
|
47
|
+
|
|
48
|
+
using Solverd_p = ::std::shared_ptr<Solverd>;
|
|
49
|
+
using Solverd_u = ::std::unique_ptr<Solverd>;
|
|
50
|
+
using Solverd_w = ::std::weak_ptr<Solverd>;
|
|
51
|
+
using Solverd_const_p = ::std::shared_ptr<const Solverd>;
|
|
52
|
+
using Solverd_const_u = ::std::unique_ptr<const Solverd>;
|
|
53
|
+
using Solverd_const_w = ::std::weak_ptr<const Solverd>;
|
|
54
|
+
|
|
55
|
+
template <typename T>
|
|
56
|
+
class SolverFunctionT;
|
|
57
|
+
using SolverFunction = SolverFunctionT<float>;
|
|
58
|
+
using SolverFunctiond = SolverFunctionT<double>;
|
|
59
|
+
|
|
60
|
+
using SolverFunction_p = ::std::shared_ptr<SolverFunction>;
|
|
61
|
+
using SolverFunction_u = ::std::unique_ptr<SolverFunction>;
|
|
62
|
+
using SolverFunction_w = ::std::weak_ptr<SolverFunction>;
|
|
63
|
+
using SolverFunction_const_p = ::std::shared_ptr<const SolverFunction>;
|
|
64
|
+
using SolverFunction_const_u = ::std::unique_ptr<const SolverFunction>;
|
|
65
|
+
using SolverFunction_const_w = ::std::weak_ptr<const SolverFunction>;
|
|
66
|
+
|
|
67
|
+
using SolverFunctiond_p = ::std::shared_ptr<SolverFunctiond>;
|
|
68
|
+
using SolverFunctiond_u = ::std::unique_ptr<SolverFunctiond>;
|
|
69
|
+
using SolverFunctiond_w = ::std::weak_ptr<SolverFunctiond>;
|
|
70
|
+
using SolverFunctiond_const_p = ::std::shared_ptr<const SolverFunctiond>;
|
|
71
|
+
using SolverFunctiond_const_u = ::std::unique_ptr<const SolverFunctiond>;
|
|
72
|
+
using SolverFunctiond_const_w = ::std::weak_ptr<const SolverFunctiond>;
|
|
73
|
+
|
|
74
|
+
template <typename T>
|
|
75
|
+
class GaussNewtonSolverT;
|
|
76
|
+
using GaussNewtonSolver = GaussNewtonSolverT<float>;
|
|
77
|
+
using GaussNewtonSolverd = GaussNewtonSolverT<double>;
|
|
78
|
+
|
|
79
|
+
using GaussNewtonSolver_p = ::std::shared_ptr<GaussNewtonSolver>;
|
|
80
|
+
using GaussNewtonSolver_u = ::std::unique_ptr<GaussNewtonSolver>;
|
|
81
|
+
using GaussNewtonSolver_w = ::std::weak_ptr<GaussNewtonSolver>;
|
|
82
|
+
using GaussNewtonSolver_const_p = ::std::shared_ptr<const GaussNewtonSolver>;
|
|
83
|
+
using GaussNewtonSolver_const_u = ::std::unique_ptr<const GaussNewtonSolver>;
|
|
84
|
+
using GaussNewtonSolver_const_w = ::std::weak_ptr<const GaussNewtonSolver>;
|
|
85
|
+
|
|
86
|
+
using GaussNewtonSolverd_p = ::std::shared_ptr<GaussNewtonSolverd>;
|
|
87
|
+
using GaussNewtonSolverd_u = ::std::unique_ptr<GaussNewtonSolverd>;
|
|
88
|
+
using GaussNewtonSolverd_w = ::std::weak_ptr<GaussNewtonSolverd>;
|
|
89
|
+
using GaussNewtonSolverd_const_p = ::std::shared_ptr<const GaussNewtonSolverd>;
|
|
90
|
+
using GaussNewtonSolverd_const_u = ::std::unique_ptr<const GaussNewtonSolverd>;
|
|
91
|
+
using GaussNewtonSolverd_const_w = ::std::weak_ptr<const GaussNewtonSolverd>;
|
|
92
|
+
|
|
93
|
+
template <typename T>
|
|
94
|
+
class GradientDescentSolverT;
|
|
95
|
+
using GradientDescentSolver = GradientDescentSolverT<float>;
|
|
96
|
+
using GradientDescentSolverd = GradientDescentSolverT<double>;
|
|
97
|
+
|
|
98
|
+
using GradientDescentSolver_p = ::std::shared_ptr<GradientDescentSolver>;
|
|
99
|
+
using GradientDescentSolver_u = ::std::unique_ptr<GradientDescentSolver>;
|
|
100
|
+
using GradientDescentSolver_w = ::std::weak_ptr<GradientDescentSolver>;
|
|
101
|
+
using GradientDescentSolver_const_p = ::std::shared_ptr<const GradientDescentSolver>;
|
|
102
|
+
using GradientDescentSolver_const_u = ::std::unique_ptr<const GradientDescentSolver>;
|
|
103
|
+
using GradientDescentSolver_const_w = ::std::weak_ptr<const GradientDescentSolver>;
|
|
104
|
+
|
|
105
|
+
using GradientDescentSolverd_p = ::std::shared_ptr<GradientDescentSolverd>;
|
|
106
|
+
using GradientDescentSolverd_u = ::std::unique_ptr<GradientDescentSolverd>;
|
|
107
|
+
using GradientDescentSolverd_w = ::std::weak_ptr<GradientDescentSolverd>;
|
|
108
|
+
using GradientDescentSolverd_const_p = ::std::shared_ptr<const GradientDescentSolverd>;
|
|
109
|
+
using GradientDescentSolverd_const_u = ::std::unique_ptr<const GradientDescentSolverd>;
|
|
110
|
+
using GradientDescentSolverd_const_w = ::std::weak_ptr<const GradientDescentSolverd>;
|
|
111
|
+
|
|
112
|
+
template <typename T>
|
|
113
|
+
class SubsetGaussNewtonSolverT;
|
|
114
|
+
using SubsetGaussNewtonSolver = SubsetGaussNewtonSolverT<float>;
|
|
115
|
+
using SubsetGaussNewtonSolverd = SubsetGaussNewtonSolverT<double>;
|
|
116
|
+
|
|
117
|
+
using SubsetGaussNewtonSolver_p = ::std::shared_ptr<SubsetGaussNewtonSolver>;
|
|
118
|
+
using SubsetGaussNewtonSolver_u = ::std::unique_ptr<SubsetGaussNewtonSolver>;
|
|
119
|
+
using SubsetGaussNewtonSolver_w = ::std::weak_ptr<SubsetGaussNewtonSolver>;
|
|
120
|
+
using SubsetGaussNewtonSolver_const_p = ::std::shared_ptr<const SubsetGaussNewtonSolver>;
|
|
121
|
+
using SubsetGaussNewtonSolver_const_u = ::std::unique_ptr<const SubsetGaussNewtonSolver>;
|
|
122
|
+
using SubsetGaussNewtonSolver_const_w = ::std::weak_ptr<const SubsetGaussNewtonSolver>;
|
|
123
|
+
|
|
124
|
+
using SubsetGaussNewtonSolverd_p = ::std::shared_ptr<SubsetGaussNewtonSolverd>;
|
|
125
|
+
using SubsetGaussNewtonSolverd_u = ::std::unique_ptr<SubsetGaussNewtonSolverd>;
|
|
126
|
+
using SubsetGaussNewtonSolverd_w = ::std::weak_ptr<SubsetGaussNewtonSolverd>;
|
|
127
|
+
using SubsetGaussNewtonSolverd_const_p = ::std::shared_ptr<const SubsetGaussNewtonSolverd>;
|
|
128
|
+
using SubsetGaussNewtonSolverd_const_u = ::std::unique_ptr<const SubsetGaussNewtonSolverd>;
|
|
129
|
+
using SubsetGaussNewtonSolverd_const_w = ::std::weak_ptr<const SubsetGaussNewtonSolverd>;
|
|
130
|
+
|
|
131
|
+
} // namespace momentum
|
|
@@ -0,0 +1,136 @@
|
|
|
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/solver/fwd.h>
|
|
11
|
+
#include <momentum/solver/solver.h>
|
|
12
|
+
|
|
13
|
+
namespace momentum {
|
|
14
|
+
|
|
15
|
+
/// Extended options specific to the Gauss-Newton optimization algorithm
|
|
16
|
+
struct GaussNewtonSolverOptions : SolverOptions {
|
|
17
|
+
/// Damping parameter added to Hessian diagonal for numerical stability; see
|
|
18
|
+
/// https://en.wikipedia.org/wiki/Levenberg%E2%80%93Marquardt_algorithm
|
|
19
|
+
///
|
|
20
|
+
/// Higher values improve stability but may slow convergence
|
|
21
|
+
float regularization = 0.05f;
|
|
22
|
+
|
|
23
|
+
/// Enables backtracking line search to ensure error reduction at each step
|
|
24
|
+
bool doLineSearch = false;
|
|
25
|
+
|
|
26
|
+
/// Uses pre-computed JᵀJ and JᵀR from the solver function
|
|
27
|
+
///
|
|
28
|
+
/// Can improve performance for problems with specialized structure
|
|
29
|
+
bool useBlockJtJ = false;
|
|
30
|
+
|
|
31
|
+
/// Directly computes sparse JᵀJ without dense intermediate representation
|
|
32
|
+
///
|
|
33
|
+
/// Only effective when useBlockJtJ is true
|
|
34
|
+
bool directSparseJtJ = false;
|
|
35
|
+
|
|
36
|
+
/// Parameter count threshold for switching to sparse matrix operations
|
|
37
|
+
///
|
|
38
|
+
/// Problems with more parameters than this threshold will use sparse solvers
|
|
39
|
+
size_t sparseMatrixThreshold = 200;
|
|
40
|
+
|
|
41
|
+
/// Default constructor
|
|
42
|
+
GaussNewtonSolverOptions() = default;
|
|
43
|
+
|
|
44
|
+
/// Construct from base solver options while preserving Gauss-Newton defaults
|
|
45
|
+
/* implicit */ GaussNewtonSolverOptions(const SolverOptions& baseOptions)
|
|
46
|
+
: SolverOptions(baseOptions) {}
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/// Implementation of the Gauss-Newton optimization algorithm
|
|
50
|
+
///
|
|
51
|
+
/// Minimizes non-linear least squares problems by iteratively approximating
|
|
52
|
+
/// the objective function with a quadratic model based on first derivatives.
|
|
53
|
+
/// Supports both dense and sparse matrix operations depending on problem size.
|
|
54
|
+
template <typename T>
|
|
55
|
+
class GaussNewtonSolverT : public SolverT<T> {
|
|
56
|
+
public:
|
|
57
|
+
/// Creates a solver with the specified options and function to optimize
|
|
58
|
+
GaussNewtonSolverT(const SolverOptions& options, SolverFunctionT<T>* solver);
|
|
59
|
+
|
|
60
|
+
/// Returns "GaussNewton" as the solver name
|
|
61
|
+
[[nodiscard]] std::string_view getName() const override;
|
|
62
|
+
|
|
63
|
+
/// Updates solver configuration, handling both base and Gauss-Newton specific options
|
|
64
|
+
void setOptions(const SolverOptions& options) final;
|
|
65
|
+
|
|
66
|
+
protected:
|
|
67
|
+
/// Performs one iteration of the Gauss-Newton algorithm
|
|
68
|
+
///
|
|
69
|
+
/// Delegates to either doIterationDense or doIterationSparse based on problem size
|
|
70
|
+
void doIteration() final;
|
|
71
|
+
|
|
72
|
+
/// Initializes solver state before optimization begins
|
|
73
|
+
void initializeSolver() final;
|
|
74
|
+
|
|
75
|
+
private:
|
|
76
|
+
/// Performs one iteration using dense matrix operations
|
|
77
|
+
void doIterationDense();
|
|
78
|
+
|
|
79
|
+
/// Performs one iteration using sparse matrix operations
|
|
80
|
+
void doIterationSparse();
|
|
81
|
+
|
|
82
|
+
/// Updates parameters using the computed step direction
|
|
83
|
+
///
|
|
84
|
+
/// Optionally performs line search if enabled
|
|
85
|
+
void updateParameters(Eigen::VectorX<T>& delta);
|
|
86
|
+
|
|
87
|
+
/// Whether to use pre-computed JᵀJ and JᵀR from solver function
|
|
88
|
+
bool useBlockJtJ_{};
|
|
89
|
+
|
|
90
|
+
/// Whether to directly compute sparse JᵀJ without dense intermediate
|
|
91
|
+
bool directSparseJtJ_{};
|
|
92
|
+
|
|
93
|
+
/// Parameter count threshold for switching to sparse operations
|
|
94
|
+
size_t sparseMatrixThreshold_{200};
|
|
95
|
+
|
|
96
|
+
/// Whether the solver has been initialized
|
|
97
|
+
bool initialized_;
|
|
98
|
+
|
|
99
|
+
/// Whether to perform line search during parameter updates
|
|
100
|
+
bool doLineSearch_;
|
|
101
|
+
|
|
102
|
+
/// Sparse Cholesky factorization solver
|
|
103
|
+
Eigen::SimplicialLLT<Eigen::SparseMatrix<T>, Eigen::Lower> lltSolver_;
|
|
104
|
+
|
|
105
|
+
/// Sparse approximation of Hessian matrix (JᵀJ)
|
|
106
|
+
Eigen::SparseMatrix<T> JtJ_;
|
|
107
|
+
|
|
108
|
+
/// Sparse identity matrix for regularization
|
|
109
|
+
Eigen::SparseMatrix<T> D_;
|
|
110
|
+
|
|
111
|
+
/// Jacobian matrix for dense operations
|
|
112
|
+
Eigen::MatrixX<T> jacobian_;
|
|
113
|
+
|
|
114
|
+
/// Dense approximation of Hessian matrix (JᵀJ)
|
|
115
|
+
Eigen::MatrixX<T> hessianApprox_;
|
|
116
|
+
|
|
117
|
+
/// Gradient vector (JᵀR)
|
|
118
|
+
Eigen::VectorX<T> JtR_;
|
|
119
|
+
|
|
120
|
+
/// Residual vector
|
|
121
|
+
Eigen::VectorX<T> residual_;
|
|
122
|
+
|
|
123
|
+
/// Dense Cholesky factorization solver
|
|
124
|
+
Eigen::LLT<Eigen::MatrixX<T>> llt_;
|
|
125
|
+
|
|
126
|
+
/// Base regularization parameter
|
|
127
|
+
T regularization_;
|
|
128
|
+
|
|
129
|
+
/// Current regularization value (may be adjusted during iterations)
|
|
130
|
+
T alpha_;
|
|
131
|
+
|
|
132
|
+
/// Whether the current iteration uses dense operations
|
|
133
|
+
bool denseIteration_{};
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
} // namespace momentum
|
|
@@ -0,0 +1,65 @@
|
|
|
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/solver/fwd.h>
|
|
11
|
+
#include <momentum/solver/solver.h>
|
|
12
|
+
|
|
13
|
+
namespace momentum {
|
|
14
|
+
|
|
15
|
+
/// Extended options for the Gradient Descent optimization algorithm
|
|
16
|
+
///
|
|
17
|
+
/// Provides configuration specific to the first-order gradient descent method
|
|
18
|
+
struct GradientDescentSolverOptions : SolverOptions {
|
|
19
|
+
/// Step size for parameter updates during optimization
|
|
20
|
+
///
|
|
21
|
+
/// Controls how far to move in the direction of the negative gradient
|
|
22
|
+
float learningRate = 0.01f;
|
|
23
|
+
|
|
24
|
+
/// Default constructor
|
|
25
|
+
GradientDescentSolverOptions() = default;
|
|
26
|
+
|
|
27
|
+
/// Construct from base solver options while preserving Gradient Descent defaults
|
|
28
|
+
/* implicit */ GradientDescentSolverOptions(const SolverOptions& baseOptions)
|
|
29
|
+
: SolverOptions(baseOptions) {}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/// First-order optimization algorithm that follows the negative gradient
|
|
33
|
+
///
|
|
34
|
+
/// Implements the standard gradient descent method which iteratively
|
|
35
|
+
/// updates parameters by moving in the direction of steepest descent
|
|
36
|
+
template <typename T>
|
|
37
|
+
class GradientDescentSolverT : public SolverT<T> {
|
|
38
|
+
public:
|
|
39
|
+
/// Creates a solver with the specified options and function to optimize
|
|
40
|
+
GradientDescentSolverT(const SolverOptions& options, SolverFunctionT<T>* solver);
|
|
41
|
+
|
|
42
|
+
/// Returns "GradientDescent" as the solver name
|
|
43
|
+
[[nodiscard]] std::string_view getName() const override;
|
|
44
|
+
|
|
45
|
+
/// Updates solver configuration, handling both base and Gradient Descent specific options
|
|
46
|
+
void setOptions(const SolverOptions& options) final;
|
|
47
|
+
|
|
48
|
+
protected:
|
|
49
|
+
/// Performs one iteration of the gradient descent algorithm
|
|
50
|
+
///
|
|
51
|
+
/// Computes the gradient and updates parameters by moving in the negative gradient direction
|
|
52
|
+
void doIteration() final;
|
|
53
|
+
|
|
54
|
+
/// Initializes solver state before optimization begins
|
|
55
|
+
void initializeSolver() final;
|
|
56
|
+
|
|
57
|
+
private:
|
|
58
|
+
/// Gradient vector at current parameter values
|
|
59
|
+
Eigen::VectorX<T> gradient_;
|
|
60
|
+
|
|
61
|
+
/// Step size for parameter updates
|
|
62
|
+
float learningRate_;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
} // namespace momentum
|