mplang-nightly 0.1.dev278__tar.gz → 0.1.dev280__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.dev278 → mplang_nightly-0.1.dev280}/PKG-INFO +1 -1
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/__init__.py +32 -8
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/channel.py +1 -1
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/simp_driver/http.py +1 -1
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/simp_worker/http.py +8 -5
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/spu_impl.py +1 -1
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/table_impl.py +1 -1
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/tensor_impl.py +1 -1
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/cli.py +1 -1
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/edsl/__init__.py +3 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/edsl/jit.py +1 -1
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/edsl/primitive.py +1 -1
- mplang_nightly-0.1.dev280/mplang/edsl/program.py +134 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/edsl/tracer.py +1 -1
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/device/api.py +1 -1
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/runtime/interpreter.py +1 -1
- mplang_nightly-0.1.dev280/mplang/tool/__init__.py +46 -0
- mplang_nightly-0.1.dev280/mplang/tool/program.py +335 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/utils/__init__.py +4 -0
- mplang_nightly-0.1.dev278/mplang/logging_config.py → mplang_nightly-0.1.dev280/mplang/utils/logging.py +6 -19
- mplang_nightly-0.1.dev280/tests/edsl/test_compiled_program_artifact.py +191 -0
- {mplang_nightly-0.1.dev278/tests → mplang_nightly-0.1.dev280/tests/utils}/test_logging.py +3 -3
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tutorials/04_ir_dump_and_analysis.py +37 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/.gitignore +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/LICENSE +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/README.md +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/examples/.gitkeep +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/hatch_build.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/bfv_impl.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/crypto_impl.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/field_impl.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/func_impl.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/phe_impl.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/simp_design.md +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/simp_driver/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/simp_driver/mem.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/simp_driver/ops.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/simp_driver/state.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/simp_driver/values.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/simp_worker/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/simp_worker/mem.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/simp_worker/ops.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/simp_worker/state.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/spu_state.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/store_impl.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/backends/tee_impl.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/cli_guide.md +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/dialects/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/dialects/bfv.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/dialects/crypto.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/dialects/dtypes.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/dialects/field.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/dialects/func.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/dialects/phe.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/dialects/simp.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/dialects/spu.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/dialects/store.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/dialects/table.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/dialects/tee.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/dialects/tensor.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/edsl/README.md +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/edsl/context.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/edsl/graph.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/edsl/object.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/edsl/printer.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/edsl/registry.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/edsl/serde.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/edsl/typing.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/kernels/Makefile +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/kernels/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/kernels/gf128.cpp +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/kernels/ldpc.cpp +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/kernels/okvs.cpp +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/kernels/okvs_opt.cpp +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/kernels/py_kernels.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/collective.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/device/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/device/cluster.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/ml/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/ml/sgb.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/mpc/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/mpc/_utils.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/mpc/analytics/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/mpc/analytics/aggregation.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/mpc/analytics/groupby.md +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/mpc/analytics/groupby.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/mpc/analytics/permutation.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/mpc/common/constants.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/mpc/ot/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/mpc/ot/base.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/mpc/ot/extension.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/mpc/ot/silent.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/mpc/psi/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/mpc/psi/cuckoo.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/mpc/psi/okvs.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/mpc/psi/okvs_gct.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/mpc/psi/oprf.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/mpc/psi/rr22.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/mpc/psi/unbalanced.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/mpc/vole/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/mpc/vole/gilboa.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/mpc/vole/ldpc.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/libs/mpc/vole/silver.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/py.typed +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/runtime/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/runtime/dialect_state.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/runtime/object_store.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/runtime/value.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/mplang/utils/func_utils.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/pyproject.toml +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/backends/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/backends/simp_driver/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/backends/simp_driver/test_http.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/backends/simp_worker/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/backends/simp_worker/test_http.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/backends/simp_worker/test_mem.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/backends/simp_worker/test_shuffle_exec_id_key.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/backends/test_bfv_impl.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/backends/test_channel.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/backends/test_crypto_impl.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/backends/test_okvs_binding.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/backends/test_simp_integration.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/backends/test_simp_object_store.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/backends/test_spu_impl.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/backends/test_table_impl.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/backends/test_tee_impl.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/backends/test_tensor_impl.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/backends/test_verify_clean.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/conftest.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/dialects/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/dialects/test_bfv.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/dialects/test_crypto.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/dialects/test_dtypes.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/dialects/test_field.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/dialects/test_func.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/dialects/test_okvs.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/dialects/test_okvs_bench.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/dialects/test_phe.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/dialects/test_simp.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/dialects/test_simp_comm.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/dialects/test_spu.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/dialects/test_store.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/dialects/test_table.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/dialects/test_tee.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/dialects/test_tensor.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/edsl/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/edsl/test_context.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/edsl/test_graph.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/edsl/test_primitive.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/edsl/test_primitive_multi_output.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/edsl/test_printer.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/edsl/test_serde.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/edsl/test_tracer.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/edsl/test_typing.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/edsl/test_typing_graph_serde.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/device/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/device/conftest.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/device/test_device_api_errors.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/device/test_device_dialects.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/device/test_device_layouts.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/device/test_device_tee.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/ml/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/ml/test_sgb.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/ml/test_sgb_bench.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/analytics/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/analytics/test_aggregation.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/analytics/test_groupby.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/analytics/test_permutation.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/ot/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/ot/test_ot.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/ot/test_ot_extension.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/ot/test_silent_ot.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/psi/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/psi/test_okvs_gct.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/psi/test_oprf.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/psi/test_psi.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/psi/test_psi_bench.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/psi/test_rr22.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/psi/verify_psi_okvs_logic.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/test_field_gf128.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/test_utils.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/vole/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/vole/test_gilboa_manual.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/vole/test_ldpc.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/vole/test_silver_vole.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/vole/test_vole.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/vole/test_vole_bench.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/mpc/vole/verify_vole_logic.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/test_collective.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/libs/test_simple_guide.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/runtime/test_interpreter_async.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/runtime/test_object_store.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/runtime/test_object_store_fs.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/test_fetch_semantics.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/test_pytree_io.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/utils/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/utils/tensor_patch.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tests/utils/test_func_utils.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tutorials/00_device_basics.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tutorials/01_function_decorator.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tutorials/02_simulation_and_driver.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tutorials/03_run_jax.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tutorials/05_run_sql.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tutorials/06_pipeline.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tutorials/07_stax_nn.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tutorials/08_logging.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tutorials/MIGRATION.md +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tutorials/README.md +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tutorials/__init__.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tutorials/data/alice.csv +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tutorials/data/bob.csv +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tutorials/data/prepare_vertical_iris.py +0 -0
- {mplang_nightly-0.1.dev278 → mplang_nightly-0.1.dev280}/tutorials/run.sh +0 -0
|
@@ -34,6 +34,7 @@ except Exception:
|
|
|
34
34
|
# Fallback for development/editable installs when package is not installed
|
|
35
35
|
__version__ = "0.0.0-dev"
|
|
36
36
|
|
|
37
|
+
import mplang.tool as tool
|
|
37
38
|
from mplang import dialects
|
|
38
39
|
from mplang.backends.simp_driver.ops import DRIVER_HANDLERS
|
|
39
40
|
from mplang.backends.simp_worker import SimpWorker
|
|
@@ -41,6 +42,8 @@ from mplang.backends.simp_worker.mem import LocalMesh
|
|
|
41
42
|
from mplang.backends.simp_worker.ops import WORKER_HANDLERS
|
|
42
43
|
from mplang.dialects.simp import make_driver, make_simulator
|
|
43
44
|
from mplang.edsl import (
|
|
45
|
+
CompiledProgram,
|
|
46
|
+
FlatIOSignature,
|
|
44
47
|
Graph,
|
|
45
48
|
GraphPrinter,
|
|
46
49
|
Object,
|
|
@@ -91,10 +94,10 @@ from mplang.libs.device import (
|
|
|
91
94
|
set_dev_attr,
|
|
92
95
|
)
|
|
93
96
|
from mplang.libs.device import fetch as device_fetch
|
|
97
|
+
from mplang.runtime.interpreter import Interpreter
|
|
94
98
|
|
|
95
99
|
# Logging configuration
|
|
96
|
-
from mplang.
|
|
97
|
-
from mplang.runtime.interpreter import Interpreter
|
|
100
|
+
from mplang.utils.logging import disable_logging, get_logger, setup_logging
|
|
98
101
|
|
|
99
102
|
# =============================================================================
|
|
100
103
|
# Context Management API (JAX-like pattern)
|
|
@@ -125,7 +128,7 @@ def _get_context(context: Interpreter | None) -> Interpreter:
|
|
|
125
128
|
|
|
126
129
|
|
|
127
130
|
def evaluate(
|
|
128
|
-
fn: Callable[..., Any] | TracedFunction,
|
|
131
|
+
fn: Callable[..., Any] | TracedFunction | CompiledProgram,
|
|
129
132
|
*args: Any,
|
|
130
133
|
context: Interpreter | None = None,
|
|
131
134
|
**kwargs: Any,
|
|
@@ -158,15 +161,33 @@ def evaluate(
|
|
|
158
161
|
return val.runtime_obj
|
|
159
162
|
return val
|
|
160
163
|
|
|
164
|
+
def eval_graph(graph: Graph, inputs: list[Any]) -> list[InterpObject]:
|
|
165
|
+
runtime_inputs = [unwrap_if_interp(v) for v in inputs]
|
|
166
|
+
raw_result = interp.evaluate_graph(graph, runtime_inputs)
|
|
167
|
+
return [
|
|
168
|
+
InterpObject(v, graph.outputs[i].type, interp)
|
|
169
|
+
for i, v in enumerate(raw_result)
|
|
170
|
+
]
|
|
171
|
+
|
|
161
172
|
with interp:
|
|
173
|
+
if isinstance(fn, CompiledProgram):
|
|
174
|
+
if kwargs:
|
|
175
|
+
raise TypeError(
|
|
176
|
+
"mp.evaluate(CompiledProgram, ...) does not accept keyword arguments; "
|
|
177
|
+
"pass flat positional inputs only."
|
|
178
|
+
)
|
|
179
|
+
if len(args) != fn.signature.input_arity:
|
|
180
|
+
raise ValueError(
|
|
181
|
+
"CompiledProgram requires flat positional inputs matching its signature; "
|
|
182
|
+
f"expected {fn.signature.input_arity}, got {len(args)}."
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
return eval_graph(fn.graph, list(args))
|
|
186
|
+
|
|
162
187
|
if isinstance(fn, TracedFunction):
|
|
163
188
|
inputs = fn.prepare_inputs(*args, **kwargs)
|
|
164
189
|
inputs = [unwrap_if_interp(v) for v in inputs]
|
|
165
|
-
|
|
166
|
-
wrapped = [
|
|
167
|
-
InterpObject(v, fn.graph.outputs[i].type, interp)
|
|
168
|
-
for i, v in enumerate(raw_result)
|
|
169
|
-
]
|
|
190
|
+
wrapped = eval_graph(fn.graph, inputs)
|
|
170
191
|
return fn.reconstruct_outputs(wrapped)
|
|
171
192
|
|
|
172
193
|
return fn(*args, **kwargs)
|
|
@@ -417,6 +438,9 @@ __all__ = [ # noqa: RUF022
|
|
|
417
438
|
"WORKER_HANDLERS",
|
|
418
439
|
"make_driver",
|
|
419
440
|
"make_simulator",
|
|
441
|
+
"tool",
|
|
442
|
+
"CompiledProgram",
|
|
443
|
+
"FlatIOSignature",
|
|
420
444
|
# Dialects
|
|
421
445
|
"dialects",
|
|
422
446
|
"register_default_context_factory",
|
|
@@ -25,9 +25,9 @@ import httpx
|
|
|
25
25
|
|
|
26
26
|
from mplang.backends.simp_driver.state import SimpDriver
|
|
27
27
|
from mplang.edsl import serde
|
|
28
|
-
from mplang.logging_config import get_logger
|
|
29
28
|
from mplang.runtime.interpreter import Interpreter
|
|
30
29
|
from mplang.runtime.object_store import ObjectStore
|
|
30
|
+
from mplang.utils.logging import get_logger
|
|
31
31
|
|
|
32
32
|
logger = get_logger(__name__)
|
|
33
33
|
|
|
@@ -54,9 +54,9 @@ from mplang.backends.simp_worker import SimpWorker
|
|
|
54
54
|
from mplang.backends.simp_worker import ops as _simp_worker_ops # noqa: F401
|
|
55
55
|
from mplang.edsl import serde
|
|
56
56
|
from mplang.edsl.graph import Graph
|
|
57
|
-
from mplang.logging_config import get_logger
|
|
58
57
|
from mplang.runtime.interpreter import ExecutionTracer, Interpreter
|
|
59
58
|
from mplang.runtime.object_store import ObjectStore
|
|
59
|
+
from mplang.utils.logging import get_logger
|
|
60
60
|
|
|
61
61
|
logger = get_logger(__name__)
|
|
62
62
|
|
|
@@ -212,6 +212,7 @@ def create_worker_app(
|
|
|
212
212
|
world_size: int,
|
|
213
213
|
endpoints: list[str],
|
|
214
214
|
spu_endpoints: dict[int, str] | None = None,
|
|
215
|
+
enable_tracing: bool = False,
|
|
215
216
|
) -> FastAPI:
|
|
216
217
|
"""Create a FastAPI app for the worker.
|
|
217
218
|
|
|
@@ -224,6 +225,7 @@ def create_worker_app(
|
|
|
224
225
|
world_size: Total number of workers.
|
|
225
226
|
endpoints: HTTP endpoints for all workers (for shuffle communication).
|
|
226
227
|
spu_endpoints: Optional dict mapping global_rank -> BRPC endpoint for SPU.
|
|
228
|
+
enable_tracing: Whether to enable execution tracing for profiler.
|
|
227
229
|
|
|
228
230
|
Returns:
|
|
229
231
|
FastAPI application instance
|
|
@@ -236,11 +238,12 @@ def create_worker_app(
|
|
|
236
238
|
data_root = pathlib.Path(os.environ.get("MPLANG_DATA_ROOT", ".mpl"))
|
|
237
239
|
cluster_id = os.environ.get("MPLANG_CLUSTER_ID", f"__http_{world_size}")
|
|
238
240
|
root_dir = data_root / cluster_id / f"node{rank}"
|
|
239
|
-
trace_dir = root_dir / "trace"
|
|
240
241
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
242
|
+
tracer = None
|
|
243
|
+
if enable_tracing:
|
|
244
|
+
trace_dir = root_dir / "trace"
|
|
245
|
+
tracer = ExecutionTracer(enabled=True, trace_dir=trace_dir)
|
|
246
|
+
tracer.start()
|
|
244
247
|
|
|
245
248
|
comm = HttpCommunicator(rank, world_size, endpoints, tracer=tracer)
|
|
246
249
|
store = ObjectStore(fs_root=str(root_dir))
|
|
@@ -31,9 +31,9 @@ from mplang.backends.tensor_impl import TensorValue
|
|
|
31
31
|
from mplang.dialects import spu
|
|
32
32
|
from mplang.edsl import serde
|
|
33
33
|
from mplang.edsl.graph import Operation
|
|
34
|
-
from mplang.logging_config import get_logger
|
|
35
34
|
from mplang.runtime.interpreter import Interpreter
|
|
36
35
|
from mplang.runtime.value import WrapValue
|
|
36
|
+
from mplang.utils.logging import get_logger
|
|
37
37
|
|
|
38
38
|
logger = get_logger(__name__)
|
|
39
39
|
|
|
@@ -33,9 +33,9 @@ from mplang.backends.tensor_impl import TensorValue
|
|
|
33
33
|
from mplang.dialects import table
|
|
34
34
|
from mplang.edsl import serde
|
|
35
35
|
from mplang.edsl.graph import Operation
|
|
36
|
-
from mplang.logging_config import get_logger
|
|
37
36
|
from mplang.runtime.interpreter import Interpreter
|
|
38
37
|
from mplang.runtime.value import WrapValue
|
|
38
|
+
from mplang.utils.logging import get_logger
|
|
39
39
|
|
|
40
40
|
logger = get_logger(__name__)
|
|
41
41
|
|
|
@@ -36,9 +36,9 @@ import mplang.edsl.typing as elt
|
|
|
36
36
|
from mplang.dialects import dtypes, tensor
|
|
37
37
|
from mplang.edsl import serde
|
|
38
38
|
from mplang.edsl.graph import Operation
|
|
39
|
-
from mplang.logging_config import get_logger
|
|
40
39
|
from mplang.runtime.interpreter import Interpreter
|
|
41
40
|
from mplang.runtime.value import Value, WrapValue
|
|
41
|
+
from mplang.utils.logging import get_logger
|
|
42
42
|
|
|
43
43
|
logger = get_logger(__name__)
|
|
44
44
|
|
|
@@ -53,6 +53,7 @@ from .jit import jit
|
|
|
53
53
|
from .object import Object
|
|
54
54
|
from .primitive import Primitive, primitive
|
|
55
55
|
from .printer import GraphPrinter, format_graph
|
|
56
|
+
from .program import CompiledProgram, FlatIOSignature
|
|
56
57
|
from .tracer import TracedFunction, TraceObject, Tracer, trace
|
|
57
58
|
from .typing import MPType, ScalarType, SSType, TableType, TensorType, VectorType
|
|
58
59
|
|
|
@@ -65,7 +66,9 @@ TensorObject = Object[TensorType]
|
|
|
65
66
|
VectorObject = Object[VectorType]
|
|
66
67
|
|
|
67
68
|
__all__ = [
|
|
69
|
+
"CompiledProgram",
|
|
68
70
|
"Context",
|
|
71
|
+
"FlatIOSignature",
|
|
69
72
|
"Graph",
|
|
70
73
|
"GraphPrinter",
|
|
71
74
|
"MPObject",
|
|
@@ -29,7 +29,7 @@ from jax.tree_util import tree_map
|
|
|
29
29
|
|
|
30
30
|
from mplang.edsl.context import get_current_context, get_default_context
|
|
31
31
|
from mplang.edsl.object import Object
|
|
32
|
-
from mplang.
|
|
32
|
+
from mplang.utils.logging import get_logger
|
|
33
33
|
|
|
34
34
|
if TYPE_CHECKING:
|
|
35
35
|
from mplang.edsl.typing import BaseType
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# Copyright 2026 Ant Group Co., Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
import hashlib
|
|
18
|
+
import json
|
|
19
|
+
from dataclasses import dataclass
|
|
20
|
+
from typing import Any, ClassVar
|
|
21
|
+
|
|
22
|
+
from mplang.edsl import serde
|
|
23
|
+
from mplang.edsl.graph import Graph
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@dataclass(frozen=True)
|
|
27
|
+
class FlatIOSignature:
|
|
28
|
+
"""Portable I/O signature for source-free execution.
|
|
29
|
+
|
|
30
|
+
Only supports flat positional inputs/outputs corresponding to
|
|
31
|
+
`graph.inputs` / `graph.outputs`.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
kind: ClassVar[str] = "flat_list_v0"
|
|
35
|
+
input_arity: int
|
|
36
|
+
output_arity: int
|
|
37
|
+
|
|
38
|
+
def to_json(self) -> dict[str, Any]:
|
|
39
|
+
return {
|
|
40
|
+
"kind": self.kind,
|
|
41
|
+
"input_arity": self.input_arity,
|
|
42
|
+
"output_arity": self.output_arity,
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
@classmethod
|
|
46
|
+
def from_json(cls, data: dict[str, Any]) -> FlatIOSignature:
|
|
47
|
+
if data.get("kind") != cls.kind:
|
|
48
|
+
raise ValueError(f"Unsupported signature kind: {data.get('kind')}")
|
|
49
|
+
return cls(
|
|
50
|
+
input_arity=int(data["input_arity"]),
|
|
51
|
+
output_arity=int(data["output_arity"]),
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
@serde.register_class
|
|
56
|
+
@dataclass
|
|
57
|
+
class CompiledProgram:
|
|
58
|
+
"""Executable program decoupled from user source.
|
|
59
|
+
|
|
60
|
+
This is a *logical model*; packaging (file/zip/etc.) is handled by tool layer.
|
|
61
|
+
|
|
62
|
+
Current constraints:
|
|
63
|
+
- signature is flat positional list I/O.
|
|
64
|
+
- no closure captures.
|
|
65
|
+
- no constant outputs (out_imms) unless future signature captures them.
|
|
66
|
+
"""
|
|
67
|
+
|
|
68
|
+
_serde_kind: ClassVar[str] = "mplang.CompiledProgram"
|
|
69
|
+
|
|
70
|
+
graph: Graph
|
|
71
|
+
signature: FlatIOSignature
|
|
72
|
+
required_opcodes: list[str]
|
|
73
|
+
graph_digest: str
|
|
74
|
+
required_world_size: int | None = None
|
|
75
|
+
created_at: str | None = None
|
|
76
|
+
mplang_version: str | None = None
|
|
77
|
+
schema_version: int = 1
|
|
78
|
+
name: str | None = None
|
|
79
|
+
|
|
80
|
+
def to_json(self) -> dict[str, Any]:
|
|
81
|
+
return {
|
|
82
|
+
"schema_version": self.schema_version,
|
|
83
|
+
"name": self.name,
|
|
84
|
+
"graph": serde.to_json(self.graph),
|
|
85
|
+
"signature": self.signature.to_json(),
|
|
86
|
+
"required_opcodes": list(self.required_opcodes),
|
|
87
|
+
"graph_digest": self.graph_digest,
|
|
88
|
+
"required_world_size": self.required_world_size,
|
|
89
|
+
"created_at": self.created_at,
|
|
90
|
+
"mplang_version": self.mplang_version,
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
@classmethod
|
|
94
|
+
def from_json(cls, data: dict[str, Any]) -> CompiledProgram:
|
|
95
|
+
if "schema_version" not in data:
|
|
96
|
+
raise KeyError("Missing required field: schema_version")
|
|
97
|
+
schema_version = int(data["schema_version"])
|
|
98
|
+
if schema_version != 1:
|
|
99
|
+
raise ValueError(
|
|
100
|
+
f"Unsupported CompiledProgram schema_version: {schema_version}"
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
graph = serde.from_json(data["graph"])
|
|
104
|
+
if not isinstance(graph, Graph):
|
|
105
|
+
raise TypeError(
|
|
106
|
+
f"Expected graph to deserialize to Graph, got {type(graph).__name__}"
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
signature = FlatIOSignature.from_json(data["signature"])
|
|
110
|
+
|
|
111
|
+
required_world_size = data.get("required_world_size")
|
|
112
|
+
if required_world_size is not None:
|
|
113
|
+
required_world_size = int(required_world_size)
|
|
114
|
+
return cls(
|
|
115
|
+
graph=graph,
|
|
116
|
+
signature=signature,
|
|
117
|
+
required_opcodes=list(data.get("required_opcodes", [])),
|
|
118
|
+
graph_digest=str(data["graph_digest"]),
|
|
119
|
+
required_world_size=required_world_size,
|
|
120
|
+
created_at=data.get("created_at"),
|
|
121
|
+
mplang_version=data.get("mplang_version"),
|
|
122
|
+
schema_version=schema_version,
|
|
123
|
+
name=data.get("name"),
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def compute_graph_digest(graph: Graph) -> str:
|
|
128
|
+
"""Compute a deterministic digest for a Graph.
|
|
129
|
+
|
|
130
|
+
We intentionally avoid `serde.dumps()` because it doesn't sort keys.
|
|
131
|
+
"""
|
|
132
|
+
|
|
133
|
+
canonical = json.dumps(serde.to_json(graph), sort_keys=True, separators=(",", ":"))
|
|
134
|
+
return hashlib.sha256(canonical.encode("utf-8")).hexdigest()
|
|
@@ -36,7 +36,7 @@ from mplang.edsl.graph import Graph
|
|
|
36
36
|
from mplang.edsl.graph import Value as GraphValue
|
|
37
37
|
from mplang.edsl.object import Object
|
|
38
38
|
from mplang.edsl.typing import BaseType
|
|
39
|
-
from mplang.
|
|
39
|
+
from mplang.utils.logging import get_logger
|
|
40
40
|
|
|
41
41
|
if TYPE_CHECKING:
|
|
42
42
|
from mplang.edsl.primitive import Primitive
|
|
@@ -32,7 +32,7 @@ from mplang.backends import load_builtins
|
|
|
32
32
|
from mplang.dialects import crypto, simp, spu, tee
|
|
33
33
|
from mplang.edsl.object import Object
|
|
34
34
|
from mplang.libs.device.cluster import Device
|
|
35
|
-
from mplang.
|
|
35
|
+
from mplang.utils.logging import get_logger
|
|
36
36
|
|
|
37
37
|
load_builtins()
|
|
38
38
|
|
|
@@ -40,9 +40,9 @@ from mplang.edsl.graph import Graph, Value
|
|
|
40
40
|
from mplang.edsl.object import Object
|
|
41
41
|
from mplang.edsl.registry import get_impl
|
|
42
42
|
from mplang.edsl.typing import BaseType
|
|
43
|
-
from mplang.logging_config import get_logger
|
|
44
43
|
from mplang.runtime.dialect_state import DialectState
|
|
45
44
|
from mplang.runtime.object_store import ObjectStore
|
|
45
|
+
from mplang.utils.logging import get_logger
|
|
46
46
|
|
|
47
47
|
if TYPE_CHECKING:
|
|
48
48
|
from mplang.edsl.primitive import Primitive
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Copyright 2026 Ant Group Co., Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
"""Tool-layer APIs for MPLang.
|
|
16
|
+
|
|
17
|
+
This package contains utilities that are intentionally *not* part of the core
|
|
18
|
+
EDSL execution surface. In particular, compile/execute decoupling lives here:
|
|
19
|
+
- build a portable `CompiledProgram`
|
|
20
|
+
- pack/unpack to a container format
|
|
21
|
+
|
|
22
|
+
These helpers must not depend on user source code being available at execution.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
from __future__ import annotations
|
|
26
|
+
|
|
27
|
+
from mplang.edsl.program import CompiledProgram, FlatIOSignature
|
|
28
|
+
from mplang.tool.program import (
|
|
29
|
+
compile_program,
|
|
30
|
+
inspect_artifact,
|
|
31
|
+
pack,
|
|
32
|
+
pack_to_path,
|
|
33
|
+
unpack,
|
|
34
|
+
unpack_path,
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
__all__ = [
|
|
38
|
+
"CompiledProgram",
|
|
39
|
+
"FlatIOSignature",
|
|
40
|
+
"compile_program",
|
|
41
|
+
"inspect_artifact",
|
|
42
|
+
"pack",
|
|
43
|
+
"pack_to_path",
|
|
44
|
+
"unpack",
|
|
45
|
+
"unpack_path",
|
|
46
|
+
]
|