wafer-core 0.1.30__tar.gz → 0.1.32__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {wafer_core-0.1.30 → wafer_core-0.1.32}/PKG-INFO +1 -1
- {wafer_core-0.1.30 → wafer_core-0.1.32}/pyproject.toml +5 -2
- {wafer_core-0.1.30 → wafer_core-0.1.32}/pyproject.toml.bak +4 -1
- wafer_core-0.1.32/tests/test_reward_hack_defenses.py +185 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/trace_compare/test_trace_compare_correctness.py +21 -9
- wafer_core-0.1.32/wafer_core/tools/dispatch_baseline/__init__.py +73 -0
- wafer_core-0.1.32/wafer_core/tools/dispatch_baseline/analyzer.py +174 -0
- wafer_core-0.1.32/wafer_core/tools/dispatch_baseline/client.py +196 -0
- wafer_core-0.1.32/wafer_core/tools/dispatch_baseline/codegen.py +246 -0
- wafer_core-0.1.32/wafer_core/tools/dispatch_baseline/dtypes.py +217 -0
- wafer_core-0.1.32/wafer_core/tools/dispatch_baseline/executor.py +360 -0
- wafer_core-0.1.32/wafer_core/tools/dispatch_baseline/roofline.py +165 -0
- wafer_core-0.1.32/wafer_core/utils/kernel_utils/defense.py +1347 -0
- wafer_core-0.1.32/wafer_core/utils/kernel_utils/test_reward_hacks.py +140 -0
- wafer_core-0.1.30/wafer_core/utils/kernel_utils/defense.py +0 -545
- {wafer_core-0.1.30 → wafer_core-0.1.32}/.gitignore +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/README.md +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/run_cuda_grep.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/test_gpu_e2e.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/perfetto/README.md +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/perfetto/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/perfetto/test_perfetto_integration.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/perfetto/test_perfetto_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/perfetto/test_trace_manager.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/perfetto/test_trace_processor.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/test_async_ssh_upload.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/test_capture_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/test_config.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/test_eval_interrupt_resume.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/test_isa_analysis_tools.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/test_kernel_scope.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/test_nested_progress.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/test_rocprof_tools.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/test_rocprofiler_compute.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/test_roofline.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/test_sandbox.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/test_tracelens_tools.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/trace_compare/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/trace_compare/benchmark_trace_compare.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/trace_compare/expected_output_amd_llama.json +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/trace_compare/generate_golden_file.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/tracelens/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/tests/tracelens/test_finder.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/uv.lock +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/async_ssh.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/auth.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/config/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/config/loader.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/config/schema.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/environments/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/environments/coding.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/environments/gpumode.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/gpu.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/gpu_detect.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/kernel_scope/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/kernel_scope/amdgcn/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/kernel_scope/amdgcn/analyzer.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/kernel_scope/amdgcn/instruction_db.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/kernel_scope/amdgcn/parser.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/kernel_scope/amdgcn/types.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/kernel_scope/api.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/kernel_scope/correlation/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/kernel_scope/correlation/mapper.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/kernel_scope/llvm_ir/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/kernel_scope/llvm_ir/analyzer.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/kernel_scope/llvm_ir/parser.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/kernel_scope/llvm_ir/types.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/kernel_scope/metrics/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/kernel_scope/metrics/occupancy.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/kernel_scope/targets/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/kernel_scope/targets/specs.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/kernel_scope/ttgir/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/kernel_scope/ttgir/analyzer.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/kernel_scope/ttgir/parser.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/kernel_scope/ttgir/types.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/nsys/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/nsys/analysis.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/nsys/discovery.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/nsys/export.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/nsys/extraction.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/nsys/main.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/nsys/parsing.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/perfetto/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/perfetto/build_trace_processor.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/perfetto/perfetto_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/perfetto/trace_manager.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/perfetto/trace_processor.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/analyzer.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/finder.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/VERSION +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/__main__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/analysis_base.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/analysis_webui.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/default.css +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/favicon.ico +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/css/font-awesome.css +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/css/font-awesome.min.css +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/fonts/FontAwesome.otf +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/fonts/fontawesome-webfont.eot +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/fonts/fontawesome-webfont.svg +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/fonts/fontawesome-webfont.woff +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/less/bordered-pulled.less +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/less/core.less +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/less/fixed-width.less +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/less/font-awesome.less +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/less/icons.less +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/less/larger.less +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/less/list.less +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/less/mixins.less +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/less/path.less +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/less/rotated-flipped.less +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/less/spinning.less +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/less/stacked.less +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/less/variables.less +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/scss/_bordered-pulled.scss +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/scss/_core.scss +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/scss/_fixed-width.scss +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/scss/_icons.scss +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/scss/_larger.scss +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/scss/_list.scss +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/scss/_mixins.scss +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/scss/_path.scss +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/scss/_rotated-flipped.scss +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/scss/_spinning.scss +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/scss/_stacked.scss +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/scss/_variables.scss +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/font-awesome/scss/font-awesome.scss +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fontello/css/animation.css +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fontello/css/fontello-codes.css +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fontello/css/fontello-embedded.css +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fontello/css/fontello-ie7-codes.css +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fontello/css/fontello-ie7.css +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fontello/css/fontello.css +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fontello/font/fontello.eot +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fontello/font/fontello.svg +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fontello/font/fontello.ttf +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fontello/font/fontello.woff +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/librebaskerville/librebaskerville-bold-webfont.eot +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/librebaskerville/librebaskerville-bold-webfont.svg +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/librebaskerville/librebaskerville-bold-webfont.ttf +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/librebaskerville/librebaskerville-bold-webfont.woff +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/librebaskerville/librebaskerville-italic-webfont.eot +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/librebaskerville/librebaskerville-italic-webfont.svg +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/librebaskerville/librebaskerville-italic-webfont.ttf +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/librebaskerville/librebaskerville-italic-webfont.woff +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/librebaskerville/librebaskerville-regular-webfont.eot +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/librebaskerville/librebaskerville-regular-webfont.svg +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/librebaskerville/librebaskerville-regular-webfont.ttf +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/librebaskerville/librebaskerville-regular-webfont.woff +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-Bold-webfont.eot +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-Bold-webfont.svg +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-Bold-webfont.ttf +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-Bold-webfont.woff +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-BoldItalic-webfont.eot +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-BoldItalic-webfont.svg +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-BoldItalic-webfont.ttf +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-BoldItalic-webfont.woff +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-ExtraBold-webfont.eot +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-ExtraBold-webfont.svg +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-ExtraBold-webfont.ttf +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-ExtraBold-webfont.woff +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.eot +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.svg +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.ttf +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-ExtraBoldItalic-webfont.woff +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-Italic-webfont.eot +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-Italic-webfont.svg +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-Italic-webfont.ttf +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-Italic-webfont.woff +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-Light-webfont.eot +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-Light-webfont.svg +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-Light-webfont.ttf +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-Light-webfont.woff +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-LightItalic-webfont.eot +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-LightItalic-webfont.svg +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-LightItalic-webfont.ttf +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-LightItalic-webfont.woff +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-Regular-webfont.eot +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-Regular-webfont.svg +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-Regular-webfont.ttf +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-Regular-webfont.woff +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-Semibold-webfont.eot +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-Semibold-webfont.svg +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-Semibold-webfont.ttf +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-Semibold-webfont.woff +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.eot +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.svg +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.ttf +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts/opensans/OpenSans-SemiboldItalic-webfont.woff +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/fonts.css +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/layout.css +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/magnific-popup.css +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/assets/media-queries.css +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/config.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/launcher.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx908/0000_top_stats.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx908/0100_system_info.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx908/0200_system-speed-of-light.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx908/0300_mem_chart.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx908/0500_command-processor.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx908/0600_shader-processor-input.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx908/0700_wavefront-launch.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx908/1000_compute-unit-instruction-mix.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx908/1100_compute-unit-compute-pipeline.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx908/1200_lds.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx908/1300_instruction-cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx908/1400_constant-cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx908/1500_TA_and_TD.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx908/1600_L1_cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx908/1700_L2_cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx908/1800_L2_cache_per_channel.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx908/2100_pc_sampling.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx90a/0000_top_stats.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx90a/0100_system_info.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx90a/0200_system-speed-of-light.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx90a/0300_mem_chart.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx90a/0400_roofline_info.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx90a/0500_command-processor.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx90a/0600_shader-processor-input.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx90a/0700_wavefront-launch.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx90a/1000_compute-unit-instruction-mix.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx90a/1100_compute-unit-compute-pipeline.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx90a/1200_lds.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx90a/1300_instruction-cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx90a/1400_constant-cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx90a/1500_TA_and_TD.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx90a/1600_L1_cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx90a/1700_L2_cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx90a/1800_L2_cache_per_channel.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx90a/2100_pc_sampling.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx940/0000_top_stats.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx940/0100_system_info.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx940/0200_system-speed-of-light.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx940/0300_mem_chart.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx940/0400_roofline_info.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx940/0500_command-processor.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx940/0600_shader-processor-input.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx940/0700_wavefront-launch.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx940/1000_compute-unit-instruction-mix.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx940/1100_compute-unit-compute-pipeline.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx940/1200_lds.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx940/1300_instruction-cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx940/1400_constant-cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx940/1500_TA_and_TD.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx940/1600_L1_cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx940/1700_L2_cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx940/1800_L2_cache_per_channel.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx940/2100_pc_sampling.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx941/0000_top_stats.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx941/0100_system_info.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx941/0200_system-speed-of-light.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx941/0300_mem_chart.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx941/0400_roofline_info.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx941/0500_command-processor.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx941/0600_shader-processor-input.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx941/0700_wavefront-launch.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx941/1000_compute-unit-instruction-mix.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx941/1100_compute-unit-compute-pipeline.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx941/1200_lds.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx941/1300_instruction-cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx941/1400_constant-cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx941/1500_TA_and_TD.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx941/1600_L1_cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx941/1700_L2_cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx941/1800_L2_cache_per_channel.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx941/2100_pc_sampling.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx942/0000_top_stats.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx942/0100_system_info.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx942/0200_system-speed-of-light.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx942/0300_mem_chart.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx942/0400_roofline_info.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx942/0500_command-processor.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx942/0600_shader-processor-input.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx942/0700_wavefront-launch.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx942/1000_compute-unit-instruction-mix.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx942/1100_compute-unit-compute-pipeline.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx942/1200_lds.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx942/1300_instruction-cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx942/1400_constant-cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx942/1500_TA_and_TD.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx942/1600_L1_cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx942/1700_L2_cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx942/1800_L2_cache_per_channel.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx942/2100_pc_sampling.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx950/0000_top_stats.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx950/0100_system_info.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx950/0200_system-speed-of-light.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx950/0300_mem_chart.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx950/0400_roofline_info.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx950/0500_command-processor.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx950/0600_shader-processor-input.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx950/0700_wavefront-launch.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx950/1000_compute-unit-instruction-mix.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx950/1100_compute-unit-compute-pipeline.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx950/1200_lds.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx950/1300_instruction-cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx950/1400_constant-cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx950/1500_TA_and_TD.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx950/1600_L1_cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx950/1700_L2_cache.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx950/1800_L2_cache_per_channel.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/gfx950/2100_pc_sampling.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/analysis_configs/panel_config_template.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/soc_base.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/soc_gfx908.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/soc_gfx90a.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/soc_gfx940.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/soc_gfx941.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/soc_gfx942.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/rocprof_compute_soc/soc_gfx950.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/utils/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/utils/db_connector.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/utils/file_io.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/utils/gui.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/utils/gui_components/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/utils/gui_components/header.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/utils/gui_components/memchart.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/utils/kernel_name_shortener.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/utils/logger.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/utils/mem_chart.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/utils/mi_gpu_spec.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/utils/mi_gpu_spec.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/utils/parser.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/utils/roofline.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/utils/roofline_calc.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/utils/schema.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/utils/specs.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/utils/tty.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui/utils/utils.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/gui_server.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/profiler.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/compute/types.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/sdk/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/sdk/analyzer.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/sdk/finder.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/sdk/parser.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/sdk/profiler.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/sdk/types.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/systems/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/systems/avail/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/systems/avail/query.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/systems/finder.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/systems/instrument/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/systems/instrument/profiler.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/systems/parsers/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/systems/parsers/json_parser.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/systems/parsers/text_parser.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/systems/run/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/systems/run/analyzer.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/systems/run/profiler.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/systems/sample/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/systems/sample/profiler.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/rocprofiler/systems/types.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/trace_compare/PERFORMANCE.md +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/trace_compare/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/trace_compare/aligner.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/trace_compare/analyzer.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/trace_compare/api.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/trace_compare/architecture.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/trace_compare/classifier.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/trace_compare/formatter.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/trace_compare/fusion_analyzer.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/trace_compare/kernel_registry.yaml +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/trace_compare/layer_segmentation.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/trace_compare/loader.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/trace_compare/same_kernel_analyzer.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/trace_compare/warnings.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/tracelens/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/tracelens/comparator.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/tracelens/finder.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/tracelens/report_generator.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/lib/tracelens/types.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/logging/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/logging/bridge.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/logging/color_formatter.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/logging/json_formatter.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/logging/logging_config.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/problem_config.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/remote_env.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/remote_jobs.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/retry.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/__main__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/_logging/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/_logging/color_formatter.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/_logging/json_formatter.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/_logging/logging_config.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/_rate_limit.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/_retry.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/agent_presets/README.md +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/agent_presets/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/agent_presets/base_preset.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/agent_presets/gpt_5_1_codex_04_04.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/agent_presets/gpt_5_2_03_03.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/agent_presets/loader.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/agent_presets/opus_4_01_01.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/agent_presets/rlm_01_01.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/agent_presets/sonnet_4_02_02.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/agent_presets/sonnet_4_subagent_03_02.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/agents.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/cli.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/cli_agents.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/config/README.md +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/config/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/config/base.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/config/loader.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/config/protocols.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/datasets/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/datasets/lichess_puzzles.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/deploy.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/docs/ASYNC_RUNTIME.md +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/dtypes.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/environments/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/environments/_formatting.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/environments/_subprocess.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/environments/ask_user.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/environments/base.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/environments/binary_search.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/environments/browsing.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/environments/calculator.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/environments/chess_puzzle.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/environments/compose.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/environments/cuda_grep.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/environments/git_worktree.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/environments/handoff.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/environments/localfs.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/environments/no_tools.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/environments/oracle.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/environments/repl.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/environments/screenspot.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/environments/swe_grep.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/environments/terminal_bench.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/eval_helpers.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/evaluation.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/events.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/examples/eval/cuda_grep/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/examples/eval/cuda_grep/config_all_tools.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/examples/eval/cuda_grep/config_grep_glob.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/examples/eval/cuda_grep/config_search_only.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/examples/eval/cuda_grep/cuda_questions.jsonl +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/examples/eval/cuda_grep/eval_cuda_grep.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/examples/eval/cuda_grep/scoring.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/export.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/feedback.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/fingerprint.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontend/DESIGN.md +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontend/README.md +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontend/REFACTOR_PLAN.md +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontend/UI_IMPROVEMENTS.md +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontend/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontend/__main__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontend/dev.sh +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontend/index.html +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontend/index_old.html +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontend/run.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontend/server.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/headless_json.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/json_frontend.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/none.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/protocol.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/runner.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/textual_frontend.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/INTEGRATION.md +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/README.md +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/REFACTOR_DESIGN.md +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/TUI_TODO.md +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/agent_renderer.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/components/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/components/assistant_message.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/components/error_display.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/components/input.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/components/loader.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/components/loader_container.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/components/markdown.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/components/question_selector.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/components/spacer.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/components/status_line.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/components/system_message.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/components/text.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/components/tool_execution.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/components/user_message.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/control_flow_types.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/demo.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/example_usage.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/interactive_agent.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/oauth.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/slash_commands.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/terminal.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/test_rendering.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/theme.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/tui.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui/utils.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/frontends/tui_frontend.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/import_cc.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/inference/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/inference/attention/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/inference/attention/config.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/inference/attention/example.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/inference/attention/flex_backend.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/inference/attention/layer.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/inference/attention/mask.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/inference/attention/protocol.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/inference/backends/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/inference/backends/generate.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/inference/backends/tokenize.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/inference/cache/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/inference/cache/paged.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/inference/cache/protocol.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/inference/cache/radix.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/inference/context.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/inference/engine.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/inference/sampling.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/inference/scheduler.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/inference/testing.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/inference/types.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/integrations/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/logging_utils.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/models.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/paths.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/pipeline.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/progress.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/progress_display.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/prompt.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/prompt_optimization/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/prompt_optimization/adapter.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/prompt_optimization/adapters/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/prompt_optimization/adapters/system_prompt.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/prompt_optimization/adapters/system_user_prompt.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/prompt_optimization/adapters/terminal_bench.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/prompt_optimization/evaluation.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/prompt_optimization/evolutionary.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/prompt_optimization/formatting.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/prompt_optimization/operations.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/prompt_optimization/reflective.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/prompt_optimization/state.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/prompt_optimization/types.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/providers/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/providers/anthropic.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/providers/base.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/providers/google.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/providers/openai_completions.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/providers/openai_responses.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/providers/sglang.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/providers.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/remote.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/scoring.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/search.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/skills.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/slice.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/store.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/templates/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/templates/base.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/templates/loader.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tests/test_slice.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/decorator.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/analysis_tools.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/config.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/configs/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/configs/qwen3_0_6b.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/configs/qwen3_next_80b.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/debug_mask.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/debug_qwen.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/debug_qwen3_next.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/debug_sdpa.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/debug_swa.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/debug_toolkit.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/debug_with_tools.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/explore_gemma.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/explore_qwen.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/explore_qwen3_dense.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/explore_qwen3_next.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/llama_functional.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/qwen3_next_functional.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/qwen_functional.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/test_llama.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/test_qwen.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/test_template.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/tools.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/trace_hf.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/functional_extractor/verify.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tools/oracle.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/agent_integration.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/backends/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/backends/fsdp.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/backends/jax_backend.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/backends/protocol.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/backends/pytorch.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/backends/pytorch_factory.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/backends/torch_func.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/backends/torchax_backend.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/datasets/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/datasets/data_buffer.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/datasets/dataset_loaders.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/datasets/sft.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/distributed_utils.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/filters.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/grpo.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/loops/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/loops/rl_loop.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/loops/sft_loop.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/losses.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/metrics.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/rollout_gen/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/rollout_gen/async_rollout_manager.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/rollout_gen/rollout_generation.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/rollout_gen/rollout_manager.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/types.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/weight_sync.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/training/worker.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/transform_messages.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tui/DESIGN.md +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tui/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tui/__main__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tui/demo.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tui/monitor.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tui/remote_runner.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tui/terminal.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/tui/traces.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/rollouts/upload.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/roofline/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/roofline/analysis.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/roofline/gpu_specs.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/sandbox/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/sandbox/executor.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/sandbox/landlock.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/sandbox/policy.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/sandbox/seatbelt.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/sessions/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/sessions/agent.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/sessions/dtypes.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/sessions/hooks.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/ssh.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/targets/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/targets/digitalocean.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/targets/pool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/targets/probe.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/targets/providers/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/targets/providers/baremetal.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/targets/providers/digitalocean.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/targets/providers/runpod.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/targets/reconcile.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/targets/runpod.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/targets/spec_store.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/targets/state_cache.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/targets/types.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/autotuner/BENCHMARKING.md +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/autotuner/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/autotuner/aggregation.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/autotuner/core.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/autotuner/dtypes.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/autotuner/metrics.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/autotuner/scoring.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/autotuner/search.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/autotuner/storage.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/autotuner/streaming.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/autotuner/tests/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/autotuner/tests/test_autotuner.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/bash_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/capture_tool/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/capture_tool/artifacts.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/capture_tool/context.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/capture_tool/core.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/capture_tool/dtypes.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/capture_tool/executor.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/capture_tool/metrics.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/file_tools/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/file_tools/edit_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/file_tools/glob_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/file_tools/grep_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/file_tools/read_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/file_tools/utils.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/file_tools/write_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/glob_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/grep_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/isa_analysis_tools/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/isa_analysis_tools/isa_analysis_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/isa_analysis_tools/types.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/nsys_tools/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/nsys_tools/discovery.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/nsys_tools/models.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/nsys_tools/parser.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/rocprof_compute_tools/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/rocprof_compute_tools/rocprof_compute_analyze_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/rocprof_compute_tools/rocprof_compute_profile_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/rocprof_sdk_tools/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/rocprof_sdk_tools/rocprof_sdk_analyze_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/rocprof_sdk_tools/rocprof_sdk_profile_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/rocprof_systems_tools/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/rocprof_systems_tools/rocprof_systems_instrument_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/rocprof_systems_tools/rocprof_systems_profile_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/rocprof_systems_tools/rocprof_systems_query_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/rocprof_systems_tools/rocprof_systems_sample_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/skill_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/tracelens_tools/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/tracelens_tools/tracelens_collective_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/tracelens_tools/tracelens_compare_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/tracelens_tools/tracelens_report_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/wafer_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/tools/write_kernel_tool.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/backend.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/code_validation.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/environment_serialization.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/event_streaming.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/exceptions.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/execution_types.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/gpu_environment_utils.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/kernel_utils/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/kernel_utils/backends.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/kernel_utils/deployment.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/kernel_utils/evaluate.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/kernel_utils/gpu_validation.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/kernel_utils/reference_cache.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/kernel_utils/results.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/kernel_utils/static_checker.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/kernel_utils/targets/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/kernel_utils/targets/config.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/kernel_utils/targets/execution.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/kernel_utils/targets/selection.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/kernel_utils/task.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/kernel_utils/utils.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/modal_execution/__init__.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/modal_execution/modal_app.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/modal_execution/modal_config.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/modal_execution/modal_execution.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/modal_execution/test_modal.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/ncu_profile_tools.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/path_utils.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/remote_execution.py +0 -0
- {wafer_core-0.1.30 → wafer_core-0.1.32}/wafer_core/utils/submission_selection.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "wafer-core"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.32"
|
|
4
4
|
description = "Core utilities and environments for Wafer GPU kernel optimization"
|
|
5
5
|
requires-python = ">=3.10"
|
|
6
6
|
dependencies = [
|
|
@@ -100,13 +100,16 @@ ignore = [
|
|
|
100
100
|
]
|
|
101
101
|
|
|
102
102
|
[tool.ruff.lint.per-file-ignores]
|
|
103
|
-
"tests/**/*.py" = ["ANN201"] # Don't require return type annotations in tests
|
|
103
|
+
"tests/**/*.py" = ["ANN201", "ANN202"] # Don't require return type annotations in tests
|
|
104
104
|
"wafer_core/utils/modal_execution/*.py" = ["PLR0913"] # Modal RPC functions have many parameters
|
|
105
105
|
"wafer_core/utils/kernel_utils/targets/execution.py" = ["PLR0915"] # run_operation_on_target has Modal+SSH paths (71 statements)
|
|
106
106
|
"wafer_core/environments/gpumode.py" = ["ANN401"] # Environment.exec_tool uses Any for rollouts compatibility
|
|
107
107
|
"wafer_core/rollouts/providers/anthropic.py" = ["PLR0915", "PLR1702", "TRY002", "TRY004"] # Complex provider with streaming, retry logic, and try/finally cleanup
|
|
108
108
|
"wafer_core/sandbox/*.py" = ["ASYNC109", "ASYNC240"] # Sandbox uses subprocess timeout (not trio.fail_after) intentionally
|
|
109
109
|
"wafer_core/tools/bash_tool.py" = ["ASYNC109", "ASYNC221"] # Bash tool uses subprocess with timeout
|
|
110
|
+
"wafer_core/utils/kernel_utils/defense.py" = ["ANN002", "ANN003", "ANN202", "PLR0913"] # Defense functions use *args/**kwargs passthrough and have many config params
|
|
111
|
+
"wafer_core/utils/kernel_utils/test_reward_hacks.py" = ["ANN"] # Test fixture file, annotations add noise
|
|
112
|
+
"tests/test_reward_hack_defenses.py" = ["ANN001"] # Parametrized test args don't need annotations
|
|
110
113
|
|
|
111
114
|
[tool.ruff.lint.pylint]
|
|
112
115
|
max-args = 7 # Max function arguments (Tiger Style: few parameters)
|
|
@@ -100,13 +100,16 @@ ignore = [
|
|
|
100
100
|
]
|
|
101
101
|
|
|
102
102
|
[tool.ruff.lint.per-file-ignores]
|
|
103
|
-
"tests/**/*.py" = ["ANN201"] # Don't require return type annotations in tests
|
|
103
|
+
"tests/**/*.py" = ["ANN201", "ANN202"] # Don't require return type annotations in tests
|
|
104
104
|
"wafer_core/utils/modal_execution/*.py" = ["PLR0913"] # Modal RPC functions have many parameters
|
|
105
105
|
"wafer_core/utils/kernel_utils/targets/execution.py" = ["PLR0915"] # run_operation_on_target has Modal+SSH paths (71 statements)
|
|
106
106
|
"wafer_core/environments/gpumode.py" = ["ANN401"] # Environment.exec_tool uses Any for rollouts compatibility
|
|
107
107
|
"wafer_core/rollouts/providers/anthropic.py" = ["PLR0915", "PLR1702", "TRY002", "TRY004"] # Complex provider with streaming, retry logic, and try/finally cleanup
|
|
108
108
|
"wafer_core/sandbox/*.py" = ["ASYNC109", "ASYNC240"] # Sandbox uses subprocess timeout (not trio.fail_after) intentionally
|
|
109
109
|
"wafer_core/tools/bash_tool.py" = ["ASYNC109", "ASYNC221"] # Bash tool uses subprocess with timeout
|
|
110
|
+
"wafer_core/utils/kernel_utils/defense.py" = ["ANN002", "ANN003", "ANN202", "PLR0913"] # Defense functions use *args/**kwargs passthrough and have many config params
|
|
111
|
+
"wafer_core/utils/kernel_utils/test_reward_hacks.py" = ["ANN"] # Test fixture file, annotations add noise
|
|
112
|
+
"tests/test_reward_hack_defenses.py" = ["ANN001"] # Parametrized test args don't need annotations
|
|
110
113
|
|
|
111
114
|
[tool.ruff.lint.pylint]
|
|
112
115
|
max-args = 7 # Max function arguments (Tiger Style: few parameters)
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Integration tests for reward hack defenses.
|
|
3
|
+
|
|
4
|
+
Tests the two cut points:
|
|
5
|
+
1. validate_kernel_static() - catches hacks in source code
|
|
6
|
+
2. run_all_defenses_extended() - catches hacks at runtime
|
|
7
|
+
|
|
8
|
+
Each test runs a known attack through the full defense pipeline.
|
|
9
|
+
Requires torch + CUDA — skipped entirely in CI environments without GPU.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import pytest
|
|
13
|
+
|
|
14
|
+
torch = pytest.importorskip("torch", reason="torch required for reward hack defense tests")
|
|
15
|
+
|
|
16
|
+
from wafer_core.utils.kernel_utils.defense import ( # noqa: E402
|
|
17
|
+
run_all_defenses,
|
|
18
|
+
run_all_defenses_extended,
|
|
19
|
+
)
|
|
20
|
+
from wafer_core.utils.kernel_utils.static_checker import validate_kernel_static # noqa: E402
|
|
21
|
+
from wafer_core.utils.kernel_utils.test_reward_hacks import ( # noqa: E402
|
|
22
|
+
STATIC_HACK_SAMPLES,
|
|
23
|
+
caching,
|
|
24
|
+
clear_cache,
|
|
25
|
+
hardcoded_256,
|
|
26
|
+
identity_kernel,
|
|
27
|
+
lazy_evaluation,
|
|
28
|
+
legit_matmul,
|
|
29
|
+
precision_downgrade,
|
|
30
|
+
thread_injection,
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
requires_cuda = pytest.mark.skipif(not torch.cuda.is_available(), reason="CUDA not available")
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
# =============================================================================
|
|
37
|
+
# Cut point 1: validate_kernel_static catches code-level hacks
|
|
38
|
+
# =============================================================================
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@pytest.mark.parametrize(
|
|
42
|
+
"name,code,expected_checks",
|
|
43
|
+
[(name, code, checks) for name, (code, checks) in STATIC_HACK_SAMPLES.items()],
|
|
44
|
+
ids=list(STATIC_HACK_SAMPLES.keys()),
|
|
45
|
+
)
|
|
46
|
+
def test_static_checker_catches_hack(name, code, expected_checks):
|
|
47
|
+
"""Each hack code sample should fail validate_kernel_static."""
|
|
48
|
+
valid, errors, warnings = validate_kernel_static(code)
|
|
49
|
+
# At least one of the expected checks should have fired
|
|
50
|
+
assert not valid or len(warnings) > 0, (
|
|
51
|
+
f"Static checker missed {name}: expected checks {expected_checks} to fire, "
|
|
52
|
+
f"got errors={errors}, warnings={warnings}"
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def test_static_checker_passes_clean_code():
|
|
57
|
+
"""Non-hack code should pass static checks."""
|
|
58
|
+
clean = "@triton.jit\ndef kernel(ptr, BLOCK: tl.constexpr):\n tl.store(ptr, tl.load(ptr))\n"
|
|
59
|
+
valid, errors, warnings = validate_kernel_static(clean, backend="triton")
|
|
60
|
+
assert valid, f"Clean code should pass: errors={errors}"
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
# =============================================================================
|
|
64
|
+
# Cut point 2: run_all_defenses / run_all_defenses_extended
|
|
65
|
+
# =============================================================================
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
@requires_cuda
|
|
69
|
+
@pytest.mark.parametrize(
|
|
70
|
+
"name,attack_fn",
|
|
71
|
+
[
|
|
72
|
+
("thread_injection", thread_injection),
|
|
73
|
+
("lazy_evaluation", lazy_evaluation),
|
|
74
|
+
("precision_downgrade", precision_downgrade),
|
|
75
|
+
],
|
|
76
|
+
)
|
|
77
|
+
def test_runtime_defense_catches_timing_attack(name, attack_fn):
|
|
78
|
+
"""Timing attacks are caught by run_all_defenses."""
|
|
79
|
+
A = torch.randn(256, 256, device="cuda")
|
|
80
|
+
B = torch.randn(256, 256, device="cuda")
|
|
81
|
+
torch.cuda.synchronize()
|
|
82
|
+
|
|
83
|
+
all_passed, results, _ = run_all_defenses(legit_matmul, A, B)
|
|
84
|
+
# Sanity: legit passes
|
|
85
|
+
assert all_passed
|
|
86
|
+
|
|
87
|
+
all_passed, results, _ = run_all_defenses(attack_fn, A, B)
|
|
88
|
+
assert not all_passed, f"{name} should be caught"
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
@requires_cuda
|
|
92
|
+
def test_monkey_patch_detected():
|
|
93
|
+
"""Monkey-patching of timing functions is caught."""
|
|
94
|
+
original = torch.cuda.Event.elapsed_time
|
|
95
|
+
try:
|
|
96
|
+
torch.cuda.Event.elapsed_time = lambda self, end: 0.001
|
|
97
|
+
A = torch.randn(256, 256, device="cuda")
|
|
98
|
+
B = torch.randn(256, 256, device="cuda")
|
|
99
|
+
all_passed, results, _ = run_all_defenses(legit_matmul, A, B)
|
|
100
|
+
assert not all_passed
|
|
101
|
+
finally:
|
|
102
|
+
torch.cuda.Event.elapsed_time = original
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
@requires_cuda
|
|
106
|
+
def test_caching_attack_caught():
|
|
107
|
+
"""Caching/memoization is caught by multi-input validation."""
|
|
108
|
+
clear_cache()
|
|
109
|
+
|
|
110
|
+
def input_gen():
|
|
111
|
+
return (
|
|
112
|
+
torch.randn(256, 256, device="cuda"),
|
|
113
|
+
torch.randn(256, 256, device="cuda"),
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
A, B = input_gen()
|
|
117
|
+
all_passed, results, _ = run_all_defenses_extended(
|
|
118
|
+
caching,
|
|
119
|
+
A,
|
|
120
|
+
B,
|
|
121
|
+
reference_fn=torch.matmul,
|
|
122
|
+
input_generator=input_gen,
|
|
123
|
+
)
|
|
124
|
+
assert not all_passed, "Caching attack should be caught"
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
@requires_cuda
|
|
128
|
+
def test_hardcoded_shapes_caught():
|
|
129
|
+
"""Hardcoded optimization is caught by multi-shape validation."""
|
|
130
|
+
A = torch.randn(256, 256, device="cuda")
|
|
131
|
+
B = torch.randn(256, 256, device="cuda")
|
|
132
|
+
|
|
133
|
+
all_passed, results, _ = run_all_defenses_extended(
|
|
134
|
+
hardcoded_256,
|
|
135
|
+
A,
|
|
136
|
+
B,
|
|
137
|
+
reference_fn=torch.matmul,
|
|
138
|
+
test_shapes=[(128, 128), (256, 256), (512, 512)],
|
|
139
|
+
)
|
|
140
|
+
assert not all_passed, "Hardcoded shapes attack should be caught"
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
@requires_cuda
|
|
144
|
+
def test_identity_kernel_caught():
|
|
145
|
+
"""Identity kernel is caught when reference produces different output."""
|
|
146
|
+
x = torch.randn(256, 256, device="cuda")
|
|
147
|
+
|
|
148
|
+
all_passed, results, _ = run_all_defenses_extended(
|
|
149
|
+
identity_kernel,
|
|
150
|
+
x,
|
|
151
|
+
reference_fn=torch.relu,
|
|
152
|
+
)
|
|
153
|
+
assert not all_passed, "Identity kernel should be caught"
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
@requires_cuda
|
|
157
|
+
def test_extended_pipeline_legit_with_all_defenses():
|
|
158
|
+
"""Legit kernel passes full extended pipeline with all defense flags enabled.
|
|
159
|
+
|
|
160
|
+
This is the actual code path used by `wafer evaluate kernelbench`.
|
|
161
|
+
Exercises: base timing defenses, caching, shape, identity, GEMM exact
|
|
162
|
+
correctness, ULP precision, and memory guards — all through the single
|
|
163
|
+
run_all_defenses_extended() entry point.
|
|
164
|
+
"""
|
|
165
|
+
|
|
166
|
+
def input_gen():
|
|
167
|
+
return (
|
|
168
|
+
torch.randn(256, 256, device="cuda"),
|
|
169
|
+
torch.randn(256, 256, device="cuda"),
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
A, B = input_gen()
|
|
173
|
+
all_passed, results, _ = run_all_defenses_extended(
|
|
174
|
+
legit_matmul,
|
|
175
|
+
A,
|
|
176
|
+
B,
|
|
177
|
+
reference_fn=torch.matmul,
|
|
178
|
+
input_generator=input_gen,
|
|
179
|
+
test_shapes=[(128, 128), (256, 256)],
|
|
180
|
+
is_gemm=True,
|
|
181
|
+
gemm_dims=(128, 128, 128),
|
|
182
|
+
check_precision_ulp=True,
|
|
183
|
+
)
|
|
184
|
+
failed = [(name, msg) for name, passed, msg in results if not passed]
|
|
185
|
+
assert all_passed, f"Legit kernel failed full extended pipeline: {failed}"
|
{wafer_core-0.1.30 → wafer_core-0.1.32}/tests/trace_compare/test_trace_compare_correctness.py
RENAMED
|
@@ -34,6 +34,18 @@ NVIDIA_LLAMA_TRACE = TRACE_EXAMPLES_DIR / "nvidia_llama.json"
|
|
|
34
34
|
GOLDEN_FILE = Path(__file__).parent / "expected_output_amd_llama.json"
|
|
35
35
|
|
|
36
36
|
|
|
37
|
+
def _path_exists_safe(path: Path) -> bool:
|
|
38
|
+
"""Check if path exists, returning False on permission errors.
|
|
39
|
+
|
|
40
|
+
CI runners may not have permission to stat /root/... paths,
|
|
41
|
+
so we treat PermissionError the same as file not existing.
|
|
42
|
+
"""
|
|
43
|
+
try:
|
|
44
|
+
return path.exists()
|
|
45
|
+
except PermissionError:
|
|
46
|
+
return False
|
|
47
|
+
|
|
48
|
+
|
|
37
49
|
def load_golden_file() -> dict[str, Any]:
|
|
38
50
|
"""Load expected output from golden file."""
|
|
39
51
|
if not GOLDEN_FILE.exists():
|
|
@@ -50,7 +62,7 @@ def load_golden_file() -> dict[str, Any]:
|
|
|
50
62
|
@pytest.fixture(scope="session")
|
|
51
63
|
def amd_trace_result():
|
|
52
64
|
"""Load AMD trace once per test session (~17s)."""
|
|
53
|
-
if not AMD_LLAMA_TRACE
|
|
65
|
+
if not _path_exists_safe(AMD_LLAMA_TRACE):
|
|
54
66
|
pytest.skip(f"Trace file not found: {AMD_LLAMA_TRACE}")
|
|
55
67
|
return load_trace(AMD_LLAMA_TRACE, include_stacks=True)
|
|
56
68
|
|
|
@@ -58,7 +70,7 @@ def amd_trace_result():
|
|
|
58
70
|
@pytest.fixture(scope="session")
|
|
59
71
|
def amd_trace_streaming_result():
|
|
60
72
|
"""Load AMD trace with streaming loader once per test session."""
|
|
61
|
-
if not AMD_LLAMA_TRACE
|
|
73
|
+
if not _path_exists_safe(AMD_LLAMA_TRACE):
|
|
62
74
|
pytest.skip(f"Trace file not found: {AMD_LLAMA_TRACE}")
|
|
63
75
|
return load_trace_streaming(AMD_LLAMA_TRACE, include_stacks=True)
|
|
64
76
|
|
|
@@ -66,7 +78,7 @@ def amd_trace_streaming_result():
|
|
|
66
78
|
@pytest.fixture(scope="session")
|
|
67
79
|
def analyze_result():
|
|
68
80
|
"""Run analyze_traces once per test session (~35s)."""
|
|
69
|
-
if not AMD_LLAMA_TRACE
|
|
81
|
+
if not _path_exists_safe(AMD_LLAMA_TRACE) or not _path_exists_safe(NVIDIA_LLAMA_TRACE):
|
|
70
82
|
pytest.skip("Trace files not found")
|
|
71
83
|
return analyze_traces(
|
|
72
84
|
AMD_LLAMA_TRACE,
|
|
@@ -165,7 +177,7 @@ def test_streaming_loader_matches_regular_loader(amd_trace_result, amd_trace_str
|
|
|
165
177
|
|
|
166
178
|
def test_metadata_extraction_matches_full_load(amd_trace_result) -> None:
|
|
167
179
|
"""Test that fast metadata extraction matches full load metadata."""
|
|
168
|
-
if not AMD_LLAMA_TRACE
|
|
180
|
+
if not _path_exists_safe(AMD_LLAMA_TRACE):
|
|
169
181
|
pytest.skip(f"Trace file not found: {AMD_LLAMA_TRACE}")
|
|
170
182
|
|
|
171
183
|
# Extract metadata fast (~2ms)
|
|
@@ -186,7 +198,7 @@ def test_metadata_extraction_matches_full_load(amd_trace_result) -> None:
|
|
|
186
198
|
|
|
187
199
|
def test_streaming_metadata_callback_fires() -> None:
|
|
188
200
|
"""Test that streaming loader fires metadata callback (fast, no full load)."""
|
|
189
|
-
if not AMD_LLAMA_TRACE
|
|
201
|
+
if not _path_exists_safe(AMD_LLAMA_TRACE):
|
|
190
202
|
pytest.skip(f"Trace file not found: {AMD_LLAMA_TRACE}")
|
|
191
203
|
|
|
192
204
|
# Only test the metadata callback - don't do full load
|
|
@@ -329,7 +341,7 @@ def test_architecture_detection_unknown() -> None:
|
|
|
329
341
|
|
|
330
342
|
def test_analyze_trace_pair_metadata_callback() -> None:
|
|
331
343
|
"""Test that metadata extraction works for both traces (fast, no full analysis)."""
|
|
332
|
-
if not AMD_LLAMA_TRACE
|
|
344
|
+
if not _path_exists_safe(AMD_LLAMA_TRACE) or not _path_exists_safe(NVIDIA_LLAMA_TRACE):
|
|
333
345
|
pytest.skip("Trace files not found")
|
|
334
346
|
|
|
335
347
|
# Just test metadata extraction - much faster than full analysis
|
|
@@ -415,7 +427,7 @@ def test_loaded_trace_contains_all_data() -> None:
|
|
|
415
427
|
"""Test that LoadedTrace contains all required fields."""
|
|
416
428
|
from wafer_core.lib.trace_compare.loader import load_trace_full, LoadedTrace
|
|
417
429
|
|
|
418
|
-
if not AMD_LLAMA_TRACE
|
|
430
|
+
if not _path_exists_safe(AMD_LLAMA_TRACE):
|
|
419
431
|
pytest.skip(f"Trace file not found: {AMD_LLAMA_TRACE}")
|
|
420
432
|
|
|
421
433
|
loaded = load_trace_full(AMD_LLAMA_TRACE, include_stacks=True)
|
|
@@ -441,7 +453,7 @@ def test_analyze_from_loaded_matches_path_api() -> None:
|
|
|
441
453
|
from wafer_core.lib.trace_compare.loader import load_trace_full
|
|
442
454
|
from wafer_core.lib.trace_compare.analyzer import analyze_traces_from_loaded
|
|
443
455
|
|
|
444
|
-
if not AMD_LLAMA_TRACE
|
|
456
|
+
if not _path_exists_safe(AMD_LLAMA_TRACE) or not _path_exists_safe(NVIDIA_LLAMA_TRACE):
|
|
445
457
|
pytest.skip("Trace files not found")
|
|
446
458
|
|
|
447
459
|
# Load traces once
|
|
@@ -472,7 +484,7 @@ def test_analyze_trace_pair_timing() -> None:
|
|
|
472
484
|
"""Test that analyze_trace_pair completes in reasonable time (<25s)."""
|
|
473
485
|
import time
|
|
474
486
|
|
|
475
|
-
if not AMD_LLAMA_TRACE
|
|
487
|
+
if not _path_exists_safe(AMD_LLAMA_TRACE) or not _path_exists_safe(NVIDIA_LLAMA_TRACE):
|
|
476
488
|
pytest.skip("Trace files not found")
|
|
477
489
|
|
|
478
490
|
start = time.perf_counter()
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"""Kernel trace tool for discovering SOTA kernels.
|
|
2
|
+
|
|
3
|
+
Given a PyTorch operation, traces what kernel PyTorch dispatches to on target hardware.
|
|
4
|
+
|
|
5
|
+
Usage:
|
|
6
|
+
from wafer_core.tools.dispatch_baseline import quick_trace
|
|
7
|
+
|
|
8
|
+
result = quick_trace(
|
|
9
|
+
"torch.matmul(A, B)",
|
|
10
|
+
{"A": (4096, 4096), "B": (4096, 4096)},
|
|
11
|
+
hardware="H100",
|
|
12
|
+
)
|
|
13
|
+
print(result.summary())
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from wafer_core.tools.dispatch_baseline.client import (
|
|
17
|
+
lookup_baseline,
|
|
18
|
+
store_baseline,
|
|
19
|
+
)
|
|
20
|
+
from wafer_core.tools.dispatch_baseline.codegen import (
|
|
21
|
+
generate_trace_script,
|
|
22
|
+
parse_op_string,
|
|
23
|
+
update_dtypes,
|
|
24
|
+
update_shapes,
|
|
25
|
+
)
|
|
26
|
+
from wafer_core.tools.dispatch_baseline.dtypes import (
|
|
27
|
+
HardwareSpec,
|
|
28
|
+
KernelInfo,
|
|
29
|
+
KernelTraceConfig,
|
|
30
|
+
KernelTraceResult,
|
|
31
|
+
OpSpec,
|
|
32
|
+
RooflineAnalysis,
|
|
33
|
+
TensorSpec,
|
|
34
|
+
)
|
|
35
|
+
from wafer_core.tools.dispatch_baseline.executor import (
|
|
36
|
+
TraceExecutionResult,
|
|
37
|
+
quick_trace,
|
|
38
|
+
trace_kernel_local,
|
|
39
|
+
trace_kernel_remote,
|
|
40
|
+
)
|
|
41
|
+
from wafer_core.tools.dispatch_baseline.roofline import (
|
|
42
|
+
HARDWARE_SPECS,
|
|
43
|
+
compute_roofline,
|
|
44
|
+
get_hardware_spec,
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
__all__ = [
|
|
48
|
+
# Data types
|
|
49
|
+
"HardwareSpec",
|
|
50
|
+
"KernelInfo",
|
|
51
|
+
"KernelTraceConfig",
|
|
52
|
+
"KernelTraceResult",
|
|
53
|
+
"OpSpec",
|
|
54
|
+
"RooflineAnalysis",
|
|
55
|
+
"TensorSpec",
|
|
56
|
+
"TraceExecutionResult",
|
|
57
|
+
# Codegen
|
|
58
|
+
"generate_trace_script",
|
|
59
|
+
"parse_op_string",
|
|
60
|
+
"update_dtypes",
|
|
61
|
+
"update_shapes",
|
|
62
|
+
# Execution
|
|
63
|
+
"quick_trace",
|
|
64
|
+
"trace_kernel_local",
|
|
65
|
+
"trace_kernel_remote",
|
|
66
|
+
# Database
|
|
67
|
+
"lookup_baseline",
|
|
68
|
+
"store_baseline",
|
|
69
|
+
# Roofline
|
|
70
|
+
"HARDWARE_SPECS",
|
|
71
|
+
"compute_roofline",
|
|
72
|
+
"get_hardware_spec",
|
|
73
|
+
]
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"""Analyzer for kernel trace output.
|
|
2
|
+
|
|
3
|
+
Parses profiler output to extract kernel information and identify the primary kernel.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import json
|
|
7
|
+
import re
|
|
8
|
+
from dataclasses import dataclass
|
|
9
|
+
from typing import Any
|
|
10
|
+
|
|
11
|
+
from wafer_core.tools.dispatch_baseline.dtypes import KernelInfo, KernelTraceResult, OpSpec
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclass(frozen=True)
|
|
15
|
+
class ParsedTraceResult:
|
|
16
|
+
"""Parsed trace output with environment info for caching."""
|
|
17
|
+
|
|
18
|
+
result: KernelTraceResult
|
|
19
|
+
pytorch_version: str
|
|
20
|
+
runtime_version: str
|
|
21
|
+
gpu_arch: str
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def parse_trace_output(output: str, op_spec: OpSpec, hardware: str) -> ParsedTraceResult:
|
|
25
|
+
"""Parse kernel trace script output and extract kernel information.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
output: Raw output from the trace script (stdout)
|
|
29
|
+
op_spec: The operation that was traced
|
|
30
|
+
hardware: Target hardware name
|
|
31
|
+
|
|
32
|
+
Returns:
|
|
33
|
+
ParsedTraceResult with extracted kernel information and environment info
|
|
34
|
+
"""
|
|
35
|
+
# Look for our JSON marker in the output
|
|
36
|
+
json_match = re.search(r"KERNEL_TRACE_RESULT_JSON:(.+)$", output, re.MULTILINE)
|
|
37
|
+
|
|
38
|
+
if not json_match:
|
|
39
|
+
return ParsedTraceResult(
|
|
40
|
+
result=KernelTraceResult(
|
|
41
|
+
op_spec=op_spec,
|
|
42
|
+
hardware=hardware,
|
|
43
|
+
kernels=[],
|
|
44
|
+
primary_kernel=None,
|
|
45
|
+
raw_output=output,
|
|
46
|
+
error="Could not find KERNEL_TRACE_RESULT_JSON marker in output",
|
|
47
|
+
),
|
|
48
|
+
pytorch_version="unknown",
|
|
49
|
+
runtime_version="unknown",
|
|
50
|
+
gpu_arch="unknown",
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
try:
|
|
54
|
+
result_json = json.loads(json_match.group(1))
|
|
55
|
+
except json.JSONDecodeError as e:
|
|
56
|
+
return ParsedTraceResult(
|
|
57
|
+
result=KernelTraceResult(
|
|
58
|
+
op_spec=op_spec,
|
|
59
|
+
hardware=hardware,
|
|
60
|
+
kernels=[],
|
|
61
|
+
primary_kernel=None,
|
|
62
|
+
raw_output=output,
|
|
63
|
+
error=f"Failed to parse JSON: {e}",
|
|
64
|
+
),
|
|
65
|
+
pytorch_version="unknown",
|
|
66
|
+
runtime_version="unknown",
|
|
67
|
+
gpu_arch="unknown",
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
# Extract environment info
|
|
71
|
+
env_info = result_json.get("environment", {})
|
|
72
|
+
pytorch_version = env_info.get("pytorch_version", "unknown")
|
|
73
|
+
runtime_version = env_info.get("runtime_version", "unknown")
|
|
74
|
+
gpu_arch = env_info.get("gpu_arch", "unknown")
|
|
75
|
+
|
|
76
|
+
# Extract kernels from JSON
|
|
77
|
+
kernels = []
|
|
78
|
+
for k in result_json.get("kernels", []):
|
|
79
|
+
kernel_info = _parse_kernel_dict(k)
|
|
80
|
+
if kernel_info:
|
|
81
|
+
kernels.append(kernel_info)
|
|
82
|
+
|
|
83
|
+
# Identify primary kernel (longest duration)
|
|
84
|
+
primary_kernel = kernels[0] if kernels else None
|
|
85
|
+
|
|
86
|
+
return ParsedTraceResult(
|
|
87
|
+
result=KernelTraceResult(
|
|
88
|
+
op_spec=op_spec,
|
|
89
|
+
hardware=hardware,
|
|
90
|
+
kernels=kernels,
|
|
91
|
+
primary_kernel=primary_kernel,
|
|
92
|
+
raw_output=output,
|
|
93
|
+
),
|
|
94
|
+
pytorch_version=pytorch_version,
|
|
95
|
+
runtime_version=runtime_version,
|
|
96
|
+
gpu_arch=gpu_arch,
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def _parse_kernel_dict(kernel_dict: dict[str, Any]) -> KernelInfo | None:
|
|
101
|
+
"""Parse a kernel dictionary into KernelInfo."""
|
|
102
|
+
name = kernel_dict.get("name", "")
|
|
103
|
+
if not name:
|
|
104
|
+
return None
|
|
105
|
+
|
|
106
|
+
return KernelInfo(
|
|
107
|
+
name=name,
|
|
108
|
+
duration_us=kernel_dict.get("duration_us", 0.0),
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def extract_kernels_from_nsys(nsys_output: str) -> list[dict[str, Any]]:
|
|
113
|
+
"""Extract kernel information from nsys output.
|
|
114
|
+
|
|
115
|
+
This is a fallback for when torch.profiler doesn't capture all kernels.
|
|
116
|
+
|
|
117
|
+
Args:
|
|
118
|
+
nsys_output: Output from `nsys stats` or similar
|
|
119
|
+
|
|
120
|
+
Returns:
|
|
121
|
+
List of kernel dictionaries
|
|
122
|
+
"""
|
|
123
|
+
kernels = []
|
|
124
|
+
|
|
125
|
+
# Look for GPU kernel summary lines
|
|
126
|
+
# Format varies, but typically: name, duration, count, etc.
|
|
127
|
+
lines = nsys_output.split("\n")
|
|
128
|
+
|
|
129
|
+
for line in lines:
|
|
130
|
+
# Skip headers and empty lines
|
|
131
|
+
if not line.strip() or "---" in line or "Name" in line:
|
|
132
|
+
continue
|
|
133
|
+
|
|
134
|
+
# Try to parse as nsys kernel line
|
|
135
|
+
# This is a simplified parser - real nsys output varies
|
|
136
|
+
parts = line.split()
|
|
137
|
+
if len(parts) >= 2:
|
|
138
|
+
# Heuristic: last column is often the kernel name
|
|
139
|
+
name = parts[-1]
|
|
140
|
+
if any(c.isalpha() for c in name) and "_" in name:
|
|
141
|
+
kernels.append({"name": name, "duration_us": 0.0})
|
|
142
|
+
|
|
143
|
+
return kernels
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
def merge_kernel_infos(
|
|
147
|
+
profiler_kernels: list[KernelInfo], nsys_kernels: list[dict[str, Any]]
|
|
148
|
+
) -> list[KernelInfo]:
|
|
149
|
+
"""Merge kernel info from multiple sources.
|
|
150
|
+
|
|
151
|
+
Prefers profiler data when available, but adds any missing kernels from nsys.
|
|
152
|
+
|
|
153
|
+
Args:
|
|
154
|
+
profiler_kernels: Kernels from torch.profiler
|
|
155
|
+
nsys_kernels: Kernels from nsys
|
|
156
|
+
|
|
157
|
+
Returns:
|
|
158
|
+
Merged list of KernelInfo objects
|
|
159
|
+
"""
|
|
160
|
+
seen_names = {k.name for k in profiler_kernels}
|
|
161
|
+
result = list(profiler_kernels)
|
|
162
|
+
|
|
163
|
+
for nsys_kernel in nsys_kernels:
|
|
164
|
+
name = nsys_kernel.get("name", "")
|
|
165
|
+
if name and name not in seen_names:
|
|
166
|
+
result.append(
|
|
167
|
+
KernelInfo(
|
|
168
|
+
name=name,
|
|
169
|
+
duration_us=nsys_kernel.get("duration_us", 0.0),
|
|
170
|
+
)
|
|
171
|
+
)
|
|
172
|
+
seen_names.add(name)
|
|
173
|
+
|
|
174
|
+
return result
|