mplang-nightly 0.1.dev332__tar.gz → 0.1.dev334__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.dev332 → mplang_nightly-0.1.dev334}/PKG-INFO +1 -1
  2. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/simp_driver/ops.py +4 -4
  3. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/simp_worker/ops.py +13 -4
  4. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/spu_state.py +99 -5
  5. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/runtime/interpreter.py +3 -1
  6. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/test_simp_integration.py +44 -0
  7. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/.gitignore +0 -0
  8. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/LICENSE +0 -0
  9. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/README.md +0 -0
  10. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/examples/.gitkeep +0 -0
  11. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/hatch_build.py +0 -0
  12. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/__init__.py +0 -0
  13. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/__init__.py +0 -0
  14. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/bfv_impl.py +0 -0
  15. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/channel.py +0 -0
  16. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/crypto_impl.py +0 -0
  17. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/field_impl.py +0 -0
  18. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/func_impl.py +0 -0
  19. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/phe_impl.py +0 -0
  20. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/simp_design.md +0 -0
  21. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/simp_driver/__init__.py +0 -0
  22. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/simp_driver/http.py +0 -0
  23. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/simp_driver/mem.py +0 -0
  24. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/simp_driver/state.py +0 -0
  25. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/simp_driver/values.py +0 -0
  26. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/simp_worker/__init__.py +0 -0
  27. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/simp_worker/base.py +0 -0
  28. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/simp_worker/collective_algorithms.py +0 -0
  29. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/simp_worker/collectives.py +0 -0
  30. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/simp_worker/comm_context.py +0 -0
  31. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/simp_worker/http.py +0 -0
  32. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/simp_worker/infra.py +0 -0
  33. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/simp_worker/mem.py +0 -0
  34. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/simp_worker/request.py +0 -0
  35. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/simp_worker/state.py +0 -0
  36. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/spu_impl.py +0 -0
  37. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/store_impl.py +0 -0
  38. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/table_impl.py +0 -0
  39. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/tee_impl.py +0 -0
  40. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/tensor_impl.py +0 -0
  41. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/backends/util.py +0 -0
  42. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/cli.py +0 -0
  43. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/cli_guide.md +0 -0
  44. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/dialects/__init__.py +0 -0
  45. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/dialects/_jax_utils.py +0 -0
  46. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/dialects/bfv.py +0 -0
  47. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/dialects/crypto.py +0 -0
  48. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/dialects/dtypes.py +0 -0
  49. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/dialects/field.py +0 -0
  50. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/dialects/func.py +0 -0
  51. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/dialects/phe.py +0 -0
  52. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/dialects/simp.py +0 -0
  53. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/dialects/spu.py +0 -0
  54. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/dialects/store.py +0 -0
  55. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/dialects/table.py +0 -0
  56. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/dialects/tee.py +0 -0
  57. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/dialects/tensor.py +0 -0
  58. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/edsl/README.md +0 -0
  59. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/edsl/__init__.py +0 -0
  60. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/edsl/context.py +0 -0
  61. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/edsl/graph.py +0 -0
  62. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/edsl/object.py +0 -0
  63. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/edsl/primitive.py +0 -0
  64. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/edsl/printer.py +0 -0
  65. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/edsl/program.py +0 -0
  66. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/edsl/registry.py +0 -0
  67. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/edsl/serde.py +0 -0
  68. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/edsl/tracer.py +0 -0
  69. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/edsl/typing.py +0 -0
  70. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/extend/__init__.py +0 -0
  71. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/extend/arrow/__init__.py +0 -0
  72. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/extend/arrow/compute.py +0 -0
  73. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/extend/arrow/util.py +0 -0
  74. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/extend/arrow/vector.py +0 -0
  75. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/kernels/Makefile +0 -0
  76. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/kernels/__init__.py +0 -0
  77. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/kernels/gf128.cpp +0 -0
  78. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/kernels/ldpc.cpp +0 -0
  79. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/kernels/okvs.cpp +0 -0
  80. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/kernels/okvs_opt.cpp +0 -0
  81. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/kernels/py_kernels.py +0 -0
  82. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/collective.py +0 -0
  83. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/device/__init__.py +0 -0
  84. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/device/api.py +0 -0
  85. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/device/cluster.py +0 -0
  86. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/ml/__init__.py +0 -0
  87. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/ml/sgb.py +0 -0
  88. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/mpc/__init__.py +0 -0
  89. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/mpc/_utils.py +0 -0
  90. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/mpc/analytics/__init__.py +0 -0
  91. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/mpc/analytics/aggregation.py +0 -0
  92. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/mpc/analytics/groupby.md +0 -0
  93. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/mpc/analytics/groupby.py +0 -0
  94. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/mpc/analytics/permutation.py +0 -0
  95. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/mpc/common/constants.py +0 -0
  96. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/mpc/ot/__init__.py +0 -0
  97. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/mpc/ot/base.py +0 -0
  98. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/mpc/ot/extension.py +0 -0
  99. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/mpc/ot/silent.py +0 -0
  100. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/mpc/psi/__init__.py +0 -0
  101. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/mpc/psi/cuckoo.py +0 -0
  102. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/mpc/psi/okvs.py +0 -0
  103. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/mpc/psi/okvs_gct.py +0 -0
  104. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/mpc/psi/oprf.py +0 -0
  105. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/mpc/psi/rr22.py +0 -0
  106. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/mpc/psi/unbalanced.py +0 -0
  107. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/mpc/vole/__init__.py +0 -0
  108. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/mpc/vole/gilboa.py +0 -0
  109. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/mpc/vole/ldpc.py +0 -0
  110. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/libs/mpc/vole/silver.py +0 -0
  111. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/py.typed +0 -0
  112. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/runtime/__init__.py +0 -0
  113. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/runtime/dialect_state.py +0 -0
  114. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/runtime/object_store.py +0 -0
  115. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/runtime/value.py +0 -0
  116. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/tool/__init__.py +0 -0
  117. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/tool/program.py +0 -0
  118. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/utils/__init__.py +0 -0
  119. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/utils/func_utils.py +0 -0
  120. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/mplang/utils/logging.py +0 -0
  121. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/pyproject.toml +0 -0
  122. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/__init__.py +0 -0
  123. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/__init__.py +0 -0
  124. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/simp_driver/__init__.py +0 -0
  125. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/simp_driver/test_http.py +0 -0
  126. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/simp_worker/__init__.py +0 -0
  127. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/simp_worker/test_async_exec.py +0 -0
  128. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/simp_worker/test_base.py +0 -0
  129. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/simp_worker/test_collectives.py +0 -0
  130. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/simp_worker/test_comm_context.py +0 -0
  131. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/simp_worker/test_http.py +0 -0
  132. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/simp_worker/test_http_communicator.py +0 -0
  133. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/simp_worker/test_mem.py +0 -0
  134. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/simp_worker/test_request_isolation.py +0 -0
  135. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/simp_worker/test_shuffle_exec_id_key.py +0 -0
  136. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/test_bfv_impl.py +0 -0
  137. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/test_channel.py +0 -0
  138. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/test_crypto_impl.py +0 -0
  139. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/test_okvs_binding.py +0 -0
  140. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/test_simp_object_store.py +0 -0
  141. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/test_spu_impl.py +0 -0
  142. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/test_table_impl.py +0 -0
  143. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/test_tee_impl.py +0 -0
  144. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/test_tensor_impl.py +0 -0
  145. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/test_util.py +0 -0
  146. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/backends/test_verify_clean.py +0 -0
  147. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/conftest.py +0 -0
  148. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/dialects/__init__.py +0 -0
  149. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/dialects/test_bfv.py +0 -0
  150. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/dialects/test_compile_context.py +0 -0
  151. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/dialects/test_crypto.py +0 -0
  152. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/dialects/test_dtypes.py +0 -0
  153. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/dialects/test_field.py +0 -0
  154. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/dialects/test_func.py +0 -0
  155. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/dialects/test_okvs.py +0 -0
  156. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/dialects/test_okvs_bench.py +0 -0
  157. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/dialects/test_phe.py +0 -0
  158. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/dialects/test_simp.py +0 -0
  159. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/dialects/test_simp_comm.py +0 -0
  160. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/dialects/test_spu.py +0 -0
  161. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/dialects/test_store.py +0 -0
  162. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/dialects/test_table.py +0 -0
  163. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/dialects/test_table_row_dimension.py +0 -0
  164. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/dialects/test_tee.py +0 -0
  165. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/dialects/test_tensor.py +0 -0
  166. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/edsl/__init__.py +0 -0
  167. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/edsl/test_compiled_program_artifact.py +0 -0
  168. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/edsl/test_context.py +0 -0
  169. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/edsl/test_graph.py +0 -0
  170. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/edsl/test_primitive.py +0 -0
  171. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/edsl/test_primitive_multi_output.py +0 -0
  172. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/edsl/test_printer.py +0 -0
  173. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/edsl/test_serde.py +0 -0
  174. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/edsl/test_tracer.py +0 -0
  175. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/edsl/test_typing.py +0 -0
  176. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/edsl/test_typing_graph_serde.py +0 -0
  177. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/extend/__init__.py +0 -0
  178. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/extend/test_arrow.py +0 -0
  179. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/device/__init__.py +0 -0
  180. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/device/conftest.py +0 -0
  181. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/device/test_device_api_errors.py +0 -0
  182. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/device/test_device_dialects.py +0 -0
  183. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/device/test_device_layouts.py +0 -0
  184. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/device/test_device_tee.py +0 -0
  185. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/ml/__init__.py +0 -0
  186. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/ml/test_sgb.py +0 -0
  187. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/ml/test_sgb_bench.py +0 -0
  188. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/__init__.py +0 -0
  189. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/analytics/__init__.py +0 -0
  190. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/analytics/test_aggregation.py +0 -0
  191. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/analytics/test_groupby.py +0 -0
  192. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/analytics/test_permutation.py +0 -0
  193. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/ot/__init__.py +0 -0
  194. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/ot/test_ot.py +0 -0
  195. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/ot/test_ot_extension.py +0 -0
  196. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/ot/test_silent_ot.py +0 -0
  197. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/psi/__init__.py +0 -0
  198. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/psi/test_okvs_gct.py +0 -0
  199. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/psi/test_oprf.py +0 -0
  200. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/psi/test_psi.py +0 -0
  201. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/psi/test_psi_bench.py +0 -0
  202. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/psi/test_rr22.py +0 -0
  203. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/psi/verify_psi_okvs_logic.py +0 -0
  204. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/test_field_gf128.py +0 -0
  205. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/test_utils.py +0 -0
  206. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/vole/__init__.py +0 -0
  207. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/vole/test_gilboa_manual.py +0 -0
  208. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/vole/test_ldpc.py +0 -0
  209. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/vole/test_silver_vole.py +0 -0
  210. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/vole/test_vole.py +0 -0
  211. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/vole/test_vole_bench.py +0 -0
  212. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/mpc/vole/verify_vole_logic.py +0 -0
  213. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/test_collective.py +0 -0
  214. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/libs/test_simple_guide.py +0 -0
  215. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/runtime/test_interpreter_async.py +0 -0
  216. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/runtime/test_object_store.py +0 -0
  217. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/runtime/test_object_store_fs.py +0 -0
  218. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/runtime/test_value_gc.py +0 -0
  219. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/test_fetch_semantics.py +0 -0
  220. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/test_pytree_io.py +0 -0
  221. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/utils/__init__.py +0 -0
  222. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/utils/tensor_patch.py +0 -0
  223. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/utils/test_func_utils.py +0 -0
  224. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tests/utils/test_logging.py +0 -0
  225. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tutorials/00_device_basics.py +0 -0
  226. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tutorials/01_function_decorator.py +0 -0
  227. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tutorials/02_simulation_and_driver.py +0 -0
  228. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tutorials/03_run_jax.py +0 -0
  229. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tutorials/04_ir_dump_and_analysis.py +0 -0
  230. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tutorials/05_run_sql.py +0 -0
  231. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tutorials/06_pipeline.py +0 -0
  232. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tutorials/07_stax_nn.py +0 -0
  233. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tutorials/08_logging.py +0 -0
  234. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tutorials/MIGRATION.md +0 -0
  235. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tutorials/README.md +0 -0
  236. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tutorials/__init__.py +0 -0
  237. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tutorials/data/alice.csv +0 -0
  238. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tutorials/data/bob.csv +0 -0
  239. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tutorials/data/prepare_vertical_iris.py +0 -0
  240. {mplang_nightly-0.1.dev332 → mplang_nightly-0.1.dev334}/tutorials/run.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mplang-nightly
3
- Version: 0.1.dev332
3
+ Version: 0.1.dev334
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(
@@ -20,6 +20,9 @@ multiple executions while binding to the Interpreter's lifecycle.
20
20
 
21
21
  from __future__ import annotations
22
22
 
23
+ import logging
24
+ import os
25
+ from dataclasses import dataclass, field
23
26
  from typing import TYPE_CHECKING, Any
24
27
 
25
28
  import spu.api as spu_api
@@ -31,6 +34,64 @@ if TYPE_CHECKING:
31
34
  from mplang.backends.simp_worker.infra import WorkerInfra
32
35
  from mplang.dialects import spu
33
36
 
37
+ logger = logging.getLogger(__name__)
38
+
39
+
40
+ def _opt_int_env(name: str) -> int | None:
41
+ """Read an optional int env var; return None when unset/empty."""
42
+ val = os.getenv(name)
43
+ return int(val) if val else None
44
+
45
+
46
+ @dataclass(frozen=True)
47
+ class BrpcLinkConfig:
48
+ """Tunables for the brpc-backed SPU link.
49
+
50
+ Defaults come from environment variables so deployments can switch
51
+ protocol/timeouts without code changes; explicit constructor args
52
+ still win for tests and programmatic overrides.
53
+
54
+ Set ``protocol`` to ``"http"`` (HTTP/1.1) or ``"h2"`` (HTTP/2) when
55
+ traffic must traverse an L7 gateway that does not understand the
56
+ default ``baidu_std`` binary protocol. HTTP/1.1 requires
57
+ ``connection_type="pooled"`` to avoid head-of-line blocking.
58
+
59
+ ``http_timeout_ms`` defaults to ``None`` (use brpc's own default) —
60
+ long-running MPC jobs traversing a gateway with idle timeout should
61
+ set this explicitly to cover the longest single RPC.
62
+
63
+ Frozen so instances are hashable and safe to embed in cache keys.
64
+ """
65
+
66
+ protocol: str = field(
67
+ default_factory=lambda: os.getenv("MPLANG_BRPC_PROTOCOL") or "http"
68
+ )
69
+ connection_type: str = field(
70
+ default_factory=lambda: os.getenv("MPLANG_BRPC_CONN_TYPE") or "pooled"
71
+ )
72
+ recv_timeout_ms: int = field(
73
+ default_factory=lambda: int(os.getenv("MPLANG_BRPC_RECV_TIMEOUT_MS") or 100000)
74
+ )
75
+ http_max_payload_size: int = field(
76
+ default_factory=lambda: int(
77
+ os.getenv("MPLANG_BRPC_HTTP_MAX_PAYLOAD") or 32 * 1024 * 1024
78
+ )
79
+ )
80
+ # Per-RPC HTTP timeout. None = inherit brpc default. Set when going
81
+ # through a gateway with its own idle/request timeout.
82
+ http_timeout_ms: int | None = field(
83
+ default_factory=lambda: _opt_int_env("MPLANG_BRPC_HTTP_TIMEOUT_MS")
84
+ )
85
+ # Initial connect retry — tolerates peers that come up later.
86
+ connect_retry_times: int = field(
87
+ default_factory=lambda: int(os.getenv("MPLANG_BRPC_CONNECT_RETRY_TIMES") or 60)
88
+ )
89
+ connect_retry_interval_ms: int = field(
90
+ default_factory=lambda: int(
91
+ os.getenv("MPLANG_BRPC_CONNECT_RETRY_INTERVAL_MS") or 1000
92
+ )
93
+ )
94
+
34
95
 
35
96
  class SPUState(DialectState):
36
97
  """SPU Runtime cache as dialect state.
@@ -48,13 +109,22 @@ class SPUState(DialectState):
48
109
 
49
110
  dialect_name: str = "spu"
50
111
 
51
- def __init__(self, infra: WorkerInfra | None = None) -> None:
112
+ def __init__(
113
+ self,
114
+ infra: WorkerInfra | None = None,
115
+ brpc_config: BrpcLinkConfig | None = None,
116
+ ) -> None:
52
117
  # Optional shared infrastructure (for per-request isolation via link.spawn)
53
118
  self._infra = infra
54
- # Key: (local_rank, world_size, protocol, field, link_mode, spu_endpoints)
119
+ self._brpc_config = brpc_config or BrpcLinkConfig()
120
+ # Key: (local_rank, world_size, protocol, field, link_mode, spu_endpoints, brpc_config)
121
+ # ``brpc_config`` participates only when link_mode == "brpc" (else None) so that
122
+ # callers passing custom configs don't silently reuse the first config's link.
55
123
  # Value: (Runtime, Io)
56
124
  self._runtimes: dict[
57
- tuple[int, int, str, str, str, tuple[str, ...] | None],
125
+ tuple[
126
+ int, int, str, str, str, tuple[str, ...] | None, BrpcLinkConfig | None
127
+ ],
58
128
  tuple[spu_api.Runtime, spu_api.Io],
59
129
  ] = {}
60
130
  # Local template link cache (used when no WorkerInfra is provided)
@@ -140,6 +210,7 @@ class SPUState(DialectState):
140
210
  config.field,
141
211
  link_mode,
142
212
  tuple(spu_endpoints) if spu_endpoints else None,
213
+ self._brpc_config if link_mode == "brpc" else None,
143
214
  )
144
215
 
145
216
  if cache_key in self._runtimes:
@@ -222,13 +293,36 @@ class SPUState(DialectState):
222
293
  self, local_rank: int, spu_endpoints: list[str]
223
294
  ) -> libspu.link.Context:
224
295
  """Create BRPC link for distributed execution."""
296
+ cfg = self._brpc_config
225
297
  desc = libspu.link.Desc() # type: ignore
226
- desc.recv_timeout_ms = 100 * 1000 # 100 seconds
227
- desc.http_max_payload_size = 32 * 1024 * 1024 # 32MB
298
+ desc.recv_timeout_ms = cfg.recv_timeout_ms
299
+ desc.http_max_payload_size = cfg.http_max_payload_size
300
+ desc.brpc_channel_protocol = cfg.protocol
301
+ desc.brpc_channel_connection_type = cfg.connection_type
302
+ desc.connect_retry_times = cfg.connect_retry_times
303
+ desc.connect_retry_interval_ms = cfg.connect_retry_interval_ms
304
+ if cfg.http_timeout_ms is not None:
305
+ desc.http_timeout_ms = cfg.http_timeout_ms
228
306
 
229
307
  for i, endpoint in enumerate(spu_endpoints):
230
308
  desc.add_party(f"P{i}", endpoint)
231
309
 
310
+ logger.info(
311
+ "Creating SPU brpc link: rank=%d, endpoints=%s, protocol=%s, "
312
+ "connection_type=%s, recv_timeout_ms=%d, http_timeout_ms=%s, "
313
+ "http_max_payload_size=%d, connect_retry_times=%d, "
314
+ "connect_retry_interval_ms=%d",
315
+ local_rank,
316
+ spu_endpoints,
317
+ cfg.protocol,
318
+ cfg.connection_type,
319
+ cfg.recv_timeout_ms,
320
+ cfg.http_timeout_ms,
321
+ cfg.http_max_payload_size,
322
+ cfg.connect_retry_times,
323
+ cfg.connect_retry_interval_ms,
324
+ )
325
+
232
326
  return libspu.link.create_brpc(desc, local_rank)
233
327
 
234
328
  def shutdown(self) -> None:
@@ -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)