mplang-nightly 0.1.dev331__tar.gz → 0.1.dev333__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.
Files changed (240) hide show
  1. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/PKG-INFO +1 -1
  2. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/simp_driver/ops.py +4 -4
  3. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/simp_worker/ops.py +13 -4
  4. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/spu_state.py +17 -10
  5. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/runtime/interpreter.py +3 -1
  6. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/test_simp_integration.py +44 -0
  7. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/.gitignore +0 -0
  8. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/LICENSE +0 -0
  9. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/README.md +0 -0
  10. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/examples/.gitkeep +0 -0
  11. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/hatch_build.py +0 -0
  12. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/__init__.py +0 -0
  13. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/__init__.py +0 -0
  14. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/bfv_impl.py +0 -0
  15. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/channel.py +0 -0
  16. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/crypto_impl.py +0 -0
  17. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/field_impl.py +0 -0
  18. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/func_impl.py +0 -0
  19. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/phe_impl.py +0 -0
  20. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/simp_design.md +0 -0
  21. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/simp_driver/__init__.py +0 -0
  22. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/simp_driver/http.py +0 -0
  23. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/simp_driver/mem.py +0 -0
  24. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/simp_driver/state.py +0 -0
  25. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/simp_driver/values.py +0 -0
  26. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/simp_worker/__init__.py +0 -0
  27. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/simp_worker/base.py +0 -0
  28. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/simp_worker/collective_algorithms.py +0 -0
  29. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/simp_worker/collectives.py +0 -0
  30. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/simp_worker/comm_context.py +0 -0
  31. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/simp_worker/http.py +0 -0
  32. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/simp_worker/infra.py +0 -0
  33. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/simp_worker/mem.py +0 -0
  34. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/simp_worker/request.py +0 -0
  35. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/simp_worker/state.py +0 -0
  36. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/spu_impl.py +0 -0
  37. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/store_impl.py +0 -0
  38. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/table_impl.py +0 -0
  39. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/tee_impl.py +0 -0
  40. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/tensor_impl.py +0 -0
  41. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/backends/util.py +0 -0
  42. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/cli.py +0 -0
  43. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/cli_guide.md +0 -0
  44. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/dialects/__init__.py +0 -0
  45. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/dialects/_jax_utils.py +0 -0
  46. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/dialects/bfv.py +0 -0
  47. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/dialects/crypto.py +0 -0
  48. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/dialects/dtypes.py +0 -0
  49. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/dialects/field.py +0 -0
  50. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/dialects/func.py +0 -0
  51. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/dialects/phe.py +0 -0
  52. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/dialects/simp.py +0 -0
  53. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/dialects/spu.py +0 -0
  54. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/dialects/store.py +0 -0
  55. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/dialects/table.py +0 -0
  56. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/dialects/tee.py +0 -0
  57. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/dialects/tensor.py +0 -0
  58. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/edsl/README.md +0 -0
  59. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/edsl/__init__.py +0 -0
  60. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/edsl/context.py +0 -0
  61. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/edsl/graph.py +0 -0
  62. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/edsl/object.py +0 -0
  63. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/edsl/primitive.py +0 -0
  64. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/edsl/printer.py +0 -0
  65. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/edsl/program.py +0 -0
  66. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/edsl/registry.py +0 -0
  67. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/edsl/serde.py +0 -0
  68. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/edsl/tracer.py +0 -0
  69. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/edsl/typing.py +0 -0
  70. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/extend/__init__.py +0 -0
  71. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/extend/arrow/__init__.py +0 -0
  72. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/extend/arrow/compute.py +0 -0
  73. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/extend/arrow/util.py +0 -0
  74. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/extend/arrow/vector.py +0 -0
  75. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/kernels/Makefile +0 -0
  76. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/kernels/__init__.py +0 -0
  77. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/kernels/gf128.cpp +0 -0
  78. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/kernels/ldpc.cpp +0 -0
  79. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/kernels/okvs.cpp +0 -0
  80. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/kernels/okvs_opt.cpp +0 -0
  81. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/kernels/py_kernels.py +0 -0
  82. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/collective.py +0 -0
  83. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/device/__init__.py +0 -0
  84. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/device/api.py +0 -0
  85. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/device/cluster.py +0 -0
  86. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/ml/__init__.py +0 -0
  87. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/ml/sgb.py +0 -0
  88. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/mpc/__init__.py +0 -0
  89. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/mpc/_utils.py +0 -0
  90. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/mpc/analytics/__init__.py +0 -0
  91. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/mpc/analytics/aggregation.py +0 -0
  92. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/mpc/analytics/groupby.md +0 -0
  93. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/mpc/analytics/groupby.py +0 -0
  94. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/mpc/analytics/permutation.py +0 -0
  95. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/mpc/common/constants.py +0 -0
  96. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/mpc/ot/__init__.py +0 -0
  97. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/mpc/ot/base.py +0 -0
  98. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/mpc/ot/extension.py +0 -0
  99. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/mpc/ot/silent.py +0 -0
  100. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/mpc/psi/__init__.py +0 -0
  101. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/mpc/psi/cuckoo.py +0 -0
  102. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/mpc/psi/okvs.py +0 -0
  103. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/mpc/psi/okvs_gct.py +0 -0
  104. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/mpc/psi/oprf.py +0 -0
  105. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/mpc/psi/rr22.py +0 -0
  106. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/mpc/psi/unbalanced.py +0 -0
  107. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/mpc/vole/__init__.py +0 -0
  108. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/mpc/vole/gilboa.py +0 -0
  109. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/mpc/vole/ldpc.py +0 -0
  110. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/libs/mpc/vole/silver.py +0 -0
  111. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/py.typed +0 -0
  112. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/runtime/__init__.py +0 -0
  113. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/runtime/dialect_state.py +0 -0
  114. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/runtime/object_store.py +0 -0
  115. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/runtime/value.py +0 -0
  116. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/tool/__init__.py +0 -0
  117. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/tool/program.py +0 -0
  118. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/utils/__init__.py +0 -0
  119. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/utils/func_utils.py +0 -0
  120. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/mplang/utils/logging.py +0 -0
  121. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/pyproject.toml +0 -0
  122. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/__init__.py +0 -0
  123. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/__init__.py +0 -0
  124. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/simp_driver/__init__.py +0 -0
  125. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/simp_driver/test_http.py +0 -0
  126. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/simp_worker/__init__.py +0 -0
  127. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/simp_worker/test_async_exec.py +0 -0
  128. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/simp_worker/test_base.py +0 -0
  129. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/simp_worker/test_collectives.py +0 -0
  130. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/simp_worker/test_comm_context.py +0 -0
  131. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/simp_worker/test_http.py +0 -0
  132. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/simp_worker/test_http_communicator.py +0 -0
  133. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/simp_worker/test_mem.py +0 -0
  134. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/simp_worker/test_request_isolation.py +0 -0
  135. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/simp_worker/test_shuffle_exec_id_key.py +0 -0
  136. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/test_bfv_impl.py +0 -0
  137. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/test_channel.py +0 -0
  138. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/test_crypto_impl.py +0 -0
  139. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/test_okvs_binding.py +0 -0
  140. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/test_simp_object_store.py +0 -0
  141. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/test_spu_impl.py +0 -0
  142. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/test_table_impl.py +0 -0
  143. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/test_tee_impl.py +0 -0
  144. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/test_tensor_impl.py +0 -0
  145. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/test_util.py +0 -0
  146. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/backends/test_verify_clean.py +0 -0
  147. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/conftest.py +0 -0
  148. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/dialects/__init__.py +0 -0
  149. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/dialects/test_bfv.py +0 -0
  150. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/dialects/test_compile_context.py +0 -0
  151. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/dialects/test_crypto.py +0 -0
  152. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/dialects/test_dtypes.py +0 -0
  153. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/dialects/test_field.py +0 -0
  154. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/dialects/test_func.py +0 -0
  155. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/dialects/test_okvs.py +0 -0
  156. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/dialects/test_okvs_bench.py +0 -0
  157. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/dialects/test_phe.py +0 -0
  158. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/dialects/test_simp.py +0 -0
  159. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/dialects/test_simp_comm.py +0 -0
  160. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/dialects/test_spu.py +0 -0
  161. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/dialects/test_store.py +0 -0
  162. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/dialects/test_table.py +0 -0
  163. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/dialects/test_table_row_dimension.py +0 -0
  164. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/dialects/test_tee.py +0 -0
  165. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/dialects/test_tensor.py +0 -0
  166. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/edsl/__init__.py +0 -0
  167. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/edsl/test_compiled_program_artifact.py +0 -0
  168. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/edsl/test_context.py +0 -0
  169. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/edsl/test_graph.py +0 -0
  170. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/edsl/test_primitive.py +0 -0
  171. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/edsl/test_primitive_multi_output.py +0 -0
  172. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/edsl/test_printer.py +0 -0
  173. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/edsl/test_serde.py +0 -0
  174. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/edsl/test_tracer.py +0 -0
  175. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/edsl/test_typing.py +0 -0
  176. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/edsl/test_typing_graph_serde.py +0 -0
  177. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/extend/__init__.py +0 -0
  178. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/extend/test_arrow.py +0 -0
  179. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/device/__init__.py +0 -0
  180. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/device/conftest.py +0 -0
  181. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/device/test_device_api_errors.py +0 -0
  182. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/device/test_device_dialects.py +0 -0
  183. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/device/test_device_layouts.py +0 -0
  184. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/device/test_device_tee.py +0 -0
  185. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/ml/__init__.py +0 -0
  186. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/ml/test_sgb.py +0 -0
  187. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/ml/test_sgb_bench.py +0 -0
  188. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/__init__.py +0 -0
  189. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/analytics/__init__.py +0 -0
  190. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/analytics/test_aggregation.py +0 -0
  191. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/analytics/test_groupby.py +0 -0
  192. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/analytics/test_permutation.py +0 -0
  193. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/ot/__init__.py +0 -0
  194. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/ot/test_ot.py +0 -0
  195. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/ot/test_ot_extension.py +0 -0
  196. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/ot/test_silent_ot.py +0 -0
  197. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/psi/__init__.py +0 -0
  198. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/psi/test_okvs_gct.py +0 -0
  199. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/psi/test_oprf.py +0 -0
  200. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/psi/test_psi.py +0 -0
  201. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/psi/test_psi_bench.py +0 -0
  202. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/psi/test_rr22.py +0 -0
  203. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/psi/verify_psi_okvs_logic.py +0 -0
  204. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/test_field_gf128.py +0 -0
  205. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/test_utils.py +0 -0
  206. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/vole/__init__.py +0 -0
  207. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/vole/test_gilboa_manual.py +0 -0
  208. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/vole/test_ldpc.py +0 -0
  209. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/vole/test_silver_vole.py +0 -0
  210. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/vole/test_vole.py +0 -0
  211. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/vole/test_vole_bench.py +0 -0
  212. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/mpc/vole/verify_vole_logic.py +0 -0
  213. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/test_collective.py +0 -0
  214. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/libs/test_simple_guide.py +0 -0
  215. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/runtime/test_interpreter_async.py +0 -0
  216. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/runtime/test_object_store.py +0 -0
  217. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/runtime/test_object_store_fs.py +0 -0
  218. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/runtime/test_value_gc.py +0 -0
  219. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/test_fetch_semantics.py +0 -0
  220. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/test_pytree_io.py +0 -0
  221. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/utils/__init__.py +0 -0
  222. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/utils/tensor_patch.py +0 -0
  223. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/utils/test_func_utils.py +0 -0
  224. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tests/utils/test_logging.py +0 -0
  225. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tutorials/00_device_basics.py +0 -0
  226. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tutorials/01_function_decorator.py +0 -0
  227. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tutorials/02_simulation_and_driver.py +0 -0
  228. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tutorials/03_run_jax.py +0 -0
  229. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tutorials/04_ir_dump_and_analysis.py +0 -0
  230. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tutorials/05_run_sql.py +0 -0
  231. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tutorials/06_pipeline.py +0 -0
  232. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tutorials/07_stax_nn.py +0 -0
  233. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tutorials/08_logging.py +0 -0
  234. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tutorials/MIGRATION.md +0 -0
  235. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tutorials/README.md +0 -0
  236. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tutorials/__init__.py +0 -0
  237. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tutorials/data/alice.csv +0 -0
  238. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tutorials/data/bob.csv +0 -0
  239. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tutorials/data/prepare_vertical_iris.py +0 -0
  240. {mplang_nightly-0.1.dev331 → mplang_nightly-0.1.dev333}/tutorials/run.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mplang-nightly
3
- Version: 0.1.dev331
3
+ Version: 0.1.dev333
4
4
  Summary: Multi-Party Programming Language
5
5
  Author-email: SecretFlow Team <secretflow-contact@service.alipay.com>
6
6
  License: Apache License
@@ -45,8 +45,8 @@ def _wrap_op_as_graph(op: Operation) -> Graph:
45
45
  # Create graph inputs
46
46
  graph_inputs = [g.add_input(f"in_{i}", any_type) for i in range(len(op.inputs))]
47
47
 
48
- # Determine output types
49
- output_types = [out.type for out in op.outputs] if op.outputs else [any_type]
48
+ # Determine output types (faithfully mirror the original op)
49
+ output_types = [out.type for out in op.outputs]
50
50
 
51
51
  # Add the operation (this handles outputs and value registration)
52
52
  g.add_op(
@@ -77,7 +77,7 @@ def _collect_to_hostvars(results: list[Any], num_outputs: int, world_size: int)
77
77
  Single DriverVar if num_outputs == 1, else list of DriverVars
78
78
  """
79
79
  if num_outputs == 0:
80
- return None
80
+ return []
81
81
 
82
82
  # Transpose [worker][output] -> [output][worker]
83
83
  # results[worker_idx] is a list of URIs for that worker's outputs
@@ -117,7 +117,7 @@ def _generic_simp_dispatch(interpreter: Any, op: Operation, *args: Any) -> Any:
117
117
  results = driver.collect(futures)
118
118
 
119
119
  # 4. Assemble into DriverVar(s)
120
- num_outputs = len(op.outputs) if op.outputs else 1
120
+ num_outputs = len(op.outputs)
121
121
  return _collect_to_hostvars(results, num_outputs, world_size)
122
122
 
123
123
 
@@ -53,13 +53,19 @@ def _pcall_static_worker_impl(
53
53
 
54
54
  try:
55
55
  result = interpreter.evaluate_graph(fn_graph, list(args))
56
- # Return single value for single output (interpreter expects this)
57
- return result[0] if len(op.outputs) == 1 else result
56
+ # Use inner graph's actual output count for safety
57
+ n_out = len(fn_graph.outputs)
58
+ if n_out == 0:
59
+ return []
60
+ return result[0] if n_out == 1 else result
58
61
  finally:
59
62
  worker.current_parties = prev_parties
60
63
  else:
61
64
  # No data for this rank
62
- return None if len(op.outputs) == 1 else [None] * len(op.outputs)
65
+ n_out = len(op.outputs)
66
+ if n_out == 0:
67
+ return []
68
+ return None if n_out == 1 else [None] * n_out
63
69
 
64
70
 
65
71
  def _pcall_dynamic_worker_impl(
@@ -68,7 +74,10 @@ def _pcall_dynamic_worker_impl(
68
74
  """Worker implementation of pcall_dynamic."""
69
75
  fn_graph = op.regions[0]
70
76
  result = interpreter.evaluate_graph(fn_graph, list(args))
71
- return result[0] if len(op.outputs) == 1 else result
77
+ n_out = len(fn_graph.outputs)
78
+ if n_out == 0:
79
+ return []
80
+ return result[0] if n_out == 1 else result
72
81
 
73
82
 
74
83
  def _shuffle_static_worker_impl(
@@ -51,10 +51,11 @@ class SPUState(DialectState):
51
51
  def __init__(self, infra: WorkerInfra | None = None) -> None:
52
52
  # Optional shared infrastructure (for per-request isolation via link.spawn)
53
53
  self._infra = infra
54
- # Key: (local_rank, world_size, protocol, field, link_mode)
54
+ # Key: (local_rank, world_size, protocol, field, link_mode, spu_endpoints)
55
55
  # Value: (Runtime, Io)
56
56
  self._runtimes: dict[
57
- tuple[int, int, str, str, str], tuple[spu_api.Runtime, spu_api.Io]
57
+ tuple[int, int, str, str, str, tuple[str, ...] | None],
58
+ tuple[spu_api.Runtime, spu_api.Io],
58
59
  ] = {}
59
60
  # Local template link cache (used when no WorkerInfra is provided)
60
61
  self._template_links: dict[tuple, libspu.link.Context] = {}
@@ -75,14 +76,14 @@ class SPUState(DialectState):
75
76
  """
76
77
 
77
78
  def _create() -> libspu.link.Context:
78
- if communicator is not None:
79
+ if spu_endpoints:
80
+ return self._create_brpc_link(local_rank, spu_endpoints)
81
+ elif communicator is not None:
79
82
  if parties is None:
80
83
  raise ValueError("parties required when using communicator")
81
84
  return self._create_channels_link(
82
85
  local_rank, spu_world_size, communicator, parties
83
86
  )
84
- elif spu_endpoints:
85
- return self._create_brpc_link(local_rank, spu_endpoints)
86
87
  else:
87
88
  return self._create_mem_link(local_rank, spu_world_size)
88
89
 
@@ -104,13 +105,18 @@ class SPUState(DialectState):
104
105
  ) -> tuple[spu_api.Runtime, spu_api.Io]:
105
106
  """Get or create SPU Runtime and Io for the given configuration.
106
107
 
108
+ Link mode priority: spu_endpoints (BRPC) > communicator (Channels) > mem.
109
+ When ``spu_endpoints`` is provided it always takes precedence, even if
110
+ a ``communicator`` is also supplied.
111
+
107
112
  Args:
108
113
  local_rank: The local rank within the SPU device (0-indexed).
109
114
  spu_world_size: The number of parties in the SPU device.
110
115
  config: SPU configuration including protocol settings.
111
- spu_endpoints: Optional list of BRPC endpoints. If None, use mem link.
116
+ spu_endpoints: Optional list of BRPC endpoints. Takes highest
117
+ priority when provided.
112
118
  communicator: Optional v2 communicator (ThreadCommunicator/HttpCommunicator).
113
- If provided, use Channels mode to reuse existing communication.
119
+ Used only when ``spu_endpoints`` is not provided.
114
120
  parties: Optional list of global ranks for SPU parties.
115
121
  Required when communicator is provided.
116
122
 
@@ -120,10 +126,10 @@ class SPUState(DialectState):
120
126
  from mplang.backends.spu_impl import to_runtime_config
121
127
 
122
128
  # Determine link mode
123
- if communicator is not None:
124
- link_mode = "channels"
125
- elif spu_endpoints:
129
+ if spu_endpoints:
126
130
  link_mode = "brpc"
131
+ elif communicator is not None:
132
+ link_mode = "channels"
127
133
  else:
128
134
  link_mode = "mem"
129
135
 
@@ -133,6 +139,7 @@ class SPUState(DialectState):
133
139
  config.protocol,
134
140
  config.field,
135
141
  link_mode,
142
+ tuple(spu_endpoints) if spu_endpoints else None,
136
143
  )
137
144
 
138
145
  if cache_key in self._runtimes:
@@ -1082,7 +1082,9 @@ class Interpreter(AbstractInterpreter):
1082
1082
  return
1083
1083
 
1084
1084
  # Store results
1085
- if len(op.outputs) == 1:
1085
+ if len(op.outputs) == 0:
1086
+ pass # Void operation
1087
+ elif len(op.outputs) == 1:
1086
1088
  env[op.outputs[0]] = result
1087
1089
  else:
1088
1090
  for out_val, res in zip(op.outputs, result, strict=True):
@@ -194,6 +194,50 @@ def test_nested_pcall():
194
194
  assert values == [20, 40]
195
195
 
196
196
 
197
+ def test_pcall_static_zero_output():
198
+ """Regression: pcall_static body returning None must not crash (IndexError).
199
+
200
+ When a function returns None, its traced graph has 0 outputs.
201
+ The driver/worker dispatch must handle this correctly.
202
+ """
203
+ sim = simp.make_simulator(world_size=2)
204
+ with sim:
205
+
206
+ def side_effect_only(x):
207
+ # Produces a traced op but returns nothing
208
+ run_jax(jnp.abs, x)
209
+ return None
210
+
211
+ x0 = simp.constant((0,), 1)
212
+ x1 = simp.constant((1,), 2)
213
+ x_obj = simp.converge(x0, x1)
214
+
215
+ # Should not raise IndexError
216
+ result = pcall_static((0, 1), side_effect_only, x_obj)
217
+ assert result is None
218
+
219
+
220
+ def test_pcall_static_zero_output_compile_evaluate():
221
+ """Regression: compile+evaluate path with zero-output pcall_static."""
222
+ sim = simp.make_simulator(world_size=2)
223
+ with sim:
224
+
225
+ def workflow():
226
+ x0 = simp.constant((0,), 42)
227
+ x1 = simp.constant((1,), 99)
228
+ x_obj = simp.converge(x0, x1)
229
+
230
+ def body(x):
231
+ run_jax(jnp.abs, x)
232
+ return None
233
+
234
+ pcall_static((0, 1), body, x_obj)
235
+
236
+ traced = mp.compile(workflow)
237
+ result = mp.evaluate(traced)
238
+ assert result is None
239
+
240
+
197
241
  def test_mp_function_decorator():
198
242
  """Test @mp.function decorator which implies pcall_static(ALL, ...)."""
199
243
  sim = simp.make_simulator(world_size=3)