mplang-nightly 0.1.dev149__tar.gz → 0.1.dev151__tar.gz
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_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/PKG-INFO +1 -1
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/examples/xgboost/sgb.py +1 -1
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/examples/xgboost/sgb_test.py +1 -1
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/core/expr/evaluator.py +1 -1
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/core/primitive.py +1 -1
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/device.py +4 -4
- {mplang_nightly-0.1.dev149/mplang/backend → mplang_nightly-0.1.dev151/mplang/kernels}/builtin.py +1 -1
- {mplang_nightly-0.1.dev149/mplang/backend → mplang_nightly-0.1.dev151/mplang/kernels}/context.py +18 -13
- {mplang_nightly-0.1.dev149/mplang/backend → mplang_nightly-0.1.dev151/mplang/kernels}/crypto.py +1 -1
- mplang_nightly-0.1.dev149/mplang/backend/tee.py → mplang_nightly-0.1.dev151/mplang/kernels/mock_tee.py +12 -3
- {mplang_nightly-0.1.dev149/mplang/backend → mplang_nightly-0.1.dev151/mplang/kernels}/phe.py +1 -1
- {mplang_nightly-0.1.dev149/mplang/backend → mplang_nightly-0.1.dev151/mplang/kernels}/spu.py +1 -1
- {mplang_nightly-0.1.dev149/mplang/backend → mplang_nightly-0.1.dev151/mplang/kernels}/sql_duckdb.py +1 -1
- {mplang_nightly-0.1.dev149/mplang/backend → mplang_nightly-0.1.dev151/mplang/kernels}/stablehlo.py +1 -1
- {mplang_nightly-0.1.dev149/mplang/frontend → mplang_nightly-0.1.dev151/mplang/ops}/__init__.py +11 -11
- {mplang_nightly-0.1.dev149/mplang/frontend → mplang_nightly-0.1.dev151/mplang/ops}/builtin.py +1 -1
- {mplang_nightly-0.1.dev149/mplang/frontend → mplang_nightly-0.1.dev151/mplang/ops}/crypto.py +1 -1
- {mplang_nightly-0.1.dev149/mplang/frontend → mplang_nightly-0.1.dev151/mplang/ops}/ibis_cc.py +1 -1
- {mplang_nightly-0.1.dev149/mplang/frontend → mplang_nightly-0.1.dev151/mplang/ops}/jax_cc.py +1 -1
- {mplang_nightly-0.1.dev149/mplang/frontend → mplang_nightly-0.1.dev151/mplang/ops}/phe.py +1 -1
- {mplang_nightly-0.1.dev149/mplang/frontend → mplang_nightly-0.1.dev151/mplang/ops}/spu.py +1 -1
- {mplang_nightly-0.1.dev149/mplang/frontend → mplang_nightly-0.1.dev151/mplang/ops}/sql.py +1 -1
- {mplang_nightly-0.1.dev149/mplang/frontend → mplang_nightly-0.1.dev151/mplang/ops}/tee.py +1 -1
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/runtime/data_providers.py +1 -1
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/runtime/resource.py +2 -2
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/runtime/server.py +1 -1
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/runtime/simulation.py +35 -30
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/simp/__init__.py +7 -7
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/simp/smpc.py +1 -1
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/core/test_primitive.py +1 -1
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/integration/README.md +1 -1
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/integration/test_crypto_roundtrip.py +1 -1
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/integration/test_symbols_roundtrip.py +1 -1
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/integration/test_unused_param_integration.py +1 -1
- {mplang_nightly-0.1.dev149/tests/backend → mplang_nightly-0.1.dev151/tests/kernels}/test_builtin.py +2 -2
- {mplang_nightly-0.1.dev149/tests/backend → mplang_nightly-0.1.dev151/tests/kernels}/test_kernel_binding.py +2 -2
- {mplang_nightly-0.1.dev149/tests/backend → mplang_nightly-0.1.dev151/tests/kernels}/test_phe.py +3 -3
- {mplang_nightly-0.1.dev149/tests/backend → mplang_nightly-0.1.dev151/tests/kernels}/test_spu.py +4 -4
- {mplang_nightly-0.1.dev149/tests/backend → mplang_nightly-0.1.dev151/tests/kernels}/test_sql_duckdb.py +2 -2
- {mplang_nightly-0.1.dev149/tests/backend → mplang_nightly-0.1.dev151/tests/kernels}/test_stablehlo.py +3 -3
- {mplang_nightly-0.1.dev149/tests/frontend → mplang_nightly-0.1.dev151/tests/ops}/test_builtin_pack.py +1 -1
- {mplang_nightly-0.1.dev149/tests/frontend → mplang_nightly-0.1.dev151/tests/ops}/test_crypto_tee.py +4 -2
- {mplang_nightly-0.1.dev149/tests/frontend → mplang_nightly-0.1.dev151/tests/ops}/test_feop_base.py +2 -2
- {mplang_nightly-0.1.dev149/tests/frontend → mplang_nightly-0.1.dev151/tests/ops}/test_ibis_cc.py +1 -1
- {mplang_nightly-0.1.dev149/tests/frontend → mplang_nightly-0.1.dev151/tests/ops}/test_jax_cc.py +1 -1
- {mplang_nightly-0.1.dev149/tests/frontend → mplang_nightly-0.1.dev151/tests/ops}/test_phe.py +2 -2
- {mplang_nightly-0.1.dev149/tests/frontend → mplang_nightly-0.1.dev151/tests/ops}/test_spu.py +2 -2
- {mplang_nightly-0.1.dev149/tests/frontend → mplang_nightly-0.1.dev151/tests/ops}/test_spu_defensive.py +2 -2
- {mplang_nightly-0.1.dev149/tests/frontend → mplang_nightly-0.1.dev151/tests/ops}/test_sql.py +1 -1
- {mplang_nightly-0.1.dev149/tests/frontend → mplang_nightly-0.1.dev151/tests/ops}/test_table_tensor_conversion.py +1 -1
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/runtime/test_simulation.py +2 -2
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/simp/test_sugar.py +5 -5
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tutorials/3_device.py +3 -1
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tutorials/7_stdio.py +1 -1
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tutorials/8_phe.py +1 -1
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tutorials/9_tee.py +9 -7
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/.gitignore +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/LICENSE +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/README.md +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/examples/conf/3pc.yaml +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/examples/stax_nn/README.md +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/examples/stax_nn/models.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/examples/stax_nn/stax_nn.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/examples/xgboost/hist_jax.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/examples/xgboost/hist_jax_test.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/examples/xgboost/naive_np.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/examples/xgboost/readme.md +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/hatch_build.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/__init__.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/analysis/__init__.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/analysis/diagram.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/api.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/core/__init__.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/core/cluster.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/core/comm.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/core/context_mgr.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/core/dtype.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/core/expr/__init__.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/core/expr/ast.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/core/expr/printer.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/core/expr/transformer.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/core/expr/utils.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/core/expr/visitor.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/core/expr/walk.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/core/interp.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/core/mask.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/core/mpir.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/core/mpobject.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/core/mptype.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/core/pfunc.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/core/table.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/core/tensor.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/core/tracer.py +0 -0
- {mplang_nightly-0.1.dev149/mplang/backend → mplang_nightly-0.1.dev151/mplang/kernels}/__init__.py +0 -0
- {mplang_nightly-0.1.dev149/mplang/backend → mplang_nightly-0.1.dev151/mplang/kernels}/base.py +0 -0
- {mplang_nightly-0.1.dev149/mplang/frontend → mplang_nightly-0.1.dev151/mplang/ops}/base.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/protos/v1alpha1/mpir_pb2.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/protos/v1alpha1/mpir_pb2.pyi +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/protos/v1alpha1/mpir_pb2_grpc.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/runtime/__init__.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/runtime/cli.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/runtime/client.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/runtime/communicator.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/runtime/driver.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/runtime/exceptions.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/runtime/http_api.md +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/runtime/link_comm.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/simp/mpi.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/simp/random.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/utils/__init__.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/utils/crypto.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/utils/func_utils.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/utils/spu_utils.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/mplang/utils/table_utils.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/pyproject.toml +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/__init__.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/analysis/test_diagram.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/core/__init__.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/core/expr/__init__.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/core/expr/conftest.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/core/expr/test_ast.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/core/expr/test_printer.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/core/expr/test_utils.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/core/expr/test_walk.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/core/test_cluster.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/core/test_dtype.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/core/test_mask.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/core/test_mpir.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/core/test_mptype.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/core/test_table.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/core/test_tensor.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/core/test_tracer.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/device/__init__.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/device/test_device_basic.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/integration/test_http_e2e.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/integration/test_tutorials.py +0 -0
- {mplang_nightly-0.1.dev149/tests/backend → mplang_nightly-0.1.dev151/tests/kernels}/test_debug_print.py +0 -0
- {mplang_nightly-0.1.dev149/tests/frontend → mplang_nightly-0.1.dev151/tests/ops}/__init__.py +0 -0
- {mplang_nightly-0.1.dev149/tests/frontend → mplang_nightly-0.1.dev151/tests/ops}/dummy.py +0 -0
- {mplang_nightly-0.1.dev149/tests/frontend → mplang_nightly-0.1.dev151/tests/ops}/test_ibis.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/runtime/__init__.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/runtime/test_cli.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/runtime/test_communicator.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/runtime/test_driver.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/runtime/test_server.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/simp/test_mpi.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/simp/test_random.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/simp/test_simp.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/simp/test_smpc.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/utils/__init__.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/utils/server_fixtures.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/utils/test_func_utils.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/utils/test_spu_utils.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/utils/test_table_utils.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tutorials/0_basic.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tutorials/10_analysis.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tutorials/1_condition.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tutorials/2_whileloop.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tutorials/4_simulation.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tutorials/5_ir_dump.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tutorials/6_advanced.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tutorials/__init__.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tutorials/pitfalls/late_binding.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tutorials/pitfalls/rand.py +0 -0
- {mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tutorials/run.sh +0 -0
@@ -24,7 +24,7 @@ import mplang.simp as simp
|
|
24
24
|
import mplang.simp.mpi as mpi
|
25
25
|
from mplang import Mask, MPObject
|
26
26
|
from mplang.core.mptype import Rank
|
27
|
-
from mplang.
|
27
|
+
from mplang.ops import phe
|
28
28
|
|
29
29
|
# ==============================================================================
|
30
30
|
# Naming Conventions for Shapes & Variables
|
@@ -27,7 +27,6 @@ from __future__ import annotations
|
|
27
27
|
from dataclasses import dataclass
|
28
28
|
from typing import Any, Protocol
|
29
29
|
|
30
|
-
from mplang.backend.context import RuntimeContext
|
31
30
|
from mplang.core.comm import ICommunicator
|
32
31
|
from mplang.core.expr.ast import (
|
33
32
|
AccessExpr,
|
@@ -47,6 +46,7 @@ from mplang.core.expr.visitor import ExprVisitor
|
|
47
46
|
from mplang.core.expr.walk import walk_dataflow
|
48
47
|
from mplang.core.mask import Mask
|
49
48
|
from mplang.core.pfunc import PFunction
|
49
|
+
from mplang.kernels.context import RuntimeContext
|
50
50
|
|
51
51
|
|
52
52
|
class IEvaluator(Protocol):
|
@@ -47,7 +47,7 @@ from mplang.core.pfunc import PFunction
|
|
47
47
|
from mplang.core.table import TableLike
|
48
48
|
from mplang.core.tensor import ScalarType, Shape, TensorLike
|
49
49
|
from mplang.core.tracer import TraceContext, TraceVar, trace
|
50
|
-
from mplang.
|
50
|
+
from mplang.ops import builtin
|
51
51
|
from mplang.utils.func_utils import var_demorph, var_morph
|
52
52
|
|
53
53
|
|
@@ -35,10 +35,10 @@ from mplang.core import InterpContext, MPObject, primitive
|
|
35
35
|
from mplang.core.cluster import ClusterSpec, Device
|
36
36
|
from mplang.core.context_mgr import cur_ctx
|
37
37
|
from mplang.core.tensor import TensorType
|
38
|
-
from mplang.
|
39
|
-
from mplang.
|
40
|
-
from mplang.
|
41
|
-
from mplang.
|
38
|
+
from mplang.ops import builtin, crypto, ibis_cc, jax_cc, tee
|
39
|
+
from mplang.ops.base import FeOperation
|
40
|
+
from mplang.ops.ibis_cc import IbisCompiler
|
41
|
+
from mplang.ops.jax_cc import JaxCompiler
|
42
42
|
from mplang.simp import mpi, smpc
|
43
43
|
|
44
44
|
# Automatic transfer between devices when parameter is not on the target device.
|
{mplang_nightly-0.1.dev149/mplang/backend → mplang_nightly-0.1.dev151/mplang/kernels}/builtin.py
RENAMED
@@ -19,10 +19,10 @@ from typing import Any
|
|
19
19
|
import numpy as np
|
20
20
|
import pandas as pd
|
21
21
|
|
22
|
-
from mplang.backend.base import cur_kctx, kernel_def
|
23
22
|
from mplang.core.pfunc import PFunction
|
24
23
|
from mplang.core.table import TableType
|
25
24
|
from mplang.core.tensor import TensorType
|
25
|
+
from mplang.kernels.base import cur_kctx, kernel_def
|
26
26
|
from mplang.runtime.data_providers import get_provider, resolve_uri
|
27
27
|
from mplang.utils import table_utils
|
28
28
|
|
{mplang_nightly-0.1.dev149/mplang/backend → mplang_nightly-0.1.dev151/mplang/kernels}/context.py
RENAMED
@@ -17,12 +17,12 @@ from __future__ import annotations
|
|
17
17
|
from collections.abc import Mapping
|
18
18
|
from typing import Any
|
19
19
|
|
20
|
-
from mplang.backend import base
|
21
|
-
from mplang.backend.base import KernelContext, get_kernel_spec, kernel_exists
|
22
20
|
from mplang.core.dtype import UINT8, DType
|
23
21
|
from mplang.core.pfunc import PFunction
|
24
22
|
from mplang.core.table import TableLike, TableType
|
25
23
|
from mplang.core.tensor import TensorLike, TensorType
|
24
|
+
from mplang.kernels import base
|
25
|
+
from mplang.kernels.base import KernelContext, get_kernel_spec, kernel_exists
|
26
26
|
|
27
27
|
# Default bindings
|
28
28
|
# Import kernel implementation modules explicitly so their @kernel_def entries
|
@@ -35,13 +35,13 @@ def _ensure_impl_imported() -> None:
|
|
35
35
|
global _IMPL_IMPORTED
|
36
36
|
if _IMPL_IMPORTED:
|
37
37
|
return
|
38
|
-
from mplang.
|
39
|
-
from mplang.
|
40
|
-
from mplang.
|
41
|
-
from mplang.
|
42
|
-
from mplang.
|
43
|
-
from mplang.
|
44
|
-
from mplang.
|
38
|
+
from mplang.kernels import builtin as _impl_builtin # noqa: F401
|
39
|
+
from mplang.kernels import crypto as _impl_crypto # noqa: F401
|
40
|
+
from mplang.kernels import mock_tee as _impl_tee # noqa: F401
|
41
|
+
from mplang.kernels import phe as _impl_phe # noqa: F401
|
42
|
+
from mplang.kernels import spu as _impl_spu # noqa: F401
|
43
|
+
from mplang.kernels import sql_duckdb as _impl_sql_duckdb # noqa: F401
|
44
|
+
from mplang.kernels import stablehlo as _impl_stablehlo # noqa: F401
|
45
45
|
|
46
46
|
_IMPL_IMPORTED = True
|
47
47
|
|
@@ -91,8 +91,8 @@ _DEFAULT_BINDINGS: dict[str, str] = {
|
|
91
91
|
# generic SQL op; backend-specific kernel id for duckdb
|
92
92
|
"sql.run": "duckdb.run_sql",
|
93
93
|
# tee
|
94
|
-
"tee.quote": "
|
95
|
-
"tee.attest": "
|
94
|
+
# "tee.quote": "mock_tee.quote",
|
95
|
+
# "tee.attest": "mock_tee.attest",
|
96
96
|
}
|
97
97
|
|
98
98
|
|
@@ -102,6 +102,10 @@ _DEFAULT_BINDINGS: dict[str, str] = {
|
|
102
102
|
class RuntimeContext:
|
103
103
|
"""Per-runtime execution context with isolated op->kernel bindings.
|
104
104
|
|
105
|
+
This object owns ONLY static dispatch metadata ("op bindings") and mutable
|
106
|
+
per-rank kernel side state/cache/stats. It does NOT store per-evaluation
|
107
|
+
variable bindings (those are provided to the evaluator at evaluation time).
|
108
|
+
|
105
109
|
Parameters
|
106
110
|
----------
|
107
111
|
rank : int
|
@@ -110,9 +114,10 @@ class RuntimeContext:
|
|
110
114
|
Total number of participants.
|
111
115
|
initial_bindings : Mapping[str, str] | None, optional
|
112
116
|
Optional partial overrides applied on top of the default binding table
|
113
|
-
during construction (override semantics, not replace).
|
117
|
+
during construction (override semantics, not replace). These map
|
118
|
+
op_type -> kernel_id and form a *template* for dispatch. After
|
114
119
|
initialization, all (re)binding must go through ``bind_op`` /
|
115
|
-
``rebind_op
|
120
|
+
``rebind_op`` on this context (scoped to THIS runtime only).
|
116
121
|
state / cache / stats : dict, optional
|
117
122
|
Mutable pockets reused across kernel invocations. If omitted, new
|
118
123
|
dictionaries are created.
|
{mplang_nightly-0.1.dev149/mplang/backend → mplang_nightly-0.1.dev151/mplang/kernels}/crypto.py
RENAMED
@@ -19,8 +19,8 @@ from typing import Any
|
|
19
19
|
|
20
20
|
import numpy as np
|
21
21
|
|
22
|
-
from mplang.backend.base import cur_kctx, kernel_def
|
23
22
|
from mplang.core.pfunc import PFunction
|
23
|
+
from mplang.kernels.base import cur_kctx, kernel_def
|
24
24
|
from mplang.utils.crypto import blake2b
|
25
25
|
|
26
26
|
__all__: list[str] = [] # flat kernels only
|
@@ -15,12 +15,13 @@
|
|
15
15
|
from __future__ import annotations
|
16
16
|
|
17
17
|
import os
|
18
|
+
import warnings
|
18
19
|
|
19
20
|
import numpy as np
|
20
21
|
from numpy.typing import NDArray
|
21
22
|
|
22
|
-
from mplang.backend.base import cur_kctx, kernel_def
|
23
23
|
from mplang.core.pfunc import PFunction
|
24
|
+
from mplang.kernels.base import cur_kctx, kernel_def
|
24
25
|
|
25
26
|
__all__: list[str] = []
|
26
27
|
|
@@ -43,16 +44,24 @@ def _quote_from_pk(pk: np.ndarray) -> NDArray[np.uint8]:
|
|
43
44
|
return out
|
44
45
|
|
45
46
|
|
46
|
-
@kernel_def("
|
47
|
+
@kernel_def("mock_tee.quote")
|
47
48
|
def _tee_quote(pfunc: PFunction, pk: object) -> NDArray[np.uint8]:
|
49
|
+
warnings.warn(
|
50
|
+
"Insecure mock TEE kernel 'mock_tee.quote' in use. NOT secure; for local testing only.",
|
51
|
+
stacklevel=3,
|
52
|
+
)
|
48
53
|
pk = np.asarray(pk, dtype=np.uint8)
|
49
54
|
# rng access ensures deterministic seeding per rank even if unused now
|
50
55
|
_rng()
|
51
56
|
return _quote_from_pk(pk)
|
52
57
|
|
53
58
|
|
54
|
-
@kernel_def("
|
59
|
+
@kernel_def("mock_tee.attest")
|
55
60
|
def _tee_attest(pfunc: PFunction, quote: object) -> NDArray[np.uint8]:
|
61
|
+
warnings.warn(
|
62
|
+
"Insecure mock TEE kernel 'mock_tee.attest' in use. NOT secure; for local testing only.",
|
63
|
+
stacklevel=3,
|
64
|
+
)
|
56
65
|
quote = np.asarray(quote, dtype=np.uint8)
|
57
66
|
if quote.size != 33:
|
58
67
|
raise ValueError("mock quote must be 33 bytes (1 header + 32 pk)")
|
{mplang_nightly-0.1.dev149/mplang/backend → mplang_nightly-0.1.dev151/mplang/kernels}/phe.py
RENAMED
@@ -19,10 +19,10 @@ from typing import Any
|
|
19
19
|
import numpy as np
|
20
20
|
from lightphe import LightPHE
|
21
21
|
|
22
|
-
from mplang.backend.base import kernel_def
|
23
22
|
from mplang.core.dtype import DType
|
24
23
|
from mplang.core.mptype import TensorLike
|
25
24
|
from mplang.core.pfunc import PFunction
|
25
|
+
from mplang.kernels.base import kernel_def
|
26
26
|
|
27
27
|
# This controls the decimal precision used in lightPHE for float operations
|
28
28
|
# we force it to 0 to only support integer operations
|
{mplang_nightly-0.1.dev149/mplang/backend → mplang_nightly-0.1.dev151/mplang/kernels}/spu.py
RENAMED
@@ -21,9 +21,9 @@ import numpy as np
|
|
21
21
|
import spu.api as spu_api
|
22
22
|
import spu.libspu as libspu
|
23
23
|
|
24
|
-
from mplang.backend.base import cur_kctx, kernel_def
|
25
24
|
from mplang.core.mptype import TensorLike
|
26
25
|
from mplang.core.pfunc import PFunction
|
26
|
+
from mplang.kernels.base import cur_kctx, kernel_def
|
27
27
|
from mplang.runtime.link_comm import LinkCommunicator
|
28
28
|
|
29
29
|
|
{mplang_nightly-0.1.dev149/mplang/backend → mplang_nightly-0.1.dev151/mplang/kernels}/stablehlo.py
RENAMED
@@ -21,8 +21,8 @@ import jax.numpy as jnp
|
|
21
21
|
from jax._src import xla_bridge
|
22
22
|
from jax.lib import xla_client as xc
|
23
23
|
|
24
|
-
from mplang.backend.base import cur_kctx, kernel_def
|
25
24
|
from mplang.core.pfunc import PFunction
|
25
|
+
from mplang.kernels.base import cur_kctx, kernel_def
|
26
26
|
|
27
27
|
|
28
28
|
@kernel_def("mlir.stablehlo")
|
{mplang_nightly-0.1.dev149/mplang/frontend → mplang_nightly-0.1.dev151/mplang/ops}/__init__.py
RENAMED
@@ -19,17 +19,17 @@ This module contains compilers that transform high-level functions into
|
|
19
19
|
portable, serializable intermediate representations.
|
20
20
|
"""
|
21
21
|
|
22
|
-
from mplang.
|
23
|
-
from mplang.
|
24
|
-
from mplang.
|
25
|
-
from mplang.
|
26
|
-
from mplang.
|
27
|
-
from mplang.
|
28
|
-
from mplang.
|
29
|
-
from mplang.
|
30
|
-
from mplang.
|
31
|
-
from mplang.
|
32
|
-
from mplang.
|
22
|
+
from mplang.ops import builtin as builtin
|
23
|
+
from mplang.ops import crypto as crypto
|
24
|
+
from mplang.ops import ibis_cc as ibis_cc
|
25
|
+
from mplang.ops import jax_cc as jax_cc
|
26
|
+
from mplang.ops import phe as phe
|
27
|
+
from mplang.ops import spu as spu
|
28
|
+
from mplang.ops import tee as tee
|
29
|
+
from mplang.ops.base import FeOperation as FeOperation
|
30
|
+
from mplang.ops.ibis_cc import ibis_compile as ibis_compile
|
31
|
+
from mplang.ops.jax_cc import jax_compile as jax_compile
|
32
|
+
from mplang.ops.sql import sql_run as sql_run
|
33
33
|
|
34
34
|
__all__ = [
|
35
35
|
"FeOperation",
|
{mplang_nightly-0.1.dev149/mplang/frontend → mplang_nightly-0.1.dev151/mplang/ops}/builtin.py
RENAMED
@@ -20,7 +20,7 @@ from mplang.core.mpobject import MPObject # Needed for constant() triad return
|
|
20
20
|
from mplang.core.pfunc import PFunction
|
21
21
|
from mplang.core.table import TableLike, TableType
|
22
22
|
from mplang.core.tensor import ScalarType, Shape, TensorLike, TensorType
|
23
|
-
from mplang.
|
23
|
+
from mplang.ops.base import stateless_mod
|
24
24
|
from mplang.utils import table_utils
|
25
25
|
|
26
26
|
_BUILTIN_MOD = stateless_mod("builtin")
|
{mplang_nightly-0.1.dev149/mplang/frontend → mplang_nightly-0.1.dev151/mplang/ops}/crypto.py
RENAMED
@@ -28,7 +28,7 @@ from __future__ import annotations
|
|
28
28
|
|
29
29
|
from mplang.core.dtype import UINT8
|
30
30
|
from mplang.core.tensor import TensorType
|
31
|
-
from mplang.
|
31
|
+
from mplang.ops.base import stateless_mod
|
32
32
|
|
33
33
|
_CRYPTO_MOD = stateless_mod("crypto")
|
34
34
|
|
{mplang_nightly-0.1.dev149/mplang/frontend → mplang_nightly-0.1.dev151/mplang/ops}/ibis_cc.py
RENAMED
@@ -24,7 +24,7 @@ from mplang.core import dtype
|
|
24
24
|
from mplang.core.mpobject import MPObject
|
25
25
|
from mplang.core.pfunc import PFunction
|
26
26
|
from mplang.core.table import TableType
|
27
|
-
from mplang.
|
27
|
+
from mplang.ops.base import FeOperation, stateless_mod
|
28
28
|
from mplang.utils.func_utils import normalize_fn
|
29
29
|
|
30
30
|
|
{mplang_nightly-0.1.dev149/mplang/frontend → mplang_nightly-0.1.dev151/mplang/ops}/jax_cc.py
RENAMED
@@ -24,7 +24,7 @@ from jax.tree_util import PyTreeDef, tree_flatten
|
|
24
24
|
from mplang.core.mpobject import MPObject
|
25
25
|
from mplang.core.pfunc import PFunction, get_fn_name
|
26
26
|
from mplang.core.tensor import TensorType
|
27
|
-
from mplang.
|
27
|
+
from mplang.ops.base import FeOperation, stateless_mod
|
28
28
|
from mplang.utils.func_utils import normalize_fn
|
29
29
|
|
30
30
|
# Enable 64-bit precision for JAX to match tensor types
|
@@ -26,7 +26,7 @@ from jax.tree_util import PyTreeDef, tree_flatten
|
|
26
26
|
from mplang.core.mpobject import MPObject
|
27
27
|
from mplang.core.pfunc import PFunction, get_fn_name
|
28
28
|
from mplang.core.tensor import TensorType
|
29
|
-
from mplang.
|
29
|
+
from mplang.ops.base import stateless_mod
|
30
30
|
from mplang.utils.func_utils import normalize_fn
|
31
31
|
|
32
32
|
|
@@ -17,7 +17,7 @@ from jax.tree_util import PyTreeDef, tree_flatten
|
|
17
17
|
from mplang.core.mpobject import MPObject
|
18
18
|
from mplang.core.pfunc import PFunction
|
19
19
|
from mplang.core.table import TableType
|
20
|
-
from mplang.
|
20
|
+
from mplang.ops.base import FeOperation, stateless_mod
|
21
21
|
|
22
22
|
_SQL_MOD = stateless_mod("sql")
|
23
23
|
|
@@ -21,9 +21,9 @@ from urllib.parse import ParseResult, urlparse
|
|
21
21
|
import numpy as np
|
22
22
|
import pandas as pd
|
23
23
|
|
24
|
-
from mplang.backend.base import KernelContext
|
25
24
|
from mplang.core.table import TableType
|
26
25
|
from mplang.core.tensor import TensorType
|
26
|
+
from mplang.kernels.base import KernelContext
|
27
27
|
from mplang.utils import table_utils
|
28
28
|
|
29
29
|
|
@@ -26,11 +26,11 @@ from urllib.parse import urlparse
|
|
26
26
|
import cloudpickle as pickle
|
27
27
|
import spu.libspu as libspu
|
28
28
|
|
29
|
-
from mplang.backend.context import RuntimeContext
|
30
|
-
from mplang.backend.spu import PFunction # type: ignore
|
31
29
|
from mplang.core.expr.ast import Expr
|
32
30
|
from mplang.core.expr.evaluator import IEvaluator, create_evaluator
|
33
31
|
from mplang.core.mask import Mask
|
32
|
+
from mplang.kernels.context import RuntimeContext
|
33
|
+
from mplang.kernels.spu import PFunction # type: ignore
|
34
34
|
from mplang.runtime.communicator import HttpCommunicator
|
35
35
|
from mplang.runtime.exceptions import InvalidRequestError, ResourceNotFound
|
36
36
|
from mplang.runtime.link_comm import LinkCommunicator
|
@@ -27,10 +27,10 @@ from fastapi import FastAPI, HTTPException, Request
|
|
27
27
|
from fastapi.responses import JSONResponse
|
28
28
|
from pydantic import BaseModel
|
29
29
|
|
30
|
-
from mplang.backend.base import KernelContext
|
31
30
|
from mplang.core.mpir import Reader
|
32
31
|
from mplang.core.table import TableType
|
33
32
|
from mplang.core.tensor import TensorType
|
33
|
+
from mplang.kernels.base import KernelContext
|
34
34
|
from mplang.protos.v1alpha1 import mpir_pb2
|
35
35
|
from mplang.runtime import resource
|
36
36
|
from mplang.runtime.data_providers import DataProvider, ResolvedURI, register_provider
|
@@ -24,10 +24,6 @@ from typing import Any, cast
|
|
24
24
|
|
25
25
|
import spu.libspu as libspu
|
26
26
|
|
27
|
-
# New explicit binding model: we only need RuntimeContext which ensures
|
28
|
-
# bindings via bind_all_ops() on creation; per-module side-effect imports
|
29
|
-
# are no longer required here.
|
30
|
-
from mplang.backend.context import RuntimeContext
|
31
27
|
from mplang.core.cluster import ClusterSpec
|
32
28
|
from mplang.core.comm import CollectiveMixin, CommunicatorBase
|
33
29
|
from mplang.core.expr.ast import Expr
|
@@ -38,6 +34,7 @@ from mplang.core.mpir import Reader, Writer
|
|
38
34
|
from mplang.core.mpobject import MPObject
|
39
35
|
from mplang.core.mptype import MPType, TensorLike
|
40
36
|
from mplang.core.pfunc import PFunction # for spu.seed_env kernel seeding
|
37
|
+
from mplang.kernels.context import RuntimeContext
|
41
38
|
from mplang.runtime.link_comm import LinkCommunicator
|
42
39
|
from mplang.utils.spu_utils import parse_field, parse_protocol
|
43
40
|
|
@@ -89,14 +86,20 @@ class Simulator(InterpContext):
|
|
89
86
|
cluster_spec: ClusterSpec,
|
90
87
|
*,
|
91
88
|
trace_ranks: list[int] | None = None,
|
89
|
+
op_bindings: dict[str, str] | None = None,
|
92
90
|
) -> None:
|
93
91
|
"""Initialize a simulator with the given cluster specification.
|
94
92
|
|
95
93
|
Args:
|
96
94
|
cluster_spec: The cluster specification defining the simulation environment.
|
97
95
|
trace_ranks: List of ranks to trace execution for debugging.
|
96
|
+
op_bindings: Optional op->kernel binding template applied to all
|
97
|
+
RuntimeContexts. These are static dispatch overrides (merged
|
98
|
+
with project defaults) and are orthogonal to the per-evaluate
|
99
|
+
variable ``bindings`` dict passed into ``evaluate``.
|
98
100
|
"""
|
99
101
|
super().__init__(cluster_spec)
|
102
|
+
self._op_bindings_template = op_bindings or {}
|
100
103
|
self._trace_ranks = trace_ranks or []
|
101
104
|
|
102
105
|
spu_devices = cluster_spec.get_devices_by_kind("SPU")
|
@@ -140,20 +143,18 @@ class Simulator(InterpContext):
|
|
140
143
|
self._spu_world = spu_mask.num_parties()
|
141
144
|
self._spu_mask = spu_mask
|
142
145
|
|
143
|
-
#
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
self._comms[rank],
|
153
|
-
runtime,
|
154
|
-
None,
|
146
|
+
# Persistent per-rank RuntimeContext instances (reused across evaluates).
|
147
|
+
# We no longer pre-create evaluators since each evaluate has different env bindings.
|
148
|
+
self._runtimes: list[RuntimeContext] = [
|
149
|
+
RuntimeContext(
|
150
|
+
rank=rank,
|
151
|
+
world_size=self.world_size(),
|
152
|
+
# Static op bindings template cloned into each runtime. These are kernel
|
153
|
+
# dispatch mappings, not per-evaluate variable bindings.
|
154
|
+
initial_bindings=self._op_bindings_template,
|
155
155
|
)
|
156
|
-
self.
|
156
|
+
for rank in range(self.world_size())
|
157
|
+
]
|
157
158
|
|
158
159
|
@classmethod
|
159
160
|
def simple(
|
@@ -214,10 +215,10 @@ class Simulator(InterpContext):
|
|
214
215
|
for rank in range(self.world_size())
|
215
216
|
]
|
216
217
|
|
217
|
-
# Build per-rank evaluators with the per-party environment
|
218
|
+
# Build per-rank evaluators with the per-party environment (runtime reused)
|
218
219
|
pts_evaluators: list[IEvaluator] = []
|
219
220
|
for rank in range(self.world_size()):
|
220
|
-
runtime =
|
221
|
+
runtime = self._runtimes[rank]
|
221
222
|
ev = create_evaluator(
|
222
223
|
rank,
|
223
224
|
pts_env[rank],
|
@@ -225,17 +226,21 @@ class Simulator(InterpContext):
|
|
225
226
|
runtime,
|
226
227
|
None,
|
227
228
|
)
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
229
|
+
# Seed SPU once per runtime (idempotent logical requirement)
|
230
|
+
# Use setdefault to both retrieve and create metadata dict in one step.
|
231
|
+
spu_meta = runtime.state.setdefault("_spu", {})
|
232
|
+
if not spu_meta.get("inited", False):
|
233
|
+
link_ctx = self._spu_link_ctxs[rank]
|
234
|
+
seed_fn = PFunction(
|
235
|
+
fn_type="spu.seed_env",
|
236
|
+
ins_info=(),
|
237
|
+
outs_info=(),
|
238
|
+
config=self._spu_runtime_cfg,
|
239
|
+
world=self._spu_world,
|
240
|
+
link=link_ctx,
|
241
|
+
)
|
242
|
+
ev.runtime.run_kernel(seed_fn, []) # type: ignore[arg-type]
|
243
|
+
spu_meta["inited"] = True
|
239
244
|
pts_evaluators.append(ev)
|
240
245
|
|
241
246
|
# Collect evaluation results from all parties
|
@@ -36,8 +36,8 @@ from mplang.core.primitive import (
|
|
36
36
|
uniform_cond,
|
37
37
|
while_loop,
|
38
38
|
)
|
39
|
-
from mplang.
|
40
|
-
from mplang.
|
39
|
+
from mplang.ops import ibis_cc, jax_cc
|
40
|
+
from mplang.ops.base import FeOperation
|
41
41
|
from mplang.simp.mpi import allgather_m, bcast_m, gather_m, p2p, scatter_m
|
42
42
|
from mplang.simp.random import key_split, pperm, prandint, ukey, urandint
|
43
43
|
from mplang.simp.smpc import reveal, revealTo, seal, sealFrom, srun
|
@@ -189,7 +189,7 @@ def P2P(src: Party, dst: Party, value: Any) -> Any:
|
|
189
189
|
This module provides a light-weight mechanism to expose *module-like* groups
|
190
190
|
of callable operations bound to a specific party (rank) via attribute access:
|
191
191
|
|
192
|
-
load_module("mplang.
|
192
|
+
load_module("mplang.ops.crypto", alias="crypto")
|
193
193
|
P0.crypto.encrypt(x) # executes encrypt() with pmask = {rank 0}
|
194
194
|
|
195
195
|
Core concepts:
|
@@ -283,13 +283,13 @@ def _load_prelude_modules() -> None:
|
|
283
283
|
"""Auto-register public frontend submodules for party namespace access.
|
284
284
|
|
285
285
|
Implementation detail: we treat every non-underscore immediate child of
|
286
|
-
``mplang.
|
286
|
+
``mplang.ops`` as public and make it available as ``P0.<name>``.
|
287
287
|
This keeps user ergonomics high (no manual load_module calls for core
|
288
288
|
frontends) but slightly increases implicit surface area. If this grows
|
289
289
|
unwieldy we can switch to an allowlist.
|
290
290
|
"""
|
291
291
|
try:
|
292
|
-
import mplang.
|
292
|
+
import mplang.ops as _fe # type: ignore
|
293
293
|
except (ImportError, ModuleNotFoundError): # pragma: no cover
|
294
294
|
# Frontend package not present (minimal install); safe to skip.
|
295
295
|
return
|
@@ -299,7 +299,7 @@ def _load_prelude_modules() -> None:
|
|
299
299
|
if m.name.startswith("_"):
|
300
300
|
continue
|
301
301
|
if m.name not in _NAMESPACE_REGISTRY:
|
302
|
-
_NAMESPACE_REGISTRY[m.name] = f"mplang.
|
302
|
+
_NAMESPACE_REGISTRY[m.name] = f"mplang.ops.{m.name}"
|
303
303
|
|
304
304
|
|
305
305
|
def load_module(module: str, alias: str | None = None) -> None:
|
@@ -333,7 +333,7 @@ def load_module(module: str, alias: str | None = None) -> None:
|
|
333
333
|
|
334
334
|
Examples
|
335
335
|
--------
|
336
|
-
>>> load_module("mplang.
|
336
|
+
>>> load_module("mplang.ops.crypto", alias="crypto")
|
337
337
|
>>> # Now call an op on party 0
|
338
338
|
>>> P0.crypto.encrypt(data)
|
339
339
|
"""
|
@@ -6,7 +6,7 @@ This directory contains integration (end-to-end / cross-module) tests.
|
|
6
6
|
|
7
7
|
Integration tests exercise multiple layers of the MPLang stack together:
|
8
8
|
|
9
|
-
- Frontend APIs (`mplang.
|
9
|
+
- Frontend APIs (`mplang.ops.*` / `simp.*` helpers)
|
10
10
|
- Runtime scheduling and Simulator coordination
|
11
11
|
- Backend handlers (TEE, crypto, SPU, PHE, etc.)
|
12
12
|
- Cross‑party or cross‑device interactions (e.g. encryption handshake, gather / scatter, conditional SPMD control flow)
|
{mplang_nightly-0.1.dev149 → mplang_nightly-0.1.dev151}/tests/integration/test_symbols_roundtrip.py
RENAMED
@@ -39,7 +39,7 @@ import mplang.simp as simp
|
|
39
39
|
from mplang.core.cluster import ClusterSpec, Device, Node, RuntimeInfo
|
40
40
|
from mplang.core.dtype import DType
|
41
41
|
from mplang.core.tensor import TensorType
|
42
|
-
from mplang.
|
42
|
+
from mplang.ops import builtin as fb
|
43
43
|
from mplang.runtime.client import HttpExecutorClient
|
44
44
|
|
45
45
|
pytest_plugins = ("tests.utils.server_fixtures",)
|
@@ -143,7 +143,7 @@ class TestUnusedParameterHandling:
|
|
143
143
|
|
144
144
|
def test_arg_keep_map_in_pfunc(self):
|
145
145
|
"""Test that arg_keep_map is correctly stored in PFunction when needed."""
|
146
|
-
from mplang.
|
146
|
+
from mplang.ops.jax_cc import jax2stablehlo
|
147
147
|
|
148
148
|
def func_with_unused(a, unused, b):
|
149
149
|
return a * b
|