cloudanalyzer 0.1.0__tar.gz → 0.3.0__tar.gz

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.
Files changed (201) hide show
  1. {cloudanalyzer-0.1.0/cloudanalyzer.egg-info → cloudanalyzer-0.3.0}/PKG-INFO +71 -11
  2. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/README.md +67 -10
  3. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/__init__.py +1 -1
  4. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/align.py +2 -2
  5. cloudanalyzer-0.3.0/ca/benchmark.py +431 -0
  6. cloudanalyzer-0.3.0/ca/bundle.py +522 -0
  7. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/convert.py +2 -3
  8. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/core/check_scaffolding.py +39 -1
  9. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/core/check_triage.py +50 -1
  10. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/core/checks.py +421 -9
  11. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/core/ground_evaluate.py +30 -8
  12. cloudanalyzer-0.3.0/ca/core/map_evaluate.py +302 -0
  13. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/crop.py +2 -2
  14. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/density_map.py +13 -0
  15. cloudanalyzer-0.3.0/ca/detection.py +342 -0
  16. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/downsample.py +2 -2
  17. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/evaluate.py +3 -2
  18. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/ground_evaluate/height_band.py +5 -5
  19. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/ground_evaluate/voxel_confusion.py +5 -4
  20. cloudanalyzer-0.3.0/ca/experiments/map_evaluate/__init__.py +18 -0
  21. cloudanalyzer-0.3.0/ca/experiments/map_evaluate/common.py +99 -0
  22. cloudanalyzer-0.3.0/ca/experiments/map_evaluate/evaluate.py +191 -0
  23. cloudanalyzer-0.3.0/ca/experiments/map_evaluate/nn_thresholds.py +16 -0
  24. cloudanalyzer-0.3.0/ca/experiments/map_evaluate/voxel_entropy.py +115 -0
  25. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/process_docs.py +10 -0
  26. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/filter.py +2 -2
  27. cloudanalyzer-0.3.0/ca/geometry.py +735 -0
  28. cloudanalyzer-0.3.0/ca/history.py +386 -0
  29. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/info.py +4 -6
  30. cloudanalyzer-0.3.0/ca/io.py +138 -0
  31. cloudanalyzer-0.3.0/ca/kitti.py +130 -0
  32. cloudanalyzer-0.3.0/ca/loop_closure_report.py +237 -0
  33. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/merge.py +2 -2
  34. cloudanalyzer-0.3.0/ca/mme.py +84 -0
  35. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/normals.py +2 -2
  36. cloudanalyzer-0.3.0/ca/object_eval.py +365 -0
  37. cloudanalyzer-0.3.0/ca/point_summary.py +40 -0
  38. cloudanalyzer-0.3.0/ca/posegraph.py +269 -0
  39. cloudanalyzer-0.3.0/ca/pr_comment.py +349 -0
  40. cloudanalyzer-0.3.0/ca/registration.py +108 -0
  41. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/report.py +660 -5
  42. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/sample.py +2 -2
  43. cloudanalyzer-0.3.0/ca/scan_match_debug.py +171 -0
  44. cloudanalyzer-0.3.0/ca/slam_debug.py +712 -0
  45. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/split.py +21 -9
  46. cloudanalyzer-0.3.0/ca/stats.py +62 -0
  47. cloudanalyzer-0.3.0/ca/tracking.py +242 -0
  48. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/trajectory.py +15 -8
  49. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/web.py +815 -10
  50. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0/cloudanalyzer.egg-info}/PKG-INFO +71 -11
  51. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/cloudanalyzer.egg-info/SOURCES.txt +43 -0
  52. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/cloudanalyzer.egg-info/requires.txt +3 -0
  53. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/cloudanalyzer_cli/main.py +1821 -16
  54. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/pyproject.toml +3 -0
  55. cloudanalyzer-0.3.0/tests/test_benchmark.py +558 -0
  56. cloudanalyzer-0.3.0/tests/test_bundle.py +415 -0
  57. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_check_scaffolding_process.py +2 -0
  58. cloudanalyzer-0.3.0/tests/test_check_suite.py +825 -0
  59. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_cli.py +773 -2
  60. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_density_map.py +6 -0
  61. cloudanalyzer-0.3.0/tests/test_detection_evaluate.py +192 -0
  62. cloudanalyzer-0.3.0/tests/test_detection_tracking_report.py +197 -0
  63. cloudanalyzer-0.3.0/tests/test_geometry.py +495 -0
  64. cloudanalyzer-0.3.0/tests/test_geometry_splat_ellipsoid.py +275 -0
  65. cloudanalyzer-0.3.0/tests/test_history.py +366 -0
  66. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_info.py +11 -0
  67. cloudanalyzer-0.3.0/tests/test_io.py +120 -0
  68. cloudanalyzer-0.3.0/tests/test_kitti.py +150 -0
  69. cloudanalyzer-0.3.0/tests/test_loop_closure_report.py +195 -0
  70. cloudanalyzer-0.3.0/tests/test_map_evaluate.py +81 -0
  71. cloudanalyzer-0.3.0/tests/test_map_evaluate_core.py +81 -0
  72. cloudanalyzer-0.3.0/tests/test_mme.py +113 -0
  73. cloudanalyzer-0.3.0/tests/test_object_eval_iou.py +115 -0
  74. cloudanalyzer-0.3.0/tests/test_phase16_large_scale.py +76 -0
  75. cloudanalyzer-0.3.0/tests/test_phase17_vectorize.py +210 -0
  76. cloudanalyzer-0.3.0/tests/test_phase18_vectorize.py +150 -0
  77. cloudanalyzer-0.3.0/tests/test_posegraph.py +90 -0
  78. cloudanalyzer-0.3.0/tests/test_pr_comment.py +165 -0
  79. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_process_docs.py +3 -0
  80. cloudanalyzer-0.3.0/tests/test_public_object_eval_examples.py +58 -0
  81. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_registration.py +8 -1
  82. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_report.py +103 -0
  83. cloudanalyzer-0.3.0/tests/test_scan_match_debug.py +43 -0
  84. cloudanalyzer-0.3.0/tests/test_slam_debug.py +326 -0
  85. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_stats.py +11 -0
  86. cloudanalyzer-0.3.0/tests/test_tracking_evaluate.py +182 -0
  87. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_trajectory.py +15 -0
  88. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web.py +174 -0
  89. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_sampling_evaluate.py +8 -2
  90. cloudanalyzer-0.1.0/ca/io.py +0 -40
  91. cloudanalyzer-0.1.0/ca/registration.py +0 -66
  92. cloudanalyzer-0.1.0/ca/stats.py +0 -62
  93. cloudanalyzer-0.1.0/tests/test_check_suite.py +0 -376
  94. cloudanalyzer-0.1.0/tests/test_io.py +0 -53
  95. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/LICENSE +0 -0
  96. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/baseline_history.py +0 -0
  97. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/batch.py +0 -0
  98. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/compare.py +0 -0
  99. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/core/__init__.py +0 -0
  100. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/core/check_baseline_evolution.py +0 -0
  101. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/core/web_progressive_loading.py +0 -0
  102. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/core/web_sampling.py +0 -0
  103. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/core/web_trajectory_sampling.py +0 -0
  104. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/diff.py +0 -0
  105. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/__init__.py +0 -0
  106. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_baseline_evolution/__init__.py +0 -0
  107. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_baseline_evolution/common.py +0 -0
  108. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_baseline_evolution/evaluate.py +0 -0
  109. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_baseline_evolution/pareto_promote.py +0 -0
  110. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_baseline_evolution/stability_window.py +0 -0
  111. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_baseline_evolution/threshold_guard.py +0 -0
  112. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_scaffolding/__init__.py +0 -0
  113. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_scaffolding/common.py +0 -0
  114. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_scaffolding/evaluate.py +0 -0
  115. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_scaffolding/literal_profiles.py +0 -0
  116. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_scaffolding/object_sections.py +0 -0
  117. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_scaffolding/pipeline_overlays.py +0 -0
  118. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_triage/__init__.py +0 -0
  119. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_triage/common.py +0 -0
  120. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_triage/evaluate.py +0 -0
  121. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_triage/pareto_frontier.py +0 -0
  122. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_triage/severity_weighted.py +0 -0
  123. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/check_triage/signature_cluster.py +0 -0
  124. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/ground_evaluate/__init__.py +0 -0
  125. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/ground_evaluate/common.py +0 -0
  126. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/ground_evaluate/evaluate.py +0 -0
  127. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/ground_evaluate/nearest_neighbor.py +0 -0
  128. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_progressive_loading/__init__.py +0 -0
  129. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_progressive_loading/common.py +0 -0
  130. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_progressive_loading/distance_shells.py +0 -0
  131. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_progressive_loading/evaluate.py +0 -0
  132. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_progressive_loading/grid_tiles.py +0 -0
  133. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_progressive_loading/spatial_shuffle.py +0 -0
  134. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_sampling/__init__.py +0 -0
  135. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_sampling/common.py +0 -0
  136. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_sampling/evaluate.py +0 -0
  137. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_sampling/functional_voxel.py +0 -0
  138. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_sampling/object_random.py +0 -0
  139. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_sampling/pipeline_hybrid.py +0 -0
  140. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_trajectory_sampling/__init__.py +0 -0
  141. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_trajectory_sampling/common.py +0 -0
  142. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_trajectory_sampling/distance_accumulator.py +0 -0
  143. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_trajectory_sampling/evaluate.py +0 -0
  144. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_trajectory_sampling/turn_aware.py +0 -0
  145. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/experiments/web_trajectory_sampling/uniform_stride.py +0 -0
  146. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/ground_evaluate.py +0 -0
  147. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/log.py +0 -0
  148. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/metrics.py +0 -0
  149. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/pareto.py +0 -0
  150. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/pipeline.py +0 -0
  151. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/plot.py +0 -0
  152. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/run_evaluate.py +0 -0
  153. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/view.py +0 -0
  154. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/ca/visualization.py +0 -0
  155. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/cloudanalyzer.egg-info/dependency_links.txt +0 -0
  156. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/cloudanalyzer.egg-info/entry_points.txt +0 -0
  157. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/cloudanalyzer.egg-info/top_level.txt +0 -0
  158. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/cloudanalyzer_cli/__init__.py +0 -0
  159. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/setup.cfg +0 -0
  160. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/setup.py +0 -0
  161. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_align.py +0 -0
  162. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_baseline_history.py +0 -0
  163. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_batch.py +0 -0
  164. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_check_baseline_evolution_process.py +0 -0
  165. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_check_triage_process.py +0 -0
  166. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_compare.py +0 -0
  167. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_convert.py +0 -0
  168. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_crop.py +0 -0
  169. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_diff.py +0 -0
  170. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_downsample.py +0 -0
  171. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_evaluate.py +0 -0
  172. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_filter.py +0 -0
  173. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_ground_evaluate.py +0 -0
  174. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_ground_evaluate_process.py +0 -0
  175. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_logging.py +0 -0
  176. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_merge.py +0 -0
  177. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_metrics.py +0 -0
  178. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_normals.py +0 -0
  179. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_output_json.py +0 -0
  180. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_pareto.py +0 -0
  181. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_pipeline.py +0 -0
  182. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_plot.py +0 -0
  183. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_public_benchmark_pack.py +0 -0
  184. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_run_batch.py +0 -0
  185. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_run_evaluate.py +0 -0
  186. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_sample.py +0 -0
  187. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_split.py +0 -0
  188. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_threshold.py +0 -0
  189. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_traj_batch.py +0 -0
  190. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_visualization.py +0 -0
  191. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_progressive_loading_core.py +0 -0
  192. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_progressive_loading_evaluate.py +0 -0
  193. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_progressive_loading_process.py +0 -0
  194. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_progressive_loading_strategies.py +0 -0
  195. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_sampling_core.py +0 -0
  196. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_sampling_process.py +0 -0
  197. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_sampling_strategies.py +0 -0
  198. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_trajectory_sampling_core.py +0 -0
  199. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_trajectory_sampling_evaluate.py +0 -0
  200. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_trajectory_sampling_process.py +0 -0
  201. {cloudanalyzer-0.1.0 → cloudanalyzer-0.3.0}/tests/test_web_trajectory_sampling_strategies.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cloudanalyzer
3
- Version: 0.1.0
3
+ Version: 0.3.0
4
4
  Summary: CLI-first QA toolkit for point cloud, trajectory, and 3D perception outputs
5
5
  Author: rsasaki0109
6
6
  License-Expression: MIT
@@ -27,6 +27,9 @@ Requires-Dist: numpy>=1.24.0
27
27
  Requires-Dist: typer>=0.9.0
28
28
  Requires-Dist: matplotlib>=3.7.0
29
29
  Requires-Dist: PyYAML>=6.0
30
+ Requires-Dist: laspy>=2.5.0
31
+ Requires-Dist: lazrs>=0.6.0
32
+ Requires-Dist: scipy>=1.6.0
30
33
  Provides-Extra: dev
31
34
  Requires-Dist: build>=1.2.2; extra == "dev"
32
35
  Requires-Dist: mypy; extra == "dev"
@@ -39,7 +42,7 @@ Dynamic: license-file
39
42
 
40
43
  AI-friendly CLI tool for point cloud analysis and evaluation.
41
44
 
42
- For the full product overview (Japanese), demos, and tutorials, see the [repository root README](https://github.com/rsasaki0109/CloudAnalyzer/blob/main/README.md).
45
+ For the full product overview, demos, and tutorials, see the [repository root README](https://github.com/rsasaki0109/CloudAnalyzer/blob/main/README.md).
43
46
 
44
47
  ## Install
45
48
 
@@ -68,24 +71,27 @@ python3 -m twine check dist/*
68
71
 
69
72
  ## Commands
70
73
 
71
- There are **31** CLI subcommands (see `ca --help`). Summary:
74
+ There are **35** CLI subcommands (see `ca --help`). Summary:
72
75
 
73
76
  ### Analysis & Evaluation
74
77
 
75
78
  | Command | Description |
76
79
  |---|---|
77
80
  | `ca compare` | Compare two point clouds with ICP/GICP registration |
81
+ | `ca scan-match-debug` | Debug one scan-to-map ICP/GICP attempt with before/after distances and artifacts |
78
82
  | `ca diff` | Quick distance stats (no registration) |
79
83
  | `ca evaluate` | F1, Chamfer, Hausdorff, AUC evaluation |
80
84
  | `ca check` | Config-driven unified QA (`cloudanalyzer.yaml`) |
81
85
  | `ca init-check` | Emit a starter `cloudanalyzer.yaml` profile |
86
+ | `ca detection-evaluate` | 3D object detection QA for axis-aligned boxes (mAP, precision/recall/F1, reports) |
82
87
  | `ca ground-evaluate` | Ground segmentation QA (precision/recall/F1/IoU, optional gates) |
88
+ | `ca tracking-evaluate` | 3D multi-object tracking QA (MOTA, ID switches, precision/recall/F1, reports) |
83
89
  | `ca traj-evaluate` | ATE, translational RPE, drift evaluation for trajectories |
84
90
  | `ca traj-batch` | Batch trajectory benchmark with coverage, gate, and reports |
85
91
  | `ca run-evaluate` | Combined map + trajectory QA for one run |
86
92
  | `ca run-batch` | Combined map + trajectory benchmark across multiple runs |
87
- | `ca info` | Point cloud metadata (points, BBox, centroid) |
88
- | `ca stats` | Detailed statistics (density, spacing distribution) |
93
+ | `ca info` | Point cloud metadata (points, BBox, robust BBox, centroid) |
94
+ | `ca stats` | Detailed statistics (density, robust density, spacing distribution) |
89
95
  | `ca batch` | Run info on all files in a directory |
90
96
 
91
97
  ### Processing
@@ -141,6 +147,20 @@ ca traj-evaluate estimated.csv reference.csv \
141
147
  --report trajectory_report.html
142
148
  # report also writes sibling trajectory overlay and error timeline PNGs
143
149
 
150
+ # Ground segmentation evaluation with report output
151
+ ca ground-evaluate estimated_ground.pcd estimated_nonground.pcd \
152
+ reference_ground.pcd reference_nonground.pcd \
153
+ --min-f1 0.9 --min-iou 0.8 --report ground_report.html
154
+
155
+ # 3D object detection evaluation from JSON box sequences
156
+ ca detection-evaluate estimated_detection.json reference_detection.json \
157
+ --iou-thresholds 0.25,0.5 --min-map 0.9 --report detection_report.html
158
+
159
+ # 3D multi-object tracking evaluation from JSON box sequences
160
+ ca tracking-evaluate estimated_tracking.json reference_tracking.json \
161
+ --iou-threshold 0.5 --min-mota 0.8 --max-id-switches 2 \
162
+ --report tracking_report.html
163
+
144
164
  # Ignore constant initial translation offset
145
165
  ca traj-evaluate estimated.csv reference.csv --align-origin
146
166
 
@@ -185,10 +205,10 @@ ca web estimated.pcd reference.pcd --heatmap
185
205
  # Browser run viewer: map heatmap + trajectory overlay
186
206
  ca web map.pcd map_ref.pcd --heatmap \
187
207
  --trajectory traj.csv --trajectory-reference traj_ref.csv
188
- # paired trajectory があると worst ATE pose worst RPE segment を viewer 上で強調する
189
- # marker / segment をクリックすると timestamp error summary inspection panel に表示する
190
- # click 時は camera も選択箇所へ寄り、Reset View で全景に戻せる
191
- # trajectory error timeline viewer 内に出て、point click 3D selection と同期する
208
+ # With paired trajectories, the viewer also highlights the worst ATE pose and worst RPE segment.
209
+ # Clicking a marker or segment shows the timestamp and error summary in the inspection panel.
210
+ # The camera also moves toward the selected location, and Reset View returns to the full scene.
211
+ # The trajectory error timeline is shown in the same viewer and stays synced with 3D point selections.
192
212
 
193
213
  # === Compare ===
194
214
  ca compare source.pcd target.pcd \
@@ -226,6 +246,11 @@ ca batch /path/to/results/ --evaluate reference.pcd --min-auc 0.95 --max-chamfer
226
246
  ca density-map cloud.pcd -o density.png -r 1.0 -a z
227
247
  ```
228
248
 
249
+ `ca info` and `ca stats` also report p01-p99 robust extents and the number/ratio
250
+ of points outside that robust bounding box. These fields are useful for SLAM maps
251
+ where a small number of far outliers can dominate the ordinary axis-aligned
252
+ extent and hide whether the main map body is stable.
253
+
229
254
  ## Global Options
230
255
 
231
256
  ```bash
@@ -238,7 +263,7 @@ ca --quiet ... # Suppress non-error output
238
263
  - `--output-json <path>` — Dump result as JSON file
239
264
  - `--format-json` — Print JSON to stdout for piping
240
265
  - `--plot <path>` — F1 curve plot (evaluate only)
241
- - `--report <path>` — Markdown/HTML report (`batch`, `traj-evaluate`, `traj-batch`, `run-evaluate`, `run-batch`)
266
+ - `--report <path>` — Markdown/HTML report (`batch`, `detection-evaluate`, `ground-evaluate`, `tracking-evaluate`, `traj-evaluate`, `traj-batch`, `run-evaluate`, `run-batch`)
242
267
 
243
268
  ```bash
244
269
  # Pipe JSON to jq
@@ -250,6 +275,40 @@ ca evaluate a.pcd b.pcd --format-json | jq '.auc'
250
275
 
251
276
  Point cloud / trajectory / perception QA is usually driven by `ca check` and a `cloudanalyzer.yaml` config (see [docs/ci.md](https://github.com/rsasaki0109/CloudAnalyzer/blob/main/docs/ci.md) and the [map quality gate tutorial](https://github.com/rsasaki0109/CloudAnalyzer/blob/main/docs/tutorial-map-quality-gate.md)).
252
277
 
278
+ For object detection / tracking, the current stable contract is a JSON sequence:
279
+
280
+ ```json
281
+ {
282
+ "frames": [
283
+ {
284
+ "frame_id": "000001",
285
+ "boxes": [
286
+ {
287
+ "label": "car",
288
+ "center": [0.0, 0.0, 0.0],
289
+ "size": [4.0, 1.8, 1.6],
290
+ "score": 0.97,
291
+ "track_id": "pred-17"
292
+ }
293
+ ]
294
+ }
295
+ ]
296
+ }
297
+ ```
298
+
299
+ `ca detection-evaluate` uses `label`, `center`, `size`, and optional `score`; `ca tracking-evaluate` also requires `track_id`. Geometry is currently evaluated as **axis-aligned 3D boxes** and ignores yaw if present in the source JSON.
300
+
301
+ Checked-in public sample JSONs live under `demo_assets/public/rellis3d-frame-000001/object_eval/`:
302
+
303
+ - `detection_reference.json`
304
+ - `detection_estimated_good.json`
305
+ - `detection_estimated_regressed.json`
306
+ - `tracking_reference.json`
307
+ - `tracking_estimated_good.json`
308
+ - `tracking_estimated_regressed.json`
309
+
310
+ Those examples are generated from the public RELLIS-3D seed frame; the tracking files are deterministic synthetic 3-frame sequences seeded from that public frame so the contract can be demonstrated without bundling a full public MOT dataset.
311
+
253
312
  In **this** GitHub repo, reusable workflows run the same gates in CI. Pin to a **tag or SHA** when calling them from another repository (not floating `@main`).
254
313
 
255
314
  ```yaml
@@ -300,4 +359,5 @@ result = split("large.pcd", "tiles/", grid_size=100.0)
300
359
 
301
360
  - `.pcd` (Point Cloud Data)
302
361
  - `.ply` (Polygon File Format)
303
- - `.las` (LiDAR)
362
+ - `.las` / `.laz` (LiDAR)
363
+ - `.csv` (`x,y,z` or GLIM-style `x_m,y_m,z_m`)
@@ -2,7 +2,7 @@
2
2
 
3
3
  AI-friendly CLI tool for point cloud analysis and evaluation.
4
4
 
5
- For the full product overview (Japanese), demos, and tutorials, see the [repository root README](https://github.com/rsasaki0109/CloudAnalyzer/blob/main/README.md).
5
+ For the full product overview, demos, and tutorials, see the [repository root README](https://github.com/rsasaki0109/CloudAnalyzer/blob/main/README.md).
6
6
 
7
7
  ## Install
8
8
 
@@ -31,24 +31,27 @@ python3 -m twine check dist/*
31
31
 
32
32
  ## Commands
33
33
 
34
- There are **31** CLI subcommands (see `ca --help`). Summary:
34
+ There are **35** CLI subcommands (see `ca --help`). Summary:
35
35
 
36
36
  ### Analysis & Evaluation
37
37
 
38
38
  | Command | Description |
39
39
  |---|---|
40
40
  | `ca compare` | Compare two point clouds with ICP/GICP registration |
41
+ | `ca scan-match-debug` | Debug one scan-to-map ICP/GICP attempt with before/after distances and artifacts |
41
42
  | `ca diff` | Quick distance stats (no registration) |
42
43
  | `ca evaluate` | F1, Chamfer, Hausdorff, AUC evaluation |
43
44
  | `ca check` | Config-driven unified QA (`cloudanalyzer.yaml`) |
44
45
  | `ca init-check` | Emit a starter `cloudanalyzer.yaml` profile |
46
+ | `ca detection-evaluate` | 3D object detection QA for axis-aligned boxes (mAP, precision/recall/F1, reports) |
45
47
  | `ca ground-evaluate` | Ground segmentation QA (precision/recall/F1/IoU, optional gates) |
48
+ | `ca tracking-evaluate` | 3D multi-object tracking QA (MOTA, ID switches, precision/recall/F1, reports) |
46
49
  | `ca traj-evaluate` | ATE, translational RPE, drift evaluation for trajectories |
47
50
  | `ca traj-batch` | Batch trajectory benchmark with coverage, gate, and reports |
48
51
  | `ca run-evaluate` | Combined map + trajectory QA for one run |
49
52
  | `ca run-batch` | Combined map + trajectory benchmark across multiple runs |
50
- | `ca info` | Point cloud metadata (points, BBox, centroid) |
51
- | `ca stats` | Detailed statistics (density, spacing distribution) |
53
+ | `ca info` | Point cloud metadata (points, BBox, robust BBox, centroid) |
54
+ | `ca stats` | Detailed statistics (density, robust density, spacing distribution) |
52
55
  | `ca batch` | Run info on all files in a directory |
53
56
 
54
57
  ### Processing
@@ -104,6 +107,20 @@ ca traj-evaluate estimated.csv reference.csv \
104
107
  --report trajectory_report.html
105
108
  # report also writes sibling trajectory overlay and error timeline PNGs
106
109
 
110
+ # Ground segmentation evaluation with report output
111
+ ca ground-evaluate estimated_ground.pcd estimated_nonground.pcd \
112
+ reference_ground.pcd reference_nonground.pcd \
113
+ --min-f1 0.9 --min-iou 0.8 --report ground_report.html
114
+
115
+ # 3D object detection evaluation from JSON box sequences
116
+ ca detection-evaluate estimated_detection.json reference_detection.json \
117
+ --iou-thresholds 0.25,0.5 --min-map 0.9 --report detection_report.html
118
+
119
+ # 3D multi-object tracking evaluation from JSON box sequences
120
+ ca tracking-evaluate estimated_tracking.json reference_tracking.json \
121
+ --iou-threshold 0.5 --min-mota 0.8 --max-id-switches 2 \
122
+ --report tracking_report.html
123
+
107
124
  # Ignore constant initial translation offset
108
125
  ca traj-evaluate estimated.csv reference.csv --align-origin
109
126
 
@@ -148,10 +165,10 @@ ca web estimated.pcd reference.pcd --heatmap
148
165
  # Browser run viewer: map heatmap + trajectory overlay
149
166
  ca web map.pcd map_ref.pcd --heatmap \
150
167
  --trajectory traj.csv --trajectory-reference traj_ref.csv
151
- # paired trajectory があると worst ATE pose worst RPE segment を viewer 上で強調する
152
- # marker / segment をクリックすると timestamp error summary inspection panel に表示する
153
- # click 時は camera も選択箇所へ寄り、Reset View で全景に戻せる
154
- # trajectory error timeline viewer 内に出て、point click 3D selection と同期する
168
+ # With paired trajectories, the viewer also highlights the worst ATE pose and worst RPE segment.
169
+ # Clicking a marker or segment shows the timestamp and error summary in the inspection panel.
170
+ # The camera also moves toward the selected location, and Reset View returns to the full scene.
171
+ # The trajectory error timeline is shown in the same viewer and stays synced with 3D point selections.
155
172
 
156
173
  # === Compare ===
157
174
  ca compare source.pcd target.pcd \
@@ -189,6 +206,11 @@ ca batch /path/to/results/ --evaluate reference.pcd --min-auc 0.95 --max-chamfer
189
206
  ca density-map cloud.pcd -o density.png -r 1.0 -a z
190
207
  ```
191
208
 
209
+ `ca info` and `ca stats` also report p01-p99 robust extents and the number/ratio
210
+ of points outside that robust bounding box. These fields are useful for SLAM maps
211
+ where a small number of far outliers can dominate the ordinary axis-aligned
212
+ extent and hide whether the main map body is stable.
213
+
192
214
  ## Global Options
193
215
 
194
216
  ```bash
@@ -201,7 +223,7 @@ ca --quiet ... # Suppress non-error output
201
223
  - `--output-json <path>` — Dump result as JSON file
202
224
  - `--format-json` — Print JSON to stdout for piping
203
225
  - `--plot <path>` — F1 curve plot (evaluate only)
204
- - `--report <path>` — Markdown/HTML report (`batch`, `traj-evaluate`, `traj-batch`, `run-evaluate`, `run-batch`)
226
+ - `--report <path>` — Markdown/HTML report (`batch`, `detection-evaluate`, `ground-evaluate`, `tracking-evaluate`, `traj-evaluate`, `traj-batch`, `run-evaluate`, `run-batch`)
205
227
 
206
228
  ```bash
207
229
  # Pipe JSON to jq
@@ -213,6 +235,40 @@ ca evaluate a.pcd b.pcd --format-json | jq '.auc'
213
235
 
214
236
  Point cloud / trajectory / perception QA is usually driven by `ca check` and a `cloudanalyzer.yaml` config (see [docs/ci.md](https://github.com/rsasaki0109/CloudAnalyzer/blob/main/docs/ci.md) and the [map quality gate tutorial](https://github.com/rsasaki0109/CloudAnalyzer/blob/main/docs/tutorial-map-quality-gate.md)).
215
237
 
238
+ For object detection / tracking, the current stable contract is a JSON sequence:
239
+
240
+ ```json
241
+ {
242
+ "frames": [
243
+ {
244
+ "frame_id": "000001",
245
+ "boxes": [
246
+ {
247
+ "label": "car",
248
+ "center": [0.0, 0.0, 0.0],
249
+ "size": [4.0, 1.8, 1.6],
250
+ "score": 0.97,
251
+ "track_id": "pred-17"
252
+ }
253
+ ]
254
+ }
255
+ ]
256
+ }
257
+ ```
258
+
259
+ `ca detection-evaluate` uses `label`, `center`, `size`, and optional `score`; `ca tracking-evaluate` also requires `track_id`. Geometry is currently evaluated as **axis-aligned 3D boxes** and ignores yaw if present in the source JSON.
260
+
261
+ Checked-in public sample JSONs live under `demo_assets/public/rellis3d-frame-000001/object_eval/`:
262
+
263
+ - `detection_reference.json`
264
+ - `detection_estimated_good.json`
265
+ - `detection_estimated_regressed.json`
266
+ - `tracking_reference.json`
267
+ - `tracking_estimated_good.json`
268
+ - `tracking_estimated_regressed.json`
269
+
270
+ Those examples are generated from the public RELLIS-3D seed frame; the tracking files are deterministic synthetic 3-frame sequences seeded from that public frame so the contract can be demonstrated without bundling a full public MOT dataset.
271
+
216
272
  In **this** GitHub repo, reusable workflows run the same gates in CI. Pin to a **tag or SHA** when calling them from another repository (not floating `@main`).
217
273
 
218
274
  ```yaml
@@ -263,4 +319,5 @@ result = split("large.pcd", "tiles/", grid_size=100.0)
263
319
 
264
320
  - `.pcd` (Point Cloud Data)
265
321
  - `.ply` (Polygon File Format)
266
- - `.las` (LiDAR)
322
+ - `.las` / `.laz` (LiDAR)
323
+ - `.csv` (`x,y,z` or GLIM-style `x_m,y_m,z_m`)
@@ -1,3 +1,3 @@
1
1
  """CloudAnalyzer - AI-friendly CLI tool for point cloud analysis."""
2
2
 
3
- __version__ = "0.1.0"
3
+ __version__ = "0.3.0"
@@ -2,7 +2,7 @@
2
2
 
3
3
  import open3d as o3d
4
4
 
5
- from ca.io import load_point_cloud
5
+ from ca.io import load_point_cloud, save_point_cloud
6
6
  from ca.registration import register
7
7
 
8
8
 
@@ -49,7 +49,7 @@ def align(
49
49
  })
50
50
  accumulated += transformed
51
51
 
52
- o3d.io.write_point_cloud(output_path, accumulated)
52
+ save_point_cloud(output_path, accumulated)
53
53
 
54
54
  return {
55
55
  "output": output_path,