maxframe 1.3.0__cp38-cp38-win32.whl → 2.0.0__cp38-cp38-win32.whl

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.

Potentially problematic release.


This version of maxframe might be problematic. Click here for more details.

Files changed (644) hide show
  1. maxframe/_utils.cp38-win32.pyd +0 -0
  2. maxframe/_utils.pyi +21 -0
  3. maxframe/_utils.pyx +4 -3
  4. maxframe/codegen/__init__.py +27 -0
  5. maxframe/{codegen.py → codegen/core.py} +49 -43
  6. maxframe/codegen/spe/__init__.py +16 -0
  7. maxframe/codegen/spe/core.py +307 -0
  8. maxframe/codegen/spe/dataframe/__init__.py +37 -0
  9. maxframe/codegen/spe/dataframe/accessors/__init__.py +15 -0
  10. maxframe/codegen/spe/dataframe/accessors/base.py +53 -0
  11. maxframe/codegen/spe/dataframe/accessors/dict_.py +194 -0
  12. maxframe/codegen/spe/dataframe/accessors/list_.py +80 -0
  13. maxframe/codegen/spe/dataframe/arithmetic.py +84 -0
  14. maxframe/codegen/spe/dataframe/datasource.py +181 -0
  15. maxframe/codegen/spe/dataframe/datastore.py +204 -0
  16. maxframe/codegen/spe/dataframe/extensions.py +63 -0
  17. maxframe/codegen/spe/dataframe/fetch.py +26 -0
  18. maxframe/codegen/spe/dataframe/groupby.py +224 -0
  19. maxframe/codegen/spe/dataframe/indexing.py +238 -0
  20. maxframe/codegen/spe/dataframe/merge.py +73 -0
  21. maxframe/codegen/spe/dataframe/misc.py +286 -0
  22. maxframe/codegen/spe/dataframe/missing.py +64 -0
  23. maxframe/codegen/spe/dataframe/reduction.py +160 -0
  24. maxframe/codegen/spe/dataframe/sort.py +83 -0
  25. maxframe/codegen/spe/dataframe/statistics.py +46 -0
  26. maxframe/codegen/spe/dataframe/tests/__init__.py +13 -0
  27. maxframe/codegen/spe/dataframe/tests/accessors/__init__.py +13 -0
  28. maxframe/codegen/spe/dataframe/tests/accessors/test_base.py +33 -0
  29. maxframe/codegen/spe/dataframe/tests/accessors/test_dict.py +310 -0
  30. maxframe/codegen/spe/dataframe/tests/accessors/test_list.py +137 -0
  31. maxframe/codegen/spe/dataframe/tests/indexing/__init__.py +13 -0
  32. maxframe/codegen/spe/dataframe/tests/indexing/conftest.py +58 -0
  33. maxframe/codegen/spe/dataframe/tests/indexing/test_getitem.py +124 -0
  34. maxframe/codegen/spe/dataframe/tests/indexing/test_iloc.py +76 -0
  35. maxframe/codegen/spe/dataframe/tests/indexing/test_indexing.py +39 -0
  36. maxframe/codegen/spe/dataframe/tests/indexing/test_rename.py +51 -0
  37. maxframe/codegen/spe/dataframe/tests/indexing/test_reset_index.py +88 -0
  38. maxframe/codegen/spe/dataframe/tests/indexing/test_sample.py +45 -0
  39. maxframe/codegen/spe/dataframe/tests/indexing/test_set_axis.py +45 -0
  40. maxframe/codegen/spe/dataframe/tests/indexing/test_set_index.py +41 -0
  41. maxframe/codegen/spe/dataframe/tests/indexing/test_setitem.py +46 -0
  42. maxframe/codegen/spe/dataframe/tests/misc/__init__.py +13 -0
  43. maxframe/codegen/spe/dataframe/tests/misc/test_apply.py +133 -0
  44. maxframe/codegen/spe/dataframe/tests/misc/test_drop_duplicates.py +92 -0
  45. maxframe/codegen/spe/dataframe/tests/misc/test_misc.py +234 -0
  46. maxframe/codegen/spe/dataframe/tests/missing/__init__.py +13 -0
  47. maxframe/codegen/spe/dataframe/tests/missing/test_checkna.py +94 -0
  48. maxframe/codegen/spe/dataframe/tests/missing/test_dropna.py +50 -0
  49. maxframe/codegen/spe/dataframe/tests/missing/test_fillna.py +94 -0
  50. maxframe/codegen/spe/dataframe/tests/missing/test_replace.py +45 -0
  51. maxframe/codegen/spe/dataframe/tests/test_arithmetic.py +73 -0
  52. maxframe/codegen/spe/dataframe/tests/test_datasource.py +184 -0
  53. maxframe/codegen/spe/dataframe/tests/test_datastore.py +200 -0
  54. maxframe/codegen/spe/dataframe/tests/test_extensions.py +88 -0
  55. maxframe/codegen/spe/dataframe/tests/test_groupby.py +225 -0
  56. maxframe/codegen/spe/dataframe/tests/test_merge.py +400 -0
  57. maxframe/codegen/spe/dataframe/tests/test_reduction.py +104 -0
  58. maxframe/codegen/spe/dataframe/tests/test_sort.py +159 -0
  59. maxframe/codegen/spe/dataframe/tests/test_statistics.py +70 -0
  60. maxframe/codegen/spe/dataframe/tests/test_tseries.py +29 -0
  61. maxframe/codegen/spe/dataframe/tests/test_value_counts.py +60 -0
  62. maxframe/codegen/spe/dataframe/tests/test_window.py +69 -0
  63. maxframe/codegen/spe/dataframe/tseries.py +46 -0
  64. maxframe/codegen/spe/dataframe/udf.py +62 -0
  65. maxframe/codegen/spe/dataframe/value_counts.py +31 -0
  66. maxframe/codegen/spe/dataframe/window.py +65 -0
  67. maxframe/codegen/spe/learn/__init__.py +15 -0
  68. maxframe/codegen/spe/learn/contrib/__init__.py +15 -0
  69. maxframe/codegen/spe/learn/contrib/lightgbm.py +160 -0
  70. maxframe/codegen/spe/learn/contrib/models.py +41 -0
  71. maxframe/codegen/spe/learn/contrib/pytorch.py +49 -0
  72. maxframe/codegen/spe/learn/contrib/tests/__init__.py +13 -0
  73. maxframe/codegen/spe/learn/contrib/tests/test_lightgbm.py +123 -0
  74. maxframe/codegen/spe/learn/contrib/tests/test_models.py +41 -0
  75. maxframe/codegen/spe/learn/contrib/tests/test_pytorch.py +53 -0
  76. maxframe/codegen/spe/learn/contrib/tests/test_xgboost.py +98 -0
  77. maxframe/codegen/spe/learn/contrib/xgboost.py +152 -0
  78. maxframe/codegen/spe/learn/metrics/__init__.py +15 -0
  79. maxframe/codegen/spe/learn/metrics/_classification.py +120 -0
  80. maxframe/codegen/spe/learn/metrics/tests/__init__.py +13 -0
  81. maxframe/codegen/spe/learn/metrics/tests/test_classification.py +93 -0
  82. maxframe/codegen/spe/learn/model_selection/__init__.py +13 -0
  83. maxframe/codegen/spe/learn/model_selection/tests/__init__.py +13 -0
  84. maxframe/codegen/spe/learn/model_selection/tests/test_split.py +41 -0
  85. maxframe/codegen/spe/learn/preprocessing/__init__.py +15 -0
  86. maxframe/codegen/spe/learn/preprocessing/_data.py +37 -0
  87. maxframe/codegen/spe/learn/preprocessing/_label.py +47 -0
  88. maxframe/codegen/spe/learn/preprocessing/tests/__init__.py +13 -0
  89. maxframe/codegen/spe/learn/preprocessing/tests/test_data.py +31 -0
  90. maxframe/codegen/spe/learn/preprocessing/tests/test_label.py +43 -0
  91. maxframe/codegen/spe/learn/utils/__init__.py +15 -0
  92. maxframe/codegen/spe/learn/utils/checks.py +55 -0
  93. maxframe/codegen/spe/learn/utils/multiclass.py +60 -0
  94. maxframe/codegen/spe/learn/utils/shuffle.py +85 -0
  95. maxframe/codegen/spe/learn/utils/sparsefuncs.py +35 -0
  96. maxframe/codegen/spe/learn/utils/tests/__init__.py +13 -0
  97. maxframe/codegen/spe/learn/utils/tests/test_checks.py +48 -0
  98. maxframe/codegen/spe/learn/utils/tests/test_multiclass.py +52 -0
  99. maxframe/codegen/spe/learn/utils/tests/test_shuffle.py +50 -0
  100. maxframe/codegen/spe/learn/utils/tests/test_sparsefuncs.py +34 -0
  101. maxframe/codegen/spe/learn/utils/tests/test_validation.py +44 -0
  102. maxframe/codegen/spe/learn/utils/validation.py +35 -0
  103. maxframe/codegen/spe/objects.py +26 -0
  104. maxframe/codegen/spe/remote.py +29 -0
  105. maxframe/codegen/spe/tensor/__init__.py +28 -0
  106. maxframe/codegen/spe/tensor/arithmetic.py +95 -0
  107. maxframe/codegen/spe/tensor/core.py +41 -0
  108. maxframe/codegen/spe/tensor/datasource.py +165 -0
  109. maxframe/codegen/spe/tensor/extensions.py +35 -0
  110. maxframe/codegen/spe/tensor/fetch.py +26 -0
  111. maxframe/codegen/spe/tensor/indexing.py +63 -0
  112. maxframe/codegen/spe/tensor/linalg.py +63 -0
  113. maxframe/codegen/spe/tensor/merge.py +31 -0
  114. maxframe/codegen/spe/tensor/misc.py +121 -0
  115. maxframe/codegen/spe/tensor/random.py +29 -0
  116. maxframe/codegen/spe/tensor/reduction.py +39 -0
  117. maxframe/codegen/spe/tensor/reshape.py +26 -0
  118. maxframe/codegen/spe/tensor/sort.py +42 -0
  119. maxframe/codegen/spe/tensor/special.py +35 -0
  120. maxframe/codegen/spe/tensor/statistics.py +24 -0
  121. maxframe/codegen/spe/tensor/tests/__init__.py +13 -0
  122. maxframe/codegen/spe/tensor/tests/test_arithmetic.py +103 -0
  123. maxframe/codegen/spe/tensor/tests/test_datasource.py +99 -0
  124. maxframe/codegen/spe/tensor/tests/test_extensions.py +37 -0
  125. maxframe/codegen/spe/tensor/tests/test_indexing.py +44 -0
  126. maxframe/codegen/spe/tensor/tests/test_linalg.py +38 -0
  127. maxframe/codegen/spe/tensor/tests/test_merge.py +28 -0
  128. maxframe/codegen/spe/tensor/tests/test_misc.py +94 -0
  129. maxframe/codegen/spe/tensor/tests/test_random.py +55 -0
  130. maxframe/codegen/spe/tensor/tests/test_reduction.py +65 -0
  131. maxframe/codegen/spe/tensor/tests/test_reshape.py +39 -0
  132. maxframe/codegen/spe/tensor/tests/test_sort.py +49 -0
  133. maxframe/codegen/spe/tensor/tests/test_special.py +28 -0
  134. maxframe/codegen/spe/tensor/tests/test_statistics.py +29 -0
  135. maxframe/codegen/spe/tests/__init__.py +13 -0
  136. maxframe/codegen/spe/tests/test_remote.py +29 -0
  137. maxframe/codegen/spe/tests/test_spe_codegen.py +141 -0
  138. maxframe/codegen/spe/utils.py +54 -0
  139. maxframe/codegen/tests/__init__.py +13 -0
  140. maxframe/{tests → codegen/tests}/test_codegen.py +3 -5
  141. maxframe/config/__init__.py +1 -1
  142. maxframe/config/config.py +50 -23
  143. maxframe/config/tests/test_config.py +4 -12
  144. maxframe/config/validators.py +5 -0
  145. maxframe/conftest.py +38 -10
  146. maxframe/core/__init__.py +1 -0
  147. maxframe/core/context.py +110 -0
  148. maxframe/core/entity/__init__.py +1 -0
  149. maxframe/core/entity/core.py +0 -7
  150. maxframe/core/entity/objects.py +19 -5
  151. maxframe/core/entity/output_types.py +11 -0
  152. maxframe/core/entity/tests/test_objects.py +11 -12
  153. maxframe/core/entity/tileables.py +3 -1
  154. maxframe/core/entity/utils.py +15 -0
  155. maxframe/core/graph/__init__.py +6 -1
  156. maxframe/core/graph/builder/base.py +5 -1
  157. maxframe/core/graph/core.cp38-win32.pyd +0 -0
  158. maxframe/core/graph/core.pyx +17 -6
  159. maxframe/core/graph/entity.py +18 -6
  160. maxframe/core/operator/__init__.py +8 -3
  161. maxframe/core/operator/base.py +35 -12
  162. maxframe/core/operator/core.py +37 -14
  163. maxframe/core/operator/fetch.py +5 -18
  164. maxframe/core/operator/objects.py +0 -20
  165. maxframe/core/operator/shuffle.py +6 -72
  166. maxframe/dataframe/__init__.py +1 -0
  167. maxframe/dataframe/accessors/datetime_/core.py +7 -4
  168. maxframe/dataframe/accessors/string_/core.py +9 -6
  169. maxframe/dataframe/arithmetic/core.py +31 -20
  170. maxframe/dataframe/arithmetic/tests/test_arithmetic.py +6 -0
  171. maxframe/dataframe/core.py +98 -91
  172. maxframe/dataframe/datasource/core.py +8 -1
  173. maxframe/dataframe/datasource/date_range.py +8 -0
  174. maxframe/dataframe/datasource/from_index.py +9 -5
  175. maxframe/dataframe/datasource/from_records.py +9 -2
  176. maxframe/dataframe/datasource/from_tensor.py +32 -21
  177. maxframe/dataframe/datasource/read_csv.py +8 -2
  178. maxframe/dataframe/datasource/read_odps_query.py +109 -19
  179. maxframe/dataframe/datasource/read_odps_table.py +20 -5
  180. maxframe/dataframe/datasource/read_parquet.py +8 -3
  181. maxframe/dataframe/datasource/tests/test_datasource.py +80 -1
  182. maxframe/dataframe/datastore/tests/test_to_odps.py +52 -1
  183. maxframe/dataframe/datastore/to_csv.py +7 -3
  184. maxframe/dataframe/datastore/to_odps.py +42 -6
  185. maxframe/dataframe/extensions/__init__.py +6 -1
  186. maxframe/dataframe/extensions/apply_chunk.py +96 -136
  187. maxframe/dataframe/extensions/flatjson.py +3 -2
  188. maxframe/dataframe/extensions/flatmap.py +15 -7
  189. maxframe/dataframe/fetch/core.py +12 -1
  190. maxframe/dataframe/groupby/__init__.py +7 -0
  191. maxframe/dataframe/groupby/aggregation.py +62 -9
  192. maxframe/dataframe/groupby/apply.py +50 -74
  193. maxframe/dataframe/groupby/apply_chunk.py +393 -0
  194. maxframe/dataframe/groupby/core.py +80 -17
  195. maxframe/dataframe/groupby/extensions.py +26 -0
  196. maxframe/dataframe/groupby/fill.py +9 -4
  197. maxframe/dataframe/groupby/sample.py +7 -7
  198. maxframe/dataframe/groupby/tests/test_groupby.py +3 -3
  199. maxframe/dataframe/groupby/transform.py +57 -54
  200. maxframe/dataframe/indexing/align.py +7 -6
  201. maxframe/dataframe/indexing/getitem.py +9 -8
  202. maxframe/dataframe/indexing/iloc.py +28 -23
  203. maxframe/dataframe/indexing/insert.py +7 -3
  204. maxframe/dataframe/indexing/loc.py +9 -8
  205. maxframe/dataframe/indexing/reindex.py +36 -30
  206. maxframe/dataframe/indexing/rename_axis.py +18 -10
  207. maxframe/dataframe/indexing/reset_index.py +0 -2
  208. maxframe/dataframe/indexing/sample.py +13 -9
  209. maxframe/dataframe/indexing/set_axis.py +9 -6
  210. maxframe/dataframe/indexing/setitem.py +8 -5
  211. maxframe/dataframe/indexing/where.py +12 -9
  212. maxframe/dataframe/merge/__init__.py +0 -1
  213. maxframe/dataframe/merge/concat.py +10 -31
  214. maxframe/dataframe/merge/merge.py +2 -24
  215. maxframe/dataframe/misc/__init__.py +6 -0
  216. maxframe/dataframe/misc/_duplicate.py +7 -3
  217. maxframe/dataframe/misc/apply.py +106 -139
  218. maxframe/dataframe/misc/astype.py +3 -2
  219. maxframe/dataframe/misc/case_when.py +11 -7
  220. maxframe/dataframe/misc/cut.py +11 -10
  221. maxframe/dataframe/misc/describe.py +7 -3
  222. maxframe/dataframe/misc/drop.py +13 -11
  223. maxframe/dataframe/misc/eval.py +0 -2
  224. maxframe/dataframe/misc/get_dummies.py +78 -49
  225. maxframe/dataframe/misc/isin.py +13 -10
  226. maxframe/dataframe/misc/map.py +21 -6
  227. maxframe/dataframe/misc/melt.py +8 -1
  228. maxframe/dataframe/misc/pivot.py +232 -0
  229. maxframe/dataframe/misc/pivot_table.py +52 -40
  230. maxframe/dataframe/misc/rechunk.py +59 -0
  231. maxframe/dataframe/misc/shift.py +7 -4
  232. maxframe/dataframe/misc/stack.py +5 -3
  233. maxframe/dataframe/misc/tests/test_misc.py +167 -1
  234. maxframe/dataframe/misc/transform.py +63 -65
  235. maxframe/dataframe/misc/value_counts.py +7 -4
  236. maxframe/dataframe/missing/dropna.py +16 -7
  237. maxframe/dataframe/missing/fillna.py +18 -10
  238. maxframe/dataframe/missing/replace.py +10 -6
  239. maxframe/dataframe/missing/tests/test_missing.py +2 -2
  240. maxframe/dataframe/operators.py +1 -27
  241. maxframe/dataframe/reduction/aggregation.py +128 -3
  242. maxframe/dataframe/reduction/core.py +20 -6
  243. maxframe/dataframe/reduction/median.py +1 -1
  244. maxframe/dataframe/reduction/tests/test_reduction.py +33 -0
  245. maxframe/dataframe/reduction/unique.py +53 -7
  246. maxframe/dataframe/statistics/corr.py +9 -6
  247. maxframe/dataframe/statistics/quantile.py +9 -6
  248. maxframe/dataframe/tseries/to_datetime.py +6 -4
  249. maxframe/dataframe/utils.py +219 -31
  250. maxframe/dataframe/window/rolling.py +7 -4
  251. maxframe/env.py +1 -0
  252. maxframe/errors.py +9 -0
  253. maxframe/extension.py +13 -2
  254. maxframe/io/objects/core.py +67 -51
  255. maxframe/io/objects/tensor.py +73 -17
  256. maxframe/io/objects/tests/test_object_io.py +10 -55
  257. maxframe/io/odpsio/arrow.py +15 -2
  258. maxframe/io/odpsio/schema.py +43 -13
  259. maxframe/io/odpsio/tableio.py +63 -11
  260. maxframe/io/odpsio/tests/test_arrow.py +1 -2
  261. maxframe/io/odpsio/tests/test_schema.py +114 -1
  262. maxframe/io/odpsio/tests/test_tableio.py +42 -0
  263. maxframe/io/odpsio/tests/test_volumeio.py +21 -58
  264. maxframe/io/odpsio/volumeio.py +23 -8
  265. maxframe/learn/__init__.py +2 -2
  266. maxframe/learn/contrib/__init__.py +2 -2
  267. maxframe/learn/contrib/graph/connected_components.py +2 -1
  268. maxframe/learn/contrib/lightgbm/__init__.py +33 -0
  269. maxframe/learn/contrib/lightgbm/_predict.py +138 -0
  270. maxframe/learn/contrib/lightgbm/_train.py +163 -0
  271. maxframe/learn/contrib/lightgbm/callback.py +114 -0
  272. maxframe/learn/contrib/lightgbm/classifier.py +199 -0
  273. maxframe/learn/contrib/lightgbm/core.py +372 -0
  274. maxframe/learn/contrib/lightgbm/dataset.py +153 -0
  275. maxframe/learn/contrib/lightgbm/regressor.py +29 -0
  276. maxframe/learn/contrib/lightgbm/tests/__init__.py +13 -0
  277. maxframe/learn/contrib/lightgbm/tests/test_callback.py +58 -0
  278. maxframe/learn/contrib/llm/models/dashscope.py +34 -0
  279. maxframe/learn/contrib/llm/models/managed.py +15 -0
  280. maxframe/learn/contrib/llm/multi_modal.py +92 -0
  281. maxframe/learn/contrib/llm/text.py +21 -5
  282. maxframe/learn/contrib/models.py +38 -9
  283. maxframe/learn/contrib/utils.py +55 -0
  284. maxframe/learn/contrib/xgboost/callback.py +86 -0
  285. maxframe/learn/contrib/xgboost/classifier.py +26 -30
  286. maxframe/learn/contrib/xgboost/core.py +54 -42
  287. maxframe/learn/contrib/xgboost/dmatrix.py +19 -12
  288. maxframe/learn/contrib/xgboost/predict.py +13 -8
  289. maxframe/learn/contrib/xgboost/regressor.py +28 -27
  290. maxframe/learn/contrib/xgboost/tests/test_callback.py +41 -0
  291. maxframe/learn/contrib/xgboost/train.py +59 -16
  292. maxframe/learn/core.py +252 -0
  293. maxframe/learn/datasets/__init__.py +20 -0
  294. maxframe/learn/datasets/samples_generator.py +628 -0
  295. maxframe/learn/linear_model/__init__.py +15 -0
  296. maxframe/learn/linear_model/_base.py +163 -0
  297. maxframe/learn/linear_model/_lin_reg.py +175 -0
  298. maxframe/learn/metrics/__init__.py +25 -0
  299. maxframe/learn/metrics/_check_targets.py +95 -0
  300. maxframe/learn/metrics/_classification.py +1121 -0
  301. maxframe/learn/metrics/_regression.py +256 -0
  302. maxframe/learn/model_selection/__init__.py +15 -0
  303. maxframe/learn/model_selection/_split.py +451 -0
  304. maxframe/learn/model_selection/tests/__init__.py +13 -0
  305. maxframe/learn/model_selection/tests/test_split.py +156 -0
  306. maxframe/learn/preprocessing/__init__.py +16 -0
  307. maxframe/learn/preprocessing/_data/__init__.py +17 -0
  308. maxframe/learn/preprocessing/_data/min_max_scaler.py +390 -0
  309. maxframe/learn/preprocessing/_data/normalize.py +127 -0
  310. maxframe/learn/preprocessing/_data/standard_scaler.py +503 -0
  311. maxframe/learn/preprocessing/_data/utils.py +79 -0
  312. maxframe/learn/preprocessing/_label/__init__.py +16 -0
  313. maxframe/learn/preprocessing/_label/_label_binarizer.py +599 -0
  314. maxframe/learn/preprocessing/_label/_label_encoder.py +174 -0
  315. maxframe/learn/utils/__init__.py +4 -0
  316. maxframe/learn/utils/_encode.py +314 -0
  317. maxframe/learn/utils/checks.py +161 -0
  318. maxframe/learn/utils/core.py +33 -0
  319. maxframe/learn/utils/extmath.py +176 -0
  320. maxframe/learn/utils/multiclass.py +292 -0
  321. maxframe/learn/utils/shuffle.py +114 -0
  322. maxframe/learn/utils/sparsefuncs.py +87 -0
  323. maxframe/learn/utils/validation.py +775 -0
  324. maxframe/lib/__init__.py +0 -2
  325. maxframe/lib/compat.py +145 -0
  326. maxframe/lib/filesystem/_oss_lib/glob.py +1 -1
  327. maxframe/lib/mmh3.cp38-win32.pyd +0 -0
  328. maxframe/lib/sparse/__init__.py +10 -15
  329. maxframe/lib/sparse/array.py +45 -33
  330. maxframe/lib/sparse/core.py +0 -2
  331. maxframe/lib/sparse/linalg.py +31 -0
  332. maxframe/lib/sparse/matrix.py +5 -2
  333. maxframe/lib/sparse/tests/__init__.py +0 -2
  334. maxframe/lib/sparse/tests/test_sparse.py +53 -53
  335. maxframe/lib/sparse/vector.py +0 -2
  336. maxframe/mixin.py +59 -2
  337. maxframe/opcodes.py +13 -5
  338. maxframe/protocol.py +67 -14
  339. maxframe/remote/core.py +16 -14
  340. maxframe/remote/run_script.py +6 -3
  341. maxframe/serialization/__init__.py +2 -0
  342. maxframe/serialization/core.cp38-win32.pyd +0 -0
  343. maxframe/serialization/core.pxd +3 -0
  344. maxframe/serialization/core.pyi +3 -1
  345. maxframe/serialization/core.pyx +82 -4
  346. maxframe/serialization/pandas.py +5 -1
  347. maxframe/serialization/serializables/core.py +6 -5
  348. maxframe/serialization/serializables/field.py +2 -2
  349. maxframe/serialization/serializables/tests/test_field_type.py +3 -5
  350. maxframe/serialization/tests/test_serial.py +27 -0
  351. maxframe/session.py +4 -71
  352. maxframe/sperunner.py +165 -0
  353. maxframe/tensor/__init__.py +35 -2
  354. maxframe/tensor/arithmetic/__init__.py +2 -4
  355. maxframe/tensor/arithmetic/abs.py +0 -2
  356. maxframe/tensor/arithmetic/absolute.py +0 -2
  357. maxframe/tensor/arithmetic/add.py +34 -4
  358. maxframe/tensor/arithmetic/angle.py +0 -2
  359. maxframe/tensor/arithmetic/arccos.py +1 -4
  360. maxframe/tensor/arithmetic/arccosh.py +1 -3
  361. maxframe/tensor/arithmetic/arcsin.py +0 -2
  362. maxframe/tensor/arithmetic/arcsinh.py +0 -2
  363. maxframe/tensor/arithmetic/arctan.py +0 -2
  364. maxframe/tensor/arithmetic/arctan2.py +0 -2
  365. maxframe/tensor/arithmetic/arctanh.py +0 -2
  366. maxframe/tensor/arithmetic/around.py +0 -2
  367. maxframe/tensor/arithmetic/bitand.py +0 -2
  368. maxframe/tensor/arithmetic/bitor.py +1 -3
  369. maxframe/tensor/arithmetic/bitxor.py +1 -3
  370. maxframe/tensor/arithmetic/cbrt.py +0 -2
  371. maxframe/tensor/arithmetic/ceil.py +0 -2
  372. maxframe/tensor/arithmetic/clip.py +13 -13
  373. maxframe/tensor/arithmetic/conj.py +0 -2
  374. maxframe/tensor/arithmetic/copysign.py +0 -2
  375. maxframe/tensor/arithmetic/core.py +47 -39
  376. maxframe/tensor/arithmetic/cos.py +1 -3
  377. maxframe/tensor/arithmetic/cosh.py +0 -2
  378. maxframe/tensor/arithmetic/deg2rad.py +0 -2
  379. maxframe/tensor/arithmetic/degrees.py +0 -2
  380. maxframe/tensor/arithmetic/divide.py +0 -2
  381. maxframe/tensor/arithmetic/equal.py +0 -2
  382. maxframe/tensor/arithmetic/exp.py +1 -3
  383. maxframe/tensor/arithmetic/exp2.py +0 -2
  384. maxframe/tensor/arithmetic/expm1.py +0 -2
  385. maxframe/tensor/arithmetic/fabs.py +0 -2
  386. maxframe/tensor/arithmetic/fix.py +0 -2
  387. maxframe/tensor/arithmetic/float_power.py +0 -2
  388. maxframe/tensor/arithmetic/floor.py +0 -2
  389. maxframe/tensor/arithmetic/floordiv.py +0 -2
  390. maxframe/tensor/arithmetic/fmax.py +0 -2
  391. maxframe/tensor/arithmetic/fmin.py +0 -2
  392. maxframe/tensor/arithmetic/fmod.py +0 -2
  393. maxframe/tensor/arithmetic/frexp.py +6 -2
  394. maxframe/tensor/arithmetic/greater.py +0 -2
  395. maxframe/tensor/arithmetic/greater_equal.py +0 -2
  396. maxframe/tensor/arithmetic/hypot.py +0 -2
  397. maxframe/tensor/arithmetic/i0.py +1 -3
  398. maxframe/tensor/arithmetic/imag.py +0 -2
  399. maxframe/tensor/arithmetic/invert.py +1 -3
  400. maxframe/tensor/arithmetic/isclose.py +0 -2
  401. maxframe/tensor/arithmetic/iscomplex.py +0 -2
  402. maxframe/tensor/arithmetic/isfinite.py +1 -3
  403. maxframe/tensor/arithmetic/isinf.py +0 -2
  404. maxframe/tensor/arithmetic/isnan.py +0 -2
  405. maxframe/tensor/arithmetic/isreal.py +0 -2
  406. maxframe/tensor/arithmetic/ldexp.py +0 -2
  407. maxframe/tensor/arithmetic/less.py +0 -2
  408. maxframe/tensor/arithmetic/less_equal.py +0 -2
  409. maxframe/tensor/arithmetic/log.py +1 -3
  410. maxframe/tensor/arithmetic/log10.py +1 -3
  411. maxframe/tensor/arithmetic/log1p.py +1 -3
  412. maxframe/tensor/arithmetic/log2.py +1 -3
  413. maxframe/tensor/arithmetic/logaddexp.py +0 -2
  414. maxframe/tensor/arithmetic/logaddexp2.py +0 -2
  415. maxframe/tensor/arithmetic/logical_and.py +0 -2
  416. maxframe/tensor/arithmetic/logical_not.py +1 -3
  417. maxframe/tensor/arithmetic/logical_or.py +0 -2
  418. maxframe/tensor/arithmetic/logical_xor.py +0 -2
  419. maxframe/tensor/arithmetic/lshift.py +0 -2
  420. maxframe/tensor/arithmetic/maximum.py +0 -2
  421. maxframe/tensor/arithmetic/minimum.py +0 -2
  422. maxframe/tensor/arithmetic/mod.py +0 -2
  423. maxframe/tensor/arithmetic/modf.py +6 -2
  424. maxframe/tensor/arithmetic/multiply.py +37 -4
  425. maxframe/tensor/arithmetic/nan_to_num.py +0 -2
  426. maxframe/tensor/arithmetic/negative.py +0 -2
  427. maxframe/tensor/arithmetic/nextafter.py +0 -2
  428. maxframe/tensor/arithmetic/not_equal.py +0 -2
  429. maxframe/tensor/arithmetic/positive.py +0 -2
  430. maxframe/tensor/arithmetic/power.py +0 -2
  431. maxframe/tensor/arithmetic/rad2deg.py +0 -2
  432. maxframe/tensor/arithmetic/radians.py +0 -2
  433. maxframe/tensor/arithmetic/real.py +0 -2
  434. maxframe/tensor/arithmetic/reciprocal.py +5 -3
  435. maxframe/tensor/arithmetic/rint.py +1 -3
  436. maxframe/tensor/arithmetic/rshift.py +0 -2
  437. maxframe/tensor/arithmetic/setimag.py +0 -2
  438. maxframe/tensor/arithmetic/setreal.py +0 -2
  439. maxframe/tensor/arithmetic/sign.py +0 -2
  440. maxframe/tensor/arithmetic/signbit.py +0 -2
  441. maxframe/tensor/arithmetic/sin.py +0 -2
  442. maxframe/tensor/arithmetic/sinc.py +1 -3
  443. maxframe/tensor/arithmetic/sinh.py +0 -2
  444. maxframe/tensor/arithmetic/spacing.py +0 -2
  445. maxframe/tensor/arithmetic/sqrt.py +0 -2
  446. maxframe/tensor/arithmetic/square.py +0 -2
  447. maxframe/tensor/arithmetic/subtract.py +4 -2
  448. maxframe/tensor/arithmetic/tan.py +0 -2
  449. maxframe/tensor/arithmetic/tanh.py +0 -2
  450. maxframe/tensor/arithmetic/tests/__init__.py +0 -2
  451. maxframe/tensor/arithmetic/tests/test_arithmetic.py +43 -9
  452. maxframe/tensor/arithmetic/truediv.py +0 -2
  453. maxframe/tensor/arithmetic/trunc.py +0 -2
  454. maxframe/tensor/arithmetic/utils.py +32 -6
  455. maxframe/tensor/array_utils.py +3 -25
  456. maxframe/tensor/core.py +6 -6
  457. maxframe/tensor/datasource/__init__.py +10 -2
  458. maxframe/tensor/datasource/arange.py +0 -2
  459. maxframe/tensor/datasource/array.py +3 -22
  460. maxframe/tensor/datasource/core.py +15 -10
  461. maxframe/tensor/datasource/diag.py +140 -0
  462. maxframe/tensor/datasource/diagflat.py +69 -0
  463. maxframe/tensor/datasource/empty.py +0 -2
  464. maxframe/tensor/datasource/eye.py +95 -0
  465. maxframe/tensor/datasource/from_dataframe.py +0 -2
  466. maxframe/tensor/datasource/from_dense.py +0 -17
  467. maxframe/tensor/datasource/from_sparse.py +0 -2
  468. maxframe/tensor/datasource/full.py +0 -2
  469. maxframe/tensor/datasource/identity.py +54 -0
  470. maxframe/tensor/datasource/indices.py +115 -0
  471. maxframe/tensor/datasource/linspace.py +140 -0
  472. maxframe/tensor/datasource/meshgrid.py +135 -0
  473. maxframe/tensor/datasource/ones.py +8 -3
  474. maxframe/tensor/datasource/tests/test_datasource.py +32 -1
  475. maxframe/tensor/datasource/tri_array.py +107 -0
  476. maxframe/tensor/datasource/zeros.py +7 -3
  477. maxframe/tensor/extensions/__init__.py +31 -0
  478. maxframe/tensor/extensions/accessor.py +25 -0
  479. maxframe/tensor/extensions/apply_chunk.py +137 -0
  480. maxframe/tensor/indexing/__init__.py +1 -1
  481. maxframe/tensor/indexing/choose.py +8 -6
  482. maxframe/tensor/indexing/compress.py +0 -2
  483. maxframe/tensor/indexing/extract.py +0 -2
  484. maxframe/tensor/indexing/fill_diagonal.py +9 -6
  485. maxframe/tensor/indexing/flatnonzero.py +1 -3
  486. maxframe/tensor/indexing/getitem.py +10 -43
  487. maxframe/tensor/indexing/nonzero.py +2 -4
  488. maxframe/tensor/indexing/setitem.py +19 -9
  489. maxframe/tensor/indexing/slice.py +6 -3
  490. maxframe/tensor/indexing/take.py +0 -2
  491. maxframe/tensor/indexing/tests/__init__.py +0 -2
  492. maxframe/tensor/indexing/tests/test_indexing.py +0 -2
  493. maxframe/tensor/indexing/unravel_index.py +6 -6
  494. maxframe/tensor/lib/__init__.py +16 -0
  495. maxframe/tensor/lib/index_tricks.py +404 -0
  496. maxframe/tensor/linalg/__init__.py +36 -0
  497. maxframe/tensor/linalg/dot.py +145 -0
  498. maxframe/tensor/linalg/inner.py +36 -0
  499. maxframe/tensor/linalg/inv.py +83 -0
  500. maxframe/tensor/linalg/lu.py +115 -0
  501. maxframe/tensor/linalg/matmul.py +225 -0
  502. maxframe/tensor/linalg/qr.py +124 -0
  503. maxframe/tensor/linalg/solve_triangular.py +103 -0
  504. maxframe/tensor/linalg/svd.py +167 -0
  505. maxframe/tensor/linalg/tensordot.py +213 -0
  506. maxframe/tensor/linalg/vdot.py +73 -0
  507. maxframe/tensor/merge/__init__.py +4 -0
  508. maxframe/tensor/merge/append.py +74 -0
  509. maxframe/tensor/merge/column_stack.py +63 -0
  510. maxframe/tensor/merge/concatenate.py +3 -2
  511. maxframe/tensor/merge/dstack.py +71 -0
  512. maxframe/tensor/merge/hstack.py +70 -0
  513. maxframe/tensor/merge/stack.py +0 -2
  514. maxframe/tensor/merge/tests/test_merge.py +0 -2
  515. maxframe/tensor/misc/__init__.py +18 -5
  516. maxframe/tensor/misc/astype.py +10 -8
  517. maxframe/tensor/misc/broadcast_to.py +1 -1
  518. maxframe/tensor/misc/copy.py +64 -0
  519. maxframe/tensor/misc/diff.py +115 -0
  520. maxframe/tensor/misc/flatten.py +63 -0
  521. maxframe/tensor/misc/in1d.py +94 -0
  522. maxframe/tensor/misc/isin.py +130 -0
  523. maxframe/tensor/misc/ndim.py +53 -0
  524. maxframe/tensor/misc/ravel.py +0 -2
  525. maxframe/tensor/misc/repeat.py +129 -0
  526. maxframe/tensor/misc/searchsorted.py +147 -0
  527. maxframe/tensor/misc/setdiff1d.py +58 -0
  528. maxframe/tensor/misc/squeeze.py +117 -0
  529. maxframe/tensor/misc/swapaxes.py +113 -0
  530. maxframe/tensor/misc/tests/test_misc.py +0 -2
  531. maxframe/tensor/misc/transpose.py +8 -4
  532. maxframe/tensor/misc/trapezoid.py +123 -0
  533. maxframe/tensor/misc/unique.py +0 -1
  534. maxframe/tensor/misc/where.py +10 -8
  535. maxframe/tensor/operators.py +0 -34
  536. maxframe/tensor/random/__init__.py +3 -5
  537. maxframe/tensor/random/binomial.py +0 -2
  538. maxframe/tensor/random/bytes.py +0 -2
  539. maxframe/tensor/random/chisquare.py +0 -2
  540. maxframe/tensor/random/choice.py +9 -8
  541. maxframe/tensor/random/core.py +20 -5
  542. maxframe/tensor/random/dirichlet.py +0 -2
  543. maxframe/tensor/random/exponential.py +0 -2
  544. maxframe/tensor/random/f.py +2 -4
  545. maxframe/tensor/random/gamma.py +0 -2
  546. maxframe/tensor/random/geometric.py +0 -2
  547. maxframe/tensor/random/gumbel.py +0 -2
  548. maxframe/tensor/random/hypergeometric.py +0 -2
  549. maxframe/tensor/random/laplace.py +2 -4
  550. maxframe/tensor/random/logistic.py +0 -2
  551. maxframe/tensor/random/lognormal.py +0 -2
  552. maxframe/tensor/random/logseries.py +0 -2
  553. maxframe/tensor/random/multinomial.py +0 -2
  554. maxframe/tensor/random/multivariate_normal.py +0 -2
  555. maxframe/tensor/random/negative_binomial.py +0 -2
  556. maxframe/tensor/random/noncentral_chisquare.py +0 -2
  557. maxframe/tensor/random/noncentral_f.py +1 -3
  558. maxframe/tensor/random/normal.py +0 -2
  559. maxframe/tensor/random/pareto.py +0 -2
  560. maxframe/tensor/random/permutation.py +6 -3
  561. maxframe/tensor/random/poisson.py +0 -2
  562. maxframe/tensor/random/power.py +0 -2
  563. maxframe/tensor/random/rand.py +0 -2
  564. maxframe/tensor/random/randint.py +0 -2
  565. maxframe/tensor/random/randn.py +0 -2
  566. maxframe/tensor/random/random_integers.py +0 -2
  567. maxframe/tensor/random/random_sample.py +0 -2
  568. maxframe/tensor/random/rayleigh.py +0 -2
  569. maxframe/tensor/random/standard_cauchy.py +0 -2
  570. maxframe/tensor/random/standard_exponential.py +0 -2
  571. maxframe/tensor/random/standard_gamma.py +0 -2
  572. maxframe/tensor/random/standard_normal.py +0 -2
  573. maxframe/tensor/random/standard_t.py +0 -2
  574. maxframe/tensor/random/tests/__init__.py +0 -2
  575. maxframe/tensor/random/tests/test_random.py +0 -2
  576. maxframe/tensor/random/triangular.py +0 -2
  577. maxframe/tensor/random/uniform.py +0 -2
  578. maxframe/tensor/random/vonmises.py +0 -2
  579. maxframe/tensor/random/wald.py +0 -2
  580. maxframe/tensor/random/weibull.py +0 -2
  581. maxframe/tensor/random/zipf.py +0 -2
  582. maxframe/tensor/reduction/__init__.py +0 -2
  583. maxframe/tensor/reduction/all.py +0 -2
  584. maxframe/tensor/reduction/allclose.py +0 -2
  585. maxframe/tensor/reduction/any.py +0 -2
  586. maxframe/tensor/reduction/argmax.py +1 -3
  587. maxframe/tensor/reduction/argmin.py +1 -3
  588. maxframe/tensor/reduction/array_equal.py +0 -2
  589. maxframe/tensor/reduction/core.py +0 -2
  590. maxframe/tensor/reduction/count_nonzero.py +0 -2
  591. maxframe/tensor/reduction/cumprod.py +0 -2
  592. maxframe/tensor/reduction/cumsum.py +0 -2
  593. maxframe/tensor/reduction/max.py +0 -2
  594. maxframe/tensor/reduction/mean.py +0 -2
  595. maxframe/tensor/reduction/min.py +0 -2
  596. maxframe/tensor/reduction/nanargmax.py +0 -2
  597. maxframe/tensor/reduction/nanargmin.py +0 -2
  598. maxframe/tensor/reduction/nancumprod.py +0 -2
  599. maxframe/tensor/reduction/nancumsum.py +0 -2
  600. maxframe/tensor/reduction/nanmax.py +0 -2
  601. maxframe/tensor/reduction/nanmean.py +0 -2
  602. maxframe/tensor/reduction/nanmin.py +0 -2
  603. maxframe/tensor/reduction/nanprod.py +0 -2
  604. maxframe/tensor/reduction/nanstd.py +0 -2
  605. maxframe/tensor/reduction/nansum.py +0 -2
  606. maxframe/tensor/reduction/nanvar.py +0 -2
  607. maxframe/tensor/reduction/prod.py +0 -2
  608. maxframe/tensor/reduction/std.py +0 -2
  609. maxframe/tensor/reduction/sum.py +0 -2
  610. maxframe/tensor/reduction/tests/test_reduction.py +1 -4
  611. maxframe/tensor/reduction/var.py +0 -2
  612. maxframe/tensor/reshape/__init__.py +0 -2
  613. maxframe/tensor/reshape/reshape.py +6 -5
  614. maxframe/tensor/reshape/tests/__init__.py +0 -2
  615. maxframe/tensor/reshape/tests/test_reshape.py +0 -2
  616. maxframe/tensor/sort/__init__.py +16 -0
  617. maxframe/tensor/sort/argsort.py +150 -0
  618. maxframe/tensor/sort/sort.py +295 -0
  619. maxframe/tensor/special/__init__.py +37 -0
  620. maxframe/tensor/special/core.py +38 -0
  621. maxframe/tensor/special/misc.py +142 -0
  622. maxframe/tensor/special/statistical.py +56 -0
  623. maxframe/tensor/statistics/__init__.py +5 -0
  624. maxframe/tensor/statistics/average.py +143 -0
  625. maxframe/tensor/statistics/bincount.py +133 -0
  626. maxframe/tensor/statistics/quantile.py +10 -8
  627. maxframe/tensor/ufunc/__init__.py +0 -2
  628. maxframe/tensor/ufunc/ufunc.py +0 -2
  629. maxframe/tensor/utils.py +21 -3
  630. maxframe/tests/test_protocol.py +3 -3
  631. maxframe/tests/test_utils.py +210 -1
  632. maxframe/tests/utils.py +59 -1
  633. maxframe/udf.py +76 -6
  634. maxframe/utils.py +418 -17
  635. {maxframe-1.3.0.dist-info → maxframe-2.0.0.dist-info}/METADATA +5 -1
  636. maxframe-2.0.0.dist-info/RECORD +939 -0
  637. maxframe_client/clients/framedriver.py +19 -3
  638. maxframe_client/fetcher.py +113 -6
  639. maxframe_client/session/odps.py +173 -38
  640. maxframe_client/session/task.py +3 -1
  641. maxframe_client/tests/test_session.py +41 -5
  642. maxframe-1.3.0.dist-info/RECORD +0 -705
  643. {maxframe-1.3.0.dist-info → maxframe-2.0.0.dist-info}/WHEEL +0 -0
  644. {maxframe-1.3.0.dist-info → maxframe-2.0.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,53 @@
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from typing import List
16
+
17
+ from .....dataframe.accessors.datetime_ import SeriesDatetimeMethod
18
+ from .....dataframe.accessors.string_ import SeriesStringMethod
19
+ from ...core import SPECodeContext, SPEOperatorAdapter, register_op_adapter
20
+
21
+
22
+ @register_op_adapter(SeriesDatetimeMethod)
23
+ class SeriesDatetimeMethodAdapter(SPEOperatorAdapter):
24
+ def generate_code(
25
+ self, op: SeriesDatetimeMethod, context: SPECodeContext
26
+ ) -> List[str]:
27
+ inst_var_name = context.get_input_tileable_variable(op.inputs[0])
28
+ res_var_name = context.get_output_tileable_variable(op.outputs[0])
29
+ method_str = f"{inst_var_name}.dt.{op.method}"
30
+ if op.is_property:
31
+ return [f"{res_var_name} = {method_str}"]
32
+ else:
33
+ args_list = self._translate_call_args(
34
+ context, *op.method_args, **op.method_kwargs
35
+ )
36
+ args = ", ".join(args_list)
37
+ return [f"{res_var_name} = {method_str}({args})"]
38
+
39
+
40
+ @register_op_adapter(SeriesStringMethod)
41
+ class SeriesStringMethodAdapter(SPEOperatorAdapter):
42
+ def generate_code(
43
+ self, op: SeriesStringMethod, context: SPECodeContext
44
+ ) -> List[str]:
45
+ inst_var_name = context.get_input_tileable_variable(op.inputs[0])
46
+ res_var_name = context.get_output_tileable_variable(op.outputs[0])
47
+ method_str = f"{inst_var_name}.str.{op.method}"
48
+
49
+ args_list = self._translate_call_args(
50
+ context, *op.method_args, **op.method_kwargs
51
+ )
52
+ args = ", ".join(args_list)
53
+ return [f"{res_var_name} = {method_str}({args})"]
@@ -0,0 +1,194 @@
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from typing import List
16
+
17
+ from .....dataframe.accessors.dict_.contains import SeriesDictContainsOperator
18
+ from .....dataframe.accessors.dict_.getitem import SeriesDictGetItemOperator
19
+ from .....dataframe.accessors.dict_.length import SeriesDictLengthOperator
20
+ from .....dataframe.accessors.dict_.remove import SeriesDictRemoveOperator
21
+ from .....dataframe.accessors.dict_.setitem import SeriesDictSetItemOperator
22
+ from ...core import SPECodeContext, SPEOperatorAdapter, register_op_adapter
23
+
24
+ _get_template = """
25
+ def _inner_get(data):
26
+ found = False
27
+ for tup in data:
28
+ if tup[0] == {key_var}:
29
+ found = True
30
+ return tup[1]
31
+ if not found:
32
+ if {ignore_key_error_var}:
33
+ return {default_value_var}
34
+ else:
35
+ raise KeyError({key_var})
36
+
37
+ {output_var} = {input_var}.map(_inner_get, na_action="ignore").astype({output_dtype_var})
38
+ {output_var}.name = {key_var}
39
+ """
40
+
41
+ _set_template = """
42
+ def _inner_set(row):
43
+ found = False
44
+ value = list()
45
+ for tup in row:
46
+ if tup[0] == {key_var}:
47
+ value.append((tup[0], {value_var}))
48
+ found = True
49
+ else:
50
+ value.append(tup)
51
+ if not found:
52
+ value.append(({key_var}, {value_var}))
53
+ return value
54
+
55
+ {output_var} = {input_var}.map(_inner_set, na_action="ignore").astype({output_dtype_var})
56
+ """
57
+
58
+ _length_template = """
59
+ {output_var} = {input_var}.map(len, na_action="ignore").astype({output_dtype_var})
60
+ {output_var}.name = None
61
+ """
62
+
63
+
64
+ _remove_template = """
65
+ def _inner_remove(value):
66
+ row = list()
67
+ found = False
68
+ for tup in value:
69
+ if tup[0] == {key_var}:
70
+ found = True
71
+ else:
72
+ row.append(tup)
73
+ if not found and not {ignore_key_error_var}:
74
+ raise KeyError({key_var})
75
+ return row
76
+
77
+ {output_var} = {input_var}.map(_inner_remove, na_action="ignore").astype({output_dtype_var})
78
+ """
79
+
80
+ _contains_template = """
81
+ {output_var} = {input_var}.map(lambda x: any({key_var} in tup[0] for tup in x), na_action="ignore").astype({output_dtype_var})
82
+ {output_var}.name = None
83
+ """
84
+
85
+
86
+ @register_op_adapter(SeriesDictGetItemOperator)
87
+ class SeriesDictGetItemOperatorAdapter(SPEOperatorAdapter):
88
+ def generate_code(
89
+ self, op: SeriesDictGetItemOperator, context: SPECodeContext
90
+ ) -> List[str]:
91
+ input_var = context.get_input_tileable_variable(op.inputs[0])
92
+ output_var = context.get_output_tileable_variable(op.outputs[0])
93
+ key_var = self.translate_var(context, op.query_key)
94
+ output_name_var = self.translate_var(context, op.outputs[0].name)
95
+ default_value_var = self.translate_var(context, op.default_value)
96
+ ignore_key_error_var = self.translate_var(context, op.ignore_key_error)
97
+ output_dtype_var = context.register_operator_constants(op.outputs[0].dtype)
98
+ return [
99
+ _get_template.format(
100
+ input_var=input_var,
101
+ output_var=output_var,
102
+ key_var=key_var,
103
+ default_value_var=default_value_var,
104
+ ignore_key_error_var=ignore_key_error_var,
105
+ output_name_var=output_name_var,
106
+ output_dtype_var=output_dtype_var,
107
+ )
108
+ ]
109
+
110
+
111
+ @register_op_adapter(SeriesDictSetItemOperator)
112
+ class SeriesDictSetItemOperatorAdapter(SPEOperatorAdapter):
113
+ def generate_code(
114
+ self, op: SeriesDictSetItemOperator, context: SPECodeContext
115
+ ) -> List[str]:
116
+ input_var = context.get_input_tileable_variable(op.inputs[0])
117
+ output_var = context.get_output_tileable_variable(op.outputs[0])
118
+ key_var = self.translate_var(context, op.query_key)
119
+ value_var = self.translate_var(context, op.value)
120
+ output_name_var = self.translate_var(context, op.outputs[0].name)
121
+ output_dtype_var = context.register_operator_constants(op.outputs[0].dtype)
122
+ return [
123
+ _set_template.format(
124
+ input_var=input_var,
125
+ output_var=output_var,
126
+ key_var=key_var,
127
+ value_var=value_var,
128
+ output_name_var=output_name_var,
129
+ output_dtype_var=output_dtype_var,
130
+ )
131
+ ]
132
+
133
+
134
+ @register_op_adapter(SeriesDictLengthOperator)
135
+ class SeriesDictLengthOperatorAdapter(SPEOperatorAdapter):
136
+ def generate_code(
137
+ self, op: SeriesDictLengthOperator, context: SPECodeContext
138
+ ) -> List[str]:
139
+ input_var = context.get_input_tileable_variable(op.inputs[0])
140
+ output_var = context.get_output_tileable_variable(op.outputs[0])
141
+ output_name_var = self.translate_var(context, op.outputs[0].name)
142
+ output_dtype_var = context.register_operator_constants(op.outputs[0].dtype)
143
+ return [
144
+ _length_template.format(
145
+ input_var=input_var,
146
+ output_var=output_var,
147
+ output_name_var=output_name_var,
148
+ output_dtype_var=output_dtype_var,
149
+ )
150
+ ]
151
+
152
+
153
+ @register_op_adapter(SeriesDictRemoveOperator)
154
+ class SeriesDictRemoveOperatorAdapter(SPEOperatorAdapter):
155
+ def generate_code(
156
+ self, op: SeriesDictRemoveOperator, context: SPECodeContext
157
+ ) -> List[str]:
158
+ input_var = context.get_input_tileable_variable(op.inputs[0])
159
+ output_var = context.get_output_tileable_variable(op.outputs[0])
160
+ output_name_var = self.translate_var(context, op.outputs[0].name)
161
+ output_dtype_var = context.register_operator_constants(op.outputs[0].dtype)
162
+ key_var = self.translate_var(context, op.query_key)
163
+ ignore_key_error_var = self.translate_var(context, op.ignore_key_error)
164
+ return [
165
+ _remove_template.format(
166
+ input_var=input_var,
167
+ output_var=output_var,
168
+ key_var=key_var,
169
+ ignore_key_error_var=ignore_key_error_var,
170
+ output_name_var=output_name_var,
171
+ output_dtype_var=output_dtype_var,
172
+ )
173
+ ]
174
+
175
+
176
+ @register_op_adapter(SeriesDictContainsOperator)
177
+ class SeriesDictContainsOperatorAdapter(SPEOperatorAdapter):
178
+ def generate_code(
179
+ self, op: SeriesDictContainsOperator, context: SPECodeContext
180
+ ) -> List[str]:
181
+ input_var = context.get_input_tileable_variable(op.inputs[0])
182
+ output_var = context.get_output_tileable_variable(op.outputs[0])
183
+ output_name_var = self.translate_var(context, op.outputs[0].name)
184
+ output_dtype_var = context.register_operator_constants(op.outputs[0].dtype)
185
+ key_var = self.translate_var(context, op.query_key)
186
+ return [
187
+ _contains_template.format(
188
+ input_var=input_var,
189
+ output_var=output_var,
190
+ key_var=key_var,
191
+ output_name_var=output_name_var,
192
+ output_dtype_var=output_dtype_var,
193
+ )
194
+ ]
@@ -0,0 +1,80 @@
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from typing import List
16
+
17
+ from .....dataframe.accessors.list_.getitem import SeriesListGetItemOperator
18
+ from .....dataframe.accessors.list_.length import SeriesListLengthOperator
19
+ from ...core import SPECodeContext, SPEOperatorAdapter, register_op_adapter
20
+
21
+ _get_template = """
22
+ def _inner_get(data):
23
+ try:
24
+ return data[{index_var}]
25
+ except IndexError:
26
+ if {ignore_index_error_var}:
27
+ return None
28
+ else:
29
+ raise
30
+
31
+ {output_var} = {input_var}.map(_inner_get, na_action="ignore").astype({output_dtype_var})
32
+ {output_var}.name = None
33
+ """
34
+
35
+ _length_template = """
36
+ {output_var} = {input_var}.map(len, na_action="ignore").astype({output_dtype_var})
37
+ {output_var}.name = None
38
+ """
39
+
40
+
41
+ @register_op_adapter(SeriesListGetItemOperator)
42
+ class SeriesListGetItemOperatorAdapter(SPEOperatorAdapter):
43
+ def generate_code(
44
+ self, op: SeriesListGetItemOperator, context: SPECodeContext
45
+ ) -> List[str]:
46
+ input_var = context.get_input_tileable_variable(op.inputs[0])
47
+ output_var = context.get_output_tileable_variable(op.outputs[0])
48
+ index_var = self.translate_var(context, op.query_index)
49
+ output_name_var = self.translate_var(context, op.outputs[0].name)
50
+ ignore_index_error_var = self.translate_var(context, op.ignore_index_error)
51
+ output_dtype_var = context.register_operator_constants(op.outputs[0].dtype)
52
+ return [
53
+ _get_template.format(
54
+ input_var=input_var,
55
+ output_var=output_var,
56
+ index_var=index_var,
57
+ ignore_index_error_var=ignore_index_error_var,
58
+ output_name_var=output_name_var,
59
+ output_dtype_var=output_dtype_var,
60
+ )
61
+ ]
62
+
63
+
64
+ @register_op_adapter(SeriesListLengthOperator)
65
+ class SeriesListLengthOperatorAdapter(SPEOperatorAdapter):
66
+ def generate_code(
67
+ self, op: SeriesListLengthOperator, context: SPECodeContext
68
+ ) -> List[str]:
69
+ input_var = context.get_input_tileable_variable(op.inputs[0])
70
+ output_var = context.get_output_tileable_variable(op.outputs[0])
71
+ output_name_var = self.translate_var(context, op.outputs[0].name)
72
+ output_dtype_var = context.register_operator_constants(op.outputs[0].dtype)
73
+ return [
74
+ _length_template.format(
75
+ input_var=input_var,
76
+ output_var=output_var,
77
+ output_name_var=output_name_var,
78
+ output_dtype_var=output_dtype_var,
79
+ )
80
+ ]
@@ -0,0 +1,84 @@
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from typing import Dict, List, Type
16
+
17
+ from ....core import ENTITY_TYPE
18
+ from ....dataframe.arithmetic import (
19
+ DataFrameAnd,
20
+ DataFrameAround,
21
+ DataFrameOr,
22
+ DataFrameXor,
23
+ )
24
+ from ....dataframe.arithmetic.core import DataFrameBinOp, DataFrameUnaryOp
25
+ from ....dataframe.core import SERIES_TYPE
26
+ from ..core import SPECodeContext, SPEOperatorAdapter, register_op_adapter
27
+
28
+
29
+ @register_op_adapter(DataFrameUnaryOp)
30
+ class DataFrameUnaryFuncAdapter(SPEOperatorAdapter):
31
+ def generate_code(self, op: DataFrameUnaryOp, context: SPECodeContext) -> List[str]:
32
+ context.register_import("numpy", "np")
33
+
34
+ inp_var = context.get_input_tileable_variable(op.inputs[0])
35
+ res_var_name = context.get_output_tileable_variable(op.outputs[0])
36
+ func = getattr(op, "_func_name")
37
+ if isinstance(op, DataFrameAround):
38
+ decimals_var = self.translate_var(context, op.decimals)
39
+ return [f"{res_var_name} = {inp_var}.round({decimals_var})"]
40
+ else:
41
+ return [f"{res_var_name} = np.{func}({inp_var})"]
42
+
43
+
44
+ @register_op_adapter(DataFrameBinOp)
45
+ class DataFrameBinOpAdapter(SPEOperatorAdapter):
46
+ def generate_code(self, op: DataFrameBinOp, context: SPECodeContext) -> List[str]:
47
+ use_reversed = not isinstance(op.lhs, ENTITY_TYPE)
48
+ kw = {}
49
+ for arg in ("axis", "level", "fill_value"):
50
+ if getattr(op, arg, None) is not None:
51
+ kw[arg] = getattr(op, arg)
52
+ if isinstance(op.inputs[0], SERIES_TYPE) and "axis" in kw:
53
+ kw.pop("axis")
54
+
55
+ if use_reversed:
56
+ func = getattr(op, "_rfunc_name")
57
+ inst, arg = op.rhs, op.lhs
58
+ else:
59
+ func = getattr(op, "_func_name")
60
+ inst, arg = op.lhs, op.rhs
61
+
62
+ inst_var_name = context.get_input_tileable_variable(inst)
63
+ args_list = self._translate_call_args(context, arg, **kw)
64
+ args = ", ".join(args_list)
65
+ res_var_name = context.get_output_tileable_variable(op.outputs[0])
66
+ return [f"{res_var_name} = {inst_var_name}.{func}({args})"]
67
+
68
+
69
+ @register_op_adapter([DataFrameAnd, DataFrameOr, DataFrameXor])
70
+ class DataFrameBitwiseBinOpAdapter(SPEOperatorAdapter):
71
+ _python_op: Dict[Type[DataFrameBinOp], str] = {
72
+ DataFrameAnd: "&",
73
+ DataFrameOr: "|",
74
+ DataFrameXor: "^",
75
+ }
76
+
77
+ def generate_code(self, op: DataFrameBinOp, context: SPECodeContext) -> List[str]:
78
+ lhs, rhs = (
79
+ (op.lhs, op.rhs) if isinstance(op.lhs, ENTITY_TYPE) else (op.rhs, op.lhs)
80
+ )
81
+ left_var = context.get_input_tileable_variable(lhs)
82
+ res_var = context.get_output_tileable_variable(op.outputs[0])
83
+ right_var = self._translate_call_args(context, rhs)[0]
84
+ return [f"{res_var} = {left_var} {self._python_op[type(op)]} {right_var}"]
@@ -0,0 +1,181 @@
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from typing import List, Optional
16
+
17
+ import numpy as np
18
+ import pandas as pd
19
+ import pyarrow as pa
20
+ from odps import ODPS
21
+
22
+ from ....dataframe.datasource.dataframe import DataFrameDataSource
23
+ from ....dataframe.datasource.date_range import DataFrameDateRange
24
+ from ....dataframe.datasource.from_records import DataFrameFromRecords
25
+ from ....dataframe.datasource.from_tensor import DataFrameFromTensor, SeriesFromTensor
26
+ from ....dataframe.datasource.index import IndexDataSource
27
+ from ....dataframe.datasource.read_odps_table import DataFrameReadODPSTable
28
+ from ....io.odpsio import ODPSTableIO, arrow_to_pandas
29
+ from ....protocol import DataFrameTableMeta
30
+ from ..core import SPECodeContext, SPEOperatorAdapter, register_op_adapter
31
+
32
+
33
+ @register_op_adapter(DataFrameDataSource)
34
+ class DataFrameDataSourceAdapter(SPEOperatorAdapter):
35
+ def generate_code(
36
+ self, op: DataFrameDataSource, context: SPECodeContext
37
+ ) -> List[str]:
38
+ data_var = context.register_operator_constants(op.data)
39
+ res_var_name = context.get_output_tileable_variable(op.outputs[0])
40
+ return [f"{res_var_name} = {data_var}"]
41
+
42
+
43
+ @register_op_adapter(DataFrameDateRange)
44
+ class DataFrameDateRangeAdapter(SPEOperatorAdapter):
45
+ def generate_code(
46
+ self, op: DataFrameDateRange, context: SPECodeContext
47
+ ) -> List[str]:
48
+ context.register_import("pandas", "pd")
49
+
50
+ kw_keys = [
51
+ "start",
52
+ "end",
53
+ "periods",
54
+ "freq",
55
+ "tz",
56
+ "normalize",
57
+ "name",
58
+ "inclusive",
59
+ ]
60
+ args = self.generate_call_args_with_attributes(
61
+ op, context, kw_keys=kw_keys, skip_none=True
62
+ )
63
+ res_var_name = context.get_output_tileable_variable(op.outputs[0])
64
+ return [f"{res_var_name} = pd.date_range({args})"]
65
+
66
+
67
+ @register_op_adapter(DataFrameFromRecords)
68
+ class DataFrameFromRecordsAdapter(SPEOperatorAdapter):
69
+ def generate_code(
70
+ self, op: DataFrameFromRecords, context: SPECodeContext
71
+ ) -> List[str]:
72
+ context.register_import("pandas", "pd")
73
+
74
+ args = self.generate_call_args_with_attributes(
75
+ op,
76
+ context,
77
+ "input",
78
+ kw_keys=["columns", "exclude", "coerce_float", "nrows"],
79
+ skip_none=True,
80
+ )
81
+ res_var_name = context.get_output_tileable_variable(op.outputs[0])
82
+ return [f"{res_var_name} = pd.DataFrame.from_records({args})"]
83
+
84
+
85
+ @register_op_adapter(DataFrameFromTensor)
86
+ class DataFrameFromTensorAdapter(SPEOperatorAdapter):
87
+ def generate_code(
88
+ self, op: DataFrameFromTensor, context: SPECodeContext
89
+ ) -> List[str]:
90
+ context.register_import("pandas", "pd")
91
+
92
+ args = self.generate_call_args_with_attributes(
93
+ op, context, "input", kw_keys=["index", "columns"], skip_none=True
94
+ )
95
+ res_var_name = context.get_output_tileable_variable(op.outputs[0])
96
+ return [f"{res_var_name} = pd.DataFrame({args})"]
97
+
98
+
99
+ @register_op_adapter(DataFrameReadODPSTable)
100
+ class DataFrameReadODPSTableAdapter(SPEOperatorAdapter):
101
+ @staticmethod
102
+ def _read_as_pandas(
103
+ table_name: str,
104
+ partitions: Optional[List[str]],
105
+ columns: Optional[List[str]],
106
+ index_columns: Optional[List[str]],
107
+ append_partitions: bool,
108
+ table_meta: DataFrameTableMeta,
109
+ ):
110
+ o = ODPS.from_environments() or ODPS.from_global()
111
+
112
+ if columns is not None:
113
+ all_cols = (index_columns or []) + (columns or [])
114
+ else:
115
+ all_cols = None
116
+
117
+ with ODPSTableIO(o).open_reader(
118
+ table_name, partitions, all_cols, partition_columns=append_partitions
119
+ ) as reader:
120
+ arrow_result = reader.read_all()
121
+ if not index_columns:
122
+ # need prepending an index column
123
+ arrow_result = arrow_result.add_column(
124
+ 0,
125
+ table_meta.table_index_column_names[0],
126
+ pa.array(np.arange(len(arrow_result))),
127
+ )
128
+ else:
129
+ name_mapping = dict(zip(index_columns, table_meta.table_index_column_names))
130
+ new_names = [name_mapping.get(c, c) for c in arrow_result.column_names]
131
+ arrow_result = arrow_result.rename_columns(new_names)
132
+
133
+ res = arrow_to_pandas(arrow_result, table_meta)
134
+ if not index_columns:
135
+ res.index = pd.RangeIndex(len(arrow_result))
136
+ return res
137
+
138
+ def generate_code(
139
+ self, op: DataFrameReadODPSTable, context: SPECodeContext
140
+ ) -> List[str]:
141
+ table_meta = context.get_pandas_data_table_meta(op.outputs[0])
142
+
143
+ cls_name = type(self).__name__
144
+ context.register_import(__name__, from_item=cls_name)
145
+ res_var_name = context.get_output_tileable_variable(op.outputs[0])
146
+ args = self._translate_call_args(
147
+ context,
148
+ op.table_name,
149
+ op.partitions,
150
+ op.columns,
151
+ op.index_columns,
152
+ op.append_partitions,
153
+ table_meta,
154
+ )
155
+ return [f"{res_var_name} = {cls_name}._read_as_pandas({', '.join(args)})"]
156
+
157
+
158
+ @register_op_adapter(SeriesFromTensor)
159
+ class SeriesFromTensorAdapter(SPEOperatorAdapter):
160
+ def generate_code(self, op: SeriesFromTensor, context: SPECodeContext) -> List[str]:
161
+ context.register_import("pandas", "pd")
162
+ tensor_var_name = context.get_input_tileable_variable(op.input)
163
+ call_args = self._translate_call_args(
164
+ context,
165
+ index=op.index,
166
+ name=op.outputs[0].name,
167
+ dtype=op.outputs[0].dtype,
168
+ )
169
+ res_var_name = context.get_output_tileable_variable(op.outputs[0])
170
+ return [
171
+ f"{res_var_name} = pd.Series({tensor_var_name}, {', '.join(call_args)})"
172
+ ]
173
+
174
+
175
+ @register_op_adapter(IndexDataSource)
176
+ class IndexDataSourceAdapter(SPEOperatorAdapter):
177
+ def generate_code(self, op: IndexDataSource, context: SPECodeContext) -> List[str]:
178
+ context.register_import("pandas")
179
+ data_var = self.translate_var(context, op.data)
180
+ res_var = context.get_output_tileable_variable(op.outputs[0])
181
+ return [f"{res_var} = {data_var}"]