This report summarizes scanner evidence for theOehrly/Fast-F1. SynthScan examined 23,675 lines of code across 110 source files, recording 351 pattern matches distributed across 15 syntactic categories. The legacy adjusted pattern signal is 19.4 (Elevated 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.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 280 finding(s).
Are imports declared and package/API names verified? 52 finding(s).
Are wrappers, guards, and repeated structures necessary? 224 finding(s).
Which changes need focused human review? 351 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 351 distinct pattern matches across 15 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 |
|---|---|---|---|---|
| LOW | conftest.py | 54 | def pytest_collection_modifyitems(config, items): | CODE |
| LOW | examples/standings/plot_who_can_still_win_wdc.py | 38 | def calculate_max_points_for_remaining_season(): | CODE |
| LOW | fastf1/events.py | 553 | def _get_schedule_from_ergast(year) -> "EventSchedule": | CODE |
| LOW | fastf1/events.py | 692 | def _constructor_sliced_horizontal(self) -> type["Event"]: | CODE |
| LOW | fastf1/core.py | 726 | def get_first_non_zero_time_index(self): | CODE |
| LOW | fastf1/core.py | 739 | def add_differential_distance( | CODE |
| LOW | fastf1/core.py | 942 | def calculate_differential_distance(self) -> pd.Series: | CODE |
| LOW | fastf1/core.py | 1233 | def _get_property_warn_not_loaded(self, name): | CODE |
| LOW | fastf1/core.py | 1695 | def _fix_missing_laps_retired_on_track(self): | CODE |
| LOW | fastf1/core.py | 1833 | def _set_laps_deleted_from_rcm(self): | CODE |
| LOW | fastf1/core.py | 1887 | def _calculate_quali_like_session_results(self, force=False): | CODE |
| LOW | fastf1/core.py | 1957 | def _calculate_practice_like_session_results(self, force=False): | CODE |
| LOW | fastf1/core.py | 2008 | def _calculate_race_like_session_results(self, force=False): | CODE |
| LOW | fastf1/core.py | 2063 | def _add_track_status_to_laps(self, laps): | CODE |
| LOW | fastf1/core.py | 2121 | def _add_first_lap_time_from_ergast(self): | CODE |
| LOW | fastf1/core.py | 2197 | def _load_session_status_data(self, livedata=None): | CODE |
| LOW | fastf1/core.py | 2575 | def _drivers_results_from_ergast( | CODE |
| LOW | fastf1/core.py | 2689 | def _load_race_control_messages(self, livedata=None): | CODE |
| LOW | fastf1/core.py | 2932 | def _constructor_sliced_horizontal(self) -> Callable[..., "Lap"]: | CODE |
| LOW | fastf1/core.py | 3514 | def split_qualifying_sessions(self) -> list[Optional["Laps"]]: | CODE |
| LOW | fastf1/core.py | 3940 | def _constructor_sliced_horizontal(self) -> Callable[..., "DriverResult"]: | CODE |
| LOW | fastf1/livetiming/data.py | 172 | def _try_set_correct_start_date(self, data): | CODE |
| LOW | fastf1/tests/test_utils.py | 61 | def test_recursive_dict_get_deprecated(): | CODE |
| LOW | fastf1/tests/test_plotting.py | 86 | def test_fuzzy_driver_team_key_error(): | CODE |
| LOW | fastf1/tests/test_plotting.py | 104 | def test_internal_get_team_color(identifier, kwargs, expected): | CODE |
| LOW | fastf1/tests/test_plotting.py | 112 | def test_internal_get_team_color_exceptions(): | CODE |
| LOW | fastf1/tests/test_plotting.py | 143 | def test_get_team_name_by_driver(identifier, kwargs, expected): | CODE |
| LOW | fastf1/tests/test_plotting.py | 170 | def test_get_rb_color_disambiguate(): | CODE |
| LOW | fastf1/tests/test_plotting.py | 218 | def test_get_driver_abbreviation(identifier, expected): | CODE |
| LOW | fastf1/tests/test_plotting.py | 231 | def test_get_driver_names_by_team(identifier, expected): | CODE |
| LOW | fastf1/tests/test_plotting.py | 246 | def test_get_driver_abbreviations_by_team(identifier, expected): | CODE |
| LOW | fastf1/tests/test_plotting.py | 293 | def test_get_driver_style_default_styles( | CODE |
| LOW | fastf1/tests/test_plotting.py | 303 | def test_get_driver_style_custom_style(): | CODE |
| LOW | fastf1/tests/test_plotting.py | 345 | def test_get_driver_style_recursive(): | CODE |
| LOW | fastf1/tests/test_plotting.py | 388 | def test_get_compound_mapping(): | CODE |
| LOW | fastf1/tests/test_plotting.py | 402 | def test_get_driver_color_mapping(): | CODE |
| LOW | fastf1/tests/test_plotting.py | 428 | def test_list_short_team_names(): | CODE |
| LOW | fastf1/tests/test_plotting.py | 438 | def test_list_driver_abbreviations(): | CODE |
| LOW | fastf1/tests/test_plotting.py | 469 | def test_add_sorted_lapnumber_axis(): | CODE |
| LOW | fastf1/tests/test_plotting.py | 488 | def test_override_team_constants(): | CODE |
| LOW | fastf1/tests/test_plotting.py | 528 | def test_import_internal_mpl_lgend_arg_kwarg_parser(): | CODE |
| LOW | fastf1/tests/test_example_plots.py | 43 | def test_doc_example_fast_lec(): | CODE |
| LOW | fastf1/tests/test_core.py | 15 | def test_lap_data_loading_position_calculation(): | CODE |
| LOW | fastf1/tests/test_core.py | 46 | def test_lap_data_loading_position_calculation_first_lap_retired(): | CODE |
| LOW | fastf1/tests/test_core.py | 68 | def test_first_lap_pitout_times(): | CODE |
| LOW⚡ | fastf1/tests/test_core.py | 84 | def test_laps_constructor_metadata_propagation(reference_laps_data): | CODE |
| LOW⚡ | fastf1/tests/test_core.py | 92 | def test_laps_constructor_sliced(): | CODE |
| LOW⚡ | fastf1/tests/test_core.py | 102 | def test_session_results_constructor_sliced(): | CODE |
| LOW⚡ | fastf1/tests/test_core.py | 112 | def test_add_lap_status_to_laps(): | CODE |
| LOW | fastf1/tests/test_core.py | 148 | def test_rcm_parsing_deleted_laps(): | CODE |
| LOW | fastf1/tests/test_core.py | 193 | def test_session_results_drivers(): | CODE |
| LOW | fastf1/tests/test_core.py | 214 | def test_practice_session_results_time_and_position(): | CODE |
| LOW | fastf1/tests/test_exceptions.py | 61 | def test_deprecated_import_warns(): | CODE |
| LOW⚡ | fastf1/tests/test_exceptions.py | 78 | def test_deprecated_access_warns(module, name): | CODE |
| LOW⚡ | fastf1/tests/test_exceptions.py | 85 | def test_soft_exceptions_catch_and_warn(): | CODE |
| LOW⚡ | fastf1/tests/test_exceptions.py | 90 | def _test_soft_exceptions_catch_and_warn(): | CODE |
| LOW | fastf1/tests/test_exceptions.py | 106 | def test_critical_exceptions_raise_in_soft_exceptions(): | CODE |
| LOW | fastf1/tests/test_exceptions.py | 110 | def _test_critical_exceptions_raise_in_soft_exceptions(): | CODE |
| LOW | fastf1/tests/test_laps.py | 27 | def test_base_class_view_laps(): | CODE |
| LOW | fastf1/tests/test_laps.py | 32 | def test_merging_with_metadata_propagation(): | CODE |
| 133 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | fastf1/_api.py | 110 | .. warning:: :mod:`fastf1.api` will be considered private in future releases and potentially be rem | STRING |
| HIGH | fastf1/_api.py | 848 | .. warning:: :mod:`fastf1.api` will be considered private in future releases and potentially be rem | STRING |
| HIGH | fastf1/_api.py | 944 | .. warning:: :mod:`fastf1.api` will be considered private in future releases and potentially be rem | STRING |
| HIGH | fastf1/_api.py | 1124 | .. warning:: :mod:`fastf1.api` will be considered private in future releases and potentially be rem | STRING |
| HIGH | fastf1/_api.py | 1279 | .. warning:: :mod:`fastf1.api` will be considered private in future releases and potentially be rem | STRING |
| HIGH | fastf1/_api.py | 1349 | .. warning:: :mod:`fastf1.api` will be considered private in future releases and potentially be rem | STRING |
| HIGH | fastf1/_api.py | 1405 | .. warning:: :mod:`fastf1.api` will be considered private in future releases and potentially be rem | STRING |
| HIGH | fastf1/_api.py | 1486 | .. warning:: :mod:`fastf1.api` will be considered private in future releases and potentially be rem | STRING |
| HIGH | fastf1/_api.py | 1550 | .. warning:: :mod:`fastf1.api` will be considered private in future releases and potentially be rem | STRING |
| HIGH | fastf1/_api.py | 1633 | .. warning:: :mod:`fastf1.api` will be considered private in future releases and potentially be rem | STRING |
| HIGH | fastf1/events.py | 59 | Create a :class:`~fastf1.core.Session` object based on year, event name and session identifier. .. note:: This | STRING |
| HIGH | fastf1/events.py | 888 | Return the full session name of a specific session from this event. Examples: >>> import fastf1 | STRING |
| HIGH | fastf1/plotting/_interface.py | 289 | Get a team color based on a recognizable and identifiable part of the team name. The team color is returne | STRING |
| HIGH | fastf1/plotting/_interface.py | 432 | Get the color that is associated with a driver based on the driver's abbreviation or based on a recognizable an | STRING |
| HIGH | fastf1/plotting/_interface.py | 501 | Get a plotting style that is unique for a driver based on the driver's abbreviation or based on a recognizable | STRING |
| HIGH | fastf1/plotting/_interface.py | 820 | Adds a legend to the axis where drivers are grouped by team and within each team they are shown in the same ord | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | fastf1/__init__.py | 17 | CODE | |
| LOW | fastf1/__init__.py | 18 | CODE | |
| LOW | fastf1/__init__.py | 18 | CODE | |
| LOW | fastf1/__init__.py | 18 | CODE | |
| LOW | fastf1/__init__.py | 18 | CODE | |
| LOW | fastf1/__init__.py | 18 | CODE | |
| LOW | fastf1/__init__.py | 25 | CODE | |
| LOW | fastf1/__init__.py | 26 | CODE | |
| LOW | fastf1/__init__.py | 27 | CODE | |
| LOW | fastf1/api.py | 29 | CODE | |
| LOW | fastf1/tests/test_core.py | 2 | CODE | |
| LOW | fastf1/tests/test_core.py | 5 | CODE | |
| LOW | fastf1/tests/test_exceptions.py | 20 | CODE | |
| LOW | fastf1/tests/test_exceptions.py | 24 | CODE | |
| LOW | fastf1/tests/test_exceptions.py | 28 | CODE | |
| LOW | fastf1/tests/test_exceptions.py | 32 | CODE | |
| LOW | fastf1/tests/test_exceptions.py | 36 | CODE | |
| LOW | fastf1/tests/test_exceptions.py | 40 | CODE | |
| LOW | fastf1/tests/test_exceptions.py | 64 | CODE | |
| LOW | fastf1/tests/test_exceptions.py | 68 | CODE | |
| LOW | fastf1/tests/test_api.py | 5 | CODE | |
| LOW | fastf1/tests/test_cache.py | 10 | CODE | |
| LOW | fastf1/ergast/__init__.py | 2 | CODE | |
| LOW | fastf1/ergast/__init__.py | 3 | CODE | |
| LOW | fastf1/ergast/__init__.py | 4 | CODE | |
| LOW | fastf1/ergast/__init__.py | 4 | CODE | |
| LOW | fastf1/mvapi/__init__.py | 1 | CODE | |
| LOW | fastf1/mvapi/__init__.py | 1 | CODE | |
| LOW | fastf1/internals/f1account/__init__.py | 36 | CODE | |
| LOW | fastf1/internals/f1account/__init__.py | 36 | CODE | |
| LOW | fastf1/plotting/__init__.py | 1 | CODE | |
| LOW | fastf1/plotting/__init__.py | 1 | CODE | |
| LOW | fastf1/plotting/__init__.py | 1 | CODE | |
| LOW | fastf1/plotting/__init__.py | 1 | CODE | |
| LOW | fastf1/plotting/__init__.py | 1 | CODE | |
| LOW | fastf1/plotting/__init__.py | 1 | CODE | |
| LOW | fastf1/plotting/__init__.py | 1 | CODE | |
| LOW | fastf1/plotting/__init__.py | 1 | CODE | |
| LOW | fastf1/plotting/__init__.py | 1 | CODE | |
| LOW | fastf1/plotting/__init__.py | 1 | CODE | |
| LOW | fastf1/plotting/__init__.py | 1 | CODE | |
| LOW | fastf1/plotting/__init__.py | 1 | CODE | |
| LOW | fastf1/plotting/__init__.py | 1 | CODE | |
| LOW | fastf1/plotting/__init__.py | 1 | CODE | |
| LOW | fastf1/plotting/__init__.py | 1 | CODE | |
| LOW | fastf1/plotting/__init__.py | 1 | CODE | |
| LOW | fastf1/plotting/__init__.py | 1 | CODE | |
| LOW | fastf1/plotting/__init__.py | 1 | CODE | |
| LOW | fastf1/plotting/__init__.py | 1 | CODE | |
| LOW | fastf1/plotting/__init__.py | 1 | CODE | |
| LOW | fastf1/plotting/__init__.py | 23 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | examples/general/plot_annotate_corners.py | 27 | # Define a helper function for rotating points around the origin of the | COMMENT |
| MEDIUM | examples/general/plot_annotate_corners.py | 72 | # Create a string from corner number and letter | COMMENT |
| MEDIUM | examples/standings/plot_season_summary.py | 111 | # Create the subplots for the two heatmaps | COMMENT |
| MEDIUM | examples/telemetry/plot_speed_trace_comparison.py | 24 | # Define the session parameters. We compare the Qualifying sessions | COMMENT |
| MEDIUM | examples/telemetry/plot_speed_trace_comparison.py | 41 | # Define a helper function for data interpolation. | COMMENT |
| MEDIUM | examples/telemetry/plot_speed_trace_comparison.py | 94 | # Create the visualization. We highlight the speed delta (clipping) | COMMENT |
| MEDIUM | examples/telemetry/plot_speed_on_track.py | 63 | # Create a continuous norm to map from data points to colors | COMMENT |
| MEDIUM | examples/telemetry/plot_gear_shifts_on_track.py | 37 | # Create a line collection. Set a segmented colormap and normalize the plot | COMMENT |
| MEDIUM | examples/telemetry/plot_gear_shifts_on_track.py | 47 | # Create the plot | COMMENT |
| MEDIUM | fastf1/events.py | 642 | """This class implements a per-season event schedule. | STRING |
| MEDIUM | fastf1/events.py | 862 | """This class represents a single event (race weekend or testing event). | STRING |
| MEDIUM | fastf1/core.py | 3798 | """This class provides driver and result information for all drivers that | STRING |
| MEDIUM | fastf1/core.py | 3945 | """This class provides driver and result information for a single driver. | STRING |
| MEDIUM | fastf1/logger.py | 98 | # This function is used to wrap individual data loading functions that are | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | fastf1/legacy.py | 85 | CODE | |
| LOW | fastf1/_api.py | 254 | CODE | |
| LOW | fastf1/_api.py | 374 | CODE | |
| LOW | fastf1/_api.py | 847 | CODE | |
| LOW | fastf1/_api.py | 943 | CODE | |
| LOW | fastf1/_api.py | 1123 | CODE | |
| LOW | fastf1/_api.py | 1404 | CODE | |
| LOW | fastf1/_api.py | 1549 | CODE | |
| LOW | fastf1/_api.py | 1765 | CODE | |
| LOW | fastf1/events.py | 466 | CODE | |
| LOW | fastf1/events.py | 553 | CODE | |
| LOW | fastf1/core.py | 392 | CODE | |
| LOW | fastf1/core.py | 625 | CODE | |
| LOW | fastf1/core.py | 1461 | CODE | |
| LOW | fastf1/core.py | 1695 | CODE | |
| LOW | fastf1/core.py | 2177 | CODE | |
| LOW | fastf1/core.py | 2211 | CODE | |
| LOW | fastf1/core.py | 2335 | CODE | |
| LOW | fastf1/core.py | 2432 | CODE | |
| LOW | fastf1/core.py | 3514 | CODE | |
| LOW | fastf1/req.py | 383 | CODE | |
| LOW | fastf1/req.py | 549 | CODE | |
| LOW | fastf1/req.py | 560 | CODE | |
| LOW | fastf1/__main__.py | 43 | CODE | |
| LOW | fastf1/livetiming/data.py | 172 | CODE | |
| LOW | fastf1/internals/parsing_helpers.py | 26 | CODE | |
| LOW | fastf1/internals/parsing_helpers.py | 84 | CODE | |
| LOW | fastf1/internals/pandas_base.py | 70 | CODE | |
| LOW | fastf1/plotting/_interface.py | 492 | CODE | |
| LOW | fastf1/plotting/_backend.py | 25 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | fastf1/_api.py | 1052 | except Exception: | CODE |
| LOW | fastf1/_api.py | 1219 | except Exception: | CODE |
| MEDIUM | fastf1/core.py | 2531 | def _drivers_from_f1_api(self, *, livedata=None): | CODE |
| LOW | fastf1/core.py | 2157 | except Exception as exc: | CODE |
| LOW | fastf1/core.py | 2534 | except Exception as exc: | CODE |
| LOW | fastf1/logger.py | 116 | except Exception as exc: | CODE |
| LOW | fastf1/req.py | 708 | except Exception as err: | CODE |
| LOW | fastf1/livetiming/client.py | 147 | except Exception: | CODE |
| LOW | fastf1/ergast/interface.py | 522 | except Exception as exc: | CODE |
| LOW | fastf1/internals/parsing_helpers.py | 72 | except Exception as exc: | CODE |
| LOW | fastf1/internals/parsing_helpers.py | 124 | except Exception as exc: | CODE |
| LOW | fastf1/internals/pandas_extensions.py | 62 | except Exception as exc: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | fastf1/ergast/interface.py | 432 | CODE | |
| LOW | fastf1/ergast/interface.py | 621 | CODE | |
| LOW | fastf1/ergast/interface.py | 682 | CODE | |
| LOW | fastf1/ergast/interface.py | 749 | CODE | |
| LOW | fastf1/ergast/interface.py | 816 | CODE | |
| LOW | fastf1/ergast/interface.py | 883 | CODE | |
| LOW | fastf1/ergast/interface.py | 947 | CODE | |
| LOW | fastf1/ergast/interface.py | 1020 | CODE | |
| LOW | fastf1/ergast/interface.py | 1088 | CODE | |
| LOW | fastf1/ergast/interface.py | 1156 | CODE | |
| LOW | fastf1/ergast/interface.py | 1221 | CODE | |
| LOW | fastf1/ergast/interface.py | 1273 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | conftest.py | 141 | def automock_terminal_size(doctest_namespace): # noqa: ARG001 | COMMENT |
| LOW | pytest.ini | 21 | COMMENT | |
| LOW | pytest.ini | 41 | # external, new required dependency for Pandas | COMMENT |
| LOW | docs/setup_versioning.sh | 1 | #!/bin/bash | COMMENT |
| LOW | examples/general/plot_driver_styling.py | 61 | session=race) | COMMENT |
| LOW | fastf1/_api.py | 481 | COMMENT | |
| LOW | fastf1/_api.py | 761 | except ValueError: | COMMENT |
| LOW | fastf1/core.py | 1581 | continue # no pit out, car did not restart | COMMENT |
| LOW | fastf1/exceptions.py | 1 | import warnings | COMMENT |
| LOW | fastf1/req.py | 41 | # even exist in the first place. | COMMENT |
| LOW | fastf1/ergast/sphinx.py | 41 | def _build_tree(self, category, excluded_category, *, | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | fastf1/_api.py | 761 | except ValueError: | CODE |
| HIGH | fastf1/core.py | 1789 | except (IndexError, KeyError): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | examples/general/plot_driver_styling.py | 26 | # ---------------------------------- | COMMENT |
| MEDIUM | examples/general/plot_driver_styling.py | 48 | # ------------------ | COMMENT |
| MEDIUM | examples/general/plot_driver_styling.py | 71 | # ---------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | fastf1/tests/test_core.py | 190 | assert compare.equals(ref) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | fastf1/_api.py | 730 | # Iterate over list of personal lap times set 'IsPersonalBest'. | COMMENT |
| LOW | fastf1/core.py | 2260 | # Check if for any tyre data message in the current stint, the | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | fastf1/internals/f1account/__init__.py | 42 | __all__ = [ | CODE |
| LOW | fastf1/plotting/__init__.py | 26 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/setup_versioning.sh | 23 | # make sure to not move the .git folder! Else, git will treat the version as a subrepository and not | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | fastf1/livetiming/data.py | 149 | # if no start date could be determined beforehand, simply use the | COMMENT |