mplang-nightly 0.1.dev180__tar.gz → 0.1.dev182__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.dev180 → mplang_nightly-0.1.dev182}/PKG-INFO +2 -2
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/README.md +1 -1
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/core/primitive.py +1 -1
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/host.py +32 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/simp/mpi.py +2 -2
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/runtime/test_communicator.py +14 -4
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/.gitignore +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/LICENSE +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/examples/conf/3pc.yaml +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/examples/stax_nn/README.md +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/examples/stax_nn/models.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/examples/stax_nn/stax_nn.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/examples/xgboost/hist_jax.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/examples/xgboost/hist_jax_test.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/examples/xgboost/naive_np.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/examples/xgboost/readme.md +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/examples/xgboost/sgb.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/examples/xgboost/sgb_test.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/hatch_build.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/__init__.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/analysis/__init__.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/analysis/diagram.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/core/__init__.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/core/cluster.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/core/comm.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/core/context_mgr.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/core/dtypes.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/core/expr/__init__.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/core/expr/ast.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/core/expr/evaluator.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/core/expr/printer.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/core/expr/transformer.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/core/expr/utils.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/core/expr/visitor.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/core/expr/walk.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/core/interp.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/core/mask.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/core/mpir.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/core/mpobject.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/core/mptype.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/core/pfunc.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/core/table.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/core/tensor.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/core/tracer.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/device.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/kernels/__init__.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/kernels/base.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/kernels/basic.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/kernels/context.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/kernels/crypto.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/kernels/mock_tee.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/kernels/phe.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/kernels/spu.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/kernels/sql_duckdb.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/kernels/stablehlo.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/kernels/value.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/ops/__init__.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/ops/base.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/ops/basic.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/ops/crypto.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/ops/ibis_cc.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/ops/jax_cc.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/ops/phe.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/ops/spu.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/ops/sql_cc.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/ops/tee.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/protos/v1alpha1/mpir_pb2.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/protos/v1alpha1/mpir_pb2.pyi +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/protos/v1alpha1/value_pb2.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/protos/v1alpha1/value_pb2.pyi +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/runtime/__init__.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/runtime/cli.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/runtime/client.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/runtime/communicator.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/runtime/data_providers.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/runtime/driver.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/runtime/exceptions.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/runtime/http_api.md +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/runtime/link_comm.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/runtime/server.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/runtime/session.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/runtime/simulation.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/simp/__init__.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/simp/api.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/simp/party.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/simp/random.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/simp/smpc.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/utils/__init__.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/utils/crypto.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/utils/func_utils.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/utils/spu_utils.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/mplang/utils/table_utils.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/pyproject.toml +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/__init__.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/analysis/test_diagram.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/conftest.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/core/__init__.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/core/expr/__init__.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/core/expr/conftest.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/core/expr/test_ast.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/core/expr/test_printer.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/core/expr/test_utils.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/core/expr/test_walk.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/core/test_cluster.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/core/test_dtype.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/core/test_mask.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/core/test_mpir.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/core/test_mptype.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/core/test_primitive.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/core/test_table.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/core/test_tensor.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/core/test_tracer.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/device/__init__.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/device/test_device_basic.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/integration/README.md +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/integration/test_crypto_roundtrip.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/integration/test_http_e2e.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/integration/test_symbols_roundtrip.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/integration/test_tee_workflow.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/integration/test_tutorials.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/integration/test_unused_param_integration.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/kernels/test_basic.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/kernels/test_debug_print.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/kernels/test_kernel_binding.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/kernels/test_phe.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/kernels/test_spu.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/kernels/test_sql_duckdb.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/kernels/test_stablehlo.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/kernels/test_value.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/kernels/test_value_serde.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/ops/__init__.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/ops/dummy.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/ops/test_basic_pack.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/ops/test_feop_base.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/ops/test_ibis.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/ops/test_ibis_cc.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/ops/test_jax_cc.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/ops/test_phe.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/ops/test_spu.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/ops/test_spu_defensive.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/ops/test_sql.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/ops/test_table_tensor_conversion.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/runtime/__init__.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/runtime/test_cli.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/runtime/test_driver.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/runtime/test_server.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/runtime/test_simulation.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/simp/test_mpi.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/simp/test_random.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/simp/test_smpc.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/simp/test_sugar.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/utils/__init__.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/utils/server_fixtures.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/utils/test_func_utils.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/utils/test_spu_utils.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/utils/test_table_utils.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tutorials/0_basic.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tutorials/10_analysis.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tutorials/1_condition.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tutorials/2_whileloop.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tutorials/3_device.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tutorials/4_simulation.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tutorials/5_ir_dump.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tutorials/6_advanced.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tutorials/7_stdio.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tutorials/8_phe.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tutorials/9_tee.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tutorials/__init__.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tutorials/pitfalls/late_binding.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tutorials/pitfalls/rand.py +0 -0
- {mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tutorials/run.sh +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mplang-nightly
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.dev182
|
|
4
4
|
Summary: Multi-Party Programming Language
|
|
5
5
|
Author-email: SecretFlow Team <secretflow-contact@service.alipay.com>
|
|
6
6
|
License: Apache License
|
|
@@ -277,7 +277,7 @@ sim = mplang.Simulator.simple(2)
|
|
|
277
277
|
result = mplang.evaluate(sim, millionaire)
|
|
278
278
|
|
|
279
279
|
# Securely fetch the result (reveals SPU value)
|
|
280
|
-
print("Is Alice poorer than Bob?",
|
|
280
|
+
print("Is Alice poorer than Bob?", mplang.fetch(sim, result))
|
|
281
281
|
```
|
|
282
282
|
|
|
283
283
|
## Learn More
|
|
@@ -57,7 +57,7 @@ sim = mplang.Simulator.simple(2)
|
|
|
57
57
|
result = mplang.evaluate(sim, millionaire)
|
|
58
58
|
|
|
59
59
|
# Securely fetch the result (reveals SPU value)
|
|
60
|
-
print("Is Alice poorer than Bob?",
|
|
60
|
+
print("Is Alice poorer than Bob?", mplang.fetch(sim, result))
|
|
61
61
|
```
|
|
62
62
|
|
|
63
63
|
## Learn More
|
|
@@ -718,7 +718,7 @@ def pshfl(src: MPObject, index: MPObject) -> MPObject:
|
|
|
718
718
|
|
|
719
719
|
Raises:
|
|
720
720
|
ValueError: If the index tensor is not a scalar.
|
|
721
|
-
RuntimeError: If src[index[i]] is None for any valid index[i] (i.e
|
|
721
|
+
RuntimeError: If src[index[i]] is None for any valid index[i] (i.e.,
|
|
722
722
|
trying to fetch from a party that doesn't hold the data).
|
|
723
723
|
|
|
724
724
|
Examples:
|
|
@@ -38,6 +38,16 @@ def evaluate(
|
|
|
38
38
|
|
|
39
39
|
This function accepts arbitrary types as it's designed to handle
|
|
40
40
|
any multi-party computation function and arguments.
|
|
41
|
+
|
|
42
|
+
Args:
|
|
43
|
+
interp: The interpreter context for evaluating the multi-party function.
|
|
44
|
+
mpfn: The multi-party function to evaluate.
|
|
45
|
+
*args: Positional arguments to pass to the function.
|
|
46
|
+
**kwargs: Keyword arguments to pass to the function.
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
Any: The result of evaluating the multi-party function, which can be
|
|
50
|
+
any type depending on the function's return type.
|
|
41
51
|
"""
|
|
42
52
|
assert isinstance(interp, InterpContext), f"Expect InterpContext, got {interp}"
|
|
43
53
|
with with_ctx(interp):
|
|
@@ -49,6 +59,16 @@ def fetch(interp: InterpContext | None, objs: Any) -> Any: # type: ignore[misc]
|
|
|
49
59
|
|
|
50
60
|
This function uses tree_map to handle arbitrary nested structures,
|
|
51
61
|
so it needs to accept and return Any type.
|
|
62
|
+
|
|
63
|
+
Args:
|
|
64
|
+
interp: The interpreter context for fetching results. If None, uses the
|
|
65
|
+
current context from cur_ctx().
|
|
66
|
+
objs: The objects containing MPObject instances to fetch. Can be any
|
|
67
|
+
nested structure.
|
|
68
|
+
|
|
69
|
+
Returns:
|
|
70
|
+
Any: The fetched results with the same structure as the input objects,
|
|
71
|
+
but with MPObject instances replaced by their computed values.
|
|
52
72
|
"""
|
|
53
73
|
ctx = interp or cur_ctx()
|
|
54
74
|
assert isinstance(ctx, InterpContext), f"Expect MPExecutor, got {ctx}"
|
|
@@ -94,5 +114,17 @@ class CompileOptions(MPContext):
|
|
|
94
114
|
def compile(
|
|
95
115
|
mctx: MPContext, fn: Callable[..., Any], *args: Any, **kwargs: Any
|
|
96
116
|
) -> TracedFunction:
|
|
117
|
+
"""Compile a multi-party function into a TracedFunction.
|
|
118
|
+
|
|
119
|
+
Args:
|
|
120
|
+
mctx: The multi-party context for compilation.
|
|
121
|
+
fn: The function to compile.
|
|
122
|
+
*args: Positional arguments to pass during compilation.
|
|
123
|
+
**kwargs: Keyword arguments to pass during compilation.
|
|
124
|
+
|
|
125
|
+
Returns:
|
|
126
|
+
TracedFunction: The compiled function representation that can be
|
|
127
|
+
evaluated in multi-party contexts.
|
|
128
|
+
"""
|
|
97
129
|
trace_ctx = TraceContext(mctx.cluster_spec)
|
|
98
130
|
return trace(trace_ctx, fn, *args, **kwargs)
|
|
@@ -57,9 +57,9 @@ def gather_m(src_mask: Mask, root: Rank, arg: MPObject) -> list[MPObject]:
|
|
|
57
57
|
"""Gather the object from pmask'ed parties to the root party.
|
|
58
58
|
|
|
59
59
|
Args:
|
|
60
|
-
|
|
60
|
+
src_mask: The mask of the parties that will gather the object.
|
|
61
61
|
root: The rank of the root party.
|
|
62
|
-
arg: The object to be gathered
|
|
62
|
+
arg: The object to be gathered. It must be held by all parties specified in `src_mask`.
|
|
63
63
|
|
|
64
64
|
Returns:
|
|
65
65
|
A list of objects, with length equal to the number of parties in pmask.
|
|
@@ -150,7 +150,9 @@ def test_communicator_properties(http_servers): # noqa: F811
|
|
|
150
150
|
assert id1 != id2 # Should generate unique IDs
|
|
151
151
|
|
|
152
152
|
|
|
153
|
-
def run_party_e2e_process(
|
|
153
|
+
def run_party_e2e_process(
|
|
154
|
+
rank: int, return_dict: dict, assigned_ports: dict, barrier: multiprocessing.Barrier
|
|
155
|
+
):
|
|
154
156
|
"""
|
|
155
157
|
Run a complete party process with server and communication logic.
|
|
156
158
|
This is the proper single-process-per-party architecture.
|
|
@@ -247,6 +249,8 @@ def run_party_e2e_process(rank: int, return_dict: dict, assigned_ports: dict):
|
|
|
247
249
|
if not server_ready:
|
|
248
250
|
raise RuntimeError("Server failed to start within timeout")
|
|
249
251
|
|
|
252
|
+
barrier.wait(timeout=30) # Synchronize with other parties
|
|
253
|
+
|
|
250
254
|
# Run party-specific communication logic
|
|
251
255
|
if rank == 0:
|
|
252
256
|
# Party 0: Send message to Party 1
|
|
@@ -309,15 +313,21 @@ def test_end_to_end_communication():
|
|
|
309
313
|
assigned_ports[0] = p0
|
|
310
314
|
assigned_ports[1] = p1
|
|
311
315
|
|
|
316
|
+
worlds = [0, 1]
|
|
317
|
+
barrier = mp_ctx.Barrier(len(worlds) + 1) # size(parties) + main process
|
|
318
|
+
|
|
312
319
|
# Start both party processes
|
|
313
320
|
processes = []
|
|
314
|
-
for rank in
|
|
321
|
+
for rank in worlds:
|
|
315
322
|
process = mp_ctx.Process(
|
|
316
|
-
target=run_party_e2e_process,
|
|
323
|
+
target=run_party_e2e_process,
|
|
324
|
+
args=(rank, return_dict, assigned_ports, barrier),
|
|
317
325
|
)
|
|
318
326
|
process.start()
|
|
319
327
|
processes.append(process)
|
|
320
328
|
|
|
329
|
+
barrier.wait(timeout=30) # Wait for both parties to be ready
|
|
330
|
+
|
|
321
331
|
# Wait for both processes to complete
|
|
322
332
|
for process in processes:
|
|
323
333
|
process.join(timeout=30)
|
|
@@ -328,7 +338,7 @@ def test_end_to_end_communication():
|
|
|
328
338
|
process.kill()
|
|
329
339
|
|
|
330
340
|
# Validate results
|
|
331
|
-
for rank in
|
|
341
|
+
for rank in worlds:
|
|
332
342
|
assert rank in return_dict, f"Party {rank} did not complete"
|
|
333
343
|
result = return_dict[rank]
|
|
334
344
|
assert result.get("status") == "success", f"Party {rank} failed: {result}"
|
|
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
|
|
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
|
|
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
|
|
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.dev180 → mplang_nightly-0.1.dev182}/mplang/protos/v1alpha1/value_pb2.pyi
RENAMED
|
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
|
|
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
|
|
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.dev180 → mplang_nightly-0.1.dev182}/tests/integration/test_crypto_roundtrip.py
RENAMED
|
File without changes
|
|
File without changes
|
{mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/integration/test_symbols_roundtrip.py
RENAMED
|
File without changes
|
{mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/integration/test_tee_workflow.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/kernels/test_kernel_binding.py
RENAMED
|
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
|
|
File without changes
|
{mplang_nightly-0.1.dev180 → mplang_nightly-0.1.dev182}/tests/ops/test_table_tensor_conversion.py
RENAMED
|
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
|
|
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
|