This report presents the forensic synthetic code analysis of google-deepmind/weathernext, a Python project with 7,482 GitHub stars. SynthScan v2.0 examined 23,322 lines of code across 76 source files, recording 302 pattern matches distributed across 9 syntactic categories. The overall adjusted score of 14.5 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 302 distinct pattern matches across 9 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | weathernext/cyclones/tracker_utils.py | 45 | def slice_data_array_latlon_box_with_lon_wraparound( | CODE |
| LOW | weathernext/cyclones/tracker_utils.py | 193 | def bilinear_interpolation_with_lon_wraparound( | CODE |
| LOW | weathernext/cyclones/tracker_utils.py | 267 | def _enforce_non_negativity_constraint(df: pd.DataFrame) -> pd.DataFrame: | CODE |
| LOW | weathernext/cyclones/tracker_utils.py | 299 | def _enforce_quadrant_radius_zero_if_wind_speed_below_threshold( | CODE |
| LOW | weathernext/cyclones/tracker_utils.py | 352 | def _enforce_quad_non_decreasing( | CODE |
| LOW | weathernext/cyclones/tracker_utils.py | 414 | def _enforce_rmw_smaller_than_quad_radii_by_clipping_rmw( | CODE |
| LOW | weathernext/cyclones/tracker_utils.py | 483 | def _enforce_rmw_smaller_than_quad_radii_by_clipping_quad_radii( | CODE |
| LOW | weathernext/cyclones/tracker_utils.py | 580 | def _wind_speeds_non_increasing_with_increasing_radii( | CODE |
| LOW | weathernext/cyclones/tracker_utils.py | 690 | def enforce_physical_consistency_on_quadrants_and_winds( | CODE |
| LOW | weathernext/cyclones/tracker_utils.py | 772 | def _check_quadrant_radii_and_radius_max_winds_are_consistent(df: pd.DataFrame): | CODE |
| LOW | weathernext/cyclones/tracker_utils.py | 798 | def _check_quadrant_radii_consistent(df: pd.DataFrame): | CODE |
| LOW | weathernext/cyclones/ibtracs_netcdf_to_csv.py | 71 | def convert_ibtracs_netcdf_to_csv_df( | CODE |
| LOW | weathernext/cyclones/ibtracs_netcdf_to_csv.py | 183 | def prepare_ibtracs_storms_dfs( | CODE |
| LOW | weathernext/cyclones/data_pipeline_utils.py | 96 | def create_grid_lat_and_lon_dimensions( | CODE |
| LOW | weathernext/cyclones/data_pipeline_utils.py | 141 | def convert_grid_data_to_packed_xarray_dataset( | CODE |
| LOW | weathernext/cyclones/ibtracs_processing_stages.py | 54 | def _scale_variables_from_nmiles_to_km( | CODE |
| LOW | weathernext/cyclones/ibtracs_processing_stages.py | 64 | def load_time_slice_from_ibtracs( | CODE |
| LOW | weathernext/cyclones/ibtracs_processing_stages.py | 214 | def cyclone_max_wind_speeds_max_wind_radii_and_min_sea_level_pressures( | CODE |
| LOW | weathernext/cyclones/ibtracs_processing_stages.py | 553 | def convert_ibtracs_to_gridded_data( | CODE |
| LOW | weathernext/cyclones/direct_tracker.py | 183 | def _single_row_dataframe_from_dict(row_dict: Dict[str, Any]) -> pd.DataFrame: | CODE |
| LOW | weathernext/cyclones/direct_tracker.py | 187 | def _get_bounding_box_sides_in_degrees( | CODE |
| LOW | weathernext/cyclones/direct_tracker.py | 237 | def _average_in_three_dimensions_and_project_on_sphere( | CODE |
| LOW | weathernext/cyclones/direct_tracker.py | 428 | def _get_disc_windowed_gridded_probs_and_latlons( | CODE |
| LOW | weathernext/cyclones/direct_tracker.py | 477 | def _get_mean_latlon_of_grid_points_within_disc( | CODE |
| LOW | weathernext/cyclones/direct_tracker.py | 512 | def _get_mode_latlon_of_grid_points_within_disc( | CODE |
| LOW | weathernext/cyclones/direct_tracker.py | 547 | def _get_is_in_radius_grid_around_latlon( | CODE |
| LOW | weathernext/cyclones/direct_tracker.py | 635 | def _get_mean_scalar_variables_within_mask( | CODE |
| LOW | weathernext/cyclones/direct_tracker.py | 696 | def _get_scalar_variables_via_bilinear_interpolation( | CODE |
| LOW | weathernext/cyclones/direct_tracker.py | 720 | def _try_to_infer_probability_cyclone_exists_variable_name( | CODE |
| LOW | weathernext/cyclones/direct_tracker.py | 742 | def _get_mean_cyclone_probability_within_mask( | CODE |
| LOW | weathernext/cyclones/direct_tracker.py | 770 | def _get_cyclogenesis_candidates( | CODE |
| LOW | weathernext/cyclones/direct_tracker.py | 845 | def _prune_and_refine_cyclogenesis_candidates( | CODE |
| LOW | weathernext/cyclones/direct_tracker.py | 1076 | def _get_latlon_guess_with_momentum_update( | CODE |
| LOW | weathernext/cyclones/direct_tracker.py | 1109 | def _advance_single_cyclone_active_at_lead_time_t( | CODE |
| LOW | weathernext/cyclones/direct_tracker.py | 1290 | def _check_for_nans_in_predicted_tracks( | CODE |
| LOW | weathernext/cyclones/direct_tracker.py | 1337 | def _get_cyclone_probability_of_existence_within_disc( | CODE |
| LOW | weathernext/cyclones/direct_tracker.py | 1354 | def _get_all_scalar_variables_within_disc( | CODE |
| LOW | weathernext/cyclones/direct_tracker.py | 1369 | def _remove_nearby_cyclone_centers_based_on_which_moved_most( | CODE |
| LOW | weathernext/cyclones/ibtracs_processing_utils.py | 29 | def _get_ibtracs_quadrant_variable_tuples() -> ( | CODE |
| LOW | weathernext/cyclones/ibtracs_processing_utils.py | 199 | def filter_variables_for_reduced_dataset( | CODE |
| LOW | weathernext/cyclones/ibtracs_processing_utils.py | 212 | def get_cyclone_variable_names() -> List[str]: | CODE |
| LOW | weathernext/cyclones/ibtracs_processing_utils.py | 306 | def create_global_lat_lon_grid_coordinates(resolution: float) -> np.ndarray: | CODE |
| LOW | weathernext/cyclones/ibtracs_processing_utils.py | 326 | def create_sparse_nearest_neighbour_mask_from_latlon( | CODE |
| LOW | weathernext/cyclones/ibtracs_processing_utils.py | 368 | def create_gaussian_disc_mask_from_latlon( | CODE |
| LOW | weathernext/cyclones/ibtracs_processing_utils.py | 474 | def create_quadrant_integral_mask_from_latlons( | CODE |
| LOW | weathernext/cyclones/ibtracs_processing_utils.py | 580 | def create_disc_integral_mask_from_latlon( | CODE |
| LOW | weathernext/cyclones/ibtracs_processing_utils.py | 614 | def get_common_entries_without_nans( | CODE |
| LOW | weathernext/cyclones/ibtracs_processing_utils.py | 631 | def impute_quadrant_radii_nans( | CODE |
| LOW | weathernext/cyclones/ibtracs_processing_utils.py | 684 | def create_discs_centered_on_latlons( | CODE |
| LOW | weathernext/cyclones/ibtracs_processing_utils.py | 748 | def _create_wind_speed_linear_calibration_models( | CODE |
| LOW | weathernext/cyclones/ibtracs_processing_utils.py | 797 | def _linear_regression_with_clipping( | CODE |
| LOW | weathernext/cyclones/ibtracs_processing_utils.py | 851 | def create_wind_speed_calibration_and_aggregation_model( | CODE |
| LOW | weathernext/cyclones/ibtracs_processing_utils.py | 877 | def compute_aggregated_wind_speeds( | CODE |
| LOW | weathernext/cyclones/cyclone_utils.py | 164 | def cartesian_spherical_geodesic_momentum_update( | CODE |
| LOW | weathernext/cyclones/cyclone_utils.py | 228 | def latlon_spherical_geodesic_momentum_update( | CODE |
| LOW | weathernext/weathernext1_graph/graphcast.py | 680 | def _inputs_to_grid_node_features( | CODE |
| LOW | weathernext/weathernext1_graph/graphcast.py | 701 | def _grid_node_outputs_to_prediction( | CODE |
| LOW | weathernext/utils/model_utils.py | 29 | def get_graph_spatial_features( | CODE |
| LOW | weathernext/utils/model_utils.py | 237 | def get_relative_position_in_receiver_local_coordinates( | CODE |
| LOW | weathernext/utils/model_utils.py | 322 | def get_rotation_matrices_to_local_coordinates( | CODE |
| 115 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | setup.py | 1 | # Copyright 2023 DeepMind Technologies Limited. | COMMENT |
| LOW | weathernext/__init__.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/cyclones/tracker_utils.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/cyclones/tracker_utils.py | 561 | # q_50_ne: 20 | COMMENT |
| LOW | weathernext/cyclones/tracker_utils.py | 661 | idx_sort, | COMMENT |
| LOW | weathernext/cyclones/ibtracs_netcdf_to_csv.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/cyclones/tracker_base.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/cyclones/data_pipeline_utils.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/cyclones/constants.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/cyclones/__init__.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/cyclones/ibtracs_processing_stages.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/cyclones/direct_tracker.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/cyclones/direct_tracker.py | 201 | # contain the pole, so the disc will contain the entire [0, 360] | COMMENT |
| LOW | weathernext/cyclones/ibtracs_processing_utils.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/cyclones/cyclone_utils.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/cyclones/direct_tracker_6h_v1_config.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/weathernext1_graph/__init__.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/weathernext1_graph/graphcast.py | 1 | # Copyright 2023 DeepMind Technologies Limited. | COMMENT |
| LOW | weathernext/utils/model_utils.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/utils/model_utils.py | 301 | edge_rotation_matrices, node_pos[senders], np_=np_) | COMMENT |
| LOW | weathernext/utils/model_utils.py | 621 | receiver_pos_in_rotated_space = rotate_with_matrices( | COMMENT |
| LOW | weathernext/utils/update_blocks_utils.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/utils/sharding.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/utils/sharding.py | 21 | from jax.interpreters import pxla | COMMENT |
| LOW | weathernext/utils/task.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/utils/autoregressive.py | 1 | # Copyright 2023 DeepMind Technologies Limited. | COMMENT |
| LOW | weathernext/utils/data_modalities.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/utils/typed_graph.py | 1 | # Copyright 2023 DeepMind Technologies Limited. | COMMENT |
| LOW | weathernext/utils/typed_graph.py | 21 | _T = TypeVar('_T') | COMMENT |
| LOW | weathernext/utils/checkpoint.py | 1 | # Copyright 2023 DeepMind Technologies Limited. | COMMENT |
| LOW | weathernext/utils/xarray_dense.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/utils/xarray_dense.py | 921 | # Transpose the array to put the preserved dims first, and the dims to split | COMMENT |
| LOW | weathernext/utils/sparse_transformer_utils.py | 1 | # Copyright 2024 DeepMind Technologies Limited. | COMMENT |
| LOW | weathernext/utils/solar_radiation.py | 1 | # Copyright 2023 DeepMind Technologies Limited. | COMMENT |
| LOW | weathernext/utils/solar_radiation.py | 201 | j2000_days: Timestamps represented as the number of days since the J2000 | COMMENT |
| LOW | weathernext/utils/dense.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/utils/activations.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/utils/mesh_transformer.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/utils/variables.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/utils/solar_radiation_test.py | 1 | # Copyright 2023 DeepMind Technologies Limited. | COMMENT |
| LOW | weathernext/utils/data_utils_test.py | 1 | # Copyright 2023 DeepMind Technologies Limited. | COMMENT |
| LOW | weathernext/utils/predictor_base.py | 1 | # Copyright 2023 DeepMind Technologies Limited. | COMMENT |
| LOW | weathernext/utils/fiddle_config_io.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/utils/fiddle_config_io.py | 21 | from fiddle import daglish | COMMENT |
| LOW | weathernext/utils/fiddle_config_io.py | 41 | # "Index(index=0)", | COMMENT |
| LOW | weathernext/utils/fiddle_config_io.py | 61 | # | COMMENT |
| LOW | weathernext/utils/update_blocks.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/utils/__init__.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/utils/xarray_tree.py | 1 | # Copyright 2023 DeepMind Technologies Limited. | COMMENT |
| LOW | weathernext/utils/checkpoint_test.py | 1 | # Copyright 2023 DeepMind Technologies Limited. | COMMENT |
| LOW | weathernext/utils/deep_gnn.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/utils/icosahedral_mesh.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/utils/icosahedral_mesh.py | 201 | # (adjacent face)/ \ (adjacent face) ^ | COMMENT |
| LOW | weathernext/utils/icosahedral_mesh.py | 241 | # / \ | COMMENT |
| LOW | weathernext/utils/icosahedral_mesh.py | 281 | # / \ | COMMENT |
| LOW | weathernext/utils/typed_graph_net.py | 1 | # Copyright 2026 Google LLC. | COMMENT |
| LOW | weathernext/utils/typed_graph_net.py | 401 | graph.context.features, | COMMENT |
| LOW | weathernext/utils/xarray_tree_test.py | 1 | # Copyright 2023 DeepMind Technologies Limited. | COMMENT |
| LOW | weathernext/utils/casting.py | 1 | # Copyright 2023 DeepMind Technologies Limited. | COMMENT |
| LOW | weathernext/utils/data_utils.py | 1 | # Copyright 2023 DeepMind Technologies Limited. | COMMENT |
| 29 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | weathernext/cyclones/tracker_utils.py | 199 | Performs bilinear interpolation on gridded predictions at a given latlon. Args: gridded_predictions: gridded pred | STRING |
| HIGH | weathernext/cyclones/cyclone_utils.py | 169 | Calculates momentum update from pos_curr using pos_prev, on a sphere. Assumes pos_curr and pos_prev are on the unit s | STRING |
| HIGH | weathernext/utils/solar_radiation.py | 530 | Computes the solar radiation incident at the top of the atmosphere. This method is a wrapper for `get_toa_incident_so | STRING |
| HIGH | weathernext/utils/typed_graph_net.py | 211 | Returns a method that applies a configured GraphNetwork. This implementation follows Algorithm 1 in https://arxiv.org | STRING |
| HIGH | weathernext/utils/data_utils.py | 106 | Derives features used by ML models from the `progress` variable. Args: name: Base variable name from which featur | STRING |
| HIGH | weathernext/utils/data_utils.py | 220 | Extracts inputs and targets for prediction, from a Dataset with a time dim. The input period is assumed to be contigu | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | weathernext/cyclones/tracker_utils.py | 352 | CODE | |
| LOW | weathernext/cyclones/ibtracs_netcdf_to_csv.py | 71 | CODE | |
| LOW | weathernext/cyclones/direct_tracker.py | 1598 | CODE | |
| LOW | weathernext/utils/checkpoint.py | 98 | CODE | |
| LOW | weathernext/utils/xarray_dense.py | 749 | CODE | |
| LOW | weathernext/utils/xarray_dense.py | 848 | CODE | |
| LOW | weathernext/utils/xarray_dense.py | 472 | CODE | |
| LOW | weathernext/utils/xarray_dense.py | 686 | CODE | |
| LOW | weathernext/utils/dense.py | 251 | CODE | |
| LOW | weathernext/utils/fiddle_config_io.py | 104 | CODE | |
| LOW | weathernext/utils/points_mesh_gnn.py | 415 | CODE | |
| LOW | weathernext/utils/sparse_transformer.py | 513 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | weathernext/utils/data_modalities.py | 374 | # We leverage `ShareLeadingAxesArrayTree` to guarantee that the arrays | COMMENT |
| MEDIUM | weathernext/utils/data_modalities.py | 494 | # We leverage `ShareLeadingAxesArrayTree` to guarantee that the arrays | COMMENT |
| MEDIUM | weathernext/utils/data_modalities.py | 723 | # We leverage `ShareLeadingAxesArrayTree` to guarantee that the arrays | COMMENT |
| LOW | weathernext/utils/data_modalities.py | 1374 | # No masking, just return the array, only possible if it is a static array. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | weathernext/cyclones/direct_tracker.py | 333 | CODE | |
| LOW | weathernext/cyclones/ibtracs_processing_utils.py | 365 | CODE | |
| LOW | weathernext/utils/dense.py | 251 | CODE | |
| LOW | weathernext/utils/deep_gnn.py | 65 | CODE | |
| LOW | weathernext/utils/typed_graph_net.py | 197 | CODE | |
| LOW | weathernext/utils/xarray_tree_test.py | 42 | CODE | |
| LOW | weathernext/utils/sparse_transformer.py | 513 | CODE | |
| LOW | weathernext/utils/legacy/deep_typed_graph_net.py | 82 | CODE | |
| LOW | weathernext/utils/legacy/deep_typed_graph_net.py | 281 | CODE | |
| LOW | weathernext/weathernext2/architecture.py | 53 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | weathernext/cyclones/ibtracs_processing_stages.py | 403 | # Create the actual wind gridded quadrant shape. | COMMENT |
| MEDIUM | weathernext/utils/icosahedral_mesh.py | 231 | # This class handles the positioning of the new vertices, and avoids creating | COMMENT |
| MEDIUM | weathernext/utils/icosahedral_mesh.py | 272 | # This class handles the positioning of the new vertices, and avoids creating | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | weathernext/cyclones/direct_tracker.py | 925 | # Check if the refined latlon has a probability of existence above the | COMMENT |
| LOW | weathernext/utils/gather_scatter_ops.py | 87 | # Check if all indices fall within the index_range. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | weathernext/utils/solar_radiation.py | 26 | CODE |