euler-eval 2.19.0__tar.gz → 2.20.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.
- {euler_eval-2.19.0 → euler_eval-2.20.0}/PKG-INFO +1 -1
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/evaluate.py +9 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/sanity_checker.py +16 -4
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval.egg-info/PKG-INFO +1 -1
- {euler_eval-2.19.0 → euler_eval-2.20.0}/pyproject.toml +1 -1
- {euler_eval-2.19.0 → euler_eval-2.20.0}/tests/test_points_3d.py +9 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/tests/test_points_3d_sparse.py +16 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/README.md +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/__init__.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/calibration.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/cli.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/config_paths.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/data.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/__init__.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/absrel.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/daniel_error.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/depth_binned_error.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/depth_edge_f1.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/depth_standard.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/fid_kid.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/gpu_depth_batch.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/gpu_image_batch.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/high_freq_energy.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/lpips_metric.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/normal_consistency.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/points3d_cloud.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/points3d_decomposition.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/points3d_distance.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/points3d_geometry.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/psnr.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/rgb_edge_f1.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/rgb_lpips.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/rgb_psnr_ssim.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/rho_a.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/rmse.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/scale_invariant_log.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/ssim.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/tail_errors.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/metrics/utils.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/utils/hierarchy_parser.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval/validation.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval.egg-info/SOURCES.txt +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval.egg-info/dependency_links.txt +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval.egg-info/entry_points.txt +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval.egg-info/requires.txt +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/euler_eval.egg-info/top_level.txt +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/init_cache.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/setup.cfg +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/tests/test_alignment.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/tests/test_cli_device.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/tests/test_config.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/tests/test_data.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/tests/test_data_builders.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/tests/test_depth_alignment_output.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/tests/test_depth_standard.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/tests/test_evaluate_helpers.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/tests/test_init_cache.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/tests/test_integration.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/tests/test_meta_output.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/tests/test_metrics_utils.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/tests/test_rgb_fid_output.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/tests/test_rho_a.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/tests/test_save_results.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/tests/test_sparse_depth.py +0 -0
- {euler_eval-2.19.0 → euler_eval-2.20.0}/tests/test_validation.py +0 -0
|
@@ -3829,6 +3829,15 @@ def evaluate_points_3d_sparse_samples(
|
|
|
3829
3829
|
pred_ok_native = pred_ok_native & sky_valid
|
|
3830
3830
|
pred_ok_metric = pred_ok_metric & sky_valid
|
|
3831
3831
|
|
|
3832
|
+
if sanity_checker is not None:
|
|
3833
|
+
# Keep the sanity-check sample accounting consistent with
|
|
3834
|
+
# the dense points_3d evaluator. Metric validation below
|
|
3835
|
+
# may add warnings, but sample counting belongs to input
|
|
3836
|
+
# validation so each evaluated pair is counted once.
|
|
3837
|
+
sanity_checker.validate_points_3d_input(
|
|
3838
|
+
pred_map_native, gt_point_map, entry_id
|
|
3839
|
+
)
|
|
3840
|
+
|
|
3832
3841
|
# Native correspondence mask drives the shared angular metrics.
|
|
3833
3842
|
native_corr = gt_valid & pred_ok_native
|
|
3834
3843
|
total_evaluated_points += int(native_corr.sum())
|
|
@@ -1119,7 +1119,10 @@ class SanityChecker:
|
|
|
1119
1119
|
print("-" * 70)
|
|
1120
1120
|
|
|
1121
1121
|
for key, info in depth_report["warnings_by_type"].items():
|
|
1122
|
-
ratio =
|
|
1122
|
+
ratio = (
|
|
1123
|
+
info["count"] / depth_report["total_samples"]
|
|
1124
|
+
if depth_report["total_samples"] > 0 else 0
|
|
1125
|
+
)
|
|
1123
1126
|
print(f"\n {info['metric']} - {info['type']}:")
|
|
1124
1127
|
print(f" Occurrences: {info['count']}/{depth_report['total_samples']} ({ratio*100:.1f}%)")
|
|
1125
1128
|
print(f" {info['message']}")
|
|
@@ -1134,7 +1137,10 @@ class SanityChecker:
|
|
|
1134
1137
|
print("-" * 70)
|
|
1135
1138
|
|
|
1136
1139
|
for key, info in rgb_report["warnings_by_type"].items():
|
|
1137
|
-
ratio =
|
|
1140
|
+
ratio = (
|
|
1141
|
+
info["count"] / rgb_report["total_samples"]
|
|
1142
|
+
if rgb_report["total_samples"] > 0 else 0
|
|
1143
|
+
)
|
|
1138
1144
|
print(f"\n {info['metric']} - {info['type']}:")
|
|
1139
1145
|
print(f" Occurrences: {info['count']}/{rgb_report['total_samples']} ({ratio*100:.1f}%)")
|
|
1140
1146
|
print(f" {info['message']}")
|
|
@@ -1149,7 +1155,10 @@ class SanityChecker:
|
|
|
1149
1155
|
print("-" * 70)
|
|
1150
1156
|
|
|
1151
1157
|
for key, info in rays_report["warnings_by_type"].items():
|
|
1152
|
-
ratio =
|
|
1158
|
+
ratio = (
|
|
1159
|
+
info["count"] / rays_report["total_samples"]
|
|
1160
|
+
if rays_report["total_samples"] > 0 else 0
|
|
1161
|
+
)
|
|
1153
1162
|
print(f"\n {info['metric']} - {info['type']}:")
|
|
1154
1163
|
print(f" Occurrences: {info['count']}/{rays_report['total_samples']} ({ratio*100:.1f}%)")
|
|
1155
1164
|
print(f" {info['message']}")
|
|
@@ -1164,7 +1173,10 @@ class SanityChecker:
|
|
|
1164
1173
|
print("-" * 70)
|
|
1165
1174
|
|
|
1166
1175
|
for key, info in points_3d_report["warnings_by_type"].items():
|
|
1167
|
-
ratio =
|
|
1176
|
+
ratio = (
|
|
1177
|
+
info["count"] / points_3d_report["total_samples"]
|
|
1178
|
+
if points_3d_report["total_samples"] > 0 else 0
|
|
1179
|
+
)
|
|
1168
1180
|
print(f"\n {info['metric']} - {info['type']}:")
|
|
1169
1181
|
print(f" Occurrences: {info['count']}/{points_3d_report['total_samples']} ({ratio*100:.1f}%)")
|
|
1170
1182
|
print(f" {info['message']}")
|
|
@@ -485,6 +485,15 @@ class TestSanity:
|
|
|
485
485
|
assert "camera_dominated_error" in types
|
|
486
486
|
assert "rho_a_too_low" in types
|
|
487
487
|
|
|
488
|
+
def test_report_handles_metric_warning_without_counted_input(self, capsys):
|
|
489
|
+
sc = self._checker()
|
|
490
|
+
sc.validate_points_3d_metrics(lateral_fraction=0.95, file_id="f0")
|
|
491
|
+
|
|
492
|
+
sc.print_report()
|
|
493
|
+
|
|
494
|
+
output = capsys.readouterr().out
|
|
495
|
+
assert "Occurrences: 1/0 (0.0%)" in output
|
|
496
|
+
|
|
488
497
|
def test_full_report_includes_points_3d(self):
|
|
489
498
|
sc = self._checker()
|
|
490
499
|
assert "points_3d" in sc.get_full_report()
|
|
@@ -20,6 +20,7 @@ from euler_eval.data import (
|
|
|
20
20
|
)
|
|
21
21
|
from euler_eval.evaluate import evaluate_points_3d_sparse_samples
|
|
22
22
|
from euler_eval.metrics import compute_sparse_cloud_distance_metrics
|
|
23
|
+
from euler_eval.sanity_checker import SanityChecker
|
|
23
24
|
|
|
24
25
|
|
|
25
26
|
def _rot_z(theta):
|
|
@@ -91,6 +92,21 @@ def _perfect_dataset(seed=0, **kwargs):
|
|
|
91
92
|
return _SparsePointDataset(cloud, depth, K, **kwargs), depth, K, cloud
|
|
92
93
|
|
|
93
94
|
|
|
95
|
+
def test_sparse_evaluation_counts_sanity_check_samples():
|
|
96
|
+
dataset, _, _, _ = _perfect_dataset()
|
|
97
|
+
sanity_checker = SanityChecker()
|
|
98
|
+
|
|
99
|
+
evaluate_points_3d_sparse_samples(
|
|
100
|
+
dataset,
|
|
101
|
+
pred_is_radial=False,
|
|
102
|
+
num_workers=0,
|
|
103
|
+
sanity_checker=sanity_checker,
|
|
104
|
+
alignment_mode="none",
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
assert sanity_checker.get_points_3d_report()["total_samples"] == 1
|
|
108
|
+
|
|
109
|
+
|
|
94
110
|
# ---------------------------------------------------------------------------
|
|
95
111
|
# Directed (sparse) cloud distance
|
|
96
112
|
# ---------------------------------------------------------------------------
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|