AI Slop Code RIsk Monitor

stumpy-dev/stumpy

STUMPY is a powerful and scalable Python library for modern time series analysis

6.8 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for stumpy-dev/stumpy, a Python project with 4,160 GitHub stars. SynthScan examined 72,212 lines of code across 128 source files, recording 399 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 6.8 (Moderate 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.

6.8
Adjusted Signal
6.8
Raw Pattern Score
100%
Time Factor
2026-10-03
Last Push
4.2K
Stars
Python
Language
72.2K
Lines of Code
128
Files
399
Pattern Hits
2026-10-12
Scan Date
0.18
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 22.8/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 372 finding(s).

Hallucinated Dependency & Supply Chain Risk 0.3/100 · LOW

Are imports declared and package/API names verified? 1 finding(s).

Agent Over-Engineering Ratio 24.4/100 · LOW

Are wrappers, guards, and repeated structures necessary? 319 finding(s).

PR Review Velocity Impact 30.2/100 · MEDIUM

Which changes need focused human review? 399 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.

No multi-scan history yet — run the scanner again to build trend data.

Severity Breakdown

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.

CRITICAL 0HIGH 23MEDIUM 3LOW 373

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 399 distinct pattern matches across 11 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.

Hyper-Verbose Identifiers280 hits · 277 pts
SeverityFileLineSnippetContext
LOWversions.py52def get_all_python_versions_in_range(start, stop):CODE
LOWversions.py78def get_min_numba_numpy_version(min_python):CODE
LOW⚡versions.py135def check_python_compatibility(row, min_python):CODE
LOW⚡versions.py143def check_scipy_compatibility(row, min_python, min_numpy):CODE
LOW⚡versions.py152def get_scipy_version_df_backup():CODE
LOWversions.py269def get_minor_versions_between(start_version_str, end_version_str):CODE
LOWversions.py310def get_latest_scipy_python_version():CODE
LOWversions.py318def get_latest_pkg_python_version(pkg):CODE
LOWversions.py347def get_latest_numpy_versions(n=10):CODE
LOWfastmath.py428def check_call_stack_fastmath(pkg_dir, pkg_name):CODE
LOWstumpy/maamp.py303def _maamp_multi_distance_profile(CODE
LOWstumpy/maamp.py397def maamp_multi_distance_profile(query_idx, T, m, include=None, discords=False, p=2.0):CODE
LOWstumpy/core.py289def _gpu_searchsorted_left_dnf(*args, **kwargs): # pragma: no coverCODE
LOWstumpy/core.py304def _gpu_searchsorted_right_dnf(*args, **kwargs): # pragma: no coverCODE
LOWstumpy/core.py1060def _calculate_squared_distance(CODE
LOWstumpy/core.py1128def _calculate_squared_distance_profile(CODE
LOWstumpy/core.py1194def calculate_distance_profile(CODE
LOWstumpy/core.py1418def _mass_absolute_distance_matrix(Q, T, m, distance_matrix, p=2.0):CODE
LOWstumpy/core.py1455def mueen_calculate_distance_profile(Q, T):CODE
LOWstumpy/core.py2175def preprocess_non_normalized(T, m, copy=True):CODE
LOWstumpy/core.py2650def fix_isconstant_isfinite_conflicts(CODE
LOWstumpy/mstump.py658def _get_first_mstump_profile(CODE
LOWstumpy/aampdist_snippets.py13def _get_all_aampdist_profiles(CODE
LOWstumpy/sdp.py28def _njit_sliding_dot_product(Q, T):CODE
LOWstumpy/sdp.py57def _convolve_sliding_dot_product(Q, T):CODE
LOWstumpy/sdp.py77def _oaconvolve_sliding_dot_product(Q, T):CODE
LOWstumpy/sdp.py97def _pocketfft_sliding_dot_product(Q, T):CODE
LOWstumpy/sdp.py129def _make_pyfftw_sliding_dot_product(init_len=2**20, real_dtype="float64"):CODE
LOWstumpy/ostinato.py13def _across_series_nearest_neighbors(CODE
LOWstumpy/aamp_ostinato.py12def _aamp_across_series_nearest_neighbors(CODE
LOWtests/test_maamped.py87def test_maamped_include_discords(T, m, dask_cluster):CODE
LOWtests/test_maamped.py117def test_maamped_constant_subsequence_self_join(dask_cluster):CODE
LOWtests/test_maamped.py134def test_maamped_identical_subsequence_self_join(dask_cluster):CODE
LOWtests/test_maamped.py156def test_maamped_one_subsequence_inf_self_join_first_dimension(CODE
LOWtests/test_maamped.py175def test_maamped_one_subsequence_inf_self_join_all_dimensions(CODE
LOWtests/test_maamped.py194def test_maamped_one_subsequence_nan_self_join_first_dimension(CODE
LOWtests/test_maamped.py213def test_maamped_one_subsequence_nan_self_join_all_dimensions(CODE
LOWtests/test_gpu_aamp.py78def test_gpu_aamp_self_join_larger_window(T_A, T_B, m):CODE
LOWtests/test_gpu_aamp.py123def test_parallel_gpu_aamp_self_join(T_A, T_B):CODE
LOWtests/test_gpu_aamp.py185def test_gpu_aamp_constant_subsequence_self_join():CODE
LOWtests/test_gpu_aamp.py268def test_gpu_aamp_identical_subsequence_self_join():CODE
LOWtests/test_gpu_aamp.py340def test_gpu_aamp_nan_inf_self_join(T_A, T_B, substitute_B, substitution_locations):CODE
LOWtests/test_gpu_aamp.py401def test_gpu_aamp_nan_zero_mean_self_join():CODE
LOWtests/test_gpu_stump.py78def test_gpu_stump_self_join_larger_window(T_A, T_B, m):CODE
LOWtests/test_gpu_stump.py120def test_parallel_gpu_stump_self_join(T_A, T_B):CODE
LOWtests/test_gpu_stump.py182def test_gpu_stump_constant_subsequence_self_join():CODE
LOWtests/test_gpu_stump.py265def test_gpu_stump_identical_subsequence_self_join():CODE
LOWtests/test_gpu_stump.py337def test_gpu_stump_nan_inf_self_join(T_A, T_B, substitute_B, substitution_locations):CODE
LOWtests/test_gpu_stump.py398def test_gpu_stump_nan_zero_mean_self_join():CODE
LOWtests/test_gpu_stump.py453def test_gpu_stump_self_join_custom_isconstant(T_A, T_B):CODE
LOWtests/test_floss.py449def test_floss_with_isconstant():CODE
LOWtests/test_mstump.py23def naive_rolling_window_dot_product(Q, T):CODE
LOWtests/test_mstump.py103def test_multi_distance_profile(T, m):CODE
LOWtests/test_mstump.py114def test_get_first_mstump_profile(T, m):CODE
LOWtests/test_mstump.py198def test_subspace_include_discords(T, m):CODE
LOWtests/test_mstump.py284def test_mstump_include_discords(T, m):CODE
LOWtests/test_mstump.py322def test_mstump_wrapper_include(T, m):CODE
LOWtests/test_mstump.py342def test_constant_subsequence_self_join():CODE
LOWtests/test_mstump.py355def test_identical_subsequence_self_join():CODE
LOWtests/test_mstump.py376def test_mstump_nan_inf_self_join_first_dimension(CODE
220 more matches not shown…
Empty Error Handlers14 hits · 70 pts
SeverityFileLineSnippetContext
HIGHstumpy/__init__.py295except Exception:CODE
HIGHstumpy/__init__.py292except AttributeError:CODE
HIGHstumpy/core.py21except ImportError:CODE
HIGHtests/test_maamped.py24except tornado.ioloop.TimeoutError: # pragma: no coverCODE
HIGHtests/test_stumped.py27except tornado.ioloop.TimeoutError: # pragma: no coverCODE
HIGHtests/test_mpdist.py25except tornado.ioloop.TimeoutError: # pragma: no coverCODE
HIGHtests/test_aamped.py24except tornado.ioloop.TimeoutError: # pragma: no coverCODE
HIGHtests/test_aamp_stimp.py30except tornado.ioloop.TimeoutError: # pragma: no coverCODE
HIGHtests/test_ostinato.py26except tornado.ioloop.TimeoutError: # pragma: no coverCODE
HIGHtests/test_stimp.py30except tornado.ioloop.TimeoutError: # pragma: no coverCODE
HIGHtests/test_non_normalized_decorator.py77except tornado.ioloop.TimeoutError: # pragma: no coverCODE
HIGHtests/test_aamp_ostinato.py24except tornado.ioloop.TimeoutError: # pragma: no coverCODE
HIGHtests/test_aampdist.py23except tornado.ioloop.TimeoutError: # pragma: no coverCODE
HIGHtests/test_mstumped.py26except tornado.ioloop.TimeoutError: # pragma: no coverCODE
Deep Nesting57 hits · 55 pts
SeverityFileLineSnippetContext
LOWversions.py172CODE
LOWversions.py475CODE
LOWversions.py528CODE
LOWfastmath.py9CODE
LOWfastmath.py392CODE
LOWfastmath.py168CODE
LOWstumpy/chains.py75CODE
LOWstumpy/cache.py21CODE
LOWstumpy/__init__.py66CODE
LOWstumpy/core.py71CODE
LOWstumpy/core.py971CODE
LOWstumpy/core.py2880CODE
LOWstumpy/core.py3285CODE
LOWstumpy/core.py3358CODE
LOWstumpy/core.py132CODE
LOWstumpy/core.py134CODE
LOWstumpy/stump.py20CODE
LOWstumpy/scraamp.py87CODE
LOWstumpy/scrump.py137CODE
LOWstumpy/gpu_stump.py21CODE
LOWstumpy/ostinato.py148CODE
LOWstumpy/aamp.py18CODE
LOWstumpy/aamp_ostinato.py138CODE
LOWtests/test_floss.py51CODE
LOWtests/test_floss.py449CODE
LOWtests/test_scrump.py863CODE
LOWtests/test_stumpi.py884CODE
LOWtests/test_core.py60CODE
LOWtests/test_core.py100CODE
LOWtests/test_core.py938CODE
LOWtests/test_aampi.py19CODE
LOWtests/test_aampi.py1024CODE
LOWtests/test_aampi.py1110CODE
LOWtests/naive.py131CODE
LOWtests/naive.py225CODE
LOWtests/naive.py347CODE
LOWtests/naive.py458CODE
LOWtests/naive.py1115CODE
LOWtests/naive.py1796CODE
LOWtests/naive.py1892CODE
LOWtests/naive.py1981CODE
LOWtests/naive.py2055CODE
LOWtests/naive.py2195CODE
LOWtests/naive.py981CODE
LOWtests/test_sdp.py132CODE
LOWtests/test_ostinato.py213CODE
LOWtests/test_scraamp.py379CODE
LOWtests/test_scraamp.py423CODE
LOWtests/test_scraamp.py703CODE
LOWtests/test_scraamp.py722CODE
LOWtests/test_scraamp.py740CODE
LOWtests/test_scraamp.py778CODE
LOWtests/test_scraamp.py816CODE
LOWtests/test_aamp_ostinato.py168CODE
LOWtests/test_motifs.py13CODE
LOWtests/test_motifs.py87CODE
LOWtests/test_motifs.py120CODE
Cross-File Repetition8 hits · 40 pts
SeverityFileLineSnippetContext
HIGHstumpy/scraamp.py0get the (top-k) matrix profile. when `k=1` (default), the output is a 1d array consisting of the matrix profile. when `kSTRING
HIGHstumpy/scrump.py0get the (top-k) matrix profile. when `k=1` (default), the output is a 1d array consisting of the matrix profile. when `kSTRING
HIGHstumpy/stumpi.py0get the (top-k) matrix profile. when `k=1` (default), the output is a 1d array consisting of the matrix profile. when `kSTRING
HIGHstumpy/aampi.py0get the (top-k) matrix profile. when `k=1` (default), the output is a 1d array consisting of the matrix profile. when `kSTRING
HIGHstumpy/scraamp.py0get the (top-1) left matrix profile indices parameters ---------- none returns ------- out : numpy.ndarray the (top-1) lSTRING
HIGHstumpy/scrump.py0get the (top-1) left matrix profile indices parameters ---------- none returns ------- out : numpy.ndarray the (top-1) lSTRING
HIGHstumpy/stumpi.py0get the (top-1) left matrix profile indices parameters ---------- none returns ------- out : numpy.ndarray the (top-1) lSTRING
HIGHstumpy/aampi.py0get the (top-1) left matrix profile indices parameters ---------- none returns ------- out : numpy.ndarray the (top-1) lSTRING
Over-Commented Block17 hits · 16 pts
SeverityFileLineSnippetContext
LOWpypi.sh1#!/bin/shCOMMENT
LOWpypi.sh21# the tar.gz file (click "view details"): https://pypi.org/project/stumpy/#filesCOMMENT
LOWpypi.sh41# PyPI Stats - https://packaging.python.org/guides/analyzing-pypi-package-downloads/COMMENT
LOWpypi.sh81 elseCOMMENT
LOWpypi.sh101# password = <PyPI API Token>COMMENT
LOWstumpy/__init__.py301 # Expose lazy names in dir() for discoverabilityCOMMENT
LOWstumpy/core.py601 # the central-most subsequence must be located outside the `excl_zone`,COMMENT
LOWstumpy/core.py621 # at index 4. In both cases, the relative (index-wise) distance is 2,COMMENT
LOWstumpy/sdp.py281 # Let T' and Q' denote the zero-padded versions of T and Q[::-1],COMMENT
LOWstumpy/sdp.py301 # applied either before or after the transform:COMMENT
LOWtests/test_scrump.py941 # (`S_i`). Also, we denote `P[i]` as their corresponding distances sorted inCOMMENT
LOWtests/test_core.py1881 # assertionCOMMENT
LOWtests/naive.py2301COMMENT
LOWtests/test_sdp.py21# are considered:COMMENT
LOWdocs/conf.py1# -*- coding: utf-8 -*-COMMENT
LOWdocs/conf.py141# to template names.COMMENT
LOWdocs/conf.py161latex_elements = {COMMENT
AI Structural Patterns13 hits · 13 pts
SeverityFileLineSnippetContext
LOWversions.py336CODE
LOWstumpy/chains.py72CODE
LOWstumpy/stimp.py123CODE
LOWstumpy/stimp.py508CODE
LOWstumpy/aamp_mmotifs.py14CODE
LOWstumpy/core.py1604CODE
LOWstumpy/motifs.py166CODE
LOWstumpy/motifs.py404CODE
LOWstumpy/mmotifs.py22CODE
LOWstumpy/stamp.py247CODE
LOWstumpy/scrump.py782CODE
LOWstumpy/aamp_stimp.py130CODE
LOWstumpy/gpu_stump.py483CODE
AI Slop Vocabulary2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMstumpy/floss.py757 # and so the aforementioned check is all `False` as soon as we start usingCOMMENT
MEDIUMtests/naive.py2310 # keeping top-k largest with the aforementioned priority rules is the same asCOMMENT
Cross-Language Confusion1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHstumpy/core.py2850 msg += "expected (i.e., a negative index is considered null)."CODE
Excessive Try-Catch Wrapping4 hits · 4 pts
SeverityFileLineSnippetContext
LOWstumpy/__init__.py295 except Exception:CODE
LOWstumpy/cuda.py24 except Exception:CODE
LOWtests/test_sdp.py126 except Exception as e: # pragma: no coverCODE
LOWtests/test_sdp.py151 except Exception as e: # pragma: no coverCODE
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippetContext
LOWtest.sh120 # Check if there are any naive implementations not at start of test fileCOMMENT
LOWtest.sh144 # Check if file does not exist OR file is emptyCOMMENT
Self-Referential Comments1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMstumpy/sdp.py1# This file contains different implementations ofCOMMENT