mplang-nightly 0.1.dev283__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 CHANGED
@@ -1,279 +1,252 @@
1
- # MPLang EDSL - Experimental Architecture
1
+ # MPLang EDSL - Embedded Domain-Specific Language
2
2
 
3
- **⚠️ Status**: Experimental / Work in Progress
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
- This directory contains the next-generation EDSL (Embedded Domain-Specific Language) architecture for MPLang.
5
+ ## Overview
6
6
 
7
- ## Why a New Architecture?
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
- The current `mplang.core` architecture (Expr Tree + @primitive) has served us well, but we're hitting limitations:
9
+ ## Architecture
10
10
 
11
- 1. **Expr Tree** is hard to optimize (visitor pattern, nested structure)
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
- Modern EDSLs (torch.fx, JAX) use **Operation List + SSA** for better analyzability and optimization.
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
- ## Goals
28
+ ### Type System
19
29
 
20
- ### 1. Modern IR (Operation List)
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
- CallExpr(
25
- func=add,
26
- args=[VariableExpr("x"), VariableExpr("y")]
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
- **To** (Operation List):
50
+ ### Graph IR
51
+
52
+ The Graph IR uses SSA (Static Single Assignment) form with explicit operations:
53
+
31
54
  ```python
32
- %0 = input "x"
33
- %1 = input "y"
34
- %2 = add %0, %1
35
- return %2
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
- ### 2. Unified Type System
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
- **Single source of truth**: `mplang.edsl.typing.MPType`
68
+ ### Tracing and Compilation
41
69
 
42
70
  ```python
43
- from mplang2.edsl.typing import Tensor, Vector, MPType, f32
71
+ from mplang.edsl import jit, trace, Tracer
44
72
 
45
- # All types use BaseType
46
- plaintext: MPType = Tensor[f32, (4096,)]
47
- ciphertext: MPType = Vector[f32, 4096]
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
- ### 3. Explicit Tracing
78
+ result = my_program(data_x, data_y)
51
79
 
52
- **Clean context management**:
53
- ```python
54
- from mplang2.edsl import Tracer
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: # Context manager protocol
58
- result = my_function(x, y)
86
+ with tracer:
87
+ result = my_program(x, y)
59
88
  graph = tracer.finalize(result)
60
89
  ```
61
90
 
62
- ### 4. Extensibility
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. **Low-Level API (Graph Manipulation)**:
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
- 2. **High-Level API (Tracing)**:
80
- - Uses `Tracer` + `Primitive` (with `abstract_eval`).
81
- - Pythonic interface (functions, operators).
82
- - Automatic type inference and graph construction.
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
- ## Directory Structure
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
- ## Implementation Status
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
- ### Completed (Phase 1-4)
111
+ Used by compiler passes and backend implementations.
110
112
 
111
- - [x] Type system (`typing.py`) - 649 lines
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
- ### 🚧 In Progress
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
- ### Dropped / Deprecated
128
- - [x] Builder API (`builder.py`) - Integrated into `Tracer`
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
- ### 📋 Planned
131
- - [ ] Advanced optimizations
132
- - [ ] More backends (TEE, MPC)
125
+ Each dialect registers its operations and type implementations with the EDSL.
133
126
 
134
- ## Quick Start
127
+ ## Examples
135
128
 
136
- ### Using the New Type System
129
+ ### Basic Tracing
137
130
 
138
131
  ```python
139
- from mplang2.edsl.typing import Tensor, Vector, CustomType, f32
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
- # Define types
142
- PlaintextVec = Tensor[f32, (4096,)]
143
- CiphertextVec = Vector[f32, 4096]
144
- EncryptionKey = CustomType("EncryptionKey")
142
+ ### Custom Primitives
145
143
 
146
- # Type annotations
147
- def encrypt(data: PlaintextVec, key: EncryptionKey) -> CiphertextVec:
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
- ### Using the Tracer (Graph Construction)
155
+ ### Graph Inspection
152
156
 
153
157
  ```python
154
- from mplang2.edsl import Tracer
155
- from mplang2.dialects.simp import pcall_static
158
+ from mplang.edsl import trace, format_graph
156
159
 
157
- def my_program(x, y):
158
- # This function is traced into a Graph
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
- tracer = Tracer()
162
- with tracer:
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
- # Finalize graph
167
- graph = tracer.finalize(result)
166
+ # Print graph IR
167
+ print(format_graph(traced_fn.graph))
168
168
  ```
169
169
 
170
- ## Design Documents
171
-
172
- Detailed design documents are in the `design/` subdirectory:
173
-
174
- ### 1. [architecture.md](design/architecture.md)
170
+ ## Testing
175
171
 
176
- Complete EDSL architecture overview covering:
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
- ### 2. [type_system.md](design/type_system.md)
183
-
184
- New type system design:
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
- ### 3. [migration.md](design/migration.md)
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
- Migration path from `mplang.core` to `mplang.edsl`:
193
- - 6-phase migration plan
194
- - Backward compatibility strategy
195
- - Type conversion utilities
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
- ## Relationship with mplang.core
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
- **Migration Strategy**:
217
- 1. Develop `edsl` in parallel (no breaking changes to `core`)
218
- 2. Gradually move internal code to use `edsl.typing`
219
- 3. Add adapters between `core` and `edsl`
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
- ## Contributing
203
+ ### Type System Extension
223
204
 
224
- We welcome contributions! Since this is experimental:
205
+ To add a new type:
225
206
 
226
- 1. **Read the design docs first**: Understand the architecture
227
- 2. **Start small**: Pick a specific component (e.g., Graph IR)
228
- 3. **Discuss early**: Open an issue before implementing
229
- 4. **Test thoroughly**: Add unit tests for new code
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
- ### Development Workflow
212
+ ### Code Style
232
213
 
233
214
  ```bash
234
- # Install dev dependencies
235
- uv sync --group dev
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
- ## FAQ
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
- **A**: Yes! The type system is stable and can be used for type annotations.
257
-
258
- ### Q: When will `edsl` replace `core`?
259
-
260
- **A**: No timeline yet. We need to:
261
- 1. Complete the implementation
262
- 2. Validate performance
263
- 3. Migrate all tests
264
- 4. Get community feedback
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
- **A**: Check the implementation status above and pick an unimplemented component. Open an issue to discuss!
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
- - **torch.fx**: https://pytorch.org/docs/stable/fx.html
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**: 2025-01-11
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
- 2. **Encryption Types**: Wrap other types to confer privacy properties by making them opaque.
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
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mplang-nightly
3
- Version: 0.1.dev283
3
+ Version: 0.1.dev285
4
4
  Summary: Multi-Party Programming Language
5
5
  Author-email: SecretFlow Team <secretflow-contact@service.alipay.com>
6
6
  License: Apache License
@@ -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=viflvdRojOa6Xk_UMRPqpuPGXcPGmdlv2-XR6LO7B58,7592
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=Vp0r_oTyFrOhwwpVD_6XAX0sSsKvR04X-KdihkmD4QA,29287
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.dev283.dist-info/METADATA,sha256=LQoJFyCuXE2oFdWDhw7_lUHkcRJrCDg-nUVsP-ZtQk8,16783
103
- mplang_nightly-0.1.dev283.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
104
- mplang_nightly-0.1.dev283.dist-info/entry_points.txt,sha256=mG1oJT-GAjQR834a62_QIWb7litzWPPyVnwFqm-rWuY,55
105
- mplang_nightly-0.1.dev283.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
106
- mplang_nightly-0.1.dev283.dist-info/RECORD,,
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,,