maxframe 1.3.0__cp38-cp38-win_amd64.whl → 2.0.0b1__cp38-cp38-win_amd64.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 (643) hide show
  1. maxframe/_utils.cp38-win_amd64.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-win_amd64.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 +33 -3
  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 +33 -0
  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 +8 -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 +22 -48
  264. maxframe/learn/__init__.py +2 -2
  265. maxframe/learn/contrib/__init__.py +2 -2
  266. maxframe/learn/contrib/graph/connected_components.py +2 -1
  267. maxframe/learn/contrib/lightgbm/__init__.py +33 -0
  268. maxframe/learn/contrib/lightgbm/_predict.py +138 -0
  269. maxframe/learn/contrib/lightgbm/_train.py +163 -0
  270. maxframe/learn/contrib/lightgbm/callback.py +114 -0
  271. maxframe/learn/contrib/lightgbm/classifier.py +199 -0
  272. maxframe/learn/contrib/lightgbm/core.py +372 -0
  273. maxframe/learn/contrib/lightgbm/dataset.py +153 -0
  274. maxframe/learn/contrib/lightgbm/regressor.py +29 -0
  275. maxframe/learn/contrib/lightgbm/tests/__init__.py +13 -0
  276. maxframe/learn/contrib/lightgbm/tests/test_callback.py +58 -0
  277. maxframe/learn/contrib/llm/models/dashscope.py +34 -0
  278. maxframe/learn/contrib/llm/models/managed.py +15 -0
  279. maxframe/learn/contrib/llm/multi_modal.py +92 -0
  280. maxframe/learn/contrib/llm/text.py +21 -5
  281. maxframe/learn/contrib/models.py +38 -9
  282. maxframe/learn/contrib/utils.py +55 -0
  283. maxframe/learn/contrib/xgboost/callback.py +86 -0
  284. maxframe/learn/contrib/xgboost/classifier.py +26 -30
  285. maxframe/learn/contrib/xgboost/core.py +53 -42
  286. maxframe/learn/contrib/xgboost/dmatrix.py +19 -12
  287. maxframe/learn/contrib/xgboost/predict.py +13 -8
  288. maxframe/learn/contrib/xgboost/regressor.py +28 -27
  289. maxframe/learn/contrib/xgboost/tests/test_callback.py +41 -0
  290. maxframe/learn/contrib/xgboost/train.py +59 -16
  291. maxframe/learn/core.py +252 -0
  292. maxframe/learn/datasets/__init__.py +20 -0
  293. maxframe/learn/datasets/samples_generator.py +628 -0
  294. maxframe/learn/linear_model/__init__.py +15 -0
  295. maxframe/learn/linear_model/_base.py +163 -0
  296. maxframe/learn/linear_model/_lin_reg.py +175 -0
  297. maxframe/learn/metrics/__init__.py +25 -0
  298. maxframe/learn/metrics/_check_targets.py +95 -0
  299. maxframe/learn/metrics/_classification.py +1121 -0
  300. maxframe/learn/metrics/_regression.py +256 -0
  301. maxframe/learn/model_selection/__init__.py +15 -0
  302. maxframe/learn/model_selection/_split.py +451 -0
  303. maxframe/learn/model_selection/tests/__init__.py +13 -0
  304. maxframe/learn/model_selection/tests/test_split.py +156 -0
  305. maxframe/learn/preprocessing/__init__.py +16 -0
  306. maxframe/learn/preprocessing/_data/__init__.py +17 -0
  307. maxframe/learn/preprocessing/_data/min_max_scaler.py +390 -0
  308. maxframe/learn/preprocessing/_data/normalize.py +127 -0
  309. maxframe/learn/preprocessing/_data/standard_scaler.py +503 -0
  310. maxframe/learn/preprocessing/_data/utils.py +79 -0
  311. maxframe/learn/preprocessing/_label/__init__.py +16 -0
  312. maxframe/learn/preprocessing/_label/_label_binarizer.py +599 -0
  313. maxframe/learn/preprocessing/_label/_label_encoder.py +174 -0
  314. maxframe/learn/utils/__init__.py +4 -0
  315. maxframe/learn/utils/_encode.py +314 -0
  316. maxframe/learn/utils/checks.py +161 -0
  317. maxframe/learn/utils/core.py +33 -0
  318. maxframe/learn/utils/extmath.py +176 -0
  319. maxframe/learn/utils/multiclass.py +292 -0
  320. maxframe/learn/utils/shuffle.py +114 -0
  321. maxframe/learn/utils/sparsefuncs.py +87 -0
  322. maxframe/learn/utils/validation.py +775 -0
  323. maxframe/lib/__init__.py +0 -2
  324. maxframe/lib/compat.py +145 -0
  325. maxframe/lib/filesystem/_oss_lib/glob.py +1 -1
  326. maxframe/lib/mmh3.cp38-win_amd64.pyd +0 -0
  327. maxframe/lib/sparse/__init__.py +10 -15
  328. maxframe/lib/sparse/array.py +45 -33
  329. maxframe/lib/sparse/core.py +0 -2
  330. maxframe/lib/sparse/linalg.py +31 -0
  331. maxframe/lib/sparse/matrix.py +5 -2
  332. maxframe/lib/sparse/tests/__init__.py +0 -2
  333. maxframe/lib/sparse/tests/test_sparse.py +53 -53
  334. maxframe/lib/sparse/vector.py +0 -2
  335. maxframe/mixin.py +59 -2
  336. maxframe/opcodes.py +13 -5
  337. maxframe/protocol.py +67 -14
  338. maxframe/remote/core.py +16 -14
  339. maxframe/remote/run_script.py +6 -3
  340. maxframe/serialization/__init__.py +2 -0
  341. maxframe/serialization/core.cp38-win_amd64.pyd +0 -0
  342. maxframe/serialization/core.pxd +3 -0
  343. maxframe/serialization/core.pyi +3 -1
  344. maxframe/serialization/core.pyx +82 -4
  345. maxframe/serialization/pandas.py +5 -1
  346. maxframe/serialization/serializables/core.py +6 -5
  347. maxframe/serialization/serializables/field.py +2 -2
  348. maxframe/serialization/serializables/tests/test_field_type.py +3 -5
  349. maxframe/serialization/tests/test_serial.py +27 -0
  350. maxframe/session.py +4 -71
  351. maxframe/sperunner.py +165 -0
  352. maxframe/tensor/__init__.py +35 -2
  353. maxframe/tensor/arithmetic/__init__.py +2 -4
  354. maxframe/tensor/arithmetic/abs.py +0 -2
  355. maxframe/tensor/arithmetic/absolute.py +0 -2
  356. maxframe/tensor/arithmetic/add.py +34 -4
  357. maxframe/tensor/arithmetic/angle.py +0 -2
  358. maxframe/tensor/arithmetic/arccos.py +1 -4
  359. maxframe/tensor/arithmetic/arccosh.py +1 -3
  360. maxframe/tensor/arithmetic/arcsin.py +0 -2
  361. maxframe/tensor/arithmetic/arcsinh.py +0 -2
  362. maxframe/tensor/arithmetic/arctan.py +0 -2
  363. maxframe/tensor/arithmetic/arctan2.py +0 -2
  364. maxframe/tensor/arithmetic/arctanh.py +0 -2
  365. maxframe/tensor/arithmetic/around.py +0 -2
  366. maxframe/tensor/arithmetic/bitand.py +0 -2
  367. maxframe/tensor/arithmetic/bitor.py +1 -3
  368. maxframe/tensor/arithmetic/bitxor.py +1 -3
  369. maxframe/tensor/arithmetic/cbrt.py +0 -2
  370. maxframe/tensor/arithmetic/ceil.py +0 -2
  371. maxframe/tensor/arithmetic/clip.py +13 -13
  372. maxframe/tensor/arithmetic/conj.py +0 -2
  373. maxframe/tensor/arithmetic/copysign.py +0 -2
  374. maxframe/tensor/arithmetic/core.py +47 -39
  375. maxframe/tensor/arithmetic/cos.py +1 -3
  376. maxframe/tensor/arithmetic/cosh.py +0 -2
  377. maxframe/tensor/arithmetic/deg2rad.py +0 -2
  378. maxframe/tensor/arithmetic/degrees.py +0 -2
  379. maxframe/tensor/arithmetic/divide.py +0 -2
  380. maxframe/tensor/arithmetic/equal.py +0 -2
  381. maxframe/tensor/arithmetic/exp.py +1 -3
  382. maxframe/tensor/arithmetic/exp2.py +0 -2
  383. maxframe/tensor/arithmetic/expm1.py +0 -2
  384. maxframe/tensor/arithmetic/fabs.py +0 -2
  385. maxframe/tensor/arithmetic/fix.py +0 -2
  386. maxframe/tensor/arithmetic/float_power.py +0 -2
  387. maxframe/tensor/arithmetic/floor.py +0 -2
  388. maxframe/tensor/arithmetic/floordiv.py +0 -2
  389. maxframe/tensor/arithmetic/fmax.py +0 -2
  390. maxframe/tensor/arithmetic/fmin.py +0 -2
  391. maxframe/tensor/arithmetic/fmod.py +0 -2
  392. maxframe/tensor/arithmetic/frexp.py +6 -2
  393. maxframe/tensor/arithmetic/greater.py +0 -2
  394. maxframe/tensor/arithmetic/greater_equal.py +0 -2
  395. maxframe/tensor/arithmetic/hypot.py +0 -2
  396. maxframe/tensor/arithmetic/i0.py +1 -3
  397. maxframe/tensor/arithmetic/imag.py +0 -2
  398. maxframe/tensor/arithmetic/invert.py +1 -3
  399. maxframe/tensor/arithmetic/isclose.py +0 -2
  400. maxframe/tensor/arithmetic/iscomplex.py +0 -2
  401. maxframe/tensor/arithmetic/isfinite.py +1 -3
  402. maxframe/tensor/arithmetic/isinf.py +0 -2
  403. maxframe/tensor/arithmetic/isnan.py +0 -2
  404. maxframe/tensor/arithmetic/isreal.py +0 -2
  405. maxframe/tensor/arithmetic/ldexp.py +0 -2
  406. maxframe/tensor/arithmetic/less.py +0 -2
  407. maxframe/tensor/arithmetic/less_equal.py +0 -2
  408. maxframe/tensor/arithmetic/log.py +1 -3
  409. maxframe/tensor/arithmetic/log10.py +1 -3
  410. maxframe/tensor/arithmetic/log1p.py +1 -3
  411. maxframe/tensor/arithmetic/log2.py +1 -3
  412. maxframe/tensor/arithmetic/logaddexp.py +0 -2
  413. maxframe/tensor/arithmetic/logaddexp2.py +0 -2
  414. maxframe/tensor/arithmetic/logical_and.py +0 -2
  415. maxframe/tensor/arithmetic/logical_not.py +1 -3
  416. maxframe/tensor/arithmetic/logical_or.py +0 -2
  417. maxframe/tensor/arithmetic/logical_xor.py +0 -2
  418. maxframe/tensor/arithmetic/lshift.py +0 -2
  419. maxframe/tensor/arithmetic/maximum.py +0 -2
  420. maxframe/tensor/arithmetic/minimum.py +0 -2
  421. maxframe/tensor/arithmetic/mod.py +0 -2
  422. maxframe/tensor/arithmetic/modf.py +6 -2
  423. maxframe/tensor/arithmetic/multiply.py +37 -4
  424. maxframe/tensor/arithmetic/nan_to_num.py +0 -2
  425. maxframe/tensor/arithmetic/negative.py +0 -2
  426. maxframe/tensor/arithmetic/nextafter.py +0 -2
  427. maxframe/tensor/arithmetic/not_equal.py +0 -2
  428. maxframe/tensor/arithmetic/positive.py +0 -2
  429. maxframe/tensor/arithmetic/power.py +0 -2
  430. maxframe/tensor/arithmetic/rad2deg.py +0 -2
  431. maxframe/tensor/arithmetic/radians.py +0 -2
  432. maxframe/tensor/arithmetic/real.py +0 -2
  433. maxframe/tensor/arithmetic/reciprocal.py +5 -3
  434. maxframe/tensor/arithmetic/rint.py +1 -3
  435. maxframe/tensor/arithmetic/rshift.py +0 -2
  436. maxframe/tensor/arithmetic/setimag.py +0 -2
  437. maxframe/tensor/arithmetic/setreal.py +0 -2
  438. maxframe/tensor/arithmetic/sign.py +0 -2
  439. maxframe/tensor/arithmetic/signbit.py +0 -2
  440. maxframe/tensor/arithmetic/sin.py +0 -2
  441. maxframe/tensor/arithmetic/sinc.py +1 -3
  442. maxframe/tensor/arithmetic/sinh.py +0 -2
  443. maxframe/tensor/arithmetic/spacing.py +0 -2
  444. maxframe/tensor/arithmetic/sqrt.py +0 -2
  445. maxframe/tensor/arithmetic/square.py +0 -2
  446. maxframe/tensor/arithmetic/subtract.py +4 -2
  447. maxframe/tensor/arithmetic/tan.py +0 -2
  448. maxframe/tensor/arithmetic/tanh.py +0 -2
  449. maxframe/tensor/arithmetic/tests/__init__.py +0 -2
  450. maxframe/tensor/arithmetic/tests/test_arithmetic.py +43 -9
  451. maxframe/tensor/arithmetic/truediv.py +0 -2
  452. maxframe/tensor/arithmetic/trunc.py +0 -2
  453. maxframe/tensor/arithmetic/utils.py +32 -6
  454. maxframe/tensor/array_utils.py +3 -25
  455. maxframe/tensor/core.py +6 -6
  456. maxframe/tensor/datasource/__init__.py +10 -2
  457. maxframe/tensor/datasource/arange.py +0 -2
  458. maxframe/tensor/datasource/array.py +3 -22
  459. maxframe/tensor/datasource/core.py +15 -10
  460. maxframe/tensor/datasource/diag.py +140 -0
  461. maxframe/tensor/datasource/diagflat.py +69 -0
  462. maxframe/tensor/datasource/empty.py +0 -2
  463. maxframe/tensor/datasource/eye.py +95 -0
  464. maxframe/tensor/datasource/from_dataframe.py +0 -2
  465. maxframe/tensor/datasource/from_dense.py +0 -17
  466. maxframe/tensor/datasource/from_sparse.py +0 -2
  467. maxframe/tensor/datasource/full.py +0 -2
  468. maxframe/tensor/datasource/identity.py +54 -0
  469. maxframe/tensor/datasource/indices.py +115 -0
  470. maxframe/tensor/datasource/linspace.py +140 -0
  471. maxframe/tensor/datasource/meshgrid.py +135 -0
  472. maxframe/tensor/datasource/ones.py +8 -3
  473. maxframe/tensor/datasource/tests/test_datasource.py +32 -1
  474. maxframe/tensor/datasource/tri_array.py +107 -0
  475. maxframe/tensor/datasource/zeros.py +7 -3
  476. maxframe/tensor/extensions/__init__.py +31 -0
  477. maxframe/tensor/extensions/accessor.py +25 -0
  478. maxframe/tensor/extensions/apply_chunk.py +137 -0
  479. maxframe/tensor/indexing/__init__.py +1 -1
  480. maxframe/tensor/indexing/choose.py +8 -6
  481. maxframe/tensor/indexing/compress.py +0 -2
  482. maxframe/tensor/indexing/extract.py +0 -2
  483. maxframe/tensor/indexing/fill_diagonal.py +9 -6
  484. maxframe/tensor/indexing/flatnonzero.py +1 -3
  485. maxframe/tensor/indexing/getitem.py +10 -43
  486. maxframe/tensor/indexing/nonzero.py +2 -4
  487. maxframe/tensor/indexing/setitem.py +19 -9
  488. maxframe/tensor/indexing/slice.py +6 -3
  489. maxframe/tensor/indexing/take.py +0 -2
  490. maxframe/tensor/indexing/tests/__init__.py +0 -2
  491. maxframe/tensor/indexing/tests/test_indexing.py +0 -2
  492. maxframe/tensor/indexing/unravel_index.py +6 -6
  493. maxframe/tensor/lib/__init__.py +16 -0
  494. maxframe/tensor/lib/index_tricks.py +404 -0
  495. maxframe/tensor/linalg/__init__.py +36 -0
  496. maxframe/tensor/linalg/dot.py +145 -0
  497. maxframe/tensor/linalg/inner.py +36 -0
  498. maxframe/tensor/linalg/inv.py +83 -0
  499. maxframe/tensor/linalg/lu.py +115 -0
  500. maxframe/tensor/linalg/matmul.py +225 -0
  501. maxframe/tensor/linalg/qr.py +124 -0
  502. maxframe/tensor/linalg/solve_triangular.py +103 -0
  503. maxframe/tensor/linalg/svd.py +167 -0
  504. maxframe/tensor/linalg/tensordot.py +213 -0
  505. maxframe/tensor/linalg/vdot.py +73 -0
  506. maxframe/tensor/merge/__init__.py +4 -0
  507. maxframe/tensor/merge/append.py +74 -0
  508. maxframe/tensor/merge/column_stack.py +63 -0
  509. maxframe/tensor/merge/concatenate.py +3 -2
  510. maxframe/tensor/merge/dstack.py +71 -0
  511. maxframe/tensor/merge/hstack.py +70 -0
  512. maxframe/tensor/merge/stack.py +0 -2
  513. maxframe/tensor/merge/tests/test_merge.py +0 -2
  514. maxframe/tensor/misc/__init__.py +18 -5
  515. maxframe/tensor/misc/astype.py +10 -8
  516. maxframe/tensor/misc/broadcast_to.py +1 -1
  517. maxframe/tensor/misc/copy.py +64 -0
  518. maxframe/tensor/misc/diff.py +115 -0
  519. maxframe/tensor/misc/flatten.py +63 -0
  520. maxframe/tensor/misc/in1d.py +94 -0
  521. maxframe/tensor/misc/isin.py +130 -0
  522. maxframe/tensor/misc/ndim.py +53 -0
  523. maxframe/tensor/misc/ravel.py +0 -2
  524. maxframe/tensor/misc/repeat.py +129 -0
  525. maxframe/tensor/misc/searchsorted.py +147 -0
  526. maxframe/tensor/misc/setdiff1d.py +58 -0
  527. maxframe/tensor/misc/squeeze.py +117 -0
  528. maxframe/tensor/misc/swapaxes.py +113 -0
  529. maxframe/tensor/misc/tests/test_misc.py +0 -2
  530. maxframe/tensor/misc/transpose.py +8 -4
  531. maxframe/tensor/misc/trapezoid.py +123 -0
  532. maxframe/tensor/misc/unique.py +0 -1
  533. maxframe/tensor/misc/where.py +10 -8
  534. maxframe/tensor/operators.py +0 -34
  535. maxframe/tensor/random/__init__.py +3 -5
  536. maxframe/tensor/random/binomial.py +0 -2
  537. maxframe/tensor/random/bytes.py +0 -2
  538. maxframe/tensor/random/chisquare.py +0 -2
  539. maxframe/tensor/random/choice.py +9 -8
  540. maxframe/tensor/random/core.py +20 -5
  541. maxframe/tensor/random/dirichlet.py +0 -2
  542. maxframe/tensor/random/exponential.py +0 -2
  543. maxframe/tensor/random/f.py +2 -4
  544. maxframe/tensor/random/gamma.py +0 -2
  545. maxframe/tensor/random/geometric.py +0 -2
  546. maxframe/tensor/random/gumbel.py +0 -2
  547. maxframe/tensor/random/hypergeometric.py +0 -2
  548. maxframe/tensor/random/laplace.py +2 -4
  549. maxframe/tensor/random/logistic.py +0 -2
  550. maxframe/tensor/random/lognormal.py +0 -2
  551. maxframe/tensor/random/logseries.py +0 -2
  552. maxframe/tensor/random/multinomial.py +0 -2
  553. maxframe/tensor/random/multivariate_normal.py +0 -2
  554. maxframe/tensor/random/negative_binomial.py +0 -2
  555. maxframe/tensor/random/noncentral_chisquare.py +0 -2
  556. maxframe/tensor/random/noncentral_f.py +1 -3
  557. maxframe/tensor/random/normal.py +0 -2
  558. maxframe/tensor/random/pareto.py +0 -2
  559. maxframe/tensor/random/permutation.py +6 -3
  560. maxframe/tensor/random/poisson.py +0 -2
  561. maxframe/tensor/random/power.py +0 -2
  562. maxframe/tensor/random/rand.py +0 -2
  563. maxframe/tensor/random/randint.py +0 -2
  564. maxframe/tensor/random/randn.py +0 -2
  565. maxframe/tensor/random/random_integers.py +0 -2
  566. maxframe/tensor/random/random_sample.py +0 -2
  567. maxframe/tensor/random/rayleigh.py +0 -2
  568. maxframe/tensor/random/standard_cauchy.py +0 -2
  569. maxframe/tensor/random/standard_exponential.py +0 -2
  570. maxframe/tensor/random/standard_gamma.py +0 -2
  571. maxframe/tensor/random/standard_normal.py +0 -2
  572. maxframe/tensor/random/standard_t.py +0 -2
  573. maxframe/tensor/random/tests/__init__.py +0 -2
  574. maxframe/tensor/random/tests/test_random.py +0 -2
  575. maxframe/tensor/random/triangular.py +0 -2
  576. maxframe/tensor/random/uniform.py +0 -2
  577. maxframe/tensor/random/vonmises.py +0 -2
  578. maxframe/tensor/random/wald.py +0 -2
  579. maxframe/tensor/random/weibull.py +0 -2
  580. maxframe/tensor/random/zipf.py +0 -2
  581. maxframe/tensor/reduction/__init__.py +0 -2
  582. maxframe/tensor/reduction/all.py +0 -2
  583. maxframe/tensor/reduction/allclose.py +0 -2
  584. maxframe/tensor/reduction/any.py +0 -2
  585. maxframe/tensor/reduction/argmax.py +1 -3
  586. maxframe/tensor/reduction/argmin.py +1 -3
  587. maxframe/tensor/reduction/array_equal.py +0 -2
  588. maxframe/tensor/reduction/core.py +0 -2
  589. maxframe/tensor/reduction/count_nonzero.py +0 -2
  590. maxframe/tensor/reduction/cumprod.py +0 -2
  591. maxframe/tensor/reduction/cumsum.py +0 -2
  592. maxframe/tensor/reduction/max.py +0 -2
  593. maxframe/tensor/reduction/mean.py +0 -2
  594. maxframe/tensor/reduction/min.py +0 -2
  595. maxframe/tensor/reduction/nanargmax.py +0 -2
  596. maxframe/tensor/reduction/nanargmin.py +0 -2
  597. maxframe/tensor/reduction/nancumprod.py +0 -2
  598. maxframe/tensor/reduction/nancumsum.py +0 -2
  599. maxframe/tensor/reduction/nanmax.py +0 -2
  600. maxframe/tensor/reduction/nanmean.py +0 -2
  601. maxframe/tensor/reduction/nanmin.py +0 -2
  602. maxframe/tensor/reduction/nanprod.py +0 -2
  603. maxframe/tensor/reduction/nanstd.py +0 -2
  604. maxframe/tensor/reduction/nansum.py +0 -2
  605. maxframe/tensor/reduction/nanvar.py +0 -2
  606. maxframe/tensor/reduction/prod.py +0 -2
  607. maxframe/tensor/reduction/std.py +0 -2
  608. maxframe/tensor/reduction/sum.py +0 -2
  609. maxframe/tensor/reduction/tests/test_reduction.py +1 -4
  610. maxframe/tensor/reduction/var.py +0 -2
  611. maxframe/tensor/reshape/__init__.py +0 -2
  612. maxframe/tensor/reshape/reshape.py +6 -5
  613. maxframe/tensor/reshape/tests/__init__.py +0 -2
  614. maxframe/tensor/reshape/tests/test_reshape.py +0 -2
  615. maxframe/tensor/sort/__init__.py +16 -0
  616. maxframe/tensor/sort/argsort.py +150 -0
  617. maxframe/tensor/sort/sort.py +295 -0
  618. maxframe/tensor/special/__init__.py +37 -0
  619. maxframe/tensor/special/core.py +38 -0
  620. maxframe/tensor/special/misc.py +142 -0
  621. maxframe/tensor/special/statistical.py +56 -0
  622. maxframe/tensor/statistics/__init__.py +5 -0
  623. maxframe/tensor/statistics/average.py +143 -0
  624. maxframe/tensor/statistics/bincount.py +133 -0
  625. maxframe/tensor/statistics/quantile.py +10 -8
  626. maxframe/tensor/ufunc/__init__.py +0 -2
  627. maxframe/tensor/ufunc/ufunc.py +0 -2
  628. maxframe/tensor/utils.py +21 -3
  629. maxframe/tests/test_protocol.py +3 -3
  630. maxframe/tests/test_utils.py +210 -1
  631. maxframe/tests/utils.py +67 -1
  632. maxframe/udf.py +76 -6
  633. maxframe/utils.py +418 -17
  634. {maxframe-1.3.0.dist-info → maxframe-2.0.0b1.dist-info}/METADATA +5 -1
  635. maxframe-2.0.0b1.dist-info/RECORD +939 -0
  636. maxframe_client/clients/framedriver.py +19 -3
  637. maxframe_client/fetcher.py +113 -6
  638. maxframe_client/session/odps.py +173 -38
  639. maxframe_client/session/task.py +3 -1
  640. maxframe_client/tests/test_session.py +41 -5
  641. maxframe-1.3.0.dist-info/RECORD +0 -705
  642. {maxframe-1.3.0.dist-info → maxframe-2.0.0b1.dist-info}/WHEEL +0 -0
  643. {maxframe-1.3.0.dist-info → maxframe-2.0.0b1.dist-info}/top_level.txt +0 -0
@@ -13,10 +13,9 @@
13
13
  # limitations under the License.
14
14
 
15
15
  import inspect
16
- from typing import Any, Union
16
+ from typing import Any, MutableMapping, Union
17
17
 
18
18
  import numpy as np
19
- import pandas as pd
20
19
  from pandas import DataFrame, Series
21
20
 
22
21
  from ... import opcodes
@@ -30,14 +29,15 @@ from ...serialization.serializables import (
30
29
  StringField,
31
30
  TupleField,
32
31
  )
33
- from ...utils import get_func_token, quiet_stdio, tokenize
32
+ from ...udf import BuiltinFunction, MarkedFunction
33
+ from ...utils import copy_if_possible, get_func_token, make_dtype, make_dtypes, tokenize
34
34
  from ..operators import DataFrameOperator, DataFrameOperatorMixin
35
35
  from ..utils import (
36
+ InferredDataFrameMeta,
36
37
  build_df,
37
38
  build_series,
38
39
  copy_func_scheduling_hints,
39
- make_dtype,
40
- make_dtypes,
40
+ infer_dataframe_return_value,
41
41
  pack_func_args,
42
42
  parse_index,
43
43
  validate_axis,
@@ -60,10 +60,11 @@ class ApplyOperandLogicKeyGeneratorMixin(OperatorLogicKeyGeneratorMixin):
60
60
  return token_values
61
61
 
62
62
 
63
- class ApplyOperator(
63
+ class DataFrameApply(
64
64
  DataFrameOperator, DataFrameOperatorMixin, ApplyOperandLogicKeyGeneratorMixin
65
65
  ):
66
66
  _op_type_ = opcodes.APPLY
67
+ _legacy_name = "ApplyOperator"
67
68
 
68
69
  func = FunctionField("func")
69
70
  axis = AnyField("axis", default=0)
@@ -83,6 +84,9 @@ class ApplyOperator(
83
84
  if hasattr(self, "func"):
84
85
  copy_func_scheduling_hints(self.func, self)
85
86
 
87
+ def has_custom_code(self) -> bool:
88
+ return not isinstance(self.func, BuiltinFunction)
89
+
86
90
  def _update_key(self):
87
91
  values = [v for v in self._values_ if v is not self.func] + [
88
92
  get_func_token(self.func)
@@ -90,62 +94,48 @@ class ApplyOperator(
90
94
  self._obj_set("_key", tokenize(type(self).__name__, *values))
91
95
  return self
92
96
 
93
- def _infer_df_func_returns(self, df, dtypes, dtype=None, name=None, index=None):
97
+ def _infer_df_func_returns(
98
+ self, df, dtypes, dtype=None, name=None, index=None
99
+ ) -> InferredDataFrameMeta:
94
100
  if isinstance(self.func, np.ufunc):
95
101
  output_type = OutputType.dataframe
96
- new_dtypes = None
97
- index_value = "inherit"
98
102
  new_elementwise = True
99
103
  else:
100
- if self.output_types is not None and (
101
- dtypes is not None or dtype is not None
102
- ):
103
- ret_dtypes = dtypes if dtypes is not None else (name, dtype)
104
- ret_index_value = parse_index(index) if index is not None else None
105
- self.elementwise = False
106
- return ret_dtypes, ret_index_value
107
-
108
- output_type = new_dtypes = index_value = None
104
+ output_type = self.output_types[0] if self.output_types else None
109
105
  new_elementwise = False
110
106
 
111
- try:
112
- empty_df = build_df(df, size=2)
113
- with np.errstate(all="ignore"), quiet_stdio():
114
- infer_df = empty_df.apply(
115
- self.func,
116
- axis=self.axis,
117
- raw=self.raw,
118
- result_type=self.result_type,
119
- args=self.args,
120
- **self.kwds,
121
- )
122
- if index_value is None:
123
- if infer_df.index is empty_df.index:
124
- index_value = "inherit"
125
- else:
126
- index_value = parse_index(pd.RangeIndex(-1))
127
-
128
- if isinstance(infer_df, pd.DataFrame):
129
- output_type = output_type or OutputType.dataframe
130
- new_dtypes = new_dtypes or infer_df.dtypes
131
- else:
132
- output_type = output_type or OutputType.series
133
- new_dtypes = (name or infer_df.name, dtype or infer_df.dtype)
134
- new_elementwise = False if new_elementwise is None else new_elementwise
135
- except: # noqa: E722 # nosec
136
- pass
107
+ def infer_func(in_df):
108
+ return in_df.apply(
109
+ self.func,
110
+ axis=self.axis,
111
+ raw=self.raw,
112
+ result_type=self.result_type,
113
+ args=self.args,
114
+ **self.kwds,
115
+ )
116
+
117
+ inferred_meta = infer_dataframe_return_value(
118
+ df,
119
+ infer_func,
120
+ output_type=output_type,
121
+ dtypes=dtypes,
122
+ dtype=dtype,
123
+ name=name,
124
+ index=index,
125
+ inherit_index=True,
126
+ build_kw={"size": 2},
127
+ )
128
+ inferred_meta.check_absence("output_type", "dtypes")
137
129
 
138
130
  self.output_types = (
139
- [output_type]
140
- if not self.output_types and output_type
131
+ [inferred_meta.output_type]
132
+ if not self.output_types and inferred_meta.output_type
141
133
  else self.output_types
142
134
  )
143
- dtypes = new_dtypes if dtypes is None else dtypes
144
- index_value = index_value if index is None else parse_index(index)
145
135
  self.elementwise = (
146
136
  new_elementwise if self.elementwise is None else self.elementwise
147
137
  )
148
- return dtypes, index_value
138
+ return inferred_meta
149
139
 
150
140
  def _call_df_or_series(self, df):
151
141
  return self.new_df_or_series([df])
@@ -153,20 +143,12 @@ class ApplyOperator(
153
143
  def _call_dataframe(self, df, dtypes=None, dtype=None, name=None, index=None):
154
144
  # for backward compatibility
155
145
  dtype = dtype if dtype is not None else dtypes
156
- dtypes, index_value = self._infer_df_func_returns(
146
+ inferred_meta = self._infer_df_func_returns(
157
147
  df, dtypes, dtype=dtype, name=name, index=index
158
148
  )
149
+ index_value = inferred_meta.index_value
159
150
  if index_value is None:
160
151
  index_value = parse_index(None, (df.key, df.index_value.key))
161
- for arg, desc in zip((self.output_types, dtypes), ("output_types", "dtypes")):
162
- if arg is None:
163
- raise TypeError(
164
- f"Cannot determine {desc} by calculating with enumerate data, "
165
- "please specify it as arguments"
166
- )
167
-
168
- if index_value == "inherit":
169
- index_value = df.index_value
170
152
 
171
153
  if self.elementwise:
172
154
  shape = df.shape
@@ -174,30 +156,21 @@ class ApplyOperator(
174
156
  shape = [np.nan, np.nan]
175
157
  shape[1 - self.axis] = df.shape[1 - self.axis]
176
158
  if self.axis == 1:
177
- shape[1] = len(dtypes)
159
+ shape[1] = len(inferred_meta.dtypes)
178
160
  shape = tuple(shape)
179
161
  else:
180
162
  shape = (df.shape[1 - self.axis],)
181
163
 
182
164
  if self.output_types[0] == OutputType.dataframe:
183
- if self.axis == 0:
184
- return self.new_dataframe(
185
- [df],
186
- shape=shape,
187
- dtypes=dtypes,
188
- index_value=index_value,
189
- columns_value=parse_index(dtypes.index, store_data=True),
190
- )
191
- else:
192
- return self.new_dataframe(
193
- [df],
194
- shape=shape,
195
- dtypes=dtypes,
196
- index_value=df.index_value,
197
- columns_value=parse_index(dtypes.index, store_data=True),
198
- )
165
+ kw = dict(
166
+ shape=shape,
167
+ dtypes=inferred_meta.dtypes,
168
+ index_value=index_value if self.axis == 0 else df.index_value,
169
+ columns_value=parse_index(inferred_meta.dtypes.index, store_data=True),
170
+ )
171
+ return self.new_dataframe([df], **kw)
199
172
  else:
200
- name, dtype = dtypes
173
+ name, dtype = inferred_meta.name, inferred_meta.dtype
201
174
  return self.new_series(
202
175
  [df], shape=shape, name=name, dtype=dtype, index_value=index_value
203
176
  )
@@ -205,78 +178,58 @@ class ApplyOperator(
205
178
  def _call_series(self, series, dtypes=None, dtype=None, name=None, index=None):
206
179
  # for backward compatibility
207
180
  dtype = dtype if dtype is not None else dtypes
208
- if self.convert_dtype:
209
- if self.output_types is not None and (
210
- dtypes is not None or dtype is not None
211
- ):
212
- infer_series = test_series = None
213
- else:
214
- test_series = build_series(series, size=2, name=series.name)
215
- try:
216
- with np.errstate(all="ignore"), quiet_stdio():
217
- infer_series = test_series.apply(
218
- self.func, args=self.args, **self.kwds
219
- )
220
- except: # noqa: E722 # nosec # pylint: disable=bare-except
221
- infer_series = None
222
-
223
- output_type = self._output_types[0]
224
-
225
- if index is not None:
226
- index_value = parse_index(index)
227
- elif infer_series is not None:
228
- if infer_series.index is test_series.index:
229
- index_value = series.index_value
230
- else: # pragma: no cover
231
- index_value = parse_index(infer_series.index)
232
- else:
233
- index_value = parse_index(series.index_value)
181
+ if not self.convert_dtype:
182
+ dtype = dtype if dtype is not None else np.dtype("object")
183
+ return self.new_series(
184
+ [series],
185
+ dtype=dtype,
186
+ shape=series.shape,
187
+ index_value=series.index_value,
188
+ name=name,
189
+ )
190
+ else:
234
191
 
192
+ def infer_func(obj):
193
+ return obj.apply(self.func, args=self.args, **self.kwds)
194
+
195
+ output_type = self.output_types[0] if self.output_types else None
196
+ inferred_meta = infer_dataframe_return_value(
197
+ series,
198
+ infer_func,
199
+ output_type=output_type,
200
+ dtypes=dtypes,
201
+ dtype=dtype,
202
+ name=name,
203
+ index=index,
204
+ inherit_index=True,
205
+ build_kw={"size": 2},
206
+ )
207
+
208
+ output_type = inferred_meta.output_type or output_type
235
209
  if output_type == OutputType.dataframe:
210
+ dtypes = inferred_meta.dtypes
236
211
  if dtypes is None:
237
- if infer_series is not None and infer_series.ndim == 2:
238
- dtypes = infer_series.dtypes
239
- else:
240
- raise TypeError(
241
- "Cannot determine dtypes, "
242
- "please specify `dtypes` as argument"
243
- )
244
- columns_value = parse_index(dtypes.index, store_data=True)
245
-
212
+ raise TypeError(
213
+ "Cannot determine dtypes, please specify `dtypes` as argument"
214
+ )
246
215
  return self.new_dataframe(
247
216
  [series],
248
217
  shape=(series.shape[0], len(dtypes)),
249
- index_value=index_value,
250
- columns_value=columns_value,
251
- dtypes=dtypes,
218
+ index_value=inferred_meta.index_value,
219
+ columns_value=parse_index(
220
+ inferred_meta.dtypes.index, store_data=True
221
+ ),
222
+ dtypes=inferred_meta.dtypes,
252
223
  )
253
224
  else:
254
- if (
255
- dtype is None
256
- and infer_series is not None
257
- and infer_series.ndim == 1
258
- ):
259
- dtype = infer_series.dtype
260
- else:
261
- dtype = dtype if dtype is not None else np.dtype(object)
262
- if infer_series is not None and infer_series.ndim == 1:
263
- name = name or infer_series.name
225
+ dtype = inferred_meta.dtype or np.dtype("O")
264
226
  return self.new_series(
265
227
  [series],
266
228
  dtype=dtype,
267
229
  shape=series.shape,
268
- index_value=index_value,
269
- name=name,
230
+ index_value=inferred_meta.index_value,
231
+ name=inferred_meta.name,
270
232
  )
271
- else:
272
- dtype = dtype if dtype is not None else np.dtype("object")
273
- return self.new_series(
274
- [series],
275
- dtype=dtype,
276
- shape=series.shape,
277
- index_value=series.index_value,
278
- name=name,
279
- )
280
233
 
281
234
  def __call__(self, df_or_series, dtypes=None, dtype=None, name=None, index=None):
282
235
  axis = getattr(self, "axis", None) or 0
@@ -303,7 +256,21 @@ class ApplyOperator(
303
256
 
304
257
  def get_packed_funcs(self, df=None) -> Any:
305
258
  stub_df = self._build_stub_pandas_obj(df or self.inputs[0])
306
- return pack_func_args(stub_df, self.func, *self.args, **self.kwds)
259
+ args = copy_if_possible(self.args)
260
+ kwargs = copy_if_possible(self.kwds)
261
+ return pack_func_args(stub_df, self.func, *args, **kwargs)
262
+
263
+ @classmethod
264
+ def estimate_size(
265
+ cls, ctx: MutableMapping[str, Union[int, float]], op: "DataFrameApply"
266
+ ) -> None:
267
+ if isinstance(op.func, MarkedFunction):
268
+ ctx[op.outputs[0].key] = float("inf")
269
+ super().estimate_size(ctx, op)
270
+
271
+
272
+ # keep for import compatibility
273
+ ApplyOperator = DataFrameApply
307
274
 
308
275
 
309
276
  def df_apply(
@@ -546,7 +513,7 @@ def df_apply(
546
513
  kwds["axis"] = axis
547
514
  return func(*args, **kwds)
548
515
 
549
- op = ApplyOperator(
516
+ op = DataFrameApply(
550
517
  func=func,
551
518
  axis=axis,
552
519
  raw=raw,
@@ -753,7 +720,7 @@ def series_apply(
753
720
  )
754
721
  output_type = output_types[0] if output_types else OutputType.series
755
722
 
756
- op = ApplyOperator(
723
+ op = DataFrameApply(
757
724
  func=func,
758
725
  convert_dtype=convert_dtype,
759
726
  args=args,
@@ -17,7 +17,7 @@ from pandas.api.types import CategoricalDtype
17
17
 
18
18
  from ... import opcodes
19
19
  from ...serialization.serializables import AnyField, ListField, StringField
20
- from ...utils import pd_release_version
20
+ from ...utils import make_dtypes, pd_release_version
21
21
  from ..core import DATAFRAME_TYPE, SERIES_TYPE
22
22
  from ..operators import DataFrameOperator, DataFrameOperatorMixin
23
23
  from ..utils import build_empty_df, build_empty_series, parse_index
@@ -184,6 +184,7 @@ def astype(df, dtype, copy=True, errors="raise"):
184
184
  1 2
185
185
  dtype: int64
186
186
  """
187
+ dtype = make_dtypes(dtype, make_series=False)
187
188
  if isinstance(dtype, dict):
188
189
  keys = list(dtype.keys())
189
190
  if isinstance(df, SERIES_TYPE):
@@ -233,4 +234,4 @@ def index_astype(ix, dtype, copy=True):
233
234
  Index
234
235
  Index with values cast to specified dtype.
235
236
  """
236
- return astype(ix, dtype, copy=copy)
237
+ return astype(ix, make_dtypes(dtype), copy=copy)
@@ -12,11 +12,13 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ from typing import List
16
+
15
17
  import numpy as np
16
18
  from pandas.core.dtypes.cast import find_common_type
17
19
 
18
20
  from ... import opcodes
19
- from ...core import TILEABLE_TYPE
21
+ from ...core import TILEABLE_TYPE, EntityData
20
22
  from ...serialization.serializables import FieldTypes, ListField
21
23
  from ..core import SERIES_TYPE
22
24
  from ..operators import DataFrameOperator, DataFrameOperatorMixin
@@ -32,21 +34,23 @@ class DataFrameCaseWhen(DataFrameOperator, DataFrameOperatorMixin):
32
34
  def __init__(self, output_types=None, **kw):
33
35
  super().__init__(_output_types=output_types, **kw)
34
36
 
35
- def _set_inputs(self, inputs):
36
- super()._set_inputs(inputs)
37
+ @classmethod
38
+ def _set_inputs(cls, op: "DataFrameCaseWhen", inputs: List[EntityData]):
39
+ super()._set_inputs(op, inputs)
37
40
  it = iter(inputs)
38
41
  next(it)
39
- self.conditions = [
40
- next(it) if isinstance(t, TILEABLE_TYPE) else t for t in self.conditions
42
+ op.conditions = [
43
+ next(it) if isinstance(t, TILEABLE_TYPE) else t for t in op.conditions
41
44
  ]
42
- self.replacements = [
43
- next(it) if isinstance(t, TILEABLE_TYPE) else t for t in self.replacements
45
+ op.replacements = [
46
+ next(it) if isinstance(t, TILEABLE_TYPE) else t for t in op.replacements
44
47
  ]
45
48
 
46
49
  def __call__(self, series):
47
50
  replacement_dtypes = [
48
51
  it.dtype if isinstance(it, SERIES_TYPE) else np.array(it).dtype
49
52
  for it in self.replacements
53
+ if it is not None
50
54
  ]
51
55
  dtype = find_common_type([series.dtype] + replacement_dtypes)
52
56
 
@@ -13,12 +13,13 @@
13
13
  # limitations under the License.
14
14
 
15
15
  from numbers import Integral
16
+ from typing import List
16
17
 
17
18
  import numpy as np
18
19
  import pandas as pd
19
20
 
20
21
  from ... import opcodes
21
- from ...core import ENTITY_TYPE, ExecutableTuple, OutputType
22
+ from ...core import ENTITY_TYPE, EntityData, ExecutableTuple, OutputType
22
23
  from ...serialization.serializables import (
23
24
  AnyField,
24
25
  BoolField,
@@ -55,14 +56,15 @@ class DataFrameCut(DataFrameOperator, DataFrameOperatorMixin):
55
56
  def output_limit(self):
56
57
  return 1 if not self.retbins else 2
57
58
 
58
- def _set_inputs(self, inputs):
59
- super()._set_inputs(inputs)
60
- inputs_iter = iter(self._inputs)
61
- self._input = next(inputs_iter)
62
- if isinstance(self.bins, ENTITY_TYPE):
63
- self.bins = next(inputs_iter)
64
- if isinstance(self.labels, ENTITY_TYPE):
65
- self.labels = next(inputs_iter)
59
+ @classmethod
60
+ def _set_inputs(cls, op: "DataFrameCut", inputs: List[EntityData]):
61
+ super()._set_inputs(op, inputs)
62
+ inputs_iter = iter(op._inputs)
63
+ op._input = next(inputs_iter)
64
+ if isinstance(op.bins, ENTITY_TYPE):
65
+ op.bins = next(inputs_iter)
66
+ if isinstance(op.labels, ENTITY_TYPE):
67
+ op.labels = next(inputs_iter)
66
68
 
67
69
  def __call__(self, x):
68
70
  if isinstance(x, pd.Series):
@@ -77,7 +79,6 @@ class DataFrameCut(DataFrameOperator, DataFrameOperatorMixin):
77
79
  inputs = [x]
78
80
  if self.labels is not None and not isinstance(self.labels, (bool, ENTITY_TYPE)):
79
81
  self.labels = np.asarray(self.labels)
80
-
81
82
  # infer dtype
82
83
  x_empty = (
83
84
  pd.Series([1], dtype=x.dtype)
@@ -12,10 +12,13 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ from typing import List
16
+
15
17
  import numpy as np
16
18
  import pandas as pd
17
19
 
18
20
  from ... import opcodes
21
+ from ...core import EntityData
19
22
  from ...serialization.serializables import AnyField, FieldTypes, KeyField, ListField
20
23
  from ..core import SERIES_TYPE
21
24
  from ..operators import DataFrameOperator, DataFrameOperatorMixin
@@ -33,9 +36,10 @@ class DataFrameDescribe(DataFrameOperator, DataFrameOperatorMixin):
33
36
  def __init__(self, output_types=None, **kw):
34
37
  super().__init__(_output_types=output_types, **kw)
35
38
 
36
- def _set_inputs(self, inputs):
37
- super()._set_inputs(inputs)
38
- self.input = self._inputs[0]
39
+ @classmethod
40
+ def _set_inputs(cls, op: "DataFrameDescribe", inputs: List[EntityData]):
41
+ super()._set_inputs(op, inputs)
42
+ op.input = op._inputs[0]
39
43
 
40
44
  def __call__(self, df_or_series):
41
45
  if isinstance(df_or_series, SERIES_TYPE):
@@ -13,15 +13,16 @@
13
13
  # limitations under the License.
14
14
 
15
15
  import warnings
16
+ from typing import List
16
17
 
17
18
  import numpy as np
18
19
 
19
- from maxframe import opcodes
20
- from maxframe.core import Entity, OutputType
21
- from maxframe.dataframe.core import DATAFRAME_TYPE, SERIES_TYPE, IndexValue
22
- from maxframe.dataframe.operators import DataFrameOperator, DataFrameOperatorMixin
23
- from maxframe.dataframe.utils import parse_index, validate_axis
24
- from maxframe.serialization.serializables import AnyField, StringField
20
+ from ... import opcodes
21
+ from ...core import Entity, EntityData, OutputType
22
+ from ...serialization.serializables import AnyField, StringField
23
+ from ..core import DATAFRAME_TYPE, SERIES_TYPE, IndexValue
24
+ from ..operators import DataFrameOperator, DataFrameOperatorMixin
25
+ from ..utils import parse_index, validate_axis
25
26
 
26
27
 
27
28
  class DataFrameDrop(DataFrameOperatorMixin, DataFrameOperator):
@@ -42,11 +43,12 @@ class DataFrameDrop(DataFrameOperatorMixin, DataFrameOperator):
42
43
  else:
43
44
  return dtypes
44
45
 
45
- def _set_inputs(self, inputs):
46
- super()._set_inputs(inputs)
47
- inputs_iter = iter(self._inputs[1:])
48
- if len(self._inputs) > 1:
49
- self.index = next(inputs_iter)
46
+ @classmethod
47
+ def _set_inputs(cls, op: "DataFrameDrop", inputs: List[EntityData]):
48
+ super()._set_inputs(op, inputs)
49
+ inputs_iter = iter(op._inputs[1:])
50
+ if len(op._inputs) > 1:
51
+ op.index = next(inputs_iter)
50
52
 
51
53
  def __call__(self, df_or_series):
52
54
  params = df_or_series.params.copy()
@@ -1,5 +1,3 @@
1
- #!/usr/bin/env python
2
- # -*- coding: utf-8 -*-
3
1
  # Copyright 1999-2025 Alibaba Group Holding Ltd.
4
2
  #
5
3
  # Licensed under the Apache License, Version 2.0 (the "License");