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.

Files changed (512) hide show
  1. include/axel/BoundingBox.h +58 -0
  2. include/axel/Bvh.h +708 -0
  3. include/axel/BvhBase.h +75 -0
  4. include/axel/BvhCommon.h +43 -0
  5. include/axel/BvhEmbree.h +86 -0
  6. include/axel/BvhFactory.h +34 -0
  7. include/axel/Checks.h +21 -0
  8. include/axel/DualContouring.h +79 -0
  9. include/axel/KdTree.h +199 -0
  10. include/axel/Log.h +22 -0
  11. include/axel/MeshToSdf.h +123 -0
  12. include/axel/Profile.h +64 -0
  13. include/axel/Ray.h +45 -0
  14. include/axel/SignedDistanceField.h +248 -0
  15. include/axel/SimdKdTree.h +515 -0
  16. include/axel/TriBvh.h +157 -0
  17. include/axel/TriBvhEmbree.h +57 -0
  18. include/axel/common/Constants.h +27 -0
  19. include/axel/common/Types.h +21 -0
  20. include/axel/common/VectorizationTypes.h +58 -0
  21. include/axel/math/BoundingBoxUtils.h +54 -0
  22. include/axel/math/ContinuousCollisionDetection.h +48 -0
  23. include/axel/math/CoplanarityCheck.h +30 -0
  24. include/axel/math/EdgeEdgeDistance.h +31 -0
  25. include/axel/math/MeshHoleFilling.h +117 -0
  26. include/axel/math/PointTriangleProjection.h +34 -0
  27. include/axel/math/PointTriangleProjectionDefinitions.h +209 -0
  28. include/axel/math/RayTriangleIntersection.h +36 -0
  29. include/momentum/character/blend_shape.h +91 -0
  30. include/momentum/character/blend_shape_base.h +70 -0
  31. include/momentum/character/blend_shape_skinning.h +96 -0
  32. include/momentum/character/character.h +272 -0
  33. include/momentum/character/character_state.h +108 -0
  34. include/momentum/character/character_utility.h +128 -0
  35. include/momentum/character/collision_geometry.h +80 -0
  36. include/momentum/character/collision_geometry_state.h +130 -0
  37. include/momentum/character/fwd.h +262 -0
  38. include/momentum/character/inverse_parameter_transform.h +58 -0
  39. include/momentum/character/joint.h +82 -0
  40. include/momentum/character/joint_state.h +241 -0
  41. include/momentum/character/linear_skinning.h +139 -0
  42. include/momentum/character/locator.h +82 -0
  43. include/momentum/character/locator_state.h +43 -0
  44. include/momentum/character/marker.h +48 -0
  45. include/momentum/character/mesh_state.h +71 -0
  46. include/momentum/character/parameter_limits.h +144 -0
  47. include/momentum/character/parameter_transform.h +250 -0
  48. include/momentum/character/pose_shape.h +65 -0
  49. include/momentum/character/skeleton.h +85 -0
  50. include/momentum/character/skeleton_state.h +181 -0
  51. include/momentum/character/skeleton_utility.h +38 -0
  52. include/momentum/character/skin_weights.h +67 -0
  53. include/momentum/character/skinned_locator.h +80 -0
  54. include/momentum/character/types.h +202 -0
  55. include/momentum/character_sequence_solver/fwd.h +200 -0
  56. include/momentum/character_sequence_solver/model_parameters_sequence_error_function.h +65 -0
  57. include/momentum/character_sequence_solver/multipose_solver.h +65 -0
  58. include/momentum/character_sequence_solver/multipose_solver_function.h +82 -0
  59. include/momentum/character_sequence_solver/sequence_error_function.h +104 -0
  60. include/momentum/character_sequence_solver/sequence_solver.h +144 -0
  61. include/momentum/character_sequence_solver/sequence_solver_function.h +134 -0
  62. include/momentum/character_sequence_solver/state_sequence_error_function.h +109 -0
  63. include/momentum/character_sequence_solver/vertex_sequence_error_function.h +128 -0
  64. include/momentum/character_solver/aim_error_function.h +112 -0
  65. include/momentum/character_solver/collision_error_function.h +92 -0
  66. include/momentum/character_solver/collision_error_function_stateless.h +75 -0
  67. include/momentum/character_solver/constraint_error_function-inl.h +324 -0
  68. include/momentum/character_solver/constraint_error_function.h +248 -0
  69. include/momentum/character_solver/distance_error_function.h +77 -0
  70. include/momentum/character_solver/error_function_utils.h +60 -0
  71. include/momentum/character_solver/fixed_axis_error_function.h +139 -0
  72. include/momentum/character_solver/fwd.h +924 -0
  73. include/momentum/character_solver/gauss_newton_solver_qr.h +64 -0
  74. include/momentum/character_solver/limit_error_function.h +57 -0
  75. include/momentum/character_solver/model_parameters_error_function.h +64 -0
  76. include/momentum/character_solver/normal_error_function.h +73 -0
  77. include/momentum/character_solver/orientation_error_function.h +74 -0
  78. include/momentum/character_solver/plane_error_function.h +102 -0
  79. include/momentum/character_solver/point_triangle_vertex_error_function.h +141 -0
  80. include/momentum/character_solver/pose_prior_error_function.h +80 -0
  81. include/momentum/character_solver/position_error_function.h +75 -0
  82. include/momentum/character_solver/projection_error_function.h +93 -0
  83. include/momentum/character_solver/simd_collision_error_function.h +99 -0
  84. include/momentum/character_solver/simd_normal_error_function.h +157 -0
  85. include/momentum/character_solver/simd_plane_error_function.h +164 -0
  86. include/momentum/character_solver/simd_position_error_function.h +165 -0
  87. include/momentum/character_solver/skeleton_error_function.h +151 -0
  88. include/momentum/character_solver/skeleton_solver_function.h +94 -0
  89. include/momentum/character_solver/skinned_locator_error_function.h +166 -0
  90. include/momentum/character_solver/skinned_locator_triangle_error_function.h +146 -0
  91. include/momentum/character_solver/skinning_weight_iterator.h +80 -0
  92. include/momentum/character_solver/state_error_function.h +94 -0
  93. include/momentum/character_solver/transform_pose.h +80 -0
  94. include/momentum/character_solver/trust_region_qr.h +80 -0
  95. include/momentum/character_solver/vertex_error_function.h +155 -0
  96. include/momentum/character_solver/vertex_projection_error_function.h +126 -0
  97. include/momentum/character_solver/vertex_vertex_distance_error_function.h +151 -0
  98. include/momentum/common/aligned.h +155 -0
  99. include/momentum/common/checks.h +27 -0
  100. include/momentum/common/exception.h +70 -0
  101. include/momentum/common/filesystem.h +20 -0
  102. include/momentum/common/fwd.h +27 -0
  103. include/momentum/common/log.h +173 -0
  104. include/momentum/common/log_channel.h +17 -0
  105. include/momentum/common/memory.h +71 -0
  106. include/momentum/common/profile.h +79 -0
  107. include/momentum/common/progress_bar.h +37 -0
  108. include/momentum/common/string.h +52 -0
  109. include/momentum/diff_ik/ceres_utility.h +73 -0
  110. include/momentum/diff_ik/fully_differentiable_body_ik.h +58 -0
  111. include/momentum/diff_ik/fully_differentiable_distance_error_function.h +69 -0
  112. include/momentum/diff_ik/fully_differentiable_motion_error_function.h +46 -0
  113. include/momentum/diff_ik/fully_differentiable_orientation_error_function.h +114 -0
  114. include/momentum/diff_ik/fully_differentiable_pose_prior_error_function.h +76 -0
  115. include/momentum/diff_ik/fully_differentiable_position_error_function.h +138 -0
  116. include/momentum/diff_ik/fully_differentiable_projection_error_function.h +65 -0
  117. include/momentum/diff_ik/fully_differentiable_skeleton_error_function.h +160 -0
  118. include/momentum/diff_ik/fully_differentiable_state_error_function.h +54 -0
  119. include/momentum/diff_ik/fwd.h +385 -0
  120. include/momentum/diff_ik/union_error_function.h +67 -0
  121. include/momentum/gui/rerun/eigen_adapters.h +70 -0
  122. include/momentum/gui/rerun/logger.h +102 -0
  123. include/momentum/gui/rerun/logging_redirect.h +27 -0
  124. include/momentum/io/character_io.h +56 -0
  125. include/momentum/io/common/gsl_utils.h +50 -0
  126. include/momentum/io/common/stream_utils.h +65 -0
  127. include/momentum/io/fbx/fbx_io.h +109 -0
  128. include/momentum/io/fbx/fbx_memory_stream.h +66 -0
  129. include/momentum/io/fbx/openfbx_loader.h +49 -0
  130. include/momentum/io/fbx/polygon_data.h +60 -0
  131. include/momentum/io/gltf/gltf_builder.h +132 -0
  132. include/momentum/io/gltf/gltf_file_format.h +19 -0
  133. include/momentum/io/gltf/gltf_io.h +148 -0
  134. include/momentum/io/gltf/utils/accessor_utils.h +299 -0
  135. include/momentum/io/gltf/utils/coordinate_utils.h +60 -0
  136. include/momentum/io/gltf/utils/json_utils.h +102 -0
  137. include/momentum/io/legacy_json/legacy_json_io.h +70 -0
  138. include/momentum/io/marker/c3d_io.h +29 -0
  139. include/momentum/io/marker/conversions.h +57 -0
  140. include/momentum/io/marker/coordinate_system.h +30 -0
  141. include/momentum/io/marker/marker_io.h +54 -0
  142. include/momentum/io/marker/trc_io.h +27 -0
  143. include/momentum/io/motion/mmo_io.h +97 -0
  144. include/momentum/io/shape/blend_shape_io.h +70 -0
  145. include/momentum/io/shape/pose_shape_io.h +21 -0
  146. include/momentum/io/skeleton/locator_io.h +41 -0
  147. include/momentum/io/skeleton/mppca_io.h +26 -0
  148. include/momentum/io/skeleton/parameter_limits_io.h +25 -0
  149. include/momentum/io/skeleton/parameter_transform_io.h +41 -0
  150. include/momentum/io/skeleton/parameters_io.h +20 -0
  151. include/momentum/io/urdf/urdf_io.h +26 -0
  152. include/momentum/io/usd/usd_io.h +36 -0
  153. include/momentum/marker_tracking/app_utils.h +62 -0
  154. include/momentum/marker_tracking/marker_tracker.h +213 -0
  155. include/momentum/marker_tracking/process_markers.h +58 -0
  156. include/momentum/marker_tracking/tracker_utils.h +90 -0
  157. include/momentum/math/constants.h +82 -0
  158. include/momentum/math/covariance_matrix.h +84 -0
  159. include/momentum/math/fmt_eigen.h +23 -0
  160. include/momentum/math/fwd.h +132 -0
  161. include/momentum/math/generalized_loss.h +61 -0
  162. include/momentum/math/intersection.h +32 -0
  163. include/momentum/math/mesh.h +84 -0
  164. include/momentum/math/mppca.h +67 -0
  165. include/momentum/math/online_householder_qr.h +516 -0
  166. include/momentum/math/random-inl.h +404 -0
  167. include/momentum/math/random.h +310 -0
  168. include/momentum/math/simd_generalized_loss.h +40 -0
  169. include/momentum/math/transform.h +229 -0
  170. include/momentum/math/types.h +461 -0
  171. include/momentum/math/utility.h +251 -0
  172. include/momentum/rasterizer/camera.h +453 -0
  173. include/momentum/rasterizer/fwd.h +102 -0
  174. include/momentum/rasterizer/geometry.h +83 -0
  175. include/momentum/rasterizer/image.h +18 -0
  176. include/momentum/rasterizer/rasterizer.h +583 -0
  177. include/momentum/rasterizer/tensor.h +140 -0
  178. include/momentum/rasterizer/utility.h +268 -0
  179. include/momentum/simd/simd.h +221 -0
  180. include/momentum/solver/fwd.h +131 -0
  181. include/momentum/solver/gauss_newton_solver.h +136 -0
  182. include/momentum/solver/gradient_descent_solver.h +65 -0
  183. include/momentum/solver/solver.h +155 -0
  184. include/momentum/solver/solver_function.h +126 -0
  185. include/momentum/solver/subset_gauss_newton_solver.h +109 -0
  186. include/rerun/archetypes/annotation_context.hpp +157 -0
  187. include/rerun/archetypes/arrows2d.hpp +271 -0
  188. include/rerun/archetypes/arrows3d.hpp +257 -0
  189. include/rerun/archetypes/asset3d.hpp +262 -0
  190. include/rerun/archetypes/asset_video.hpp +275 -0
  191. include/rerun/archetypes/bar_chart.hpp +261 -0
  192. include/rerun/archetypes/boxes2d.hpp +293 -0
  193. include/rerun/archetypes/boxes3d.hpp +369 -0
  194. include/rerun/archetypes/capsules3d.hpp +333 -0
  195. include/rerun/archetypes/clear.hpp +180 -0
  196. include/rerun/archetypes/depth_image.hpp +425 -0
  197. include/rerun/archetypes/ellipsoids3d.hpp +384 -0
  198. include/rerun/archetypes/encoded_image.hpp +250 -0
  199. include/rerun/archetypes/geo_line_strings.hpp +166 -0
  200. include/rerun/archetypes/geo_points.hpp +177 -0
  201. include/rerun/archetypes/graph_edges.hpp +152 -0
  202. include/rerun/archetypes/graph_nodes.hpp +206 -0
  203. include/rerun/archetypes/image.hpp +434 -0
  204. include/rerun/archetypes/instance_poses3d.hpp +221 -0
  205. include/rerun/archetypes/line_strips2d.hpp +289 -0
  206. include/rerun/archetypes/line_strips3d.hpp +270 -0
  207. include/rerun/archetypes/mesh3d.hpp +387 -0
  208. include/rerun/archetypes/pinhole.hpp +385 -0
  209. include/rerun/archetypes/points2d.hpp +333 -0
  210. include/rerun/archetypes/points3d.hpp +369 -0
  211. include/rerun/archetypes/recording_properties.hpp +132 -0
  212. include/rerun/archetypes/scalar.hpp +170 -0
  213. include/rerun/archetypes/scalars.hpp +153 -0
  214. include/rerun/archetypes/segmentation_image.hpp +305 -0
  215. include/rerun/archetypes/series_line.hpp +274 -0
  216. include/rerun/archetypes/series_lines.hpp +271 -0
  217. include/rerun/archetypes/series_point.hpp +265 -0
  218. include/rerun/archetypes/series_points.hpp +251 -0
  219. include/rerun/archetypes/tensor.hpp +213 -0
  220. include/rerun/archetypes/text_document.hpp +200 -0
  221. include/rerun/archetypes/text_log.hpp +211 -0
  222. include/rerun/archetypes/transform3d.hpp +925 -0
  223. include/rerun/archetypes/video_frame_reference.hpp +295 -0
  224. include/rerun/archetypes/view_coordinates.hpp +393 -0
  225. include/rerun/archetypes.hpp +43 -0
  226. include/rerun/arrow_utils.hpp +32 -0
  227. include/rerun/as_components.hpp +90 -0
  228. include/rerun/blueprint/archetypes/background.hpp +113 -0
  229. include/rerun/blueprint/archetypes/container_blueprint.hpp +259 -0
  230. include/rerun/blueprint/archetypes/dataframe_query.hpp +178 -0
  231. include/rerun/blueprint/archetypes/entity_behavior.hpp +130 -0
  232. include/rerun/blueprint/archetypes/force_center.hpp +115 -0
  233. include/rerun/blueprint/archetypes/force_collision_radius.hpp +141 -0
  234. include/rerun/blueprint/archetypes/force_link.hpp +136 -0
  235. include/rerun/blueprint/archetypes/force_many_body.hpp +124 -0
  236. include/rerun/blueprint/archetypes/force_position.hpp +132 -0
  237. include/rerun/blueprint/archetypes/line_grid3d.hpp +178 -0
  238. include/rerun/blueprint/archetypes/map_background.hpp +104 -0
  239. include/rerun/blueprint/archetypes/map_zoom.hpp +103 -0
  240. include/rerun/blueprint/archetypes/near_clip_plane.hpp +109 -0
  241. include/rerun/blueprint/archetypes/panel_blueprint.hpp +95 -0
  242. include/rerun/blueprint/archetypes/plot_legend.hpp +118 -0
  243. include/rerun/blueprint/archetypes/scalar_axis.hpp +116 -0
  244. include/rerun/blueprint/archetypes/tensor_scalar_mapping.hpp +146 -0
  245. include/rerun/blueprint/archetypes/tensor_slice_selection.hpp +167 -0
  246. include/rerun/blueprint/archetypes/tensor_view_fit.hpp +95 -0
  247. include/rerun/blueprint/archetypes/view_blueprint.hpp +170 -0
  248. include/rerun/blueprint/archetypes/view_contents.hpp +142 -0
  249. include/rerun/blueprint/archetypes/viewport_blueprint.hpp +200 -0
  250. include/rerun/blueprint/archetypes/visible_time_ranges.hpp +116 -0
  251. include/rerun/blueprint/archetypes/visual_bounds2d.hpp +109 -0
  252. include/rerun/blueprint/archetypes/visualizer_overrides.hpp +113 -0
  253. include/rerun/blueprint/archetypes.hpp +29 -0
  254. include/rerun/blueprint/components/active_tab.hpp +82 -0
  255. include/rerun/blueprint/components/apply_latest_at.hpp +79 -0
  256. include/rerun/blueprint/components/auto_layout.hpp +77 -0
  257. include/rerun/blueprint/components/auto_views.hpp +77 -0
  258. include/rerun/blueprint/components/background_kind.hpp +66 -0
  259. include/rerun/blueprint/components/column_share.hpp +78 -0
  260. include/rerun/blueprint/components/component_column_selector.hpp +81 -0
  261. include/rerun/blueprint/components/container_kind.hpp +65 -0
  262. include/rerun/blueprint/components/corner2d.hpp +64 -0
  263. include/rerun/blueprint/components/enabled.hpp +77 -0
  264. include/rerun/blueprint/components/filter_by_range.hpp +74 -0
  265. include/rerun/blueprint/components/filter_is_not_null.hpp +77 -0
  266. include/rerun/blueprint/components/force_distance.hpp +82 -0
  267. include/rerun/blueprint/components/force_iterations.hpp +82 -0
  268. include/rerun/blueprint/components/force_strength.hpp +82 -0
  269. include/rerun/blueprint/components/grid_columns.hpp +78 -0
  270. include/rerun/blueprint/components/grid_spacing.hpp +78 -0
  271. include/rerun/blueprint/components/included_content.hpp +86 -0
  272. include/rerun/blueprint/components/lock_range_during_zoom.hpp +82 -0
  273. include/rerun/blueprint/components/map_provider.hpp +64 -0
  274. include/rerun/blueprint/components/near_clip_plane.hpp +82 -0
  275. include/rerun/blueprint/components/panel_state.hpp +61 -0
  276. include/rerun/blueprint/components/query_expression.hpp +89 -0
  277. include/rerun/blueprint/components/root_container.hpp +77 -0
  278. include/rerun/blueprint/components/row_share.hpp +78 -0
  279. include/rerun/blueprint/components/selected_columns.hpp +76 -0
  280. include/rerun/blueprint/components/tensor_dimension_index_slider.hpp +90 -0
  281. include/rerun/blueprint/components/timeline_name.hpp +76 -0
  282. include/rerun/blueprint/components/view_class.hpp +76 -0
  283. include/rerun/blueprint/components/view_fit.hpp +61 -0
  284. include/rerun/blueprint/components/view_maximized.hpp +79 -0
  285. include/rerun/blueprint/components/view_origin.hpp +81 -0
  286. include/rerun/blueprint/components/viewer_recommendation_hash.hpp +82 -0
  287. include/rerun/blueprint/components/visible_time_range.hpp +77 -0
  288. include/rerun/blueprint/components/visual_bounds2d.hpp +74 -0
  289. include/rerun/blueprint/components/visualizer_override.hpp +86 -0
  290. include/rerun/blueprint/components/zoom_level.hpp +78 -0
  291. include/rerun/blueprint/components.hpp +41 -0
  292. include/rerun/blueprint/datatypes/component_column_selector.hpp +61 -0
  293. include/rerun/blueprint/datatypes/filter_by_range.hpp +59 -0
  294. include/rerun/blueprint/datatypes/filter_is_not_null.hpp +61 -0
  295. include/rerun/blueprint/datatypes/selected_columns.hpp +62 -0
  296. include/rerun/blueprint/datatypes/tensor_dimension_index_slider.hpp +63 -0
  297. include/rerun/blueprint/datatypes.hpp +9 -0
  298. include/rerun/c/arrow_c_data_interface.h +111 -0
  299. include/rerun/c/compiler_utils.h +10 -0
  300. include/rerun/c/rerun.h +627 -0
  301. include/rerun/c/sdk_info.h +28 -0
  302. include/rerun/collection.hpp +496 -0
  303. include/rerun/collection_adapter.hpp +43 -0
  304. include/rerun/collection_adapter_builtins.hpp +138 -0
  305. include/rerun/compiler_utils.hpp +61 -0
  306. include/rerun/component_batch.hpp +163 -0
  307. include/rerun/component_column.hpp +111 -0
  308. include/rerun/component_descriptor.hpp +142 -0
  309. include/rerun/component_type.hpp +35 -0
  310. include/rerun/components/aggregation_policy.hpp +76 -0
  311. include/rerun/components/albedo_factor.hpp +74 -0
  312. include/rerun/components/annotation_context.hpp +102 -0
  313. include/rerun/components/axis_length.hpp +74 -0
  314. include/rerun/components/blob.hpp +73 -0
  315. include/rerun/components/class_id.hpp +71 -0
  316. include/rerun/components/clear_is_recursive.hpp +75 -0
  317. include/rerun/components/color.hpp +99 -0
  318. include/rerun/components/colormap.hpp +99 -0
  319. include/rerun/components/depth_meter.hpp +84 -0
  320. include/rerun/components/draw_order.hpp +79 -0
  321. include/rerun/components/entity_path.hpp +83 -0
  322. include/rerun/components/fill_mode.hpp +72 -0
  323. include/rerun/components/fill_ratio.hpp +79 -0
  324. include/rerun/components/gamma_correction.hpp +80 -0
  325. include/rerun/components/geo_line_string.hpp +63 -0
  326. include/rerun/components/graph_edge.hpp +75 -0
  327. include/rerun/components/graph_node.hpp +79 -0
  328. include/rerun/components/graph_type.hpp +57 -0
  329. include/rerun/components/half_size2d.hpp +91 -0
  330. include/rerun/components/half_size3d.hpp +95 -0
  331. include/rerun/components/image_buffer.hpp +86 -0
  332. include/rerun/components/image_format.hpp +84 -0
  333. include/rerun/components/image_plane_distance.hpp +77 -0
  334. include/rerun/components/interactive.hpp +76 -0
  335. include/rerun/components/keypoint_id.hpp +74 -0
  336. include/rerun/components/lat_lon.hpp +89 -0
  337. include/rerun/components/length.hpp +77 -0
  338. include/rerun/components/line_strip2d.hpp +73 -0
  339. include/rerun/components/line_strip3d.hpp +73 -0
  340. include/rerun/components/magnification_filter.hpp +63 -0
  341. include/rerun/components/marker_shape.hpp +82 -0
  342. include/rerun/components/marker_size.hpp +74 -0
  343. include/rerun/components/media_type.hpp +157 -0
  344. include/rerun/components/name.hpp +83 -0
  345. include/rerun/components/opacity.hpp +77 -0
  346. include/rerun/components/pinhole_projection.hpp +94 -0
  347. include/rerun/components/plane3d.hpp +75 -0
  348. include/rerun/components/pose_rotation_axis_angle.hpp +73 -0
  349. include/rerun/components/pose_rotation_quat.hpp +71 -0
  350. include/rerun/components/pose_scale3d.hpp +102 -0
  351. include/rerun/components/pose_transform_mat3x3.hpp +87 -0
  352. include/rerun/components/pose_translation3d.hpp +96 -0
  353. include/rerun/components/position2d.hpp +86 -0
  354. include/rerun/components/position3d.hpp +90 -0
  355. include/rerun/components/radius.hpp +98 -0
  356. include/rerun/components/range1d.hpp +75 -0
  357. include/rerun/components/resolution.hpp +88 -0
  358. include/rerun/components/rotation_axis_angle.hpp +72 -0
  359. include/rerun/components/rotation_quat.hpp +71 -0
  360. include/rerun/components/scalar.hpp +76 -0
  361. include/rerun/components/scale3d.hpp +102 -0
  362. include/rerun/components/series_visible.hpp +76 -0
  363. include/rerun/components/show_labels.hpp +79 -0
  364. include/rerun/components/stroke_width.hpp +74 -0
  365. include/rerun/components/tensor_data.hpp +94 -0
  366. include/rerun/components/tensor_dimension_index_selection.hpp +77 -0
  367. include/rerun/components/tensor_height_dimension.hpp +71 -0
  368. include/rerun/components/tensor_width_dimension.hpp +71 -0
  369. include/rerun/components/texcoord2d.hpp +101 -0
  370. include/rerun/components/text.hpp +83 -0
  371. include/rerun/components/text_log_level.hpp +110 -0
  372. include/rerun/components/timestamp.hpp +76 -0
  373. include/rerun/components/transform_mat3x3.hpp +92 -0
  374. include/rerun/components/transform_relation.hpp +66 -0
  375. include/rerun/components/translation3d.hpp +96 -0
  376. include/rerun/components/triangle_indices.hpp +85 -0
  377. include/rerun/components/value_range.hpp +78 -0
  378. include/rerun/components/vector2d.hpp +92 -0
  379. include/rerun/components/vector3d.hpp +96 -0
  380. include/rerun/components/video_timestamp.hpp +120 -0
  381. include/rerun/components/view_coordinates.hpp +346 -0
  382. include/rerun/components/visible.hpp +74 -0
  383. include/rerun/components.hpp +77 -0
  384. include/rerun/config.hpp +52 -0
  385. include/rerun/datatypes/angle.hpp +76 -0
  386. include/rerun/datatypes/annotation_info.hpp +76 -0
  387. include/rerun/datatypes/blob.hpp +67 -0
  388. include/rerun/datatypes/bool.hpp +57 -0
  389. include/rerun/datatypes/channel_datatype.hpp +87 -0
  390. include/rerun/datatypes/class_description.hpp +92 -0
  391. include/rerun/datatypes/class_description_map_elem.hpp +69 -0
  392. include/rerun/datatypes/class_id.hpp +62 -0
  393. include/rerun/datatypes/color_model.hpp +68 -0
  394. include/rerun/datatypes/dvec2d.hpp +76 -0
  395. include/rerun/datatypes/entity_path.hpp +60 -0
  396. include/rerun/datatypes/float32.hpp +62 -0
  397. include/rerun/datatypes/float64.hpp +62 -0
  398. include/rerun/datatypes/image_format.hpp +107 -0
  399. include/rerun/datatypes/keypoint_id.hpp +63 -0
  400. include/rerun/datatypes/keypoint_pair.hpp +65 -0
  401. include/rerun/datatypes/mat3x3.hpp +105 -0
  402. include/rerun/datatypes/mat4x4.hpp +119 -0
  403. include/rerun/datatypes/pixel_format.hpp +142 -0
  404. include/rerun/datatypes/plane3d.hpp +60 -0
  405. include/rerun/datatypes/quaternion.hpp +110 -0
  406. include/rerun/datatypes/range1d.hpp +59 -0
  407. include/rerun/datatypes/range2d.hpp +55 -0
  408. include/rerun/datatypes/rgba32.hpp +94 -0
  409. include/rerun/datatypes/rotation_axis_angle.hpp +67 -0
  410. include/rerun/datatypes/tensor_buffer.hpp +529 -0
  411. include/rerun/datatypes/tensor_data.hpp +100 -0
  412. include/rerun/datatypes/tensor_dimension_index_selection.hpp +58 -0
  413. include/rerun/datatypes/tensor_dimension_selection.hpp +56 -0
  414. include/rerun/datatypes/time_int.hpp +62 -0
  415. include/rerun/datatypes/time_range.hpp +55 -0
  416. include/rerun/datatypes/time_range_boundary.hpp +175 -0
  417. include/rerun/datatypes/uint16.hpp +62 -0
  418. include/rerun/datatypes/uint32.hpp +62 -0
  419. include/rerun/datatypes/uint64.hpp +62 -0
  420. include/rerun/datatypes/utf8.hpp +76 -0
  421. include/rerun/datatypes/utf8pair.hpp +62 -0
  422. include/rerun/datatypes/uuid.hpp +60 -0
  423. include/rerun/datatypes/uvec2d.hpp +76 -0
  424. include/rerun/datatypes/uvec3d.hpp +80 -0
  425. include/rerun/datatypes/uvec4d.hpp +59 -0
  426. include/rerun/datatypes/vec2d.hpp +76 -0
  427. include/rerun/datatypes/vec3d.hpp +80 -0
  428. include/rerun/datatypes/vec4d.hpp +84 -0
  429. include/rerun/datatypes/video_timestamp.hpp +67 -0
  430. include/rerun/datatypes/view_coordinates.hpp +87 -0
  431. include/rerun/datatypes/visible_time_range.hpp +57 -0
  432. include/rerun/datatypes.hpp +51 -0
  433. include/rerun/demo_utils.hpp +75 -0
  434. include/rerun/entity_path.hpp +20 -0
  435. include/rerun/error.hpp +180 -0
  436. include/rerun/half.hpp +10 -0
  437. include/rerun/image_utils.hpp +187 -0
  438. include/rerun/indicator_component.hpp +59 -0
  439. include/rerun/loggable.hpp +54 -0
  440. include/rerun/recording_stream.hpp +960 -0
  441. include/rerun/rerun_sdk_export.hpp +25 -0
  442. include/rerun/result.hpp +86 -0
  443. include/rerun/rotation3d.hpp +33 -0
  444. include/rerun/sdk_info.hpp +20 -0
  445. include/rerun/spawn.hpp +21 -0
  446. include/rerun/spawn_options.hpp +57 -0
  447. include/rerun/string_utils.hpp +16 -0
  448. include/rerun/third_party/cxxopts.hpp +2198 -0
  449. include/rerun/time_column.hpp +288 -0
  450. include/rerun/timeline.hpp +38 -0
  451. include/rerun/type_traits.hpp +40 -0
  452. include/rerun.hpp +86 -0
  453. lib/cmake/axel/axel-config.cmake +45 -0
  454. lib/cmake/axel/axelTargets-release.cmake +19 -0
  455. lib/cmake/axel/axelTargets.cmake +108 -0
  456. lib/cmake/momentum/Findre2.cmake +52 -0
  457. lib/cmake/momentum/momentum-config.cmake +67 -0
  458. lib/cmake/momentum/momentumTargets-release.cmake +259 -0
  459. lib/cmake/momentum/momentumTargets.cmake +377 -0
  460. lib/cmake/rerun_sdk/rerun_sdkConfig.cmake +70 -0
  461. lib/cmake/rerun_sdk/rerun_sdkConfigVersion.cmake +83 -0
  462. lib/cmake/rerun_sdk/rerun_sdkTargets-release.cmake +19 -0
  463. lib/cmake/rerun_sdk/rerun_sdkTargets.cmake +108 -0
  464. lib/libarrow.a +0 -0
  465. lib/libarrow_bundled_dependencies.a +0 -0
  466. lib/libaxel.a +0 -0
  467. lib/libmomentum_app_utils.a +0 -0
  468. lib/libmomentum_character.a +0 -0
  469. lib/libmomentum_character_sequence_solver.a +0 -0
  470. lib/libmomentum_character_solver.a +0 -0
  471. lib/libmomentum_common.a +0 -0
  472. lib/libmomentum_diff_ik.a +0 -0
  473. lib/libmomentum_io.a +0 -0
  474. lib/libmomentum_io_common.a +0 -0
  475. lib/libmomentum_io_fbx.a +0 -0
  476. lib/libmomentum_io_gltf.a +0 -0
  477. lib/libmomentum_io_legacy_json.a +0 -0
  478. lib/libmomentum_io_marker.a +0 -0
  479. lib/libmomentum_io_motion.a +0 -0
  480. lib/libmomentum_io_shape.a +0 -0
  481. lib/libmomentum_io_skeleton.a +0 -0
  482. lib/libmomentum_io_urdf.a +0 -0
  483. lib/libmomentum_marker_tracker.a +0 -0
  484. lib/libmomentum_math.a +0 -0
  485. lib/libmomentum_online_qr.a +0 -0
  486. lib/libmomentum_process_markers.a +0 -0
  487. lib/libmomentum_rerun.a +0 -0
  488. lib/libmomentum_simd_constraints.a +0 -0
  489. lib/libmomentum_simd_generalized_loss.a +0 -0
  490. lib/libmomentum_skeleton.a +0 -0
  491. lib/libmomentum_solver.a +0 -0
  492. lib/librerun_c__macos_arm64.a +0 -0
  493. lib/librerun_sdk.a +0 -0
  494. pymomentum/axel.cpython-312-darwin.so +0 -0
  495. pymomentum/backend/__init__.py +16 -0
  496. pymomentum/backend/skel_state_backend.py +614 -0
  497. pymomentum/backend/trs_backend.py +871 -0
  498. pymomentum/backend/utils.py +224 -0
  499. pymomentum/geometry.cpython-312-darwin.so +0 -0
  500. pymomentum/marker_tracking.cpython-312-darwin.so +0 -0
  501. pymomentum/quaternion.py +740 -0
  502. pymomentum/skel_state.py +514 -0
  503. pymomentum/solver.cpython-312-darwin.so +0 -0
  504. pymomentum/solver2.cpython-312-darwin.so +0 -0
  505. pymomentum/torch/character.py +809 -0
  506. pymomentum/torch/parameter_limits.py +494 -0
  507. pymomentum/torch/utility.py +20 -0
  508. pymomentum/trs.py +535 -0
  509. pymomentum_cpu-0.1.77.post26.dist-info/METADATA +208 -0
  510. pymomentum_cpu-0.1.77.post26.dist-info/RECORD +512 -0
  511. pymomentum_cpu-0.1.77.post26.dist-info/WHEEL +5 -0
  512. pymomentum_cpu-0.1.77.post26.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,496 @@
1
+ #pragma once
2
+
3
+ #include <algorithm>
4
+ #include <cassert>
5
+ #include <cstdint>
6
+ #include <cstring> // std::memset
7
+ #include <utility>
8
+ #include <vector>
9
+
10
+ #include "collection.hpp"
11
+ #include "collection_adapter.hpp"
12
+ #include "compiler_utils.hpp"
13
+
14
+ namespace rerun {
15
+ /// Type of ownership of a collection's data.
16
+ ///
17
+ /// User access to this is typically only needed for debugging and testing.
18
+ enum class CollectionOwnership {
19
+ /// The collection does not own the data and only has a pointer and a size.
20
+ Borrowed,
21
+
22
+ /// The collection batch owns the data via an std::vector.
23
+ VectorOwned,
24
+ };
25
+
26
+ /// Generic collection of elements that are roughly contiguous in memory.
27
+ ///
28
+ /// The most notable feature of the `rerun::Collection` is that its data may be either **owned** or **borrowed**:
29
+ /// * Borrowed: ⚠️ If data is borrowed it *must* outlive its source ⚠️
30
+ /// (in particular, the pointer to the source mustn't invalidate)
31
+ /// * Owned: Owned data is copied into an internal std::vector
32
+ ///
33
+ /// Collections are either filled explicitly using `Collection::borrow` &`Collection::take_ownership`
34
+ /// or (most commonly in user code) implicitly using the `CollectionAdapter` trait
35
+ /// (see documentation for `CollectionAdapter` for more information on how data can be adapted).
36
+ ///
37
+ /// ⚠️ To ensure that passed data is not destroyed, move it into the collection using `std::move`.
38
+ ///
39
+ /// Other than being assignable, collections are generally immutable:
40
+ /// there is no mutable data access in order to not violate the contract with the data lender
41
+ /// and changes in size are not possible.
42
+ ///
43
+ /// ## Implementation notes:
44
+ ///
45
+ /// Does intentionally not implement copy construction since for the owned case this may
46
+ /// be expensive. Typically, there should be no need to copy rerun collections, so this more
47
+ /// than likely indicates a bug inside the Rerun SDK.
48
+ template <typename TElement>
49
+ class Collection {
50
+ public:
51
+ /// Type of the elements in the collection.
52
+ ///
53
+ /// Note that calling this `value_type` makes it compatible with the STL.
54
+ using value_type = TElement;
55
+
56
+ /// Type of an adapter given an input container type.
57
+ ///
58
+ /// Note that the "container" passed may also be a single element of something.
59
+ /// The only thing relevant is that there's an Adapter for it.
60
+ template <typename TContainer>
61
+ using Adapter = CollectionAdapter<
62
+ TElement, std::remove_cv_t<std::remove_reference_t<TContainer>>,
63
+ std::enable_if_t<true>>;
64
+
65
+ /// Creates a new empty collection.
66
+ Collection() : ownership(CollectionOwnership::Borrowed) {
67
+ storage.borrowed.data = nullptr;
68
+ storage.borrowed.num_instances = 0;
69
+ }
70
+
71
+ /// Construct using a `CollectionAdapter` for the given input type.
72
+ template <
73
+ typename TContainer, //
74
+ // Avoid conflicting with the copy/move constructor.
75
+ // We could implement this also with an adapter, but this might confuse trait checks like `std::is_copy_constructible`.
76
+ typename = std::enable_if_t<
77
+ !std::is_same_v<std::remove_reference_t<TContainer>, Collection<TElement>>> //
78
+ >
79
+ Collection(TContainer&& input)
80
+ : Collection(Adapter<TContainer>()(std::forward<TContainer>(input))) {}
81
+
82
+ /// Copy constructor.
83
+ ///
84
+ /// If the data is owned, this will copy the data.
85
+ /// If the data is borrowed, this will copy the borrow,
86
+ /// meaning there's now (at least) two collections borrowing the same data.
87
+ Collection(const Collection<TElement>& other) : ownership(other.ownership) {
88
+ switch (other.ownership) {
89
+ case CollectionOwnership::Borrowed: {
90
+ storage.borrowed = other.storage.borrowed;
91
+ break;
92
+ }
93
+
94
+ case CollectionOwnership::VectorOwned: {
95
+ new (&storage.vector_owned) std::vector<TElement>(other.storage.vector_owned);
96
+ break;
97
+ }
98
+
99
+ default:
100
+ assert(false && "unreachable");
101
+ }
102
+ }
103
+
104
+ /// Copy assignment.
105
+ ///
106
+ /// If the data is owned, this will copy the data.
107
+ /// If the data is borrowed, this will copy the borrow,
108
+ /// meaning there's now (at least) two collections borrowing the same data.
109
+ void operator=(const Collection<TElement>& other) {
110
+ this->~Collection<TElement>();
111
+ new (this) Collection(other);
112
+ }
113
+
114
+ /// Move constructor.
115
+ Collection(Collection<TElement>&& other) : Collection() {
116
+ swap(other);
117
+ }
118
+
119
+ /// Move assignment.
120
+ void operator=(Collection<TElement>&& other) {
121
+ // Need to disable the maybe-uninitialized here. It seems like the compiler may be confused in situations where
122
+ // we are assigning into an unused optional from a temporary. The fact that this hits the move-assignment without
123
+ // having called the move constructor is suspicious though and hints of an actual bug.
124
+ //
125
+ // See: https://github.com/rerun-io/rerun/issues/4027
126
+ RR_WITH_MAYBE_UNINITIALIZED_DISABLED(this->swap(other);)
127
+ }
128
+
129
+ /// Construct from a initializer list of elements that are compatible with TElement.
130
+ ///
131
+ /// Takes ownership of the passed elements.
132
+ /// If you want to avoid an allocation, you have to manually keep the data on the stack
133
+ /// (e.g. as `std::array`) and construct the collection from this instead.
134
+ ///
135
+ /// This is not done as a `CollectionAdapter` since it tends to cause deduction issues
136
+ /// (since there's special rules for overload resolution for initializer lists)
137
+ Collection(std::initializer_list<TElement> data)
138
+ : ownership(CollectionOwnership::VectorOwned) {
139
+ // Don't assign, since the vector is in an undefined state and assigning may
140
+ // attempt to free data.
141
+ new (&storage.vector_owned) std::vector<TElement>(data);
142
+ }
143
+
144
+ /// Borrows binary compatible data into the collection from a typed pointer.
145
+ ///
146
+ /// Borrowed data must outlive the collection!
147
+ /// (If the pointer passed is into an std::vector or similar, this std::vector mustn't be
148
+ /// resized.)
149
+ /// The passed type must be binary compatible with the collection type.
150
+ ///
151
+ /// Since `rerun::Collection` does not provide write access, data is guaranteed to be unchanged by
152
+ /// any function or operation taking on a `Collection`.
153
+ template <typename T>
154
+ static Collection<TElement> borrow(const T* data, size_t num_instances = 1) {
155
+ static_assert(
156
+ sizeof(T) == sizeof(TElement),
157
+ "T & TElement are not binary compatible: Size mismatch."
158
+ );
159
+ static_assert(
160
+ alignof(T) <= alignof(TElement),
161
+ "T & TElement are not binary compatible: TElement has a higher alignment requirement than T. This implies that pointers to T may not have the alignment needed to access TElement."
162
+ );
163
+
164
+ Collection<TElement> batch;
165
+ batch.ownership = CollectionOwnership::Borrowed;
166
+ batch.storage.borrowed.data = reinterpret_cast<const TElement*>(data);
167
+ batch.storage.borrowed.num_instances = num_instances;
168
+ return batch;
169
+ }
170
+
171
+ /// Borrows binary compatible data into the collection from an untyped pointer.
172
+ ///
173
+ /// This version of `borrow` that takes a void pointer, omitting any checks.
174
+ ///
175
+ /// Borrowed data must outlive the collection!
176
+ /// (If the pointer passed is into an std::vector or similar, this std::vector mustn't be
177
+ /// resized.)
178
+ ///
179
+ /// Since `rerun::Collection` does not provide write access, data is guaranteed to be unchanged by
180
+ /// any function or operation taking on a `rerun::Collection`.
181
+ static Collection borrow(const void* data, size_t num_instances = 1) {
182
+ return borrow(reinterpret_cast<const TElement*>(data), num_instances);
183
+ }
184
+
185
+ /// Borrows binary compatible data into the collection from a vector.
186
+ ///
187
+ /// Borrowed data must outlive the collection!
188
+ /// The referenced vector must not be resized and musn't be temporary.
189
+ ///
190
+ /// Since `rerun::Collection` does not provide write access, data is guaranteed to be unchanged by
191
+ /// any function or operation taking on a `rerun::Collection`.
192
+ template <typename T>
193
+ static Collection borrow(const std::vector<T>& data) {
194
+ return borrow(data.data(), data.size());
195
+ }
196
+
197
+ /// Takes ownership of a temporary `std::vector`, moving it into the collection.
198
+ ///
199
+ /// Takes ownership of the data and moves it into the collection.
200
+ static Collection<TElement> take_ownership(std::vector<TElement>&& data) {
201
+ Collection<TElement> batch;
202
+ batch.ownership = CollectionOwnership::VectorOwned;
203
+ // Don't assign, since the vector is in an undefined state and assigning may
204
+ // attempt to free data.
205
+ new (&batch.storage.vector_owned) std::vector<TElement>(std::move(data));
206
+
207
+ return batch;
208
+ }
209
+
210
+ /// Takes ownership of a single element, moving it into the collection.
211
+ static Collection<TElement> take_ownership(TElement&& data) {
212
+ // TODO(#4256): there should be a special path here to avoid allocating a vector.
213
+ std::vector<TElement> elements;
214
+ elements.emplace_back(std::move(data));
215
+ return take_ownership(std::move(elements));
216
+ }
217
+
218
+ /// Takes ownership of a single element, copying it into the collection.
219
+ static Collection<TElement> take_ownership(const TElement& data) {
220
+ // TODO(#4256): there should be a special path here to avoid allocating a vector.
221
+ std::vector<TElement> elements = {data};
222
+ return take_ownership(std::move(elements));
223
+ }
224
+
225
+ /// Swaps the content of this collection with another.
226
+ void swap(Collection<TElement>& other) {
227
+ // (writing out this-> here to make it less confusing!)
228
+ switch (this->ownership) {
229
+ case CollectionOwnership::Borrowed: {
230
+ switch (other.ownership) {
231
+ case CollectionOwnership::Borrowed:
232
+ std::swap(this->storage.borrowed, other.storage.borrowed);
233
+ break;
234
+
235
+ case CollectionOwnership::VectorOwned: {
236
+ auto this_borrowed_data_old = this->storage.borrowed;
237
+ new (&this->storage.vector_owned)
238
+ std::vector<TElement>(std::move(other.storage.vector_owned));
239
+ other.storage.borrowed = this_borrowed_data_old;
240
+ break;
241
+ }
242
+
243
+ default:
244
+ assert(false && "unreachable");
245
+ }
246
+ break;
247
+ }
248
+
249
+ case CollectionOwnership::VectorOwned: {
250
+ switch (other.ownership) {
251
+ case CollectionOwnership::Borrowed: {
252
+ auto other_borrowed_data_old = other.storage.borrowed;
253
+ new (&other.storage.vector_owned)
254
+ std::vector<TElement>(std::move(this->storage.vector_owned));
255
+ this->storage.borrowed = other_borrowed_data_old;
256
+ break;
257
+ }
258
+
259
+ case CollectionOwnership::VectorOwned:
260
+ std::swap(storage.vector_owned, other.storage.vector_owned);
261
+ break;
262
+
263
+ default:
264
+ assert(false && "unreachable");
265
+ }
266
+ break;
267
+ }
268
+
269
+ default:
270
+ assert(false && "unreachable");
271
+ }
272
+
273
+ std::swap(ownership, other.ownership);
274
+ }
275
+
276
+ ~Collection() {
277
+ switch (ownership) {
278
+ case CollectionOwnership::Borrowed:
279
+ break; // nothing to do.
280
+
281
+ case CollectionOwnership::VectorOwned:
282
+ storage.vector_owned.~vector(); // Deallocate the vector!
283
+ break;
284
+
285
+ default:
286
+ assert(false && "unreachable");
287
+ }
288
+ }
289
+
290
+ /// Returns the number of instances in this collection.
291
+ size_t size() const {
292
+ switch (ownership) {
293
+ case CollectionOwnership::Borrowed:
294
+ return storage.borrowed.num_instances;
295
+
296
+ case CollectionOwnership::VectorOwned:
297
+ return storage.vector_owned.size();
298
+
299
+ default:
300
+ assert(false && "unreachable");
301
+ }
302
+ return 0;
303
+ }
304
+
305
+ /// Returns true if the collection is empty.
306
+ bool empty() const {
307
+ switch (ownership) {
308
+ case CollectionOwnership::Borrowed:
309
+ return storage.borrowed.num_instances == 0;
310
+
311
+ case CollectionOwnership::VectorOwned:
312
+ return storage.vector_owned.empty();
313
+
314
+ default:
315
+ assert(false && "unreachable");
316
+ }
317
+ return 0;
318
+ }
319
+
320
+ /// Returns a raw pointer to the underlying data.
321
+ ///
322
+ /// Do not use this if the data is not continuous in memory!
323
+ /// TODO(#4257): So far it always is continuous, but in the future we want to support strides!
324
+ ///
325
+ /// The pointer is only valid as long as backing storage is alive
326
+ /// which is either until the collection is destroyed the borrowed source is destroyed/moved.
327
+ const TElement* data() const {
328
+ switch (ownership) {
329
+ case CollectionOwnership::Borrowed:
330
+ return storage.borrowed.data;
331
+
332
+ case CollectionOwnership::VectorOwned:
333
+ return storage.vector_owned.data();
334
+
335
+ default:
336
+ assert(false && "unreachable");
337
+ }
338
+
339
+ // We need to return something to avoid compiler warnings.
340
+ // But if we don't mark this as unreachable, GCC will complain that we're dereferencing null down the line.
341
+ RR_UNREACHABLE();
342
+ // But with this in place, MSVC complains that the return statement is not reachable (GCC/clang on the other hand need it).
343
+ #ifndef _MSC_VER
344
+ return nullptr;
345
+ #endif
346
+ }
347
+
348
+ /// TODO(andreas): Return proper iterator
349
+ const TElement* begin() const {
350
+ return data();
351
+ }
352
+
353
+ /// TODO(andreas): Return proper iterator
354
+ const TElement* end() const {
355
+ return data() + size();
356
+ }
357
+
358
+ /// Random read access to the underlying data.
359
+ const TElement& operator[](size_t i) const {
360
+ assert(i < size());
361
+ return data()[i];
362
+ }
363
+
364
+ /// Returns the data ownership of collection.
365
+ ///
366
+ /// This is usually only needed for debugging and testing.
367
+ CollectionOwnership get_ownership() const {
368
+ return ownership;
369
+ }
370
+
371
+ /// Copies the data into a new `std::vector`.
372
+ std::vector<TElement> to_vector() const& {
373
+ std::vector<TElement> result;
374
+ result.reserve(size());
375
+ result.insert(result.end(), begin(), end());
376
+ return result;
377
+ }
378
+
379
+ /// Copies the data into a new `std::vector`.
380
+ ///
381
+ /// If possible, this will move the underlying data.
382
+ std::vector<TElement> to_vector() && {
383
+ switch (ownership) {
384
+ case CollectionOwnership::Borrowed: {
385
+ std::vector<TElement> result;
386
+ result.reserve(size());
387
+ result.insert(result.end(), begin(), end());
388
+ return result;
389
+ }
390
+
391
+ case CollectionOwnership::VectorOwned: {
392
+ // Ensure move constructor is called, so `storage.vector_owned` is in a valid state.
393
+ return std::move(storage.vector_owned);
394
+ }
395
+
396
+ default:
397
+ assert(false && "unreachable");
398
+ }
399
+ return std::vector<TElement>();
400
+ }
401
+
402
+ /// Reinterpret this collection as a collection of bytes.
403
+ Collection<uint8_t> to_uint8() const {
404
+ switch (ownership) {
405
+ case CollectionOwnership::Borrowed: {
406
+ return Collection<uint8_t>::borrow(
407
+ reinterpret_cast<const uint8_t*>(data()),
408
+ size() * sizeof(TElement)
409
+ );
410
+ }
411
+
412
+ case CollectionOwnership::VectorOwned: {
413
+ auto ptr = reinterpret_cast<const uint8_t*>(data());
414
+ auto num_bytes = size() * sizeof(TElement);
415
+ return Collection<uint8_t>::take_ownership(
416
+ std::vector<uint8_t>(ptr, ptr + num_bytes)
417
+ );
418
+ }
419
+
420
+ default:
421
+ assert(false && "unreachable");
422
+ }
423
+ return Collection<uint8_t>();
424
+ }
425
+
426
+ private:
427
+ template <typename T>
428
+ union CollectionStorage {
429
+ struct {
430
+ const T* data;
431
+ size_t num_instances;
432
+ } borrowed;
433
+
434
+ std::vector<T> vector_owned;
435
+
436
+ CollectionStorage() {
437
+ std::memset(reinterpret_cast<void*>(this), 0, sizeof(CollectionStorage));
438
+ }
439
+
440
+ ~CollectionStorage() {}
441
+ };
442
+
443
+ CollectionOwnership ownership;
444
+ CollectionStorage<TElement> storage;
445
+ };
446
+
447
+ // Convenience functions for creating typed collections via explicit borrow & ownership taking.
448
+ // These are useful to avoid having to specify the type of the collection.
449
+ // E.g. instead of `rerun::Collection<uint8_t>::borrow(data, num_instances)`,
450
+ // you can just write `rerun::borrow(data, num_instances)`.
451
+
452
+ /// Borrows binary data into a `Collection` from a pointer.
453
+ ///
454
+ /// Borrowed data must outlive the collection!
455
+ /// (If the pointer passed is into an std::vector or similar, this std::vector mustn't be
456
+ /// resized.)
457
+ /// The passed type must be binary compatible with the collection type.
458
+ ///
459
+ /// Since `rerun::Collection` does not provide write access, data is guaranteed to be unchanged by
460
+ /// any function or operation taking on a `Collection`.
461
+ template <typename TElement>
462
+ inline Collection<TElement> borrow(const TElement* data, size_t num_instances = 1) {
463
+ return Collection<TElement>::borrow(data, num_instances);
464
+ }
465
+
466
+ /// Borrows binary data into the collection from a vector.
467
+ ///
468
+ /// Borrowed data must outlive the collection!
469
+ /// The referenced vector must not be resized and musn't be temporary.
470
+ ///
471
+ /// Since `rerun::Collection` does not provide write access, data is guaranteed to be unchanged by
472
+ /// any function or operation taking on a `rerun::Collection`.
473
+ template <typename TElement>
474
+ inline Collection<TElement> borrow(const std::vector<TElement>& data) {
475
+ return Collection<TElement>::borrow(data);
476
+ }
477
+
478
+ /// Takes ownership of a temporary `std::vector`, moving it into the collection.
479
+ ///
480
+ /// Takes ownership of the data and moves it into the collection.
481
+ template <typename TElement>
482
+ inline Collection<TElement> take_ownership(std::vector<TElement> data) {
483
+ return Collection<TElement>::take_ownership(std::move(data));
484
+ }
485
+
486
+ /// Takes ownership of a single element, moving it into the collection.
487
+ template <typename TElement>
488
+ inline Collection<TElement> take_ownership(TElement data) {
489
+ return Collection<TElement>::take_ownership(std::move(data));
490
+ }
491
+ } // namespace rerun
492
+
493
+ // Could keep this separately, but its very hard to use the collection without the basic suite of adapters.
494
+ // Needs to know about `rerun::Collection` which means that it needs to be included after `rerun::Collection` is defined.
495
+ // (it tried to include `Collection.hpp` but if that was our starting point that include wouldn't do anything)
496
+ #include "collection_adapter_builtins.hpp"
@@ -0,0 +1,43 @@
1
+ #pragma once
2
+
3
+ #include <type_traits> // std::enable_if, std::false_type
4
+
5
+ namespace rerun {
6
+ /// The `rerun::CollectionAdapter` trait is responsible for mapping an input argument to a `rerun::Collection`.
7
+ ///
8
+ /// There are default implementations for standard containers, as well as single
9
+ /// elements. These can be found in `rerun/collection_adapter_builtins.hpp`.
10
+ ///
11
+ /// An adapter may choose to either produce an owned or borrowed collection.
12
+ /// Borrowed collections required that a pointer to the passed in ("adapted") data
13
+ /// outlives the collection. Owned component batches on the other hand take ownership by
14
+ /// allocating a `std::vector` and moving the data into it. This is typically only required when
15
+ /// passing in temporary objects into an adapter or non-trivial data conversion is necessary.
16
+ ///
17
+ /// By implementing your own adapters for certain component types, you can map your data to
18
+ /// Rerun types which then can be logged.
19
+ ///
20
+ /// To implement an adapter for a type T, specialize `CollectionAdapter<TElement, T>` and
21
+ /// define `Collection<TElement> operator()(const T& input)`.
22
+ /// It is *highly recommended* to also specify `Collection<TElement> operator()(T&&
23
+ /// input)` in order to accidentally borrow data that is passed in as a temporary!
24
+ template <typename TElement, typename TContainer, typename Enable = std::enable_if_t<true>>
25
+ struct CollectionAdapter {
26
+ /// \private
27
+ /// `NoAdapterFor` always evaluates to false, but in a way that requires template instantiation.
28
+ template <typename... Ts>
29
+ struct NoAdapterFor : std::false_type {};
30
+
31
+ static_assert(
32
+ NoAdapterFor<TElement, TContainer>::value,
33
+ "CollectionAdapter is not implemented for this type. "
34
+ "It is implemented for single elements as well as std::vector, std::array, and "
35
+ "c-arrays of components. "
36
+ "You can add your own implementation by specializing "
37
+ "rerun::CollectionAdapter<TElement, TContainer> for a given "
38
+ "target type TElement and your input type TContainer."
39
+ );
40
+
41
+ // TODO(andreas): List methods that the trait should implement.
42
+ };
43
+ } // namespace rerun
@@ -0,0 +1,138 @@
1
+ #pragma once
2
+
3
+ #include "collection.hpp"
4
+ #include "collection_adapter.hpp"
5
+ #include "type_traits.hpp"
6
+
7
+ #include <array>
8
+ #include <vector>
9
+
10
+ // Documenting the builtin adapters is too much clutter for the doc class overview.
11
+ /// \cond private
12
+
13
+ namespace rerun {
14
+ /// Adapter from `std::vector` of elements with the target type.
15
+ ///
16
+ /// Only takes ownership if a temporary is passed.
17
+ /// No allocation or copy is performed in any case. Furthermore, elements are not moved.
18
+ template <typename TElement>
19
+ struct CollectionAdapter<TElement, std::vector<TElement>> {
20
+ Collection<TElement> operator()(const std::vector<TElement>& input) {
21
+ return Collection<TElement>::borrow(input.data(), input.size());
22
+ }
23
+
24
+ Collection<TElement> operator()(std::vector<TElement>&& input) {
25
+ return Collection<TElement>::take_ownership(std::move(input));
26
+ }
27
+ };
28
+
29
+ /// Adapter for a iterable container (see `rerun::traits::is_iterable_v`) which
30
+ /// has a value type from which `TElement` can be constructed but is not equal to `TElement`.
31
+ ///
32
+ /// Since this needs to do a conversion, this will always need to allocate space.
33
+ /// However, if a temporary is passed, elements will be moved instead of copied upon construction of `TElement`.
34
+ template <typename TElement, typename TContainer>
35
+ struct CollectionAdapter<
36
+ TElement, TContainer,
37
+ std::enable_if_t<
38
+ !std::is_same_v<TElement, traits::value_type_of_t<TContainer>> && //
39
+ traits::is_iterable_v<TContainer> && //
40
+ std::is_constructible_v<
41
+ TElement,
42
+ traits::value_type_of_t<TContainer>> //
43
+ >> {
44
+ Collection<TElement> operator()(const TContainer& input) {
45
+ std::vector<TElement> elements(std::begin(input), std::end(input));
46
+ return Collection<TElement>::take_ownership(std::move(elements));
47
+ }
48
+
49
+ Collection<TElement> operator()(TContainer&& input) {
50
+ std::vector<TElement> elements;
51
+ // There's no batch emplace method, so we need to reserve and then emplace manually.
52
+ // We decide here to take the performance cost if a the input's iterator is not a random access iterator.
53
+ // (in that case determining the size will have linear complexity)
54
+ elements.reserve(static_cast<size_t>(std::distance(std::begin(input), std::end(input)))
55
+ );
56
+ for (auto& element : input) {
57
+ elements.emplace_back(std::move(element));
58
+ }
59
+
60
+ return Collection<TElement>::take_ownership(std::move(elements));
61
+ }
62
+ };
63
+
64
+ /// Adapter from std::array of elements with the target type.
65
+ ///
66
+ /// Only takes ownership if a temporary is passed in which case an allocation and per element move is performed.
67
+ template <typename TElement, size_t NumInstances>
68
+ struct CollectionAdapter<TElement, std::array<TElement, NumInstances>> {
69
+ Collection<TElement> operator()(const std::array<TElement, NumInstances>& array) {
70
+ return Collection<TElement>::borrow(array.data(), NumInstances);
71
+ }
72
+
73
+ Collection<TElement> operator()(std::array<TElement, NumInstances>&& array) {
74
+ std::vector<TElement> elements(
75
+ std::make_move_iterator(array.begin()),
76
+ std::make_move_iterator(array.end())
77
+ );
78
+ return Collection<TElement>::take_ownership(std::move(elements));
79
+ }
80
+ };
81
+
82
+ /// Adapter from a C-Array reference with the target type.
83
+ ///
84
+ /// Only takes ownership if a temporary is passed in which case an allocation and per element move is performed.
85
+ template <typename TElement, size_t NumInstances>
86
+ struct CollectionAdapter<TElement, TElement[NumInstances]> {
87
+ Collection<TElement> operator()(const TElement (&array)[NumInstances]) {
88
+ return Collection<TElement>::borrow(array, NumInstances);
89
+ }
90
+
91
+ Collection<TElement> operator()(TElement (&&array)[NumInstances]) {
92
+ std::vector<TElement> elements(
93
+ std::make_move_iterator(array),
94
+ std::make_move_iterator(array + NumInstances)
95
+ );
96
+ return Collection<TElement>::take_ownership(std::move(elements));
97
+ }
98
+ };
99
+
100
+ /// Adapter for a single element from which `TElement`, temporary or reference.
101
+ ///
102
+ /// Only takes ownership if a temporary is passed in which case the element is moved.
103
+ /// Otherwise a borrow takes place.
104
+ template <typename TElement>
105
+ struct CollectionAdapter<TElement, TElement> {
106
+ Collection<TElement> operator()(const TElement& one_and_only) {
107
+ return Collection<TElement>::borrow(&one_and_only, 1);
108
+ }
109
+
110
+ Collection<TElement> operator()(TElement&& one_and_only) {
111
+ return Collection<TElement>::take_ownership(std::move(one_and_only));
112
+ }
113
+ };
114
+
115
+ /// Adapter for a single element of from which `TElement` can be constructed.
116
+ ///
117
+ /// Since this needs to do a conversion, this will always need to allocate space.
118
+ /// However, if a temporary is passed the element will be moved instead of copied upon construction of `TElement`.
119
+ template <typename TElement, typename TInput>
120
+ struct CollectionAdapter<
121
+ TElement, TInput,
122
+ std::enable_if_t<
123
+ !std::is_same_v<TElement, TInput> && //
124
+ !traits::is_iterable_v<TInput> && //
125
+ std::is_constructible_v<TElement, TInput> //
126
+ >> {
127
+ Collection<TElement> operator()(const TInput& input) {
128
+ return Collection<TElement>::take_ownership(TElement(input));
129
+ }
130
+
131
+ Collection<TElement> operator()(TInput&& input) {
132
+ return Collection<TElement>::take_ownership(TElement(std::move(input)));
133
+ }
134
+ };
135
+
136
+ } // namespace rerun
137
+
138
+ /// \endcond