mplang-nightly 0.1.dev284__py3-none-any.whl → 0.1.dev285__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.
- mplang/edsl/README.md +169 -196
- mplang/edsl/typing.py +1 -1
- {mplang_nightly-0.1.dev284.dist-info → mplang_nightly-0.1.dev285.dist-info}/METADATA +1 -1
- {mplang_nightly-0.1.dev284.dist-info → mplang_nightly-0.1.dev285.dist-info}/RECORD +7 -7
- {mplang_nightly-0.1.dev284.dist-info → mplang_nightly-0.1.dev285.dist-info}/WHEEL +0 -0
- {mplang_nightly-0.1.dev284.dist-info → mplang_nightly-0.1.dev285.dist-info}/entry_points.txt +0 -0
- {mplang_nightly-0.1.dev284.dist-info → mplang_nightly-0.1.dev285.dist-info}/licenses/LICENSE +0 -0
mplang/edsl/README.md
CHANGED
|
@@ -1,279 +1,252 @@
|
|
|
1
|
-
# MPLang EDSL -
|
|
1
|
+
# MPLang EDSL - Embedded Domain-Specific Language
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The EDSL (Embedded Domain-Specific Language) module is the core infrastructure for MPLang's graph-based IR system. It provides the foundational components for tracing Python functions into SSA-based graphs, type checking, and program compilation.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Overview
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
MPLang EDSL uses a modern **Operation List + SSA** approach for better analyzability and optimization, similar to PyTorch FX and JAX. The EDSL captures Python function execution into an explicit graph IR that can be analyzed, optimized, and executed across distributed parties and devices.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
## Architecture
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
2. **@primitive decorators** hide complexity and limit flexibility
|
|
13
|
-
3. **Type system** is split between `mptype.MPType` and `typing.BaseType`
|
|
14
|
-
4. **No clear separation** between IR, frontend, and backend
|
|
11
|
+
### Key Components
|
|
15
12
|
|
|
16
|
-
|
|
13
|
+
```
|
|
14
|
+
mplang/edsl/
|
|
15
|
+
├── typing.py # Unified type system (MPType hierarchy)
|
|
16
|
+
├── graph.py # IR: Operation List + SSA (Graph, Operation, Value)
|
|
17
|
+
├── primitive.py # Primitive abstraction and registration
|
|
18
|
+
├── object.py # Object hierarchy (TraceObject, runtime values)
|
|
19
|
+
├── context.py # Context management (tracing vs execution)
|
|
20
|
+
├── tracer.py # Explicit tracer for graph construction
|
|
21
|
+
├── jit.py # @jit decorator for function compilation
|
|
22
|
+
├── program.py # Compiled program representation
|
|
23
|
+
├── printer.py # Graph visualization and debugging
|
|
24
|
+
├── registry.py # Op registry and dialect management
|
|
25
|
+
└── serde.py # Serialization/deserialization
|
|
26
|
+
```
|
|
17
27
|
|
|
18
|
-
|
|
28
|
+
### Type System
|
|
19
29
|
|
|
20
|
-
|
|
30
|
+
**Single source of truth**: `mplang.edsl.typing.MPType`
|
|
31
|
+
|
|
32
|
+
The EDSL provides a unified, extensible type system that supports:
|
|
33
|
+
|
|
34
|
+
- **ScalarType**: `i32`, `i64`, `f32`, `f64`, `bool`, etc.
|
|
35
|
+
- **TensorType**: Multi-dimensional arrays with shape and dtype
|
|
36
|
+
- **TableType**: Structured tabular data
|
|
37
|
+
- **VectorType**: Encrypted vectors (for FHE/MPC)
|
|
38
|
+
- **SSType**: Secret-shared values (for MPC)
|
|
39
|
+
- **CustomType**: Extensible type system for domain-specific types
|
|
21
40
|
|
|
22
|
-
**From** (Expr Tree):
|
|
23
41
|
```python
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
)
|
|
42
|
+
from mplang.edsl.typing import TensorType, VectorType, f32, i64
|
|
43
|
+
|
|
44
|
+
# Define types
|
|
45
|
+
plaintext: TensorType = TensorType(f32, (4096,))
|
|
46
|
+
ciphertext: VectorType = VectorType(f32, 4096)
|
|
47
|
+
counter: TensorType = TensorType(i64, ()) # scalar
|
|
28
48
|
```
|
|
29
49
|
|
|
30
|
-
|
|
50
|
+
### Graph IR
|
|
51
|
+
|
|
52
|
+
The Graph IR uses SSA (Static Single Assignment) form with explicit operations:
|
|
53
|
+
|
|
31
54
|
```python
|
|
32
|
-
|
|
33
|
-
%
|
|
34
|
-
%
|
|
35
|
-
|
|
55
|
+
# Example graph structure:
|
|
56
|
+
# %0 = input "x"
|
|
57
|
+
# %1 = input "y"
|
|
58
|
+
# %2 = add %0, %1
|
|
59
|
+
# return %2
|
|
36
60
|
```
|
|
37
61
|
|
|
38
|
-
|
|
62
|
+
Each operation has:
|
|
63
|
+
- **opcode**: Operation type (e.g., "add", "mul", "simp.pcall")
|
|
64
|
+
- **inputs**: List of input Values (SSA variables)
|
|
65
|
+
- **outputs**: List of output Values
|
|
66
|
+
- **attributes**: Operation-specific metadata
|
|
39
67
|
|
|
40
|
-
|
|
68
|
+
### Tracing and Compilation
|
|
41
69
|
|
|
42
70
|
```python
|
|
43
|
-
from
|
|
71
|
+
from mplang.edsl import jit, trace, Tracer
|
|
44
72
|
|
|
45
|
-
#
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
73
|
+
# Method 1: @jit decorator (automatic tracing and execution)
|
|
74
|
+
@jit
|
|
75
|
+
def my_program(x, y):
|
|
76
|
+
return x + y
|
|
49
77
|
|
|
50
|
-
|
|
78
|
+
result = my_program(data_x, data_y)
|
|
51
79
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
80
|
+
# Method 2: Explicit tracing (returns TracedFunction with .graph)
|
|
81
|
+
traced_fn = trace(my_program, x_obj, y_obj)
|
|
82
|
+
graph = traced_fn.graph
|
|
55
83
|
|
|
84
|
+
# Method 3: Manual tracing with Tracer context
|
|
56
85
|
tracer = Tracer()
|
|
57
|
-
with tracer:
|
|
58
|
-
result =
|
|
86
|
+
with tracer:
|
|
87
|
+
result = my_program(x, y)
|
|
59
88
|
graph = tracer.finalize(result)
|
|
60
89
|
```
|
|
61
90
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
Easy to add new backends:
|
|
65
|
-
- FHE (Fully Homomorphic Encryption)
|
|
66
|
-
- TEE (Trusted Execution Environment)
|
|
67
|
-
- Custom accelerators
|
|
68
|
-
|
|
69
|
-
### 5. Layered API Architecture
|
|
91
|
+
## API Layers
|
|
70
92
|
|
|
71
93
|
The EDSL provides two distinct API layers:
|
|
72
94
|
|
|
73
|
-
1.
|
|
74
|
-
- Direct manipulation of the `Graph` IR.
|
|
75
|
-
- Generic `add_op` method (pure graph API, no op semantics).
|
|
76
|
-
- Analogous to MLIR's generic operation construction.
|
|
77
|
-
- Used by compiler passes and backend implementations.
|
|
95
|
+
### 1. High-Level API (User-Facing)
|
|
78
96
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
- The primary interface for users.
|
|
97
|
+
- **Tracing**: `@jit`, `trace()`, `Tracer` context manager
|
|
98
|
+
- **Primitives**: `@primitive` decorator for defining new operations
|
|
99
|
+
- **Types**: Type annotations and type inference
|
|
100
|
+
- **Objects**: Automatic wrapping of Python values
|
|
84
101
|
|
|
85
|
-
|
|
102
|
+
This is the **primary interface for users**.
|
|
86
103
|
|
|
87
|
-
|
|
88
|
-
mplang/edsl/
|
|
89
|
-
├── __init__.py # Public API
|
|
90
|
-
├── README.md # This file
|
|
91
|
-
│
|
|
92
|
-
├── design/ # Design documents
|
|
93
|
-
│ ├── architecture.md # Complete architecture overview
|
|
94
|
-
│ ├── type_system.md # Type system design
|
|
95
|
-
│ └── migration.md # Migration from mplang.core
|
|
96
|
-
│
|
|
97
|
-
├── typing.py # ✅ Unified type system
|
|
98
|
-
├── graph.py # ✅ IR: Operation List + SSA
|
|
99
|
-
├── primitive.py # ✅ Primitive abstraction
|
|
100
|
-
├── object.py # ✅ TraceObject/InterpObject
|
|
101
|
-
├── context.py # ✅ Context management
|
|
102
|
-
├── tracer.py # ✅ Explicit tracer
|
|
103
|
-
├── interpreter.py # ✅ Interpreter + GraphInterpreter
|
|
104
|
-
└── jit.py # ✅ @jit decorator
|
|
105
|
-
```
|
|
104
|
+
### 2. Low-Level API (Compiler/Backend)
|
|
106
105
|
|
|
107
|
-
|
|
106
|
+
- **Graph manipulation**: Direct `Graph.add_op()` calls
|
|
107
|
+
- **Op registry**: `register_impl()`, `get_impl()`
|
|
108
|
+
- **Serialization**: Graph to/from protobuf
|
|
109
|
+
- **Execution**: Direct graph interpretation via runtime
|
|
108
110
|
|
|
109
|
-
|
|
111
|
+
Used by compiler passes and backend implementations.
|
|
110
112
|
|
|
111
|
-
|
|
112
|
-
- [x] Graph IR (`graph.py`) - 388 lines
|
|
113
|
-
- [x] Primitive abstraction (`primitive.py`) - 338 lines
|
|
114
|
-
- [x] Object hierarchy (`object.py`) - 153 lines
|
|
115
|
-
- [x] Context system (`context.py`) - 117 lines
|
|
116
|
-
- [x] Tracer (`tracer.py`) - 201 lines
|
|
117
|
-
- [x] Interpreter (`interpreter.py`) - 66 lines
|
|
118
|
-
- [x] JIT decorator (`jit.py`) - 42 lines
|
|
119
|
-
- [x] Design documents
|
|
120
|
-
- [x] **153 tests passing** (140 edsl + 13 core2)
|
|
113
|
+
## Integration with Dialects
|
|
121
114
|
|
|
122
|
-
|
|
123
|
-
- [ ] Integration with existing ops/kernels
|
|
124
|
-
- [ ] Migration utilities
|
|
125
|
-
- [ ] Performance benchmarks
|
|
115
|
+
The EDSL is dialect-agnostic. Dialects provide domain-specific operations:
|
|
126
116
|
|
|
127
|
-
|
|
128
|
-
-
|
|
117
|
+
- **mplang.dialects.simp**: SPMD/MPI-style operations (pcall_static, pcall_dynamic)
|
|
118
|
+
- **mplang.dialects.tensor**: Tensor operations (run_jax for JAX-backed computation, structural ops)
|
|
119
|
+
- **mplang.dialects.table**: Table operations (run_sql, read/write, conversions)
|
|
120
|
+
- **mplang.dialects.spu**: Secure multi-party computation
|
|
121
|
+
- **mplang.dialects.tee**: Trusted execution environment
|
|
122
|
+
- **mplang.dialects.bfv**: Homomorphic encryption (BFV scheme)
|
|
123
|
+
- **mplang.dialects.phe**: Paillier homomorphic encryption
|
|
129
124
|
|
|
130
|
-
|
|
131
|
-
- [ ] Advanced optimizations
|
|
132
|
-
- [ ] More backends (TEE, MPC)
|
|
125
|
+
Each dialect registers its operations and type implementations with the EDSL.
|
|
133
126
|
|
|
134
|
-
##
|
|
127
|
+
## Examples
|
|
135
128
|
|
|
136
|
-
###
|
|
129
|
+
### Basic Tracing
|
|
137
130
|
|
|
138
131
|
```python
|
|
139
|
-
|
|
132
|
+
import mplang.edsl as el
|
|
133
|
+
from mplang.dialects.simp import pcall_static
|
|
134
|
+
|
|
135
|
+
@el.jit
|
|
136
|
+
def distribute_computation(x, y):
|
|
137
|
+
# Execute computation on parties 0 and 1
|
|
138
|
+
result = pcall_static((0, 1), lambda a, b: a + b, x, y)
|
|
139
|
+
return result
|
|
140
|
+
```
|
|
140
141
|
|
|
141
|
-
|
|
142
|
-
PlaintextVec = Tensor[f32, (4096,)]
|
|
143
|
-
CiphertextVec = Vector[f32, 4096]
|
|
144
|
-
EncryptionKey = CustomType("EncryptionKey")
|
|
142
|
+
### Custom Primitives
|
|
145
143
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
144
|
+
```python
|
|
145
|
+
from mplang.edsl import primitive
|
|
146
|
+
from mplang.edsl.typing import TensorType, f32
|
|
147
|
+
|
|
148
|
+
@primitive("custom_op")
|
|
149
|
+
def custom_op_abstract(x: TensorType, y: TensorType) -> TensorType:
|
|
150
|
+
# Type inference (abstract evaluation) for the "custom_op" primitive.
|
|
151
|
+
# In this simple example, we say the result has the same abstract type as `x`.
|
|
152
|
+
return x
|
|
149
153
|
```
|
|
150
154
|
|
|
151
|
-
###
|
|
155
|
+
### Graph Inspection
|
|
152
156
|
|
|
153
157
|
```python
|
|
154
|
-
from
|
|
155
|
-
from mplang2.dialects.simp import pcall_static
|
|
158
|
+
from mplang.edsl import trace, format_graph
|
|
156
159
|
|
|
157
|
-
def
|
|
158
|
-
|
|
159
|
-
return pcall_static((0, 1), lambda a, b: a + b, x, y)
|
|
160
|
+
def my_fn(x):
|
|
161
|
+
return x * 2 + 1
|
|
160
162
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
# Inputs are automatically lifted to TraceObjects
|
|
164
|
-
result = my_program(x, y)
|
|
163
|
+
# Trace the function
|
|
164
|
+
traced_fn = trace(my_fn, x_obj)
|
|
165
165
|
|
|
166
|
-
#
|
|
167
|
-
graph
|
|
166
|
+
# Print graph IR
|
|
167
|
+
print(format_graph(traced_fn.graph))
|
|
168
168
|
```
|
|
169
169
|
|
|
170
|
-
##
|
|
171
|
-
|
|
172
|
-
Detailed design documents are in the `design/` subdirectory:
|
|
173
|
-
|
|
174
|
-
### 1. [architecture.md](design/architecture.md)
|
|
170
|
+
## Testing
|
|
175
171
|
|
|
176
|
-
|
|
177
|
-
- Core components (Tracer, Graph)
|
|
178
|
-
- Design principles (Closed-World, TracedFunction vs First-Class Functions)
|
|
179
|
-
- Control flow handling (Dialect-specific, e.g., `simp.uniform_cond`)
|
|
180
|
-
- Comparison with JAX, PyTorch, TensorFlow
|
|
172
|
+
The EDSL has comprehensive test coverage:
|
|
181
173
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
- Three orthogonal dimensions (Layout, Encryption, Distribution)
|
|
186
|
-
- Type composition examples
|
|
187
|
-
- Ops writing guide
|
|
188
|
-
- Migration strategy
|
|
174
|
+
```bash
|
|
175
|
+
# Run all EDSL tests
|
|
176
|
+
uv run pytest tests/edsl/
|
|
189
177
|
|
|
190
|
-
|
|
178
|
+
# Run specific test files
|
|
179
|
+
uv run pytest tests/edsl/test_tracer.py
|
|
180
|
+
uv run pytest tests/edsl/test_typing.py
|
|
181
|
+
uv run pytest tests/edsl/test_graph.py
|
|
182
|
+
```
|
|
191
183
|
|
|
192
|
-
|
|
193
|
-
-
|
|
194
|
-
-
|
|
195
|
-
-
|
|
184
|
+
Test files:
|
|
185
|
+
- `test_typing.py`: Type system tests
|
|
186
|
+
- `test_graph.py`: Graph IR tests
|
|
187
|
+
- `test_tracer.py`: Tracing functionality
|
|
188
|
+
- `test_primitive.py`: Primitive operations
|
|
189
|
+
- `test_context.py`: Context management
|
|
190
|
+
- `test_printer.py`: Graph visualization
|
|
191
|
+
- `test_serde.py`: Serialization/deserialization
|
|
192
|
+
- `test_compiled_program_artifact.py`: Program compilation
|
|
196
193
|
|
|
197
|
-
##
|
|
194
|
+
## Development
|
|
198
195
|
|
|
199
|
-
|
|
200
|
-
mplang/
|
|
201
|
-
├── core/ # Stable API (current production)
|
|
202
|
-
│ ├── primitive.py
|
|
203
|
-
│ ├── tracer.py
|
|
204
|
-
│ └── expr/
|
|
205
|
-
│
|
|
206
|
-
├── edsl/ # Experimental (this directory)
|
|
207
|
-
│ ├── typing.py # Can be used independently
|
|
208
|
-
│ ├── graph.py # Future replacement for core.expr
|
|
209
|
-
│ └── tracer.py # Future replacement for core.tracer
|
|
210
|
-
│
|
|
211
|
-
├── ops/ # Shared between core and edsl
|
|
212
|
-
├── kernels/ # Shared between core and edsl
|
|
213
|
-
└── runtime/ # Shared between core and edsl
|
|
214
|
-
```
|
|
196
|
+
### Adding New Operations
|
|
215
197
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
4. Deprecate `core` in future major version
|
|
198
|
+
1. Define the operation in the appropriate dialect (e.g., `mplang/dialects/tensor.py`)
|
|
199
|
+
2. Register the operation with `@primitive` or explicit registry
|
|
200
|
+
3. Implement backend execution in `mplang/backends/`
|
|
201
|
+
4. Add tests in `tests/dialects/` and `tests/backends/`
|
|
221
202
|
|
|
222
|
-
|
|
203
|
+
### Type System Extension
|
|
223
204
|
|
|
224
|
-
|
|
205
|
+
To add a new type:
|
|
225
206
|
|
|
226
|
-
1.
|
|
227
|
-
2.
|
|
228
|
-
3.
|
|
229
|
-
4.
|
|
207
|
+
1. Subclass `MPType` in `mplang/edsl/typing.py`
|
|
208
|
+
2. Implement required methods (`__repr__`, `__eq__`, `__hash__`)
|
|
209
|
+
3. Add serialization support in `typing.py` and `serde.py`
|
|
210
|
+
4. Add tests in `tests/edsl/test_typing.py`
|
|
230
211
|
|
|
231
|
-
###
|
|
212
|
+
### Code Style
|
|
232
213
|
|
|
233
214
|
```bash
|
|
234
|
-
#
|
|
235
|
-
uv
|
|
236
|
-
|
|
237
|
-
# Run tests (future)
|
|
238
|
-
uv run pytest mplang/edsl/
|
|
215
|
+
# Format code
|
|
216
|
+
uv run ruff format mplang/edsl/
|
|
239
217
|
|
|
240
218
|
# Lint
|
|
241
|
-
uv run ruff check mplang/edsl/
|
|
242
|
-
uv run ruff format mplang/edsl/
|
|
219
|
+
uv run ruff check mplang/edsl/ --fix
|
|
243
220
|
|
|
244
221
|
# Type check
|
|
245
222
|
uv run mypy mplang/edsl/
|
|
246
223
|
```
|
|
247
224
|
|
|
248
|
-
##
|
|
249
|
-
|
|
250
|
-
### Q: Should I use `mplang.edsl` in production?
|
|
251
|
-
|
|
252
|
-
**A**: No, use `mplang.core`. `mplang.edsl` is experimental.
|
|
253
|
-
|
|
254
|
-
### Q: Can I use `mplang.edsl.typing` independently?
|
|
225
|
+
## Relationship with Other Components
|
|
255
226
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
### Q: How can I help?
|
|
227
|
+
```
|
|
228
|
+
mplang/
|
|
229
|
+
├── edsl/ # Core IR and tracing (this module)
|
|
230
|
+
├── dialects/ # Domain-specific operations
|
|
231
|
+
├── backends/ # Execution implementations
|
|
232
|
+
├── runtime/ # Runtime execution engine
|
|
233
|
+
├── libs/ # High-level libraries (device, ml, mpc)
|
|
234
|
+
└── kernels/ # Low-level kernel implementations
|
|
235
|
+
```
|
|
267
236
|
|
|
268
|
-
**
|
|
237
|
+
**Design documents** are in the project root `design/` directory:
|
|
238
|
+
- [`design/architecture.md`](../../design/architecture.md): Overall architecture
|
|
239
|
+
- [`design/control_flow.md`](../../design/control_flow.md): Control flow handling
|
|
240
|
+
- [`design/compile_execute_decoupling.md`](../../design/compile_execute_decoupling.md): Compilation model
|
|
269
241
|
|
|
270
242
|
## References
|
|
271
243
|
|
|
272
|
-
- **
|
|
244
|
+
- **MPLang Documentation**: See repository root README.md and AGENTS.md
|
|
245
|
+
- **Design Documents**: `/design/` directory
|
|
246
|
+
- **PyTorch FX**: https://pytorch.org/docs/stable/fx.html
|
|
273
247
|
- **JAX jaxpr**: https://jax.readthedocs.io/en/latest/jaxpr.html
|
|
274
248
|
- **MLIR**: https://mlir.llvm.org/
|
|
275
249
|
|
|
276
250
|
---
|
|
277
251
|
|
|
278
|
-
**Last Updated**:
|
|
279
|
-
**Maintainers**: MPLang Team
|
|
252
|
+
**Last Updated**: 2026-02-02
|
mplang/edsl/typing.py
CHANGED
|
@@ -59,7 +59,7 @@ rather than by creating a large, monolithic set of specific types.
|
|
|
59
59
|
- `Tensor`: A multi-dimensional array of a `ScalarType` element type.
|
|
60
60
|
- `Table`: A dictionary-like structure with named columns of any type.
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
2. **Encryption Types**: Wrap other types to confer privacy properties by making them opaque.
|
|
63
63
|
- `SS`: A single share of a secret-shared value.
|
|
64
64
|
- Note: Element-wise HE types (like `phe.CiphertextType`) are defined in their respective dialects (e.g., `phe`).
|
|
65
65
|
|
|
@@ -40,7 +40,7 @@ mplang/dialects/store.py,sha256=FkvTOdcNC_oCgJPMZfdpGLlKZAlelEqRIZ2WgMgYH-8,2108
|
|
|
40
40
|
mplang/dialects/table.py,sha256=i9ruyh91_tSWu9rsLomrBUfqRdbHiZMMMJzNKfMrAUc,13534
|
|
41
41
|
mplang/dialects/tee.py,sha256=BMFSbeK-Ck2jQP4qY9bZeNYTxEa7uEtUWLZLC4BPQxk,10111
|
|
42
42
|
mplang/dialects/tensor.py,sha256=7aAYKaMaFjJ8N25yPFnmVhUuUdKJYy-M-a4NsZGE7kY,39893
|
|
43
|
-
mplang/edsl/README.md,sha256=
|
|
43
|
+
mplang/edsl/README.md,sha256=T_gmLkcWvN5b8jU6DX59LMZdgdgGupD9YlpPzH9FwlQ,7750
|
|
44
44
|
mplang/edsl/__init__.py,sha256=WL4efo6uY1br781_8IaCkSi7yCUldcfJfbtFsn6Fdj4,2698
|
|
45
45
|
mplang/edsl/context.py,sha256=Ln8n3bDe8_ISe42TAGzUuz8fw57-tu1APuihMfAtW1Y,10075
|
|
46
46
|
mplang/edsl/graph.py,sha256=nCeCN7-bxfzyv40fmxcEXOaVUx14cOCaHfFb7A9OBnE,14968
|
|
@@ -52,7 +52,7 @@ mplang/edsl/program.py,sha256=_JdEU2-nb79VlFLcgMJf4JS30TARBeUIzno0y0SFVsg,4467
|
|
|
52
52
|
mplang/edsl/registry.py,sha256=hudXZPUrUUueEwgksDKN0cnE3iiXucuTaDdDK8uSPmk,6822
|
|
53
53
|
mplang/edsl/serde.py,sha256=8K94laE8ObeGuBoF6m7g3A-xEe98EvqQ_6ZPPspddAY,11641
|
|
54
54
|
mplang/edsl/tracer.py,sha256=WQFNL2ZgXSLjxD4JA7cXIDUKIQXe3aZ94qer57IKPXc,23128
|
|
55
|
-
mplang/edsl/typing.py,sha256=
|
|
55
|
+
mplang/edsl/typing.py,sha256=Hmn_w04XWepmvurN1ZEb6rVNW1kW9bOBYe3AkD8CAJc,29283
|
|
56
56
|
mplang/kernels/Makefile,sha256=5PoPpajcb_8ByPGNHzVytmovXUwkjJs_K8MbXX9qDYs,1033
|
|
57
57
|
mplang/kernels/__init__.py,sha256=J_rDl9lAXd7QL3Nt_P3YX6j9yge7ssguSaHuafPZNKE,876
|
|
58
58
|
mplang/kernels/gf128.cpp,sha256=WIvCr3MijzwJxMi1Wnfhm8aWT8oL0fia6FeyTmFJtPQ,5975
|
|
@@ -99,8 +99,8 @@ mplang/tool/program.py,sha256=W3H8bpPirnoJ4ZrmyPYuMCPadJis20o__n_1MKqCsWU,11058
|
|
|
99
99
|
mplang/utils/__init__.py,sha256=Hwrwti2nfPxWUXV8DN6T1QaqXH_Jsd27k8UMSdBGUns,1073
|
|
100
100
|
mplang/utils/func_utils.py,sha256=aZ-X43w8JKJgiF-IUMS0G7QqrNeoTM5ZPzRNd-tKxpw,5180
|
|
101
101
|
mplang/utils/logging.py,sha256=9dMhwprVbx1WMGJrgoQbWmV50vyYuLU4NSPnetcl1Go,7237
|
|
102
|
-
mplang_nightly-0.1.
|
|
103
|
-
mplang_nightly-0.1.
|
|
104
|
-
mplang_nightly-0.1.
|
|
105
|
-
mplang_nightly-0.1.
|
|
106
|
-
mplang_nightly-0.1.
|
|
102
|
+
mplang_nightly-0.1.dev285.dist-info/METADATA,sha256=cXD5_vMkz7YYbixonHu4GN49cnfgzuGgaofeV2VJ9z4,16783
|
|
103
|
+
mplang_nightly-0.1.dev285.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
104
|
+
mplang_nightly-0.1.dev285.dist-info/entry_points.txt,sha256=mG1oJT-GAjQR834a62_QIWb7litzWPPyVnwFqm-rWuY,55
|
|
105
|
+
mplang_nightly-0.1.dev285.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
106
|
+
mplang_nightly-0.1.dev285.dist-info/RECORD,,
|
|
File without changes
|
{mplang_nightly-0.1.dev284.dist-info → mplang_nightly-0.1.dev285.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{mplang_nightly-0.1.dev284.dist-info → mplang_nightly-0.1.dev285.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|