mplang-nightly 0.1.dev269__py3-none-any.whl → 0.1.dev271__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/__init__.py +391 -17
- mplang/{v2/backends → backends}/__init__.py +9 -7
- mplang/{v2/backends → backends}/bfv_impl.py +6 -6
- mplang/{v2/backends → backends}/crypto_impl.py +6 -6
- mplang/{v2/backends → backends}/field_impl.py +5 -5
- mplang/{v2/backends → backends}/func_impl.py +4 -4
- mplang/{v2/backends → backends}/phe_impl.py +3 -3
- mplang/{v2/backends → backends}/simp_design.md +1 -1
- mplang/{v2/backends → backends}/simp_driver/__init__.py +5 -5
- mplang/{v2/backends → backends}/simp_driver/http.py +8 -8
- mplang/{v2/backends → backends}/simp_driver/mem.py +9 -9
- mplang/{v2/backends → backends}/simp_driver/ops.py +4 -4
- mplang/{v2/backends → backends}/simp_driver/state.py +2 -2
- mplang/{v2/backends → backends}/simp_driver/values.py +2 -2
- mplang/{v2/backends → backends}/simp_worker/__init__.py +3 -3
- mplang/{v2/backends → backends}/simp_worker/http.py +10 -10
- mplang/{v2/backends → backends}/simp_worker/mem.py +1 -1
- mplang/{v2/backends → backends}/simp_worker/ops.py +5 -5
- mplang/{v2/backends → backends}/simp_worker/state.py +2 -4
- mplang/{v2/backends → backends}/spu_impl.py +8 -8
- mplang/{v2/backends → backends}/spu_state.py +4 -4
- mplang/{v2/backends → backends}/store_impl.py +3 -3
- mplang/{v2/backends → backends}/table_impl.py +8 -8
- mplang/{v2/backends → backends}/tee_impl.py +6 -6
- mplang/{v2/backends → backends}/tensor_impl.py +6 -6
- mplang/{v2/cli.py → cli.py} +9 -9
- mplang/{v2/cli_guide.md → cli_guide.md} +12 -12
- mplang/{v2/dialects → dialects}/__init__.py +5 -5
- mplang/{v2/dialects → dialects}/bfv.py +6 -6
- mplang/{v2/dialects → dialects}/crypto.py +5 -5
- mplang/{v2/dialects → dialects}/dtypes.py +2 -2
- mplang/{v2/dialects → dialects}/field.py +3 -3
- mplang/{v2/dialects → dialects}/func.py +2 -2
- mplang/{v2/dialects → dialects}/phe.py +6 -6
- mplang/{v2/dialects → dialects}/simp.py +6 -6
- mplang/{v2/dialects → dialects}/spu.py +7 -7
- mplang/{v2/dialects → dialects}/store.py +2 -2
- mplang/{v2/dialects → dialects}/table.py +3 -3
- mplang/{v2/dialects → dialects}/tee.py +6 -6
- mplang/{v2/dialects → dialects}/tensor.py +5 -5
- mplang/{v2/edsl → edsl}/__init__.py +3 -3
- mplang/{v2/edsl → edsl}/context.py +6 -6
- mplang/{v2/edsl → edsl}/graph.py +5 -5
- mplang/{v2/edsl → edsl}/jit.py +2 -2
- mplang/{v2/edsl → edsl}/object.py +1 -1
- mplang/{v2/edsl → edsl}/primitive.py +5 -5
- mplang/{v2/edsl → edsl}/printer.py +1 -1
- mplang/{v2/edsl → edsl}/serde.py +1 -1
- mplang/{v2/edsl → edsl}/tracer.py +7 -7
- mplang/{v2/edsl → edsl}/typing.py +1 -1
- mplang/{v2/kernels → kernels}/ldpc.cpp +13 -13
- mplang/{v2/kernels → kernels}/okvs.cpp +4 -4
- mplang/{v2/kernels → kernels}/okvs_opt.cpp +31 -31
- mplang/{v2/kernels → kernels}/py_kernels.py +1 -1
- mplang/{v2/libs → libs}/collective.py +5 -5
- mplang/{v2/libs → libs}/device/__init__.py +1 -1
- mplang/{v2/libs → libs}/device/api.py +12 -12
- mplang/{v2/libs → libs}/ml/__init__.py +1 -1
- mplang/{v2/libs → libs}/ml/sgb.py +4 -4
- mplang/{v2/libs → libs}/mpc/__init__.py +3 -3
- mplang/{v2/libs → libs}/mpc/_utils.py +2 -2
- mplang/{v2/libs → libs}/mpc/analytics/aggregation.py +1 -1
- mplang/{v2/libs → libs}/mpc/analytics/groupby.py +2 -2
- mplang/{v2/libs → libs}/mpc/analytics/permutation.py +3 -3
- mplang/{v2/libs → libs}/mpc/ot/base.py +3 -3
- mplang/{v2/libs → libs}/mpc/ot/extension.py +2 -2
- mplang/{v2/libs → libs}/mpc/ot/silent.py +4 -4
- mplang/{v2/libs → libs}/mpc/psi/cuckoo.py +3 -3
- mplang/{v2/libs → libs}/mpc/psi/okvs.py +1 -1
- mplang/{v2/libs → libs}/mpc/psi/okvs_gct.py +3 -3
- mplang/{v2/libs → libs}/mpc/psi/oprf.py +3 -3
- mplang/{v2/libs → libs}/mpc/psi/rr22.py +7 -7
- mplang/{v2/libs → libs}/mpc/psi/unbalanced.py +4 -4
- mplang/{v2/libs → libs}/mpc/vole/gilboa.py +3 -3
- mplang/{v2/libs → libs}/mpc/vole/ldpc.py +2 -2
- mplang/{v2/libs → libs}/mpc/vole/silver.py +6 -6
- mplang/{v2/runtime → runtime}/interpreter.py +11 -11
- mplang/{v2/runtime → runtime}/value.py +2 -2
- mplang/{v1/runtime → utils}/__init__.py +18 -15
- mplang/{v1/utils → utils}/func_utils.py +1 -1
- {mplang_nightly-0.1.dev269.dist-info → mplang_nightly-0.1.dev271.dist-info}/METADATA +2 -2
- mplang_nightly-0.1.dev271.dist-info/RECORD +102 -0
- mplang/v1/__init__.py +0 -157
- mplang/v1/_device.py +0 -602
- mplang/v1/analysis/__init__.py +0 -37
- mplang/v1/analysis/diagram.py +0 -567
- mplang/v1/core/__init__.py +0 -157
- mplang/v1/core/cluster.py +0 -343
- mplang/v1/core/comm.py +0 -281
- mplang/v1/core/context_mgr.py +0 -50
- mplang/v1/core/dtypes.py +0 -335
- mplang/v1/core/expr/__init__.py +0 -80
- mplang/v1/core/expr/ast.py +0 -542
- mplang/v1/core/expr/evaluator.py +0 -581
- mplang/v1/core/expr/printer.py +0 -285
- mplang/v1/core/expr/transformer.py +0 -141
- mplang/v1/core/expr/utils.py +0 -78
- mplang/v1/core/expr/visitor.py +0 -85
- mplang/v1/core/expr/walk.py +0 -387
- mplang/v1/core/interp.py +0 -160
- mplang/v1/core/mask.py +0 -325
- mplang/v1/core/mpir.py +0 -965
- mplang/v1/core/mpobject.py +0 -117
- mplang/v1/core/mptype.py +0 -407
- mplang/v1/core/pfunc.py +0 -130
- mplang/v1/core/primitive.py +0 -877
- mplang/v1/core/table.py +0 -218
- mplang/v1/core/tensor.py +0 -75
- mplang/v1/core/tracer.py +0 -383
- mplang/v1/host.py +0 -130
- mplang/v1/kernels/__init__.py +0 -41
- mplang/v1/kernels/base.py +0 -125
- mplang/v1/kernels/basic.py +0 -240
- mplang/v1/kernels/context.py +0 -369
- mplang/v1/kernels/crypto.py +0 -122
- mplang/v1/kernels/fhe.py +0 -858
- mplang/v1/kernels/mock_tee.py +0 -72
- mplang/v1/kernels/phe.py +0 -1864
- mplang/v1/kernels/spu.py +0 -341
- mplang/v1/kernels/sql_duckdb.py +0 -44
- mplang/v1/kernels/stablehlo.py +0 -90
- mplang/v1/kernels/value.py +0 -626
- mplang/v1/ops/__init__.py +0 -35
- mplang/v1/ops/base.py +0 -424
- mplang/v1/ops/basic.py +0 -294
- mplang/v1/ops/crypto.py +0 -262
- mplang/v1/ops/fhe.py +0 -272
- mplang/v1/ops/jax_cc.py +0 -147
- mplang/v1/ops/nnx_cc.py +0 -168
- mplang/v1/ops/phe.py +0 -216
- mplang/v1/ops/spu.py +0 -151
- mplang/v1/ops/sql_cc.py +0 -303
- mplang/v1/ops/tee.py +0 -36
- mplang/v1/protos/v1alpha1/mpir_pb2.py +0 -63
- mplang/v1/protos/v1alpha1/mpir_pb2.pyi +0 -557
- mplang/v1/protos/v1alpha1/value_pb2.py +0 -34
- mplang/v1/protos/v1alpha1/value_pb2.pyi +0 -169
- mplang/v1/runtime/channel.py +0 -230
- mplang/v1/runtime/cli.py +0 -451
- mplang/v1/runtime/client.py +0 -456
- mplang/v1/runtime/communicator.py +0 -131
- mplang/v1/runtime/data_providers.py +0 -303
- mplang/v1/runtime/driver.py +0 -324
- mplang/v1/runtime/exceptions.py +0 -27
- mplang/v1/runtime/http_api.md +0 -56
- mplang/v1/runtime/link_comm.py +0 -196
- mplang/v1/runtime/server.py +0 -501
- mplang/v1/runtime/session.py +0 -270
- mplang/v1/runtime/simulation.py +0 -324
- mplang/v1/simp/__init__.py +0 -13
- mplang/v1/simp/api.py +0 -353
- mplang/v1/simp/mpi.py +0 -131
- mplang/v1/simp/party.py +0 -225
- mplang/v1/simp/random.py +0 -120
- mplang/v1/simp/smpc.py +0 -238
- mplang/v1/utils/__init__.py +0 -13
- mplang/v1/utils/crypto.py +0 -32
- mplang/v1/utils/spu_utils.py +0 -130
- mplang/v1/utils/table_utils.py +0 -185
- mplang/v2/__init__.py +0 -424
- mplang_nightly-0.1.dev269.dist-info/RECORD +0 -180
- /mplang/{v2/backends → backends}/channel.py +0 -0
- /mplang/{v2/edsl → edsl}/README.md +0 -0
- /mplang/{v2/edsl → edsl}/registry.py +0 -0
- /mplang/{v2/kernels → kernels}/Makefile +0 -0
- /mplang/{v2/kernels → kernels}/__init__.py +0 -0
- /mplang/{v2/kernels → kernels}/gf128.cpp +0 -0
- /mplang/{v2/libs → libs}/device/cluster.py +0 -0
- /mplang/{v2/libs → libs}/mpc/analytics/__init__.py +0 -0
- /mplang/{v2/libs → libs}/mpc/analytics/groupby.md +0 -0
- /mplang/{v2/libs → libs}/mpc/common/constants.py +0 -0
- /mplang/{v2/libs → libs}/mpc/ot/__init__.py +0 -0
- /mplang/{v2/libs → libs}/mpc/psi/__init__.py +0 -0
- /mplang/{v2/libs → libs}/mpc/vole/__init__.py +0 -0
- /mplang/{v2/runtime → runtime}/__init__.py +0 -0
- /mplang/{v2/runtime → runtime}/dialect_state.py +0 -0
- /mplang/{v2/runtime → runtime}/object_store.py +0 -0
- {mplang_nightly-0.1.dev269.dist-info → mplang_nightly-0.1.dev271.dist-info}/WHEEL +0 -0
- {mplang_nightly-0.1.dev269.dist-info → mplang_nightly-0.1.dev271.dist-info}/entry_points.txt +0 -0
- {mplang_nightly-0.1.dev269.dist-info → mplang_nightly-0.1.dev271.dist-info}/licenses/LICENSE +0 -0
mplang/v2/__init__.py
DELETED
|
@@ -1,424 +0,0 @@
|
|
|
1
|
-
# Copyright 2025 Ant Group Co., Ltd.
|
|
2
|
-
#
|
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
# you may not use this file except in compliance with the License.
|
|
5
|
-
# You may obtain a copy of the License at
|
|
6
|
-
#
|
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
#
|
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
# See the License for the specific language governing permissions and
|
|
13
|
-
# limitations under the License.
|
|
14
|
-
|
|
15
|
-
"""MPLang2: Next generation EDSL for multi-party computation.
|
|
16
|
-
|
|
17
|
-
This is the temporary home for the new EDSL implementation during migration.
|
|
18
|
-
Once migration is complete, this will replace the original mplang package.
|
|
19
|
-
|
|
20
|
-
Public API is designed to be compatible with mplang v1 where possible.
|
|
21
|
-
"""
|
|
22
|
-
|
|
23
|
-
from __future__ import annotations
|
|
24
|
-
|
|
25
|
-
from collections.abc import Callable
|
|
26
|
-
from typing import Any
|
|
27
|
-
|
|
28
|
-
__version__ = "0.1.0"
|
|
29
|
-
|
|
30
|
-
# =============================================================================
|
|
31
|
-
# Core EDSL components
|
|
32
|
-
# =============================================================================
|
|
33
|
-
# =============================================================================
|
|
34
|
-
# Dialects
|
|
35
|
-
# =============================================================================
|
|
36
|
-
# =============================================================================
|
|
37
|
-
# Backend / Runtime
|
|
38
|
-
# =============================================================================
|
|
39
|
-
import mplang.v2.backends.func_impl # Register func handlers
|
|
40
|
-
from mplang.v2 import dialects
|
|
41
|
-
from mplang.v2.backends.simp_driver.ops import DRIVER_HANDLERS
|
|
42
|
-
from mplang.v2.backends.simp_worker import SimpWorker
|
|
43
|
-
from mplang.v2.backends.simp_worker.mem import LocalMesh
|
|
44
|
-
from mplang.v2.backends.simp_worker.ops import WORKER_HANDLERS
|
|
45
|
-
from mplang.v2.dialects.simp import make_driver, make_simulator
|
|
46
|
-
from mplang.v2.edsl import (
|
|
47
|
-
Graph,
|
|
48
|
-
GraphPrinter,
|
|
49
|
-
Object,
|
|
50
|
-
Operation,
|
|
51
|
-
Primitive,
|
|
52
|
-
TracedFunction,
|
|
53
|
-
Tracer,
|
|
54
|
-
Value,
|
|
55
|
-
find_context,
|
|
56
|
-
find_context_with_state,
|
|
57
|
-
find_interpreter,
|
|
58
|
-
format_graph,
|
|
59
|
-
get_current_context,
|
|
60
|
-
get_default_context,
|
|
61
|
-
is_tracing,
|
|
62
|
-
jit,
|
|
63
|
-
pop_context,
|
|
64
|
-
primitive,
|
|
65
|
-
push_context,
|
|
66
|
-
register_default_context_factory,
|
|
67
|
-
set_root_context,
|
|
68
|
-
trace,
|
|
69
|
-
)
|
|
70
|
-
from mplang.v2.edsl.registry import get_profiler
|
|
71
|
-
|
|
72
|
-
# Type system
|
|
73
|
-
from mplang.v2.edsl.typing import (
|
|
74
|
-
MPType,
|
|
75
|
-
ScalarType,
|
|
76
|
-
SSType,
|
|
77
|
-
TableType,
|
|
78
|
-
TensorType,
|
|
79
|
-
VectorType,
|
|
80
|
-
)
|
|
81
|
-
|
|
82
|
-
# =============================================================================
|
|
83
|
-
# Device API (compatible with mplang v1)
|
|
84
|
-
# =============================================================================
|
|
85
|
-
from mplang.v2.libs.device import (
|
|
86
|
-
ClusterSpec,
|
|
87
|
-
Device,
|
|
88
|
-
Node,
|
|
89
|
-
device,
|
|
90
|
-
get_dev_attr,
|
|
91
|
-
is_device_obj,
|
|
92
|
-
jax_fn,
|
|
93
|
-
put,
|
|
94
|
-
set_dev_attr,
|
|
95
|
-
)
|
|
96
|
-
from mplang.v2.libs.device import fetch as device_fetch
|
|
97
|
-
from mplang.v2.runtime.interpreter import Interpreter
|
|
98
|
-
|
|
99
|
-
# =============================================================================
|
|
100
|
-
# Context Management API (JAX-like pattern)
|
|
101
|
-
# =============================================================================
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
def _get_context(context: Interpreter | None) -> Interpreter:
|
|
105
|
-
"""Get context from parameter or context stack."""
|
|
106
|
-
if context is not None:
|
|
107
|
-
return context
|
|
108
|
-
ctx = get_current_context()
|
|
109
|
-
if ctx is None:
|
|
110
|
-
raise RuntimeError(
|
|
111
|
-
"No context available. Either pass context explicitly or use "
|
|
112
|
-
"set_context()/push_context() to set a default context."
|
|
113
|
-
)
|
|
114
|
-
if not isinstance(ctx, Interpreter):
|
|
115
|
-
raise RuntimeError(
|
|
116
|
-
f"Current context is not an Interpreter: {type(ctx).__name__}. "
|
|
117
|
-
"Use mp.set_context(interpreter) to set the execution context."
|
|
118
|
-
)
|
|
119
|
-
return ctx
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
# =============================================================================
|
|
123
|
-
# Meta-APIs (compile, evaluate, fetch)
|
|
124
|
-
# =============================================================================
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
def evaluate(
|
|
128
|
-
fn: Callable[..., Any] | TracedFunction,
|
|
129
|
-
*args: Any,
|
|
130
|
-
context: Interpreter | None = None,
|
|
131
|
-
**kwargs: Any,
|
|
132
|
-
) -> Any:
|
|
133
|
-
"""Evaluate a function or traced function.
|
|
134
|
-
|
|
135
|
-
Args:
|
|
136
|
-
fn: The function or TracedFunction to evaluate.
|
|
137
|
-
*args: Positional arguments to pass to the function.
|
|
138
|
-
context: Optional interpreter context. If None, uses current context.
|
|
139
|
-
**kwargs: Keyword arguments to pass to the function.
|
|
140
|
-
|
|
141
|
-
Returns:
|
|
142
|
-
The result of the function evaluation.
|
|
143
|
-
|
|
144
|
-
Example:
|
|
145
|
-
>>> with mp.make_simulator(3) as sim:
|
|
146
|
-
... result = mp.evaluate(traced) # uses sim from context
|
|
147
|
-
>>> # Or explicitly:
|
|
148
|
-
>>> result = mp.evaluate(traced, context=sim)
|
|
149
|
-
"""
|
|
150
|
-
from mplang.v2.edsl.tracer import TracedFunction
|
|
151
|
-
from mplang.v2.runtime.interpreter import InterpObject
|
|
152
|
-
|
|
153
|
-
interp = _get_context(context)
|
|
154
|
-
|
|
155
|
-
def unwrap_if_interp(val: Any) -> Any:
|
|
156
|
-
"""Unwrap InterpObject to runtime value at execution boundary."""
|
|
157
|
-
if isinstance(val, InterpObject):
|
|
158
|
-
return val.runtime_obj
|
|
159
|
-
return val
|
|
160
|
-
|
|
161
|
-
with interp:
|
|
162
|
-
if isinstance(fn, TracedFunction):
|
|
163
|
-
inputs = fn.prepare_inputs(*args, **kwargs)
|
|
164
|
-
inputs = [unwrap_if_interp(v) for v in inputs]
|
|
165
|
-
raw_result = interp.evaluate_graph(fn.graph, inputs)
|
|
166
|
-
wrapped = [
|
|
167
|
-
InterpObject(v, fn.graph.outputs[i].type, interp)
|
|
168
|
-
for i, v in enumerate(raw_result)
|
|
169
|
-
]
|
|
170
|
-
return fn.reconstruct_outputs(wrapped)
|
|
171
|
-
|
|
172
|
-
return fn(*args, **kwargs)
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
def fetch(
|
|
176
|
-
result: Any,
|
|
177
|
-
*,
|
|
178
|
-
follow_device: bool = True,
|
|
179
|
-
context: Interpreter | None = None,
|
|
180
|
-
) -> Any:
|
|
181
|
-
"""Fetch results from interpreter context to Python.
|
|
182
|
-
|
|
183
|
-
This is a meta-function that operates at execution boundaries, not a traced
|
|
184
|
-
dialect operation. It brings data from the distributed/MPC runtime back to
|
|
185
|
-
the Python host.
|
|
186
|
-
|
|
187
|
-
Behavior in different contexts:
|
|
188
|
-
- **Tracing (compile)**: Returns the input unchanged (identity). The graph
|
|
189
|
-
outputs are determined by the function's return statement, not fetch calls.
|
|
190
|
-
- **Execution (evaluate)**: Actually fetches data from workers/parties.
|
|
191
|
-
|
|
192
|
-
Design Note (A vs B tradeoff):
|
|
193
|
-
Two designs were considered for fetch behavior during tracing:
|
|
194
|
-
|
|
195
|
-
- **Design A (chosen)**: fetch = identity during tracing. Graph outputs
|
|
196
|
-
are determined solely by the return statement. This is simpler and
|
|
197
|
-
avoids ambiguity when fetch and return reference different values.
|
|
198
|
-
|
|
199
|
-
- **Design B (alternative)**: fetch marks output points in the graph.
|
|
200
|
-
This would allow fetch(a), fetch(b), return b to output both a and b.
|
|
201
|
-
However, it complicates the semantics and requires tracking fetch
|
|
202
|
-
points separately from return values.
|
|
203
|
-
|
|
204
|
-
Design A was chosen for simplicity. If a value needs to be an output,
|
|
205
|
-
it should be returned. fetch's role is purely for execution-time I/O.
|
|
206
|
-
|
|
207
|
-
Args:
|
|
208
|
-
result: Object(s) to fetch. Can be a single InterpObject, DriverVar,
|
|
209
|
-
or nested structure containing them.
|
|
210
|
-
follow_device: If True and object has device attribute, dispatch to
|
|
211
|
-
device.fetch which fetches from the correct rank based on device.
|
|
212
|
-
If False, fetch from all parties.
|
|
213
|
-
context: Interpreter context. If None, uses current context.
|
|
214
|
-
|
|
215
|
-
Returns:
|
|
216
|
-
Fetched Python values. For device objects with follow_device=True,
|
|
217
|
-
returns single value from the device's rank(s). Otherwise returns
|
|
218
|
-
list of values (one per party) or single value for world_size=1.
|
|
219
|
-
During tracing, returns the input unchanged.
|
|
220
|
-
"""
|
|
221
|
-
from jax.tree_util import tree_map
|
|
222
|
-
|
|
223
|
-
from mplang.v2.backends.simp_driver.values import DriverVar
|
|
224
|
-
from mplang.v2.edsl.context import is_tracing
|
|
225
|
-
from mplang.v2.runtime.interpreter import InterpObject
|
|
226
|
-
from mplang.v2.runtime.value import WrapValue
|
|
227
|
-
|
|
228
|
-
# Check if we are in tracing context - if so, return identity
|
|
229
|
-
if is_tracing():
|
|
230
|
-
# Design A: fetch = identity during tracing
|
|
231
|
-
# Graph outputs are determined by return statement, not fetch calls
|
|
232
|
-
return result
|
|
233
|
-
|
|
234
|
-
# Execution context - actually fetch data
|
|
235
|
-
interp = _get_context(context)
|
|
236
|
-
|
|
237
|
-
def _fetch_single(var: Any) -> Any:
|
|
238
|
-
"""Fetch a single value from InterpObject."""
|
|
239
|
-
# InterpObject (from mp.evaluate) - extract runtime_obj
|
|
240
|
-
if isinstance(var, InterpObject):
|
|
241
|
-
if follow_device and is_device_obj(var):
|
|
242
|
-
return device_fetch(var)
|
|
243
|
-
var = var.runtime_obj # extract and continue processing
|
|
244
|
-
|
|
245
|
-
# DriverVar (simp dialect) - remote fetch from workers
|
|
246
|
-
if isinstance(var, DriverVar):
|
|
247
|
-
from mplang.v2.backends.simp_driver.state import SimpDriver
|
|
248
|
-
|
|
249
|
-
simp_state = interp.get_dialect_state("simp")
|
|
250
|
-
assert isinstance(simp_state, SimpDriver), "DriverVar requires simp state"
|
|
251
|
-
|
|
252
|
-
resolved: list[Any] = []
|
|
253
|
-
for rank, uri in enumerate(var.values):
|
|
254
|
-
if uri is None:
|
|
255
|
-
resolved.append(None)
|
|
256
|
-
else:
|
|
257
|
-
fetched = simp_state.fetch(rank, uri).result()
|
|
258
|
-
if isinstance(fetched, WrapValue):
|
|
259
|
-
fetched = fetched.data
|
|
260
|
-
resolved.append(fetched)
|
|
261
|
-
|
|
262
|
-
return resolved[0] if len(resolved) == 1 else resolved
|
|
263
|
-
|
|
264
|
-
# WrapValue (TensorValue, TableValue, etc.) - unwrap
|
|
265
|
-
if isinstance(var, WrapValue):
|
|
266
|
-
return var.data
|
|
267
|
-
|
|
268
|
-
# Plain values pass through
|
|
269
|
-
return var
|
|
270
|
-
|
|
271
|
-
with interp:
|
|
272
|
-
return tree_map(_fetch_single, result)
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
# Alias for compatibility
|
|
276
|
-
def function(fn: Callable[..., Any] | None = None) -> Callable[..., Any]:
|
|
277
|
-
"""Decorator defining a Multi-Party Function (MP Program).
|
|
278
|
-
|
|
279
|
-
This decorator "lifts" a local function into a distributed program by
|
|
280
|
-
automatically wrapping it in a `simp.pcall_static` that targets ALL available
|
|
281
|
-
parties in the current context.
|
|
282
|
-
|
|
283
|
-
Semantics: f(args) -> pcall(ALL, f, args)
|
|
284
|
-
|
|
285
|
-
Args:
|
|
286
|
-
fn: The function to decorate.
|
|
287
|
-
|
|
288
|
-
Returns:
|
|
289
|
-
A wrapper function that, when called, executes the original function
|
|
290
|
-
on all workers.
|
|
291
|
-
"""
|
|
292
|
-
import functools
|
|
293
|
-
|
|
294
|
-
from mplang.v2.dialects import simp
|
|
295
|
-
|
|
296
|
-
if fn is None:
|
|
297
|
-
return function
|
|
298
|
-
|
|
299
|
-
def has_simp_state(ctx: Any) -> bool:
|
|
300
|
-
if hasattr(ctx, "get_dialect_state"):
|
|
301
|
-
state = ctx.get_dialect_state("simp")
|
|
302
|
-
return state is not None and hasattr(state, "world_size")
|
|
303
|
-
return False
|
|
304
|
-
|
|
305
|
-
@functools.wraps(fn)
|
|
306
|
-
def wrapper(*args: Any, **kwargs: Any) -> Any:
|
|
307
|
-
from mplang.v2.edsl.context import find_context
|
|
308
|
-
|
|
309
|
-
# Find context with simp dialect state
|
|
310
|
-
ctx = find_context(has_simp_state)
|
|
311
|
-
if ctx is None:
|
|
312
|
-
raise RuntimeError(
|
|
313
|
-
"mp.function requires a context with world_size information "
|
|
314
|
-
"(e.g. SimpSimulator or Driver initialized)."
|
|
315
|
-
)
|
|
316
|
-
|
|
317
|
-
# ctx found by predicate so we know it has get_dialect_state
|
|
318
|
-
simp_state = ctx.get_dialect_state("simp") # type: ignore[attr-defined]
|
|
319
|
-
world_size = simp_state.world_size # type: ignore
|
|
320
|
-
|
|
321
|
-
all_parties = tuple(range(world_size))
|
|
322
|
-
return simp.pcall_static(all_parties, fn, *args, **kwargs)
|
|
323
|
-
|
|
324
|
-
return wrapper
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
def compile(
|
|
328
|
-
fn: Callable[..., Any],
|
|
329
|
-
*args: Any,
|
|
330
|
-
context: Interpreter | None = None,
|
|
331
|
-
**kwargs: Any,
|
|
332
|
-
) -> TracedFunction:
|
|
333
|
-
"""Compile a function to get its IR without executing it.
|
|
334
|
-
|
|
335
|
-
Args:
|
|
336
|
-
fn: The function to compile.
|
|
337
|
-
*args: Example arguments for tracing.
|
|
338
|
-
context: Optional interpreter context. If None, uses current context.
|
|
339
|
-
**kwargs: Example keyword arguments for tracing.
|
|
340
|
-
|
|
341
|
-
Returns:
|
|
342
|
-
TracedFunction with the compiled graph.
|
|
343
|
-
|
|
344
|
-
Example:
|
|
345
|
-
>>> with mp.make_simulator(3) as sim:
|
|
346
|
-
... traced = mp.compile(job) # uses sim from context
|
|
347
|
-
"""
|
|
348
|
-
# If a context is explicitly provided, push it before tracing
|
|
349
|
-
# so that _resolve_cluster() can find it.
|
|
350
|
-
if context is not None:
|
|
351
|
-
with context:
|
|
352
|
-
return trace(fn, *args, **kwargs)
|
|
353
|
-
|
|
354
|
-
# Otherwise, rely on the caller having pushed an interpreter context.
|
|
355
|
-
# _resolve_cluster() will traverse the stack to find the interpreter.
|
|
356
|
-
return trace(fn, *args, **kwargs)
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
# =============================================================================
|
|
360
|
-
# Public API
|
|
361
|
-
# =============================================================================
|
|
362
|
-
__all__ = [ # noqa: RUF022
|
|
363
|
-
# Version
|
|
364
|
-
"__version__",
|
|
365
|
-
# Device API
|
|
366
|
-
"ClusterSpec",
|
|
367
|
-
"Device",
|
|
368
|
-
"Node",
|
|
369
|
-
"device",
|
|
370
|
-
"get_dev_attr",
|
|
371
|
-
"is_device_obj",
|
|
372
|
-
"jax_fn",
|
|
373
|
-
"put",
|
|
374
|
-
"set_dev_attr",
|
|
375
|
-
# Core EDSL
|
|
376
|
-
"Graph",
|
|
377
|
-
"GraphPrinter",
|
|
378
|
-
"Object",
|
|
379
|
-
"Operation",
|
|
380
|
-
"Primitive",
|
|
381
|
-
"TracedFunction",
|
|
382
|
-
"Tracer",
|
|
383
|
-
"Value",
|
|
384
|
-
"compile",
|
|
385
|
-
"evaluate",
|
|
386
|
-
"fetch",
|
|
387
|
-
"find_context",
|
|
388
|
-
"find_context_with_state",
|
|
389
|
-
"find_interpreter",
|
|
390
|
-
"format_graph",
|
|
391
|
-
"function",
|
|
392
|
-
"get_current_context",
|
|
393
|
-
"get_default_context",
|
|
394
|
-
"is_tracing",
|
|
395
|
-
"jit",
|
|
396
|
-
"mplang",
|
|
397
|
-
"pop_context",
|
|
398
|
-
"primitive",
|
|
399
|
-
"push_context",
|
|
400
|
-
"set_root_context",
|
|
401
|
-
"trace",
|
|
402
|
-
# Type system
|
|
403
|
-
"MPType",
|
|
404
|
-
"ScalarType",
|
|
405
|
-
"SSType",
|
|
406
|
-
"TableType",
|
|
407
|
-
"TensorType",
|
|
408
|
-
"VectorType",
|
|
409
|
-
# Backend / Runtime
|
|
410
|
-
"DRIVER_HANDLERS",
|
|
411
|
-
"Interpreter",
|
|
412
|
-
"LocalMesh",
|
|
413
|
-
"SimpWorker",
|
|
414
|
-
"WORKER_HANDLERS",
|
|
415
|
-
"make_driver",
|
|
416
|
-
"make_simulator",
|
|
417
|
-
# Dialects
|
|
418
|
-
"dialects",
|
|
419
|
-
"register_default_context_factory",
|
|
420
|
-
"get_profiler",
|
|
421
|
-
]
|
|
422
|
-
|
|
423
|
-
# Register Interpreter as default context factory
|
|
424
|
-
register_default_context_factory(Interpreter)
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
mplang/__init__.py,sha256=CdfWOdeg-I1q6ULjdBxeLioVlplA4bgPTSn_2xSk5VY,1677
|
|
2
|
-
mplang/py.typed,sha256=RyhZV7Yxo8BvEoBiFz5fH3IWVqQKTcBBE-bzjx_N5GQ,583
|
|
3
|
-
mplang/v1/__init__.py,sha256=m7UQeAqYwQOzFt-lYqv9eKs9kdvutW025pxEG0h7eVs,3346
|
|
4
|
-
mplang/v1/_device.py,sha256=MY4OO7TJr2oxDXbvv_pnBweALxP2wvV0cvq3DMLHFuE,22971
|
|
5
|
-
mplang/v1/host.py,sha256=-daviW1W4HYFhBqMzkDkJoQap8HxNDFDop2FyI_mrak,4306
|
|
6
|
-
mplang/v1/analysis/__init__.py,sha256=RvgCE9TO_cmwHtunlhbTbzCtLc19Ym7vlmVCL2UAqCs,1059
|
|
7
|
-
mplang/v1/analysis/diagram.py,sha256=XZgq1sq25xxnJF84WVkPDTmC90VVVaj8x6Annn_Ipu0,19477
|
|
8
|
-
mplang/v1/core/__init__.py,sha256=RN4SugeL-Wkfhrryx_Cf1T-Ax3Ol0zrqbCxAD4Wj3JA,3375
|
|
9
|
-
mplang/v1/core/cluster.py,sha256=d23L12eHoNDO17eojxbI4EhWi6GtUDzKbl-R6U5K580,12102
|
|
10
|
-
mplang/v1/core/comm.py,sha256=6kQ5lnyodys_Ls_6BIrNo3E3DMwsr2z5IPn-pYh2HZs,8976
|
|
11
|
-
mplang/v1/core/context_mgr.py,sha256=87BPy02UF7ZOPxPieSxMV_OSfXK4HJmnSFXKFaFSnwk,1544
|
|
12
|
-
mplang/v1/core/dtypes.py,sha256=ZTXcQfcy5rKJp7JEkmE4rqqki7LalbKOplQ1bkMqpgM,11613
|
|
13
|
-
mplang/v1/core/interp.py,sha256=iigeVh1mmdt9PL_1RRoNWYSFpYnAjEKol8qrJ8cfXO4,5933
|
|
14
|
-
mplang/v1/core/mask.py,sha256=14DFxaA446lGjN4dzTuQgm9Shcn34rYI87YJHg0YGNQ,10693
|
|
15
|
-
mplang/v1/core/mpir.py,sha256=CKmNiv6Q_tvxSvFcmeaYXPl67-eQiVhe9EIXT2LDU9M,38421
|
|
16
|
-
mplang/v1/core/mpobject.py,sha256=qSRGvJ-3Vy9LLBYWQCcTYVh2EUx-pMOkFkVIQYVUwOA,3751
|
|
17
|
-
mplang/v1/core/mptype.py,sha256=i6J2s355P4MkM0R2S5DY1aj8tzUMeoCMYEU72R2cRSo,13972
|
|
18
|
-
mplang/v1/core/pfunc.py,sha256=TZpa15qeSxqPMacCH8UXQARoRqiR96sLYsPpJ_QIY6I,5108
|
|
19
|
-
mplang/v1/core/primitive.py,sha256=x-GykjaNqZzGTO-zcGZiknH7UC5YBxIem-xvFo2Jvig,36772
|
|
20
|
-
mplang/v1/core/table.py,sha256=-KcFotbhcWC1P87JeYs0ho22Fk8wWrqoVkpU9HooFFo,6626
|
|
21
|
-
mplang/v1/core/tensor.py,sha256=PejvflIz40THE789ft4KJHp4i8l9cOSQxxJx7HiuLOA,2365
|
|
22
|
-
mplang/v1/core/tracer.py,sha256=FI5fUCEw6Qth_poCNgu8LCHkAUDrBUMwrNW0_evSx14,14315
|
|
23
|
-
mplang/v1/core/expr/__init__.py,sha256=pIjDsy-PYCK0Vx1r_Y0Q_vD2XaHAwTyNDan34dE5Fro,2009
|
|
24
|
-
mplang/v1/core/expr/ast.py,sha256=w54nL371KWMK92agCmG9Pnfn8VaiK8mV2lXPKu4ff5w,20893
|
|
25
|
-
mplang/v1/core/expr/evaluator.py,sha256=HuzHzr1e84ijohhutW4ND7spIl0O4cbvUlMsGW6oBY0,23337
|
|
26
|
-
mplang/v1/core/expr/printer.py,sha256=3IR65WaiQBm0ITWRThRAZWgGRi3xB2SCZA34MhcaVXU,9679
|
|
27
|
-
mplang/v1/core/expr/transformer.py,sha256=KPOGavPxWF8FksvVY6iYqyJnvcJumvb2KVUwdc9DQwc,4910
|
|
28
|
-
mplang/v1/core/expr/utils.py,sha256=lkIM1GB9qUF0x46xVe4UGyeJH8qSB0qN2FjDpWoiGiY,2631
|
|
29
|
-
mplang/v1/core/expr/visitor.py,sha256=C1UWZbMtTPGOpi62oaYRjO3kVqSRJcJWn1ZZw-gxLaA,2047
|
|
30
|
-
mplang/v1/core/expr/walk.py,sha256=zhP2X_wQVgx3rMFIcq5F0o3byZ2lLpTZQTarnCkYwD4,11892
|
|
31
|
-
mplang/v1/kernels/__init__.py,sha256=-bZWsXDC7qYkbHZh_7AvX8wQ1dnokj5LZhR5KpeKrWg,1055
|
|
32
|
-
mplang/v1/kernels/base.py,sha256=a01tsvZSnlP2C7bdphJLIQPMI1-yFankIWansqByVVg,3829
|
|
33
|
-
mplang/v1/kernels/basic.py,sha256=ZC5dRUEt4jXUwfPCQj4geaAX3RxO0x8SYvf2PPgVito,8881
|
|
34
|
-
mplang/v1/kernels/context.py,sha256=vvuwwLaO8iNDCXi_Riw1DqjZvIV8QIuZ3bBJlnAyNAA,14080
|
|
35
|
-
mplang/v1/kernels/crypto.py,sha256=YsfaCYnwRZYVvetnT28G9GdqCxC7TNyka77ctIWzjmY,4260
|
|
36
|
-
mplang/v1/kernels/fhe.py,sha256=FY-Gs2Kqa_xF_LOWLOuFL6BLcP9gdGxZOvcU5U8ktNs,30916
|
|
37
|
-
mplang/v1/kernels/mock_tee.py,sha256=5O6HIl-lXYsRPBwu19QHDxnzARdSj5dbl-enYqQF6mo,2495
|
|
38
|
-
mplang/v1/kernels/phe.py,sha256=OA8Fy_xRN5KavTzt7tR0E5XDavu2PsEcGpUr2jXmvd4,73156
|
|
39
|
-
mplang/v1/kernels/spu.py,sha256=FsZpIyM5FltxeCXRaVuavo2VJeG-O0zQ3YGALCH36zM,12492
|
|
40
|
-
mplang/v1/kernels/sql_duckdb.py,sha256=J4wBwmh0tu1GDf9r5S-hb-Cm7sLubUpAuU4LIVoU5Fs,1718
|
|
41
|
-
mplang/v1/kernels/stablehlo.py,sha256=9HzfqiqyK5XCHPe3AhNN0IT4QrIUoLS44R8OLHF-pT0,3217
|
|
42
|
-
mplang/v1/kernels/value.py,sha256=7yPdbSHHFhBx4mizrYLzubBLkN6GVTkpcCLjCZAtCgA,20723
|
|
43
|
-
mplang/v1/ops/__init__.py,sha256=EqwD85heDk4xxoqowQqnUTZGJ8UGhgDVAxtURBi-O3M,1018
|
|
44
|
-
mplang/v1/ops/base.py,sha256=kZcRprWiRNHs5eKeBqYLoSruo-qMcNhmkGaQw_2mPfc,18162
|
|
45
|
-
mplang/v1/ops/basic.py,sha256=DjsMYhtJ-B69bXBAI3znvC00p7v0GALOBgJD8Q3L0kc,9260
|
|
46
|
-
mplang/v1/ops/crypto.py,sha256=YJGzXz6sXjBB6xnu3moLsirZWlOkGSPy4M8cakpvbRs,8952
|
|
47
|
-
mplang/v1/ops/fhe.py,sha256=IHMUT7D6GRu-X-gunMK593_9N88Jf3njsLrKflvck08,9518
|
|
48
|
-
mplang/v1/ops/jax_cc.py,sha256=O3y3bQitMbr448Uzz4ha02Jr3GZ2FhjWfuOOVcnGECQ,6112
|
|
49
|
-
mplang/v1/ops/nnx_cc.py,sha256=LkP1qMkNoeheyonsdreXNDMgQepesOXv4AaJn0SU8Gs,7323
|
|
50
|
-
mplang/v1/ops/phe.py,sha256=UulFSKEohmk66h9L5rsl5F1xPlRKTRxS7jb88cyCsag,7421
|
|
51
|
-
mplang/v1/ops/spu.py,sha256=VjdNEGtGC5M8q8qn82lAuwkKiNPGQvOiJyXz52d7-Sw,4930
|
|
52
|
-
mplang/v1/ops/sql_cc.py,sha256=EifWv-L8szHt7_baxsN69wMzu-yZi_OEIPJHxjWIAtg,9792
|
|
53
|
-
mplang/v1/ops/tee.py,sha256=7-xCbsZiDKAtnUOQ-o65Fj2Y9nkG5nbgH2qzDOdRbhM,1251
|
|
54
|
-
mplang/v1/protos/v1alpha1/mpir_pb2.py,sha256=Bros37t-4LMJbuUYVSM65rImUYTtZDhNTIADGbZCKp0,7522
|
|
55
|
-
mplang/v1/protos/v1alpha1/mpir_pb2.pyi,sha256=dLxAtFW7mgFR-HYxC4ExI4jbtEWUGTKBvcKhI3BJ8m0,20972
|
|
56
|
-
mplang/v1/protos/v1alpha1/value_pb2.py,sha256=V9fqQTqXNo2efYmlP9xOhC7EpjBUp5jL-05yrJsAvWU,2785
|
|
57
|
-
mplang/v1/protos/v1alpha1/value_pb2.pyi,sha256=47GVvuZfiV5oaVemwh0xTfns8OYTVBT8YnluIQeQPbs,7108
|
|
58
|
-
mplang/v1/runtime/__init__.py,sha256=if0QGJEJMw8PkNyxghzxOdWlNJOEE3UZUnkqU3q2Znc,954
|
|
59
|
-
mplang/v1/runtime/channel.py,sha256=yfy-sI8nQJkINePnzYLtOs2bg7vYqC412uyjrSeDet8,7583
|
|
60
|
-
mplang/v1/runtime/cli.py,sha256=xbnWqYoU35qJjgCk2M8dBg7hU1QqM7nKWbEKCKa_cz4,15343
|
|
61
|
-
mplang/v1/runtime/client.py,sha256=FsKXrBcI0AQmGmwX7BhIhtTNFRmEhTyfNk2ruitf2Gg,15861
|
|
62
|
-
mplang/v1/runtime/communicator.py,sha256=HukrYfnUihN4WfuURCKF8OF3vzelueGgMUEZGDMyhjE,5074
|
|
63
|
-
mplang/v1/runtime/data_providers.py,sha256=DCj-QqVAGf9jNInPoJS9KjsfF79OZXSDT9IRytseH4E,10633
|
|
64
|
-
mplang/v1/runtime/driver.py,sha256=2GONsWJG_USYXiqJMzHJkTwVCsJnsk9vu8bKuRQNk6g,11614
|
|
65
|
-
mplang/v1/runtime/exceptions.py,sha256=c18U0xK20dRmgZo0ogTf5vXlkix9y3VAFuzkHxaXPEk,981
|
|
66
|
-
mplang/v1/runtime/http_api.md,sha256=-re1DhEqMplAkv_wnqEU-PSs8tTzf4-Ml0Gq0f3Go6s,4883
|
|
67
|
-
mplang/v1/runtime/link_comm.py,sha256=4WMq-MTaXe5CboVV_HABxq_o2p863bOXg-E3vy4tKwU,6808
|
|
68
|
-
mplang/v1/runtime/server.py,sha256=1KSgwT0Lm1NNL_sLTf9Rr7EoIsN-gHARfs_h8dzdnLM,16997
|
|
69
|
-
mplang/v1/runtime/session.py,sha256=-H9W4yRatLC_feOFAorXQbR5vb1imkNoefWwjKUe4-k,9648
|
|
70
|
-
mplang/v1/runtime/simulation.py,sha256=S8_v6aHVzx3OI4w-VYLW3CmCjJslViBDPn5sVYcsOsQ,12179
|
|
71
|
-
mplang/v1/simp/__init__.py,sha256=2WE4cmW96Xkzyq2yRRYNww4kZ5o6u6NbPV0BxqZG698,581
|
|
72
|
-
mplang/v1/simp/api.py,sha256=X-NePnIoUfVpumYiffwNGIXnCXZ6zWzwSUmNju_fAbo,13906
|
|
73
|
-
mplang/v1/simp/mpi.py,sha256=EAVWH8vLSkXrobmgyNUrwbHqzL4F8wufoKQmTzXCR28,4751
|
|
74
|
-
mplang/v1/simp/party.py,sha256=_3cj6GctFzzex5_vOjsRrtOybxI9ekXFztfAy5OnOJw,8226
|
|
75
|
-
mplang/v1/simp/random.py,sha256=X1_IzA8C-Rt6bez4oJzTExW5XOKg_EIKlzXf1yJArt4,3843
|
|
76
|
-
mplang/v1/simp/smpc.py,sha256=JGB3zFkDyPcg-TdN77oxMfeiWNoxHkuZNpVoTO9me5Q,9267
|
|
77
|
-
mplang/v1/utils/__init__.py,sha256=2WE4cmW96Xkzyq2yRRYNww4kZ5o6u6NbPV0BxqZG698,581
|
|
78
|
-
mplang/v1/utils/crypto.py,sha256=rvPomBFtznRHc3RPi6Aip9lsU8zW2oxBqGv1K3vn7Rs,1052
|
|
79
|
-
mplang/v1/utils/func_utils.py,sha256=vCJcZmu0bEbqhOQKdpttV2_MBllIcPSN0b8U4WjNGGo,5164
|
|
80
|
-
mplang/v1/utils/spu_utils.py,sha256=S3L9RBkBe2AvSuMSQQ12cBY5Y1NPthubvErSX_7nj1A,4158
|
|
81
|
-
mplang/v1/utils/table_utils.py,sha256=1fDgZLrRf2bvKvA45egT6RtMPgwE1cI2BokMHUU_xv4,5945
|
|
82
|
-
mplang/v2/__init__.py,sha256=rX_DXuAu8IG_2-toMWtLB3UL0YDvXCPoxNoekVmhJG0,13837
|
|
83
|
-
mplang/v2/cli.py,sha256=QtiTFG418k26opRy4GhVV8fwFqRS11xTLH3xRCIIm6M,19665
|
|
84
|
-
mplang/v2/cli_guide.md,sha256=kyoCaqkvIJJ1vsvCyBu3qgOuRSb0txu9BDZoy9GU5S0,3617
|
|
85
|
-
mplang/v2/backends/__init__.py,sha256=H-4-jBEPWBZl6XT7AxBShRINnruF_f_2lB4iaiQoXME,1988
|
|
86
|
-
mplang/v2/backends/bfv_impl.py,sha256=cQPinze3c2xN4CmIIoXxZoIEhu9ynoGaXbdF95z_aTE,25709
|
|
87
|
-
mplang/v2/backends/channel.py,sha256=t8P7RphNnhvo3Zj08hX85d7PxgWQXiMGNYfZPK_4YoM,6622
|
|
88
|
-
mplang/v2/backends/crypto_impl.py,sha256=tU0KdI34hnYvYujKUkiA1XYpvy4lo_MKpidt0NSIKlk,23205
|
|
89
|
-
mplang/v2/backends/field_impl.py,sha256=50sKGOlkUiaTj_IAola86uQeoi-fxV0o7G91BdTCWZA,14788
|
|
90
|
-
mplang/v2/backends/func_impl.py,sha256=R0662cC0gSSfkjuLyevJ_g4bJDJirY76LTFYqEimCkE,3585
|
|
91
|
-
mplang/v2/backends/phe_impl.py,sha256=r836e_qBHGrHhfnFail5IaUDzvS7bABjdEQmJmAtBVI,4127
|
|
92
|
-
mplang/v2/backends/simp_design.md,sha256=CXvfxrvV1TmKlFm8IbKTbcHHwLl6AhwlY_cNqMdff_Y,5250
|
|
93
|
-
mplang/v2/backends/spu_impl.py,sha256=8F4oXmVEr-lt9mrT5fdNznrJZeznwOd7CrmB0-dVtx8,9475
|
|
94
|
-
mplang/v2/backends/spu_state.py,sha256=u84hgLhcCcpKvseXwtVa2hC9fj_HrLCVNHy6LMd37rE,6569
|
|
95
|
-
mplang/v2/backends/store_impl.py,sha256=RyhADTNsnnNnwsatAMr7eeewXkVXtfNWA1oFiLXg8H0,2222
|
|
96
|
-
mplang/v2/backends/table_impl.py,sha256=Qmd-Z_PLjSbDngWkHz0wc6VykoGHfS2-rCOk1aWudws,27566
|
|
97
|
-
mplang/v2/backends/tee_impl.py,sha256=Gp-vqqJPtEMNqP7y68tLhL3a-EW3BQwpo_qCJOSHqKs,7044
|
|
98
|
-
mplang/v2/backends/tensor_impl.py,sha256=8f9f4-_e-m4JWGZSbXLmSSHcgPykRBc1sAYrA3OIxEg,18906
|
|
99
|
-
mplang/v2/backends/simp_driver/__init__.py,sha256=ahOPYYvtFVwqxiFxkpSNP8BCTao_MfCXmtt5zsMaJxg,1258
|
|
100
|
-
mplang/v2/backends/simp_driver/http.py,sha256=Fm0M7BKf6Ddqec79btd-tJiuVaD92yghr1GJc84RXmg,5550
|
|
101
|
-
mplang/v2/backends/simp_driver/mem.py,sha256=kx3jDAYx3QkJa1UZDhhY_JjJAdT8u-r6Hsw8fYwFPKY,9128
|
|
102
|
-
mplang/v2/backends/simp_driver/ops.py,sha256=UeVC3eaCUwxrkN6OsJyMYj8qMDufMFQI0YogeSbhkjM,4515
|
|
103
|
-
mplang/v2/backends/simp_driver/state.py,sha256=6tQyQg_PNzHOJkjCoNm51Wvknl3XiJZzpQXuRB4qRtM,1719
|
|
104
|
-
mplang/v2/backends/simp_driver/values.py,sha256=OQ_7Kt6l7Pcfx5eB6GVbpunS6CG60Lj0AS6H9Wx9sKQ,1515
|
|
105
|
-
mplang/v2/backends/simp_worker/__init__.py,sha256=93VMzntLN1kpePK1KoLsU3J3RU-krgV3smCRRRo-xKA,970
|
|
106
|
-
mplang/v2/backends/simp_worker/http.py,sha256=HI4Kj8tsN8Z058m9D_8cU22d37VzQTlN4PW7d30dxSE,12656
|
|
107
|
-
mplang/v2/backends/simp_worker/mem.py,sha256=coDvztNDLlflCh2oGNuO0PSMILKZ28Fvyfhks4Vsnzc,3577
|
|
108
|
-
mplang/v2/backends/simp_worker/ops.py,sha256=DMQCsKeoMtemy5ozsVZt2eoF8NZlhLeHZMDgnBSP29I,5525
|
|
109
|
-
mplang/v2/backends/simp_worker/state.py,sha256=eRUI7MP6gU8KPC9-H5fwcoAPKOsfW2ODWvpoKWbecMk,1554
|
|
110
|
-
mplang/v2/dialects/__init__.py,sha256=hvzAvz6_brfFyDGgKknoPdgh5EY033YNYwotuJK_zoA,1493
|
|
111
|
-
mplang/v2/dialects/bfv.py,sha256=XrE3FX9DHWqNzUVzY0tuwPvNVVRZYpD51JZIZF-q-l4,22350
|
|
112
|
-
mplang/v2/dialects/crypto.py,sha256=dH_DtoE3pGAKeOLPHxeyGtXC-nGwBsOs62TKikJEaq0,22197
|
|
113
|
-
mplang/v2/dialects/dtypes.py,sha256=bGM3Jna3BnvE4MPOurWrEmQegGPxd26z1HIWox1rj0U,12104
|
|
114
|
-
mplang/v2/dialects/field.py,sha256=6nBJg08k5WHb2o5msr8XAnxMQLpoTej55VQ7iSRnC4o,6380
|
|
115
|
-
mplang/v2/dialects/func.py,sha256=UlaMof4NEG28VOtiRL7zBRYgFbIX74YTqqgvozbils0,4375
|
|
116
|
-
mplang/v2/dialects/phe.py,sha256=PkehfF2NVBOu05zXITZ87yl-YQa4hwLs7zmUPbk2XhY,22896
|
|
117
|
-
mplang/v2/dialects/simp.py,sha256=ON7iegkHp3um5UX8V4Y5I-fGgFJ3YVwmFsXsleiqqUE,32869
|
|
118
|
-
mplang/v2/dialects/spu.py,sha256=3JO-D394TKNH2VdFDRp5ohmG0uOcOHEs_ivFHbMZIgA,11385
|
|
119
|
-
mplang/v2/dialects/store.py,sha256=RqUBzMAgtEMBmdT8axV5lVCv1hp5w0ZZM0Tu4iOZt-c,2114
|
|
120
|
-
mplang/v2/dialects/table.py,sha256=jwNKHhpTRnpZVu_UhXGHKRAV0ekI8nXl5lLHa5PpxTE,13543
|
|
121
|
-
mplang/v2/dialects/tee.py,sha256=oj_G8ebhtuz9_HarK8rKoaJNJ9ZkRbqcIxhp3m0xsjQ,10129
|
|
122
|
-
mplang/v2/dialects/tensor.py,sha256=VVIlWtSHpeYFwGuKw7yWxwMQ_a35XJ-2ardeBed2HL8,39900
|
|
123
|
-
mplang/v2/edsl/README.md,sha256=viflvdRojOa6Xk_UMRPqpuPGXcPGmdlv2-XR6LO7B58,7592
|
|
124
|
-
mplang/v2/edsl/__init__.py,sha256=YqmtrJXD1NLKS-_Ofnxtiv77muokTZnrAiV7dXUZVyo,2607
|
|
125
|
-
mplang/v2/edsl/context.py,sha256=0RgQAt7cbPudt9kyBb7wjZ31HzGMnq81Ah5sgs_qU2U,10093
|
|
126
|
-
mplang/v2/edsl/graph.py,sha256=VXeE_9Oc9E0qfnwFDYBvFyDL79qvABLs1aFC-lheJ8M,14983
|
|
127
|
-
mplang/v2/edsl/jit.py,sha256=tofGAqNSUPuEmqy0flaZpNaR1Y425Pk2FdmCKxRPCM8,2069
|
|
128
|
-
mplang/v2/edsl/object.py,sha256=rijDu4yuG_Sitgfz5gk8-mJ1-3Bgor0QrQU04q9mkgo,1909
|
|
129
|
-
mplang/v2/edsl/primitive.py,sha256=rkKGYDa8qEOr2EmVn7GTfsCGHWL_3N-eIgD7QJ4UIW8,10575
|
|
130
|
-
mplang/v2/edsl/printer.py,sha256=x9vjhicqLvtZcrCkqQhF8QWAcvEArgyU6aqVLB9Ym2I,4396
|
|
131
|
-
mplang/v2/edsl/registry.py,sha256=hudXZPUrUUueEwgksDKN0cnE3iiXucuTaDdDK8uSPmk,6822
|
|
132
|
-
mplang/v2/edsl/serde.py,sha256=AKfryPMu9TiOqzkp5csck-wDHfksOgJEbndcH6tS6l0,11644
|
|
133
|
-
mplang/v2/edsl/tracer.py,sha256=HGrduMkEH8Cov19xCXmurVe46IMBjqdFxVP6C0zDoYI,22549
|
|
134
|
-
mplang/v2/edsl/typing.py,sha256=Ot2P8RNxVsE_sgsAFEPlH4l3MeVk3xrq0if6_8jf1nI,29290
|
|
135
|
-
mplang/v2/kernels/Makefile,sha256=5PoPpajcb_8ByPGNHzVytmovXUwkjJs_K8MbXX9qDYs,1033
|
|
136
|
-
mplang/v2/kernels/__init__.py,sha256=J_rDl9lAXd7QL3Nt_P3YX6j9yge7ssguSaHuafPZNKE,876
|
|
137
|
-
mplang/v2/kernels/gf128.cpp,sha256=WIvCr3MijzwJxMi1Wnfhm8aWT8oL0fia6FeyTmFJtPQ,5975
|
|
138
|
-
mplang/v2/kernels/ldpc.cpp,sha256=_zE90ZHQvrweRkBB3CEu80cXKG0a-QNJ59ZQ452gml8,2654
|
|
139
|
-
mplang/v2/kernels/okvs.cpp,sha256=Z_7oGHFAdLc5d5llUNujBO8HwDBh5yd3MpfmT8ZNf1o,10347
|
|
140
|
-
mplang/v2/kernels/okvs_opt.cpp,sha256=5MkI_rTfFxohIKqU5Uog0TpxokgXTjUVIJMUS0q5e2I,11870
|
|
141
|
-
mplang/v2/kernels/py_kernels.py,sha256=FDsD86IHV-UBzxZLolhSOkrp24PuboHXeb1gBHLOfMo,12073
|
|
142
|
-
mplang/v2/libs/collective.py,sha256=pfXq9tmFUNKjeHhWMTjtzOi-m2Fn1lLru1G6txZVyic,10683
|
|
143
|
-
mplang/v2/libs/device/__init__.py,sha256=mXsSvXrWmlHu6Ch87Vcd85m4L_qdDkbSvJyHyuai2fc,1251
|
|
144
|
-
mplang/v2/libs/device/api.py,sha256=d_Wbka8bxxXsRMW6zDhjzL9LPtChSk2-ryfi-c4Mqsk,28830
|
|
145
|
-
mplang/v2/libs/device/cluster.py,sha256=YUqYZ_IBS6rpV5ejUFP3kTxcTQHSyeDeuaJcsiFY_Js,12508
|
|
146
|
-
mplang/v2/libs/ml/__init__.py,sha256=xTxhC_YwHP32muUEFCEwOjc-3Ml-vmO48NNECU90zm4,787
|
|
147
|
-
mplang/v2/libs/ml/sgb.py,sha256=T6GF9kYMHvuoffB567UlcwDoDCJ2SH7vttAABmgdmvU,60223
|
|
148
|
-
mplang/v2/libs/mpc/__init__.py,sha256=znADXBv0cATTvNN9pVOH8V47O5vmYZnR1Y7tfh1QVjw,1405
|
|
149
|
-
mplang/v2/libs/mpc/_utils.py,sha256=Xzt5jIQSm2e8_xFC6zrdKL93IqbTDb40apk2JBbEgBI,3215
|
|
150
|
-
mplang/v2/libs/mpc/analytics/__init__.py,sha256=8_1Sm05nrO2ISat1hNZT6UXHpKQ-SDBby1eeS-wm_fE,1204
|
|
151
|
-
mplang/v2/libs/mpc/analytics/aggregation.py,sha256=VPWwfcSV1kryG6EthjhOysh1RxH8xYczKnI_f7fmEgo,11648
|
|
152
|
-
mplang/v2/libs/mpc/analytics/groupby.md,sha256=_3oCouzGKlWt3OBMIFkhN25gyzJj6DlGpq-B78_PSlU,4679
|
|
153
|
-
mplang/v2/libs/mpc/analytics/groupby.py,sha256=3xXHYewJe28uu7BY1IwtsggKbU32LZkT81UZd67lmo4,11318
|
|
154
|
-
mplang/v2/libs/mpc/analytics/permutation.py,sha256=B-m9JtIMMc23C0AwfH_Yg5IF2XUIaMDT2IHluMNiiOM,13820
|
|
155
|
-
mplang/v2/libs/mpc/common/constants.py,sha256=YRRE8WkLGfdOZzicc976hPsPeZZkqho3aW41i5Mj72s,1316
|
|
156
|
-
mplang/v2/libs/mpc/ot/__init__.py,sha256=9Ivef7QnAzoCBtIohh2kzOSdfslcNftOwKV_d9Qv4z0,951
|
|
157
|
-
mplang/v2/libs/mpc/ot/base.py,sha256=J7jK8jwhXVlNIkIO9l7ZIRTPMYEDsuUQjP00nwPkMrs,7018
|
|
158
|
-
mplang/v2/libs/mpc/ot/extension.py,sha256=Z2br1HUin_wmosNPskx9o0bVGR5TF_pUIyp7lz7vPDI,17458
|
|
159
|
-
mplang/v2/libs/mpc/ot/silent.py,sha256=9J3sMsz3XzxPbIk91IpfAvvdGeZw-Tt0kElyPsNlnac,7879
|
|
160
|
-
mplang/v2/libs/mpc/psi/__init__.py,sha256=mpevlx3Z5_u9Q1McDZBBIGHApeO9julgiM09GToxxEA,1231
|
|
161
|
-
mplang/v2/libs/mpc/psi/cuckoo.py,sha256=GQvLi7BtaPZyk96xwVCwpQPGlcGhOUX6kdsEn8P80l0,7752
|
|
162
|
-
mplang/v2/libs/mpc/psi/okvs.py,sha256=a1Q4ILrsLII9K-BJRSX8iKkpkxJsMxFEj7cTId-XGCE,1576
|
|
163
|
-
mplang/v2/libs/mpc/psi/okvs_gct.py,sha256=YcN5ms8StV4ogHR5gK4-SlbIjbcA0QjITagza2EyY70,3375
|
|
164
|
-
mplang/v2/libs/mpc/psi/oprf.py,sha256=YXD-I9P3t1YuqHVxOD9JUpLTZUu-HjgvOaEOQ3hhxMM,13772
|
|
165
|
-
mplang/v2/libs/mpc/psi/rr22.py,sha256=fDXigUduBnHfG_8qoL4uS7EHaTmjUjJsZCgnA0-u8cQ,11209
|
|
166
|
-
mplang/v2/libs/mpc/psi/unbalanced.py,sha256=hC84TVsgnlJDg6hpUrx8kbUbmFb27T9wrHG0zv3FXLc,7433
|
|
167
|
-
mplang/v2/libs/mpc/vole/__init__.py,sha256=2dU4X6n73HoK-YCiCl4b36SkLRKR6rofe2xxLxBz6Rc,968
|
|
168
|
-
mplang/v2/libs/mpc/vole/gilboa.py,sha256=apnKOYR4_dJ2wkzGq7PBlwauA-W5i5MPESdetCWTegU,9951
|
|
169
|
-
mplang/v2/libs/mpc/vole/ldpc.py,sha256=1H_Dz1xdZTN2f3V6lz9NKBaY-How9Qu1GgwN0IJZero,12786
|
|
170
|
-
mplang/v2/libs/mpc/vole/silver.py,sha256=Qnk3EiA18i6RJl-iDCMHOwNdf0Zvkmxq_57O3Y0HPFw,12236
|
|
171
|
-
mplang/v2/runtime/__init__.py,sha256=VdUwJ3kDaI46FvGw7iMGwcsjt0HTGmmRmaBwj99xKIw,620
|
|
172
|
-
mplang/v2/runtime/dialect_state.py,sha256=HxO1i4kSOujS2tQzAF9-WmI3nChSaGgupf2_07dHetY,1277
|
|
173
|
-
mplang/v2/runtime/interpreter.py,sha256=UzrM5oepka6H0YKRZncNXhsuwKVm4pliG5J92fFRZMI,32300
|
|
174
|
-
mplang/v2/runtime/object_store.py,sha256=yT6jtKG2GUEJVmpq3gnQ8mCMvUFYzgBciC5A-J5KRdk,5998
|
|
175
|
-
mplang/v2/runtime/value.py,sha256=CMOxElJP78v7pjasPhEpbxWbSgB2KsLbpPmzz0mQX0E,4317
|
|
176
|
-
mplang_nightly-0.1.dev269.dist-info/METADATA,sha256=54UZyxyPNQqxRpAXBoj_1ZQxHjf5a5Gi7sBKBsEYx78,16775
|
|
177
|
-
mplang_nightly-0.1.dev269.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
178
|
-
mplang_nightly-0.1.dev269.dist-info/entry_points.txt,sha256=mG1oJT-GAjQR834a62_QIWb7litzWPPyVnwFqm-rWuY,55
|
|
179
|
-
mplang_nightly-0.1.dev269.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
180
|
-
mplang_nightly-0.1.dev269.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mplang_nightly-0.1.dev269.dist-info → mplang_nightly-0.1.dev271.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{mplang_nightly-0.1.dev269.dist-info → mplang_nightly-0.1.dev271.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|