Uniform Manifold Approximation and Projection
This report summarizes scanner evidence for lmcinnes/umap, a Python project with 8,273 GitHub stars. SynthScan examined 18,440 lines of code across 67 source files, recording 341 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 31.5 (High pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 233 finding(s).
Are imports declared and package/API names verified? 20 finding(s).
Are wrappers, guards, and repeated structures necessary? 279 finding(s).
Which changes need focused human review? 341 finding(s).
Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 341 distinct pattern matches across 9 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | umap/tests/test_umap_nn.py | 14 | # =================================================== | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_nn.py | 16 | # =================================================== | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_nn.py | 20 | # ----------------------------------------------- | COMMENT |
| MEDIUM | umap/tests/test_umap_nn.py | 38 | # ------------------------------------------------- | COMMENT |
| MEDIUM | umap/tests/test_umap_nn.py | 40 | # ------------------------------------------------- | COMMENT |
| MEDIUM | umap/tests/conftest.py | 1 | # =========================== | COMMENT |
| MEDIUM | umap/tests/conftest.py | 3 | # ========================== | COMMENT |
| MEDIUM | umap/tests/conftest.py | 17 | # ----------------------- | COMMENT |
| MEDIUM | umap/tests/conftest.py | 35 | # ------------------------------ | COMMENT |
| MEDIUM | umap/tests/conftest.py | 47 | # ----------------------- | COMMENT |
| MEDIUM | umap/tests/conftest.py | 74 | # --------------------- | COMMENT |
| MEDIUM | umap/tests/conftest.py | 204 | # --------------------- | COMMENT |
| MEDIUM⚡ | umap/tests/test_aligned_umap.py | 9 | # =============================== | COMMENT |
| MEDIUM⚡ | umap/tests/test_aligned_umap.py | 11 | # =============================== | COMMENT |
| MEDIUM | umap/tests/test_aligned_umap.py | 102 | # =============================== | COMMENT |
| MEDIUM | umap/tests/test_aligned_umap.py | 104 | # =============================== | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_trustworthiness.py | 18 | # =================================================== | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_trustworthiness.py | 20 | # =================================================== | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_ops.py | 224 | # --------------- | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_ops.py | 226 | # -------------- | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_ops.py | 236 | # ------------------- | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_ops.py | 339 | # ----------------- | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_ops.py | 341 | # ----------------- | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_ops.py | 355 | # ------------------------ | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_ops.py | 357 | # ------------------------ | COMMENT |
| MEDIUM | umap/tests/test_umap_ops.py | 1 | # =================================================== | COMMENT |
| MEDIUM | umap/tests/test_umap_ops.py | 4 | # =================================================== | COMMENT |
| MEDIUM | umap/tests/test_umap_ops.py | 274 | # ----------- | COMMENT |
| MEDIUM | umap/tests/test_umap_ops.py | 276 | # ----------- | COMMENT |
| MEDIUM | umap/tests/test_umap_validation_params.py | 1 | # =============================== | COMMENT |
| MEDIUM | umap/tests/test_umap_validation_params.py | 3 | # =============================== | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_metrics.py | 23 | # =================================================== | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_metrics.py | 25 | # =================================================== | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_metrics.py | 27 | # ---------------------------------- | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_metrics.py | 29 | # ---------------------------------- | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_metrics.py | 257 | # --------------------------- | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_metrics.py | 259 | # --------------------------- | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_metrics.py | 401 | # -------------------------------- | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_metrics.py | 403 | # -------------------------------- | COMMENT |
| MEDIUM | umap/tests/test_umap_metrics.py | 171 | # -------------------- | COMMENT |
| MEDIUM | umap/tests/test_umap_metrics.py | 173 | # -------------------- | COMMENT |
| MEDIUM | umap/tests/test_umap_metrics.py | 212 | # -------------------- | COMMENT |
| MEDIUM | umap/tests/test_umap_metrics.py | 214 | # -------------------- | COMMENT |
| MEDIUM | umap/tests/test_umap_metrics.py | 359 | # --------------------------- | COMMENT |
| MEDIUM | umap/tests/test_umap_metrics.py | 361 | # --------------------------- | COMMENT |
| MEDIUM | umap/tests/test_umap_metrics.py | 640 | # -------------------- | COMMENT |
| MEDIUM | umap/tests/test_umap_metrics.py | 642 | # -------------------- | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_repeated_data.py | 7 | # =================================================== | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_repeated_data.py | 9 | # =================================================== | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_repeated_data.py | 12 | # --------------------------------------------------- | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_repeated_data.py | 47 | # =================================================== | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_repeated_data.py | 49 | # =================================================== | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_repeated_data.py | 52 | # --------------------------------------------------- | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_repeated_data.py | 98 | # =================================================== | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_repeated_data.py | 100 | # =================================================== | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_repeated_data.py | 103 | # ---------------------------------------------------- | COMMENT |
| MEDIUM⚡ | umap/tests/test_umap_repeated_data.py | 107 | # ---------------------------------------------------- | COMMENT |
| MEDIUM | umap/tests/test_chunked_parallel_spatial_metric.py | 127 | # --------------------------------------------------------------- | COMMENT |
| MEDIUM | umap/tests/test_chunked_parallel_spatial_metric.py | 227 | # ---------------------------- | COMMENT |
| MEDIUM | umap/tests/test_chunked_parallel_spatial_metric.py | 230 | # ---------------------------- | COMMENT |
| 26 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | umap/plot.py | 178 | def _embed_datashader_in_an_axis(datashader_image, ax): | CODE |
| LOW | umap/plot.py | 1690 | def nearest_neighbour_distribution(umap_object, bins=25, ax=None): | STRING |
| LOW | umap/distances.py | 93 | def standardised_euclidean_grad(x, y, sigma=_mock_ones): | STRING |
| LOW | umap/distances.py | 989 | def spherical_gaussian_energy_grad(x, y): # pragma: no cover | STRING |
| LOW | umap/distances.py | 1007 | def diagonal_gaussian_energy_grad(x, y): # pragma: no cover | STRING |
| LOW | umap/distances.py | 1174 | def hierarchical_categorical_distance(x, y, cat_hierarchy=[{}]): | STRING |
| LOW | umap/distances.py | 1469 | def chunked_parallel_special_metric(X, Y=None, metric=hellinger, chunk_size=16): | STRING |
| LOW | umap/distances.py | 1512 | def _symmetric_pairwise_distances(X, metric, result): | STRING |
| LOW | umap/distances.py | 1525 | def numba_aware_pairwise_distances(X, metric, **kwds): | STRING |
| LOW | umap/umap_.py | 111 | def raise_disconnected_warning( | CODE |
| LOW | umap/umap_.py | 374 | def compute_membership_strengths( | CODE |
| LOW | umap/umap_.py | 801 | def discrete_metric_simplicial_set_intersection( | CODE |
| LOW | umap/umap_.py | 879 | def general_simplicial_set_intersection( | CODE |
| LOW | umap/umap_.py | 907 | def general_simplicial_set_union(simplicial_set1, simplicial_set2): | CODE |
| LOW | umap/umap_.py | 961 | def _densmap_original_densities( | CODE |
| LOW | umap/umap_.py | 981 | def _densmap_embedding_densities( | CODE |
| LOW | umap/umap_.py | 2161 | def _populate_combined_params(self, *models): | CODE |
| LOW | umap/sparse.py | 146 | def general_sset_intersection( | CODE |
| LOW | umap/layouts.py | 63 | def _optimize_layout_euclidean_single_epoch( | CODE |
| LOW | umap/layouts.py | 189 | def _optimize_layout_euclidean_densmap_epoch_init( | CODE |
| LOW | umap/layouts.py | 231 | def _get_optimize_layout_euclidean_single_epoch_fn(parallel: bool = False): | CODE |
| LOW | umap/layouts.py | 238 | def optimize_layout_euclidean( | CODE |
| LOW | umap/layouts.py | 445 | def _optimize_layout_generic_single_epoch( | CODE |
| LOW | umap/layouts.py | 661 | def _optimize_layout_inverse_single_epoch( | CODE |
| LOW | umap/layouts.py | 874 | def _optimize_layout_aligned_euclidean_single_epoch( | CODE |
| LOW | umap/layouts.py | 1025 | def optimize_layout_aligned_euclidean( | CODE |
| LOW | umap/parametric_umap.py | 653 | def init_embedding_from_graph( | CODE |
| LOW | umap/parametric_umap.py | 719 | def convert_distance_to_log_probability(distances, a=1.0, b=1.0): | CODE |
| LOW | umap/parametric_umap.py | 1298 | def _parametric_reconstruction_loss(self, y, y_pred): | CODE |
| LOW | umap/aligned_umap.py | 112 | def build_neighborhood_similarities(graphs_indptr, graphs_indices, relations): | CODE |
| LOW | umap/aligned_umap.py | 234 | def init_from_existing_internal( | CODE |
| LOW | umap/validation.py | 9 | def trustworthiness_vector_bulk( | CODE |
| LOW | umap/validation.py | 35 | def make_trustworthiness_calculator(metric): # pragma: no cover | CODE |
| LOW | umap/validation.py | 37 | def trustworthiness_vector_lowmem(source, indices_embedded, max_k): | CODE |
| LOW⚡ | umap/tests/test_umap_nn.py | 26 | def test_nn_bad_metric_sparse_data(sparse_nn_data): | CODE |
| LOW | umap/tests/test_umap_nn.py | 67 | def test_nn_descent_neighbor_accuracy(nn_data): # pragma: no cover | CODE |
| LOW | umap/tests/test_umap_nn.py | 78 | def test_nn_descent_neighbor_accuracy_low_memory(nn_data): # pragma: no cover | CODE |
| LOW | umap/tests/test_umap_nn.py | 89 | def test_angular_nn_descent_neighbor_accuracy(nn_data): # pragma: no cover | CODE |
| LOW | umap/tests/test_umap_nn.py | 101 | def test_sparse_nn_descent_neighbor_accuracy(sparse_nn_data): # pragma: no cover | CODE |
| LOW | umap/tests/test_umap_nn.py | 112 | def test_sparse_nn_descent_neighbor_accuracy_low_memory( | CODE |
| LOW | umap/tests/test_umap_nn.py | 125 | def test_nn_descent_neighbor_accuracy_callable_metric(nn_data): # pragma: no cover | CODE |
| LOW | umap/tests/test_umap_nn.py | 137 | def test_sparse_angular_nn_descent_neighbor_accuracy( | CODE |
| LOW | umap/tests/test_umap_nn.py | 171 | def test_smooth_knn_dist_disconnected_neighbors(): | CODE |
| LOW | umap/tests/test_plot.py | 56 | def test_nhood_search_uses_model_metric(metric, sparse_input): | CODE |
| LOW | umap/tests/conftest.py | 120 | def sparse_spatial_data_repeats(spatial_repeats, binary_repeats): | CODE |
| LOW | umap/tests/conftest.py | 125 | def sparse_binary_data_repeats(binary_repeats): | CODE |
| LOW⚡ | umap/tests/test_aligned_umap.py | 21 | def test_neighbor_local_neighbor_accuracy(aligned_iris, aligned_iris_model): | CODE |
| LOW | umap/tests/test_aligned_umap.py | 58 | def test_aligned_update_params(aligned_iris, aligned_iris_relations): | CODE |
| LOW | umap/tests/test_aligned_umap.py | 74 | def test_aligned_update_does_not_mutate_inputs(aligned_iris, aligned_iris_relations): | CODE |
| LOW | umap/tests/test_aligned_umap.py | 90 | def test_aligned_update_array_error(aligned_iris, aligned_iris_relations): | CODE |
| LOW | umap/tests/test_aligned_umap.py | 167 | def test_expand_relations_shape_and_sum(window_size, shape, total): | CODE |
| LOW | umap/tests/test_parametric_umap.py | 67 | def test_custom_encoder_decoder(moon_dataset): | CODE |
| LOW | umap/tests/test_parametric_umap.py | 149 | def test_landmark_retraining_no_nan(): | CODE |
| LOW | umap/tests/test_parametric_umap.py | 164 | def test_umap_loss_grads_finite_under_xla(): | CODE |
| LOW⚡ | umap/tests/test_umap_trustworthiness.py | 23 | def test_umap_sparse_trustworthiness(sparse_test_data): | CODE |
| LOW⚡ | umap/tests/test_umap_trustworthiness.py | 31 | def test_umap_trustworthiness_fast_approx(nn_data): | CODE |
| LOW | umap/tests/test_umap_trustworthiness.py | 46 | def test_umap_trustworthiness_random_init(nn_data): | CODE |
| LOW | umap/tests/test_umap_trustworthiness.py | 57 | def test_supervised_umap_trustworthiness(): | CODE |
| LOW | umap/tests/test_umap_trustworthiness.py | 68 | def test_semisupervised_umap_trustworthiness(): | CODE |
| LOW | umap/tests/test_umap_trustworthiness.py | 80 | def test_metric_supervised_umap_trustworthiness(): | CODE |
| 114 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | umap/plot.py | 982 | CODE | |
| LOW | umap/plot.py | 1313 | CODE | |
| LOW | umap/distances.py | 1469 | CODE | |
| LOW | umap/umap_.py | 85 | CODE | |
| LOW | umap/umap_.py | 153 | CODE | |
| LOW | umap/umap_.py | 374 | CODE | |
| LOW | umap/umap_.py | 1000 | CODE | |
| LOW | umap/umap_.py | 1453 | CODE | |
| LOW | umap/umap_.py | 1837 | CODE | |
| LOW | umap/umap_.py | 2424 | CODE | |
| LOW | umap/umap_.py | 3069 | CODE | |
| LOW | umap/umap_.py | 3364 | CODE | |
| LOW | umap/umap_.py | 3536 | CODE | |
| LOW | umap/sparse.py | 46 | CODE | |
| LOW | umap/sparse.py | 146 | CODE | |
| LOW | umap/spectral.py | 19 | CODE | |
| LOW | umap/spectral.py | 415 | CODE | |
| LOW | umap/layouts.py | 63 | CODE | |
| LOW | umap/layouts.py | 445 | CODE | |
| LOW | umap/layouts.py | 661 | CODE | |
| LOW | umap/layouts.py | 874 | CODE | |
| LOW | umap/parametric_umap.py | 653 | CODE | |
| LOW | umap/aligned_umap.py | 70 | CODE | |
| LOW | umap/aligned_umap.py | 112 | CODE | |
| LOW | umap/aligned_umap.py | 213 | CODE | |
| LOW | umap/aligned_umap.py | 234 | CODE | |
| LOW | umap/validation.py | 9 | CODE | |
| LOW | umap/validation.py | 35 | CODE | |
| LOW | umap/validation.py | 37 | CODE | |
| LOW | umap/tests/test_chunked_parallel_spatial_metric.py | 22 | CODE | |
| LOW | umap/tests/test_chunked_parallel_spatial_metric.py | 72 | CODE | |
| LOW | umap/tests/test_chunked_parallel_spatial_metric.py | 24 | CODE | |
| LOW | umap/tests/test_chunked_parallel_spatial_metric.py | 74 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | umap/plot.py | 46 | CODE | |
| LOW | umap/plot.py | 46 | CODE | |
| LOW | umap/umap_.py | 4 | CODE | |
| LOW | umap/umap_.py | 9 | CODE | |
| LOW | umap/__init__.py | 2 | CODE | |
| LOW | umap/__init__.py | 32 | CODE | |
| LOW | umap/__init__.py | 35 | CODE | |
| LOW | umap/__init__.py | 7 | CODE | |
| LOW | umap/__init__.py | 7 | CODE | |
| LOW | umap/sparse.py | 5 | CODE | |
| LOW | umap/parametric_umap.py | 41 | CODE | |
| LOW | umap/tests/test_plot.py | 10 | CODE | |
| LOW | umap/tests/test_parametric_umap.py | 2 | CODE | |
| LOW | umap/tests/test_parametric_umap.py | 6 | CODE | |
| LOW | umap/tests/test_parametric_umap.py | 16 | CODE | |
| LOW | umap/tests/test_umap_validation_params.py | 13 | CODE | |
| LOW | umap/tests/test_umap_on_iris.py | 10 | CODE | |
| LOW | examples/galaxy10sdss.py | 25 | CODE | |
| LOW | benchmarks/bench_fastmath_removal.py | 19 | CODE | |
| LOW | benchmarks/bench_fastmath_removal.py | 19 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | umap/plot.py | 283 | CODE | |
| LOW | umap/plot.py | 393 | CODE | |
| LOW | umap/plot.py | 511 | CODE | |
| LOW | umap/plot.py | 756 | CODE | |
| LOW | umap/plot.py | 982 | CODE | |
| LOW | umap/plot.py | 1313 | CODE | |
| LOW | umap/umap_.py | 455 | CODE | |
| LOW | umap/umap_.py | 1750 | CODE | |
| LOW | umap/layouts.py | 238 | CODE | |
| LOW | umap/layouts.py | 527 | CODE | |
| LOW | umap/layouts.py | 733 | CODE | |
| LOW | umap/layouts.py | 1025 | CODE | |
| LOW | umap/parametric_umap.py | 48 | CODE | |
| LOW | umap/parametric_umap.py | 1126 | CODE | |
| LOW | umap/aligned_umap.py | 275 | CODE | |
| LOW | umap/validation.py | 87 | CODE | |
| LOW | umap/tests/test_umap_grads.py | 76 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | umap/tests/test_parametric_umap.py | 121 | # @not_windows | COMMENT |
| LOW | umap/tests/test_umap_ops.py | 21 | COMMENT | |
| LOW | umap/tests/test_umap_grads.py | 301 | # TODO | COMMENT |
| LOW | ci_scripts/success.sh | 1 | set -e | COMMENT |
| LOW | doc/conf.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | doc/conf.py | 61 | author = "Leland McInnes" | COMMENT |
| LOW | doc/conf.py | 141 | htmlhelp_basename = "umapdoc" | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | doc/conf.py | 7 | # This file is execfile()d with the current directory set to its | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | benchmarks/bench_fastmath_removal.py | 97 | except Exception: | CODE |
| LOW | benchmarks/bench_fastmath_removal.py | 239 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | umap/umap_.py | 2502 | # Check if we should unique the data | COMMENT |