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
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
# mypy: disable-error-code="no-untyped-def,no-any-return,var-annotated"
|
|
16
16
|
|
|
17
|
-
"""SecureBoost v2: Optimized implementation using mplang
|
|
17
|
+
"""SecureBoost v2: Optimized implementation using mplang low-level BFV APIs.
|
|
18
18
|
|
|
19
19
|
This implementation improves upon v1 by leveraging BFV SIMD slots and the
|
|
20
20
|
groupby primitives for efficient histogram computation.
|
|
@@ -46,8 +46,8 @@ import jax.numpy as jnp
|
|
|
46
46
|
import numpy as np
|
|
47
47
|
from jax.ops import segment_sum
|
|
48
48
|
|
|
49
|
-
from mplang.
|
|
50
|
-
from mplang.
|
|
49
|
+
from mplang.dialects import bfv, simp, tensor
|
|
50
|
+
from mplang.libs.mpc.analytics import aggregation
|
|
51
51
|
|
|
52
52
|
# ==============================================================================
|
|
53
53
|
# Configuration
|
|
@@ -1687,7 +1687,7 @@ def fit_tree_ensemble(
|
|
|
1687
1687
|
|
|
1688
1688
|
|
|
1689
1689
|
class SecureBoost:
|
|
1690
|
-
"""SecureBoost classifier using mplang
|
|
1690
|
+
"""SecureBoost classifier using mplang low-level BFV APIs.
|
|
1691
1691
|
|
|
1692
1692
|
This is an optimized implementation that uses BFV SIMD slots for
|
|
1693
1693
|
efficient histogram computation.
|
|
@@ -21,9 +21,9 @@ Subpackages:
|
|
|
21
21
|
- analytics: Privacy-preserving analytics
|
|
22
22
|
|
|
23
23
|
Example usage:
|
|
24
|
-
from mplang.
|
|
25
|
-
from mplang.
|
|
26
|
-
from mplang.
|
|
24
|
+
from mplang.libs.mpc import ot_transfer, apply_permutation
|
|
25
|
+
from mplang.libs.mpc.vole import silver_vole
|
|
26
|
+
from mplang.libs.mpc.psi import psi_intersect
|
|
27
27
|
"""
|
|
28
28
|
|
|
29
29
|
from .analytics.aggregation import rotate_and_sum
|
|
@@ -20,8 +20,8 @@ from typing import Any, cast
|
|
|
20
20
|
|
|
21
21
|
import jax.numpy as jnp
|
|
22
22
|
|
|
23
|
-
import mplang.
|
|
24
|
-
from mplang.
|
|
23
|
+
import mplang.edsl as el
|
|
24
|
+
from mplang.dialects import tensor
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
def bytes_to_bits(data: el.Object) -> el.Object:
|
|
@@ -27,8 +27,8 @@ from typing import Any
|
|
|
27
27
|
import jax
|
|
28
28
|
import jax.numpy as jnp
|
|
29
29
|
|
|
30
|
-
from mplang.
|
|
31
|
-
from mplang.
|
|
30
|
+
from mplang.dialects import bfv, crypto, simp, tensor
|
|
31
|
+
from mplang.libs.mpc.analytics import aggregation, permutation
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
def oblivious_groupby_sum_bfv(
|
|
@@ -33,9 +33,9 @@ import jax
|
|
|
33
33
|
import jax.numpy as jnp
|
|
34
34
|
import numpy as np
|
|
35
35
|
|
|
36
|
-
import mplang.
|
|
37
|
-
from mplang.
|
|
38
|
-
from mplang.
|
|
36
|
+
import mplang.edsl.typing as elt
|
|
37
|
+
from mplang.dialects import simp, tensor
|
|
38
|
+
from mplang.libs.mpc.ot import base as ot
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
def secure_switch(
|
|
@@ -27,9 +27,9 @@ from typing import Any, cast
|
|
|
27
27
|
|
|
28
28
|
import numpy as np
|
|
29
29
|
|
|
30
|
-
import mplang.
|
|
31
|
-
import mplang.
|
|
32
|
-
from mplang.
|
|
30
|
+
import mplang.edsl as el
|
|
31
|
+
import mplang.edsl.typing as elt
|
|
32
|
+
from mplang.dialects import crypto, simp, tensor
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
def _receiver_keygen_scalar(
|
|
@@ -24,8 +24,8 @@ from typing import Any, cast
|
|
|
24
24
|
|
|
25
25
|
import jax.numpy as jnp
|
|
26
26
|
|
|
27
|
-
import mplang.
|
|
28
|
-
from mplang.
|
|
27
|
+
import mplang.edsl as el
|
|
28
|
+
from mplang.dialects import crypto, field, simp, tensor
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
def prg_expand(seed_tensor: el.Object, length: int) -> el.Object:
|
|
@@ -22,10 +22,10 @@ from typing import Any, cast
|
|
|
22
22
|
|
|
23
23
|
import jax.numpy as jnp
|
|
24
24
|
|
|
25
|
-
import mplang.
|
|
26
|
-
import mplang.
|
|
27
|
-
import mplang.
|
|
28
|
-
from mplang.
|
|
25
|
+
import mplang.edsl as el
|
|
26
|
+
import mplang.edsl.typing as elt
|
|
27
|
+
import mplang.libs.mpc.vole.gilboa as vole
|
|
28
|
+
from mplang.dialects import crypto, field, simp, tensor
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
def silent_vole_random_u(
|
|
@@ -26,9 +26,9 @@ from typing import Any, cast
|
|
|
26
26
|
|
|
27
27
|
import jax.numpy as jnp
|
|
28
28
|
|
|
29
|
-
import mplang.
|
|
30
|
-
from mplang.
|
|
31
|
-
from mplang.
|
|
29
|
+
import mplang.edsl as el
|
|
30
|
+
from mplang.dialects import tensor
|
|
31
|
+
from mplang.libs.mpc.common.constants import (
|
|
32
32
|
E_FRAC_1,
|
|
33
33
|
GOLDEN_RATIO_64,
|
|
34
34
|
PI_FRAC_1,
|
|
@@ -18,9 +18,9 @@ This module provides the core data structures and algorithms for Sparse OKVS,
|
|
|
18
18
|
which is a critical component in unbalanced Private Set Intersection (PSI).
|
|
19
19
|
"""
|
|
20
20
|
|
|
21
|
-
import mplang.
|
|
22
|
-
from mplang.
|
|
23
|
-
from mplang.
|
|
21
|
+
import mplang.edsl as el
|
|
22
|
+
from mplang.dialects import field
|
|
23
|
+
from mplang.libs.mpc.psi.okvs import OKVS
|
|
24
24
|
|
|
25
25
|
# ============================================================================
|
|
26
26
|
# Constants
|
|
@@ -24,9 +24,9 @@ from typing import Any, cast
|
|
|
24
24
|
|
|
25
25
|
import jax.numpy as jnp
|
|
26
26
|
|
|
27
|
-
import mplang.
|
|
28
|
-
from mplang.
|
|
29
|
-
from mplang.
|
|
27
|
+
import mplang.edsl as el
|
|
28
|
+
from mplang.dialects import simp, tensor
|
|
29
|
+
from mplang.libs.mpc.ot import extension as ot_extension
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
def eval_oprf(
|
|
@@ -64,9 +64,9 @@ from typing import Any, cast
|
|
|
64
64
|
|
|
65
65
|
import jax.numpy as jnp
|
|
66
66
|
|
|
67
|
-
import mplang.
|
|
68
|
-
import mplang.
|
|
69
|
-
from mplang.
|
|
67
|
+
import mplang.edsl as el
|
|
68
|
+
import mplang.libs.mpc.ot.silent as silent_ot
|
|
69
|
+
from mplang.dialects import field, simp, tensor
|
|
70
70
|
|
|
71
71
|
|
|
72
72
|
def psi_intersect(
|
|
@@ -107,7 +107,7 @@ def psi_intersect(
|
|
|
107
107
|
# =========================================================================
|
|
108
108
|
# Phase 1. Parameter Setup
|
|
109
109
|
# =========================================================================
|
|
110
|
-
import mplang.
|
|
110
|
+
import mplang.libs.mpc.psi.okvs_gct as okvs_gct
|
|
111
111
|
|
|
112
112
|
expansion = okvs_gct.get_okvs_expansion(n)
|
|
113
113
|
M = int(n * expansion)
|
|
@@ -137,8 +137,8 @@ def psi_intersect(
|
|
|
137
137
|
# Receiver masks P with U (Paper's A vector).
|
|
138
138
|
# Q = P ^ U
|
|
139
139
|
|
|
140
|
-
from mplang.
|
|
141
|
-
from mplang.
|
|
140
|
+
from mplang.dialects import crypto
|
|
141
|
+
from mplang.edsl import typing as elt
|
|
142
142
|
|
|
143
143
|
def _gen_seed() -> Any:
|
|
144
144
|
return crypto.random_tensor((2,), elt.u64)
|
|
@@ -262,7 +262,7 @@ def psi_intersect(
|
|
|
262
262
|
# the truncated hash (first 16 bytes).
|
|
263
263
|
|
|
264
264
|
# 5.1 Compute hashed & truncated tags on Sender
|
|
265
|
-
from mplang.
|
|
265
|
+
from mplang.libs.mpc.ot import extension as ot_extension
|
|
266
266
|
|
|
267
267
|
def _hash_and_trunc(tags: Any) -> Any:
|
|
268
268
|
# Compute batched hash on sender and truncate to 16 bytes
|
|
@@ -36,10 +36,10 @@ from typing import Any, cast
|
|
|
36
36
|
|
|
37
37
|
import jax.numpy as jnp
|
|
38
38
|
|
|
39
|
-
import mplang.
|
|
40
|
-
import mplang.
|
|
41
|
-
from mplang.
|
|
42
|
-
from mplang.
|
|
39
|
+
import mplang.edsl as el
|
|
40
|
+
import mplang.edsl.typing as elt
|
|
41
|
+
from mplang.dialects import crypto, field, simp, tensor
|
|
42
|
+
from mplang.libs.mpc.psi.okvs_gct import get_okvs_expansion
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
def psi_unbalanced(
|
|
@@ -24,9 +24,9 @@ from typing import Any, cast
|
|
|
24
24
|
import jax.numpy as jnp
|
|
25
25
|
import numpy as np
|
|
26
26
|
|
|
27
|
-
import mplang.
|
|
28
|
-
import mplang.
|
|
29
|
-
from mplang.
|
|
27
|
+
import mplang.edsl as el
|
|
28
|
+
import mplang.libs.mpc.ot.extension as ot
|
|
29
|
+
from mplang.dialects import field, simp, tensor
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
def vole(
|
|
@@ -32,8 +32,8 @@ import jax.numpy as jnp
|
|
|
32
32
|
import numpy as np
|
|
33
33
|
import scipy.sparse as sp
|
|
34
34
|
|
|
35
|
-
import mplang.
|
|
36
|
-
from mplang.
|
|
35
|
+
import mplang.edsl as el
|
|
36
|
+
from mplang.dialects import crypto, field, tensor
|
|
37
37
|
|
|
38
38
|
# ============================================================================
|
|
39
39
|
# Constants
|
|
@@ -43,11 +43,11 @@ from typing import Any, cast
|
|
|
43
43
|
|
|
44
44
|
import jax.numpy as jnp
|
|
45
45
|
|
|
46
|
-
import mplang.
|
|
47
|
-
import mplang.
|
|
48
|
-
import mplang.
|
|
49
|
-
from mplang.
|
|
50
|
-
from mplang.
|
|
46
|
+
import mplang.edsl as el
|
|
47
|
+
import mplang.edsl.typing as elt
|
|
48
|
+
import mplang.libs.mpc.ot.extension as ot
|
|
49
|
+
from mplang.dialects import crypto, field, simp, tensor
|
|
50
|
+
from mplang.libs.mpc.vole import ldpc
|
|
51
51
|
|
|
52
52
|
# ============================================================================
|
|
53
53
|
# Constants
|
|
@@ -148,7 +148,7 @@ def silver_vole(
|
|
|
148
148
|
H_indices_r, H_indptr_r = simp.pcall_static((receiver,), _sparse_struct_provider)
|
|
149
149
|
|
|
150
150
|
# 2. Base VOLE (Size K)
|
|
151
|
-
from mplang.
|
|
151
|
+
from mplang.libs.mpc.vole import gilboa
|
|
152
152
|
|
|
153
153
|
def _u_base_provider() -> el.Object:
|
|
154
154
|
# Generate random u_base using new API
|
|
@@ -33,16 +33,16 @@ import time
|
|
|
33
33
|
from collections.abc import Callable
|
|
34
34
|
from typing import TYPE_CHECKING, Any, cast
|
|
35
35
|
|
|
36
|
-
from mplang.
|
|
37
|
-
from mplang.
|
|
38
|
-
from mplang.
|
|
39
|
-
from mplang.
|
|
40
|
-
from mplang.
|
|
41
|
-
from mplang.
|
|
42
|
-
from mplang.
|
|
36
|
+
from mplang.edsl.context import AbstractInterpreter
|
|
37
|
+
from mplang.edsl.graph import Graph
|
|
38
|
+
from mplang.edsl.object import Object
|
|
39
|
+
from mplang.edsl.registry import get_impl
|
|
40
|
+
from mplang.edsl.typing import BaseType
|
|
41
|
+
from mplang.runtime.dialect_state import DialectState
|
|
42
|
+
from mplang.runtime.object_store import ObjectStore
|
|
43
43
|
|
|
44
44
|
if TYPE_CHECKING:
|
|
45
|
-
from mplang.
|
|
45
|
+
from mplang.edsl.primitive import Primitive
|
|
46
46
|
|
|
47
47
|
|
|
48
48
|
class ExecutionTracer:
|
|
@@ -442,8 +442,8 @@ class Interpreter(AbstractInterpreter):
|
|
|
442
442
|
Returns:
|
|
443
443
|
Execution result (InterpObject or list of InterpObject or mixed with immediates)
|
|
444
444
|
"""
|
|
445
|
-
from mplang.
|
|
446
|
-
from mplang.
|
|
445
|
+
from mplang.edsl.tracer import Tracer
|
|
446
|
+
from mplang.utils import var_demorph, var_morph
|
|
447
447
|
|
|
448
448
|
# Create tracer and build graph
|
|
449
449
|
# Note: primitive.bind() internally calls Tracer.lift() with is_param=False,
|
|
@@ -525,7 +525,7 @@ class Interpreter(AbstractInterpreter):
|
|
|
525
525
|
>>> interp = Interpreter()
|
|
526
526
|
>>> z_interp = interp.lift(z_trace) # evaluate graph → InterpObject
|
|
527
527
|
"""
|
|
528
|
-
from mplang.
|
|
528
|
+
from mplang.edsl.tracer import TraceObject
|
|
529
529
|
|
|
530
530
|
if isinstance(obj, InterpObject):
|
|
531
531
|
# InterpObject must belong to this interpreter
|
|
@@ -22,8 +22,8 @@ This module defines:
|
|
|
22
22
|
implements the "wrap/unwrap" pattern with automatic type conversion.
|
|
23
23
|
|
|
24
24
|
Usage:
|
|
25
|
-
from mplang.
|
|
26
|
-
from mplang.
|
|
25
|
+
from mplang.runtime.value import Value
|
|
26
|
+
from mplang.edsl import serde
|
|
27
27
|
|
|
28
28
|
@serde.register_class
|
|
29
29
|
class MyValue(Value):
|
|
@@ -12,21 +12,24 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
15
|
+
from .func_utils import (
|
|
16
|
+
MorphStruct,
|
|
17
|
+
is_treedef_list,
|
|
18
|
+
list_reconstruct,
|
|
19
|
+
list_split,
|
|
20
|
+
normalize_fn,
|
|
21
|
+
validate_morph_struct,
|
|
22
|
+
var_demorph,
|
|
23
|
+
var_morph,
|
|
24
|
+
)
|
|
25
25
|
|
|
26
26
|
__all__ = [
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
"MorphStruct",
|
|
28
|
+
"is_treedef_list",
|
|
29
|
+
"list_reconstruct",
|
|
30
|
+
"list_split",
|
|
31
|
+
"normalize_fn",
|
|
32
|
+
"validate_morph_struct",
|
|
33
|
+
"var_demorph",
|
|
34
|
+
"var_morph",
|
|
32
35
|
]
|
|
@@ -119,7 +119,7 @@ def normalize_fn(
|
|
|
119
119
|
return normalized, params
|
|
120
120
|
|
|
121
121
|
|
|
122
|
-
def is_treedef_list(treedef: PyTreeDef) -> bool:
|
|
122
|
+
def is_treedef_list(treedef: PyTreeDef) -> bool: # type: ignore
|
|
123
123
|
"""
|
|
124
124
|
Checks if a PyTreeDef object represents a simple (non-nested) list.
|
|
125
125
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mplang-nightly
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.dev271
|
|
4
4
|
Summary: Multi-Party Programming Language
|
|
5
5
|
Author-email: SecretFlow Team <secretflow-contact@service.alipay.com>
|
|
6
6
|
License: Apache License
|
|
@@ -214,7 +214,7 @@ Requires-Dist: flax>=0.12.0
|
|
|
214
214
|
Requires-Dist: httpx<1.0.0,>=0.27.0
|
|
215
215
|
Requires-Dist: jax[cpu]==0.8.0
|
|
216
216
|
Requires-Dist: lightphe<0.1.0,>=0.0.15
|
|
217
|
-
Requires-Dist: numpy
|
|
217
|
+
Requires-Dist: numpy!=2.4.0,>=2.0.0
|
|
218
218
|
Requires-Dist: pandas>=2.0.0
|
|
219
219
|
Requires-Dist: protobuf<6.0,>=5.0
|
|
220
220
|
Requires-Dist: pyarrow>=14.0.0
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
mplang/__init__.py,sha256=q-H8IXjVuI79eHhSFVh4FT5KbYow4lGyji2MyLsjufw,13429
|
|
2
|
+
mplang/cli.py,sha256=PqxgWL0rtG-0zuip4JzoVKTIQ5gAwIwHzG3xlZJaBwI,19638
|
|
3
|
+
mplang/cli_guide.md,sha256=hKC6AKgJn-lM_wZ0CzZIP2QUBxGPnT0Op_1YyeUhCfI,3581
|
|
4
|
+
mplang/py.typed,sha256=RyhZV7Yxo8BvEoBiFz5fH3IWVqQKTcBBE-bzjx_N5GQ,583
|
|
5
|
+
mplang/backends/__init__.py,sha256=EnKHmOX4YgvNVA42k_KfiS-Vn860yN7Rj9XkUU0g9ys,2042
|
|
6
|
+
mplang/backends/bfv_impl.py,sha256=qobGXe7ldWvYVcqdkNsTcVdNV-hUVE9-Ks5pd3X0Mvc,25691
|
|
7
|
+
mplang/backends/channel.py,sha256=t8P7RphNnhvo3Zj08hX85d7PxgWQXiMGNYfZPK_4YoM,6622
|
|
8
|
+
mplang/backends/crypto_impl.py,sha256=m5tbZpedn4McG5t6HIaEjhTQUFOIaEDMdyEG0499S0Y,23187
|
|
9
|
+
mplang/backends/field_impl.py,sha256=lIghppy0i8QL7aTNCr8tNWjC_bvOXBIKLnavaO0fIOA,14773
|
|
10
|
+
mplang/backends/func_impl.py,sha256=vhkSJnvgSzvQWXqOE40O8npqOmtNqLxefzv9ETuQODQ,3573
|
|
11
|
+
mplang/backends/phe_impl.py,sha256=CefRpFrRJvbZm3X58OYOFAyNZXKDp081Q6CT8fhdreE,4118
|
|
12
|
+
mplang/backends/simp_design.md,sha256=u4YeDLKk5avsueXhzPtt4OUBToBmurOVK_BWTKTJ7w0,5246
|
|
13
|
+
mplang/backends/spu_impl.py,sha256=6hGdEcZ34ZkwsD6ZnkrhNkmut_UnWWxNiOgHQwMKMCs,9451
|
|
14
|
+
mplang/backends/spu_state.py,sha256=tgwOiWN6zfP-fBx2rN2cNnC-Y9GrSArqU-ZBT3NdXls,6557
|
|
15
|
+
mplang/backends/store_impl.py,sha256=BdrCfNhFbcjswIvfxD2XKGYeBfBrmEQA3pj2-EDzFcI,2213
|
|
16
|
+
mplang/backends/table_impl.py,sha256=-8KCVSboJkL81HPLRzTpUlSvC37d5qNLIQx1xluN3Pg,27542
|
|
17
|
+
mplang/backends/tee_impl.py,sha256=5yed94Lr55hgSDT6j3FjdTboqzhl4HpJ9lGk1YGZBXQ,7026
|
|
18
|
+
mplang/backends/tensor_impl.py,sha256=4-cypN0KuUD8dzpzAdWEWWuRlzLZwwyIap9QscWGLyk,18888
|
|
19
|
+
mplang/backends/simp_driver/__init__.py,sha256=pQkHGR8HagnPB4OqagPZY-Ul19y6HjIJ5dY6QXZrBH8,1243
|
|
20
|
+
mplang/backends/simp_driver/http.py,sha256=vrjfyEs1_TiMh7I-3cQhIwG6edE0R_eTGegvfFl5xx4,5526
|
|
21
|
+
mplang/backends/simp_driver/mem.py,sha256=EAsDO4Zl2pHf8TY4K_whluhbAwaT1NhktBM9u4g5yYE,9101
|
|
22
|
+
mplang/backends/simp_driver/ops.py,sha256=WYObWDRCsiXH0UBWZX5vD5W98ZPkd88U_qBV8SE5rA8,4503
|
|
23
|
+
mplang/backends/simp_driver/state.py,sha256=dNmYMFN2D2BBdgs6C0YLaHrfaBRMgs05UNxMWw6tZIs,1713
|
|
24
|
+
mplang/backends/simp_driver/values.py,sha256=Lz1utNSIzH-dCzZAEjU6JRcxPsfKGfUJrYl6gIuMOGw,1509
|
|
25
|
+
mplang/backends/simp_worker/__init__.py,sha256=gdrSY1-MDkupCoJ8xwwH7em7fgVWv3J4gBJ45uHdzgg,961
|
|
26
|
+
mplang/backends/simp_worker/http.py,sha256=qB62LsXTtokjpRqxd2f0hFpYO445pPaTrgI62BJjBqY,12626
|
|
27
|
+
mplang/backends/simp_worker/mem.py,sha256=tMGiRppeca0TnY8WdqYQMQvsx5UVswCqdeOhiDlLQBs,3574
|
|
28
|
+
mplang/backends/simp_worker/ops.py,sha256=X_mAhrSZkiN9GmgTJgJs1c50CFTNB_lo9zoPI4rIYU4,5510
|
|
29
|
+
mplang/backends/simp_worker/state.py,sha256=nIu0ybvdYqRqp0TkoSneUF2u31evDHucCRduVBaDals,1445
|
|
30
|
+
mplang/dialects/__init__.py,sha256=CYMmkeQVU0Znr9n3_5clZKb16u7acJ5jl5Zjbx4Tn1U,1478
|
|
31
|
+
mplang/dialects/bfv.py,sha256=m5YfobFCBqn0lg2zBM9RNs2AC7i4PUQH2qXjHLHwSy4,22332
|
|
32
|
+
mplang/dialects/crypto.py,sha256=oEVYyQZxUoVnLW0UN7TULU_06AcSJfBJ9PFupMnbOh4,22182
|
|
33
|
+
mplang/dialects/dtypes.py,sha256=IzWBLpOumGJEy223oH_ECFKTXb1chhPAIebtxJeqLEA,12098
|
|
34
|
+
mplang/dialects/field.py,sha256=s6fK3h0OCpnhQB6YaawEqjpI3TgHT6jMnJkTw3ltjAA,6371
|
|
35
|
+
mplang/dialects/func.py,sha256=qt2H3ClIqdOU5T7cWxzCdoPoWqeXxmbqIsKT2b7w0Mg,4369
|
|
36
|
+
mplang/dialects/phe.py,sha256=-5WvBnlhaUpClLvayKVQIKSof9ROXhZbv0tnz8CTSaY,22878
|
|
37
|
+
mplang/dialects/simp.py,sha256=MA6zhlMMeiBD93yafZgBcQGadShqEATBB7R2VdyfMjQ,32851
|
|
38
|
+
mplang/dialects/spu.py,sha256=zKIbFDcQsTtfVnPWLMR0rnp656Y8eWywDQIVqFSmVJ8,11353
|
|
39
|
+
mplang/dialects/store.py,sha256=FkvTOdcNC_oCgJPMZfdpGLlKZAlelEqRIZ2WgMgYH-8,2108
|
|
40
|
+
mplang/dialects/table.py,sha256=i9ruyh91_tSWu9rsLomrBUfqRdbHiZMMMJzNKfMrAUc,13534
|
|
41
|
+
mplang/dialects/tee.py,sha256=BMFSbeK-Ck2jQP4qY9bZeNYTxEa7uEtUWLZLC4BPQxk,10111
|
|
42
|
+
mplang/dialects/tensor.py,sha256=7aAYKaMaFjJ8N25yPFnmVhUuUdKJYy-M-a4NsZGE7kY,39893
|
|
43
|
+
mplang/edsl/README.md,sha256=viflvdRojOa6Xk_UMRPqpuPGXcPGmdlv2-XR6LO7B58,7592
|
|
44
|
+
mplang/edsl/__init__.py,sha256=ARYS7FkkSXwjWCsPLtWc9kL5OaR4wd5zCQhFTkzZUp0,2598
|
|
45
|
+
mplang/edsl/context.py,sha256=Ln8n3bDe8_ISe42TAGzUuz8fw57-tu1APuihMfAtW1Y,10075
|
|
46
|
+
mplang/edsl/graph.py,sha256=nCeCN7-bxfzyv40fmxcEXOaVUx14cOCaHfFb7A9OBnE,14968
|
|
47
|
+
mplang/edsl/jit.py,sha256=Gm8qnaXW4_jhF3GVoenJgJmHw02D5KNaaXqxe_lfybk,2063
|
|
48
|
+
mplang/edsl/object.py,sha256=dBl58q-ondjpjPNBh8zZvIEj6pJw2yEoz6TCaM_oleA,1906
|
|
49
|
+
mplang/edsl/primitive.py,sha256=1I9A1Y7lsKgd-zBj2nte-jtCdcC6V0cHNhifvVsULkU,10560
|
|
50
|
+
mplang/edsl/printer.py,sha256=drmfRkdCNqbkRfSDmejxtO-rEAaM13QyHB3AbAmKVFk,4393
|
|
51
|
+
mplang/edsl/registry.py,sha256=hudXZPUrUUueEwgksDKN0cnE3iiXucuTaDdDK8uSPmk,6822
|
|
52
|
+
mplang/edsl/serde.py,sha256=8K94laE8ObeGuBoF6m7g3A-xEe98EvqQ_6ZPPspddAY,11641
|
|
53
|
+
mplang/edsl/tracer.py,sha256=g7P0WU6HvPYOhWMAflsX9YBLkAJyYI0YNPo9_P1nf-A,22528
|
|
54
|
+
mplang/edsl/typing.py,sha256=Vp0r_oTyFrOhwwpVD_6XAX0sSsKvR04X-KdihkmD4QA,29287
|
|
55
|
+
mplang/kernels/Makefile,sha256=5PoPpajcb_8ByPGNHzVytmovXUwkjJs_K8MbXX9qDYs,1033
|
|
56
|
+
mplang/kernels/__init__.py,sha256=J_rDl9lAXd7QL3Nt_P3YX6j9yge7ssguSaHuafPZNKE,876
|
|
57
|
+
mplang/kernels/gf128.cpp,sha256=WIvCr3MijzwJxMi1Wnfhm8aWT8oL0fia6FeyTmFJtPQ,5975
|
|
58
|
+
mplang/kernels/ldpc.cpp,sha256=7n_FlI9btM3sSKdQOUC4f-PqTBAI98xccdaZIHX625M,2614
|
|
59
|
+
mplang/kernels/okvs.cpp,sha256=7P_FkBY8LyEwnzupdlv48X8uKMjPUjXtzU2QlTjp-Q0,10311
|
|
60
|
+
mplang/kernels/okvs_opt.cpp,sha256=qKkwHGGv7ayvIRW46PrQZZ7ej4b58Drbr3BlqEK506U,11707
|
|
61
|
+
mplang/kernels/py_kernels.py,sha256=EXK2ByfRsVpBqp1etDyCb_qExT0obiytcNFXYpRyxpo,12070
|
|
62
|
+
mplang/libs/collective.py,sha256=1RhwnpKwjLvbZ5UgmCMkO6brwqHEIdkW_zymRawwTW4,10668
|
|
63
|
+
mplang/libs/device/__init__.py,sha256=UHPGQ9JVedXy6AQo-ixQooS2R8eTwJEu7-p8A5_po78,1248
|
|
64
|
+
mplang/libs/device/api.py,sha256=lyMlNIFXQFuht_jaWc9uFkHRybv9OQC59nQ7USR5TWQ,28794
|
|
65
|
+
mplang/libs/device/cluster.py,sha256=YUqYZ_IBS6rpV5ejUFP3kTxcTQHSyeDeuaJcsiFY_Js,12508
|
|
66
|
+
mplang/libs/ml/__init__.py,sha256=kUR6V74kWmGnOUdmLuGAP1xebW7y-NBOmHyHK-kdqWg,784
|
|
67
|
+
mplang/libs/ml/sgb.py,sha256=g5x1PQnV7oRzheyu6PiDooqmBWI9jMvLHkIHrNnMoDk,60211
|
|
68
|
+
mplang/libs/mpc/__init__.py,sha256=0wTdCjWmoW4Ka4j8ItIfENd8t5uzgjFu0OhOtaeHlpY,1396
|
|
69
|
+
mplang/libs/mpc/_utils.py,sha256=53mDJj_LTIJe6RWkR85-2nXha2KwYQqCK0PBG80MOl0,3209
|
|
70
|
+
mplang/libs/mpc/analytics/__init__.py,sha256=8_1Sm05nrO2ISat1hNZT6UXHpKQ-SDBby1eeS-wm_fE,1204
|
|
71
|
+
mplang/libs/mpc/analytics/aggregation.py,sha256=FXEp8Aa9NkS9cwQCqVxQBMa-fnw828QnyGdlM5IKb-4,11645
|
|
72
|
+
mplang/libs/mpc/analytics/groupby.md,sha256=_3oCouzGKlWt3OBMIFkhN25gyzJj6DlGpq-B78_PSlU,4679
|
|
73
|
+
mplang/libs/mpc/analytics/groupby.py,sha256=KjhZgB0EJwcShsIiE49HFzowgYVkYA7IQBx71_cj2m4,11312
|
|
74
|
+
mplang/libs/mpc/analytics/permutation.py,sha256=FOXarjeKTZChf9dN7kaHhwQYytIQqRYMVsspovBKTnI,13811
|
|
75
|
+
mplang/libs/mpc/common/constants.py,sha256=YRRE8WkLGfdOZzicc976hPsPeZZkqho3aW41i5Mj72s,1316
|
|
76
|
+
mplang/libs/mpc/ot/__init__.py,sha256=9Ivef7QnAzoCBtIohh2kzOSdfslcNftOwKV_d9Qv4z0,951
|
|
77
|
+
mplang/libs/mpc/ot/base.py,sha256=ydM6KRB4ytv5AVOZaCQ_GV54MsqmPhIE2JUUwoavi-c,7009
|
|
78
|
+
mplang/libs/mpc/ot/extension.py,sha256=2Zk43JTpd7a0iorV7KWbyo_ebJi3G11QlxT9-8WJvBE,17452
|
|
79
|
+
mplang/libs/mpc/ot/silent.py,sha256=lO8qhlejx0crIT_8PJcRU-lyUTgIsrE26hkoBzbR7sY,7867
|
|
80
|
+
mplang/libs/mpc/psi/__init__.py,sha256=mpevlx3Z5_u9Q1McDZBBIGHApeO9julgiM09GToxxEA,1231
|
|
81
|
+
mplang/libs/mpc/psi/cuckoo.py,sha256=BQE0CQ7OZWuz_E-ICJ55PDH6hG2T0McbR1QTLmf9HC0,7743
|
|
82
|
+
mplang/libs/mpc/psi/okvs.py,sha256=bNUA_7LEkSw9Yw-v39G3qSfE4VtLHYj_a752WyTXXqc,1573
|
|
83
|
+
mplang/libs/mpc/psi/okvs_gct.py,sha256=1XPw1CgQfuaspSRP7A2GbxyPJ66qW_sRnWmsWc_vG4w,3366
|
|
84
|
+
mplang/libs/mpc/psi/oprf.py,sha256=JSSmK6JK9R8wKEVzmw_4BFa1wFA4UJqxrNK_ayBxE-Q,13763
|
|
85
|
+
mplang/libs/mpc/psi/rr22.py,sha256=LXHqY_S3H7yEScGW6KO7NbliKIkB2prqOhnw1Vb2fE8,11188
|
|
86
|
+
mplang/libs/mpc/psi/unbalanced.py,sha256=-0qAbYqw7vn_hBTb8E71z5RljO6-x8Tcn47TBH1v2_M,7421
|
|
87
|
+
mplang/libs/mpc/vole/__init__.py,sha256=2dU4X6n73HoK-YCiCl4b36SkLRKR6rofe2xxLxBz6Rc,968
|
|
88
|
+
mplang/libs/mpc/vole/gilboa.py,sha256=Lt9n9Ee_wgekxjvUdL0ed4eLpiQJ8EB4_YhOVqI-vBc,9942
|
|
89
|
+
mplang/libs/mpc/vole/ldpc.py,sha256=gOmIbyOjkGE5lewyatl3p6FizNNH8LZ_1oOhp_-TOck,12780
|
|
90
|
+
mplang/libs/mpc/vole/silver.py,sha256=EIxhpFIVNBemgeIZzCu5Cz_4wysxRm9b1Xfu0xiweVQ,12218
|
|
91
|
+
mplang/runtime/__init__.py,sha256=VdUwJ3kDaI46FvGw7iMGwcsjt0HTGmmRmaBwj99xKIw,620
|
|
92
|
+
mplang/runtime/dialect_state.py,sha256=HxO1i4kSOujS2tQzAF9-WmI3nChSaGgupf2_07dHetY,1277
|
|
93
|
+
mplang/runtime/interpreter.py,sha256=jf79iH3JxQklzBPI2z1u8lnNo3CGJ0JBUiigPUQbevc,32256
|
|
94
|
+
mplang/runtime/object_store.py,sha256=yT6jtKG2GUEJVmpq3gnQ8mCMvUFYzgBciC5A-J5KRdk,5998
|
|
95
|
+
mplang/runtime/value.py,sha256=EqlhSgxLTJi_FF3ppyKjMe4eHS6-ROx-zK1YesG1U4o,4311
|
|
96
|
+
mplang/utils/__init__.py,sha256=toubeyISiT6WDdITdfAvdY2iXVZU3PKVNWVeC9sYxuA,947
|
|
97
|
+
mplang/utils/func_utils.py,sha256=aZ-X43w8JKJgiF-IUMS0G7QqrNeoTM5ZPzRNd-tKxpw,5180
|
|
98
|
+
mplang_nightly-0.1.dev271.dist-info/METADATA,sha256=KknEVpz4iRL2zZjVK2CZRrienQvs52jpYFGKIKkQTNA,16783
|
|
99
|
+
mplang_nightly-0.1.dev271.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
100
|
+
mplang_nightly-0.1.dev271.dist-info/entry_points.txt,sha256=mG1oJT-GAjQR834a62_QIWb7litzWPPyVnwFqm-rWuY,55
|
|
101
|
+
mplang_nightly-0.1.dev271.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
102
|
+
mplang_nightly-0.1.dev271.dist-info/RECORD,,
|