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