Pyodide is a Python distribution for the browser and Node.js based on WebAssembly
This report presents the forensic synthetic code analysis of pyodide/pyodide, a Python project with 14,733 GitHub stars. SynthScan v2.0 examined 100,037 lines of code across 453 source files, recording 827 pattern matches distributed across 19 syntactic categories. The overall adjusted score of 12.0 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).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
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 827 distinct pattern matches across 19 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 |
|---|---|---|---|---|
| HIGH | conftest.py | 315 | return Array.from(pyodide._module.pyproxy_alloc_map.entries(), ([x, s]) => [x.type, x.toString(), "Trace | CODE |
| HIGH | src/py/_pyodide/_core_docs.py | 1422 | result.push(convert(value.first)) | STRING |
| HIGH | src/py/_pyodide/_core_docs.py | 1423 | result.push(convert(value.second)) | STRING |
| HIGH | src/py/_pyodide/_core_docs.py | 1567 | >>> js_object.toString() | STRING |
| HIGH | src/py/_pyodide/_core_docs.py | 1626 | result.push(convert(value.first)) | STRING |
| HIGH | src/py/_pyodide/_core_docs.py | 1627 | result.push(convert(value.second)) | STRING |
| HIGH | src/py/pyodide/console.py | 253 | >>> future = console.push("print('Hello, World!')") # doctest: +SKIP | CODE |
| HIGH | src/py/pyodide/console.py | 610 | >>> future = console.push("import numpy as np; print(np.array([1, 2, 3]))") # doctest: +SKIP | CODE |
| HIGH | src/tests/test_streams.py | 140 | stdout_codes.push(code); | CODE |
| HIGH | src/tests/test_streams.py | 211 | null, | CODE |
| HIGH | src/tests/test_streams.py | 214 | null, | CODE |
| HIGH | src/tests/test_streams.py | 249 | null, | CODE |
| HIGH | src/tests/test_streams.py | 282 | null, | CODE |
| HIGH | src/tests/test_streams.py | 313 | null, | CODE |
| HIGH | src/tests/test_streams.py | 346 | null, | CODE |
| HIGH | src/tests/test_streams.py | 433 | this.writtenBuffers.push(buffer.slice()); | CODE |
| HIGH | src/tests/test_streams.py | 610 | result.push(new TextDecoder().decode(a)); | CODE |
| HIGH | src/tests/test_streams.py | 59 | stdoutStrings.push(s); | STRING |
| HIGH | src/tests/test_streams.py | 62 | stderrStrings.push(s); | STRING |
| HIGH | src/tests/test_streams.py | 191 | run_js("pyodide.setStdin({stdin: () => undefined})") | STRING |
| HIGH | src/tests/test_streams.py | 398 | "read returned undefined; a correct implementation must return a number" | STRING |
| HIGH | src/tests/test_streams.py | 421 | expected = "write returned undefined; a correct implementation must return a number" | STRING |
| HIGH⚡ | src/tests/test_pyproxy.py | 563 | assert(() => d.__getitem__.prototype === undefined); | CODE |
| HIGH⚡ | src/tests/test_pyproxy.py | 567 | assert(() => d.get.type === undefined); | CODE |
| HIGH⚡ | src/tests/test_pyproxy.py | 568 | assert(() => d.set.type === undefined); | CODE |
| HIGH⚡ | src/tests/test_pyproxy.py | 1001 | result.push(a.get(1)); | CODE |
| HIGH⚡ | src/tests/test_pyproxy.py | 1002 | result.push(b.get(1)); | CODE |
| HIGH⚡ | src/tests/test_pyproxy.py | 2318 | func = run_js("(a) => a.push(1, 2, 3)") | CODE |
| HIGH | src/tests/test_pyproxy.py | 93 | pyproxy_to_string = run_js("(e) => e.toString()") | CODE |
| HIGH | src/tests/test_pyproxy.py | 591 | assert(() => Test.prototype === undefined); | CODE |
| HIGH | src/tests/test_pyproxy.py | 713 | assert(() => d.x === undefined); | CODE |
| HIGH | src/tests/test_pyproxy.py | 773 | assert(() => t.prototype === undefined); | CODE |
| HIGH | src/tests/test_pyproxy.py | 818 | assert(() => l.get.type === undefined); | CODE |
| HIGH | src/tests/test_pyproxy.py | 834 | assert(() => l.length === 2 && l.get(1) === 7); | CODE |
| HIGH | src/tests/test_pyproxy.py | 1054 | assertThrows(() => t.toString(), "PythonError", ""); | CODE |
| HIGH | src/tests/test_pyproxy.py | 1111 | assertThrows(() => t.toString(), "NoGilError", ""); | CODE |
| HIGH | src/tests/test_pyproxy.py | 2526 | const res = Object.fromEntries(Reflect.ownKeys(Function.prototype).map(k => [k.toString(), k in o])); | CODE |
| HIGH | src/tests/test_pyproxy.py | 2550 | if(x && x.destroy) { | CODE |
| HIGH⚡ | src/tests/test_pyproxy.py | 125 | result.push(pyodide.globals.has("xxxxx")); | STRING |
| HIGH⚡ | src/tests/test_pyproxy.py | 126 | result.push(pyodide.globals.has("yyyyy")); | STRING |
| HIGH⚡ | src/tests/test_pyproxy.py | 127 | result.push(pyodide.globals.has("globals")); | STRING |
| HIGH⚡ | src/tests/test_pyproxy.py | 128 | result.push(pyodide.globals.has("open")); | STRING |
| HIGH⚡ | src/tests/test_pyproxy.py | 1382 | undefined, | STRING |
| HIGH⚡ | src/tests/test_pyproxy.py | 1383 | null, | STRING |
| HIGH⚡ | src/tests/test_pyproxy.py | 1392 | assert(() => JSON.stringify(fpy.apply(undefined, input)) === JSON.stringify(fjs.apply(undefined, input))); | STRING |
| HIGH⚡ | src/tests/test_pyproxy.py | 1396 | assertThrows(() => fjs.apply(undefined, error_input), "TypeError", ""); | STRING |
| HIGH⚡ | src/tests/test_pyproxy.py | 1397 | assertThrows(() => fpy.apply(undefined, error_input), "TypeError", ""); | STRING |
| HIGH⚡ | src/tests/test_pyproxy.py | 1546 | r.push(g.next()); | STRING |
| HIGH⚡ | src/tests/test_pyproxy.py | 1547 | r.push(g.next(3)); | STRING |
| HIGH⚡ | src/tests/test_pyproxy.py | 1548 | r.push(g.next(4)); | STRING |
| HIGH⚡ | src/tests/test_pyproxy.py | 1549 | r.push(g.next(5)); | STRING |
| HIGH⚡ | src/tests/test_pyproxy.py | 1595 | r.push(g.next()); | STRING |
| HIGH⚡ | src/tests/test_pyproxy.py | 1596 | r.push(g.return(5)); | STRING |
| HIGH⚡ | src/tests/test_pyproxy.py | 1597 | r.push(g.next()); | STRING |
| HIGH⚡ | src/tests/test_pyproxy.py | 1662 | r.push(g.next()); | STRING |
| HIGH⚡ | src/tests/test_pyproxy.py | 1663 | r.push(g.throw(new TypeError('hi'))); | STRING |
| HIGH⚡ | src/tests/test_pyproxy.py | 1664 | r.push(g.next()); | STRING |
| HIGH⚡ | src/tests/test_pyproxy.py | 1712 | r.push(await g.next()); | STRING |
| HIGH⚡ | src/tests/test_pyproxy.py | 1713 | r.push(await g.next(3)); | STRING |
| HIGH⚡ | src/tests/test_pyproxy.py | 1714 | r.push(await g.next(4)); | STRING |
| 122 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | conftest.py | 176 | def pytest_collection_modifyitems(config, items): | STRING |
| LOW | conftest.py | 281 | def extra_checks_test_wrapper(browser, trace_hiwire_refs, trace_pyproxies, item): | STRING |
| LOW | tools/create_lockfile_diff.py | 42 | def get_lockfile_url_from_makefile(branch: str | None = None) -> str: | CODE |
| LOW | tools/pytest_wrapper.py | 10 | def remove_num_threads_option(args: list[str]) -> None: | CODE |
| LOW | tools/bump_version.py | 90 | def python_version_to_js_version(version: str) -> Constant: | CODE |
| LOW | tools/backport.py | 54 | def get_needs_backport_pr_numbers() -> tuple[int, ...]: | CODE |
| LOW | tools/backport.py | 65 | def get_needs_backport_prs_strings() -> tuple[str, ...]: | CODE |
| LOW | tools/backport.py | 456 | def remove_release_notes_from_unreleased_section( | CODE |
| LOW | tools/docker_image_tag.py | 20 | def latest_version_of_firefox() -> str: | CODE |
| LOW | tools/deploy_s3.py | 26 | def _validate_remote_prefix_to_remove(remote_prefix: Path) -> None: | CODE |
| LOW⚡ | tools/tests/test_bump_version.py | 278 | def test_bump_version_dirty_working_tree(tmp_path): | CODE |
| LOW⚡ | tools/tests/test_bump_version.py | 292 | def test_bump_version_updates_changelog_for_minor_release(tmp_path): | CODE |
| LOW | tools/tests/test_bump_version.py | 152 | def test_bump_version_dry_run(tmp_path): | CODE |
| LOW | tools/tests/test_bump_version.py | 171 | def test_bump_version_check_no_changes(tmp_path): | CODE |
| LOW | tools/tests/test_bump_version.py | 206 | def test_bump_version_check_with_changes(tmp_path): | CODE |
| LOW | tools/tests/test_bump_version.py | 216 | def test_bump_version_updates_files(tmp_path): | CODE |
| LOW | tools/tests/test_bump_version.py | 248 | def test_bump_version_dev_version(tmp_path): | CODE |
| LOW | tools/tests/test_bump_version.py | 261 | def test_bump_version_prerelease(tmp_path): | CODE |
| LOW | tools/tests/test_bump_version.py | 311 | def test_bump_version_does_not_update_changelog_for_patch_release(tmp_path): | CODE |
| LOW | tools/tests/test_bump_version.py | 325 | def test_bump_version_check_changelog_date(tmp_path): | CODE |
| LOW | tools/tests/test_bump_version.py | 342 | def test_bump_version_dry_run_does_not_update_changelog(tmp_path): | CODE |
| LOW | tools/tests/test_bump_version.py | 356 | def test_check_changelog_fails_with_unreleased(tmp_path): | CODE |
| LOW | tools/tests/test_bump_version.py | 367 | def test_check_changelog_fails_with_missing_version_header(tmp_path): | CODE |
| LOW | tools/tests/test_bump_version.py | 396 | def test_check_changelog_fails_with_no_blank_line_after_header(tmp_path): | CODE |
| LOW | tools/tests/test_bump_version.py | 424 | def test_check_changelog_fails_with_invalid_date_format(tmp_path): | CODE |
| LOW | tools/tests/test_bump_version.py | 453 | def test_update_changelog_fails_with_no_unreleased_section(tmp_path): | CODE |
| LOW | tools/tests/test_bump_version.py | 482 | def test_update_changelog_fails_when_version_already_exists(tmp_path): | CODE |
| LOW | tools/tests/test_backport.py | 180 | def test_add_backported_entries(): | CODE |
| LOW | tools/tests/test_backport.py | 269 | def test_remove_backported_entries(): | CODE |
| LOW | docs/conf.py | 208 | def prevent_parens_after_js_class_xrefs(): | CODE |
| LOW | docs/conf.py | 220 | def calculate_pyodide_version(app): | CODE |
| LOW | docs/conf.py | 348 | def prune_jsproxy_constructor_docs(): | CODE |
| LOW | docs/sphinx_pyodide/sphinx_pyodide/packages.py | 16 | def get_packages_summary_directive(app): | CODE |
| LOW | packages/test-cpp-exceptions/test_cpp_exceptions.py | 5 | def test_uncaught_cpp_exceptions(selenium): | CODE |
| LOW | packages/test-cpp-exceptions/test_cpp_exceptions.py | 35 | def test_cpp_exception_catching(selenium): | CODE |
| LOW | packages/test-cpp-exceptions/test_cpp_exceptions.py | 72 | def test_cpp_exception_catching_invoke(selenium): | CODE |
| LOW | packages/pytest-asyncio/inner_test_pytest_asyncio.py | 32 | def test_asyncio_marker_compatibility_with_xfail(pytester: Pytester): | CODE |
| LOW | packages/pytest-asyncio/inner_test_pytest_asyncio.py | 53 | async def test_asyncio_marker_with_default_param(a_param=None): | CODE |
| LOW | packages/numpy/test_numpy.py | 178 | def test_runpythonasync_numpy(selenium): | STRING |
| LOW | packages/numpy/test_numpy.py | 259 | def test_get_buffer_roundtrip(selenium, arg): | STRING |
| LOW | packages/numpy/test_numpy.py | 302 | def test_get_buffer_big_endian(selenium): | STRING |
| LOW | packages/numpy/test_numpy.py | 329 | def test_get_buffer_error_messages(selenium): | STRING |
| LOW | packages/micropip/test_micropip.py | 34 | def selenium_standalone_micropip(selenium_standalone_refresh): | CODE |
| LOW | packages/micropip/test_micropip.py | 89 | def test_install_file_protocol_node(selenium_standalone_micropip): | STRING |
| LOW | packages/micropip/test_micropip.py | 103 | def test_install_different_version(selenium_standalone_micropip): | STRING |
| LOW | packages/micropip/test_micropip.py | 147 | def test_list_load_package_from_url(selenium_standalone_micropip, httpserver): | STRING |
| LOW | packages/scipy/scipy-conftest.py | 340 | def pytest_collection_modifyitems(config, items): | CODE |
| LOW | src/py/ssl.py | 340 | def _load_windows_store_certs(self, storename, purpose): | CODE |
| LOW | src/py/ssl.py | 395 | def hostname_checks_common_name(self): | CODE |
| LOW | src/py/ssl.py | 403 | def hostname_checks_common_name(self, value): | CODE |
| LOW | src/py/ssl.py | 567 | def _create_unverified_context( | CODE |
| LOW | src/py/ssl.py | 691 | def verify_client_post_handshake(self): | CODE |
| LOW | src/py/ssl.py | 835 | def verify_client_post_handshake(self): | CODE |
| LOW | src/py/_pyodide/_importhook.py | 213 | def add_note_to_module_not_found_error(e: ModuleNotFoundError) -> None: | STRING |
| LOW | src/py/_pyodide/_importhook.py | 238 | def register_module_not_found_hook(packages: Any) -> None: | STRING |
| LOW | src/py/_pyodide/jsbind.py | 158 | def get_attr_sig_method_helper(sig, attr): | CODE |
| LOW | src/py/pyodide/console.py | 405 | def persistent_redirect_streams(self) -> None: | CODE |
| LOW | src/py/pyodide/console.py | 414 | def persistent_restore_streams(self) -> None: | CODE |
| LOW | src/py/pyodide/console.py | 426 | def _stdstreams_redirections_inner(self) -> Generator[None]: | CODE |
| LOW | src/py/pyodide/webloop.py | 316 | async def shutdown_default_executor(self, timeout=None): | CODE |
| 256 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/py/ssl.py | 17 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/ssl.py | 19 | CODE | |
| LOW | src/py/_pyodide/_core_docs.py | 20 | CODE | |
| LOW | src/py/_pyodide/__init__.py | 10 | CODE | |
| LOW | src/py/_pyodide/__init__.py | 10 | CODE | |
| LOW | src/py/pyodide/code.py | 6 | CODE | |
| LOW | src/py/pyodide/code.py | 6 | CODE | |
| LOW | src/py/pyodide/code.py | 6 | CODE | |
| LOW | src/py/pyodide/code.py | 6 | CODE | |
| LOW | src/py/pyodide/code.py | 6 | CODE | |
| LOW | src/py/pyodide/__init__.py | 17 | CODE | |
| LOW | src/py/pyodide/_core.py | 1 | CODE | |
| LOW | src/py/pyodide/ffi/__init__.py | 5 | CODE | |
| LOW | src/py/pyodide/ffi/__init__.py | 6 | CODE | |
| LOW | src/py/pyodide/ffi/__init__.py | 6 | CODE | |
| LOW | src/py/pyodide/http/_pyfetch.py | 5 | CODE | |
| LOW | src/py/pyodide/http/_pyfetch.py | 22 | CODE | |
| LOW | src/py/pyodide/http/__init__.py | 5 | CODE | |
| LOW | src/py/pyodide/http/__init__.py | 6 | CODE | |
| LOW | src/py/pyodide/http/__init__.py | 6 | CODE | |
| LOW | src/py/pyodide/http/__init__.py | 6 | CODE | |
| LOW | src/py/pyodide/http/__init__.py | 11 | CODE | |
| LOW | src/py/pyodide/http/__init__.py | 11 | CODE | |
| LOW | src/tests/test_ssl_stub.py | 23 | CODE | |
| LOW | src/tests/test_ssl_stub.py | 23 | CODE | |
| LOW | src/tests/test_ssl_stub.py | 23 | CODE | |
| LOW | src/tests/test_ssl_stub.py | 23 | CODE | |
| LOW | src/tests/test_ssl_stub.py | 23 | CODE | |
| LOW | src/tests/test_ssl_stub.py | 23 | CODE | |
| LOW | src/tests/test_ssl_stub.py | 23 | CODE | |
| LOW | src/tests/test_ssl_stub.py | 23 | CODE | |
| LOW | src/tests/test_ssl_stub.py | 23 | CODE | |
| LOW | src/tests/test_ssl_stub.py | 23 | CODE | |
| 115 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/py/pyodide/_nodesock_transport.py | 54 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | src/py/pyodide/_nodesock_transport.py | 56 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | src/py/pyodide/_nodesock_transport.py | 84 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | src/py/pyodide/_nodesock_transport.py | 86 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | src/py/pyodide/_nodesock_transport.py | 158 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | src/py/pyodide/_nodesock_transport.py | 160 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | src/core/socket_syscalls.c | 15 | // ──────────── | COMMENT |
| MEDIUM⚡ | src/tests/test_python_socket.py | 757 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | src/tests/test_python_socket.py | 759 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | src/tests/test_python_socket.py | 1016 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | src/tests/test_python_socket.py | 1018 | # --------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | benchmark/benchmarks/numpy_benchmarks/harris.py | 1 | # from: parakeet testbed | COMMENT |
| LOW | tools/constraints.txt | 1 | # This file is used to track build constraints for packages | COMMENT |
| LOW | src/py/_pyodide/__init__.py | 1 | # _pyodide is imported at the very beginning of the initialization process so it | COMMENT |
| LOW | src/py/_pyodide/__init__.py | 21 | # sys.excepthook **except** traceback.print_exception uses the linecache | COMMENT |
| LOW | src/py/pyodide/__init__.py | 1 | # When the pyodide package is imported, both the js and the pyodide_js modules | COMMENT |
| LOW | src/core/jsproxy.c | 41 | #include "jsproxy.h" | COMMENT |
| LOW | src/core/jsproxy.c | 61 | #define IS_ARRAY (1 << 12) | COMMENT |
| LOW | src/core/jsproxy.c | 421 | // JsMethodCallSingleton is a special structure which we return from | COMMENT |
| LOW | src/core/jsproxy.c | 4161 | PyObject* result = NULL; | COMMENT |
| LOW | src/core/jsproxy_call.c | 1 | #define PY_SSIZE_T_CLEAN | COMMENT |
| LOW | src/core/jsproxy_call.c | 21 | // | COMMENT |
| LOW | src/core/jsproxy_call.c | 41 | int posparams_nmandatory; | COMMENT |
| LOW | src/core/error_handling.c | 1 | // clang-format off | COMMENT |
| LOW | src/core/error_handling.c | 161 | COMMENT | |
| LOW | src/core/python2js.c | 1 | #define PY_SSIZE_T_CLEAN | COMMENT |
| LOW | src/core/python2js.c | 141 | // | COMMENT |
| LOW | src/core/python2js.c | 161 | // V8, Apple Silicon, two purpose-built binaries differing only in this file) | COMMENT |
| LOW | src/core/python2js.c | 181 | // list.join("") and see if one is faster than the other. | COMMENT |
| LOW | src/core/python2js.c | 921 | "pyproxies", | COMMENT |
| LOW | src/core/socket_syscalls.c | 1 | #include "emscripten.h" | COMMENT |
| LOW | src/core/jsbind.c | 1 | #define PY_SSIZE_T_CLEAN | COMMENT |
| LOW | src/core/pyproxy.h | 81 | COMMENT | |
| LOW | src/core/jsmemops.h | 1 | // Macros to access memory from JavaScript | COMMENT |
| LOW | src/core/jsmemops.h | 21 | #define DEREF_F64(addr, offset) HEAPF64[(addr >>> 3) + offset] | COMMENT |
| LOW | src/core/error_handling.h | 1 | #ifndef ERROR_HANDLING_H | COMMENT |
| LOW | src/core/error_handling.h | 81 | } while (0) | COMMENT |
| LOW | src/core/python2js_buffer.c | 1 | #define PY_SSIZE_T_CLEAN | COMMENT |
| LOW | src/core/pyproxy.c | 1 | #define PY_SSIZE_T_CLEAN | COMMENT |
| LOW | src/core/pyproxy.c | 101 | #define HAS_SET (1 << 2) | COMMENT |
| LOW | src/core/pyproxy.c | 221 | COMMENT | |
| LOW | src/core/pyproxy.c | 321 | } | COMMENT |
| LOW | src/core/pyproxy.ts | 601 | // place the task wherever it likes. | COMMENT |
| LOW | src/core/stack_switching/pystate.c | 1 | #include "Python.h" | COMMENT |
| LOW | src/js/emscripten-settings.ts | 61 | // Emscripten calls locateFile exactly one time with argument | COMMENT |
| LOW | src/js/types.ts | 41 | export const HEAPU32: Uint32Array; | COMMENT |
| LOW | src/tests/python_tests.yaml | 1 | # This list is updated with tools/make_test_list.py script, which needs | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | conftest.py | 242 | except Exception: | STRING |
| LOW | conftest.py | 295 | except Exception: | STRING |
| MEDIUM | tools/bump_version.py | 190 | print("Error: No '## Unreleased' section found in changelog", file=sys.stderr) | CODE |
| MEDIUM | tools/bump_version.py | 193 | print(f"Error: '{version_header}' section found in changelog", file=sys.stderr) | CODE |
| LOW | docs/sphinx_pyodide/sphinx_pyodide/util.py | 16 | except Exception: | CODE |
| LOW | docs/sphinx_pyodide/sphinx_pyodide/packages.py | 34 | except Exception: | CODE |
| LOW | packages/test-buffer/test_buffer.py | 87 | except Exception as e: | CODE |
| LOW | packages/_tests/test_packages_common.py | 41 | except Exception as e: | CODE |
| MEDIUM | packages/_tests/test_packages_common.py | 38 | def load_lockfile() -> PyodideLockSpec: | CODE |
| LOW | src/py/pyodide/_nodesock_transport.py | 38 | except Exception: | CODE |
| LOW | src/py/pyodide/_nodesock_transport.py | 42 | except Exception: | CODE |
| LOW⚡ | src/py/pyodide/_nodesock_transport.py | 149 | except Exception as exc: | CODE |
| LOW | src/py/pyodide/_nodesock_transport.py | 183 | except Exception as exc: | CODE |
| MEDIUM | src/py/pyodide/_nodesock_transport.py | 115 | def _read_loop(self) -> None: | CODE |
| LOW | src/py/pyodide/webloop.py | 126 | except Exception as result_exception: | CODE |
| LOW | src/py/pyodide/webloop.py | 162 | except Exception as e: | CODE |
| LOW | src/tests/test_console.py | 175 | except Exception: | CODE |
| MEDIUM | src/tests/test_typeconversions.py | 27 | def no_hypothesis(x): | CODE |
| LOW | src/tests/test_typeconversions.py | 31 | except Exception: | CODE |
| LOW⚡ | src/tests/test_stdlib_fixes.py | 123 | except Exception: | CODE |
| LOW⚡ | src/tests/test_stdlib_fixes.py | 132 | except Exception: | CODE |
| LOW | src/tests/test_filesystem.py | 75 | except Exception as err: | CODE |
| LOW | src/tests/test_jsproxy.py | 3023 | except Exception: | CODE |
| LOW | src/tests/test_jsproxy.py | 3057 | except Exception: | CODE |
| LOW | src/tests/test_jsproxy.py | 3091 | except Exception: | CODE |
| LOW | src/tests/test_stack_switching.py | 298 | except Exception as e: | CODE |
| MEDIUM | src/tests/test_stack_switching.py | 295 | def f(): | CODE |
| LOW | src/tests/test_webloop.py | 341 | except Exception: | STRING |
| LOW | src/tests/test_webloop.py | 363 | except Exception: | STRING |
| LOW | src/tests/test_webloop.py | 387 | except Exception: | STRING |
| LOW | src/tests/test_webloop.py | 396 | except Exception: | STRING |
| LOW | src/tests/test_pyodide.py | 1308 | except Exception as e: | CODE |
| LOW | src/tests/test_pyodide.py | 1114 | except Exception as e: | STRING |
| LOW | src/tests/test_pyodide.py | 1157 | except Exception as ex: | STRING |
| LOW | src/tests/test_pyodide.py | 1215 | except Exception as e: | STRING |
| LOW | src/tests/test_python_socket.py | 42 | except Exception as e: | CODE |
| LOW | src/tests/test_python_socket.py | 1094 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tools/update_emscripten.py | 64 | def update_patches(newtag: str) -> None: | CODE |
| LOW⚡ | tools/update_emscripten.py | 72 | def update_makefile_envs(oldtag: str, newtag: str) -> None: | CODE |
| LOW⚡ | tools/update_emscripten.py | 80 | def update_struct_info() -> None: | CODE |
| LOW | docs/sphinx_pyodide/sphinx_pyodide/mdn_xrefs.py | 229 | __all__ = ["add_mdn_xrefs"] | CODE |
| LOW | docs/sphinx_pyodide/sphinx_pyodide/jsdoc.py | 13 | __all__ = ["ts_xref_formatter", "patch_sphinx_js"] | CODE |
| LOW | docs/sphinx_pyodide/sphinx_pyodide/jsdoc.py | 149 | def set_kind(obj: TopLevel) -> None: | CODE |
| LOW | packages/test-simd/src/test_simd/__init__.py | 17 | __all__ = [ | CODE |
| LOW | src/py/webbrowser.py | 8 | __all__ = ["open", "open_new", "open_new_tab", "get", "register", "Error"] | CODE |
| LOW | src/py/_pyodide/_core_docs.py | 1805 | __all__ = [ | CODE |
| LOW | src/py/_pyodide/__init__.py | 12 | __all__ = ["_base", "_importhook"] | CODE |
| LOW | src/py/_pyodide/docs_argspec.py | 30 | __all__ = ["docs_argspec"] | CODE |
| LOW | src/py/pyodide/console.py | 30 | __all__ = ["Console", "PyodideConsole", "BANNER", "repr_shorten", "ConsoleFuture"] | CODE |
| LOW | src/py/pyodide/code.py | 108 | __all__ = [ | CODE |
| LOW⚡ | src/py/pyodide/_nodesock_transport.py | 81 | def set_protocol(self, protocol: asyncio.BaseProtocol) -> None: | CODE |
| LOW | src/py/pyodide/__init__.py | 15 | __all__ = ["__version__", "console", "code", "ffi", "http", "webloop"] | CODE |
| LOW | src/py/pyodide/_core.py | 3 | __all__ = ["IN_PYODIDE"] | CODE |
| LOW | src/py/pyodide/_state.py | 51 | __all__ = ["save_state", "restore_state"] | CODE |
| LOW | src/py/pyodide/webloop.py | 241 | def set_debug(self, enabled: bool) -> None: | CODE |
| LOW | src/py/pyodide/webloop.py | 1094 | def set_event_loop(self, loop: Any) -> None: | CODE |
| LOW | src/py/pyodide/webloop.py | 1135 | __all__ = ["WebLoop", "WebLoopPolicy", "PyodideFuture", "PyodideTask"] | CODE |
| LOW | src/py/pyodide/ffi/__init__.py | 34 | __all__ = [ | CODE |
| LOW | src/py/pyodide/ffi/wrappers.py | 128 | __all__ = [ | CODE |
| LOW | src/py/pyodide/http/pyxhr.py | 35 | __all__ = [ | CODE |
| LOW | src/py/pyodide/http/__init__.py | 19 | __all__ = [ | CODE |
| LOW | src/tests/test_pkg/__init__.py | 3 | __all__ = ["test1"] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tools/calculate_build_cache_key.py | 3 | # This file is a helper script to calculate the hash for cache key | COMMENT |
| MEDIUM⚡ | tools/tests/test_bump_version.py | 282 | # Create an uncommitted change | COMMENT |
| MEDIUM | tools/tests/test_bump_version.py | 371 | # Create a changelog without the version we're checking | COMMENT |
| MEDIUM | tools/tests/test_bump_version.py | 400 | # Create a changelog with version header but no blank line after | COMMENT |
| MEDIUM | tools/tests/test_bump_version.py | 428 | # Create a changelog with invalid date format | COMMENT |
| MEDIUM | tools/tests/test_bump_version.py | 457 | # Create a changelog without ## Unreleased section | COMMENT |
| MEDIUM | tools/tests/test_bump_version.py | 486 | # Create a changelog that already has the version we're trying to bump to | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | conftest.py | 223 | CODE | |
| LOW | conftest.py | 281 | CODE | |
| LOW | benchmark/benchmark.py | 158 | CODE | |
| LOW | benchmark/benchmarks/pystone_benchmarks/pystone.py | 210 | CODE | |
| LOW | benchmark/benchmarks/numpy_benchmarks/growcut.py | 23 | CODE | |
| LOW | benchmark/benchmarks/numpy_benchmarks/fdtd.py | 9 | CODE | |
| LOW | benchmark/benchmarks/numpy_benchmarks/hyantes.py | 9 | CODE | |
| LOW | tools/create_lockfile_diff.py | 42 | CODE | |
| LOW | tools/backport.py | 330 | CODE | |
| LOW | tools/create_xbuildenv.py | 20 | CODE | |
| LOW | tools/deploy_s3.py | 62 | CODE | |
| LOW | src/py/ssl.py | 472 | CODE | |
| LOW | src/py/_pyodide/_base.py | 619 | CODE | |
| LOW | src/py/pyodide/_nodesock_transport.py | 115 | CODE | |
| LOW | src/py/pyodide/webloop.py | 857 | CODE | |
| LOW | src/tests/test_pyproxy.py | 420 | CODE | |
| LOW | src/tests/test_package_loading.py | 152 | CODE | |
| LOW | src/tests/test_package_loading.py | 177 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | packages/scipy/scipy-pytest.js | 41 | print('Hoping scipy tests are included in the scipy wheel') | CODE |
| HIGH | packages/scipy/scipy-pytest.js | 44 | print(pkg_list) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | conftest.py | 169 | CODE | |
| LOW | tools/deploy_s3.py | 62 | CODE | |
| LOW | src/py/ssl.py | 567 | CODE | |
| LOW | src/py/_pyodide/_base.py | 418 | CODE | |
| LOW | src/py/_pyodide/_base.py | 527 | CODE | |
| LOW | src/py/pyodide/console.py | 364 | CODE | |
| LOW | src/py/pyodide/webloop.py | 857 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/py/pyodide/__init__.py | 11 | # pytest mocks for js or pyodide_js, so make sure to test "if IN_PYODIDE" before | COMMENT |
| LOW | src/tests/test_ssl_stub.py | 20 | # Guardrail to ensure we don't forget to update this test when Python version changes | COMMENT |
| LOW | src/tests/test_ssl_stub.py | 20 | # Guardrail to ensure we don't forget to update this test when Python version changes | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/check_compressed_size.py | 10 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/core/pyproxy.c | 1413 | * The purpose of this function is to handle memory management when attaching | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/tests/test_database_driver.py | 335 | # No extra server configuration needed — just pass ssl=True on the client. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | conftest.py | 198 | # Check if user explicitly wants to run long_running tests | STRING |
| LOW | docs/sphinx_pyodide/sphinx_pyodide/util.py | 50 | # Set wrapper to be our fake function | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/tests/test_bump_version.py | 34 | run(["git", "config", "user.email", "test@test.com"], cwd=tmp_path) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/tests/test_pyproxy.py | 294 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/tests/test_pyodide.py | 1950 | def helper(selenium): | STRING |