wafer-core 0.1.37__py3-none-any.whl → 0.1.39__py3-none-any.whl
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/lib/trace_compare/fusion_analyzer.py +2 -0
- wafer_core/rollouts/_logging/__init__.py +5 -1
- wafer_core/rollouts/_logging/logging_config.py +95 -3
- wafer_core/rollouts/_logging/sample_handler.py +66 -0
- wafer_core/rollouts/_pytui/__init__.py +114 -0
- wafer_core/rollouts/_pytui/app.py +809 -0
- wafer_core/rollouts/_pytui/console.py +291 -0
- wafer_core/rollouts/_pytui/renderer.py +210 -0
- wafer_core/rollouts/_pytui/spinner.py +73 -0
- wafer_core/rollouts/_pytui/terminal.py +489 -0
- wafer_core/rollouts/_pytui/text.py +470 -0
- wafer_core/rollouts/_pytui/theme.py +241 -0
- wafer_core/rollouts/evaluation.py +142 -177
- wafer_core/rollouts/progress_app.py +395 -0
- wafer_core/rollouts/tui/DESIGN.md +251 -115
- wafer_core/rollouts/tui/monitor.py +64 -20
- wafer_core/tools/compile/__init__.py +30 -0
- wafer_core/tools/compile/compiler.py +314 -0
- wafer_core/tools/compile/modal_compile.py +359 -0
- wafer_core/tools/compile/tests/__init__.py +1 -0
- wafer_core/tools/compile/tests/test_compiler.py +675 -0
- wafer_core/tools/compile/tests/test_data/utils.cuh +10 -0
- wafer_core/tools/compile/tests/test_data/vector_add.cu +7 -0
- wafer_core/tools/compile/tests/test_data/with_header.cu +9 -0
- wafer_core/tools/compile/tests/test_modal_integration.py +326 -0
- wafer_core/tools/compile/types.py +117 -0
- {wafer_core-0.1.37.dist-info → wafer_core-0.1.39.dist-info}/METADATA +1 -1
- {wafer_core-0.1.37.dist-info → wafer_core-0.1.39.dist-info}/RECORD +29 -12
- wafer_core/rollouts/events.py +0 -240
- wafer_core/rollouts/progress_display.py +0 -476
- wafer_core/utils/event_streaming.py +0 -63
- {wafer_core-0.1.37.dist-info → wafer_core-0.1.39.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
"""Integration tests for Modal-based CUDA compilation.
|
|
2
|
+
|
|
3
|
+
These tests require Modal to be configured with valid credentials.
|
|
4
|
+
They are skipped if Modal is not available or not authenticated.
|
|
5
|
+
|
|
6
|
+
Run with:
|
|
7
|
+
MODAL_TOKEN_ID=... MODAL_TOKEN_SECRET=... pytest test_modal_integration.py -v
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import os
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
import pytest
|
|
14
|
+
|
|
15
|
+
# Skip all tests if Modal credentials are not set
|
|
16
|
+
pytestmark = pytest.mark.skipif(
|
|
17
|
+
not os.environ.get("MODAL_TOKEN_ID") or not os.environ.get("MODAL_TOKEN_SECRET"),
|
|
18
|
+
reason="Modal credentials not configured (set MODAL_TOKEN_ID and MODAL_TOKEN_SECRET)",
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
# Test data directory
|
|
22
|
+
TEST_DATA_DIR = Path(__file__).parent / "test_data"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# =============================================================================
|
|
26
|
+
# Test CUDA Code Samples
|
|
27
|
+
# =============================================================================
|
|
28
|
+
|
|
29
|
+
SIMPLE_KERNEL = """\
|
|
30
|
+
__global__ void test_kernel() {
|
|
31
|
+
// Empty kernel for testing
|
|
32
|
+
}
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
VECTOR_ADD_KERNEL = """\
|
|
36
|
+
__global__ void vector_add(float* a, float* b, float* c, int n) {
|
|
37
|
+
int idx = blockIdx.x * blockDim.x + threadIdx.x;
|
|
38
|
+
if (idx < n) {
|
|
39
|
+
c[idx] = a[idx] + b[idx];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
SHARED_MEMORY_KERNEL = """\
|
|
45
|
+
#define TILE_SIZE 16
|
|
46
|
+
|
|
47
|
+
__global__ void tiled_matmul(float* A, float* B, float* C, int N) {
|
|
48
|
+
__shared__ float As[TILE_SIZE][TILE_SIZE];
|
|
49
|
+
__shared__ float Bs[TILE_SIZE][TILE_SIZE];
|
|
50
|
+
|
|
51
|
+
int bx = blockIdx.x, by = blockIdx.y;
|
|
52
|
+
int tx = threadIdx.x, ty = threadIdx.y;
|
|
53
|
+
|
|
54
|
+
int row = by * TILE_SIZE + ty;
|
|
55
|
+
int col = bx * TILE_SIZE + tx;
|
|
56
|
+
|
|
57
|
+
float sum = 0.0f;
|
|
58
|
+
|
|
59
|
+
for (int t = 0; t < (N + TILE_SIZE - 1) / TILE_SIZE; t++) {
|
|
60
|
+
if (row < N && t * TILE_SIZE + tx < N)
|
|
61
|
+
As[ty][tx] = A[row * N + t * TILE_SIZE + tx];
|
|
62
|
+
else
|
|
63
|
+
As[ty][tx] = 0.0f;
|
|
64
|
+
|
|
65
|
+
if (t * TILE_SIZE + ty < N && col < N)
|
|
66
|
+
Bs[ty][tx] = B[(t * TILE_SIZE + ty) * N + col];
|
|
67
|
+
else
|
|
68
|
+
Bs[ty][tx] = 0.0f;
|
|
69
|
+
|
|
70
|
+
__syncthreads();
|
|
71
|
+
|
|
72
|
+
for (int k = 0; k < TILE_SIZE; k++) {
|
|
73
|
+
sum += As[ty][k] * Bs[k][tx];
|
|
74
|
+
}
|
|
75
|
+
__syncthreads();
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (row < N && col < N) {
|
|
79
|
+
C[row * N + col] = sum;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
"""
|
|
83
|
+
|
|
84
|
+
SYNTAX_ERROR_KERNEL = """\
|
|
85
|
+
__global__ void broken_kernel() {
|
|
86
|
+
// Missing semicolon below
|
|
87
|
+
int x = 1
|
|
88
|
+
}
|
|
89
|
+
"""
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
# =============================================================================
|
|
93
|
+
# Tests
|
|
94
|
+
# =============================================================================
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
class TestModalCompileSimple:
|
|
98
|
+
"""Test simple kernel compilation via Modal."""
|
|
99
|
+
|
|
100
|
+
@pytest.mark.slow
|
|
101
|
+
def test_simple_kernel_ptx(self) -> None:
|
|
102
|
+
"""Test compiling a simple kernel to PTX."""
|
|
103
|
+
from wafer_core.tools.compile import (
|
|
104
|
+
CompileRequest,
|
|
105
|
+
OutputFormat,
|
|
106
|
+
)
|
|
107
|
+
from wafer_core.tools.compile.modal_compile import compile_cuda
|
|
108
|
+
|
|
109
|
+
request = CompileRequest(
|
|
110
|
+
files={"kernel.cu": SIMPLE_KERNEL},
|
|
111
|
+
arch="sm_90a",
|
|
112
|
+
output=(OutputFormat.PTX,),
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
# Call Modal function
|
|
116
|
+
result = compile_cuda.remote({
|
|
117
|
+
"files": request.files,
|
|
118
|
+
"arch": request.arch,
|
|
119
|
+
"flags": list(request.flags),
|
|
120
|
+
"output": [fmt.value for fmt in request.output],
|
|
121
|
+
})
|
|
122
|
+
|
|
123
|
+
assert result["success"] is True
|
|
124
|
+
assert result["ptx"] is not None
|
|
125
|
+
assert ".version" in result["ptx"]
|
|
126
|
+
assert ".target" in result["ptx"]
|
|
127
|
+
assert "test_kernel" in result["ptx"]
|
|
128
|
+
|
|
129
|
+
@pytest.mark.slow
|
|
130
|
+
def test_vector_add_kernel_sass(self) -> None:
|
|
131
|
+
"""Test compiling vector_add kernel to SASS."""
|
|
132
|
+
from wafer_core.tools.compile import (
|
|
133
|
+
CompileRequest,
|
|
134
|
+
OutputFormat,
|
|
135
|
+
)
|
|
136
|
+
from wafer_core.tools.compile.modal_compile import compile_cuda
|
|
137
|
+
|
|
138
|
+
request = CompileRequest(
|
|
139
|
+
files={"kernel.cu": VECTOR_ADD_KERNEL},
|
|
140
|
+
arch="sm_90a",
|
|
141
|
+
output=(OutputFormat.SASS,),
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
result = compile_cuda.remote({
|
|
145
|
+
"files": request.files,
|
|
146
|
+
"arch": request.arch,
|
|
147
|
+
"flags": list(request.flags),
|
|
148
|
+
"output": [fmt.value for fmt in request.output],
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
assert result["success"] is True
|
|
152
|
+
assert result["sass"] is not None
|
|
153
|
+
# SASS should contain assembly instructions
|
|
154
|
+
assert "vector_add" in result["sass"]
|
|
155
|
+
|
|
156
|
+
@pytest.mark.slow
|
|
157
|
+
def test_both_ptx_and_sass(self) -> None:
|
|
158
|
+
"""Test generating both PTX and SASS."""
|
|
159
|
+
from wafer_core.tools.compile import (
|
|
160
|
+
CompileRequest,
|
|
161
|
+
OutputFormat,
|
|
162
|
+
)
|
|
163
|
+
from wafer_core.tools.compile.modal_compile import compile_cuda
|
|
164
|
+
|
|
165
|
+
request = CompileRequest(
|
|
166
|
+
files={"kernel.cu": VECTOR_ADD_KERNEL},
|
|
167
|
+
arch="sm_90a",
|
|
168
|
+
output=(OutputFormat.PTX, OutputFormat.SASS),
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
result = compile_cuda.remote({
|
|
172
|
+
"files": request.files,
|
|
173
|
+
"arch": request.arch,
|
|
174
|
+
"flags": list(request.flags),
|
|
175
|
+
"output": [fmt.value for fmt in request.output],
|
|
176
|
+
})
|
|
177
|
+
|
|
178
|
+
assert result["success"] is True
|
|
179
|
+
assert result["ptx"] is not None
|
|
180
|
+
assert result["sass"] is not None
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
class TestModalCompileMultiFile:
|
|
184
|
+
"""Test multi-file compilation via Modal."""
|
|
185
|
+
|
|
186
|
+
@pytest.mark.slow
|
|
187
|
+
def test_kernel_with_header(self) -> None:
|
|
188
|
+
"""Test compiling a kernel that includes a header."""
|
|
189
|
+
from wafer_core.tools.compile.modal_compile import compile_cuda
|
|
190
|
+
|
|
191
|
+
main_cu = '#include "utils.cuh"\n' + """
|
|
192
|
+
__global__ void apply_square(float* data, int n) {
|
|
193
|
+
int idx = blockIdx.x * blockDim.x + threadIdx.x;
|
|
194
|
+
if (idx < n) {
|
|
195
|
+
data[idx] = square(data[idx]);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
"""
|
|
199
|
+
header = """
|
|
200
|
+
#pragma once
|
|
201
|
+
__device__ float square(float x) {
|
|
202
|
+
return x * x;
|
|
203
|
+
}
|
|
204
|
+
"""
|
|
205
|
+
|
|
206
|
+
result = compile_cuda.remote({
|
|
207
|
+
"files": {
|
|
208
|
+
"main.cu": main_cu,
|
|
209
|
+
"utils.cuh": header,
|
|
210
|
+
},
|
|
211
|
+
"arch": "sm_90a",
|
|
212
|
+
"flags": [],
|
|
213
|
+
"output": ["ptx"],
|
|
214
|
+
})
|
|
215
|
+
|
|
216
|
+
assert result["success"] is True
|
|
217
|
+
assert result["ptx"] is not None
|
|
218
|
+
assert "apply_square" in result["ptx"]
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
class TestModalCompileArchitectures:
|
|
222
|
+
"""Test compilation for different GPU architectures."""
|
|
223
|
+
|
|
224
|
+
@pytest.mark.slow
|
|
225
|
+
@pytest.mark.parametrize("arch", ["sm_80", "sm_89", "sm_90a"])
|
|
226
|
+
def test_different_architectures(self, arch: str) -> None:
|
|
227
|
+
"""Test compiling for different architectures."""
|
|
228
|
+
from wafer_core.tools.compile.modal_compile import compile_cuda
|
|
229
|
+
|
|
230
|
+
result = compile_cuda.remote({
|
|
231
|
+
"files": {"kernel.cu": SIMPLE_KERNEL},
|
|
232
|
+
"arch": arch,
|
|
233
|
+
"flags": [],
|
|
234
|
+
"output": ["ptx"],
|
|
235
|
+
})
|
|
236
|
+
|
|
237
|
+
assert result["success"] is True
|
|
238
|
+
assert result["ptx"] is not None
|
|
239
|
+
assert f".target {arch}" in result["ptx"]
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
class TestModalCompileErrors:
|
|
243
|
+
"""Test error handling in Modal compilation."""
|
|
244
|
+
|
|
245
|
+
@pytest.mark.slow
|
|
246
|
+
def test_syntax_error(self) -> None:
|
|
247
|
+
"""Test that syntax errors are reported."""
|
|
248
|
+
from wafer_core.tools.compile.modal_compile import compile_cuda
|
|
249
|
+
|
|
250
|
+
result = compile_cuda.remote({
|
|
251
|
+
"files": {"kernel.cu": SYNTAX_ERROR_KERNEL},
|
|
252
|
+
"arch": "sm_90a",
|
|
253
|
+
"flags": [],
|
|
254
|
+
"output": ["ptx"],
|
|
255
|
+
})
|
|
256
|
+
|
|
257
|
+
assert result["success"] is False
|
|
258
|
+
assert result["stderr"] != ""
|
|
259
|
+
# Error should mention the missing semicolon or syntax error
|
|
260
|
+
assert "error" in result["stderr"].lower()
|
|
261
|
+
|
|
262
|
+
@pytest.mark.slow
|
|
263
|
+
def test_missing_include(self) -> None:
|
|
264
|
+
"""Test that missing includes are reported."""
|
|
265
|
+
from wafer_core.tools.compile.modal_compile import compile_cuda
|
|
266
|
+
|
|
267
|
+
kernel = '#include "nonexistent.h"\n__global__ void test() {}'
|
|
268
|
+
|
|
269
|
+
result = compile_cuda.remote({
|
|
270
|
+
"files": {"kernel.cu": kernel},
|
|
271
|
+
"arch": "sm_90a",
|
|
272
|
+
"flags": [],
|
|
273
|
+
"output": ["ptx"],
|
|
274
|
+
})
|
|
275
|
+
|
|
276
|
+
assert result["success"] is False
|
|
277
|
+
assert "nonexistent.h" in result["stderr"] or "cannot open" in result["stderr"].lower()
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
class TestModalCompileFlags:
|
|
281
|
+
"""Test custom compiler flags."""
|
|
282
|
+
|
|
283
|
+
@pytest.mark.slow
|
|
284
|
+
def test_optimization_flags(self) -> None:
|
|
285
|
+
"""Test compilation with optimization flags."""
|
|
286
|
+
from wafer_core.tools.compile.modal_compile import compile_cuda
|
|
287
|
+
|
|
288
|
+
result = compile_cuda.remote({
|
|
289
|
+
"files": {"kernel.cu": VECTOR_ADD_KERNEL},
|
|
290
|
+
"arch": "sm_90a",
|
|
291
|
+
"flags": ["-O3"],
|
|
292
|
+
"output": ["ptx"],
|
|
293
|
+
})
|
|
294
|
+
|
|
295
|
+
assert result["success"] is True
|
|
296
|
+
assert result["ptx"] is not None
|
|
297
|
+
|
|
298
|
+
@pytest.mark.slow
|
|
299
|
+
def test_lineinfo_flag(self) -> None:
|
|
300
|
+
"""Test compilation with lineinfo flag."""
|
|
301
|
+
from wafer_core.tools.compile.modal_compile import compile_cuda
|
|
302
|
+
|
|
303
|
+
result = compile_cuda.remote({
|
|
304
|
+
"files": {"kernel.cu": VECTOR_ADD_KERNEL},
|
|
305
|
+
"arch": "sm_90a",
|
|
306
|
+
"flags": ["-lineinfo"],
|
|
307
|
+
"output": ["ptx"],
|
|
308
|
+
})
|
|
309
|
+
|
|
310
|
+
assert result["success"] is True
|
|
311
|
+
assert result["ptx"] is not None
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
class TestModalHealthCheck:
|
|
315
|
+
"""Test Modal health check function."""
|
|
316
|
+
|
|
317
|
+
@pytest.mark.slow
|
|
318
|
+
def test_health_check(self) -> None:
|
|
319
|
+
"""Test the health check endpoint."""
|
|
320
|
+
from wafer_core.tools.compile.modal_compile import health_check
|
|
321
|
+
|
|
322
|
+
result = health_check.remote()
|
|
323
|
+
|
|
324
|
+
assert result["status"] == "ok"
|
|
325
|
+
assert result["nvcc_available"] is True
|
|
326
|
+
assert "nvcc_version" in result
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"""Types for the cloud CUDA compiler."""
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass, field
|
|
4
|
+
from enum import Enum
|
|
5
|
+
from typing import Literal
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class OutputFormat(str, Enum):
|
|
9
|
+
"""Supported output formats."""
|
|
10
|
+
|
|
11
|
+
PTX = "ptx"
|
|
12
|
+
SASS = "sass"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# Valid SM architectures (CUDA compute capabilities)
|
|
16
|
+
VALID_ARCHITECTURES = frozenset(
|
|
17
|
+
{
|
|
18
|
+
# Ampere
|
|
19
|
+
"sm_80",
|
|
20
|
+
"sm_86",
|
|
21
|
+
"sm_87",
|
|
22
|
+
# Ada Lovelace
|
|
23
|
+
"sm_89",
|
|
24
|
+
# Hopper
|
|
25
|
+
"sm_90",
|
|
26
|
+
"sm_90a",
|
|
27
|
+
# Blackwell
|
|
28
|
+
"sm_100",
|
|
29
|
+
"sm_100a",
|
|
30
|
+
"sm_101",
|
|
31
|
+
"sm_101a",
|
|
32
|
+
"sm_120",
|
|
33
|
+
"sm_120a",
|
|
34
|
+
}
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
@dataclass(frozen=True)
|
|
39
|
+
class CompileRequest:
|
|
40
|
+
"""Request to compile CUDA code.
|
|
41
|
+
|
|
42
|
+
Attributes:
|
|
43
|
+
files: Mapping of filename to file content. At least one .cu file required.
|
|
44
|
+
arch: Target GPU architecture (e.g., "sm_90a" for Hopper).
|
|
45
|
+
flags: Additional nvcc flags (e.g., ["-O3", "--maxrregcount=64"]).
|
|
46
|
+
output: Requested output formats (ptx and/or sass).
|
|
47
|
+
"""
|
|
48
|
+
|
|
49
|
+
files: dict[str, str]
|
|
50
|
+
arch: str = "sm_90a"
|
|
51
|
+
flags: tuple[str, ...] = field(default_factory=tuple)
|
|
52
|
+
output: tuple[OutputFormat, ...] = field(
|
|
53
|
+
default_factory=lambda: (OutputFormat.PTX, OutputFormat.SASS)
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
def __post_init__(self) -> None:
|
|
57
|
+
"""Validate the request."""
|
|
58
|
+
# Validate files
|
|
59
|
+
if not self.files:
|
|
60
|
+
raise ValueError("At least one file is required")
|
|
61
|
+
|
|
62
|
+
# Check for at least one .cu file
|
|
63
|
+
cu_files = [f for f in self.files if f.endswith(".cu")]
|
|
64
|
+
if not cu_files:
|
|
65
|
+
raise ValueError("At least one .cu file is required")
|
|
66
|
+
|
|
67
|
+
# Validate architecture
|
|
68
|
+
if self.arch not in VALID_ARCHITECTURES:
|
|
69
|
+
raise ValueError(
|
|
70
|
+
f"Invalid architecture '{self.arch}'. "
|
|
71
|
+
f"Valid architectures: {sorted(VALID_ARCHITECTURES)}"
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
# Validate output formats
|
|
75
|
+
if not self.output:
|
|
76
|
+
raise ValueError("At least one output format is required")
|
|
77
|
+
|
|
78
|
+
@property
|
|
79
|
+
def main_cu_file(self) -> str:
|
|
80
|
+
"""Get the main .cu file (first one found)."""
|
|
81
|
+
for filename in self.files:
|
|
82
|
+
if filename.endswith(".cu"):
|
|
83
|
+
return filename
|
|
84
|
+
# This should never happen due to __post_init__ validation
|
|
85
|
+
raise ValueError("No .cu file found") # pragma: no cover
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
@dataclass(frozen=True)
|
|
89
|
+
class CompileResponse:
|
|
90
|
+
"""Response from CUDA compilation.
|
|
91
|
+
|
|
92
|
+
Attributes:
|
|
93
|
+
success: Whether compilation succeeded.
|
|
94
|
+
ptx: Generated PTX code (if requested and successful).
|
|
95
|
+
sass: Generated SASS code (if requested and successful).
|
|
96
|
+
stderr: Compiler warnings or errors.
|
|
97
|
+
compilation_time_ms: Time taken to compile in milliseconds.
|
|
98
|
+
"""
|
|
99
|
+
|
|
100
|
+
success: bool
|
|
101
|
+
ptx: str | None = None
|
|
102
|
+
sass: str | None = None
|
|
103
|
+
stderr: str = ""
|
|
104
|
+
compilation_time_ms: int = 0
|
|
105
|
+
|
|
106
|
+
@classmethod
|
|
107
|
+
def error(cls, message: str, compilation_time_ms: int = 0) -> "CompileResponse":
|
|
108
|
+
"""Create an error response."""
|
|
109
|
+
return cls(
|
|
110
|
+
success=False,
|
|
111
|
+
stderr=message,
|
|
112
|
+
compilation_time_ms=compilation_time_ms,
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
# Type alias for the output format literal
|
|
117
|
+
OutputFormatLiteral = Literal["ptx", "sass"]
|
|
@@ -326,7 +326,7 @@ wafer_core/lib/trace_compare/api.py,sha256=JSRTcd7eZK1Z8l18TFEiA5A8ENJS1TMz7oIiw
|
|
|
326
326
|
wafer_core/lib/trace_compare/architecture.py,sha256=8bqlAJQeJLBHblyXvFV-w55PIKiVQDPjDQZ8Jx4tuGg,2110
|
|
327
327
|
wafer_core/lib/trace_compare/classifier.py,sha256=sE1K007GVk_Up2g59SVUIZ7BThf0yHNjGsZ9AyM_Ah8,6028
|
|
328
328
|
wafer_core/lib/trace_compare/formatter.py,sha256=GNrCZ45ueBN05CEXjOtTuKvTI8z-g-ZZFil-ni3sWVY,37962
|
|
329
|
-
wafer_core/lib/trace_compare/fusion_analyzer.py,sha256=
|
|
329
|
+
wafer_core/lib/trace_compare/fusion_analyzer.py,sha256=xmVEF9qeroMa-ONfpnn64_q-aLyAjZ-9EIAYdVpIHKI,38555
|
|
330
330
|
wafer_core/lib/trace_compare/kernel_registry.yaml,sha256=0-knXwsF3pR1x1JdIz-aWaH-5xDgTylh53E47Kf6nHo,9808
|
|
331
331
|
wafer_core/lib/trace_compare/layer_segmentation.py,sha256=kI_Y1e9nrKZfdwfcrGo4h7gpMxqXI_xkgXk46zuFen4,4642
|
|
332
332
|
wafer_core/lib/trace_compare/loader.py,sha256=z3gO7CV8AxZloWUCA0aA3pwkNiEnEobdLQBAII41cGY,16129
|
|
@@ -352,8 +352,7 @@ wafer_core/rollouts/cli_agents.py,sha256=e4qqqYBzWLsbw8FsNnddGApWp_on9Cvzrfd1ami
|
|
|
352
352
|
wafer_core/rollouts/deploy.py,sha256=3t88fM_BMyAPkxIl8pS4r5ogHJvrlqWQDuIaltDZBRc,40924
|
|
353
353
|
wafer_core/rollouts/dtypes.py,sha256=oRWjpbUOTf4uyXvnO9QThcSzD1fBrDQnAfRhGbxdgrg,61916
|
|
354
354
|
wafer_core/rollouts/eval_helpers.py,sha256=OE7uQZRcbqQhpFqb4zOj8zafc9Gr6xZJpSrMvxXKVUw,1699
|
|
355
|
-
wafer_core/rollouts/evaluation.py,sha256=
|
|
356
|
-
wafer_core/rollouts/events.py,sha256=z85J8kq0LXPj5CiUk4RkiTQg--r9xiO7QeeJwkyUOto,7505
|
|
355
|
+
wafer_core/rollouts/evaluation.py,sha256=CGBOsqJNyC4fsgTbdcBs8OXY3Ihk_Er-K4g76GFq9M0,67139
|
|
357
356
|
wafer_core/rollouts/export.py,sha256=0CfdBB7Du4E3VekKEUcTwTEFS1bOMGZ9GbD5KU3CecQ,11583
|
|
358
357
|
wafer_core/rollouts/feedback.py,sha256=mu17eQbAinXZWI3hMYLq-LyF4JAdH9SfNRWY-0S8jvQ,6769
|
|
359
358
|
wafer_core/rollouts/fingerprint.py,sha256=9qL9VrKdg2lhGnSD8ycMZ214EBeH5XCDpPgFJdbwmW4,10542
|
|
@@ -363,7 +362,7 @@ wafer_core/rollouts/models.py,sha256=BrMnUpTA9_HnOghpedzdLUm9Di3FyJouzOkK4PPBg_k
|
|
|
363
362
|
wafer_core/rollouts/paths.py,sha256=9XtrA9ylhb5LttMFe2DE7X0IHeUMjuGUerII9OscYec,3436
|
|
364
363
|
wafer_core/rollouts/pipeline.py,sha256=vlJTYE3ZX2XScpF9pmtv91K8Q0g8uLmcbI5jn6b5Hzg,15319
|
|
365
364
|
wafer_core/rollouts/progress.py,sha256=szA9cvWT2xUxGVhF9BaAqJMmKDqMAUlxImxcOpcnqbY,29228
|
|
366
|
-
wafer_core/rollouts/
|
|
365
|
+
wafer_core/rollouts/progress_app.py,sha256=ir3fk8OZd09Zs7e7EC2WjQs_H-6W-zCbZAjSCDIcKEo,13517
|
|
367
366
|
wafer_core/rollouts/prompt.py,sha256=EDmGb0rhWwke7tokIcO8dukc3q5c8x0n5Omi5CpAQmA,11022
|
|
368
367
|
wafer_core/rollouts/providers.py,sha256=dcGJh1p30hstVbCDDtJ902lyafkg81DKjcOzb0uuKS0,1400
|
|
369
368
|
wafer_core/rollouts/remote.py,sha256=cAYpRCONlsTeRxzLiegAUfjZWGtqBNwZTHehMhk5ldA,8816
|
|
@@ -374,10 +373,19 @@ wafer_core/rollouts/slice.py,sha256=darOZO53BuSPfvv_KjOSzulGVSWbL4OuoE3k6xXpBFg,
|
|
|
374
373
|
wafer_core/rollouts/store.py,sha256=UDP9idDOEVs_0Pslx0K_Y8E1i-BeoqVSaxdQiaqtz1E,18051
|
|
375
374
|
wafer_core/rollouts/transform_messages.py,sha256=yldzdLgugNYb5Zxju7myFBel1tmrHXx9M399ImqPLGI,20891
|
|
376
375
|
wafer_core/rollouts/upload.py,sha256=hEqZfwgb0b4GYbrwRSA3fuqF70pqo6hyaQU59j3vM7E,4890
|
|
377
|
-
wafer_core/rollouts/_logging/__init__.py,sha256=
|
|
376
|
+
wafer_core/rollouts/_logging/__init__.py,sha256=njcyIodFQKYWS6AxXSpuSH6KBQ4hS1SH71wuvt4cApc,677
|
|
378
377
|
wafer_core/rollouts/_logging/color_formatter.py,sha256=x3qRKwHsUCFkgcIl8x_Ajjw82X2EedbTe14sCxMU4Kc,2267
|
|
379
378
|
wafer_core/rollouts/_logging/json_formatter.py,sha256=jJIa2IZCsu2C_Y1HXQi7hbI33x6L6shN_dqu-hmhxp4,2380
|
|
380
|
-
wafer_core/rollouts/_logging/logging_config.py,sha256=
|
|
379
|
+
wafer_core/rollouts/_logging/logging_config.py,sha256=JbHCBcKHaospwF3BlKfp1HzhZTUElhtOGghKHF21bvc,10581
|
|
380
|
+
wafer_core/rollouts/_logging/sample_handler.py,sha256=XhS5bVs6VKjABP7PeAp8CuEppqXUOm5rPCi-uEbt6QU,2122
|
|
381
|
+
wafer_core/rollouts/_pytui/__init__.py,sha256=Q4TwOoefOqDkudvaWJ7TQF6Ak32Nqs09h7jl8luPuo8,2368
|
|
382
|
+
wafer_core/rollouts/_pytui/app.py,sha256=NGNZ97nPq8ZZitMrY2tUgSEz_K3m5FqlNQpdy3geoEk,26163
|
|
383
|
+
wafer_core/rollouts/_pytui/console.py,sha256=0TBZ9MPfLls6wPQvI9KA_0k1348e0VckAvPwn2y6D9Q,10804
|
|
384
|
+
wafer_core/rollouts/_pytui/renderer.py,sha256=kFJoEsURAowj8KmKujcDJF00VDwiFhW4AP0fFD7hsrA,6429
|
|
385
|
+
wafer_core/rollouts/_pytui/spinner.py,sha256=ilIOIubZQz5C77m-Y6te55z8c1Kz8njy66CVsxMu9xw,2256
|
|
386
|
+
wafer_core/rollouts/_pytui/terminal.py,sha256=mCSZYAAH10Dl53fuCxQ2ZegkOmL1gFI5wEkTxQyOoKI,17736
|
|
387
|
+
wafer_core/rollouts/_pytui/text.py,sha256=KeGJAM6MJQQLSk9y2R-HnYgLqCcc8Qk4QfukctBuYA8,14107
|
|
388
|
+
wafer_core/rollouts/_pytui/theme.py,sha256=FdYrvQz66b7uMNbB2WCp8FPUvGSJ6vUHDaYnR6SSeSY,8067
|
|
381
389
|
wafer_core/rollouts/agent_presets/README.md,sha256=gGyE0P_2Cp5s5ekHVY3cYcz19g91Wb-wboFakcvBriQ,7584
|
|
382
390
|
wafer_core/rollouts/agent_presets/__init__.py,sha256=BLZOzAyC-cThQQQpAROeo4eEMOlMCrVEgnKYqzSsyS4,454
|
|
383
391
|
wafer_core/rollouts/agent_presets/base_preset.py,sha256=vDzDiVe_DHN2fiQrtGTW309EJgt3t1jaPAgkQCgDycw,2550
|
|
@@ -577,11 +585,11 @@ wafer_core/rollouts/training/rollout_gen/__init__.py,sha256=-jX1P4Q2HSwBZ733kA1R
|
|
|
577
585
|
wafer_core/rollouts/training/rollout_gen/async_rollout_manager.py,sha256=I1ZlQRonw-bZzxFKz94x22lLKwKBlw5Jqos5BDEDrIU,12488
|
|
578
586
|
wafer_core/rollouts/training/rollout_gen/rollout_generation.py,sha256=QlkYrvS1dKFIKseLLHC_IApy4bMJDuf5iDeM0rm9wTQ,8271
|
|
579
587
|
wafer_core/rollouts/training/rollout_gen/rollout_manager.py,sha256=SUOWxPqy8KPDkmYLJ-EWSm5NzDNZASBizcQuqgCGzGM,5011
|
|
580
|
-
wafer_core/rollouts/tui/DESIGN.md,sha256=
|
|
588
|
+
wafer_core/rollouts/tui/DESIGN.md,sha256=ssWAZa2CIMkEBMnpm7diSsQE7cagP_CzJQhdktQVM5Q,14273
|
|
581
589
|
wafer_core/rollouts/tui/__init__.py,sha256=-lAiJnFzsq9EAmynS2o0sJ0MBCsoKO8FRJycZbnx3xo,502
|
|
582
590
|
wafer_core/rollouts/tui/__main__.py,sha256=cL010zdA5VKP9eQVYZThIodr4mIbb126x4agDLBUmmk,117
|
|
583
591
|
wafer_core/rollouts/tui/demo.py,sha256=3jEmdFlIRLqdDINI9gOgWUV077ZFJ2AbG1yFH0QKEbo,1851
|
|
584
|
-
wafer_core/rollouts/tui/monitor.py,sha256=
|
|
592
|
+
wafer_core/rollouts/tui/monitor.py,sha256=BrFgFefp8p6XleSUTjjLvg75KX9QoofjZTxwI6SqUTM,40012
|
|
585
593
|
wafer_core/rollouts/tui/remote_runner.py,sha256=qdoZV-MWkja8NS3zUPdeHfxbbx4D7weLjIB3T3vvLp4,4132
|
|
586
594
|
wafer_core/rollouts/tui/terminal.py,sha256=-kp4rUAqwWUJbIMJAgouMoMPHUHN1OhTRh5STW1yqMI,4856
|
|
587
595
|
wafer_core/rollouts/tui/traces.py,sha256=-VE32AGY03X1tGGZNm2jFSS8oWjagshlVTv_XXgOArc,62977
|
|
@@ -636,6 +644,16 @@ wafer_core/tools/capture_tool/core.py,sha256=zQPilq5ZDJxBm0MFAzrl1-I2A2fyBGPRs8r
|
|
|
636
644
|
wafer_core/tools/capture_tool/dtypes.py,sha256=1Vm5obOCYc-Njuwkp7uqh_W4lqtYurT3b8lLnunc2Q8,3790
|
|
637
645
|
wafer_core/tools/capture_tool/executor.py,sha256=n1DVfbsP60yJAazx9C9Kwed9LB7AcKXJcoDnhno7ydU,1495
|
|
638
646
|
wafer_core/tools/capture_tool/metrics.py,sha256=BFZNmdE-kh3LneYdWXTNZmlLuo-DCrP5aEBHxEQYJDU,10890
|
|
647
|
+
wafer_core/tools/compile/__init__.py,sha256=8VyaMDDPxg4DcT-rwMf9lcNhAanWnmsqijUJYsuzJNg,615
|
|
648
|
+
wafer_core/tools/compile/compiler.py,sha256=rGPvfqLTg-7y3hyFEihF6lxiEOfbIsRwfvOZSaVJ2_A,10192
|
|
649
|
+
wafer_core/tools/compile/modal_compile.py,sha256=zYrkAtGYkDiM6tJfH_hD-mJ0LqCW5HCSsf_6fADJIbI,13310
|
|
650
|
+
wafer_core/tools/compile/types.py,sha256=8Hjh6Mz2a7s2JjtKYQq-l3X41gmywnbKk3tc1wvbMLM,3277
|
|
651
|
+
wafer_core/tools/compile/tests/__init__.py,sha256=gSuBMN-7VayQ9HgyNuUXRumenwk7jtq86ZxdCgFjeYE,41
|
|
652
|
+
wafer_core/tools/compile/tests/test_compiler.py,sha256=kQ-YTLY8ETnS83nQ8xVSygKY532epxqRTsGx311SG7w,20795
|
|
653
|
+
wafer_core/tools/compile/tests/test_modal_integration.py,sha256=EIufgxGmZedovjchOp8nDWd9fM-nVAd59GsPZddUnc4,9551
|
|
654
|
+
wafer_core/tools/compile/tests/test_data/utils.cuh,sha256=nLGyklqWX2RJKNmdq6eBZX9eKo06jGk6e1q5kpNQGWY,155
|
|
655
|
+
wafer_core/tools/compile/tests/test_data/vector_add.cu,sha256=ZCXfrrr0SSD_g-ekZ9fAhwIq3hlQWqLhGmiLYGgKQ1s,213
|
|
656
|
+
wafer_core/tools/compile/tests/test_data/with_header.cu,sha256=MktwDpDDG4zH3HEgvwqZKn3n9cb7_v-OczXEsybORRM,215
|
|
639
657
|
wafer_core/tools/dispatch_baseline/__init__.py,sha256=RgWDH5rPYGDnC_MDosVAygsBj9SYLZFJQqF7QjNYwAw,1635
|
|
640
658
|
wafer_core/tools/dispatch_baseline/analyzer.py,sha256=Js2ctkd_3qTbV6u8bTUBfwrnof3X2WMD8F6K2qZQowE,5229
|
|
641
659
|
wafer_core/tools/dispatch_baseline/client.py,sha256=-kzRYGEFG0QnrHtgz5WATAgk1_RzQ2RGuUt7L1A6Mww,5611
|
|
@@ -676,7 +694,6 @@ wafer_core/utils/__init__.py,sha256=oPHgkMkE7wS2lYKLlXrw4Ia5EHnpVcGHFfpWebIlVKs,
|
|
|
676
694
|
wafer_core/utils/backend.py,sha256=zt5AX00OXSIstprvQ1_WNf_PQYphD2y53kOXWvg20RY,8986
|
|
677
695
|
wafer_core/utils/code_validation.py,sha256=UqS4UVDxO-atdbn6i7JygX6IFPITvT56zZn1t-ZNuM8,4692
|
|
678
696
|
wafer_core/utils/environment_serialization.py,sha256=cVDkapx0JC60CekazgirPEMAeGZhbLdX1WMIkFvId60,5047
|
|
679
|
-
wafer_core/utils/event_streaming.py,sha256=Sg3-hI043Ofc2b29Z3DWrKgu4HkfJoIqhhbfGRJv70Q,2260
|
|
680
697
|
wafer_core/utils/exceptions.py,sha256=Tl6Ml47Sr55DLEO_ehZc9jC5bNJRONslKCga5S2U4Rc,12164
|
|
681
698
|
wafer_core/utils/execution_types.py,sha256=j2AGSoEIoY13BnGK9ggZQrM1BpVf6KjXZg2ASObhOqA,1159
|
|
682
699
|
wafer_core/utils/gpu_environment_utils.py,sha256=IYIQkFv_dW9jVd1oPAA7yszXrlbApXnVLiXM_Eh89U0,9560
|
|
@@ -705,6 +722,6 @@ wafer_core/utils/modal_execution/modal_app.py,sha256=VfS2cX8gHtnlPXemmMcEwDPeQdh
|
|
|
705
722
|
wafer_core/utils/modal_execution/modal_config.py,sha256=7cGX9TGqilQ3qxI3OFGXV5orjtyRU-PEDOJ4vP2oxno,4421
|
|
706
723
|
wafer_core/utils/modal_execution/modal_execution.py,sha256=gChjnV6jqA3A7IRP3DfvV5cSfm_MN0X4f7JZufXgdZE,24594
|
|
707
724
|
wafer_core/utils/modal_execution/test_modal.py,sha256=_jqou_hrLs1Daf1590Pnb0a_lXMMa2rczAPpW9HpoNQ,8153
|
|
708
|
-
wafer_core-0.1.
|
|
709
|
-
wafer_core-0.1.
|
|
710
|
-
wafer_core-0.1.
|
|
725
|
+
wafer_core-0.1.39.dist-info/METADATA,sha256=OcMn8TZzsUvPT2JBa0xYK_sAT_og1PAZd-DpDcLG1XA,1477
|
|
726
|
+
wafer_core-0.1.39.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
727
|
+
wafer_core-0.1.39.dist-info/RECORD,,
|