mplang-nightly 0.1.dev170__tar.gz → 0.1.dev171__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.dev170 → mplang_nightly-0.1.dev171}/PKG-INFO +1 -1
  2. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/core/expr/printer.py +2 -6
  3. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/core/pfunc.py +2 -2
  4. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/core/primitive.py +12 -12
  5. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/device.py +5 -5
  6. mplang_nightly-0.1.dev170/mplang/kernels/builtin.py → mplang_nightly-0.1.dev171/mplang/kernels/basic.py +24 -24
  7. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/kernels/context.py +13 -13
  8. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/ops/__init__.py +2 -2
  9. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/ops/base.py +1 -1
  10. mplang_nightly-0.1.dev170/mplang/ops/builtin.py → mplang_nightly-0.1.dev171/mplang/ops/basic.py +14 -14
  11. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/simp/__init__.py +3 -3
  12. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/core/test_primitive.py +2 -2
  13. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/integration/test_crypto_roundtrip.py +3 -3
  14. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/integration/test_symbols_roundtrip.py +2 -2
  15. mplang_nightly-0.1.dev170/tests/kernels/test_builtin.py → mplang_nightly-0.1.dev171/tests/kernels/test_basic.py +24 -24
  16. mplang_nightly-0.1.dev170/tests/ops/test_builtin_pack.py → mplang_nightly-0.1.dev171/tests/ops/test_basic_pack.py +5 -5
  17. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/ops/test_crypto_tee.py +5 -5
  18. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/ops/test_feop_base.py +2 -2
  19. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/ops/test_table_tensor_conversion.py +3 -3
  20. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tutorials/7_stdio.py +5 -5
  21. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tutorials/9_tee.py +6 -6
  22. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/.gitignore +0 -0
  23. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/LICENSE +0 -0
  24. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/README.md +0 -0
  25. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/examples/conf/3pc.yaml +0 -0
  26. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/examples/stax_nn/README.md +0 -0
  27. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/examples/stax_nn/models.py +0 -0
  28. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/examples/stax_nn/stax_nn.py +0 -0
  29. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/examples/xgboost/hist_jax.py +0 -0
  30. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/examples/xgboost/hist_jax_test.py +0 -0
  31. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/examples/xgboost/naive_np.py +0 -0
  32. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/examples/xgboost/readme.md +0 -0
  33. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/examples/xgboost/sgb.py +0 -0
  34. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/examples/xgboost/sgb_test.py +0 -0
  35. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/hatch_build.py +0 -0
  36. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/__init__.py +0 -0
  37. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/analysis/__init__.py +0 -0
  38. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/analysis/diagram.py +0 -0
  39. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/api.py +0 -0
  40. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/core/__init__.py +0 -0
  41. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/core/cluster.py +0 -0
  42. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/core/comm.py +0 -0
  43. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/core/context_mgr.py +0 -0
  44. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/core/dtype.py +0 -0
  45. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/core/expr/__init__.py +0 -0
  46. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/core/expr/ast.py +0 -0
  47. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/core/expr/evaluator.py +0 -0
  48. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/core/expr/transformer.py +0 -0
  49. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/core/expr/utils.py +0 -0
  50. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/core/expr/visitor.py +0 -0
  51. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/core/expr/walk.py +0 -0
  52. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/core/interp.py +0 -0
  53. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/core/mask.py +0 -0
  54. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/core/mpir.py +0 -0
  55. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/core/mpobject.py +0 -0
  56. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/core/mptype.py +0 -0
  57. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/core/table.py +0 -0
  58. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/core/tensor.py +0 -0
  59. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/core/tracer.py +0 -0
  60. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/kernels/__init__.py +0 -0
  61. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/kernels/base.py +0 -0
  62. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/kernels/crypto.py +0 -0
  63. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/kernels/mock_tee.py +0 -0
  64. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/kernels/phe.py +0 -0
  65. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/kernels/spu.py +0 -0
  66. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/kernels/sql_duckdb.py +0 -0
  67. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/kernels/stablehlo.py +0 -0
  68. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/kernels/value.py +0 -0
  69. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/ops/crypto.py +0 -0
  70. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/ops/ibis_cc.py +0 -0
  71. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/ops/jax_cc.py +0 -0
  72. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/ops/phe.py +0 -0
  73. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/ops/spu.py +0 -0
  74. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/ops/sql_cc.py +0 -0
  75. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/ops/tee.py +0 -0
  76. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/protos/v1alpha1/mpir_pb2.py +0 -0
  77. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/protos/v1alpha1/mpir_pb2.pyi +0 -0
  78. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/protos/v1alpha1/mpir_pb2_grpc.py +0 -0
  79. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/protos/v1alpha1/value_pb2.py +0 -0
  80. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/protos/v1alpha1/value_pb2.pyi +0 -0
  81. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/runtime/__init__.py +0 -0
  82. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/runtime/cli.py +0 -0
  83. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/runtime/client.py +0 -0
  84. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/runtime/communicator.py +0 -0
  85. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/runtime/data_providers.py +0 -0
  86. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/runtime/driver.py +0 -0
  87. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/runtime/exceptions.py +0 -0
  88. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/runtime/http_api.md +0 -0
  89. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/runtime/link_comm.py +0 -0
  90. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/runtime/server.py +0 -0
  91. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/runtime/session.py +0 -0
  92. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/runtime/simulation.py +0 -0
  93. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/simp/mpi.py +0 -0
  94. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/simp/random.py +0 -0
  95. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/simp/smpc.py +0 -0
  96. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/utils/__init__.py +0 -0
  97. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/utils/crypto.py +0 -0
  98. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/utils/func_utils.py +0 -0
  99. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/utils/spu_utils.py +0 -0
  100. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/mplang/utils/table_utils.py +0 -0
  101. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/pyproject.toml +0 -0
  102. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/__init__.py +0 -0
  103. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/analysis/test_diagram.py +0 -0
  104. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/conftest.py +0 -0
  105. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/core/__init__.py +0 -0
  106. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/core/expr/__init__.py +0 -0
  107. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/core/expr/conftest.py +0 -0
  108. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/core/expr/test_ast.py +0 -0
  109. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/core/expr/test_printer.py +0 -0
  110. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/core/expr/test_utils.py +0 -0
  111. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/core/expr/test_walk.py +0 -0
  112. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/core/test_cluster.py +0 -0
  113. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/core/test_dtype.py +0 -0
  114. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/core/test_mask.py +0 -0
  115. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/core/test_mpir.py +0 -0
  116. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/core/test_mptype.py +0 -0
  117. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/core/test_table.py +0 -0
  118. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/core/test_tensor.py +0 -0
  119. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/core/test_tracer.py +0 -0
  120. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/device/__init__.py +0 -0
  121. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/device/test_device_basic.py +0 -0
  122. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/integration/README.md +0 -0
  123. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/integration/test_http_e2e.py +0 -0
  124. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/integration/test_tutorials.py +0 -0
  125. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/integration/test_unused_param_integration.py +0 -0
  126. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/kernels/test_debug_print.py +0 -0
  127. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/kernels/test_kernel_binding.py +0 -0
  128. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/kernels/test_phe.py +0 -0
  129. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/kernels/test_spu.py +0 -0
  130. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/kernels/test_sql_duckdb.py +0 -0
  131. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/kernels/test_stablehlo.py +0 -0
  132. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/kernels/test_value.py +0 -0
  133. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/kernels/test_value_serde.py +0 -0
  134. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/ops/__init__.py +0 -0
  135. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/ops/dummy.py +0 -0
  136. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/ops/test_ibis.py +0 -0
  137. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/ops/test_ibis_cc.py +0 -0
  138. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/ops/test_jax_cc.py +0 -0
  139. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/ops/test_phe.py +0 -0
  140. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/ops/test_spu.py +0 -0
  141. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/ops/test_spu_defensive.py +0 -0
  142. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/ops/test_sql.py +0 -0
  143. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/runtime/__init__.py +0 -0
  144. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/runtime/test_cli.py +0 -0
  145. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/runtime/test_communicator.py +0 -0
  146. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/runtime/test_driver.py +0 -0
  147. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/runtime/test_server.py +0 -0
  148. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/runtime/test_simulation.py +0 -0
  149. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/simp/test_mpi.py +0 -0
  150. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/simp/test_random.py +0 -0
  151. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/simp/test_simp.py +0 -0
  152. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/simp/test_smpc.py +0 -0
  153. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/simp/test_sugar.py +0 -0
  154. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/utils/__init__.py +0 -0
  155. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/utils/server_fixtures.py +0 -0
  156. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/utils/test_func_utils.py +0 -0
  157. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/utils/test_spu_utils.py +0 -0
  158. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tests/utils/test_table_utils.py +0 -0
  159. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tutorials/0_basic.py +0 -0
  160. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tutorials/10_analysis.py +0 -0
  161. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tutorials/1_condition.py +0 -0
  162. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tutorials/2_whileloop.py +0 -0
  163. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tutorials/3_device.py +0 -0
  164. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tutorials/4_simulation.py +0 -0
  165. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tutorials/5_ir_dump.py +0 -0
  166. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tutorials/6_advanced.py +0 -0
  167. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tutorials/8_phe.py +0 -0
  168. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tutorials/__init__.py +0 -0
  169. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tutorials/pitfalls/late_binding.py +0 -0
  170. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tutorials/pitfalls/rand.py +0 -0
  171. {mplang_nightly-0.1.dev170 → mplang_nightly-0.1.dev171}/tutorials/run.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mplang-nightly
3
- Version: 0.1.dev170
3
+ Version: 0.1.dev171
4
4
  Summary: Multi-Party Programming Language
5
5
  Author-email: SecretFlow Team <secretflow-contact@service.alipay.com>
6
6
  License: Apache License
@@ -164,13 +164,9 @@ class Printer(ExprVisitor):
164
164
  arg_names = [self._var_name(arg) for arg in expr.args]
165
165
  fn_type = expr.pfunc.fn_type
166
166
 
167
- # for well known builtin functions
168
- if fn_type == "builtin.constant":
167
+ # for well known basic functions
168
+ if fn_type == "basic.constant":
169
169
  return self._print_const(expr.pfunc, expr.mptypes)
170
- elif fn_type == "builtin.rank":
171
- return self._do_print("prank", [], mptypes=expr.mptypes)
172
- elif fn_type == "builtin.prand":
173
- return self._do_print("prand", [], mptypes=expr.mptypes)
174
170
 
175
171
  attrs = {"fn_type": fn_type}
176
172
  if expr.pfunc.fn_name:
@@ -33,7 +33,7 @@ class PFunction:
33
33
 
34
34
  PFunction serves as a unified interface for describing single-party computations
35
35
  in multi-party computing scenarios. It can represent both:
36
- 1. Built-in operations (e.g., "spu.makeshares", "builtin.read")
36
+ 1. Built-in operations (e.g., "spu.makeshares", "basic.read")
37
37
  2. User-defined programmable functions with custom code
38
38
 
39
39
  The PFunction accepts a list of typed inputs (TensorType/TableType). For
@@ -47,7 +47,7 @@ class PFunction:
47
47
 
48
48
  Args:
49
49
  fn_type: The type/category identifier of this PFunction, indicating which
50
- backend or handler should process it (e.g., "spu.makeshares", "builtin.read",
50
+ backend or handler should process it (e.g., "spu.makeshares", "basic.read",
51
51
  "mlir.stablehlo"). This serves as a routing mechanism for execution.
52
52
  ins_info: Type information for input parameters (TensorType or TableType)
53
53
  outs_info: Type information for output values (TensorType or TableType)
@@ -48,7 +48,7 @@ from mplang.core.pfunc import PFunction
48
48
  from mplang.core.table import TableLike
49
49
  from mplang.core.tensor import ScalarType, Shape, TensorLike
50
50
  from mplang.core.tracer import TraceContext, TraceVar, trace
51
- from mplang.ops import builtin
51
+ from mplang.ops import basic
52
52
  from mplang.utils.func_utils import var_demorph, var_morph
53
53
 
54
54
 
@@ -133,10 +133,10 @@ def trace_before_apply(fn: Callable[P, R], make_call: bool) -> Callable[P, R]:
133
133
  return wrapped
134
134
 
135
135
 
136
- def primitive(fn: Callable[P, R]) -> Callable[P, R]:
136
+ def bltin_function(fn: Callable[P, R]) -> Callable[P, R]:
137
137
  """Decorator to trace a Python function as an opaque primitive call (`CallExpr`).
138
138
 
139
- When a function decorated with `@primitive` is called within a `TraceContext`, it is
139
+ When a function decorated with `@bltin_function` is called within a `TraceContext`, it is
140
140
  not inlined. Instead, it is traced separately in a forked context, and a `CallExpr`
141
141
  node is inserted into the main graph. This is useful for encapsulating complex
142
142
  operations or third-party library calls as single, opaque nodes.
@@ -156,7 +156,7 @@ def primitive(fn: Callable[P, R]) -> Callable[P, R]:
156
156
 
157
157
  Example:
158
158
  ```python
159
- @primitive
159
+ @bltin_function
160
160
  def my_op(x: MPObject) -> MPObject:
161
161
  # Complex logic traced as a single CallExpr node
162
162
  return x + 1
@@ -222,7 +222,7 @@ def pmask() -> Mask:
222
222
  return _tracer().mask
223
223
 
224
224
 
225
- @primitive
225
+ @bltin_function
226
226
  def prank() -> MPObject:
227
227
  """Multi-party get the rank (party identifier) of each party.
228
228
 
@@ -243,12 +243,12 @@ def prank() -> MPObject:
243
243
  Note:
244
244
  Each party in the current party mask independently produces its own rank value.
245
245
  """
246
- pfunc, eval_args, out_tree = builtin.rank()
246
+ pfunc, eval_args, out_tree = basic.rank()
247
247
  results = peval(pfunc, eval_args)
248
248
  return out_tree.unflatten(results) # type: ignore[no-any-return]
249
249
 
250
250
 
251
- @primitive
251
+ @bltin_function
252
252
  def prand(shape: Shape = ()) -> MPObject:
253
253
  """Multi-party generate a private random (uint64) tensor with the given shape.
254
254
 
@@ -271,7 +271,7 @@ def prand(shape: Shape = ()) -> MPObject:
271
271
  private random values. The randomness is local to each party and is
272
272
  not shared or revealed to other parties.
273
273
  """
274
- pfunc, eval_args, out_tree = builtin.prand(shape)
274
+ pfunc, eval_args, out_tree = basic.prand(shape)
275
275
  results = peval(pfunc, eval_args)
276
276
  return out_tree.unflatten(results) # type: ignore[no-any-return]
277
277
 
@@ -305,19 +305,19 @@ def constant(data: TensorLike | ScalarType | TableLike) -> MPObject:
305
305
  Note that the constant primitive is not designed to carry large tables efficiently -
306
306
  consider using dedicated table loading mechanisms for substantial datasets.
307
307
  """
308
- pfunc, eval_args, out_tree = builtin.constant(data)
308
+ pfunc, eval_args, out_tree = basic.constant(data)
309
309
  results = peval(pfunc, eval_args)
310
310
  return out_tree.unflatten(results) # type: ignore[no-any-return]
311
311
 
312
312
 
313
- @primitive
313
+ @bltin_function
314
314
  def debug_print(obj: MPObject, prefix: str = "") -> MPObject:
315
315
  """Print local value of obj on owning parties and pass it through.
316
316
 
317
317
  Returns the same MPObject value to keep it alive against DCE and to
318
318
  support usage like: x = debug_print(x, prefix="x=").
319
319
  """
320
- pfunc, eval_args, out_tree = builtin.debug_print(obj, prefix=prefix)
320
+ pfunc, eval_args, out_tree = basic.debug_print(obj, prefix=prefix)
321
321
  results = peval(pfunc, eval_args)
322
322
  return out_tree.unflatten(results) # type: ignore[no-any-return]
323
323
 
@@ -445,7 +445,7 @@ def set_mask(arg: MPObject, mask: Mask) -> MPObject:
445
445
  The underlying implementation uses JAX identity function with the
446
446
  specified execution mask.
447
447
  """
448
- pfunc, eval_args, out_tree = builtin.identity(arg)
448
+ pfunc, eval_args, out_tree = basic.identity(arg)
449
449
  results = peval(pfunc, eval_args, mask)
450
450
  return out_tree.unflatten(results) # type: ignore[no-any-return]
451
451
 
@@ -35,7 +35,7 @@ from mplang.core import InterpContext, MPObject, primitive
35
35
  from mplang.core.cluster import ClusterSpec, Device
36
36
  from mplang.core.context_mgr import cur_ctx
37
37
  from mplang.core.tensor import TensorType
38
- from mplang.ops import builtin, crypto, ibis_cc, jax_cc, tee
38
+ from mplang.ops import basic, crypto, ibis_cc, jax_cc, tee
39
39
  from mplang.ops.base import FeOperation
40
40
  from mplang.ops.ibis_cc import IbisRunner
41
41
  from mplang.ops.jax_cc import JaxRunner
@@ -209,11 +209,11 @@ def _d2d(to_dev_id: str, obj: MPObject) -> MPObject:
209
209
  sess_p, sess_t = _ensure_tee_session(frm_dev_id, to_dev_id, frm_rank, tee_rank)
210
210
  # Bytes-only path: pack -> enc -> p2p -> dec -> unpack (with static out type)
211
211
  obj_ty = TensorType.from_obj(obj)
212
- b = simp.runAt(frm_rank, builtin.pack)(obj)
212
+ b = simp.runAt(frm_rank, basic.pack)(obj)
213
213
  ct = simp.runAt(frm_rank, crypto.enc)(b, sess_p)
214
214
  ct_at_tee = mpi.p2p(frm_rank, tee_rank, ct)
215
215
  b_at_tee = simp.runAt(tee_rank, crypto.dec)(ct_at_tee, sess_t)
216
- pt_at_tee = simp.runAt(tee_rank, builtin.unpack)(b_at_tee, out_ty=obj_ty)
216
+ pt_at_tee = simp.runAt(tee_rank, basic.unpack)(b_at_tee, out_ty=obj_ty)
217
217
  return tree_map(partial(_set_devid, dev_id=to_dev_id), pt_at_tee) # type: ignore[no-any-return]
218
218
  elif frm_to_pair == ("TEE", "PPU"):
219
219
  # Transparent encryption from TEE to a specific PPU using the reverse-direction session key
@@ -223,11 +223,11 @@ def _d2d(to_dev_id: str, obj: MPObject) -> MPObject:
223
223
  # Ensure bidirectional session established for this pair
224
224
  sess_p, sess_t = _ensure_tee_session(to_dev_id, frm_dev_id, ppu_rank, tee_rank)
225
225
  obj_ty = TensorType.from_obj(obj)
226
- b = simp.runAt(tee_rank, builtin.pack)(obj)
226
+ b = simp.runAt(tee_rank, basic.pack)(obj)
227
227
  ct = simp.runAt(tee_rank, crypto.enc)(b, sess_t)
228
228
  ct_at_ppu = mpi.p2p(tee_rank, ppu_rank, ct)
229
229
  b_at_ppu = simp.runAt(ppu_rank, crypto.dec)(ct_at_ppu, sess_p)
230
- pt_at_ppu = simp.runAt(ppu_rank, builtin.unpack)(b_at_ppu, out_ty=obj_ty)
230
+ pt_at_ppu = simp.runAt(ppu_rank, basic.unpack)(b_at_ppu, out_ty=obj_ty)
231
231
  return tree_map(partial(_set_devid, dev_id=to_dev_id), pt_at_ppu) # type: ignore[no-any-return]
232
232
  else:
233
233
  supported = [
@@ -25,17 +25,17 @@ from mplang.runtime.data_providers import get_provider, resolve_uri
25
25
  from mplang.utils import table_utils
26
26
 
27
27
 
28
- @kernel_def("builtin.identity")
28
+ @kernel_def("basic.identity")
29
29
  def _identity(pfunc: PFunction, value: Value) -> Value:
30
30
  # Runtime guarantees exactly one argument; no extra arity checks here.
31
31
  return value
32
32
 
33
33
 
34
- @kernel_def("builtin.read")
34
+ @kernel_def("basic.read")
35
35
  def _read(pfunc: PFunction) -> Value:
36
36
  path = pfunc.attrs.get("path")
37
37
  if path is None:
38
- raise ValueError("missing path attr for builtin.read")
38
+ raise ValueError("missing path attr for basic.read")
39
39
  out_t = pfunc.outs_info[0]
40
40
  uri = resolve_uri(str(path))
41
41
  prov = get_provider(uri.scheme)
@@ -45,7 +45,7 @@ def _read(pfunc: PFunction) -> Value:
45
45
  try:
46
46
  data = prov.read(uri, out_t, ctx=ctx)
47
47
  except Exception as e: # pragma: no cover - provider errors
48
- raise RuntimeError(f"builtin.read failed: {e}") from e
48
+ raise RuntimeError(f"basic.read failed: {e}") from e
49
49
 
50
50
  if isinstance(out_t, TableType):
51
51
  if isinstance(data, TableValue):
@@ -56,15 +56,15 @@ def _read(pfunc: PFunction) -> Value:
56
56
  return data
57
57
  return TensorValue(np.asarray(data))
58
58
  raise TypeError(
59
- f"builtin.read only supports TableType/TensorType outputs, got {type(out_t).__name__}"
59
+ f"basic.read only supports TableType/TensorType outputs, got {type(out_t).__name__}"
60
60
  )
61
61
 
62
62
 
63
- @kernel_def("builtin.write")
63
+ @kernel_def("basic.write")
64
64
  def _write(pfunc: PFunction, obj: Value) -> Value:
65
65
  path = pfunc.attrs.get("path")
66
66
  if path is None:
67
- raise ValueError("missing path attr for builtin.write")
67
+ raise ValueError("missing path attr for basic.write")
68
68
  uri = resolve_uri(str(path))
69
69
  prov = get_provider(uri.scheme)
70
70
  if prov is None:
@@ -74,16 +74,16 @@ def _write(pfunc: PFunction, obj: Value) -> Value:
74
74
  try:
75
75
  prov.write(uri, obj, ctx=ctx)
76
76
  except Exception as e: # pragma: no cover
77
- raise RuntimeError(f"builtin.write failed: {e}") from e
77
+ raise RuntimeError(f"basic.write failed: {e}") from e
78
78
  return obj
79
79
 
80
80
 
81
- @kernel_def("builtin.constant")
81
+ @kernel_def("basic.constant")
82
82
  def _constant(pfunc: PFunction) -> Value:
83
83
  """Return constants as Value types (TensorValue or TableValue)."""
84
84
  data_bytes = pfunc.attrs.get("data_bytes")
85
85
  if data_bytes is None:
86
- raise ValueError("missing data_bytes attr for builtin.constant")
86
+ raise ValueError("missing data_bytes attr for basic.constant")
87
87
  out_t = pfunc.outs_info[0]
88
88
  fmt = pfunc.attrs.get("data_format")
89
89
  if isinstance(out_t, TableType):
@@ -98,7 +98,7 @@ def _constant(pfunc: PFunction) -> Value:
98
98
  return TensorValue(arr)
99
99
 
100
100
 
101
- @kernel_def("builtin.rank")
101
+ @kernel_def("basic.rank")
102
102
  def _rank(pfunc: PFunction) -> TensorValue:
103
103
  """Return rank as TensorValue."""
104
104
  ctx = cur_kctx()
@@ -106,7 +106,7 @@ def _rank(pfunc: PFunction) -> TensorValue:
106
106
  return TensorValue(arr)
107
107
 
108
108
 
109
- @kernel_def("builtin.prand")
109
+ @kernel_def("basic.prand")
110
110
  def _prand(pfunc: PFunction) -> TensorValue:
111
111
  """Return random data as TensorValue."""
112
112
  shape = pfunc.attrs.get("shape", ())
@@ -118,7 +118,7 @@ def _prand(pfunc: PFunction) -> TensorValue:
118
118
  return TensorValue(data)
119
119
 
120
120
 
121
- @kernel_def("builtin.table_to_tensor")
121
+ @kernel_def("basic.table_to_tensor")
122
122
  def _table_to_tensor(pfunc: PFunction, table: TableValue) -> TensorValue:
123
123
  """Convert table to tensor, return as TensorValue."""
124
124
  arrow_table = table.to_arrow()
@@ -131,7 +131,7 @@ def _table_to_tensor(pfunc: PFunction, table: TableValue) -> TensorValue:
131
131
  return TensorValue(mat)
132
132
 
133
133
 
134
- @kernel_def("builtin.tensor_to_table")
134
+ @kernel_def("basic.tensor_to_table")
135
135
  def _tensor_to_table(pfunc: PFunction, tensor: TensorValue) -> TableValue:
136
136
  """Convert tensor to table, return as TableValue."""
137
137
  import pyarrow as pa # type: ignore
@@ -168,7 +168,7 @@ def _summ(v: Value) -> str:
168
168
  return f"<unprintable {type(v).__name__}: {e}>"
169
169
 
170
170
 
171
- @kernel_def("builtin.debug_print")
171
+ @kernel_def("basic.debug_print")
172
172
  def _debug_print(pfunc: PFunction, val: Value) -> Value:
173
173
  prefix = pfunc.attrs.get("prefix", "")
174
174
  ctx = cur_kctx()
@@ -176,16 +176,16 @@ def _debug_print(pfunc: PFunction, val: Value) -> Value:
176
176
  return val
177
177
 
178
178
 
179
- @kernel_def("builtin.pack")
179
+ @kernel_def("basic.pack")
180
180
  def _pack(pfunc: PFunction, value: Value) -> TensorValue:
181
181
  outs_info = pfunc.outs_info
182
182
  if len(outs_info) != 1:
183
- raise ValueError("builtin.pack expects single output type")
183
+ raise ValueError("basic.pack expects single output type")
184
184
  out_ty = outs_info[0]
185
185
  if not isinstance(out_ty, TensorType):
186
- raise TypeError("builtin.pack must return TensorType")
186
+ raise TypeError("basic.pack must return TensorType")
187
187
  if out_ty.dtype.numpy_dtype() != np.uint8:
188
- raise TypeError("builtin.pack output dtype must be uint8")
188
+ raise TypeError("basic.pack output dtype must be uint8")
189
189
 
190
190
  if isinstance(value, TableValue):
191
191
  # Serialize Arrow table using IPC stream for consistency with Value serde
@@ -203,14 +203,14 @@ def _pack(pfunc: PFunction, value: Value) -> TensorValue:
203
203
  arr = value.to_numpy()
204
204
  return TensorValue(np.frombuffer(arr.tobytes(order="C"), dtype=np.uint8))
205
205
 
206
- raise TypeError(f"builtin.pack does not support Value type {type(value).__name__}")
206
+ raise TypeError(f"basic.pack does not support Value type {type(value).__name__}")
207
207
 
208
208
 
209
- @kernel_def("builtin.unpack")
209
+ @kernel_def("basic.unpack")
210
210
  def _unpack(pfunc: PFunction, packed: TensorValue) -> Value:
211
211
  outs_info = pfunc.outs_info
212
212
  if len(outs_info) != 1:
213
- raise ValueError("builtin.unpack expects single output type")
213
+ raise ValueError("basic.unpack expects single output type")
214
214
  out_ty = outs_info[0]
215
215
 
216
216
  b = packed.to_numpy().astype(np.uint8, copy=False).reshape(-1)
@@ -219,7 +219,7 @@ def _unpack(pfunc: PFunction, packed: TensorValue) -> Value:
219
219
  np_dtype = out_ty.dtype.numpy_dtype()
220
220
  shape = tuple(out_ty.shape)
221
221
  if any(dim < 0 for dim in shape):
222
- raise ValueError("builtin.unpack does not support dynamic tensor shapes")
222
+ raise ValueError("basic.unpack does not support dynamic tensor shapes")
223
223
  elem_count = int(np.prod(shape))
224
224
  expected = elem_count * np.dtype(np_dtype).itemsize
225
225
  if b.size != expected:
@@ -239,4 +239,4 @@ def _unpack(pfunc: PFunction, packed: TensorValue) -> Value:
239
239
  table = reader.read_all()
240
240
  return TableValue(table)
241
241
 
242
- raise TypeError("builtin.unpack output type must be TensorType or TableType")
242
+ raise TypeError("basic.unpack output type must be TensorType or TableType")
@@ -35,7 +35,7 @@ def _ensure_impl_imported() -> None:
35
35
  global _IMPL_IMPORTED
36
36
  if _IMPL_IMPORTED:
37
37
  return
38
- from mplang.kernels import builtin as _impl_builtin # noqa: F401
38
+ from mplang.kernels import basic as _impl_basic # noqa: F401
39
39
  from mplang.kernels import crypto as _impl_crypto # noqa: F401
40
40
  from mplang.kernels import mock_tee as _impl_tee # noqa: F401
41
41
  from mplang.kernels import phe as _impl_phe # noqa: F401
@@ -49,18 +49,18 @@ def _ensure_impl_imported() -> None:
49
49
  # imports consolidated above
50
50
 
51
51
  _DEFAULT_BINDINGS: dict[str, str] = {
52
- # builtin
53
- "builtin.identity": "builtin.identity",
54
- "builtin.read": "builtin.read",
55
- "builtin.write": "builtin.write",
56
- "builtin.constant": "builtin.constant",
57
- "builtin.rank": "builtin.rank",
58
- "builtin.prand": "builtin.prand",
59
- "builtin.table_to_tensor": "builtin.table_to_tensor",
60
- "builtin.tensor_to_table": "builtin.tensor_to_table",
61
- "builtin.debug_print": "builtin.debug_print",
62
- "builtin.pack": "builtin.pack",
63
- "builtin.unpack": "builtin.unpack",
52
+ # basic
53
+ "basic.identity": "basic.identity",
54
+ "basic.read": "basic.read",
55
+ "basic.write": "basic.write",
56
+ "basic.constant": "basic.constant",
57
+ "basic.rank": "basic.rank",
58
+ "basic.prand": "basic.prand",
59
+ "basic.table_to_tensor": "basic.table_to_tensor",
60
+ "basic.tensor_to_table": "basic.tensor_to_table",
61
+ "basic.debug_print": "basic.debug_print",
62
+ "basic.pack": "basic.pack",
63
+ "basic.unpack": "basic.unpack",
64
64
  # crypto
65
65
  "crypto.keygen": "crypto.keygen",
66
66
  "crypto.enc": "crypto.enc",
@@ -19,12 +19,12 @@ This module contains compilers that transform high-level functions into
19
19
  portable, serializable intermediate representations.
20
20
  """
21
21
 
22
- from mplang.ops import builtin, crypto, ibis_cc, jax_cc, phe, spu, sql_cc, tee
22
+ from mplang.ops import basic, crypto, ibis_cc, jax_cc, phe, spu, sql_cc, tee
23
23
  from mplang.ops.base import FeOperation as FeOperation
24
24
 
25
25
  __all__ = [
26
26
  "FeOperation",
27
- "builtin",
27
+ "basic",
28
28
  "crypto",
29
29
  "ibis_cc",
30
30
  "jax_cc",
@@ -129,7 +129,7 @@ class FeModule(ABC):
129
129
  - You need compilation/stateful behavior/dynamic routing, multiple PFunctions, or complex capture flows.
130
130
 
131
131
  Tips:
132
- - Keep routing information in PFunction.fn_type (e.g., "builtin.read", "sql.run", "mlir.stablehlo").
132
+ - Keep routing information in PFunction.fn_type (e.g., "basic.read", "sql.run", "mlir.stablehlo").
133
133
  - Avoid backend-specific logic in kernels; only validate and shape types.
134
134
  - Prefer keyword-only attributes in typed_op kernels for clarity (def op(x: MPObject, *, attr: int)).
135
135
  """
@@ -23,10 +23,10 @@ from mplang.core.tensor import ScalarType, Shape, TensorLike, TensorType
23
23
  from mplang.ops.base import stateless_mod
24
24
  from mplang.utils import table_utils
25
25
 
26
- _BUILTIN_MOD = stateless_mod("builtin")
26
+ _BASIC_MOD = stateless_mod("basic")
27
27
 
28
28
 
29
- @_BUILTIN_MOD.simple_op()
29
+ @_BASIC_MOD.simple_op()
30
30
  def identity(x: TensorType) -> TensorType:
31
31
  """Return the input type unchanged.
32
32
 
@@ -40,7 +40,7 @@ def identity(x: TensorType) -> TensorType:
40
40
  return x
41
41
 
42
42
 
43
- @_BUILTIN_MOD.simple_op()
43
+ @_BASIC_MOD.simple_op()
44
44
  def read(*, path: str, ty: TensorType) -> TensorType:
45
45
  """Declare reading a value of type ``ty`` from ``path`` (type-only).
46
46
 
@@ -63,7 +63,7 @@ def read(*, path: str, ty: TensorType) -> TensorType:
63
63
  return ty
64
64
 
65
65
 
66
- @_BUILTIN_MOD.simple_op()
66
+ @_BASIC_MOD.simple_op()
67
67
  def write(x: TensorType, *, path: str) -> TensorType:
68
68
  """Declare writing the input value to ``path`` and return the same type.
69
69
 
@@ -77,7 +77,7 @@ def write(x: TensorType, *, path: str) -> TensorType:
77
77
  return x
78
78
 
79
79
 
80
- @_BUILTIN_MOD.op_def()
80
+ @_BASIC_MOD.op_def()
81
81
  def constant(
82
82
  data: TensorLike | ScalarType | TableLike,
83
83
  ) -> tuple[PFunction, list[MPObject], PyTreeDef]:
@@ -89,7 +89,7 @@ def constant(
89
89
 
90
90
  Returns:
91
91
  Tuple[PFunction, list[MPObject], PyTreeDef]:
92
- - PFunction: ``fn_type='builtin.constant'`` with one output whose type
92
+ - PFunction: ``fn_type='basic.constant'`` with one output whose type
93
93
  matches ``data``; payload serialized via ``data_bytes`` with
94
94
  ``data_format`` ('bytes[numpy]' or 'bytes[csv]').
95
95
  - list[MPObject]: Empty (no inputs captured).
@@ -120,7 +120,7 @@ def constant(
120
120
  data_format = "bytes[numpy]"
121
121
 
122
122
  pfunc = PFunction(
123
- fn_type="builtin.constant",
123
+ fn_type="basic.constant",
124
124
  ins_info=(),
125
125
  outs_info=(out_type,),
126
126
  data_bytes=data_bytes,
@@ -130,7 +130,7 @@ def constant(
130
130
  return pfunc, [], treedef
131
131
 
132
132
 
133
- @_BUILTIN_MOD.simple_op()
133
+ @_BASIC_MOD.simple_op()
134
134
  def rank() -> TensorType:
135
135
  """Return the scalar UINT64 tensor type for the current party rank.
136
136
 
@@ -140,7 +140,7 @@ def rank() -> TensorType:
140
140
  return TensorType(UINT64, ())
141
141
 
142
142
 
143
- @_BUILTIN_MOD.simple_op()
143
+ @_BASIC_MOD.simple_op()
144
144
  def prand(*, shape: Shape = ()) -> TensorType:
145
145
  """Declare a private random UINT64 tensor with the given shape.
146
146
 
@@ -153,7 +153,7 @@ def prand(*, shape: Shape = ()) -> TensorType:
153
153
  return TensorType(UINT64, shape)
154
154
 
155
155
 
156
- @_BUILTIN_MOD.simple_op()
156
+ @_BASIC_MOD.simple_op()
157
157
  def debug_print(
158
158
  x: TensorType | TableType, *, prefix: str = ""
159
159
  ) -> TableType | TensorType:
@@ -169,7 +169,7 @@ def debug_print(
169
169
  return x
170
170
 
171
171
 
172
- @_BUILTIN_MOD.simple_op()
172
+ @_BASIC_MOD.simple_op()
173
173
  def pack(x: TensorType | TableType) -> TensorType:
174
174
  """Serialize a tensor/table into a byte vector (type-only).
175
175
 
@@ -189,7 +189,7 @@ def pack(x: TensorType | TableType) -> TensorType:
189
189
  return TensorType(UINT8, (-1,))
190
190
 
191
191
 
192
- @_BUILTIN_MOD.simple_op()
192
+ @_BASIC_MOD.simple_op()
193
193
  def unpack(b: TensorType, *, out_ty: TensorType | TableType) -> TensorType | TableType:
194
194
  """Deserialize a byte vector into the explicit output type.
195
195
 
@@ -215,7 +215,7 @@ def unpack(b: TensorType, *, out_ty: TensorType | TableType) -> TensorType | Tab
215
215
  return out_ty
216
216
 
217
217
 
218
- @_BUILTIN_MOD.simple_op()
218
+ @_BASIC_MOD.simple_op()
219
219
  def table_to_tensor(table: TableType, *, number_rows: int) -> TensorType:
220
220
  """Convert a homogeneous-typed table to a dense 2D tensor.
221
221
 
@@ -248,7 +248,7 @@ def table_to_tensor(table: TableType, *, number_rows: int) -> TensorType:
248
248
  return TensorType(first, shape) # type: ignore[arg-type]
249
249
 
250
250
 
251
- @_BUILTIN_MOD.simple_op()
251
+ @_BASIC_MOD.simple_op()
252
252
  def tensor_to_table(tensor: TensorType, *, column_names: list[str]) -> TableType:
253
253
  """Convert a rank-2 tensor into a table with named columns.
254
254
 
@@ -105,7 +105,7 @@ def run_impl(
105
105
  The result of evaluating the function through the appropriate handler
106
106
 
107
107
  Raises:
108
- ValueError: If builtin.write is called without required arguments
108
+ ValueError: If basic.write is called without required arguments
109
109
  TypeError: If the function compilation or evaluation fails
110
110
  RuntimeError: If the underlying peval execution encounters errors
111
111
 
@@ -114,11 +114,11 @@ def run_impl(
114
114
 
115
115
  >>> tensor_info = TensorType(shape=(10, 10), dtype=np.float32)
116
116
  >>> attrs = {"format": "binary"}
117
- >>> result = run_impl(builtin.read, "data/input.bin", tensor_info, attrs)
117
+ >>> result = run_impl(basic.read, "data/input.bin", tensor_info, attrs)
118
118
 
119
119
  Writing data to a file:
120
120
 
121
- >>> run_impl(builtin.write, data, "data/output.bin")
121
+ >>> run_impl(basic.write, data, "data/output.bin")
122
122
 
123
123
  Running a JAX function:
124
124
 
@@ -349,9 +349,9 @@ class TestBasicPrimitives:
349
349
  expected = """
350
350
  () {
351
351
  %0 = pconst() {data=42} : i64<3>
352
- %1 = peval(%0) {fn_type=builtin.identity, rmask=0x1} : i64<1>
352
+ %1 = peval(%0) {fn_type=basic.identity, rmask=0x1} : i64<1>
353
353
  %2 = pconst() {data=24} : i64<3>
354
- %3 = peval(%2) {fn_type=builtin.identity, rmask=0x2} : i64<2>
354
+ %3 = peval(%2) {fn_type=basic.identity, rmask=0x2} : i64<2>
355
355
  %4 = pconv(%1, %3) : i64<3>
356
356
  return %4
357
357
  }
@@ -23,7 +23,7 @@ import pytest
23
23
  import mplang
24
24
  import mplang.simp as simp
25
25
  from mplang.core.tensor import TensorType
26
- from mplang.ops import builtin, crypto
26
+ from mplang.ops import basic, crypto
27
27
 
28
28
  pytestmark = pytest.mark.integration
29
29
 
@@ -78,8 +78,8 @@ def test_pack_unpack_roundtrip_various():
78
78
  outs = []
79
79
  for _idx, (shape, dt) in enumerate(shapes_dtypes):
80
80
  arr = simp.runAt(0, lambda s=shape, d=dt: np.zeros(s, dtype=d))()
81
- packed = simp.runAt(0, builtin.pack)(arr)
82
- unpacked = simp.runAt(0, builtin.unpack)(
81
+ packed = simp.runAt(0, basic.pack)(arr)
82
+ unpacked = simp.runAt(0, basic.unpack)(
83
83
  packed, out_ty=TensorType.from_obj(arr)
84
84
  )
85
85
  outs.append(unpacked)
@@ -22,7 +22,7 @@ Flow:
22
22
 
23
23
  This tests end-to-end interaction between:
24
24
  - Global symbol CRUD endpoints
25
- - ``builtin.read`` path using ``symbols://`` scheme
25
+ - ``basic.read`` path using ``symbols://`` scheme
26
26
  - Driver evaluation and fetch
27
27
  - HttpExecutorClient helpers for symbol CRUD
28
28
  """
@@ -40,7 +40,7 @@ from mplang.core.cluster import ClusterSpec, Device, Node, RuntimeInfo
40
40
  from mplang.core.dtype import DType
41
41
  from mplang.core.tensor import TensorType
42
42
  from mplang.kernels.value import TensorValue
43
- from mplang.ops import builtin as fb
43
+ from mplang.ops import basic as fb
44
44
  from mplang.runtime.client import HttpExecutorClient
45
45
 
46
46
  pytest_plugins = ("tests.utils.server_fixtures",)