100-Days-Of-ML-Code中文版
This report summarizes scanner evidence for MLEveryday/100-Days-Of-ML-Code, a Python project with 22,245 GitHub stars. SynthScan examined 9,260 lines of code across 161 source files, recording 69 pattern matches distributed across 6 syntactic categories. The legacy adjusted pattern signal is 7.9 (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.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 30 finding(s).
Are imports declared and package/API names verified? 38 finding(s).
Are wrappers, guards, and repeated structures necessary? 20 finding(s).
Which changes need focused human review? 69 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 69 distinct pattern matches across 6 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 | Code/Day 25_Decision_Tree.py | 22 | CODE | |
| LOW | Code/Day 41.py | 22 | CODE | |
| LOW | Code/Day 41.py | 22 | CODE | |
| LOW | Code/Day 3_Multiple_Linear_Regression.py | 22 | CODE | |
| LOW | Code/Day 40.py | 22 | CODE | |
| LOW | Code/Day 40.py | 22 | CODE | |
| LOW | Code/Day 34_Random_Forests.py | 22 | CODE | |
| LOW | Code/Day 34_Random_Forests.py | 22 | CODE | |
| LOW | Code/Day 21_HTML_Data_Collection.py | 22 | CODE | |
| LOW | Code/Day 21_HTML_Data_Collection.py | 22 | CODE | |
| LOW | Code/Day 14_SVM_Margin.py | 22 | CODE | |
| LOW | Code/Day 14_SVM_Margin.py | 22 | CODE | |
| LOW | Code/Day 13_SVM.py | 22 | CODE | |
| LOW | Code/Day 13_SVM.py | 22 | CODE | |
| LOW | Code/Day 15_Naive_Bayes.py | 22 | CODE | |
| LOW | Code/Day 15_Naive_Bayes.py | 22 | CODE | |
| LOW | Code/Day 15_Naive_Bayes.py | 22 | CODE | |
| LOW | Code/Day 39.py | 22 | CODE | |
| LOW | Code/Day 16_Kernel_SVM.py | 22 | CODE | |
| LOW | Code/Day 16_Kernel_SVM.py | 22 | CODE | |
| LOW | Code/Day 16_Kernel_SVM.py | 22 | CODE | |
| LOW | Code/Day 2_Simple_Linear_Regression.py | 22 | CODE | |
| LOW | Code/Day 11_k-NN.py | 22 | CODE | |
| LOW | Code/Day 18_Numpy_Neural_Network.py | 22 | CODE | |
| LOW | Code/Day 18_Numpy_Neural_Network.py | 22 | CODE | |
| LOW | Code/Day 54_Hierarchical_Clustering.py | 22 | CODE | |
| LOW | Code/Day 54_Hierarchical_Clustering.py | 22 | CODE | |
| LOW | Code/Day 6_Logistic_Regression.py | 22 | CODE | |
| LOW | Code/Day 6_Logistic_Regression.py | 22 | CODE | |
| LOW | Code/Day 1_Data_Preprocessing.py | 22 | CODE | |
| LOW | Code/Day 1_Data_Preprocessing.py | 22 | CODE | |
| LOW | Code/Day 44_KMeans.py | 22 | CODE | |
| LOW | Code/Day 44_KMeans.py | 22 | CODE | |
| LOW | Code/Day 42.py | 22 | CODE | |
| LOW | Code/Day 42.py | 22 | CODE | |
| LOW | Code/Day 42.py | 22 | CODE | |
| LOW | Code/my/LinerTest.py | 2 | CODE | |
| LOW | Code/my/LinerTest.py | 3 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_pet_splits.py | 17 | def test_malformed_exif_is_rejected_before_dataset_decoding(self): | CODE |
| LOW | tests/test_pet_splits.py | 45 | def test_pet_dataset_applies_exif_orientation(self): | CODE |
| LOW | tests/test_pet_splits.py | 64 | def test_reproducible_disjoint_splits_and_bad_image_reporting(self): | CODE |
| LOW | tests/test_pet_splits.py | 92 | def test_png_with_bad_checksum_is_rejected_not_fatal(self): | CODE |
| LOW | tests/test_pet_splits.py | 109 | def test_runtime_can_be_configured_again_after_tensorflow_started(self): | CODE |
| LOW | tests/test_pet_splits.py | 118 | def test_full_shuffle_and_non_square_image_shape(self): | CODE |
| LOW | tests/test_pet_splits.py | 136 | def test_manifest_rejects_data_changes_and_overlap(self): | CODE |
| LOW | tests/test_pet_splits.py | 156 | def test_saving_manifest_twice_keeps_both_snapshots(self): | CODE |
| LOW | tests/test_pet_splits.py | 170 | def test_missing_classes_fail_clearly(self): | CODE |
| LOW | tests/test_course_guidance.py | 12 | def test_complete_topological_beginner_route(self): | CODE |
| LOW | tests/test_learning_invariants.py | 32 | def test_imputer_uses_only_training_rows_and_survives_unseen_country(self): | CODE |
| LOW | tests/test_learning_invariants.py | 48 | def test_zero_spending_is_preserved(self): | CODE |
| LOW | tests/test_learning_invariants.py | 57 | def test_prediction_cannot_refit_svm_scaler(self): | CODE |
| LOW | tests/test_learning_invariants.py | 68 | def test_decision_plot_colors_match_class_regions(self): | CODE |
| LOW | tests/test_learning_invariants.py | 86 | def test_numpy_network_gradients_and_learning(self): | CODE |
| LOW | tests/test_experiments.py | 16 | def test_unique_directories_and_write_once_records(self): | CODE |
| LOW | tests/test_experiments.py | 29 | def test_invalid_json_does_not_leave_a_partial_record(self): | CODE |
| LOW | tests/test_experiments.py | 36 | def test_manifest_ambiguity_and_explicit_selection(self): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | Code/Day 40.py | 41 | print("Bad/duplicate examples:", manifest["rejected"][:5]) | COMMENT |
| LOW | Code/Day 2_Simple_Linear_Regression.py | 61 | ax.axhline(0, color="black") | COMMENT |
| LOW | Code/Day 11_k-NN.py | 61 | COMMENT | |
| LOW | Code/Day 18_Numpy_Neural_Network.py | 101 | finish_plot("day18_loss") | COMMENT |
| LOW | Code/Day 1_Data_Preprocessing.py | 61 | print(preprocessor.get_feature_names_out()) | COMMENT |
| LOW | Code/Day 44_KMeans.py | 61 | COMMENT | |
| LOW | Code/Day 42.py | 101 | # | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | Code/experiments.py | 30 | except importlib.metadata.PackageNotFoundError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/check_docs.py | 14 | CODE | |
| LOW | tools/sync_lessons.py | 39 | CODE | |
| LOW | tools/check_lessons.py | 28 | CODE | |
| LOW | Code/deep_utils.py | 37 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | Code/deep_utils.py | 88 | CODE |