Repository Analysis

google-deepmind/weathernext

14.5 Low AI signal View on GitHub

Analysis Overview

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).

14.5
Adjusted Score
14.5
Raw Score
100%
Time Factor
2026-08-11
Last Push
7.5K
Stars
Python
Language
23.3K
Lines of Code
76
Files
302
Pattern Hits
2026-08-13
Scan Date
0.08
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

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.

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

Severity Breakdown

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.

CRITICAL 0HIGH 6MEDIUM 6LOW 290

Directory Score Breakdown

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.

Pattern Findings

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.

Hyper-Verbose Identifiers175 hits · 176 pts
SeverityFileLineSnippetContext
LOWweathernext/cyclones/tracker_utils.py45def slice_data_array_latlon_box_with_lon_wraparound(CODE
LOWweathernext/cyclones/tracker_utils.py193def bilinear_interpolation_with_lon_wraparound(CODE
LOWweathernext/cyclones/tracker_utils.py267def _enforce_non_negativity_constraint(df: pd.DataFrame) -> pd.DataFrame:CODE
LOWweathernext/cyclones/tracker_utils.py299def _enforce_quadrant_radius_zero_if_wind_speed_below_threshold(CODE
LOWweathernext/cyclones/tracker_utils.py352def _enforce_quad_non_decreasing(CODE
LOWweathernext/cyclones/tracker_utils.py414def _enforce_rmw_smaller_than_quad_radii_by_clipping_rmw(CODE
LOWweathernext/cyclones/tracker_utils.py483def _enforce_rmw_smaller_than_quad_radii_by_clipping_quad_radii(CODE
LOWweathernext/cyclones/tracker_utils.py580def _wind_speeds_non_increasing_with_increasing_radii(CODE
LOWweathernext/cyclones/tracker_utils.py690def enforce_physical_consistency_on_quadrants_and_winds(CODE
LOWweathernext/cyclones/tracker_utils.py772def _check_quadrant_radii_and_radius_max_winds_are_consistent(df: pd.DataFrame):CODE
LOWweathernext/cyclones/tracker_utils.py798def _check_quadrant_radii_consistent(df: pd.DataFrame):CODE
LOWweathernext/cyclones/ibtracs_netcdf_to_csv.py71def convert_ibtracs_netcdf_to_csv_df(CODE
LOWweathernext/cyclones/ibtracs_netcdf_to_csv.py183def prepare_ibtracs_storms_dfs(CODE
LOWweathernext/cyclones/data_pipeline_utils.py96def create_grid_lat_and_lon_dimensions(CODE
LOWweathernext/cyclones/data_pipeline_utils.py141def convert_grid_data_to_packed_xarray_dataset(CODE
LOWweathernext/cyclones/ibtracs_processing_stages.py54def _scale_variables_from_nmiles_to_km(CODE
LOWweathernext/cyclones/ibtracs_processing_stages.py64def load_time_slice_from_ibtracs(CODE
LOWweathernext/cyclones/ibtracs_processing_stages.py214def cyclone_max_wind_speeds_max_wind_radii_and_min_sea_level_pressures(CODE
LOWweathernext/cyclones/ibtracs_processing_stages.py553def convert_ibtracs_to_gridded_data(CODE
LOWweathernext/cyclones/direct_tracker.py183def _single_row_dataframe_from_dict(row_dict: Dict[str, Any]) -> pd.DataFrame:CODE
LOWweathernext/cyclones/direct_tracker.py187def _get_bounding_box_sides_in_degrees(CODE
LOWweathernext/cyclones/direct_tracker.py237def _average_in_three_dimensions_and_project_on_sphere(CODE
LOWweathernext/cyclones/direct_tracker.py428 def _get_disc_windowed_gridded_probs_and_latlons(CODE
LOWweathernext/cyclones/direct_tracker.py477 def _get_mean_latlon_of_grid_points_within_disc(CODE
LOWweathernext/cyclones/direct_tracker.py512 def _get_mode_latlon_of_grid_points_within_disc(CODE
LOWweathernext/cyclones/direct_tracker.py547 def _get_is_in_radius_grid_around_latlon(CODE
LOWweathernext/cyclones/direct_tracker.py635 def _get_mean_scalar_variables_within_mask(CODE
LOWweathernext/cyclones/direct_tracker.py696 def _get_scalar_variables_via_bilinear_interpolation(CODE
LOWweathernext/cyclones/direct_tracker.py720 def _try_to_infer_probability_cyclone_exists_variable_name(CODE
LOWweathernext/cyclones/direct_tracker.py742 def _get_mean_cyclone_probability_within_mask(CODE
LOWweathernext/cyclones/direct_tracker.py770 def _get_cyclogenesis_candidates(CODE
LOWweathernext/cyclones/direct_tracker.py845 def _prune_and_refine_cyclogenesis_candidates(CODE
LOWweathernext/cyclones/direct_tracker.py1076 def _get_latlon_guess_with_momentum_update(CODE
LOWweathernext/cyclones/direct_tracker.py1109 def _advance_single_cyclone_active_at_lead_time_t(CODE
LOWweathernext/cyclones/direct_tracker.py1290 def _check_for_nans_in_predicted_tracks(CODE
LOWweathernext/cyclones/direct_tracker.py1337 def _get_cyclone_probability_of_existence_within_disc(CODE
LOWweathernext/cyclones/direct_tracker.py1354 def _get_all_scalar_variables_within_disc(CODE
LOWweathernext/cyclones/direct_tracker.py1369 def _remove_nearby_cyclone_centers_based_on_which_moved_most(CODE
LOWweathernext/cyclones/ibtracs_processing_utils.py29def _get_ibtracs_quadrant_variable_tuples() -> (CODE
LOWweathernext/cyclones/ibtracs_processing_utils.py199def filter_variables_for_reduced_dataset(CODE
LOWweathernext/cyclones/ibtracs_processing_utils.py212def get_cyclone_variable_names() -> List[str]:CODE
LOWweathernext/cyclones/ibtracs_processing_utils.py306def create_global_lat_lon_grid_coordinates(resolution: float) -> np.ndarray:CODE
LOWweathernext/cyclones/ibtracs_processing_utils.py326def create_sparse_nearest_neighbour_mask_from_latlon(CODE
LOWweathernext/cyclones/ibtracs_processing_utils.py368def create_gaussian_disc_mask_from_latlon(CODE
LOWweathernext/cyclones/ibtracs_processing_utils.py474def create_quadrant_integral_mask_from_latlons(CODE
LOWweathernext/cyclones/ibtracs_processing_utils.py580def create_disc_integral_mask_from_latlon(CODE
LOWweathernext/cyclones/ibtracs_processing_utils.py614def get_common_entries_without_nans(CODE
LOWweathernext/cyclones/ibtracs_processing_utils.py631def impute_quadrant_radii_nans(CODE
LOWweathernext/cyclones/ibtracs_processing_utils.py684def create_discs_centered_on_latlons(CODE
LOWweathernext/cyclones/ibtracs_processing_utils.py748def _create_wind_speed_linear_calibration_models(CODE
LOWweathernext/cyclones/ibtracs_processing_utils.py797 def _linear_regression_with_clipping(CODE
LOWweathernext/cyclones/ibtracs_processing_utils.py851def create_wind_speed_calibration_and_aggregation_model(CODE
LOWweathernext/cyclones/ibtracs_processing_utils.py877 def compute_aggregated_wind_speeds(CODE
LOWweathernext/cyclones/cyclone_utils.py164def cartesian_spherical_geodesic_momentum_update(CODE
LOWweathernext/cyclones/cyclone_utils.py228def latlon_spherical_geodesic_momentum_update(CODE
LOWweathernext/weathernext1_graph/graphcast.py680 def _inputs_to_grid_node_features(CODE
LOWweathernext/weathernext1_graph/graphcast.py701 def _grid_node_outputs_to_prediction(CODE
LOWweathernext/utils/model_utils.py29def get_graph_spatial_features(CODE
LOWweathernext/utils/model_utils.py237def get_relative_position_in_receiver_local_coordinates(CODE
LOWweathernext/utils/model_utils.py322def get_rotation_matrices_to_local_coordinates(CODE
115 more matches not shown…
Over-Commented Block89 hits · 88 pts
SeverityFileLineSnippetContext
LOWsetup.py1# Copyright 2023 DeepMind Technologies Limited.COMMENT
LOWweathernext/__init__.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/cyclones/tracker_utils.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/cyclones/tracker_utils.py561 # q_50_ne: 20COMMENT
LOWweathernext/cyclones/tracker_utils.py661 idx_sort,COMMENT
LOWweathernext/cyclones/ibtracs_netcdf_to_csv.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/cyclones/tracker_base.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/cyclones/data_pipeline_utils.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/cyclones/constants.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/cyclones/__init__.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/cyclones/ibtracs_processing_stages.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/cyclones/direct_tracker.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/cyclones/direct_tracker.py201 # contain the pole, so the disc will contain the entire [0, 360]COMMENT
LOWweathernext/cyclones/ibtracs_processing_utils.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/cyclones/cyclone_utils.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/cyclones/direct_tracker_6h_v1_config.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/weathernext1_graph/__init__.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/weathernext1_graph/graphcast.py1# Copyright 2023 DeepMind Technologies Limited.COMMENT
LOWweathernext/utils/model_utils.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/utils/model_utils.py301 edge_rotation_matrices, node_pos[senders], np_=np_)COMMENT
LOWweathernext/utils/model_utils.py621 receiver_pos_in_rotated_space = rotate_with_matrices(COMMENT
LOWweathernext/utils/update_blocks_utils.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/utils/sharding.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/utils/sharding.py21from jax.interpreters import pxlaCOMMENT
LOWweathernext/utils/task.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/utils/autoregressive.py1# Copyright 2023 DeepMind Technologies Limited.COMMENT
LOWweathernext/utils/data_modalities.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/utils/typed_graph.py1# Copyright 2023 DeepMind Technologies Limited.COMMENT
LOWweathernext/utils/typed_graph.py21_T = TypeVar('_T')COMMENT
LOWweathernext/utils/checkpoint.py1# Copyright 2023 DeepMind Technologies Limited.COMMENT
LOWweathernext/utils/xarray_dense.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/utils/xarray_dense.py921 # Transpose the array to put the preserved dims first, and the dims to splitCOMMENT
LOWweathernext/utils/sparse_transformer_utils.py1# Copyright 2024 DeepMind Technologies Limited.COMMENT
LOWweathernext/utils/solar_radiation.py1# Copyright 2023 DeepMind Technologies Limited.COMMENT
LOWweathernext/utils/solar_radiation.py201 j2000_days: Timestamps represented as the number of days since the J2000COMMENT
LOWweathernext/utils/dense.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/utils/activations.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/utils/mesh_transformer.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/utils/variables.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/utils/solar_radiation_test.py1# Copyright 2023 DeepMind Technologies Limited.COMMENT
LOWweathernext/utils/data_utils_test.py1# Copyright 2023 DeepMind Technologies Limited.COMMENT
LOWweathernext/utils/predictor_base.py1# Copyright 2023 DeepMind Technologies Limited.COMMENT
LOWweathernext/utils/fiddle_config_io.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/utils/fiddle_config_io.py21from fiddle import daglishCOMMENT
LOWweathernext/utils/fiddle_config_io.py41# "Index(index=0)",COMMENT
LOWweathernext/utils/fiddle_config_io.py61#COMMENT
LOWweathernext/utils/update_blocks.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/utils/__init__.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/utils/xarray_tree.py1# Copyright 2023 DeepMind Technologies Limited.COMMENT
LOWweathernext/utils/checkpoint_test.py1# Copyright 2023 DeepMind Technologies Limited.COMMENT
LOWweathernext/utils/deep_gnn.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/utils/icosahedral_mesh.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/utils/icosahedral_mesh.py201 # (adjacent face)/ \ (adjacent face) ^COMMENT
LOWweathernext/utils/icosahedral_mesh.py241 # / \COMMENT
LOWweathernext/utils/icosahedral_mesh.py281 # / \COMMENT
LOWweathernext/utils/typed_graph_net.py1# Copyright 2026 Google LLC.COMMENT
LOWweathernext/utils/typed_graph_net.py401 graph.context.features,COMMENT
LOWweathernext/utils/xarray_tree_test.py1# Copyright 2023 DeepMind Technologies Limited.COMMENT
LOWweathernext/utils/casting.py1# Copyright 2023 DeepMind Technologies Limited.COMMENT
LOWweathernext/utils/data_utils.py1# Copyright 2023 DeepMind Technologies Limited.COMMENT
29 more matches not shown…
Docstring Block Structure6 hits · 30 pts
SeverityFileLineSnippetContext
HIGHweathernext/cyclones/tracker_utils.py199Performs bilinear interpolation on gridded predictions at a given latlon. Args: gridded_predictions: gridded predSTRING
HIGHweathernext/cyclones/cyclone_utils.py169Calculates momentum update from pos_curr using pos_prev, on a sphere. Assumes pos_curr and pos_prev are on the unit sSTRING
HIGHweathernext/utils/solar_radiation.py530Computes the solar radiation incident at the top of the atmosphere. This method is a wrapper for `get_toa_incident_soSTRING
HIGHweathernext/utils/typed_graph_net.py211Returns a method that applies a configured GraphNetwork. This implementation follows Algorithm 1 in https://arxiv.orgSTRING
HIGHweathernext/utils/data_utils.py106Derives features used by ML models from the `progress` variable. Args: name: Base variable name from which featurSTRING
HIGHweathernext/utils/data_utils.py220Extracts inputs and targets for prediction, from a Dataset with a time dim. The input period is assumed to be contiguSTRING
Deep Nesting12 hits · 12 pts
SeverityFileLineSnippetContext
LOWweathernext/cyclones/tracker_utils.py352CODE
LOWweathernext/cyclones/ibtracs_netcdf_to_csv.py71CODE
LOWweathernext/cyclones/direct_tracker.py1598CODE
LOWweathernext/utils/checkpoint.py98CODE
LOWweathernext/utils/xarray_dense.py749CODE
LOWweathernext/utils/xarray_dense.py848CODE
LOWweathernext/utils/xarray_dense.py472CODE
LOWweathernext/utils/xarray_dense.py686CODE
LOWweathernext/utils/dense.py251CODE
LOWweathernext/utils/fiddle_config_io.py104CODE
LOWweathernext/utils/points_mesh_gnn.py415CODE
LOWweathernext/utils/sparse_transformer.py513CODE
AI Slop Vocabulary4 hits · 10 pts
SeverityFileLineSnippetContext
MEDIUMweathernext/utils/data_modalities.py374 # We leverage `ShareLeadingAxesArrayTree` to guarantee that the arraysCOMMENT
MEDIUMweathernext/utils/data_modalities.py494 # We leverage `ShareLeadingAxesArrayTree` to guarantee that the arraysCOMMENT
MEDIUMweathernext/utils/data_modalities.py723 # We leverage `ShareLeadingAxesArrayTree` to guarantee that the arraysCOMMENT
LOWweathernext/utils/data_modalities.py1374 # No masking, just return the array, only possible if it is a static array.COMMENT
AI Structural Patterns10 hits · 10 pts
SeverityFileLineSnippetContext
LOWweathernext/cyclones/direct_tracker.py333CODE
LOWweathernext/cyclones/ibtracs_processing_utils.py365CODE
LOWweathernext/utils/dense.py251CODE
LOWweathernext/utils/deep_gnn.py65CODE
LOWweathernext/utils/typed_graph_net.py197CODE
LOWweathernext/utils/xarray_tree_test.py42CODE
LOWweathernext/utils/sparse_transformer.py513CODE
LOWweathernext/utils/legacy/deep_typed_graph_net.py82CODE
LOWweathernext/utils/legacy/deep_typed_graph_net.py281CODE
LOWweathernext/weathernext2/architecture.py53CODE
Self-Referential Comments3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMweathernext/cyclones/ibtracs_processing_stages.py403 # Create the actual wind gridded quadrant shape.COMMENT
MEDIUMweathernext/utils/icosahedral_mesh.py231 # This class handles the positioning of the new vertices, and avoids creatingCOMMENT
MEDIUMweathernext/utils/icosahedral_mesh.py272 # This class handles the positioning of the new vertices, and avoids creatingCOMMENT
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippetContext
LOWweathernext/cyclones/direct_tracker.py925 # Check if the refined latlon has a probability of existence above theCOMMENT
LOWweathernext/utils/gather_scatter_ops.py87 # Check if all indices fall within the index_range.COMMENT
Unused Imports1 hit · 1 pts
SeverityFileLineSnippetContext
LOWweathernext/utils/solar_radiation.py26CODE