mplang-nightly 0.1.dev174__tar.gz → 0.1.dev176__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 (171) hide show
  1. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/PKG-INFO +5 -5
  2. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/README.md +4 -4
  3. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/runtime/cli.py +32 -17
  4. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/runtime/server.py +5 -0
  5. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/runtime/session.py +3 -4
  6. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/runtime/test_cli.py +3 -3
  7. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/.gitignore +0 -0
  8. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/LICENSE +0 -0
  9. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/examples/conf/3pc.yaml +0 -0
  10. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/examples/stax_nn/README.md +0 -0
  11. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/examples/stax_nn/models.py +0 -0
  12. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/examples/stax_nn/stax_nn.py +0 -0
  13. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/examples/xgboost/hist_jax.py +0 -0
  14. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/examples/xgboost/hist_jax_test.py +0 -0
  15. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/examples/xgboost/naive_np.py +0 -0
  16. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/examples/xgboost/readme.md +0 -0
  17. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/examples/xgboost/sgb.py +0 -0
  18. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/examples/xgboost/sgb_test.py +0 -0
  19. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/hatch_build.py +0 -0
  20. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/__init__.py +0 -0
  21. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/analysis/__init__.py +0 -0
  22. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/analysis/diagram.py +0 -0
  23. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/core/__init__.py +0 -0
  24. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/core/cluster.py +0 -0
  25. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/core/comm.py +0 -0
  26. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/core/context_mgr.py +0 -0
  27. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/core/dtype.py +0 -0
  28. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/core/expr/__init__.py +0 -0
  29. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/core/expr/ast.py +0 -0
  30. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/core/expr/evaluator.py +0 -0
  31. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/core/expr/printer.py +0 -0
  32. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/core/expr/transformer.py +0 -0
  33. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/core/expr/utils.py +0 -0
  34. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/core/expr/visitor.py +0 -0
  35. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/core/expr/walk.py +0 -0
  36. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/core/interp.py +0 -0
  37. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/core/mask.py +0 -0
  38. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/core/mpir.py +0 -0
  39. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/core/mpobject.py +0 -0
  40. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/core/mptype.py +0 -0
  41. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/core/pfunc.py +0 -0
  42. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/core/primitive.py +0 -0
  43. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/core/table.py +0 -0
  44. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/core/tensor.py +0 -0
  45. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/core/tracer.py +0 -0
  46. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/device.py +0 -0
  47. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/host.py +0 -0
  48. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/kernels/__init__.py +0 -0
  49. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/kernels/base.py +0 -0
  50. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/kernels/basic.py +0 -0
  51. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/kernels/context.py +0 -0
  52. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/kernels/crypto.py +0 -0
  53. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/kernels/mock_tee.py +0 -0
  54. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/kernels/phe.py +0 -0
  55. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/kernels/spu.py +0 -0
  56. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/kernels/sql_duckdb.py +0 -0
  57. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/kernels/stablehlo.py +0 -0
  58. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/kernels/value.py +0 -0
  59. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/ops/__init__.py +0 -0
  60. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/ops/base.py +0 -0
  61. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/ops/basic.py +0 -0
  62. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/ops/crypto.py +0 -0
  63. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/ops/ibis_cc.py +0 -0
  64. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/ops/jax_cc.py +0 -0
  65. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/ops/phe.py +0 -0
  66. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/ops/spu.py +0 -0
  67. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/ops/sql_cc.py +0 -0
  68. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/ops/tee.py +0 -0
  69. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/protos/v1alpha1/mpir_pb2.py +0 -0
  70. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/protos/v1alpha1/mpir_pb2.pyi +0 -0
  71. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/protos/v1alpha1/value_pb2.py +0 -0
  72. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/protos/v1alpha1/value_pb2.pyi +0 -0
  73. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/runtime/__init__.py +0 -0
  74. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/runtime/client.py +0 -0
  75. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/runtime/communicator.py +0 -0
  76. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/runtime/data_providers.py +0 -0
  77. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/runtime/driver.py +0 -0
  78. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/runtime/exceptions.py +0 -0
  79. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/runtime/http_api.md +0 -0
  80. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/runtime/link_comm.py +0 -0
  81. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/runtime/simulation.py +0 -0
  82. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/simp/__init__.py +0 -0
  83. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/simp/api.py +0 -0
  84. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/simp/mpi.py +0 -0
  85. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/simp/party.py +0 -0
  86. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/simp/random.py +0 -0
  87. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/simp/smpc.py +0 -0
  88. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/utils/__init__.py +0 -0
  89. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/utils/crypto.py +0 -0
  90. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/utils/func_utils.py +0 -0
  91. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/utils/spu_utils.py +0 -0
  92. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/mplang/utils/table_utils.py +0 -0
  93. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/pyproject.toml +0 -0
  94. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/__init__.py +0 -0
  95. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/analysis/test_diagram.py +0 -0
  96. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/conftest.py +0 -0
  97. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/core/__init__.py +0 -0
  98. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/core/expr/__init__.py +0 -0
  99. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/core/expr/conftest.py +0 -0
  100. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/core/expr/test_ast.py +0 -0
  101. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/core/expr/test_printer.py +0 -0
  102. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/core/expr/test_utils.py +0 -0
  103. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/core/expr/test_walk.py +0 -0
  104. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/core/test_cluster.py +0 -0
  105. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/core/test_dtype.py +0 -0
  106. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/core/test_mask.py +0 -0
  107. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/core/test_mpir.py +0 -0
  108. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/core/test_mptype.py +0 -0
  109. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/core/test_primitive.py +0 -0
  110. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/core/test_table.py +0 -0
  111. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/core/test_tensor.py +0 -0
  112. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/core/test_tracer.py +0 -0
  113. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/device/__init__.py +0 -0
  114. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/device/test_device_basic.py +0 -0
  115. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/integration/README.md +0 -0
  116. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/integration/test_crypto_roundtrip.py +0 -0
  117. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/integration/test_http_e2e.py +0 -0
  118. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/integration/test_symbols_roundtrip.py +0 -0
  119. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/integration/test_tee_workflow.py +0 -0
  120. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/integration/test_tutorials.py +0 -0
  121. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/integration/test_unused_param_integration.py +0 -0
  122. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/kernels/test_basic.py +0 -0
  123. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/kernels/test_debug_print.py +0 -0
  124. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/kernels/test_kernel_binding.py +0 -0
  125. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/kernels/test_phe.py +0 -0
  126. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/kernels/test_spu.py +0 -0
  127. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/kernels/test_sql_duckdb.py +0 -0
  128. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/kernels/test_stablehlo.py +0 -0
  129. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/kernels/test_value.py +0 -0
  130. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/kernels/test_value_serde.py +0 -0
  131. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/ops/__init__.py +0 -0
  132. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/ops/dummy.py +0 -0
  133. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/ops/test_basic_pack.py +0 -0
  134. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/ops/test_feop_base.py +0 -0
  135. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/ops/test_ibis.py +0 -0
  136. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/ops/test_ibis_cc.py +0 -0
  137. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/ops/test_jax_cc.py +0 -0
  138. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/ops/test_phe.py +0 -0
  139. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/ops/test_spu.py +0 -0
  140. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/ops/test_spu_defensive.py +0 -0
  141. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/ops/test_sql.py +0 -0
  142. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/ops/test_table_tensor_conversion.py +0 -0
  143. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/runtime/__init__.py +0 -0
  144. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/runtime/test_communicator.py +0 -0
  145. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/runtime/test_driver.py +0 -0
  146. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/runtime/test_server.py +0 -0
  147. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/runtime/test_simulation.py +0 -0
  148. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/simp/test_mpi.py +0 -0
  149. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/simp/test_random.py +0 -0
  150. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/simp/test_smpc.py +0 -0
  151. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/simp/test_sugar.py +0 -0
  152. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/utils/__init__.py +0 -0
  153. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/utils/server_fixtures.py +0 -0
  154. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/utils/test_func_utils.py +0 -0
  155. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/utils/test_spu_utils.py +0 -0
  156. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tests/utils/test_table_utils.py +0 -0
  157. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tutorials/0_basic.py +0 -0
  158. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tutorials/10_analysis.py +0 -0
  159. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tutorials/1_condition.py +0 -0
  160. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tutorials/2_whileloop.py +0 -0
  161. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tutorials/3_device.py +0 -0
  162. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tutorials/4_simulation.py +0 -0
  163. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tutorials/5_ir_dump.py +0 -0
  164. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tutorials/6_advanced.py +0 -0
  165. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tutorials/7_stdio.py +0 -0
  166. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tutorials/8_phe.py +0 -0
  167. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tutorials/9_tee.py +0 -0
  168. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tutorials/__init__.py +0 -0
  169. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tutorials/pitfalls/late_binding.py +0 -0
  170. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tutorials/pitfalls/rand.py +0 -0
  171. {mplang_nightly-0.1.dev174 → mplang_nightly-0.1.dev176}/tutorials/run.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mplang-nightly
3
- Version: 0.1.dev174
3
+ Version: 0.1.dev176
4
4
  Summary: Multi-Party Programming Language
5
5
  Author-email: SecretFlow Team <secretflow-contact@service.alipay.com>
6
6
  License: Apache License
@@ -271,13 +271,13 @@ def millionaire():
271
271
  return z
272
272
 
273
273
  # Set up a local simulator with 2 parties
274
- sim = mplang.Simulator(2)
274
+ sim = mplang.Simulator.simple(2)
275
275
 
276
276
  # Evaluate the compiled function
277
- result = mplang.eval(sim, millionaire)
277
+ result = mplang.evaluate(sim, millionaire)
278
278
 
279
- # Securely fetch the result
280
- print("Is Alice poorer than Bob?", mplang.fetch(sim, result))
279
+ # Securely fetch the result (reveals SPU value)
280
+ print("Is Alice poorer than Bob?", mpd.fetch(sim, result))
281
281
  ```
282
282
 
283
283
  ## Learn More
@@ -51,13 +51,13 @@ def millionaire():
51
51
  return z
52
52
 
53
53
  # Set up a local simulator with 2 parties
54
- sim = mplang.Simulator(2)
54
+ sim = mplang.Simulator.simple(2)
55
55
 
56
56
  # Evaluate the compiled function
57
- result = mplang.eval(sim, millionaire)
57
+ result = mplang.evaluate(sim, millionaire)
58
58
 
59
- # Securely fetch the result
60
- print("Is Alice poorer than Bob?", mplang.fetch(sim, result))
59
+ # Securely fetch the result (reveals SPU value)
60
+ print("Is Alice poorer than Bob?", mpd.fetch(sim, result))
61
61
  ```
62
62
 
63
63
  ## Learn More
@@ -195,14 +195,14 @@ def status_command(args: argparse.Namespace) -> int:
195
195
  """
196
196
 
197
197
  async def _get_node_status(
198
- node_id: str, endpoint: str, details: bool = False, timeout: int = 60
198
+ node_id: str, endpoint: str, details: int = 0, timeout: int = 60
199
199
  ) -> dict[str, Any]:
200
200
  """Get status information for a single node.
201
201
 
202
202
  Args:
203
203
  node_id: Identifier for the node
204
204
  endpoint: HTTP endpoint of the node
205
- details: Whether to include detailed session information
205
+ details: Verbosity level (0=basic, 1=-v, 2=-vv)
206
206
  timeout: HTTP request timeout in seconds (default: 60)
207
207
  """
208
208
 
@@ -224,21 +224,26 @@ def status_command(args: argparse.Namespace) -> int:
224
224
  sessions = await client.list_sessions()
225
225
  status["sessions"] = sessions
226
226
 
227
- # Get detailed session info if requested
228
- if details:
227
+ # Get detailed session info based on verbosity level
228
+ # details=1 (-v): show session names and basic counts
229
+ # details=2 (-vv): show full computation and symbol lists
230
+ if details >= 1:
229
231
  session_details = []
230
232
  for session_name in sessions:
231
233
  try:
232
234
  # Get computations and symbols for each session
233
235
  computations = await client.list_computations(session_name)
234
236
  symbols = await client.list_symbols(session_name)
235
- session_details.append({
237
+ session_info = {
236
238
  "name": session_name,
237
239
  "computations": len(computations),
238
240
  "symbols": len(symbols),
239
- "computation_list": computations,
240
- "symbol_list": symbols,
241
- })
241
+ }
242
+ # Include full lists only at -vv level
243
+ if details >= 2:
244
+ session_info["computation_list"] = computations
245
+ session_info["symbol_list"] = symbols
246
+ session_details.append(session_info)
242
247
  except Exception as e:
243
248
  session_details.append({
244
249
  "name": session_name,
@@ -255,13 +260,13 @@ def status_command(args: argparse.Namespace) -> int:
255
260
  return status
256
261
 
257
262
  async def _collect_cluster_status(
258
- nodes: dict[str, str], details: bool = False
263
+ nodes: dict[str, str], details: int = 0
259
264
  ) -> list[dict[str, Any] | BaseException]:
260
265
  """Collect status from all nodes concurrently.
261
266
 
262
267
  Args:
263
268
  nodes: Dictionary mapping node IDs to their HTTP endpoints
264
- details: Whether to include detailed session information for each node
269
+ details: Verbosity level (0=basic, 1=-v, 2=-vv)
265
270
 
266
271
  Returns:
267
272
  List of status dictionaries or exceptions for each node
@@ -284,7 +289,8 @@ def status_command(args: argparse.Namespace) -> int:
284
289
  node_addrs = {node_id: node.endpoint for node_id, node in nodes.items()}
285
290
 
286
291
  # Collect status from all nodes
287
- cluster_status = asyncio.run(_collect_cluster_status(node_addrs, args.details))
292
+ verbosity = getattr(args, "verbose", 0)
293
+ cluster_status = asyncio.run(_collect_cluster_status(node_addrs, verbosity))
288
294
 
289
295
  # Basic node health check
290
296
  print("Node Status:")
@@ -314,8 +320,8 @@ def status_command(args: argparse.Namespace) -> int:
314
320
  print(f"{node_id:<15} {endpoint:<20} UNHEALTHY")
315
321
  all_healthy = False
316
322
 
317
- # If detailed status is requested, show detailed information
318
- if args.details and valid_statuses:
323
+ # If verbose mode is enabled, show detailed information
324
+ if verbosity >= 1 and valid_statuses:
319
325
  print("\nDetailed Runtime Status:")
320
326
  print("-" * 50)
321
327
 
@@ -351,6 +357,14 @@ def status_command(args: argparse.Namespace) -> int:
351
357
  print(
352
358
  f" - Session '{session_name}': {computations} computations, {symbols} symbols"
353
359
  )
360
+ # At -vv level, show the actual lists
361
+ if verbosity >= 2:
362
+ comp_list = session.get("computation_list", [])
363
+ symbol_list = session.get("symbol_list", [])
364
+ if comp_list:
365
+ print(f" Computations: {comp_list}")
366
+ if symbol_list:
367
+ print(f" Symbols: {symbol_list}")
354
368
  elif not sessions:
355
369
  print(" - No active sessions")
356
370
 
@@ -381,10 +395,11 @@ def main() -> int:
381
395
  "--config", "-c", required=True, help="Path to the YAML configuration file"
382
396
  )
383
397
  status_parser.add_argument(
384
- "--details",
385
- "-d",
386
- action="store_true",
387
- help="Show detailed runtime status including sessions, computations, and symbols",
398
+ "--verbose",
399
+ "-v",
400
+ action="count",
401
+ default=0,
402
+ help="Increase verbosity: -v for session details, -vv for full lists",
388
403
  )
389
404
  status_parser.set_defaults(func=status_command)
390
405
 
@@ -384,6 +384,11 @@ def get_session_symbol(session_name: str, symbol_name: str) -> SymbolResponse:
384
384
  status_code=404, detail=f"Symbol {symbol_name} not found"
385
385
  )
386
386
 
387
+ # symbol data is None means this party does not participate the computation
388
+ # that produced the symbol.
389
+ if symbol.data is None:
390
+ raise ResourceNotFound(f"Symbol '{symbol_name}' has no data on this party")
391
+
387
392
  # Serialize using Value envelope
388
393
  return SymbolResponse(
389
394
  name=symbol.name,
@@ -272,10 +272,9 @@ class Session:
272
272
  f"Expected {len(output_names)} results, got {len(results)}"
273
273
  )
274
274
  for name, val in zip(output_names, results, strict=True):
275
- if val is None:
276
- self.delete_symbol(name)
277
- continue
278
- if not isinstance(val, Value):
275
+ # In pure SIMP model, all nodes should have the same symbol table.
276
+ # Non-participating nodes get None values.
277
+ if val is not None and not isinstance(val, Value):
279
278
  raise TypeError(
280
279
  "Session executions must produce kernel Value outputs; "
281
280
  f"got {type(val).__name__} for symbol '{name}'"
@@ -102,7 +102,7 @@ def test_status_command_success():
102
102
  # Create mock args
103
103
  args = MagicMock()
104
104
  args.config = config_path
105
- args.details = True
105
+ args.verbose = 1 # -v: show session details
106
106
 
107
107
  # Run the status command
108
108
  result = status_command(args)
@@ -146,7 +146,7 @@ def test_status_command_unhealthy_node():
146
146
  # Create mock args
147
147
  args = MagicMock()
148
148
  args.config = config_path
149
- args.details = False
149
+ args.verbose = 0 # No verbose output
150
150
 
151
151
  # Run the status command
152
152
  result = status_command(args)
@@ -178,7 +178,7 @@ def test_status_command_exception():
178
178
  # Create mock args
179
179
  args = MagicMock()
180
180
  args.config = config_path
181
- args.details = False
181
+ args.verbose = 0 # No verbose output
182
182
 
183
183
  # Run the status command
184
184
  result = status_command(args)