A debugging and profiling tool that can trace and visualize python code execution
This report summarizes scanner evidence for gaogaotiantian/viztracer, a Python project with 7,754 GitHub stars. SynthScan examined 30,144 lines of code across 118 source files, recording 199 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 8.3 (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? 148 finding(s).
Are imports declared and package/API names verified? 16 finding(s).
Are wrappers, guards, and repeated structures necessary? 90 finding(s).
Which changes need focused human review? 199 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 199 distinct pattern matches across 13 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 |
|---|---|---|---|---|
| HIGH | tests/package_env.py | 94 | except SkipTest: | CODE |
| HIGH | tests/util.py | 38 | except ValueError: | CODE |
| HIGH | tests/__init__.py | 12 | except ImportError: | CODE |
| HIGH | tests/test_regression.py | 76 | except Exception: | CODE |
| HIGH | src/viztracer/patch.py | 115 | except Exception: # pragma: no cover | CODE |
| HIGH | src/viztracer/viztracer.py | 250 | except Exception: # pragma: no cover | CODE |
| HIGH | src/viztracer/report_server.py | 168 | except KeyboardInterrupt: | CODE |
| HIGH | src/viztracer/report_server.py | 106 | except Exception: # pragma: no cover | CODE |
| HIGH | src/viztracer/report_server.py | 122 | except Exception: | CODE |
| HIGH | src/viztracer/report_server.py | 163 | except Exception: | CODE |
| HIGH | src/viztracer/main.py | 935 | except KeyboardInterrupt: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/package_env.py | 53 | CODE | |
| LOW | tests/package_env.py | 86 | CODE | |
| LOW | tests/package_env.py | 87 | CODE | |
| LOW | tests/package_env.py | 88 | CODE | |
| LOW | tests/util.py | 23 | CODE | |
| LOW | tests/test_torch.py | 33 | CODE | |
| LOW | tests/test_torch.py | 87 | CODE | |
| LOW | tests/cmdline_tmpl.py | 33 | CODE | |
| LOW | tests/cmdline_tmpl.py | 101 | CODE | |
| LOW | tests/base_tmpl.py | 98 | CODE | |
| LOW | tests/test_performance.py | 142 | CODE | |
| LOW | tests/test_performance.py | 143 | CODE | |
| LOW | tests/test_performance.py | 144 | CODE | |
| LOW | src/viztracer/report_builder.py | 21 | CODE | |
| LOW | src/viztracer/report_builder.py | 100 | CODE | |
| LOW | src/viztracer/report_builder.py | 182 | CODE | |
| LOW | src/viztracer/report_builder.py | 252 | CODE | |
| LOW | src/viztracer/report_builder.py | 291 | CODE | |
| LOW | src/viztracer/report_builder.py | 322 | CODE | |
| LOW | src/viztracer/patch.py | 23 | CODE | |
| LOW | src/viztracer/patch.py | 156 | CODE | |
| LOW | src/viztracer/patch.py | 34 | CODE | |
| LOW | src/viztracer/patch.py | 105 | CODE | |
| LOW | src/viztracer/viewer.py | 454 | CODE | |
| LOW | src/viztracer/viewer.py | 68 | CODE | |
| LOW | src/viztracer/viewer.py | 302 | CODE | |
| LOW | src/viztracer/viewer.py | 431 | CODE | |
| LOW | src/viztracer/vizplugin.py | 58 | CODE | |
| LOW | src/viztracer/util.py | 119 | CODE | |
| LOW | src/viztracer/util.py | 144 | CODE | |
| LOW | src/viztracer/viztracer.py | 169 | CODE | |
| LOW | src/viztracer/viztracer.py | 475 | CODE | |
| LOW | src/viztracer/viztracer.py | 621 | CODE | |
| LOW | src/viztracer/vizcounter.py | 8 | CODE | |
| LOW | src/viztracer/report_server.py | 114 | CODE | |
| LOW | src/viztracer/functree.py | 48 | CODE | |
| LOW | src/viztracer/event_base.py | 27 | CODE | |
| LOW | src/viztracer/main.py | 386 | CODE | |
| LOW | src/viztracer/main.py | 580 | CODE | |
| LOW | src/viztracer/code_monkey.py | 30 | CODE | |
| LOW | src/viztracer/code_monkey.py | 84 | CODE | |
| LOW | src/viztracer/code_monkey.py | 145 | CODE | |
| LOW | src/viztracer/code_monkey.py | 271 | CODE | |
| LOW | …viztracer/attach_process/add_code_to_python_process.py | 138 | CODE | |
| LOW | …viztracer/attach_process/add_code_to_python_process.py | 264 | CODE | |
| LOW | …viztracer/attach_process/linux_and_mac/lldb_prepare.py | 36 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | example/json/async_simple.json | 1 | {"traceEvents": [{"ph": "M", "pid": 222311, "tid": 222311, "name": "process_name", "args": {"name": "MainProcess"}}, {"p | CODE |
| LOW⚡ | example/json/multithread.json | 1 | {"traceEvents": [{"ph": "M", "pid": 222323, "tid": 222323, "name": "process_name", "args": {"name": "MainProcess"}}, {"p | CODE |
| LOW | example/src/gradient_descent.py | 64 | def calculate_hypothesis_value(example_no, data_set): | CODE |
| LOW | example/src/gradient_descent.py | 77 | def summation_of_cost_derivative(index, end=m): | CODE |
| LOW | tests/test_basic.py | 272 | def test_ignore_function_without_global_tracer(self): | CODE |
| LOW | tests/test_codemonkey.py | 20 | def test_compile_empty_exception(self): | CODE |
| LOW | tests/test_codemonkey.py | 90 | def test_get_assign_log_nodes(self): | CODE |
| LOW | tests/test_report_server.py | 23 | def test_report_server_with_endpoint(self): | CODE |
| LOW | tests/test_report_server.py | 89 | def test_server_shutdown_before_save(self): | STRING |
| LOW | tests/test_report_server.py | 108 | def test_report_server_env_variable(self): | STRING |
| LOW | tests/test_report_server.py | 165 | def test_report_server_devnull_stdin(self): | STRING |
| LOW | tests/test_report_server.py | 193 | def test_invalid_report_server_argument(self): | STRING |
| LOW | tests/test_tracer.py | 154 | def test_include_exclude_exception(self): | CODE |
| LOW | tests/test_multiprocess.py | 364 | def test_subprocess_shell_true(self): | STRING |
| LOW | tests/test_multiprocess.py | 398 | def test_nested_multiprocessing(self): | STRING |
| LOW | tests/test_multiprocess.py | 504 | def test_multiprocessing_forkserver(self): | STRING |
| LOW | tests/test_multiprocess.py | 548 | def test_nested_multiprosessing(self): | STRING |
| LOW | tests/test_multiprocess.py | 563 | def test_multiprocessing_unique_name(self): | STRING |
| LOW | tests/test_multiprocess.py | 588 | def test_multiprocessing_entry_limit(self): | STRING |
| LOW | tests/test_multiprocess.py | 605 | def test_ignore_multiprocessing(self): | STRING |
| LOW | tests/test_multiprocess.py | 626 | def test_multiprocessing_overload(self): | STRING |
| LOW | tests/test_multiprocess.py | 645 | def test_multiprocessing_pool(self): | STRING |
| LOW | tests/test_multiprocess.py | 668 | def test_multiprocessing_pool_with_pickle(self): | STRING |
| LOW | tests/test_multiprocess.py | 683 | def test_multiprosessing_stack_depth(self): | STRING |
| LOW | tests/test_multiprocess.py | 700 | def test_multiprocessing_daemon(self): | STRING |
| LOW | tests/test_multiprocess.py | 730 | def test_multiprocessing_stack_depth(self): | STRING |
| LOW | tests/test_multiprocess.py | 790 | def test_inline_hook_uninstall(self): | STRING |
| LOW | tests/test_multiprocess.py | 814 | def test_inline_hook_uninstall_windows(self): | STRING |
| LOW | tests/test_cmdline.py | 531 | def test_log_func_with_objprint(self): | CODE |
| LOW | tests/test_cmdline.py | 634 | def test_align_combine_sync_marker(self): | STRING |
| LOW | tests/test_cmdline.py | 650 | def expect_aligned_to_sync_marker(data): | STRING |
| LOW | tests/test_cmdline.py | 796 | def test_pid_suffix_and_output(self): | STRING |
| LOW | tests/test_cmdline.py | 1015 | def test_sanitize_function_name(self): | STRING |
| LOW | tests/test_invalid.py | 37 | def test_generate_without_data(self): | CODE |
| LOW | tests/test_invalid.py | 54 | def test_add_invalid_variable(self): | CODE |
| LOW | tests/test_viewer.py | 257 | def test_use_external_processor(self): | CODE |
| LOW | tests/test_viewer.py | 271 | def test_external_processor_version(self): | CODE |
| LOW | tests/test_logsparse.py | 230 | def test_with_disabled_tracer(self): | STRING |
| LOW | tests/test_report_builder.py | 57 | def test_get_source_from_filename(self): | CODE |
| LOW | tests/test_multithread.py | 164 | def test_trace_after_thread_start(self): | STRING |
| LOW | tests/test_regression.py | 604 | def test_child_process_exits_normally(self): | STRING |
| LOW | tests/test_regression.py | 612 | def test_child_process_exits_abnormally(self): | STRING |
| LOW | tests/test_regression.py | 653 | def test_threading_exit_order(self): | STRING |
| LOW | tests/test_regression.py | 676 | def test_thread_exiting_after_finalize(self): | STRING |
| LOW⚡ | tests/data/multithread.json | 1 | {"traceEvents":[{"ph":"M","pid":15853,"tid":15853,"name":"process_name","args":{"name":"MainProcess"}},{"ph":"M","pid":1 | CODE |
| LOW | src/viztracer/viztracer.py | 259 | def clean_report_server_process(self) -> None: | CODE |
| LOW | src/viztracer/main.py | 810 | def _check_attach_availability(self) -> tuple[bool, str | None]: | CODE |
| LOW | src/viztracer/code_monkey.py | 123 | def get_assign_targets_with_attr(self, node: ast.AST) -> list[ast.Attribute]: | CODE |
| LOW | src/viztracer/code_monkey.py | 206 | def get_instrument_node_by_node( | CODE |
| LOW | src/viztracer/code_monkey.py | 360 | def inline_transform_condition(self, re_match: re.Match) -> str: | CODE |
| LOW | src/viztracer/web_dist/service_worker.js | 221 | async function installAppVersionIntoCache(version) { | CODE |
| LOW | …viztracer/attach_process/add_code_to_python_process.py | 342 | def _win_write_to_shared_named_memory(python_code, pid): | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | example/json/async_simple.json | 1 | {"traceEvents": [{"ph": "M", "pid": 222311, "tid": 222311, "name": "process_name", "args": {"name": "MainProcess"}}, {"p | CODE |
| MEDIUM⚡ | example/json/async_simple.json | 1 | {"traceEvents": [{"ph": "M", "pid": 222311, "tid": 222311, "name": "process_name", "args": {"name": "MainProcess"}}, {"p | CODE |
| MEDIUM⚡ | example/json/multithread.json | 1 | {"traceEvents": [{"ph": "M", "pid": 222323, "tid": 222323, "name": "process_name", "args": {"name": "MainProcess"}}, {"p | CODE |
| MEDIUM⚡ | example/json/multithread.json | 1 | {"traceEvents": [{"ph": "M", "pid": 222323, "tid": 222323, "name": "process_name", "args": {"name": "MainProcess"}}, {"p | CODE |
| MEDIUM⚡ | tests/data/multithread.json | 1 | {"traceEvents":[{"ph":"M","pid":15853,"tid":15853,"name":"process_name","args":{"name":"MainProcess"}},{"ph":"M","pid":1 | CODE |
| MEDIUM⚡ | tests/data/multithread.json | 1 | {"traceEvents":[{"ph":"M","pid":15853,"tid":15853,"name":"process_name","args":{"name":"MainProcess"}},{"ph":"M","pid":1 | CODE |
| MEDIUM | …viztracer/attach_process/linux_and_mac/lldb_prepare.py | 1 | # This file is meant to be run inside lldb | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/modules/__init__.py | 1 | # Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 | COMMENT |
| LOW | docs/source/conf.py | 1 | # Configuration file for the Sphinx documentation builder. | COMMENT |
| LOW | docs/source/conf.py | 41 | # Add any Sphinx extension module names here, as strings. They can be | COMMENT |
| LOW | src/viztracer/web_dist/service_worker.js | 1 | var service_worker = (function () { | COMMENT |
| LOW | src/viztracer/web_dist/service_worker.js | 21 | const CACHE_NAME = 'ui-perfetto-dev'; | COMMENT |
| LOW | src/viztracer/web_dist/service_worker.js | 161 | if (cachedRes) { | COMMENT |
| LOW | src/viztracer/web_dist/service_worker.js | 181 | // - The SW intercepts the GET request and returns the file previosly stored in | COMMENT |
| LOW | src/viztracer/modules/snaptrace.c | 1 | // Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 | COMMENT |
| LOW | src/viztracer/modules/pythoncapi_compat.h | 1 | // Header file providing new C API functions to old Python versions. | COMMENT |
| LOW | src/viztracer/modules/pythoncapi_compat.h | 21 | #include <Python.h> | COMMENT |
| LOW | src/viztracer/modules/pythoncapi_compat.h | 101 | PyObject **_tmp_dst_ptr = _Py_CAST(PyObject**, &(dst)); \ | COMMENT |
| LOW | src/viztracer/modules/pythoncapi_compat.h | 541 | COMMENT | |
| LOW | src/viztracer/modules/pythoncapi_compat.h | 861 | // gh-108014 added Py_IsFinalizing() to Python 3.13.0a1 | COMMENT |
| LOW | src/viztracer/modules/pythoncapi_compat.h | 1201 | #endif | COMMENT |
| LOW | src/viztracer/modules/pythoncapi_compat.h | 1221 | #if PY_VERSION_HEX < 0x030D00A6 && !defined(Py_CONSTANT_NONE) | COMMENT |
| LOW | src/viztracer/modules/quicktime.c | 1 | // Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 | COMMENT |
| LOW | src/viztracer/modules/snaptrace.h | 1 | // Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 | COMMENT |
| LOW | src/viztracer/modules/snaptrace.h | 21 | // SNAPTRACE_THREAD_PROTECT_START. | COMMENT |
| LOW | src/viztracer/modules/snaptrace.h | 41 | #define PY_MONITORING_EVENT_BRANCH 8 | COMMENT |
| LOW | src/viztracer/modules/quicktime.h | 1 | // Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 | COMMENT |
| LOW | src/viztracer/modules/quicktime.h | 21 | #define QUICKTIME_RDTSC | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_codemonkey.py | 25 | except Exception as e: | STRING |
| LOW | tests/test_multiprocess.py | 341 | except Exception: | CODE |
| LOW | tests/test_multiprocess.py | 662 | except Exception as e: | STRING |
| LOW | tests/test_cmdline.py | 122 | except Exception: | CODE |
| LOW | tests/test_viewer.py | 156 | except Exception: | CODE |
| LOW | tests/test_logsparse.py | 264 | except Exception as e: | STRING |
| LOW | tests/test_report_builder.py | 194 | except Exception as e: | CODE |
| LOW | tests/test_regression.py | 76 | except Exception: | CODE |
| LOW | src/viztracer/report_builder.py | 249 | except Exception: | CODE |
| LOW | src/viztracer/patch.py | 115 | except Exception: # pragma: no cover | CODE |
| LOW | src/viztracer/viewer.py | 295 | except Exception: | CODE |
| MEDIUM | src/viztracer/viewer.py | 292 | def run(self) -> None: | CODE |
| LOW | src/viztracer/util.py | 51 | except Exception: # pragma: no cover | CODE |
| LOW | src/viztracer/viztracer.py | 250 | except Exception: # pragma: no cover | CODE |
| LOW | src/viztracer/viztracer.py | 538 | except Exception as exc: | CODE |
| LOW | src/viztracer/report_server.py | 106 | except Exception: # pragma: no cover | CODE |
| LOW | src/viztracer/report_server.py | 122 | except Exception: | CODE |
| LOW | src/viztracer/report_server.py | 163 | except Exception: | CODE |
| LOW | src/viztracer/report_server.py | 186 | except Exception as exc: # pragma: no cover | CODE |
| MEDIUM | …viztracer/attach_process/add_code_to_python_process.py | 202 | print('Error listing dir: %s' % (libdir,)) | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | example/src/mcts_game.py | 1 | CODE | |
| LOW | tests/__init__.py | 5 | CODE | |
| LOW | tests/test_tracer.py | 186 | CODE | |
| LOW | tests/test_patch.py | 8 | CODE | |
| LOW | docs/source/conf.py | 13 | CODE | |
| LOW | src/viztracer/patch.py | 4 | CODE | |
| LOW | src/viztracer/vizevent.py | 8 | CODE | |
| LOW | src/viztracer/vizplugin.py | 13 | CODE | |
| LOW | src/viztracer/viztracer.py | 156 | CODE | |
| LOW | src/viztracer/__init__.py | 7 | CODE | |
| LOW | src/viztracer/__init__.py | 8 | CODE | |
| LOW | src/viztracer/__init__.py | 8 | CODE | |
| LOW | src/viztracer/__init__.py | 8 | CODE | |
| LOW | src/viztracer/__init__.py | 9 | CODE | |
| LOW | src/viztracer/__init__.py | 9 | CODE | |
| LOW | src/viztracer/main.py | 505 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | example/json/async_simple.json | 1 | {"traceEvents": [{"ph": "M", "pid": 222311, "tid": 222311, "name": "process_name", "args": {"name": "MainProcess"}}, {"p | CODE |
| LOW⚡ | example/json/async_simple.json | 1 | {"traceEvents": [{"ph": "M", "pid": 222311, "tid": 222311, "name": "process_name", "args": {"name": "MainProcess"}}, {"p | CODE |
| LOW⚡ | example/json/multithread.json | 1 | {"traceEvents": [{"ph": "M", "pid": 222323, "tid": 222323, "name": "process_name", "args": {"name": "MainProcess"}}, {"p | CODE |
| LOW⚡ | tests/data/multithread.json | 1 | {"traceEvents":[{"ph":"M","pid":15853,"tid":15853,"name":"process_name","args":{"name":"MainProcess"}},{"ph":"M","pid":1 | CODE |
| LOW | src/viztracer/report_builder.py | 38 | # before that they simply use the absolute timestamp which is | COMMENT |
| MEDIUM | src/viztracer/web_dist/v52.0-6b9586def/stdlib_docs.json | 1 | [{"name": "android", "modules": [{"module_name": "android.app_process_starts", "data_objects": [{"name": "android_app_pr | CODE |
| LOW | …viztracer/attach_process/add_code_to_python_process.py | 152 | # For other platforms, just use the the same bitness of the process we're running in. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | example/json/async_simple.json | 1 | {"traceEvents": [{"ph": "M", "pid": 222311, "tid": 222311, "name": "process_name", "args": {"name": "MainProcess"}}, {"p | CODE |
| LOW⚡ | example/json/multithread.json | 1 | {"traceEvents": [{"ph": "M", "pid": 222323, "tid": 222323, "name": "process_name", "args": {"name": "MainProcess"}}, {"p | CODE |
| LOW⚡ | tests/data/multithread.json | 1 | {"traceEvents":[{"ph":"M","pid":15853,"tid":15853,"name":"process_name","args":{"name":"MainProcess"}},{"ph":"M","pid":1 | CODE |
| MEDIUM | src/viztracer/web_dist/v52.0-6b9586def/engine_bundle.js | 1 | var engine=function(){"use strict";function L(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default | CODE |
| LOW | src/viztracer/web_dist/v52.0-6b9586def/engine_bundle.js | 1 | var engine=function(){"use strict";function L(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default | CODE |
| MEDIUM | …viztracer/web_dist/v52.0-6b9586def/traceconv_bundle.js | 1 | var traceconv=function(){"use strict";function L(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"defa | CODE |
| LOW | …viztracer/web_dist/v52.0-6b9586def/traceconv_bundle.js | 1 | var traceconv=function(){"use strict";function L(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"defa | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/viztracer/patch.py | 313 | def set_tracer(self, tracer: VizTracer | None) -> None: | STRING |
| LOW | src/viztracer/util.py | 65 | def set_same_line_print_end(end: str) -> None: | CODE |
| LOW | src/viztracer/viztracer.py | 322 | def set_afterfork(self, callback: Callable, *args, **kwargs) -> None: | CODE |
| LOW | src/viztracer/__init__.py | 11 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | example/json/async_simple.json | 1 | {"traceEvents": [{"ph": "M", "pid": 222311, "tid": 222311, "name": "process_name", "args": {"name": "MainProcess"}}, {"p | CODE |
| LOW⚡ | example/json/async_simple.json | 1 | {"traceEvents": [{"ph": "M", "pid": 222311, "tid": 222311, "name": "process_name", "args": {"name": "MainProcess"}}, {"p | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_basic.py | 294 | def my_function(n): | CODE |
| LOW | tests/test_multiprocess.py | 249 | def my_function(*args): | CODE |
| LOW | tests/test_regression.py | 296 | def my_function(*args): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/cmdline_tmpl.py | 101 | CODE | |
| LOW | src/viztracer/patch.py | 240 | CODE | |
| LOW | src/viztracer/viztracer.py | 34 | CODE |