maxframe 1.3.1__cp39-cp39-win_amd64.whl → 2.0.0__cp39-cp39-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 (640) hide show
  1. maxframe/_utils.cp39-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.cp39-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 +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 +9 -8
  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 +65 -3
  242. maxframe/dataframe/reduction/core.py +3 -1
  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/models.py +38 -9
  279. maxframe/learn/contrib/utils.py +55 -0
  280. maxframe/learn/contrib/xgboost/callback.py +86 -0
  281. maxframe/learn/contrib/xgboost/classifier.py +26 -30
  282. maxframe/learn/contrib/xgboost/core.py +54 -42
  283. maxframe/learn/contrib/xgboost/dmatrix.py +19 -12
  284. maxframe/learn/contrib/xgboost/predict.py +16 -9
  285. maxframe/learn/contrib/xgboost/regressor.py +28 -27
  286. maxframe/learn/contrib/xgboost/tests/test_callback.py +41 -0
  287. maxframe/learn/contrib/xgboost/train.py +59 -16
  288. maxframe/learn/core.py +252 -0
  289. maxframe/learn/datasets/__init__.py +20 -0
  290. maxframe/learn/datasets/samples_generator.py +628 -0
  291. maxframe/learn/linear_model/__init__.py +15 -0
  292. maxframe/learn/linear_model/_base.py +163 -0
  293. maxframe/learn/linear_model/_lin_reg.py +175 -0
  294. maxframe/learn/metrics/__init__.py +25 -0
  295. maxframe/learn/metrics/_check_targets.py +95 -0
  296. maxframe/learn/metrics/_classification.py +1121 -0
  297. maxframe/learn/metrics/_regression.py +256 -0
  298. maxframe/learn/model_selection/__init__.py +15 -0
  299. maxframe/learn/model_selection/_split.py +451 -0
  300. maxframe/learn/model_selection/tests/__init__.py +13 -0
  301. maxframe/learn/model_selection/tests/test_split.py +156 -0
  302. maxframe/learn/preprocessing/__init__.py +16 -0
  303. maxframe/learn/preprocessing/_data/__init__.py +17 -0
  304. maxframe/learn/preprocessing/_data/min_max_scaler.py +390 -0
  305. maxframe/learn/preprocessing/_data/normalize.py +127 -0
  306. maxframe/learn/preprocessing/_data/standard_scaler.py +503 -0
  307. maxframe/learn/preprocessing/_data/utils.py +79 -0
  308. maxframe/learn/preprocessing/_label/__init__.py +16 -0
  309. maxframe/learn/preprocessing/_label/_label_binarizer.py +599 -0
  310. maxframe/learn/preprocessing/_label/_label_encoder.py +174 -0
  311. maxframe/learn/utils/__init__.py +4 -0
  312. maxframe/learn/utils/_encode.py +314 -0
  313. maxframe/learn/utils/checks.py +161 -0
  314. maxframe/learn/utils/core.py +33 -0
  315. maxframe/learn/utils/extmath.py +176 -0
  316. maxframe/learn/utils/multiclass.py +292 -0
  317. maxframe/learn/utils/shuffle.py +114 -0
  318. maxframe/learn/utils/sparsefuncs.py +87 -0
  319. maxframe/learn/utils/validation.py +775 -0
  320. maxframe/lib/__init__.py +0 -2
  321. maxframe/lib/compat.py +145 -0
  322. maxframe/lib/filesystem/_oss_lib/glob.py +1 -1
  323. maxframe/lib/mmh3.cp39-win_amd64.pyd +0 -0
  324. maxframe/lib/sparse/__init__.py +10 -15
  325. maxframe/lib/sparse/array.py +45 -33
  326. maxframe/lib/sparse/core.py +0 -2
  327. maxframe/lib/sparse/linalg.py +31 -0
  328. maxframe/lib/sparse/matrix.py +5 -2
  329. maxframe/lib/sparse/tests/__init__.py +0 -2
  330. maxframe/lib/sparse/tests/test_sparse.py +53 -53
  331. maxframe/lib/sparse/vector.py +0 -2
  332. maxframe/mixin.py +59 -2
  333. maxframe/opcodes.py +13 -5
  334. maxframe/protocol.py +67 -14
  335. maxframe/remote/core.py +16 -14
  336. maxframe/remote/run_script.py +6 -3
  337. maxframe/serialization/__init__.py +2 -0
  338. maxframe/serialization/core.cp39-win_amd64.pyd +0 -0
  339. maxframe/serialization/core.pxd +3 -0
  340. maxframe/serialization/core.pyi +3 -1
  341. maxframe/serialization/core.pyx +82 -4
  342. maxframe/serialization/pandas.py +5 -1
  343. maxframe/serialization/serializables/core.py +6 -5
  344. maxframe/serialization/serializables/field.py +2 -2
  345. maxframe/serialization/serializables/tests/test_field_type.py +3 -5
  346. maxframe/serialization/tests/test_serial.py +27 -0
  347. maxframe/session.py +4 -71
  348. maxframe/sperunner.py +165 -0
  349. maxframe/tensor/__init__.py +35 -2
  350. maxframe/tensor/arithmetic/__init__.py +2 -4
  351. maxframe/tensor/arithmetic/abs.py +0 -2
  352. maxframe/tensor/arithmetic/absolute.py +0 -2
  353. maxframe/tensor/arithmetic/add.py +34 -4
  354. maxframe/tensor/arithmetic/angle.py +0 -2
  355. maxframe/tensor/arithmetic/arccos.py +1 -4
  356. maxframe/tensor/arithmetic/arccosh.py +1 -3
  357. maxframe/tensor/arithmetic/arcsin.py +0 -2
  358. maxframe/tensor/arithmetic/arcsinh.py +0 -2
  359. maxframe/tensor/arithmetic/arctan.py +0 -2
  360. maxframe/tensor/arithmetic/arctan2.py +0 -2
  361. maxframe/tensor/arithmetic/arctanh.py +0 -2
  362. maxframe/tensor/arithmetic/around.py +0 -2
  363. maxframe/tensor/arithmetic/bitand.py +0 -2
  364. maxframe/tensor/arithmetic/bitor.py +1 -3
  365. maxframe/tensor/arithmetic/bitxor.py +1 -3
  366. maxframe/tensor/arithmetic/cbrt.py +0 -2
  367. maxframe/tensor/arithmetic/ceil.py +0 -2
  368. maxframe/tensor/arithmetic/clip.py +13 -13
  369. maxframe/tensor/arithmetic/conj.py +0 -2
  370. maxframe/tensor/arithmetic/copysign.py +0 -2
  371. maxframe/tensor/arithmetic/core.py +47 -39
  372. maxframe/tensor/arithmetic/cos.py +1 -3
  373. maxframe/tensor/arithmetic/cosh.py +0 -2
  374. maxframe/tensor/arithmetic/deg2rad.py +0 -2
  375. maxframe/tensor/arithmetic/degrees.py +0 -2
  376. maxframe/tensor/arithmetic/divide.py +0 -2
  377. maxframe/tensor/arithmetic/equal.py +0 -2
  378. maxframe/tensor/arithmetic/exp.py +1 -3
  379. maxframe/tensor/arithmetic/exp2.py +0 -2
  380. maxframe/tensor/arithmetic/expm1.py +0 -2
  381. maxframe/tensor/arithmetic/fabs.py +0 -2
  382. maxframe/tensor/arithmetic/fix.py +0 -2
  383. maxframe/tensor/arithmetic/float_power.py +0 -2
  384. maxframe/tensor/arithmetic/floor.py +0 -2
  385. maxframe/tensor/arithmetic/floordiv.py +0 -2
  386. maxframe/tensor/arithmetic/fmax.py +0 -2
  387. maxframe/tensor/arithmetic/fmin.py +0 -2
  388. maxframe/tensor/arithmetic/fmod.py +0 -2
  389. maxframe/tensor/arithmetic/frexp.py +6 -2
  390. maxframe/tensor/arithmetic/greater.py +0 -2
  391. maxframe/tensor/arithmetic/greater_equal.py +0 -2
  392. maxframe/tensor/arithmetic/hypot.py +0 -2
  393. maxframe/tensor/arithmetic/i0.py +1 -3
  394. maxframe/tensor/arithmetic/imag.py +0 -2
  395. maxframe/tensor/arithmetic/invert.py +1 -3
  396. maxframe/tensor/arithmetic/isclose.py +0 -2
  397. maxframe/tensor/arithmetic/iscomplex.py +0 -2
  398. maxframe/tensor/arithmetic/isfinite.py +1 -3
  399. maxframe/tensor/arithmetic/isinf.py +0 -2
  400. maxframe/tensor/arithmetic/isnan.py +0 -2
  401. maxframe/tensor/arithmetic/isreal.py +0 -2
  402. maxframe/tensor/arithmetic/ldexp.py +0 -2
  403. maxframe/tensor/arithmetic/less.py +0 -2
  404. maxframe/tensor/arithmetic/less_equal.py +0 -2
  405. maxframe/tensor/arithmetic/log.py +1 -3
  406. maxframe/tensor/arithmetic/log10.py +1 -3
  407. maxframe/tensor/arithmetic/log1p.py +1 -3
  408. maxframe/tensor/arithmetic/log2.py +1 -3
  409. maxframe/tensor/arithmetic/logaddexp.py +0 -2
  410. maxframe/tensor/arithmetic/logaddexp2.py +0 -2
  411. maxframe/tensor/arithmetic/logical_and.py +0 -2
  412. maxframe/tensor/arithmetic/logical_not.py +1 -3
  413. maxframe/tensor/arithmetic/logical_or.py +0 -2
  414. maxframe/tensor/arithmetic/logical_xor.py +0 -2
  415. maxframe/tensor/arithmetic/lshift.py +0 -2
  416. maxframe/tensor/arithmetic/maximum.py +0 -2
  417. maxframe/tensor/arithmetic/minimum.py +0 -2
  418. maxframe/tensor/arithmetic/mod.py +0 -2
  419. maxframe/tensor/arithmetic/modf.py +6 -2
  420. maxframe/tensor/arithmetic/multiply.py +37 -4
  421. maxframe/tensor/arithmetic/nan_to_num.py +0 -2
  422. maxframe/tensor/arithmetic/negative.py +0 -2
  423. maxframe/tensor/arithmetic/nextafter.py +0 -2
  424. maxframe/tensor/arithmetic/not_equal.py +0 -2
  425. maxframe/tensor/arithmetic/positive.py +0 -2
  426. maxframe/tensor/arithmetic/power.py +0 -2
  427. maxframe/tensor/arithmetic/rad2deg.py +0 -2
  428. maxframe/tensor/arithmetic/radians.py +0 -2
  429. maxframe/tensor/arithmetic/real.py +0 -2
  430. maxframe/tensor/arithmetic/reciprocal.py +5 -3
  431. maxframe/tensor/arithmetic/rint.py +1 -3
  432. maxframe/tensor/arithmetic/rshift.py +0 -2
  433. maxframe/tensor/arithmetic/setimag.py +0 -2
  434. maxframe/tensor/arithmetic/setreal.py +0 -2
  435. maxframe/tensor/arithmetic/sign.py +0 -2
  436. maxframe/tensor/arithmetic/signbit.py +0 -2
  437. maxframe/tensor/arithmetic/sin.py +0 -2
  438. maxframe/tensor/arithmetic/sinc.py +1 -3
  439. maxframe/tensor/arithmetic/sinh.py +0 -2
  440. maxframe/tensor/arithmetic/spacing.py +0 -2
  441. maxframe/tensor/arithmetic/sqrt.py +0 -2
  442. maxframe/tensor/arithmetic/square.py +0 -2
  443. maxframe/tensor/arithmetic/subtract.py +4 -2
  444. maxframe/tensor/arithmetic/tan.py +0 -2
  445. maxframe/tensor/arithmetic/tanh.py +0 -2
  446. maxframe/tensor/arithmetic/tests/__init__.py +0 -2
  447. maxframe/tensor/arithmetic/tests/test_arithmetic.py +43 -9
  448. maxframe/tensor/arithmetic/truediv.py +0 -2
  449. maxframe/tensor/arithmetic/trunc.py +0 -2
  450. maxframe/tensor/arithmetic/utils.py +32 -6
  451. maxframe/tensor/array_utils.py +3 -25
  452. maxframe/tensor/core.py +6 -6
  453. maxframe/tensor/datasource/__init__.py +10 -2
  454. maxframe/tensor/datasource/arange.py +0 -2
  455. maxframe/tensor/datasource/array.py +3 -22
  456. maxframe/tensor/datasource/core.py +15 -10
  457. maxframe/tensor/datasource/diag.py +140 -0
  458. maxframe/tensor/datasource/diagflat.py +69 -0
  459. maxframe/tensor/datasource/empty.py +0 -2
  460. maxframe/tensor/datasource/eye.py +95 -0
  461. maxframe/tensor/datasource/from_dataframe.py +0 -2
  462. maxframe/tensor/datasource/from_dense.py +0 -17
  463. maxframe/tensor/datasource/from_sparse.py +0 -2
  464. maxframe/tensor/datasource/full.py +0 -2
  465. maxframe/tensor/datasource/identity.py +54 -0
  466. maxframe/tensor/datasource/indices.py +115 -0
  467. maxframe/tensor/datasource/linspace.py +140 -0
  468. maxframe/tensor/datasource/meshgrid.py +135 -0
  469. maxframe/tensor/datasource/ones.py +8 -3
  470. maxframe/tensor/datasource/tests/test_datasource.py +32 -1
  471. maxframe/tensor/datasource/tri_array.py +107 -0
  472. maxframe/tensor/datasource/zeros.py +7 -3
  473. maxframe/tensor/extensions/__init__.py +31 -0
  474. maxframe/tensor/extensions/accessor.py +25 -0
  475. maxframe/tensor/extensions/apply_chunk.py +137 -0
  476. maxframe/tensor/indexing/__init__.py +1 -1
  477. maxframe/tensor/indexing/choose.py +8 -6
  478. maxframe/tensor/indexing/compress.py +0 -2
  479. maxframe/tensor/indexing/extract.py +0 -2
  480. maxframe/tensor/indexing/fill_diagonal.py +9 -6
  481. maxframe/tensor/indexing/flatnonzero.py +1 -3
  482. maxframe/tensor/indexing/getitem.py +10 -43
  483. maxframe/tensor/indexing/nonzero.py +2 -4
  484. maxframe/tensor/indexing/setitem.py +19 -9
  485. maxframe/tensor/indexing/slice.py +6 -3
  486. maxframe/tensor/indexing/take.py +0 -2
  487. maxframe/tensor/indexing/tests/__init__.py +0 -2
  488. maxframe/tensor/indexing/tests/test_indexing.py +0 -2
  489. maxframe/tensor/indexing/unravel_index.py +6 -6
  490. maxframe/tensor/lib/__init__.py +16 -0
  491. maxframe/tensor/lib/index_tricks.py +404 -0
  492. maxframe/tensor/linalg/__init__.py +36 -0
  493. maxframe/tensor/linalg/dot.py +145 -0
  494. maxframe/tensor/linalg/inner.py +36 -0
  495. maxframe/tensor/linalg/inv.py +83 -0
  496. maxframe/tensor/linalg/lu.py +115 -0
  497. maxframe/tensor/linalg/matmul.py +225 -0
  498. maxframe/tensor/linalg/qr.py +124 -0
  499. maxframe/tensor/linalg/solve_triangular.py +103 -0
  500. maxframe/tensor/linalg/svd.py +167 -0
  501. maxframe/tensor/linalg/tensordot.py +213 -0
  502. maxframe/tensor/linalg/vdot.py +73 -0
  503. maxframe/tensor/merge/__init__.py +4 -0
  504. maxframe/tensor/merge/append.py +74 -0
  505. maxframe/tensor/merge/column_stack.py +63 -0
  506. maxframe/tensor/merge/concatenate.py +3 -2
  507. maxframe/tensor/merge/dstack.py +71 -0
  508. maxframe/tensor/merge/hstack.py +70 -0
  509. maxframe/tensor/merge/stack.py +0 -2
  510. maxframe/tensor/merge/tests/test_merge.py +0 -2
  511. maxframe/tensor/misc/__init__.py +18 -5
  512. maxframe/tensor/misc/astype.py +10 -8
  513. maxframe/tensor/misc/broadcast_to.py +1 -1
  514. maxframe/tensor/misc/copy.py +64 -0
  515. maxframe/tensor/misc/diff.py +115 -0
  516. maxframe/tensor/misc/flatten.py +63 -0
  517. maxframe/tensor/misc/in1d.py +94 -0
  518. maxframe/tensor/misc/isin.py +130 -0
  519. maxframe/tensor/misc/ndim.py +53 -0
  520. maxframe/tensor/misc/ravel.py +0 -2
  521. maxframe/tensor/misc/repeat.py +129 -0
  522. maxframe/tensor/misc/searchsorted.py +147 -0
  523. maxframe/tensor/misc/setdiff1d.py +58 -0
  524. maxframe/tensor/misc/squeeze.py +117 -0
  525. maxframe/tensor/misc/swapaxes.py +113 -0
  526. maxframe/tensor/misc/tests/test_misc.py +0 -2
  527. maxframe/tensor/misc/transpose.py +8 -4
  528. maxframe/tensor/misc/trapezoid.py +123 -0
  529. maxframe/tensor/misc/unique.py +0 -1
  530. maxframe/tensor/misc/where.py +10 -8
  531. maxframe/tensor/operators.py +0 -34
  532. maxframe/tensor/random/__init__.py +3 -5
  533. maxframe/tensor/random/binomial.py +0 -2
  534. maxframe/tensor/random/bytes.py +0 -2
  535. maxframe/tensor/random/chisquare.py +0 -2
  536. maxframe/tensor/random/choice.py +9 -8
  537. maxframe/tensor/random/core.py +20 -5
  538. maxframe/tensor/random/dirichlet.py +0 -2
  539. maxframe/tensor/random/exponential.py +0 -2
  540. maxframe/tensor/random/f.py +2 -4
  541. maxframe/tensor/random/gamma.py +0 -2
  542. maxframe/tensor/random/geometric.py +0 -2
  543. maxframe/tensor/random/gumbel.py +0 -2
  544. maxframe/tensor/random/hypergeometric.py +0 -2
  545. maxframe/tensor/random/laplace.py +2 -4
  546. maxframe/tensor/random/logistic.py +0 -2
  547. maxframe/tensor/random/lognormal.py +0 -2
  548. maxframe/tensor/random/logseries.py +0 -2
  549. maxframe/tensor/random/multinomial.py +0 -2
  550. maxframe/tensor/random/multivariate_normal.py +0 -2
  551. maxframe/tensor/random/negative_binomial.py +0 -2
  552. maxframe/tensor/random/noncentral_chisquare.py +0 -2
  553. maxframe/tensor/random/noncentral_f.py +1 -3
  554. maxframe/tensor/random/normal.py +0 -2
  555. maxframe/tensor/random/pareto.py +0 -2
  556. maxframe/tensor/random/permutation.py +6 -3
  557. maxframe/tensor/random/poisson.py +0 -2
  558. maxframe/tensor/random/power.py +0 -2
  559. maxframe/tensor/random/rand.py +0 -2
  560. maxframe/tensor/random/randint.py +0 -2
  561. maxframe/tensor/random/randn.py +0 -2
  562. maxframe/tensor/random/random_integers.py +0 -2
  563. maxframe/tensor/random/random_sample.py +0 -2
  564. maxframe/tensor/random/rayleigh.py +0 -2
  565. maxframe/tensor/random/standard_cauchy.py +0 -2
  566. maxframe/tensor/random/standard_exponential.py +0 -2
  567. maxframe/tensor/random/standard_gamma.py +0 -2
  568. maxframe/tensor/random/standard_normal.py +0 -2
  569. maxframe/tensor/random/standard_t.py +0 -2
  570. maxframe/tensor/random/tests/__init__.py +0 -2
  571. maxframe/tensor/random/tests/test_random.py +0 -2
  572. maxframe/tensor/random/triangular.py +0 -2
  573. maxframe/tensor/random/uniform.py +0 -2
  574. maxframe/tensor/random/vonmises.py +0 -2
  575. maxframe/tensor/random/wald.py +0 -2
  576. maxframe/tensor/random/weibull.py +0 -2
  577. maxframe/tensor/random/zipf.py +0 -2
  578. maxframe/tensor/reduction/__init__.py +0 -2
  579. maxframe/tensor/reduction/all.py +0 -2
  580. maxframe/tensor/reduction/allclose.py +0 -2
  581. maxframe/tensor/reduction/any.py +0 -2
  582. maxframe/tensor/reduction/argmax.py +1 -3
  583. maxframe/tensor/reduction/argmin.py +1 -3
  584. maxframe/tensor/reduction/array_equal.py +0 -2
  585. maxframe/tensor/reduction/core.py +0 -2
  586. maxframe/tensor/reduction/count_nonzero.py +0 -2
  587. maxframe/tensor/reduction/cumprod.py +0 -2
  588. maxframe/tensor/reduction/cumsum.py +0 -2
  589. maxframe/tensor/reduction/max.py +0 -2
  590. maxframe/tensor/reduction/mean.py +0 -2
  591. maxframe/tensor/reduction/min.py +0 -2
  592. maxframe/tensor/reduction/nanargmax.py +0 -2
  593. maxframe/tensor/reduction/nanargmin.py +0 -2
  594. maxframe/tensor/reduction/nancumprod.py +0 -2
  595. maxframe/tensor/reduction/nancumsum.py +0 -2
  596. maxframe/tensor/reduction/nanmax.py +0 -2
  597. maxframe/tensor/reduction/nanmean.py +0 -2
  598. maxframe/tensor/reduction/nanmin.py +0 -2
  599. maxframe/tensor/reduction/nanprod.py +0 -2
  600. maxframe/tensor/reduction/nanstd.py +0 -2
  601. maxframe/tensor/reduction/nansum.py +0 -2
  602. maxframe/tensor/reduction/nanvar.py +0 -2
  603. maxframe/tensor/reduction/prod.py +0 -2
  604. maxframe/tensor/reduction/std.py +0 -2
  605. maxframe/tensor/reduction/sum.py +0 -2
  606. maxframe/tensor/reduction/tests/test_reduction.py +1 -4
  607. maxframe/tensor/reduction/var.py +0 -2
  608. maxframe/tensor/reshape/__init__.py +0 -2
  609. maxframe/tensor/reshape/reshape.py +6 -5
  610. maxframe/tensor/reshape/tests/__init__.py +0 -2
  611. maxframe/tensor/reshape/tests/test_reshape.py +0 -2
  612. maxframe/tensor/sort/__init__.py +16 -0
  613. maxframe/tensor/sort/argsort.py +150 -0
  614. maxframe/tensor/sort/sort.py +295 -0
  615. maxframe/tensor/special/__init__.py +37 -0
  616. maxframe/tensor/special/core.py +38 -0
  617. maxframe/tensor/special/misc.py +142 -0
  618. maxframe/tensor/special/statistical.py +56 -0
  619. maxframe/tensor/statistics/__init__.py +5 -0
  620. maxframe/tensor/statistics/average.py +143 -0
  621. maxframe/tensor/statistics/bincount.py +133 -0
  622. maxframe/tensor/statistics/quantile.py +10 -8
  623. maxframe/tensor/ufunc/__init__.py +0 -2
  624. maxframe/tensor/ufunc/ufunc.py +0 -2
  625. maxframe/tensor/utils.py +21 -3
  626. maxframe/tests/test_protocol.py +3 -3
  627. maxframe/tests/test_utils.py +210 -1
  628. maxframe/tests/utils.py +59 -1
  629. maxframe/udf.py +76 -6
  630. maxframe/utils.py +418 -17
  631. {maxframe-1.3.1.dist-info → maxframe-2.0.0.dist-info}/METADATA +4 -1
  632. maxframe-2.0.0.dist-info/RECORD +939 -0
  633. {maxframe-1.3.1.dist-info → maxframe-2.0.0.dist-info}/WHEEL +1 -1
  634. maxframe_client/clients/framedriver.py +19 -3
  635. maxframe_client/fetcher.py +113 -6
  636. maxframe_client/session/odps.py +173 -38
  637. maxframe_client/session/task.py +3 -1
  638. maxframe_client/tests/test_session.py +41 -5
  639. maxframe-1.3.1.dist-info/RECORD +0 -705
  640. {maxframe-1.3.1.dist-info → maxframe-2.0.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,41 @@
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
+ import pytest
16
+
17
+ from ....core import SPECodeContext
18
+ from ...indexing import DataFrameSetIndexAdapter
19
+
20
+
21
+ @pytest.mark.parametrize(
22
+ "keys,drop,append,verify_integrity",
23
+ [
24
+ ("A", True, False, False),
25
+ (["C", "D"], True, False, False),
26
+ (["C", "D"], True, True, False),
27
+ (["C", "D"], True, False, True),
28
+ ],
29
+ )
30
+ def test_dataframe_set_index(df1, keys, drop, append, verify_integrity):
31
+ _df1 = df1.set_index(
32
+ keys=keys, drop=drop, append=append, verify_integrity=verify_integrity
33
+ )
34
+ context = SPECodeContext()
35
+ adapter = DataFrameSetIndexAdapter()
36
+ results = adapter.generate_code(_df1.op, context)
37
+
38
+ expected_results = [
39
+ f"var_1 = var_0.set_index(keys={repr(keys)}, drop={drop}, append={append}, inplace=False, verify_integrity={verify_integrity})"
40
+ ]
41
+ assert results == expected_results
@@ -0,0 +1,46 @@
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
+ import numpy as np
16
+
17
+ from ....core import SPECodeContext
18
+ from ...indexing import DataFrameSetitemAdapter
19
+
20
+
21
+ def test_dataframe_setitem_with_scalar_to_one_index(df1):
22
+ df1["A"] = np.intc(100)
23
+ context = SPECodeContext()
24
+ adapter = DataFrameSetitemAdapter()
25
+ results = adapter.generate_code(df1.op, context)
26
+ expected_results = ["var_0['A'] = const_0", "var_1 = var_0"]
27
+ assert context.constants["const_0"] == 100
28
+ assert results == expected_results
29
+
30
+
31
+ def test_dataframe_setitem_with_scalar_to_multi_indexes(df1):
32
+ df1[["A", "E"]] = 100
33
+ context = SPECodeContext()
34
+ adapter = DataFrameSetitemAdapter()
35
+ results = adapter.generate_code(df1.op, context)
36
+ expected_results = ["var_0[['A', 'E']] = 100", "var_1 = var_0"]
37
+ assert results == expected_results
38
+
39
+
40
+ def test_dataframe_setitem_with_non_scalar(df1):
41
+ df1[["A", "E"]] = df1[["A", "B"]]
42
+ context = SPECodeContext()
43
+ adapter = DataFrameSetitemAdapter()
44
+ results = adapter.generate_code(df1.op, context)
45
+ expected_results = ["var_0[['A', 'E']] = var_1", "var_2 = var_0"]
46
+ assert results == expected_results
@@ -0,0 +1,13 @@
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.
@@ -0,0 +1,133 @@
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
+ import pandas as pd
16
+ import pytest
17
+
18
+ from ...... import dataframe as md
19
+ from ....core import SPECodeContext
20
+ from ...misc import DataFrameApplyAdapter
21
+
22
+
23
+ @pytest.fixture
24
+ def df1():
25
+ return md.DataFrame(
26
+ [
27
+ [1, 10, 101],
28
+ [9, 90, 909],
29
+ [2, 20, 202],
30
+ ],
31
+ index=pd.MultiIndex.from_arrays(
32
+ [[1, 9, 2], [11, 99, 22], [111, 999, 222]],
33
+ names=("idx_0", "idx_1", "idx_2"),
34
+ ),
35
+ columns=list("ABC"),
36
+ )
37
+
38
+
39
+ @pytest.fixture
40
+ def s1():
41
+ return md.Series([5, 2, 3, 1], index=[5, 2, 3, 1], name="A")
42
+
43
+
44
+ def test_series_apply(s1):
45
+ s = s1.apply(lambda x: x + 1, convert_dtype=True)
46
+ adapter = DataFrameApplyAdapter()
47
+ context = SPECodeContext()
48
+ results = adapter.generate_code(s.op, context)
49
+ assert len(context.get_udfs()) == 1
50
+ f = context.get_udfs()[0]
51
+ expected_results = [
52
+ f"var_1_applied = var_0.apply(func={f.name}, convert_dtype=True)",
53
+ "var_1_renamed = var_1_applied.rename('A')",
54
+ "var_1 = var_1_renamed.astype(np.dtype('int64'))",
55
+ ]
56
+ assert results == expected_results
57
+
58
+
59
+ def test_apply_with_series_dtype_and_name(s1):
60
+ s = s1.apply(
61
+ lambda x: x + 1,
62
+ convert_dtype=False,
63
+ name="X",
64
+ dtype="float32",
65
+ output_type="series",
66
+ )
67
+ adapter = DataFrameApplyAdapter()
68
+ context = SPECodeContext()
69
+ results = adapter.generate_code(s.op, context)
70
+ assert len(context.get_udfs()) == 1
71
+ f = context.get_udfs()[0]
72
+ expected_results = [
73
+ f"var_1_applied = var_0.apply(func={f.name}, convert_dtype=False)",
74
+ "var_1_renamed = var_1_applied.rename('X')",
75
+ "var_1 = var_1_renamed.astype(np.dtype('float32'))",
76
+ ]
77
+ assert results == expected_results
78
+
79
+
80
+ def test_apply_with_dataframe_dtypes(df1):
81
+ df = df1.apply(
82
+ lambda x: pd.Series([str(x), x + 1]),
83
+ convert_dtype=False,
84
+ dtypes=pd.Series(["object", "float64"], index=["X", "Y"]),
85
+ output_type="dataframe",
86
+ )
87
+ adapter = DataFrameApplyAdapter()
88
+ context = SPECodeContext()
89
+ results = adapter.generate_code(df.op, context)
90
+ assert len(context.get_udfs()) == 1
91
+ f = context.get_udfs()[0]
92
+ expected_results = [
93
+ f"var_1_applied = var_0.apply(func={f.name}, axis=0, raw=False, result_type=None)",
94
+ "var_1_applied.columns = ['X', 'Y']",
95
+ "var_1 = var_1_applied.astype({'X': np.dtype('object'), 'Y': np.dtype('float64')})",
96
+ ]
97
+ assert results == expected_results
98
+
99
+
100
+ def test_dataframe_apply_column(df1):
101
+ df = df1.apply(lambda x: x + 1, axis=0)
102
+ adapter = DataFrameApplyAdapter()
103
+ context = SPECodeContext()
104
+ results = adapter.generate_code(df.op, context)
105
+ assert len(context.get_udfs()) == 1
106
+ f = context.get_udfs()[0]
107
+ expected_results = [
108
+ f"var_1_applied = var_0.apply(func={f.name}, axis=0, raw=False, result_type=None)",
109
+ "var_1_applied.columns = ['A', 'B', 'C']",
110
+ "var_1 = var_1_applied.astype("
111
+ "{'A': np.dtype('int64'),"
112
+ " 'B': np.dtype('int64'),"
113
+ " 'C': np.dtype('int64')})",
114
+ ]
115
+ assert results == expected_results
116
+
117
+
118
+ def test_dataframe_apply_row(df1):
119
+ df = df1.apply(lambda x: x + 1, 1, True, "expand")
120
+ adapter = DataFrameApplyAdapter()
121
+ context = SPECodeContext()
122
+ results = adapter.generate_code(df.op, context)
123
+ assert len(context.get_udfs()) == 1
124
+ f = context.get_udfs()[0]
125
+ expected_results = [
126
+ f"var_1_applied = var_0.apply(func={f.name}, axis=1, raw=True, result_type='expand')",
127
+ "var_1_applied.columns = ['A', 'B', 'C']",
128
+ "var_1 = var_1_applied.astype("
129
+ "{'A': np.dtype('int64'),"
130
+ " 'B': np.dtype('int64'),"
131
+ " 'C': np.dtype('int64')})",
132
+ ]
133
+ assert results == expected_results
@@ -0,0 +1,92 @@
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
+ import pandas as pd
16
+ import pytest
17
+
18
+ from ...... import dataframe as md
19
+ from ....core import SPECodeContext
20
+ from ...misc import DropDuplicatesOperatorAdapter
21
+
22
+
23
+ @pytest.fixture
24
+ def df1():
25
+ return md.DataFrame(
26
+ [
27
+ [1, 10, 101],
28
+ [9, 90, 909],
29
+ [2, 20, 202],
30
+ ],
31
+ index=pd.MultiIndex.from_arrays(
32
+ [[1, 9, 2], [11, 99, 22], [111, 999, 222]],
33
+ names=("idx_0", "idx_1", "idx_2"),
34
+ ),
35
+ columns=list("ABC"),
36
+ )
37
+
38
+
39
+ @pytest.fixture
40
+ def s1():
41
+ return md.Series([5, 2, 3, 1], index=[5, 2, 3, 1], name="A")
42
+
43
+
44
+ @pytest.fixture
45
+ def multi_index():
46
+ arrays = [
47
+ ["a1", "a2", "a3"],
48
+ ["b1", "b2", "b3"],
49
+ ["c1", "c2", "c3"],
50
+ ["d1", "d2", "d3"],
51
+ ["e1", "e2", "e3"],
52
+ ]
53
+ return md.Index(
54
+ pd.MultiIndex.from_arrays(
55
+ arrays, names=("idx_a", "idx_b", "idx_c", "idx_d", "idx_e")
56
+ )
57
+ )
58
+
59
+
60
+ def test_dataframe_drop_duplicates(df1):
61
+ adapter = DropDuplicatesOperatorAdapter()
62
+ context = SPECodeContext()
63
+
64
+ df = df1.drop_duplicates(["A", "B"], keep=False)
65
+ results = adapter.generate_code(df.op, context)
66
+ expected_results = [
67
+ "var_1 = var_0.drop_duplicates(subset=['A', 'B'], keep=False, "
68
+ "ignore_index=False)"
69
+ ]
70
+ assert results == expected_results
71
+
72
+
73
+ def test_series_drop_duplicates(s1):
74
+ adapter = DropDuplicatesOperatorAdapter()
75
+ context = SPECodeContext()
76
+
77
+ s = s1.drop_duplicates(keep="first")
78
+ results = adapter.generate_code(s.op, context)
79
+ expected_results = [
80
+ "var_1 = var_0.drop_duplicates(keep='first', ignore_index=False)"
81
+ ]
82
+ assert results == expected_results
83
+
84
+
85
+ def test_index_drop_duplicates(multi_index):
86
+ adapter = DropDuplicatesOperatorAdapter()
87
+ context = SPECodeContext()
88
+
89
+ df = multi_index.drop_duplicates(keep="first")
90
+ results = adapter.generate_code(df.op, context)
91
+ expected_results = ["var_1 = var_0.drop_duplicates(keep='first')"]
92
+ assert results == expected_results
@@ -0,0 +1,234 @@
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
+ import numpy as np
16
+ import pandas as pd
17
+ import pytest
18
+
19
+ from ...... import dataframe as md
20
+ from ....core import SPECodeContext
21
+ from ...misc import (
22
+ CaseWhenOperatorAdapter,
23
+ DataFrameAstypeAdapter,
24
+ DataFrameCheckMonotonicAdapter,
25
+ DataFrameCutAdapter,
26
+ DataFrameDescribeAdapter,
27
+ DataFrameDiffAdapter,
28
+ DataFrameDropAdapter,
29
+ DataFrameDuplicatedAdapter,
30
+ DataFrameExplodeAdapter,
31
+ DataFrameIsinAdapter,
32
+ DataFrameMapAdapter,
33
+ DataFrameMeltAdapter,
34
+ DataFrameMemoryUsageAdapter,
35
+ DataFramePivotTableAdapter,
36
+ DataFrameShiftAdapter,
37
+ DataFrameStackAdapter,
38
+ DataFrameToNumericAdapter,
39
+ )
40
+
41
+
42
+ @pytest.fixture
43
+ def df1():
44
+ return md.DataFrame(
45
+ np.random.randn(6, 4),
46
+ index=md.Index(["1", "2", "3", "4", "5", "6"], name="test_idx"),
47
+ columns=list("ABCD"),
48
+ )
49
+
50
+
51
+ @pytest.fixture
52
+ def midx_df1():
53
+ return md.DataFrame(
54
+ [
55
+ [1, 10, 101],
56
+ [9, 90, 909],
57
+ [2, 20, 202],
58
+ ],
59
+ index=pd.MultiIndex.from_arrays(
60
+ [[1, 9, 2], [11, 99, 22], [111, 999, 222]],
61
+ names=("idx_0", "idx_1", "idx_2"),
62
+ ),
63
+ columns=list("ABC"),
64
+ )
65
+
66
+
67
+ def test_astype(df1):
68
+ v1 = df1.astype({"A": "string"})
69
+ context = SPECodeContext()
70
+ results = DataFrameAstypeAdapter().generate_code(v1.op, context)
71
+ assert results[0] == "var_1 = var_0.astype({'A': 'string'})"
72
+
73
+
74
+ def test_case_when(df1):
75
+ s = df1.A.case_when([(df1.B > 50, df1.A + 10), (df1.C < 500, 3)])
76
+ context = SPECodeContext()
77
+ results = CaseWhenOperatorAdapter().generate_code(s.op, context)
78
+ expected_results = [
79
+ "var_1 = var_0.case_when(caselist=[(var_2, var_4), (var_3, 3)])"
80
+ ]
81
+ assert results == expected_results
82
+
83
+
84
+ def test_check_monotonic():
85
+ context = SPECodeContext()
86
+
87
+ v0 = md.Series([1, 2, 3, 4, 5, 6])
88
+ v1 = v0.is_monotonic_increasing
89
+ results = DataFrameCheckMonotonicAdapter().generate_code(v1.op, context)
90
+ assert results[0] == "var_1 = var_0.is_monotonic_increasing"
91
+
92
+ v2 = v0.is_monotonic_decreasing
93
+ results = DataFrameCheckMonotonicAdapter().generate_code(v2.op, context)
94
+ assert results[0] == "var_2 = var_0.is_monotonic_decreasing"
95
+
96
+
97
+ def test_cut():
98
+ context = SPECodeContext()
99
+
100
+ v0 = md.Series([1, 2, 3, 4, 5, 6])
101
+ v1 = md.cut(v0, 3)
102
+ results = DataFrameCutAdapter().generate_code(v1.op, context)
103
+ assert results[0] == (
104
+ "var_0 = pd.cut(var_1, 3, skip_none=None, right=True, labels=None, "
105
+ "retbins=False, precision=3, include_lowest=False, duplicates='raise', "
106
+ "ordered=True)"
107
+ )
108
+
109
+
110
+ def test_describe(df1):
111
+ df = df1.describe(include="all")
112
+ context = SPECodeContext()
113
+ results = DataFrameDescribeAdapter().generate_code(df.op, context)
114
+ assert (
115
+ results[0]
116
+ == "var_1 = var_0.describe(percentiles=[0.25, 0.5, 0.75], include='all')"
117
+ )
118
+
119
+
120
+ def test_diff(df1):
121
+ df = df1.diff(periods=1)
122
+ context = SPECodeContext()
123
+ results = DataFrameDiffAdapter().generate_code(df.op, context)
124
+ assert results[0] == "var_1 = var_0.diff(periods=1, axis=0)"
125
+
126
+
127
+ def test_drop(midx_df1):
128
+ df = midx_df1.drop(index=(1, 11, 111), columns=["A", "C"], errors="ignore")
129
+ adapter = DataFrameDropAdapter()
130
+ context = SPECodeContext()
131
+ results = adapter.generate_code(df.op, context)
132
+ expected_results = [
133
+ "var_1 = var_0.drop(index=(1, 11, 111), columns=['A', 'C'], level=None,"
134
+ " errors='ignore')"
135
+ ]
136
+ assert results == expected_results
137
+
138
+ del midx_df1["A"]
139
+ results = adapter.generate_code(midx_df1.op, context)
140
+ expected_results = [
141
+ "var_2 = var_0.drop(index=None, columns='A', level=None, errors='raise')"
142
+ ]
143
+ assert results == expected_results
144
+
145
+
146
+ def test_duplicated(df1):
147
+ df = df1.duplicated(subset=["A", "B"], keep=False)
148
+ context = SPECodeContext()
149
+ results = DataFrameDuplicatedAdapter().generate_code(df.op, context)
150
+ assert results[0] == "var_1 = var_0.duplicated(subset=['A', 'B'], keep=False)"
151
+
152
+
153
+ def test_explode():
154
+ context = SPECodeContext()
155
+
156
+ v0 = md.Series([[1, 2, 3], [5, 6]])
157
+ v1 = v0.explode(ignore_index=True)
158
+ results = DataFrameExplodeAdapter().generate_code(v1.op, context)
159
+ assert results[0] == "var_1 = var_0.explode(None, ignore_index=True)"
160
+
161
+
162
+ def test_isin(df1):
163
+ filter_dict = {"A": [0, 1], "B": [2, 3], "E": [99, 100]}
164
+ df = df1.isin(filter_dict)
165
+ context = SPECodeContext()
166
+ results = DataFrameIsinAdapter().generate_code(df.op, context)
167
+ expected_results = [
168
+ "var_1 = var_0.isin({'A': [0, 1], 'B': [2, 3], 'E': [99, 100]})"
169
+ ]
170
+ assert results == expected_results
171
+
172
+
173
+ def test_map(df1):
174
+ v0 = md.Series([1, 2, 3, 4, 5, 6])
175
+ v1 = v0.map(lambda x: x * 2 + 1, dtype="int64")
176
+ context = SPECodeContext()
177
+ results = DataFrameMapAdapter().generate_code(v1.op, context)
178
+ assert len(context.get_udfs()) == 1
179
+ f = context.get_udfs()[0]
180
+ expected_results = [f"var_1 = var_0.map({f.name})"]
181
+ assert results == expected_results
182
+
183
+
184
+ def test_melt(df1):
185
+ context = SPECodeContext()
186
+
187
+ v1 = df1.melt(id_vars=["A"], value_vars=["B"])
188
+ results = DataFrameMeltAdapter().generate_code(v1.op, context)
189
+ assert (
190
+ results[0]
191
+ == "var_1 = var_0.melt(id_vars=['A'], value_vars=['B'], value_name='value')"
192
+ )
193
+
194
+
195
+ def test_memory_usage(df1):
196
+ context = SPECodeContext()
197
+ v1 = df1.memory_usage(index=False)
198
+ results = DataFrameMemoryUsageAdapter().generate_code(v1.op, context)
199
+ assert results[0] == "var_1 = var_0.memory_usage(index=False, deep=False)"
200
+
201
+
202
+ def test_pivot_table(midx_df1):
203
+ df = midx_df1.pivot_table(columns="B", values="C")
204
+ context = SPECodeContext()
205
+ results = DataFramePivotTableAdapter().generate_code(df.op, context)
206
+ assert results[0] == (
207
+ "var_1 = var_0.pivot_table(values='C', columns='B', "
208
+ "aggfunc='mean', margins=False, dropna=True, margins_name='All', "
209
+ "sort=True)"
210
+ )
211
+
212
+
213
+ def test_shift(df1):
214
+ df = df1.shift(periods=1)
215
+ context = SPECodeContext()
216
+ results = DataFrameShiftAdapter().generate_code(df.op, context)
217
+ assert results[0] == "var_1 = var_0.shift(periods=1, axis=0)"
218
+
219
+
220
+ def test_stack(midx_df1):
221
+ df = midx_df1.stack([0])
222
+ context = SPECodeContext()
223
+ results = DataFrameStackAdapter().generate_code(df.op, context)
224
+ assert results[0] == "var_1 = var_0.stack(level=[0], dropna=True)"
225
+
226
+
227
+ def test_to_numeric():
228
+ v0 = md.Series([1, 2, 3, 4, 5, 6])
229
+ v1 = md.to_numeric(v0, downcast="float")
230
+ context = SPECodeContext()
231
+ results = DataFrameToNumericAdapter().generate_code(v1.op, context)
232
+ assert (
233
+ results[0] == "var_1 = pd.to_numeric(var_0, errors='raise', downcast='float')"
234
+ )
@@ -0,0 +1,13 @@
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.
@@ -0,0 +1,94 @@
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
+ import numpy as np
16
+ import pandas as pd
17
+ import pytest
18
+
19
+ from ...... import dataframe as md
20
+ from .....core import EngineAcceptance
21
+ from ....core import SPECodeContext
22
+ from ....dataframe.missing import DataFrameCheckNAAdapter
23
+
24
+
25
+ @pytest.fixture
26
+ def df1():
27
+ return md.DataFrame(
28
+ [
29
+ [1, 2, np.Inf, pd.NA],
30
+ [4, 5, np.NaN, pd.NaT],
31
+ [3, None, None, "3000"],
32
+ [4, None, True, None],
33
+ ],
34
+ index=md.Index([1, 2, 3, 4], name="test_idx"),
35
+ columns=list("ABCD"),
36
+ )
37
+
38
+
39
+ @pytest.fixture
40
+ def ds1():
41
+ return md.Series(pd.Series((1, 2, 3, None, None, None, None)))
42
+
43
+
44
+ @pytest.fixture
45
+ def index1():
46
+ return md.Index(pd.Index([1, 2, None, 4]))
47
+
48
+
49
+ @pytest.mark.parametrize(
50
+ "check_func, expected_condition",
51
+ [("isna", "isna"), ("isnull", "isna"), ("notna", "notna"), ("notnull", "notna")],
52
+ )
53
+ def test_seires(ds1, check_func, expected_condition):
54
+ adapter = DataFrameCheckNAAdapter()
55
+ context = SPECodeContext()
56
+ func = getattr(ds1, check_func)
57
+ ds = func()
58
+ assert adapter.accepts(ds.op) == EngineAcceptance.ACCEPT
59
+ results = adapter.generate_code(ds.op, context)
60
+ expected_results = [f"var_1 = var_0.{expected_condition}()"]
61
+ assert results == expected_results
62
+
63
+
64
+ @pytest.mark.parametrize(
65
+ "check_func, expected_condition",
66
+ [("isna", "isna"), ("isnull", "isna"), ("notna", "notna"), ("notnull", "notna")],
67
+ )
68
+ def test_maxframe(df1, check_func, expected_condition):
69
+ adapter = DataFrameCheckNAAdapter()
70
+ context = SPECodeContext()
71
+ func = getattr(df1, check_func)
72
+ df = func()
73
+ assert adapter.accepts(df.op) == EngineAcceptance.ACCEPT
74
+ results = adapter.generate_code(df.op, context)
75
+ expected_results = [f"var_1 = var_0.{expected_condition}()"]
76
+ assert results == expected_results
77
+
78
+
79
+ @pytest.mark.parametrize(
80
+ "check_func, expected_condition",
81
+ [
82
+ ("isna", "isna"),
83
+ ("notna", "notna"),
84
+ ],
85
+ )
86
+ def test_index_isna(index1, check_func, expected_condition):
87
+ adapter = DataFrameCheckNAAdapter()
88
+ context = SPECodeContext()
89
+ func = getattr(index1, check_func)
90
+ di = func()
91
+ assert adapter.accepts(di.op) == EngineAcceptance.ACCEPT
92
+ results = adapter.generate_code(di.op, context)
93
+ expected_results = [f"var_1 = var_0.{expected_condition}()"]
94
+ assert results == expected_results