bioimage-cpp 0.1.1__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.
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/AGENTS.md +26 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/CMakeLists.txt +3 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/MIGRATION_GUIDE.md +673 -47
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/PKG-INFO +6 -1
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/README.md +5 -0
- bioimage_cpp-0.3.0/development/affinities/check_compute_embedding_distances.py +220 -0
- bioimage_cpp-0.3.0/development/distance/benchmark.py +580 -0
- bioimage_cpp-0.3.0/development/distance/check_non_maximum_distance_suppression.py +140 -0
- bioimage_cpp-0.3.0/development/flow/PERFORMANCE_NOTES.md +260 -0
- bioimage_cpp-0.3.0/development/flow/_reference_impl.py +85 -0
- bioimage_cpp-0.3.0/development/flow/benchmark.py +167 -0
- bioimage_cpp-0.3.0/development/flow/check_flow_density.py +141 -0
- bioimage_cpp-0.3.0/development/flow/create_test_data.py +40 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/graph/_grid_affinity_compatibility.py +7 -7
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/graph/_rag_compatibility.py +2 -2
- bioimage_cpp-0.3.0/development/graph/agglomeration/PERFORMANCE_NOTES.md +307 -0
- bioimage_cpp-0.3.0/development/graph/agglomeration/_compatibility.py +171 -0
- bioimage_cpp-0.3.0/development/graph/agglomeration/check_edge_weighted.py +65 -0
- bioimage_cpp-0.3.0/development/graph/agglomeration/check_gasp.py +86 -0
- bioimage_cpp-0.3.0/development/graph/agglomeration/check_mala.py +61 -0
- bioimage_cpp-0.3.0/development/graph/agglomeration/check_node_and_edge_weighted.py +74 -0
- bioimage_cpp-0.3.0/development/graph/agglomeration/diagnose.py +173 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/graph/lifted_multicut/_compatibility.py +3 -3
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/graph/lifted_multicut/check_fusion_move.py +2 -2
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/graph/lifted_multicut/check_greedy_additive.py +1 -1
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/graph/lifted_multicut/check_kernighan_lin.py +1 -1
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/graph/lifted_multicut/evaluate_solvers.py +6 -6
- bioimage_cpp-0.3.0/development/graph/lifted_multicut/repro_lifted_edges_segfault.py +154 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/graph/multicut/_compatibility.py +3 -3
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/graph/multicut/check_chained.py +3 -3
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/graph/multicut/check_decomposer.py +1 -1
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/graph/multicut/check_fusion_move.py +2 -2
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/graph/multicut/check_greedy_additive.py +1 -1
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/graph/multicut/check_greedy_fixation.py +1 -1
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/graph/multicut/check_kernighan_lin.py +1 -1
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/graph/multicut/evaluate_solvers.py +13 -13
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/graph/mutex_watershed/check_mutex_clustering.py +2 -2
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/graph/mutex_watershed/check_semantic_mutex_clustering.py +7 -7
- bioimage_cpp-0.3.0/development/label_multiset/benchmark.py +229 -0
- bioimage_cpp-0.3.0/development/local_maxima/benchmark.py +513 -0
- bioimage_cpp-0.3.0/development/segmentation/_label_equivalence.py +281 -0
- bioimage_cpp-0.3.0/development/segmentation/check_label_2d.py +47 -0
- bioimage_cpp-0.3.0/development/segmentation/check_label_3d.py +47 -0
- bioimage_cpp-0.3.0/development/segmentation/check_relabel_sequential.py +165 -0
- bioimage_cpp-0.3.0/development/utils/_mesh_smoothing_reference.py +42 -0
- bioimage_cpp-0.3.0/development/utils/benchmark_mesh_smoothing.py +177 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/examples/segmentation/_lifted_problem.py +3 -3
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/examples/segmentation/lifted_multicut_from_affinities.py +4 -4
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/examples/segmentation/multicut_from_affinities.py +5 -5
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/examples/segmentation/serialize_grid_lifted_problem.py +1 -1
- bioimage_cpp-0.3.0/include/bioimage_cpp/affinities/compute_embedding_distances.hxx +228 -0
- bioimage_cpp-0.3.0/include/bioimage_cpp/distance_transform.hxx +447 -0
- bioimage_cpp-0.3.0/include/bioimage_cpp/flow/flow_density.hxx +320 -0
- bioimage_cpp-0.3.0/include/bioimage_cpp/graph/agglomeration/agglomerative_clustering.hxx +52 -0
- bioimage_cpp-0.3.0/include/bioimage_cpp/graph/agglomeration/cluster_policy_base.hxx +116 -0
- bioimage_cpp-0.3.0/include/bioimage_cpp/graph/agglomeration/detail.hxx +132 -0
- bioimage_cpp-0.3.0/include/bioimage_cpp/graph/agglomeration/edge_weighted.hxx +181 -0
- bioimage_cpp-0.3.0/include/bioimage_cpp/graph/agglomeration/gasp.hxx +237 -0
- bioimage_cpp-0.3.0/include/bioimage_cpp/graph/agglomeration/mala.hxx +241 -0
- bioimage_cpp-0.3.0/include/bioimage_cpp/graph/agglomeration/node_and_edge_weighted.hxx +235 -0
- bioimage_cpp-0.3.0/include/bioimage_cpp/graph/agglomeration.hxx +8 -0
- bioimage_cpp-0.3.0/include/bioimage_cpp/graph/grid_edge_projection.hxx +276 -0
- bioimage_cpp-0.3.0/include/bioimage_cpp/graph/label_accumulation.hxx +139 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/lifted_multicut/fusion_move.hxx +8 -0
- bioimage_cpp-0.3.0/include/bioimage_cpp/graph/lifted_multicut/lifted_from_node_labels.hxx +150 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/multicut/fusion_move.hxx +7 -0
- bioimage_cpp-0.3.0/include/bioimage_cpp/graph/rag_coordinates.hxx +381 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/undirected_graph.hxx +20 -6
- bioimage_cpp-0.3.0/include/bioimage_cpp/label_multiset/downsample.hxx +124 -0
- bioimage_cpp-0.3.0/include/bioimage_cpp/label_multiset/from_labels.hxx +147 -0
- bioimage_cpp-0.3.0/include/bioimage_cpp/label_multiset/merger.hxx +143 -0
- bioimage_cpp-0.3.0/include/bioimage_cpp/label_multiset/multiset.hxx +66 -0
- bioimage_cpp-0.3.0/include/bioimage_cpp/label_multiset/read_subset.hxx +136 -0
- bioimage_cpp-0.3.0/include/bioimage_cpp/mesh_smoothing.hxx +187 -0
- bioimage_cpp-0.3.0/include/bioimage_cpp/non_maximum_distance_suppression.hxx +143 -0
- bioimage_cpp-0.3.0/include/bioimage_cpp/run_length.hxx +48 -0
- bioimage_cpp-0.3.0/include/bioimage_cpp/segmentation/connected_components.hxx +509 -0
- bioimage_cpp-0.3.0/include/bioimage_cpp/segmentation/relabel_sequential.hxx +86 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bindings/affinities.cxx +99 -0
- bioimage_cpp-0.3.0/src/bindings/distance.cxx +316 -0
- bioimage_cpp-0.3.0/src/bindings/distance.hxx +9 -0
- bioimage_cpp-0.3.0/src/bindings/flow.cxx +180 -0
- bioimage_cpp-0.3.0/src/bindings/flow.hxx +9 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bindings/graph.cxx +738 -1
- bioimage_cpp-0.3.0/src/bindings/label_multiset.cxx +335 -0
- bioimage_cpp-0.3.0/src/bindings/label_multiset.hxx +9 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bindings/module.cxx +6 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bindings/segmentation.cxx +212 -0
- bioimage_cpp-0.3.0/src/bindings/utils.cxx +252 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bioimage_cpp/__init__.py +22 -1
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bioimage_cpp/_data.py +64 -0
- bioimage_cpp-0.3.0/src/bioimage_cpp/_version.py +1 -0
- bioimage_cpp-0.3.0/src/bioimage_cpp/affinities/__init__.py +6 -0
- bioimage_cpp-0.3.0/src/bioimage_cpp/affinities/compute_embedding_distances.py +93 -0
- bioimage_cpp-0.3.0/src/bioimage_cpp/distance/__init__.py +13 -0
- bioimage_cpp-0.3.0/src/bioimage_cpp/distance/_distance.py +294 -0
- bioimage_cpp-0.3.0/src/bioimage_cpp/flow/__init__.py +5 -0
- bioimage_cpp-0.3.0/src/bioimage_cpp/flow/_flow.py +164 -0
- bioimage_cpp-0.3.0/src/bioimage_cpp/graph/__init__.py +691 -0
- bioimage_cpp-0.3.0/src/bioimage_cpp/graph/_shared.py +235 -0
- bioimage_cpp-0.3.0/src/bioimage_cpp/graph/agglomeration.py +348 -0
- bioimage_cpp-0.3.0/src/bioimage_cpp/graph/features/__init__.py +594 -0
- bioimage_cpp-0.3.0/src/bioimage_cpp/graph/lifted_multicut/__init__.py +668 -0
- bioimage_cpp-0.3.0/src/bioimage_cpp/graph/multicut/__init__.py +511 -0
- bioimage_cpp-0.3.0/src/bioimage_cpp/graph/mutex_watershed.py +207 -0
- bioimage_cpp-0.3.0/src/bioimage_cpp/label_multiset/__init__.py +260 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bioimage_cpp/segmentation/__init__.py +4 -0
- bioimage_cpp-0.3.0/src/bioimage_cpp/segmentation/label.py +88 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bioimage_cpp/segmentation/mutex_watershed.py +8 -0
- bioimage_cpp-0.3.0/src/bioimage_cpp/segmentation/relabel_sequential.py +89 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bioimage_cpp/utils.py +163 -0
- bioimage_cpp-0.3.0/tests/affinities/test_compute_embedding_distances.py +139 -0
- bioimage_cpp-0.3.0/tests/distance/test_distance_transform.py +202 -0
- bioimage_cpp-0.3.0/tests/distance/test_non_maximum_distance_suppression.py +144 -0
- bioimage_cpp-0.3.0/tests/graph/agglomeration/_helpers.py +49 -0
- bioimage_cpp-0.3.0/tests/graph/agglomeration/test_edge_weighted.py +111 -0
- bioimage_cpp-0.3.0/tests/graph/agglomeration/test_gasp.py +155 -0
- bioimage_cpp-0.3.0/tests/graph/agglomeration/test_mala.py +118 -0
- bioimage_cpp-0.3.0/tests/graph/agglomeration/test_node_and_edge_weighted.py +96 -0
- bioimage_cpp-0.3.0/tests/graph/lifted_multicut/__init__.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/lifted_multicut/test_external_problem.py +7 -7
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/lifted_multicut/test_fusion_move.py +103 -59
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/lifted_multicut/test_greedy_additive.py +12 -12
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/lifted_multicut/test_kernighan_lin.py +12 -12
- bioimage_cpp-0.3.0/tests/graph/lifted_multicut/test_lifted_edges_from_node_labels.py +278 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/lifted_multicut/test_objective.py +15 -15
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/multicut/test_chain_decomposer.py +18 -18
- bioimage_cpp-0.3.0/tests/graph/multicut/test_external_problem.py +29 -0
- bioimage_cpp-0.3.0/tests/graph/multicut/test_fusion_move.py +306 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/multicut/test_greedy_additive.py +8 -8
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/multicut/test_greedy_fixation.py +8 -8
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/multicut/test_kernighan_lin.py +10 -10
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/multicut/test_objective.py +4 -4
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/multicut/test_proposal_generators.py +14 -14
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/test_grid_affinity_multicut_integration.py +10 -10
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/test_grid_features.py +16 -16
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/test_grid_graph.py +133 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/test_mutex_watershed_graph.py +19 -19
- bioimage_cpp-0.3.0/tests/graph/test_rag_accumulate_labels.py +245 -0
- bioimage_cpp-0.3.0/tests/graph/test_rag_coordinates.py +231 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/test_rag_features.py +12 -12
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/test_rag_lifted_features.py +26 -26
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/test_rag_multicut_integration.py +5 -5
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/test_semantic_mutex_watershed_graph.py +15 -15
- bioimage_cpp-0.3.0/tests/label_multiset/__init__.py +0 -0
- bioimage_cpp-0.3.0/tests/label_multiset/test_against_nifty.py +149 -0
- bioimage_cpp-0.3.0/tests/label_multiset/test_downsample.py +125 -0
- bioimage_cpp-0.3.0/tests/label_multiset/test_merger.py +129 -0
- bioimage_cpp-0.3.0/tests/label_multiset/test_read_subset.py +75 -0
- bioimage_cpp-0.3.0/tests/segmentation/test_label.py +416 -0
- bioimage_cpp-0.3.0/tests/segmentation/test_relabel_sequential.py +221 -0
- bioimage_cpp-0.3.0/tests/test_flow.py +180 -0
- bioimage_cpp-0.3.0/tests/test_utils_compute_rle.py +101 -0
- bioimage_cpp-0.3.0/tests/test_utils_mesh_smoothing.py +247 -0
- bioimage_cpp-0.1.1/src/bindings/utils.cxx +0 -113
- bioimage_cpp-0.1.1/src/bioimage_cpp/_version.py +0 -1
- bioimage_cpp-0.1.1/src/bioimage_cpp/affinities/__init__.py +0 -5
- bioimage_cpp-0.1.1/src/bioimage_cpp/graph/__init__.py +0 -2115
- bioimage_cpp-0.1.1/tests/graph/multicut/test_external_problem.py +0 -29
- bioimage_cpp-0.1.1/tests/graph/multicut/test_fusion_move.py +0 -267
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/.github/workflows/docs.yml +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/.github/workflows/tests.yml +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/.github/workflows/wheels.yml +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/.gitignore +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/LICENSE +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/affinities/check_compute_affinities.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/filters/PERFORMANCE_NOTES.md +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/filters/_bench_utils.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/filters/benchmark.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/filters/check_parity.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/graph/check_grid_affinity_edges.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/graph/check_grid_affinity_lifted_edges.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/graph/check_rag_2d.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/graph/check_rag_3d.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/graph/lifted_multicut/PERFORMANCE_NOTES.md +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/graph/multicut/PERFORMANCE_NOTES.md +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/segmentation/PERFORMANCE_NOTES.md +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/segmentation/_mutex_watershed_equivalence.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/segmentation/_semantic_mws_equivalence.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/segmentation/_watershed_equivalence.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/segmentation/_watershed_from_affinities_equivalence.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/segmentation/check_mutex_watershed_2d.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/segmentation/check_mutex_watershed_3d.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/segmentation/check_semantic_mutex_watershed_2d.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/segmentation/check_semantic_mutex_watershed_3d.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/segmentation/check_watershed_2d.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/segmentation/check_watershed_3d.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/segmentation/check_watershed_from_affinities_2d.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/segmentation/check_watershed_from_affinities_3d.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/transformation/PERFORMANCE_NOTES.md +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/development/transformation/check_affine.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/examples/segmentation/mutex_watershed.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/examples/segmentation/serialize_lifted_problem.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/examples/segmentation/watershed.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/affinities/compute_affinities.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/array_view.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/blocking.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/detail/edge_hash.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/detail/grid.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/detail/indexed_heap.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/detail/mutex_storage.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/detail/profile.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/detail/relabel.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/detail/semantic_labels.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/detail/threading.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/filters/convolve.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/filters/eigenvalues.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/filters/gaussian.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/filters/kernel.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/breadth_first_search.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/connected_components.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/detail/fusion_contract.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/edge_weighted_watershed.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/feature_accumulation.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/grid_features.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/grid_graph.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/lifted_from_affinities.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/lifted_multicut/detail.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/lifted_multicut/greedy_additive.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/lifted_multicut/kernighan_lin.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/lifted_multicut/objective.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/lifted_multicut.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/multicut/detail.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/multicut/greedy_additive.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/multicut/greedy_fixation.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/multicut/kernighan_lin.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/multicut/objective.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/multicut.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/mutex_watershed/clustering.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/mutex_watershed/semantic.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/mutex_watershed.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/node_label_projection.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/proposal_generator.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/proposal_generators/greedy_additive_multicut.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/proposal_generators/watershed.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/graph/region_adjacency_graph.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/overlap.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/segmentation/mutex_watershed.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/segmentation/semantic_mutex_watershed.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/segmentation/watershed.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/take_dict.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/transformation/affine.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/include/bioimage_cpp/util/union_find.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/pyproject.toml +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bindings/affinities.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bindings/blocking.cxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bindings/blocking.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bindings/filters.cxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bindings/filters.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bindings/graph.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bindings/ground_truth.cxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bindings/ground_truth.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bindings/segmentation.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bindings/transformation.cxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bindings/transformation.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bindings/util.cxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bindings/util.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bindings/utils.hxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bioimage_cpp/affinities/compute_affinities.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bioimage_cpp/filters/__init__.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bioimage_cpp/filters/_filters.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bioimage_cpp/graph/_external.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bioimage_cpp/segmentation/watershed.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bioimage_cpp/transformation/__init__.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/bioimage_cpp/transformation/_transformation.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/cpp/segmentation/mutex_watershed.cxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/cpp/segmentation/semantic_mutex_watershed.cxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/src/cpp/take_dict.cxx +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/affinities/test_compute_affinities.py +0 -0
- {bioimage_cpp-0.1.1/tests/graph/lifted_multicut → bioimage_cpp-0.3.0/tests/graph/agglomeration}/__init__.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/lifted_multicut/_helpers.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/lifted_multicut/conftest.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/multicut/__init__.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/multicut/_helpers.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/multicut/conftest.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/test_breadth_first_search.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/test_connected_components.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/test_edge_weighted_watershed.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/test_node_label_projection.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/test_region_adjacency_graph.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/graph/test_undirected_graph.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/segmentation/test_mutex_watershed.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/segmentation/test_semantic_mutex_watershed.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/segmentation/test_watershed.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/segmentation/test_watershed_from_affinities.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/test_blocking.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/test_filters.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/test_ground_truth_overlap.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/test_transformation.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/test_util_union_find.py +0 -0
- {bioimage_cpp-0.1.1 → bioimage_cpp-0.3.0}/tests/test_utils_take_dict.py +0 -0
|
@@ -60,6 +60,32 @@ new fusion-move / proposal-based / contraction-based solver:
|
|
|
60
60
|
- `detail/threading.hxx::parallel_for_chunks` — the only threading primitive
|
|
61
61
|
we use. New parallel solvers should not introduce alternatives.
|
|
62
62
|
|
|
63
|
+
### Freeze graphs before parallel fan-out (thread-safety contract)
|
|
64
|
+
|
|
65
|
+
`UndirectedGraph` (and its subclasses) build the CSR adjacency *lazily*: the
|
|
66
|
+
first `node_adjacency` read on a graph built incrementally rebuilds it through
|
|
67
|
+
a `mutable` write inside a `const` method, and that rebuild is **not
|
|
68
|
+
thread-safe**. Graphs are "dirty" (not yet built) after `insert_edge`-based
|
|
69
|
+
construction — this includes the `from_edges` binding, `region_adjacency_graph`,
|
|
70
|
+
and `GridGraph` (which defers the build on purpose). `from_sorted_unique_edges`
|
|
71
|
+
returns an already-frozen graph.
|
|
72
|
+
|
|
73
|
+
Rule: **any algorithm that reads `node_adjacency` from `parallel_for_chunks`
|
|
74
|
+
(or other threads) MUST call `graph.freeze()` on the calling thread before the
|
|
75
|
+
fan-out.** "Reads `node_adjacency`" includes the indirect readers
|
|
76
|
+
`breadth_first_search`, `extract_subgraph_from_nodes`, and the multicut
|
|
77
|
+
sub-solver `greedy_additive` (via `DynamicGraph::reset`, which sizes per-node
|
|
78
|
+
adjacency from `graph.node_adjacency(node)`). Edge-only iteration
|
|
79
|
+
(`uv`, `uv_ids`, `number_of_edges`) and `find_edge` (edge-lookup hashmap) do
|
|
80
|
+
*not* trigger the rebuild and need no freeze. Symptoms when this is missed:
|
|
81
|
+
nondeterministic results for fixed input and intermittent segfaults.
|
|
82
|
+
|
|
83
|
+
Canonical fixed call sites that already follow this (copy the pattern):
|
|
84
|
+
`lifted_multicut/lifted_from_node_labels.hxx` and both
|
|
85
|
+
`{multicut,lifted_multicut}/fusion_move.hxx::FusionMoveSolver::optimize`
|
|
86
|
+
(the lifted driver freezes the *base* graph — its proposal generators read base
|
|
87
|
+
adjacency, while its warm-start only touches the lifted graph).
|
|
88
|
+
|
|
63
89
|
When porting fusion moves to a new objective (e.g. lifted multicut):
|
|
64
90
|
|
|
65
91
|
1. The driver loop in `multicut/fusion_move.hxx::FusionMoveSolver::optimize`
|
|
@@ -13,10 +13,13 @@ nanobind_add_module(_core
|
|
|
13
13
|
NB_STATIC
|
|
14
14
|
src/bindings/affinities.cxx
|
|
15
15
|
src/bindings/blocking.cxx
|
|
16
|
+
src/bindings/distance.cxx
|
|
16
17
|
src/bindings/module.cxx
|
|
17
18
|
src/bindings/filters.cxx
|
|
19
|
+
src/bindings/flow.cxx
|
|
18
20
|
src/bindings/graph.cxx
|
|
19
21
|
src/bindings/ground_truth.cxx
|
|
22
|
+
src/bindings/label_multiset.cxx
|
|
20
23
|
src/bindings/segmentation.cxx
|
|
21
24
|
src/bindings/transformation.cxx
|
|
22
25
|
src/bindings/util.cxx
|