maxframe 1.3.1__cp38-cp38-win_amd64.whl → 2.0.0__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 (640) 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 +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.cp38-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.cp38-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_client/clients/framedriver.py +19 -3
  634. maxframe_client/fetcher.py +113 -6
  635. maxframe_client/session/odps.py +173 -38
  636. maxframe_client/session/task.py +3 -1
  637. maxframe_client/tests/test_session.py +41 -5
  638. maxframe-1.3.1.dist-info/RECORD +0 -705
  639. {maxframe-1.3.1.dist-info → maxframe-2.0.0.dist-info}/WHEEL +0 -0
  640. {maxframe-1.3.1.dist-info → maxframe-2.0.0.dist-info}/top_level.txt +0 -0
@@ -12,6 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ import dataclasses
15
16
  import functools
16
17
  import inspect
17
18
  import itertools
@@ -20,26 +21,30 @@ import operator
20
21
  import sys
21
22
  from contextlib import contextmanager
22
23
  from numbers import Integral
23
- from typing import TYPE_CHECKING, Any, Callable, List
24
+ from typing import TYPE_CHECKING, Any, Callable, List, Optional
24
25
 
25
26
  import numpy as np
26
27
  import pandas as pd
27
- from pandas.api.extensions import ExtensionDtype
28
28
  from pandas.api.types import is_string_dtype
29
29
  from pandas.core.dtypes.inference import is_dict_like, is_list_like
30
30
 
31
- from ..core import Entity, ExecutableTuple
31
+ from ..core import Entity, ExecutableTuple, OutputType, get_output_types
32
32
  from ..lib.mmh3 import hash as mmh_hash
33
33
  from ..udf import MarkedFunction
34
34
  from ..utils import (
35
35
  ModulePlaceholder,
36
36
  is_full_slice,
37
37
  lazy_import,
38
- parse_version,
38
+ make_dtype,
39
+ make_dtypes,
40
+ quiet_stdio,
39
41
  sbytes,
40
42
  tokenize,
41
43
  )
42
44
 
45
+ if TYPE_CHECKING:
46
+ from .core import IndexValue
47
+
43
48
  try:
44
49
  import pyarrow as pa
45
50
  except ImportError: # pragma: no cover
@@ -49,15 +54,6 @@ if TYPE_CHECKING:
49
54
  from .operators import DataFrameOperator
50
55
 
51
56
  cudf = lazy_import("cudf", rename="cudf")
52
- vineyard = lazy_import("vineyard")
53
- try:
54
- import ray
55
-
56
- ray_release_version = parse_version(ray.__version__).release
57
- ray_deprecate_ml_dataset = ray_release_version[:2] >= (2, 0)
58
- except ImportError:
59
- ray_release_version = None
60
- ray_deprecate_ml_dataset = None
61
57
  logger = logging.getLogger(__name__)
62
58
 
63
59
  try:
@@ -603,6 +599,7 @@ def build_series(
603
599
  else:
604
600
  series_index = index[:0] if index is not None else None
605
601
 
602
+ name = name or getattr(series_obj, "name", None)
606
603
  for size, fill_value in zip(sizes, fill_values):
607
604
  empty_series = build_empty_series(dtype, name=name, index=series_index)
608
605
  record = _generate_value(dtype, fill_value)
@@ -1039,20 +1036,6 @@ def to_arrow_dtypes(dtypes, test_df=None):
1039
1036
  return new_dtypes
1040
1037
 
1041
1038
 
1042
- def make_dtype(dtype):
1043
- if isinstance(dtype, (np.dtype, ExtensionDtype)):
1044
- return dtype
1045
- return np.dtype(dtype) if dtype is not None else None
1046
-
1047
-
1048
- def make_dtypes(dtypes):
1049
- if dtypes is None:
1050
- return None
1051
- if not isinstance(dtypes, pd.Series):
1052
- dtypes = pd.Series(dtypes)
1053
- return dtypes.apply(make_dtype)
1054
-
1055
-
1056
1039
  def is_dataframe(x):
1057
1040
  if cudf is not None: # pragma: no cover
1058
1041
  if isinstance(x, cudf.DataFrame):
@@ -1314,6 +1297,8 @@ def pack_func_args(df, funcs, *args, args_bind_position=1, **kwargs) -> Any:
1314
1297
  AttributeError :
1315
1298
  If there's a string but no corresponding function is found.
1316
1299
  """
1300
+ from ..udf import MarkedFunction
1301
+
1317
1302
  if not args and not kwargs:
1318
1303
  return funcs
1319
1304
 
@@ -1325,8 +1310,6 @@ def pack_func_args(df, funcs, *args, args_bind_position=1, **kwargs) -> Any:
1325
1310
 
1326
1311
  f = get_callable_by_name(df, funcs) if isinstance(funcs, str) else funcs
1327
1312
 
1328
- from ..udf import MarkedFunction
1329
-
1330
1313
  if isinstance(f, MarkedFunction):
1331
1314
  # for marked function, pack the inner function, and reset as mark function
1332
1315
  packed_func = f.copy()
@@ -1351,7 +1334,7 @@ def get_callable_by_name(df: Any, func_name: str) -> Callable:
1351
1334
 
1352
1335
  Parameters
1353
1336
  ----------
1354
- df: padnas.Series or pandas.Dataframe
1337
+ df: pandas.Series or pandas.Dataframe
1355
1338
  The receiver of the func name.
1356
1339
  func_name : str
1357
1340
  The func name.
@@ -1381,10 +1364,215 @@ def get_callable_by_name(df: Any, func_name: str) -> Callable:
1381
1364
  )
1382
1365
 
1383
1366
 
1367
+ @dataclasses.dataclass
1368
+ class InferredDataFrameMeta:
1369
+ output_type: OutputType
1370
+ dtypes: Optional[pd.Series] = None
1371
+ dtype: Optional[Any] = None
1372
+ name: Optional[str] = None
1373
+ index_value: Optional["IndexValue"] = None
1374
+ maybe_agg: bool = False
1375
+ elementwise: bool = False
1376
+
1377
+ def check_absence(self, *args: str) -> None:
1378
+ args_set = set(args)
1379
+ if self.output_type == OutputType.dataframe:
1380
+ args_set.difference_update(["dtype", "name"])
1381
+ else:
1382
+ args_set.difference_update(["dtypes"])
1383
+ absent_args = [arg for arg in sorted(args_set) if getattr(self, arg) is None]
1384
+ if absent_args:
1385
+ raise TypeError(
1386
+ f"Cannot determine {', '.join(absent_args)} by calculating "
1387
+ "with mock data, please specify it as arguments"
1388
+ )
1389
+
1390
+
1391
+ def _get_groupby_input_df(groupby):
1392
+ in_df = groupby
1393
+ while in_df.op.output_types[0] not in (OutputType.dataframe, OutputType.series):
1394
+ in_df = in_df.inputs[0]
1395
+ return in_df
1396
+
1397
+
1398
+ def infer_dataframe_return_value(
1399
+ df_obj,
1400
+ func,
1401
+ output_type=None,
1402
+ dtypes=None,
1403
+ dtype=None,
1404
+ name=None,
1405
+ index=None,
1406
+ inherit_index=False,
1407
+ build_kw=None,
1408
+ elementwise=None,
1409
+ ) -> InferredDataFrameMeta:
1410
+ from .core import GROUPBY_TYPE
1411
+
1412
+ if elementwise is None:
1413
+ unwrapped_func = func
1414
+ if isinstance(unwrapped_func, MarkedFunction):
1415
+ unwrapped_func = unwrapped_func.func
1416
+ while True:
1417
+ if isinstance(unwrapped_func, functools.partial):
1418
+ unwrapped_func = unwrapped_func.func
1419
+ elif hasattr(unwrapped_func, "__wrapped__"):
1420
+ unwrapped_func = unwrapped_func.__wrapped__
1421
+ else:
1422
+ break
1423
+ elementwise = isinstance(unwrapped_func, np.ufunc)
1424
+
1425
+ ret_index_value = None
1426
+ if output_type is not None and (dtypes is not None or dtype is not None):
1427
+ if inherit_index:
1428
+ ret_index_value = df_obj.index_value
1429
+ elif index is not None:
1430
+ ret_index_value = parse_index(index)
1431
+
1432
+ if ret_index_value is not None:
1433
+ return InferredDataFrameMeta(
1434
+ output_type,
1435
+ dtypes,
1436
+ dtype,
1437
+ name,
1438
+ ret_index_value,
1439
+ elementwise=elementwise or False,
1440
+ )
1441
+
1442
+ ret_output_type = ret_dtypes = None
1443
+ maybe_agg = False
1444
+ build_kw = build_kw or {}
1445
+ obj_key = df_obj.key
1446
+
1447
+ if elementwise:
1448
+ inherit_index = True
1449
+ (ret_output_type,) = get_output_types(df_obj)
1450
+ if index is not None:
1451
+ ret_index_value = parse_index(index)
1452
+
1453
+ if isinstance(df_obj, GROUPBY_TYPE):
1454
+ is_groupby = True
1455
+ empty_df_obj = df_obj.op.build_mock_groupby(**build_kw)
1456
+ else:
1457
+ is_groupby = False
1458
+ empty_df_obj = (
1459
+ build_df(df_obj, **build_kw)
1460
+ if df_obj.ndim == 2
1461
+ else build_series(df_obj, **build_kw)
1462
+ )
1463
+ try:
1464
+ with np.errstate(all="ignore"), quiet_stdio():
1465
+ infer_df_obj = func(empty_df_obj)
1466
+
1467
+ if ret_index_value is None:
1468
+ if (
1469
+ infer_df_obj is None
1470
+ or not hasattr(infer_df_obj, "index")
1471
+ or infer_df_obj.index is None
1472
+ ):
1473
+ ret_index_value = parse_index(pd.RangeIndex(-1))
1474
+ elif (
1475
+ infer_df_obj.index is getattr(empty_df_obj, "index", None)
1476
+ or inherit_index
1477
+ ):
1478
+ ret_index_value = df_obj.index_value
1479
+ else:
1480
+ ret_index_value = parse_index(infer_df_obj.index, obj_key, func)
1481
+
1482
+ if isinstance(infer_df_obj, pd.DataFrame):
1483
+ if output_type is not None and output_type != OutputType.dataframe:
1484
+ raise TypeError(
1485
+ f'Cannot infer output_type as "series", '
1486
+ f'please specify `output_type` as "dataframe"'
1487
+ )
1488
+ ret_output_type = ret_output_type or OutputType.dataframe
1489
+ ret_dtypes = ret_dtypes or infer_df_obj.dtypes
1490
+ else:
1491
+ if output_type is not None and output_type == OutputType.dataframe:
1492
+ raise TypeError(
1493
+ f'Cannot infer output_type as "dataframe", '
1494
+ f'please specify `output_type` as "series"'
1495
+ )
1496
+ ret_output_type = ret_output_type or OutputType.series
1497
+ name = name or getattr(infer_df_obj, "name", None)
1498
+ dtype = dtype or infer_df_obj.dtype
1499
+
1500
+ if is_groupby and len(infer_df_obj) <= 2:
1501
+ # we create mock df with 4 rows, 2 groups
1502
+ # if return df has 2 rows, we assume that
1503
+ # it's an aggregation operation
1504
+ maybe_agg = True
1505
+
1506
+ return InferredDataFrameMeta(
1507
+ ret_output_type,
1508
+ make_dtypes(ret_dtypes),
1509
+ make_dtype(dtype),
1510
+ name,
1511
+ ret_index_value,
1512
+ maybe_agg,
1513
+ elementwise=elementwise,
1514
+ )
1515
+ except: # noqa: E722 # nosec
1516
+ logger.info(
1517
+ "Exception raised while inferring meta of function result", exc_info=True
1518
+ )
1519
+ return InferredDataFrameMeta(
1520
+ output_type,
1521
+ make_dtypes(dtypes),
1522
+ make_dtype(dtype),
1523
+ name,
1524
+ ret_index_value,
1525
+ maybe_agg,
1526
+ elementwise=elementwise,
1527
+ )
1528
+
1529
+
1384
1530
  def copy_func_scheduling_hints(func, op: "DataFrameOperator") -> None:
1531
+ from ..config import options
1532
+
1385
1533
  if not isinstance(func, MarkedFunction):
1386
1534
  return
1387
1535
  if func.expect_engine:
1388
1536
  op.expect_engine = func.expect_engine
1537
+
1538
+ expect_resources = func.expect_resources or {}
1539
+ default_function_running_options = options.function.default_running_options or {}
1540
+
1541
+ for key, value in default_function_running_options.items():
1542
+ if key not in expect_resources or expect_resources.get(key) is None:
1543
+ expect_resources[key] = value
1544
+
1389
1545
  if func.expect_resources:
1390
- op.expect_resources = func.expect_resources
1546
+ op.expect_resources = expect_resources
1547
+
1548
+
1549
+ def make_column_list(col, dtypes_or_columns, level=None):
1550
+ """Returns [col] if col is a column in dtypes"""
1551
+ try:
1552
+ if isinstance(dtypes_or_columns, pd.Series):
1553
+ idx = dtypes_or_columns.index
1554
+ else:
1555
+ idx = dtypes_or_columns
1556
+
1557
+ if level is None:
1558
+ if col in idx:
1559
+ return [col]
1560
+ elif isinstance(col, int):
1561
+ col = [col]
1562
+ if all(c in idx for c in col):
1563
+ return col
1564
+ if all(isinstance(c, int) for c in col):
1565
+ return [idx[c] for c in col]
1566
+ return col
1567
+ else:
1568
+ level_idx = idx.get_level_values(level)
1569
+ if isinstance(col, list):
1570
+ cols = col
1571
+ else:
1572
+ cols = [col]
1573
+ mask = level_idx.isin(cols)
1574
+ if not mask.any():
1575
+ mask = col
1576
+ return idx[mask]
1577
+ except (IndexError, TypeError, ValueError):
1578
+ return col
@@ -13,10 +13,12 @@
13
13
  # limitations under the License.
14
14
 
15
15
  from collections import OrderedDict
16
+ from typing import List
16
17
 
17
18
  import pandas as pd
18
19
 
19
20
  from ... import opcodes
21
+ from ...core import EntityData
20
22
  from ...serialization.serializables import (
21
23
  AnyField,
22
24
  BoolField,
@@ -55,10 +57,11 @@ class DataFrameRollingAgg(DataFrameOperator, DataFrameOperatorMixin):
55
57
  def __init__(self, output_types=None, **kw):
56
58
  super().__init__(_output_types=output_types, **kw)
57
59
 
58
- def _set_inputs(self, inputs):
59
- super()._set_inputs(inputs)
60
- input_iter = iter(self._inputs)
61
- self.input = next(input_iter)
60
+ @classmethod
61
+ def _set_inputs(cls, op: "DataFrameRollingAgg", inputs: List[EntityData]):
62
+ super()._set_inputs(op, inputs)
63
+ input_iter = iter(op._inputs)
64
+ op.input = next(input_iter)
62
65
 
63
66
  def __call__(self, rolling):
64
67
  inp = rolling.input
maxframe/env.py CHANGED
@@ -16,6 +16,7 @@
16
16
  MAXFRAME_NAMESPACE = "MAXFRAME_NAMESPACE"
17
17
 
18
18
  # Maxframe Service common envs
19
+ MAXFRAME_HTTP_PORT_FILE = "MAXFRAME_PROXY_PORT_FILE"
19
20
  MAXFRAME_SERVICE_PORT = "MAXFRAME_SERVICE_PORT"
20
21
  MAXFRAME_SERVICE_PORT_RETRIES = "MAXFRAME_SERVICE_PORT_RETRIES"
21
22
  MAXFRAME_SERVICE_LISTEN_ADDRESS = "MAXFRAME_SERVICE_LISTEN_ADDRESS"
maxframe/errors.py CHANGED
@@ -29,6 +29,10 @@ class MaxFrameDeprecationError(MaxFrameUserError):
29
29
  pass
30
30
 
31
31
 
32
+ class TileableNotExecutedError(MaxFrameError):
33
+ pass
34
+
35
+
32
36
  class NoTaskServerResponseError(MaxFrameError):
33
37
  pass
34
38
 
@@ -36,3 +40,8 @@ class NoTaskServerResponseError(MaxFrameError):
36
40
  class SessionAlreadyClosedError(MaxFrameError):
37
41
  def __init__(self, session_id: str):
38
42
  super().__init__(f"Session {session_id} is already closed")
43
+
44
+
45
+ class EngineUnavailableError(MaxFrameIntentionalError):
46
+ def __init__(self, engine_type: str):
47
+ super().__init__(f"Engine {engine_type} is not ready")
maxframe/extension.py CHANGED
@@ -17,7 +17,7 @@ import itertools
17
17
  from typing import TYPE_CHECKING, Iterable, Tuple, Type
18
18
 
19
19
  if TYPE_CHECKING:
20
- from maxframe.codegen import BigDagCodeGenerator
20
+ from .codegen import DAGCodeGenerator
21
21
 
22
22
  try:
23
23
  import maxframe_framedriver.runners
@@ -28,7 +28,7 @@ if TYPE_CHECKING:
28
28
  class MaxFrameExtension(metaclass=abc.ABCMeta):
29
29
  @classmethod
30
30
  @abc.abstractmethod
31
- def get_codegen(cls) -> Type["BigDagCodeGenerator"]:
31
+ def get_codegen(cls) -> Type["DAGCodeGenerator"]:
32
32
  raise NotImplementedError
33
33
 
34
34
  @classmethod
@@ -48,6 +48,17 @@ class MaxFrameExtension(metaclass=abc.ABCMeta):
48
48
  """
49
49
  pass
50
50
 
51
+ @classmethod
52
+ async def create_session(cls, session_id: str) -> None:
53
+ """
54
+ create the session
55
+ Parameters
56
+ ----------
57
+ session_id : str
58
+ The session id.
59
+ """
60
+ pass
61
+
51
62
  @classmethod
52
63
  async def reload_session(cls, session_id: str) -> None:
53
64
  """
@@ -16,74 +16,68 @@ from abc import ABCMeta, abstractmethod
16
16
  from typing import Any, Dict, Type, Union
17
17
 
18
18
  import msgpack
19
+ import numpy as np
19
20
 
20
- from ...core import Entity, EntityData
21
- from ...core.entity import ObjectData, TileableData
21
+ from ...core import Entity, EntityData, OutputType, get_output_types
22
22
  from ...lib import wrapped_pickle as pickle
23
23
  from ...typing_ import SlicesType, TileableType
24
- from ...utils import TypeDispatcher
24
+ from ...utils import deserialize_serializable, serialize_serializable
25
25
  from ..odpsio.volumeio import ODPSVolumeReader, ODPSVolumeWriter
26
26
 
27
27
  _MetaType = Dict[str, Any]
28
28
 
29
29
  _META_FILE_NAME = ".meta"
30
30
  _META_PICKLED_KEYS_KEY = ".pickled_keys"
31
+ _META_SERIALIZED_VALUE_KEY = ".serialized_values"
31
32
 
32
33
 
33
- _io_handler_dispatcher = TypeDispatcher()
34
+ _io_handler_dispatcher = dict()
34
35
 
35
36
 
36
- def register_object_io_handler(tileable_data_type: Type[TileableData]):
37
+ def register_object_io_handler(out_type: OutputType):
37
38
  def wrapper(handler_cls):
38
- _io_handler_dispatcher.register(tileable_data_type, handler_cls)
39
+ _io_handler_dispatcher[out_type] = handler_cls
39
40
  return handler_cls
40
41
 
41
42
  return wrapper
42
43
 
43
44
 
44
45
  def get_object_io_handler(
45
- tileable_data_type: Union[Entity, EntityData, Type[EntityData]]
46
+ tileable_data_type: Union[Entity, EntityData, Type[EntityData], OutputType]
46
47
  ) -> Type["AbstractObjectIOHandler"]:
47
- if not isinstance(tileable_data_type, type):
48
- if isinstance(tileable_data_type, Entity):
49
- tileable_data_type = tileable_data_type.data
50
- tileable_data_type = type(tileable_data_type)
51
- return _io_handler_dispatcher.get_handler(tileable_data_type)
48
+ output_type = tileable_data_type
49
+ if not isinstance(tileable_data_type, OutputType):
50
+ if hasattr(tileable_data_type, "output_type"):
51
+ output_type = tileable_data_type.output_type
52
+ else:
53
+ [output_type] = get_output_types(tileable_data_type)
54
+ return _io_handler_dispatcher[output_type]
52
55
 
53
56
 
54
57
  class AbstractObjectIOHandler(metaclass=ABCMeta):
55
- def _prepare_meta_for_serial(
56
- self, tileable: TileableType, meta: Dict[str, Any]
57
- ) -> Dict[str, Any]:
58
- to_pack = meta.copy()
59
- pickled_keys = []
60
- for k, v in meta.items():
61
- if not isinstance(v, (str, bytes, int, float, bool)):
62
- to_pack[k] = pickle.dumps(v)
63
- pickled_keys.append(k)
64
- to_pack[".pickled_keys"] = pickled_keys
65
- return to_pack
66
-
67
- def _prepare_meta_for_deserial(
68
- self, tileable: TileableType, meta: Dict[str, Any]
69
- ) -> Dict[str, Any]:
70
- pickled_keys = meta.pop(".pickled_keys", None) or []
71
- for k in pickled_keys:
72
- meta[k] = pickle.loads(meta[k])
73
- return meta
58
+ def _prepare_meta_for_serial(self, tileable: TileableType) -> Dict[str, Any]:
59
+ return tileable.params.copy()
74
60
 
75
61
  def read_object_meta(
76
62
  self, reader: ODPSVolumeReader, tileable: TileableType
77
63
  ) -> Dict[str, Any]:
78
- meta_obj = msgpack.loads(reader.read_file(_META_FILE_NAME))
79
- return self._prepare_meta_for_deserial(tileable, meta_obj)
64
+ file_bin = reader.read_file(_META_FILE_NAME)
65
+ meta_obj = msgpack.loads(file_bin)
66
+ pickled_keys = meta_obj.pop(_META_PICKLED_KEYS_KEY, None) or []
67
+ serialized_values = meta_obj.pop(_META_SERIALIZED_VALUE_KEY, None) or {}
68
+ for k in pickled_keys:
69
+ try:
70
+ meta_obj[k] = deserialize_serializable(serialized_values[k])
71
+ except:
72
+ meta_obj[k] = pickle.loads(meta_obj[k])
73
+ return meta_obj
80
74
 
81
75
  @abstractmethod
82
- def _read_object_body(
76
+ def read_object_body(
83
77
  self,
84
78
  reader: ODPSVolumeReader,
85
- tileable: TileableType,
86
- meta: Dict[str, Any],
79
+ params: Dict[str, Any],
80
+ extra_params: Dict[str, Any] = None,
87
81
  slices: SlicesType = None,
88
82
  ) -> Any:
89
83
  raise NotImplementedError
@@ -92,49 +86,71 @@ class AbstractObjectIOHandler(metaclass=ABCMeta):
92
86
  self,
93
87
  reader: ODPSVolumeReader,
94
88
  tileable: TileableType,
89
+ extra_params: Dict[str, Any] = None,
95
90
  slices: SlicesType = None,
96
91
  ) -> Any:
97
- meta = self.read_object_meta(reader, tileable)
98
- return self._read_object_body(reader, tileable, meta, slices)
92
+ obj_meta = self.read_object_meta(reader, tileable)
93
+ return self.read_object_body(reader, obj_meta, extra_params, slices)
99
94
 
100
95
  @abstractmethod
101
- def _write_object_body(
102
- self, writer: ODPSVolumeWriter, tileable: TileableType, value: Any
96
+ def write_object_body(
97
+ self, writer: ODPSVolumeWriter, params: Dict[str, Any], value: Any
103
98
  ):
104
99
  raise NotImplementedError
105
100
 
101
+ @classmethod
102
+ def _transform_serializable_meta(cls, meta: Dict[str, Any]) -> Dict[str, Any]:
103
+ to_pack = meta.copy()
104
+ pickled_keys = []
105
+ serialized_values = {}
106
+ for k, v in meta.items():
107
+ if not isinstance(v, (str, bytes, int, float, bool, type(None))):
108
+ to_pack[k] = pickle.dumps(v)
109
+ serialized_values[k] = serialize_serializable(v)
110
+ pickled_keys.append(k)
111
+ to_pack[_META_PICKLED_KEYS_KEY] = pickled_keys
112
+ to_pack[_META_SERIALIZED_VALUE_KEY] = serialized_values
113
+ return to_pack
114
+
106
115
  def write_object_meta(
107
116
  self,
108
117
  writer: ODPSVolumeWriter,
109
118
  tileable: TileableType,
110
119
  extra_meta: Dict[str, Any] = None,
111
120
  ):
112
- meta_obj = tileable.params.copy()
121
+ meta_obj = self._prepare_meta_for_serial(tileable)
113
122
  if extra_meta:
114
123
  meta_obj.update(extra_meta)
115
- meta_obj = self._prepare_meta_for_serial(tileable, meta_obj)
116
- packed = msgpack.dumps(meta_obj)
117
- writer.write_file(_META_FILE_NAME, packed)
124
+
125
+ def encode_np_num(obj):
126
+ if isinstance(obj, np.generic) and obj.shape == ():
127
+ return obj.item()
128
+ return obj
129
+
130
+ meta_obj = self._transform_serializable_meta(meta_obj)
131
+ writer.write_file(
132
+ _META_FILE_NAME, msgpack.dumps(meta_obj, default=encode_np_num)
133
+ )
118
134
 
119
135
  def write_object(
120
136
  self, writer: ODPSVolumeWriter, tileable: TileableType, value: Any
121
137
  ):
122
138
  self.write_object_meta(writer, tileable)
123
- self._write_object_body(writer, tileable, value)
139
+ self.write_object_body(writer, tileable.params, value)
124
140
 
125
141
 
126
- @register_object_io_handler(ObjectData)
142
+ @register_object_io_handler(OutputType.object)
127
143
  class ObjectIOHandler(AbstractObjectIOHandler):
128
- def _read_object_body(
144
+ def read_object_body(
129
145
  self,
130
146
  reader: ODPSVolumeReader,
131
- tileable: TileableType,
132
- meta: Dict[str, Any],
147
+ params: Dict[str, Any],
148
+ extra_params: Dict[str, Any] = None,
133
149
  slices: SlicesType = None,
134
150
  ) -> Any:
135
151
  return pickle.loads(reader.read_file("data"))
136
152
 
137
- def _write_object_body(
138
- self, writer: ODPSVolumeWriter, tileable: TileableType, value: Any
153
+ def write_object_body(
154
+ self, writer: ODPSVolumeWriter, params: Dict[str, Any], value: Any
139
155
  ):
140
156
  writer.write_file("data", pickle.dumps(value))