maxframe 0.1.0b5__cp38-cp38-macosx_11_0_arm64.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 (647) hide show
  1. maxframe/__init__.py +32 -0
  2. maxframe/_utils.cpython-38-darwin.so +0 -0
  3. maxframe/_utils.pxd +33 -0
  4. maxframe/_utils.pyx +547 -0
  5. maxframe/codegen.py +528 -0
  6. maxframe/config/__init__.py +15 -0
  7. maxframe/config/config.py +443 -0
  8. maxframe/config/tests/__init__.py +13 -0
  9. maxframe/config/tests/test_config.py +103 -0
  10. maxframe/config/tests/test_validators.py +34 -0
  11. maxframe/config/validators.py +57 -0
  12. maxframe/conftest.py +139 -0
  13. maxframe/core/__init__.py +65 -0
  14. maxframe/core/base.py +156 -0
  15. maxframe/core/entity/__init__.py +44 -0
  16. maxframe/core/entity/chunks.py +68 -0
  17. maxframe/core/entity/core.py +152 -0
  18. maxframe/core/entity/executable.py +337 -0
  19. maxframe/core/entity/fuse.py +73 -0
  20. maxframe/core/entity/objects.py +100 -0
  21. maxframe/core/entity/output_types.py +90 -0
  22. maxframe/core/entity/tileables.py +438 -0
  23. maxframe/core/entity/utils.py +24 -0
  24. maxframe/core/graph/__init__.py +17 -0
  25. maxframe/core/graph/builder/__init__.py +16 -0
  26. maxframe/core/graph/builder/base.py +86 -0
  27. maxframe/core/graph/builder/chunk.py +430 -0
  28. maxframe/core/graph/builder/tileable.py +34 -0
  29. maxframe/core/graph/builder/utils.py +41 -0
  30. maxframe/core/graph/core.cpython-38-darwin.so +0 -0
  31. maxframe/core/graph/core.pyx +467 -0
  32. maxframe/core/graph/entity.py +171 -0
  33. maxframe/core/graph/tests/__init__.py +13 -0
  34. maxframe/core/graph/tests/test_graph.py +205 -0
  35. maxframe/core/mode.py +96 -0
  36. maxframe/core/operator/__init__.py +34 -0
  37. maxframe/core/operator/base.py +450 -0
  38. maxframe/core/operator/core.py +276 -0
  39. maxframe/core/operator/fetch.py +53 -0
  40. maxframe/core/operator/fuse.py +29 -0
  41. maxframe/core/operator/objects.py +72 -0
  42. maxframe/core/operator/shuffle.py +111 -0
  43. maxframe/core/operator/tests/__init__.py +13 -0
  44. maxframe/core/operator/tests/test_core.py +64 -0
  45. maxframe/core/tests/__init__.py +13 -0
  46. maxframe/core/tests/test_mode.py +75 -0
  47. maxframe/dataframe/__init__.py +81 -0
  48. maxframe/dataframe/arithmetic/__init__.py +359 -0
  49. maxframe/dataframe/arithmetic/abs.py +33 -0
  50. maxframe/dataframe/arithmetic/add.py +60 -0
  51. maxframe/dataframe/arithmetic/arccos.py +28 -0
  52. maxframe/dataframe/arithmetic/arccosh.py +28 -0
  53. maxframe/dataframe/arithmetic/arcsin.py +28 -0
  54. maxframe/dataframe/arithmetic/arcsinh.py +28 -0
  55. maxframe/dataframe/arithmetic/arctan.py +28 -0
  56. maxframe/dataframe/arithmetic/arctanh.py +28 -0
  57. maxframe/dataframe/arithmetic/around.py +152 -0
  58. maxframe/dataframe/arithmetic/bitwise_and.py +46 -0
  59. maxframe/dataframe/arithmetic/bitwise_or.py +50 -0
  60. maxframe/dataframe/arithmetic/bitwise_xor.py +46 -0
  61. maxframe/dataframe/arithmetic/ceil.py +28 -0
  62. maxframe/dataframe/arithmetic/core.py +342 -0
  63. maxframe/dataframe/arithmetic/cos.py +28 -0
  64. maxframe/dataframe/arithmetic/cosh.py +28 -0
  65. maxframe/dataframe/arithmetic/degrees.py +28 -0
  66. maxframe/dataframe/arithmetic/docstring.py +442 -0
  67. maxframe/dataframe/arithmetic/equal.py +56 -0
  68. maxframe/dataframe/arithmetic/exp.py +28 -0
  69. maxframe/dataframe/arithmetic/exp2.py +28 -0
  70. maxframe/dataframe/arithmetic/expm1.py +28 -0
  71. maxframe/dataframe/arithmetic/floor.py +28 -0
  72. maxframe/dataframe/arithmetic/floordiv.py +64 -0
  73. maxframe/dataframe/arithmetic/greater.py +57 -0
  74. maxframe/dataframe/arithmetic/greater_equal.py +57 -0
  75. maxframe/dataframe/arithmetic/invert.py +33 -0
  76. maxframe/dataframe/arithmetic/is_ufuncs.py +62 -0
  77. maxframe/dataframe/arithmetic/less.py +57 -0
  78. maxframe/dataframe/arithmetic/less_equal.py +57 -0
  79. maxframe/dataframe/arithmetic/log.py +28 -0
  80. maxframe/dataframe/arithmetic/log10.py +28 -0
  81. maxframe/dataframe/arithmetic/log2.py +28 -0
  82. maxframe/dataframe/arithmetic/mod.py +60 -0
  83. maxframe/dataframe/arithmetic/multiply.py +60 -0
  84. maxframe/dataframe/arithmetic/negative.py +33 -0
  85. maxframe/dataframe/arithmetic/not_equal.py +56 -0
  86. maxframe/dataframe/arithmetic/power.py +68 -0
  87. maxframe/dataframe/arithmetic/radians.py +28 -0
  88. maxframe/dataframe/arithmetic/sin.py +28 -0
  89. maxframe/dataframe/arithmetic/sinh.py +28 -0
  90. maxframe/dataframe/arithmetic/sqrt.py +28 -0
  91. maxframe/dataframe/arithmetic/subtract.py +64 -0
  92. maxframe/dataframe/arithmetic/tan.py +28 -0
  93. maxframe/dataframe/arithmetic/tanh.py +28 -0
  94. maxframe/dataframe/arithmetic/tests/__init__.py +13 -0
  95. maxframe/dataframe/arithmetic/tests/test_arithmetic.py +695 -0
  96. maxframe/dataframe/arithmetic/truediv.py +64 -0
  97. maxframe/dataframe/arithmetic/trunc.py +28 -0
  98. maxframe/dataframe/arrays.py +864 -0
  99. maxframe/dataframe/core.py +2417 -0
  100. maxframe/dataframe/datasource/__init__.py +15 -0
  101. maxframe/dataframe/datasource/core.py +81 -0
  102. maxframe/dataframe/datasource/dataframe.py +59 -0
  103. maxframe/dataframe/datasource/date_range.py +504 -0
  104. maxframe/dataframe/datasource/from_index.py +54 -0
  105. maxframe/dataframe/datasource/from_records.py +107 -0
  106. maxframe/dataframe/datasource/from_tensor.py +419 -0
  107. maxframe/dataframe/datasource/index.py +117 -0
  108. maxframe/dataframe/datasource/read_csv.py +528 -0
  109. maxframe/dataframe/datasource/read_odps_query.py +299 -0
  110. maxframe/dataframe/datasource/read_odps_table.py +253 -0
  111. maxframe/dataframe/datasource/read_parquet.py +421 -0
  112. maxframe/dataframe/datasource/series.py +55 -0
  113. maxframe/dataframe/datasource/tests/__init__.py +13 -0
  114. maxframe/dataframe/datasource/tests/test_datasource.py +401 -0
  115. maxframe/dataframe/datastore/__init__.py +26 -0
  116. maxframe/dataframe/datastore/core.py +19 -0
  117. maxframe/dataframe/datastore/to_csv.py +227 -0
  118. maxframe/dataframe/datastore/to_odps.py +162 -0
  119. maxframe/dataframe/extensions/__init__.py +41 -0
  120. maxframe/dataframe/extensions/accessor.py +50 -0
  121. maxframe/dataframe/extensions/reshuffle.py +83 -0
  122. maxframe/dataframe/extensions/tests/__init__.py +13 -0
  123. maxframe/dataframe/extensions/tests/test_extensions.py +38 -0
  124. maxframe/dataframe/fetch/__init__.py +15 -0
  125. maxframe/dataframe/fetch/core.py +86 -0
  126. maxframe/dataframe/groupby/__init__.py +82 -0
  127. maxframe/dataframe/groupby/aggregation.py +350 -0
  128. maxframe/dataframe/groupby/apply.py +251 -0
  129. maxframe/dataframe/groupby/core.py +179 -0
  130. maxframe/dataframe/groupby/cum.py +124 -0
  131. maxframe/dataframe/groupby/fill.py +141 -0
  132. maxframe/dataframe/groupby/getitem.py +92 -0
  133. maxframe/dataframe/groupby/head.py +105 -0
  134. maxframe/dataframe/groupby/sample.py +214 -0
  135. maxframe/dataframe/groupby/tests/__init__.py +13 -0
  136. maxframe/dataframe/groupby/tests/test_groupby.py +374 -0
  137. maxframe/dataframe/groupby/transform.py +255 -0
  138. maxframe/dataframe/indexing/__init__.py +84 -0
  139. maxframe/dataframe/indexing/add_prefix_suffix.py +110 -0
  140. maxframe/dataframe/indexing/align.py +349 -0
  141. maxframe/dataframe/indexing/at.py +83 -0
  142. maxframe/dataframe/indexing/getitem.py +204 -0
  143. maxframe/dataframe/indexing/iat.py +37 -0
  144. maxframe/dataframe/indexing/iloc.py +566 -0
  145. maxframe/dataframe/indexing/insert.py +86 -0
  146. maxframe/dataframe/indexing/loc.py +411 -0
  147. maxframe/dataframe/indexing/reindex.py +526 -0
  148. maxframe/dataframe/indexing/rename.py +462 -0
  149. maxframe/dataframe/indexing/rename_axis.py +209 -0
  150. maxframe/dataframe/indexing/reset_index.py +402 -0
  151. maxframe/dataframe/indexing/sample.py +221 -0
  152. maxframe/dataframe/indexing/set_axis.py +194 -0
  153. maxframe/dataframe/indexing/set_index.py +61 -0
  154. maxframe/dataframe/indexing/setitem.py +130 -0
  155. maxframe/dataframe/indexing/tests/__init__.py +13 -0
  156. maxframe/dataframe/indexing/tests/test_indexing.py +488 -0
  157. maxframe/dataframe/indexing/where.py +308 -0
  158. maxframe/dataframe/initializer.py +288 -0
  159. maxframe/dataframe/merge/__init__.py +32 -0
  160. maxframe/dataframe/merge/append.py +121 -0
  161. maxframe/dataframe/merge/concat.py +325 -0
  162. maxframe/dataframe/merge/merge.py +593 -0
  163. maxframe/dataframe/merge/tests/__init__.py +13 -0
  164. maxframe/dataframe/merge/tests/test_merge.py +215 -0
  165. maxframe/dataframe/misc/__init__.py +134 -0
  166. maxframe/dataframe/misc/_duplicate.py +46 -0
  167. maxframe/dataframe/misc/accessor.py +276 -0
  168. maxframe/dataframe/misc/apply.py +692 -0
  169. maxframe/dataframe/misc/astype.py +236 -0
  170. maxframe/dataframe/misc/case_when.py +141 -0
  171. maxframe/dataframe/misc/check_monotonic.py +84 -0
  172. maxframe/dataframe/misc/cut.py +383 -0
  173. maxframe/dataframe/misc/datetimes.py +79 -0
  174. maxframe/dataframe/misc/describe.py +108 -0
  175. maxframe/dataframe/misc/diff.py +210 -0
  176. maxframe/dataframe/misc/drop.py +440 -0
  177. maxframe/dataframe/misc/drop_duplicates.py +248 -0
  178. maxframe/dataframe/misc/duplicated.py +292 -0
  179. maxframe/dataframe/misc/eval.py +728 -0
  180. maxframe/dataframe/misc/explode.py +171 -0
  181. maxframe/dataframe/misc/get_dummies.py +208 -0
  182. maxframe/dataframe/misc/isin.py +217 -0
  183. maxframe/dataframe/misc/map.py +236 -0
  184. maxframe/dataframe/misc/melt.py +162 -0
  185. maxframe/dataframe/misc/memory_usage.py +248 -0
  186. maxframe/dataframe/misc/pct_change.py +150 -0
  187. maxframe/dataframe/misc/pivot_table.py +262 -0
  188. maxframe/dataframe/misc/qcut.py +104 -0
  189. maxframe/dataframe/misc/select_dtypes.py +104 -0
  190. maxframe/dataframe/misc/shift.py +256 -0
  191. maxframe/dataframe/misc/stack.py +238 -0
  192. maxframe/dataframe/misc/string_.py +221 -0
  193. maxframe/dataframe/misc/tests/__init__.py +13 -0
  194. maxframe/dataframe/misc/tests/test_misc.py +468 -0
  195. maxframe/dataframe/misc/to_numeric.py +178 -0
  196. maxframe/dataframe/misc/transform.py +361 -0
  197. maxframe/dataframe/misc/transpose.py +136 -0
  198. maxframe/dataframe/misc/value_counts.py +182 -0
  199. maxframe/dataframe/missing/__init__.py +53 -0
  200. maxframe/dataframe/missing/checkna.py +223 -0
  201. maxframe/dataframe/missing/dropna.py +280 -0
  202. maxframe/dataframe/missing/fillna.py +275 -0
  203. maxframe/dataframe/missing/replace.py +439 -0
  204. maxframe/dataframe/missing/tests/__init__.py +13 -0
  205. maxframe/dataframe/missing/tests/test_missing.py +89 -0
  206. maxframe/dataframe/operators.py +273 -0
  207. maxframe/dataframe/plotting/__init__.py +40 -0
  208. maxframe/dataframe/plotting/core.py +78 -0
  209. maxframe/dataframe/plotting/tests/__init__.py +13 -0
  210. maxframe/dataframe/plotting/tests/test_plotting.py +136 -0
  211. maxframe/dataframe/reduction/__init__.py +107 -0
  212. maxframe/dataframe/reduction/aggregation.py +344 -0
  213. maxframe/dataframe/reduction/all.py +78 -0
  214. maxframe/dataframe/reduction/any.py +78 -0
  215. maxframe/dataframe/reduction/core.py +837 -0
  216. maxframe/dataframe/reduction/count.py +59 -0
  217. maxframe/dataframe/reduction/cummax.py +30 -0
  218. maxframe/dataframe/reduction/cummin.py +30 -0
  219. maxframe/dataframe/reduction/cumprod.py +30 -0
  220. maxframe/dataframe/reduction/cumsum.py +30 -0
  221. maxframe/dataframe/reduction/custom_reduction.py +42 -0
  222. maxframe/dataframe/reduction/kurtosis.py +104 -0
  223. maxframe/dataframe/reduction/max.py +65 -0
  224. maxframe/dataframe/reduction/mean.py +61 -0
  225. maxframe/dataframe/reduction/min.py +65 -0
  226. maxframe/dataframe/reduction/nunique.py +141 -0
  227. maxframe/dataframe/reduction/prod.py +76 -0
  228. maxframe/dataframe/reduction/reduction_size.py +36 -0
  229. maxframe/dataframe/reduction/sem.py +69 -0
  230. maxframe/dataframe/reduction/skew.py +89 -0
  231. maxframe/dataframe/reduction/std.py +53 -0
  232. maxframe/dataframe/reduction/str_concat.py +48 -0
  233. maxframe/dataframe/reduction/sum.py +77 -0
  234. maxframe/dataframe/reduction/tests/__init__.py +13 -0
  235. maxframe/dataframe/reduction/tests/test_reduction.py +486 -0
  236. maxframe/dataframe/reduction/unique.py +90 -0
  237. maxframe/dataframe/reduction/var.py +72 -0
  238. maxframe/dataframe/sort/__init__.py +34 -0
  239. maxframe/dataframe/sort/core.py +36 -0
  240. maxframe/dataframe/sort/sort_index.py +153 -0
  241. maxframe/dataframe/sort/sort_values.py +311 -0
  242. maxframe/dataframe/sort/tests/__init__.py +13 -0
  243. maxframe/dataframe/sort/tests/test_sort.py +81 -0
  244. maxframe/dataframe/statistics/__init__.py +33 -0
  245. maxframe/dataframe/statistics/corr.py +280 -0
  246. maxframe/dataframe/statistics/quantile.py +341 -0
  247. maxframe/dataframe/statistics/tests/__init__.py +13 -0
  248. maxframe/dataframe/statistics/tests/test_statistics.py +82 -0
  249. maxframe/dataframe/tests/__init__.py +13 -0
  250. maxframe/dataframe/tests/test_initializer.py +29 -0
  251. maxframe/dataframe/tseries/__init__.py +13 -0
  252. maxframe/dataframe/tseries/tests/__init__.py +13 -0
  253. maxframe/dataframe/tseries/tests/test_tseries.py +30 -0
  254. maxframe/dataframe/tseries/to_datetime.py +297 -0
  255. maxframe/dataframe/ufunc/__init__.py +27 -0
  256. maxframe/dataframe/ufunc/tensor.py +54 -0
  257. maxframe/dataframe/ufunc/ufunc.py +52 -0
  258. maxframe/dataframe/utils.py +1267 -0
  259. maxframe/dataframe/window/__init__.py +29 -0
  260. maxframe/dataframe/window/aggregation.py +96 -0
  261. maxframe/dataframe/window/core.py +69 -0
  262. maxframe/dataframe/window/ewm.py +249 -0
  263. maxframe/dataframe/window/expanding.py +147 -0
  264. maxframe/dataframe/window/rolling.py +376 -0
  265. maxframe/dataframe/window/tests/__init__.py +13 -0
  266. maxframe/dataframe/window/tests/test_ewm.py +70 -0
  267. maxframe/dataframe/window/tests/test_expanding.py +66 -0
  268. maxframe/dataframe/window/tests/test_rolling.py +57 -0
  269. maxframe/env.py +33 -0
  270. maxframe/errors.py +21 -0
  271. maxframe/extension.py +81 -0
  272. maxframe/learn/__init__.py +17 -0
  273. maxframe/learn/contrib/__init__.py +17 -0
  274. maxframe/learn/contrib/pytorch/__init__.py +16 -0
  275. maxframe/learn/contrib/pytorch/run_function.py +110 -0
  276. maxframe/learn/contrib/pytorch/run_script.py +102 -0
  277. maxframe/learn/contrib/pytorch/tests/__init__.py +13 -0
  278. maxframe/learn/contrib/pytorch/tests/test_pytorch.py +42 -0
  279. maxframe/learn/contrib/utils.py +52 -0
  280. maxframe/learn/contrib/xgboost/__init__.py +26 -0
  281. maxframe/learn/contrib/xgboost/classifier.py +86 -0
  282. maxframe/learn/contrib/xgboost/core.py +156 -0
  283. maxframe/learn/contrib/xgboost/dmatrix.py +150 -0
  284. maxframe/learn/contrib/xgboost/predict.py +138 -0
  285. maxframe/learn/contrib/xgboost/regressor.py +78 -0
  286. maxframe/learn/contrib/xgboost/tests/__init__.py +13 -0
  287. maxframe/learn/contrib/xgboost/tests/test_core.py +43 -0
  288. maxframe/learn/contrib/xgboost/train.py +121 -0
  289. maxframe/learn/utils/__init__.py +15 -0
  290. maxframe/learn/utils/core.py +29 -0
  291. maxframe/lib/__init__.py +15 -0
  292. maxframe/lib/aio/__init__.py +27 -0
  293. maxframe/lib/aio/_runners.py +162 -0
  294. maxframe/lib/aio/_threads.py +35 -0
  295. maxframe/lib/aio/base.py +82 -0
  296. maxframe/lib/aio/file.py +85 -0
  297. maxframe/lib/aio/isolation.py +100 -0
  298. maxframe/lib/aio/lru.py +242 -0
  299. maxframe/lib/aio/parallelism.py +37 -0
  300. maxframe/lib/aio/tests/__init__.py +13 -0
  301. maxframe/lib/aio/tests/test_aio_file.py +55 -0
  302. maxframe/lib/compression.py +55 -0
  303. maxframe/lib/cython/__init__.py +13 -0
  304. maxframe/lib/cython/libcpp.pxd +30 -0
  305. maxframe/lib/filesystem/__init__.py +21 -0
  306. maxframe/lib/filesystem/_glob.py +173 -0
  307. maxframe/lib/filesystem/_oss_lib/__init__.py +13 -0
  308. maxframe/lib/filesystem/_oss_lib/common.py +198 -0
  309. maxframe/lib/filesystem/_oss_lib/glob.py +147 -0
  310. maxframe/lib/filesystem/_oss_lib/handle.py +156 -0
  311. maxframe/lib/filesystem/arrow.py +236 -0
  312. maxframe/lib/filesystem/base.py +263 -0
  313. maxframe/lib/filesystem/core.py +95 -0
  314. maxframe/lib/filesystem/fsmap.py +164 -0
  315. maxframe/lib/filesystem/hdfs.py +31 -0
  316. maxframe/lib/filesystem/local.py +112 -0
  317. maxframe/lib/filesystem/oss.py +157 -0
  318. maxframe/lib/filesystem/tests/__init__.py +13 -0
  319. maxframe/lib/filesystem/tests/test_filesystem.py +223 -0
  320. maxframe/lib/filesystem/tests/test_oss.py +182 -0
  321. maxframe/lib/functools_compat.py +81 -0
  322. maxframe/lib/mmh3.cpython-38-darwin.so +0 -0
  323. maxframe/lib/mmh3_src/MurmurHash3.cpp +339 -0
  324. maxframe/lib/mmh3_src/MurmurHash3.h +43 -0
  325. maxframe/lib/mmh3_src/mmh3module.cpp +387 -0
  326. maxframe/lib/sparse/__init__.py +861 -0
  327. maxframe/lib/sparse/array.py +1604 -0
  328. maxframe/lib/sparse/core.py +92 -0
  329. maxframe/lib/sparse/matrix.py +241 -0
  330. maxframe/lib/sparse/tests/__init__.py +15 -0
  331. maxframe/lib/sparse/tests/test_sparse.py +476 -0
  332. maxframe/lib/sparse/vector.py +150 -0
  333. maxframe/lib/tblib/LICENSE +20 -0
  334. maxframe/lib/tblib/__init__.py +327 -0
  335. maxframe/lib/tblib/cpython.py +83 -0
  336. maxframe/lib/tblib/decorators.py +44 -0
  337. maxframe/lib/tblib/pickling_support.py +90 -0
  338. maxframe/lib/tests/__init__.py +13 -0
  339. maxframe/lib/tests/test_wrapped_pickle.py +51 -0
  340. maxframe/lib/version.py +620 -0
  341. maxframe/lib/wrapped_pickle.py +139 -0
  342. maxframe/mixin.py +100 -0
  343. maxframe/odpsio/__init__.py +21 -0
  344. maxframe/odpsio/arrow.py +91 -0
  345. maxframe/odpsio/schema.py +364 -0
  346. maxframe/odpsio/tableio.py +322 -0
  347. maxframe/odpsio/tests/__init__.py +13 -0
  348. maxframe/odpsio/tests/test_arrow.py +88 -0
  349. maxframe/odpsio/tests/test_schema.py +297 -0
  350. maxframe/odpsio/tests/test_tableio.py +136 -0
  351. maxframe/odpsio/tests/test_volumeio.py +90 -0
  352. maxframe/odpsio/volumeio.py +95 -0
  353. maxframe/opcodes.py +590 -0
  354. maxframe/protocol.py +415 -0
  355. maxframe/remote/__init__.py +18 -0
  356. maxframe/remote/core.py +210 -0
  357. maxframe/remote/run_script.py +121 -0
  358. maxframe/serialization/__init__.py +26 -0
  359. maxframe/serialization/arrow.py +95 -0
  360. maxframe/serialization/core.cpython-38-darwin.so +0 -0
  361. maxframe/serialization/core.pxd +44 -0
  362. maxframe/serialization/core.pyi +61 -0
  363. maxframe/serialization/core.pyx +1094 -0
  364. maxframe/serialization/exception.py +86 -0
  365. maxframe/serialization/maxframe_objects.py +39 -0
  366. maxframe/serialization/numpy.py +91 -0
  367. maxframe/serialization/pandas.py +202 -0
  368. maxframe/serialization/scipy.py +71 -0
  369. maxframe/serialization/serializables/__init__.py +55 -0
  370. maxframe/serialization/serializables/core.py +262 -0
  371. maxframe/serialization/serializables/field.py +624 -0
  372. maxframe/serialization/serializables/field_type.py +589 -0
  373. maxframe/serialization/serializables/tests/__init__.py +13 -0
  374. maxframe/serialization/serializables/tests/test_field_type.py +121 -0
  375. maxframe/serialization/serializables/tests/test_serializable.py +250 -0
  376. maxframe/serialization/tests/__init__.py +13 -0
  377. maxframe/serialization/tests/test_serial.py +412 -0
  378. maxframe/session.py +1310 -0
  379. maxframe/tensor/__init__.py +183 -0
  380. maxframe/tensor/arithmetic/__init__.py +315 -0
  381. maxframe/tensor/arithmetic/abs.py +68 -0
  382. maxframe/tensor/arithmetic/absolute.py +68 -0
  383. maxframe/tensor/arithmetic/add.py +82 -0
  384. maxframe/tensor/arithmetic/angle.py +72 -0
  385. maxframe/tensor/arithmetic/arccos.py +104 -0
  386. maxframe/tensor/arithmetic/arccosh.py +91 -0
  387. maxframe/tensor/arithmetic/arcsin.py +94 -0
  388. maxframe/tensor/arithmetic/arcsinh.py +86 -0
  389. maxframe/tensor/arithmetic/arctan.py +106 -0
  390. maxframe/tensor/arithmetic/arctan2.py +128 -0
  391. maxframe/tensor/arithmetic/arctanh.py +86 -0
  392. maxframe/tensor/arithmetic/around.py +114 -0
  393. maxframe/tensor/arithmetic/bitand.py +95 -0
  394. maxframe/tensor/arithmetic/bitor.py +102 -0
  395. maxframe/tensor/arithmetic/bitxor.py +95 -0
  396. maxframe/tensor/arithmetic/cbrt.py +66 -0
  397. maxframe/tensor/arithmetic/ceil.py +71 -0
  398. maxframe/tensor/arithmetic/clip.py +165 -0
  399. maxframe/tensor/arithmetic/conj.py +74 -0
  400. maxframe/tensor/arithmetic/copysign.py +78 -0
  401. maxframe/tensor/arithmetic/core.py +544 -0
  402. maxframe/tensor/arithmetic/cos.py +85 -0
  403. maxframe/tensor/arithmetic/cosh.py +72 -0
  404. maxframe/tensor/arithmetic/deg2rad.py +72 -0
  405. maxframe/tensor/arithmetic/degrees.py +77 -0
  406. maxframe/tensor/arithmetic/divide.py +114 -0
  407. maxframe/tensor/arithmetic/equal.py +76 -0
  408. maxframe/tensor/arithmetic/exp.py +106 -0
  409. maxframe/tensor/arithmetic/exp2.py +67 -0
  410. maxframe/tensor/arithmetic/expm1.py +79 -0
  411. maxframe/tensor/arithmetic/fabs.py +74 -0
  412. maxframe/tensor/arithmetic/fix.py +69 -0
  413. maxframe/tensor/arithmetic/float_power.py +103 -0
  414. maxframe/tensor/arithmetic/floor.py +77 -0
  415. maxframe/tensor/arithmetic/floordiv.py +94 -0
  416. maxframe/tensor/arithmetic/fmax.py +105 -0
  417. maxframe/tensor/arithmetic/fmin.py +106 -0
  418. maxframe/tensor/arithmetic/fmod.py +99 -0
  419. maxframe/tensor/arithmetic/frexp.py +92 -0
  420. maxframe/tensor/arithmetic/greater.py +77 -0
  421. maxframe/tensor/arithmetic/greater_equal.py +69 -0
  422. maxframe/tensor/arithmetic/hypot.py +77 -0
  423. maxframe/tensor/arithmetic/i0.py +89 -0
  424. maxframe/tensor/arithmetic/imag.py +67 -0
  425. maxframe/tensor/arithmetic/invert.py +110 -0
  426. maxframe/tensor/arithmetic/isclose.py +115 -0
  427. maxframe/tensor/arithmetic/iscomplex.py +64 -0
  428. maxframe/tensor/arithmetic/isfinite.py +106 -0
  429. maxframe/tensor/arithmetic/isinf.py +103 -0
  430. maxframe/tensor/arithmetic/isnan.py +82 -0
  431. maxframe/tensor/arithmetic/isreal.py +63 -0
  432. maxframe/tensor/arithmetic/ldexp.py +99 -0
  433. maxframe/tensor/arithmetic/less.py +69 -0
  434. maxframe/tensor/arithmetic/less_equal.py +69 -0
  435. maxframe/tensor/arithmetic/log.py +92 -0
  436. maxframe/tensor/arithmetic/log10.py +85 -0
  437. maxframe/tensor/arithmetic/log1p.py +95 -0
  438. maxframe/tensor/arithmetic/log2.py +85 -0
  439. maxframe/tensor/arithmetic/logaddexp.py +80 -0
  440. maxframe/tensor/arithmetic/logaddexp2.py +78 -0
  441. maxframe/tensor/arithmetic/logical_and.py +81 -0
  442. maxframe/tensor/arithmetic/logical_not.py +74 -0
  443. maxframe/tensor/arithmetic/logical_or.py +82 -0
  444. maxframe/tensor/arithmetic/logical_xor.py +88 -0
  445. maxframe/tensor/arithmetic/lshift.py +82 -0
  446. maxframe/tensor/arithmetic/maximum.py +108 -0
  447. maxframe/tensor/arithmetic/minimum.py +108 -0
  448. maxframe/tensor/arithmetic/mod.py +104 -0
  449. maxframe/tensor/arithmetic/modf.py +83 -0
  450. maxframe/tensor/arithmetic/multiply.py +81 -0
  451. maxframe/tensor/arithmetic/nan_to_num.py +99 -0
  452. maxframe/tensor/arithmetic/negative.py +65 -0
  453. maxframe/tensor/arithmetic/nextafter.py +68 -0
  454. maxframe/tensor/arithmetic/not_equal.py +72 -0
  455. maxframe/tensor/arithmetic/positive.py +47 -0
  456. maxframe/tensor/arithmetic/power.py +106 -0
  457. maxframe/tensor/arithmetic/rad2deg.py +71 -0
  458. maxframe/tensor/arithmetic/radians.py +77 -0
  459. maxframe/tensor/arithmetic/real.py +70 -0
  460. maxframe/tensor/arithmetic/reciprocal.py +76 -0
  461. maxframe/tensor/arithmetic/rint.py +68 -0
  462. maxframe/tensor/arithmetic/rshift.py +81 -0
  463. maxframe/tensor/arithmetic/setimag.py +29 -0
  464. maxframe/tensor/arithmetic/setreal.py +29 -0
  465. maxframe/tensor/arithmetic/sign.py +81 -0
  466. maxframe/tensor/arithmetic/signbit.py +65 -0
  467. maxframe/tensor/arithmetic/sin.py +98 -0
  468. maxframe/tensor/arithmetic/sinc.py +102 -0
  469. maxframe/tensor/arithmetic/sinh.py +93 -0
  470. maxframe/tensor/arithmetic/spacing.py +72 -0
  471. maxframe/tensor/arithmetic/sqrt.py +81 -0
  472. maxframe/tensor/arithmetic/square.py +69 -0
  473. maxframe/tensor/arithmetic/subtract.py +81 -0
  474. maxframe/tensor/arithmetic/tan.py +88 -0
  475. maxframe/tensor/arithmetic/tanh.py +92 -0
  476. maxframe/tensor/arithmetic/tests/__init__.py +15 -0
  477. maxframe/tensor/arithmetic/tests/test_arithmetic.py +414 -0
  478. maxframe/tensor/arithmetic/truediv.py +104 -0
  479. maxframe/tensor/arithmetic/trunc.py +72 -0
  480. maxframe/tensor/arithmetic/utils.py +65 -0
  481. maxframe/tensor/array_utils.py +186 -0
  482. maxframe/tensor/base/__init__.py +34 -0
  483. maxframe/tensor/base/astype.py +119 -0
  484. maxframe/tensor/base/atleast_1d.py +74 -0
  485. maxframe/tensor/base/broadcast_to.py +89 -0
  486. maxframe/tensor/base/ravel.py +92 -0
  487. maxframe/tensor/base/tests/__init__.py +13 -0
  488. maxframe/tensor/base/tests/test_base.py +114 -0
  489. maxframe/tensor/base/transpose.py +125 -0
  490. maxframe/tensor/base/unique.py +205 -0
  491. maxframe/tensor/base/where.py +127 -0
  492. maxframe/tensor/core.py +724 -0
  493. maxframe/tensor/datasource/__init__.py +32 -0
  494. maxframe/tensor/datasource/arange.py +156 -0
  495. maxframe/tensor/datasource/array.py +415 -0
  496. maxframe/tensor/datasource/core.py +109 -0
  497. maxframe/tensor/datasource/empty.py +169 -0
  498. maxframe/tensor/datasource/from_dataframe.py +70 -0
  499. maxframe/tensor/datasource/from_dense.py +54 -0
  500. maxframe/tensor/datasource/from_sparse.py +47 -0
  501. maxframe/tensor/datasource/full.py +186 -0
  502. maxframe/tensor/datasource/ones.py +173 -0
  503. maxframe/tensor/datasource/scalar.py +40 -0
  504. maxframe/tensor/datasource/tests/__init__.py +13 -0
  505. maxframe/tensor/datasource/tests/test_datasource.py +278 -0
  506. maxframe/tensor/datasource/zeros.py +188 -0
  507. maxframe/tensor/fetch/__init__.py +15 -0
  508. maxframe/tensor/fetch/core.py +54 -0
  509. maxframe/tensor/indexing/__init__.py +47 -0
  510. maxframe/tensor/indexing/choose.py +196 -0
  511. maxframe/tensor/indexing/compress.py +124 -0
  512. maxframe/tensor/indexing/core.py +190 -0
  513. maxframe/tensor/indexing/extract.py +71 -0
  514. maxframe/tensor/indexing/fill_diagonal.py +183 -0
  515. maxframe/tensor/indexing/flatnonzero.py +60 -0
  516. maxframe/tensor/indexing/getitem.py +175 -0
  517. maxframe/tensor/indexing/nonzero.py +120 -0
  518. maxframe/tensor/indexing/setitem.py +132 -0
  519. maxframe/tensor/indexing/slice.py +29 -0
  520. maxframe/tensor/indexing/take.py +130 -0
  521. maxframe/tensor/indexing/tests/__init__.py +15 -0
  522. maxframe/tensor/indexing/tests/test_indexing.py +234 -0
  523. maxframe/tensor/indexing/unravel_index.py +103 -0
  524. maxframe/tensor/merge/__init__.py +15 -0
  525. maxframe/tensor/merge/stack.py +132 -0
  526. maxframe/tensor/merge/tests/__init__.py +13 -0
  527. maxframe/tensor/merge/tests/test_merge.py +52 -0
  528. maxframe/tensor/operators.py +123 -0
  529. maxframe/tensor/random/__init__.py +168 -0
  530. maxframe/tensor/random/beta.py +87 -0
  531. maxframe/tensor/random/binomial.py +137 -0
  532. maxframe/tensor/random/bytes.py +39 -0
  533. maxframe/tensor/random/chisquare.py +110 -0
  534. maxframe/tensor/random/choice.py +186 -0
  535. maxframe/tensor/random/core.py +234 -0
  536. maxframe/tensor/random/dirichlet.py +123 -0
  537. maxframe/tensor/random/exponential.py +94 -0
  538. maxframe/tensor/random/f.py +135 -0
  539. maxframe/tensor/random/gamma.py +128 -0
  540. maxframe/tensor/random/geometric.py +93 -0
  541. maxframe/tensor/random/gumbel.py +167 -0
  542. maxframe/tensor/random/hypergeometric.py +148 -0
  543. maxframe/tensor/random/laplace.py +133 -0
  544. maxframe/tensor/random/logistic.py +129 -0
  545. maxframe/tensor/random/lognormal.py +159 -0
  546. maxframe/tensor/random/logseries.py +122 -0
  547. maxframe/tensor/random/multinomial.py +133 -0
  548. maxframe/tensor/random/multivariate_normal.py +192 -0
  549. maxframe/tensor/random/negative_binomial.py +125 -0
  550. maxframe/tensor/random/noncentral_chisquare.py +132 -0
  551. maxframe/tensor/random/noncentral_f.py +126 -0
  552. maxframe/tensor/random/normal.py +143 -0
  553. maxframe/tensor/random/pareto.py +140 -0
  554. maxframe/tensor/random/permutation.py +104 -0
  555. maxframe/tensor/random/poisson.py +111 -0
  556. maxframe/tensor/random/power.py +142 -0
  557. maxframe/tensor/random/rand.py +82 -0
  558. maxframe/tensor/random/randint.py +121 -0
  559. maxframe/tensor/random/randn.py +96 -0
  560. maxframe/tensor/random/random_integers.py +123 -0
  561. maxframe/tensor/random/random_sample.py +86 -0
  562. maxframe/tensor/random/rayleigh.py +110 -0
  563. maxframe/tensor/random/shuffle.py +61 -0
  564. maxframe/tensor/random/standard_cauchy.py +105 -0
  565. maxframe/tensor/random/standard_exponential.py +72 -0
  566. maxframe/tensor/random/standard_gamma.py +120 -0
  567. maxframe/tensor/random/standard_normal.py +74 -0
  568. maxframe/tensor/random/standard_t.py +135 -0
  569. maxframe/tensor/random/tests/__init__.py +15 -0
  570. maxframe/tensor/random/tests/test_random.py +167 -0
  571. maxframe/tensor/random/triangular.py +119 -0
  572. maxframe/tensor/random/uniform.py +131 -0
  573. maxframe/tensor/random/vonmises.py +131 -0
  574. maxframe/tensor/random/wald.py +114 -0
  575. maxframe/tensor/random/weibull.py +140 -0
  576. maxframe/tensor/random/zipf.py +122 -0
  577. maxframe/tensor/rechunk/__init__.py +26 -0
  578. maxframe/tensor/rechunk/rechunk.py +43 -0
  579. maxframe/tensor/reduction/__init__.py +66 -0
  580. maxframe/tensor/reduction/all.py +103 -0
  581. maxframe/tensor/reduction/allclose.py +88 -0
  582. maxframe/tensor/reduction/any.py +105 -0
  583. maxframe/tensor/reduction/argmax.py +103 -0
  584. maxframe/tensor/reduction/argmin.py +103 -0
  585. maxframe/tensor/reduction/array_equal.py +64 -0
  586. maxframe/tensor/reduction/core.py +168 -0
  587. maxframe/tensor/reduction/count_nonzero.py +81 -0
  588. maxframe/tensor/reduction/cumprod.py +97 -0
  589. maxframe/tensor/reduction/cumsum.py +101 -0
  590. maxframe/tensor/reduction/max.py +120 -0
  591. maxframe/tensor/reduction/mean.py +123 -0
  592. maxframe/tensor/reduction/min.py +120 -0
  593. maxframe/tensor/reduction/nanargmax.py +82 -0
  594. maxframe/tensor/reduction/nanargmin.py +76 -0
  595. maxframe/tensor/reduction/nancumprod.py +91 -0
  596. maxframe/tensor/reduction/nancumsum.py +94 -0
  597. maxframe/tensor/reduction/nanmax.py +111 -0
  598. maxframe/tensor/reduction/nanmean.py +106 -0
  599. maxframe/tensor/reduction/nanmin.py +111 -0
  600. maxframe/tensor/reduction/nanprod.py +94 -0
  601. maxframe/tensor/reduction/nanstd.py +126 -0
  602. maxframe/tensor/reduction/nansum.py +115 -0
  603. maxframe/tensor/reduction/nanvar.py +149 -0
  604. maxframe/tensor/reduction/prod.py +130 -0
  605. maxframe/tensor/reduction/std.py +134 -0
  606. maxframe/tensor/reduction/sum.py +125 -0
  607. maxframe/tensor/reduction/tests/__init__.py +13 -0
  608. maxframe/tensor/reduction/tests/test_reduction.py +181 -0
  609. maxframe/tensor/reduction/var.py +176 -0
  610. maxframe/tensor/reshape/__init__.py +17 -0
  611. maxframe/tensor/reshape/reshape.py +188 -0
  612. maxframe/tensor/reshape/tests/__init__.py +15 -0
  613. maxframe/tensor/reshape/tests/test_reshape.py +37 -0
  614. maxframe/tensor/statistics/__init__.py +13 -0
  615. maxframe/tensor/statistics/percentile.py +175 -0
  616. maxframe/tensor/statistics/quantile.py +288 -0
  617. maxframe/tensor/ufunc/__init__.py +26 -0
  618. maxframe/tensor/ufunc/ufunc.py +200 -0
  619. maxframe/tensor/utils.py +718 -0
  620. maxframe/tests/__init__.py +13 -0
  621. maxframe/tests/test_codegen.py +69 -0
  622. maxframe/tests/test_protocol.py +144 -0
  623. maxframe/tests/test_utils.py +376 -0
  624. maxframe/tests/utils.py +164 -0
  625. maxframe/typing_.py +37 -0
  626. maxframe/udf.py +134 -0
  627. maxframe/utils.py +1114 -0
  628. maxframe-0.1.0b5.dist-info/METADATA +104 -0
  629. maxframe-0.1.0b5.dist-info/RECORD +647 -0
  630. maxframe-0.1.0b5.dist-info/WHEEL +5 -0
  631. maxframe-0.1.0b5.dist-info/top_level.txt +2 -0
  632. maxframe_client/__init__.py +17 -0
  633. maxframe_client/clients/__init__.py +13 -0
  634. maxframe_client/clients/framedriver.py +118 -0
  635. maxframe_client/clients/spe.py +104 -0
  636. maxframe_client/conftest.py +15 -0
  637. maxframe_client/fetcher.py +264 -0
  638. maxframe_client/session/__init__.py +22 -0
  639. maxframe_client/session/consts.py +36 -0
  640. maxframe_client/session/graph.py +119 -0
  641. maxframe_client/session/odps.py +482 -0
  642. maxframe_client/session/task.py +280 -0
  643. maxframe_client/session/tests/__init__.py +13 -0
  644. maxframe_client/session/tests/test_task.py +85 -0
  645. maxframe_client/tests/__init__.py +13 -0
  646. maxframe_client/tests/test_fetcher.py +89 -0
  647. maxframe_client/tests/test_session.py +255 -0
maxframe/protocol.py ADDED
@@ -0,0 +1,415 @@
1
+ # Copyright 1999-2024 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 base64
16
+ import enum
17
+ import uuid
18
+ from typing import Any, Dict, Generic, List, Optional, Tuple, Type, TypeVar
19
+
20
+ import pandas as pd
21
+
22
+ from .core import OutputType, TileableGraph
23
+ from .core.graph.entity import SerializableGraph
24
+ from .lib import wrapped_pickle as pickle
25
+ from .lib.tblib import pickling_support
26
+ from .serialization import PickleContainer, RemoteException, pickle_buffers
27
+ from .serialization.serializables import (
28
+ AnyField,
29
+ BoolField,
30
+ BytesField,
31
+ DictField,
32
+ EnumField,
33
+ FieldTypes,
34
+ Float64Field,
35
+ ListField,
36
+ ReferenceField,
37
+ Serializable,
38
+ SeriesField,
39
+ StringField,
40
+ TupleField,
41
+ )
42
+
43
+ pickling_support.install()
44
+
45
+ BodyType = TypeVar("BodyType", bound="Serializable")
46
+
47
+
48
+ class JsonSerializable(Serializable):
49
+ _ignore_non_existing_keys = True
50
+
51
+ @classmethod
52
+ def from_json(cls, serialized: dict) -> "JsonSerializable":
53
+ raise NotImplementedError
54
+
55
+ def to_json(self) -> dict:
56
+ raise NotImplementedError
57
+
58
+
59
+ class ProtocolBody(Generic[BodyType], Serializable):
60
+ request_id: bytes = BytesField(
61
+ "request_id", default_factory=lambda: uuid.uuid4().bytes
62
+ )
63
+ body: BodyType = AnyField("body", default=None)
64
+
65
+
66
+ class DagStatus(enum.Enum):
67
+ PREPARING = 0
68
+ RUNNING = 1
69
+ SUCCEEDED = 2
70
+ FAILED = 3
71
+ CANCELLING = 4
72
+ CANCELLED = 5
73
+
74
+
75
+ class DimensionIndex(Serializable):
76
+ is_slice: bool = BoolField("is_slice", default=None)
77
+ is_int_index: bool = BoolField("is_int_index", default=None)
78
+ data: List = ListField("data", default=None)
79
+
80
+
81
+ class ResultType(enum.Enum):
82
+ NULL = 0
83
+ ODPS_TABLE = 1
84
+ ODPS_VOLUME = 2
85
+
86
+
87
+ class DataSerializeType(enum.Enum):
88
+ PICKLE = 0
89
+
90
+
91
+ class VolumeDataMeta(Serializable):
92
+ output_type: OutputType = EnumField(
93
+ "output_type", OutputType, FieldTypes.int8, default=None
94
+ )
95
+ serial_type: DataSerializeType = EnumField(
96
+ "serial_type", DataSerializeType, FieldTypes.int8, default=None
97
+ )
98
+ shape: Tuple[int, ...] = TupleField("shape", FieldTypes.int64, default=None)
99
+ nsplits: Tuple[Tuple[int, ...], ...] = TupleField(
100
+ "nsplits", FieldTypes.tuple(FieldTypes.tuple(FieldTypes.int64)), default=None
101
+ )
102
+
103
+
104
+ _result_type_to_info_cls: Dict[ResultType, Type["ResultInfo"]] = dict()
105
+
106
+
107
+ class ResultInfo(JsonSerializable):
108
+ _result_type = ResultType.NULL
109
+
110
+ result_type: Optional[ResultType] = EnumField(
111
+ "result_type", ResultType, default=ResultType.NULL
112
+ )
113
+ slices: Optional[List[DimensionIndex]] = ListField(
114
+ "slices", FieldTypes.reference, default=None
115
+ )
116
+
117
+ @classmethod
118
+ def _cls_from_result_type(cls, result_type: ResultType):
119
+ if not _result_type_to_info_cls:
120
+ for dest_cls in globals().values():
121
+ if isinstance(dest_cls, type) and issubclass(dest_cls, ResultInfo):
122
+ _result_type_to_info_cls[dest_cls._result_type] = dest_cls
123
+ return _result_type_to_info_cls[result_type]
124
+
125
+ @classmethod
126
+ def _json_to_kwargs(cls, serialized: dict) -> dict:
127
+ # todo retrieve slices from json once implemented
128
+ kw = serialized.copy()
129
+ kw["result_type"] = ResultType(kw["result_type"])
130
+ return kw
131
+
132
+ @classmethod
133
+ def from_json(cls, serialized: dict) -> "ResultInfo":
134
+ res_type = ResultType(serialized["result_type"])
135
+ res_cls = cls._cls_from_result_type(res_type)
136
+ return res_cls(**res_cls._json_to_kwargs(serialized))
137
+
138
+ def to_json(self) -> dict:
139
+ # todo convert slices to json once implemented
140
+ return {"result_type": self.result_type.value if self.result_type else None}
141
+
142
+
143
+ ResultInfoType = TypeVar("ResultInfoType", bound=ResultInfo)
144
+
145
+
146
+ class ODPSTableResultInfo(ResultInfo):
147
+ _result_type = ResultType.ODPS_TABLE
148
+
149
+ full_table_name: str = StringField("full_table_name", default=None)
150
+ partition_specs: Optional[List[str]] = ListField(
151
+ "partition_specs", FieldTypes.string, default=None
152
+ )
153
+
154
+ def __init__(self, result_type: ResultType = None, **kw):
155
+ result_type = result_type or ResultType.ODPS_TABLE
156
+ super().__init__(result_type=result_type, **kw)
157
+
158
+ def to_json(self) -> dict:
159
+ ret = super().to_json()
160
+ ret["full_table_name"] = self.full_table_name
161
+ if self.partition_specs:
162
+ ret["partition_specs"] = self.partition_specs
163
+ return ret
164
+
165
+
166
+ class ODPSVolumeResultInfo(ResultInfo):
167
+ _result_type = ResultType.ODPS_VOLUME
168
+
169
+ volume_name: str = StringField("volume_name", default=None)
170
+ volume_path: str = StringField("volume_path", default=None)
171
+
172
+ def __init__(self, result_type: ResultType = None, **kw):
173
+ result_type = result_type or ResultType.ODPS_VOLUME
174
+ super().__init__(result_type=result_type, **kw)
175
+
176
+ def to_json(self) -> dict:
177
+ ret = super().to_json()
178
+ ret["volume_name"] = self.volume_name
179
+ ret["volume_path"] = self.volume_path
180
+ return ret
181
+
182
+
183
+ class ErrorSource(enum.Enum):
184
+ PYTHON = 0
185
+
186
+
187
+ class ErrorInfo(JsonSerializable):
188
+ error_messages: Optional[List[str]] = ListField("error_messages", FieldTypes.string)
189
+ error_tracebacks: Optional[List[List[str]]] = ListField(
190
+ "error_tracebacks", FieldTypes.list
191
+ )
192
+ raw_error_source: ErrorSource = EnumField(
193
+ "raw_error_source", ErrorSource, FieldTypes.int8
194
+ )
195
+ raw_error_data: Optional[Exception] = AnyField("raw_error_data")
196
+
197
+ @classmethod
198
+ def from_exception(cls, exc: Exception):
199
+ remote_exc = RemoteException.from_exception(exc)
200
+ messages, tracebacks = remote_exc.messages, remote_exc.tracebacks
201
+ return cls(messages, tracebacks, ErrorSource.PYTHON, exc)
202
+
203
+ def reraise(self):
204
+ if self.raw_error_source == ErrorSource.PYTHON:
205
+ raise self.raw_error_data
206
+ raise RemoteException(self.error_messages, self.error_tracebacks, [])
207
+
208
+ @classmethod
209
+ def from_json(cls, serialized: dict) -> "ErrorInfo":
210
+ kw = serialized.copy()
211
+ kw["raw_error_source"] = ErrorSource(serialized["raw_error_source"])
212
+ if kw.get("raw_error_data"):
213
+ bufs = [base64.b64decode(s) for s in kw["raw_error_data"]]
214
+ try:
215
+ kw["raw_error_data"] = pickle.loads(bufs[0], buffers=bufs[1:])
216
+ except:
217
+ kw["raw_error_data"] = None
218
+ return cls(**kw)
219
+
220
+ def to_json(self) -> dict:
221
+ ret = {
222
+ "error_messages": self.error_messages,
223
+ "error_tracebacks": self.error_tracebacks,
224
+ "raw_error_source": self.raw_error_source.value,
225
+ }
226
+ err_data_bufs = None
227
+ if isinstance(self.raw_error_data, (PickleContainer, RemoteException)):
228
+ err_data_bufs = self.raw_error_data.get_buffers()
229
+ elif isinstance(self.raw_error_data, BaseException):
230
+ err_data_bufs = pickle_buffers(self.raw_error_data)
231
+ if err_data_bufs:
232
+ ret["raw_error_data"] = [
233
+ base64.b64encode(s).decode() for s in err_data_bufs
234
+ ]
235
+ return ret
236
+
237
+
238
+ class DagInfo(JsonSerializable):
239
+ session_id: str = StringField("session_id", default=None)
240
+ dag_id: str = StringField("dag_id", default=None)
241
+ status: DagStatus = EnumField("status", DagStatus, FieldTypes.int8, default=None)
242
+ progress: float = Float64Field("progress", default=None)
243
+ tileable_to_result_infos: Dict[str, ResultInfo] = DictField(
244
+ "tileable_to_result_infos",
245
+ FieldTypes.string,
246
+ FieldTypes.reference,
247
+ default_factory=dict,
248
+ )
249
+ error_info: Optional[ErrorInfo] = ReferenceField("error_info", default=None)
250
+ start_timestamp: Optional[float] = Float64Field("start_timestamp", default=None)
251
+ end_timestamp: Optional[float] = Float64Field("end_timestamp", default=None)
252
+
253
+ @classmethod
254
+ def from_json(cls, serialized: dict) -> "DagInfo":
255
+ kw = serialized.copy()
256
+ kw["status"] = DagStatus(kw["status"])
257
+ if kw.get("tileable_to_result_infos"):
258
+ kw["tileable_to_result_infos"] = {
259
+ k: ResultInfo.from_json(s)
260
+ for k, s in kw["tileable_to_result_infos"].items()
261
+ }
262
+ if kw.get("error_info"):
263
+ kw["error_info"] = ErrorInfo.from_json(kw["error_info"])
264
+ return DagInfo(**kw)
265
+
266
+ def to_json(self) -> dict:
267
+ ret = {
268
+ "session_id": self.session_id,
269
+ "dag_id": self.dag_id,
270
+ "status": self.status.value,
271
+ "progress": self.progress,
272
+ "start_timestamp": self.start_timestamp,
273
+ "end_timestamp": self.end_timestamp,
274
+ }
275
+ ret = {k: v for k, v in ret.items() if v is not None}
276
+ if self.tileable_to_result_infos:
277
+ ret["tileable_to_result_infos"] = {
278
+ k: v.to_json() for k, v in self.tileable_to_result_infos.items()
279
+ }
280
+ if self.error_info:
281
+ ret["error_info"] = self.error_info.to_json()
282
+ return ret
283
+
284
+
285
+ class CreateSessionRequest(Serializable):
286
+ settings: Dict[str, Any] = DictField("settings", default=None)
287
+
288
+
289
+ class SessionInfo(JsonSerializable):
290
+ session_id: str = StringField("session_id")
291
+ settings: Dict[str, Any] = DictField(
292
+ "settings", key_type=FieldTypes.string, default=None
293
+ )
294
+ start_timestamp: float = Float64Field("start_timestamp", default=None)
295
+ idle_timestamp: float = Float64Field("idle_timestamp", default=None)
296
+ dag_infos: Dict[str, Optional[DagInfo]] = DictField(
297
+ "dag_infos",
298
+ key_type=FieldTypes.string,
299
+ value_type=FieldTypes.reference,
300
+ default=None,
301
+ )
302
+ error_info: Optional[ErrorInfo] = ReferenceField("error_info", default=None)
303
+
304
+ @classmethod
305
+ def from_json(cls, serialized: dict) -> "SessionInfo":
306
+ kw = serialized.copy()
307
+ if kw.get("dag_infos"):
308
+ kw["dag_infos"] = {
309
+ k: DagInfo.from_json(v) for k, v in kw["dag_infos"].items()
310
+ }
311
+ if kw.get("error_info"):
312
+ kw["error_info"] = ErrorInfo.from_json(kw["error_info"])
313
+ return SessionInfo(**kw)
314
+
315
+ def to_json(self) -> dict:
316
+ ret = {
317
+ "session_id": self.session_id,
318
+ "settings": self.settings,
319
+ "start_timestamp": self.start_timestamp,
320
+ "idle_timestamp": self.idle_timestamp,
321
+ }
322
+ if self.dag_infos:
323
+ ret["dag_infos"] = {k: v.to_json() for k, v in self.dag_infos.items()}
324
+ if self.error_info:
325
+ ret["error_info"] = self.error_info.to_json()
326
+ return ret
327
+
328
+
329
+ class ExecuteDagRequest(Serializable):
330
+ session_id: str = StringField("session_id")
331
+ dag: TileableGraph = ReferenceField(
332
+ "dag",
333
+ on_serialize=SerializableGraph.from_graph,
334
+ on_deserialize=lambda x: x.to_graph(),
335
+ default=None,
336
+ )
337
+ managed_input_infos: Dict[str, ResultInfo] = DictField(
338
+ "managed_input_infos",
339
+ key_type=FieldTypes.string,
340
+ value_type=FieldTypes.reference,
341
+ default=None,
342
+ )
343
+
344
+
345
+ class SubDagInfo(Serializable):
346
+ subdag_id: str = StringField("subdag_id")
347
+ status: DagStatus = EnumField("status", DagStatus, FieldTypes.int8, default=None)
348
+ progress: float = Float64Field("progress", default=None)
349
+ error_info: Optional[ErrorInfo] = ReferenceField(
350
+ "error_info", reference_type=ErrorInfo, default=None
351
+ )
352
+ tileable_to_result_infos: Dict[str, ResultInfo] = DictField(
353
+ "tileable_to_result_infos",
354
+ FieldTypes.string,
355
+ FieldTypes.reference,
356
+ default_factory=dict,
357
+ )
358
+
359
+
360
+ class ExecuteSubDagRequest(Serializable):
361
+ dag: TileableGraph = ReferenceField(
362
+ "dag",
363
+ on_serialize=SerializableGraph.from_graph,
364
+ on_deserialize=lambda x: x.to_graph(),
365
+ default=None,
366
+ )
367
+ settings: Dict[str, Any] = DictField("settings", default=None)
368
+
369
+
370
+ class DecrefRequest(Serializable):
371
+ keys: List[str] = ListField("keys", FieldTypes.string, default=None)
372
+
373
+
374
+ class DataFrameTableMeta(Serializable):
375
+ __slots__ = "_pd_column_names", "_pd_index_level_names"
376
+
377
+ table_name: Optional[str] = StringField("table_name", default=None)
378
+ type: OutputType = EnumField("type", OutputType, FieldTypes.int8, default=None)
379
+ table_column_names: List[str] = ListField(
380
+ "table_column_names", FieldTypes.string, default=None
381
+ )
382
+ table_index_column_names: List[str] = ListField(
383
+ "table_index_column_names", FieldTypes.string, default=None
384
+ )
385
+ pd_column_dtypes: pd.Series = SeriesField("pd_column_dtypes", default=None)
386
+ pd_column_level_names: List[Any] = ListField("pd_column_level_names", default=None)
387
+ pd_index_dtypes: pd.Series = SeriesField("pd_index_dtypes", default=None)
388
+
389
+ @property
390
+ def pd_column_names(self) -> List[Any]:
391
+ try:
392
+ return self._pd_column_names
393
+ except AttributeError:
394
+ self._pd_column_names = self.pd_column_dtypes.index.tolist()
395
+ return self._pd_column_names
396
+
397
+ @property
398
+ def pd_index_level_names(self) -> List[Any]:
399
+ try:
400
+ return self._pd_index_level_names
401
+ except AttributeError:
402
+ self._pd_index_level_names = self.pd_index_dtypes.index.tolist()
403
+ return self._pd_index_level_names
404
+
405
+ def __eq__(self, other: "Serializable") -> bool:
406
+ if not isinstance(other, type(self)):
407
+ return False
408
+ for k in self._FIELDS:
409
+ v = getattr(self, k, None)
410
+ is_same = v == getattr(other, k, None)
411
+ if callable(getattr(is_same, "all", None)):
412
+ is_same = is_same.all()
413
+ if not is_same:
414
+ return False
415
+ return True
@@ -0,0 +1,18 @@
1
+ # Copyright 1999-2024 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
+ # noinspection PyUnresolvedReferences
16
+ from ..core import ExecutableTuple
17
+ from .core import spawn
18
+ from .run_script import run_script
@@ -0,0 +1,210 @@
1
+ # Copyright 1999-2024 Alibaba Group Holding Ltd.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from functools import partial
16
+
17
+ from .. import opcodes
18
+ from ..core import ENTITY_TYPE, ChunkData
19
+ from ..core.operator import ObjectOperator, ObjectOperatorMixin
20
+ from ..dataframe.core import DATAFRAME_TYPE, INDEX_TYPE, SERIES_TYPE
21
+ from ..serialization.serializables import (
22
+ BoolField,
23
+ DictField,
24
+ FunctionField,
25
+ Int32Field,
26
+ ListField,
27
+ )
28
+ from ..tensor.core import TENSOR_TYPE
29
+ from ..utils import build_fetch_tileable, find_objects, replace_objects
30
+
31
+
32
+ class RemoteFunction(ObjectOperatorMixin, ObjectOperator):
33
+ _op_type_ = opcodes.REMOTE_FUNCATION
34
+ _op_module_ = "remote"
35
+
36
+ function = FunctionField("function")
37
+ function_args = ListField("function_args")
38
+ function_kwargs = DictField("function_kwargs")
39
+ retry_when_fail = BoolField("retry_when_fail")
40
+ resolve_tileable_input = BoolField("resolve_tileable_input", default=False)
41
+ n_output = Int32Field("n_output", default=None)
42
+
43
+ @property
44
+ def output_limit(self):
45
+ return self.n_output or 1
46
+
47
+ @property
48
+ def retryable(self) -> bool:
49
+ return self.retry_when_fail
50
+
51
+ @classmethod
52
+ def _no_prepare(cls, tileable):
53
+ return isinstance(
54
+ tileable, (TENSOR_TYPE, DATAFRAME_TYPE, SERIES_TYPE, INDEX_TYPE)
55
+ )
56
+
57
+ def _set_inputs(self, inputs):
58
+ raw_inputs = getattr(self, "_inputs", None)
59
+ super()._set_inputs(inputs)
60
+
61
+ function_inputs = iter(inp for inp in self._inputs)
62
+ mapping = {inp: new_inp for inp, new_inp in zip(inputs, self._inputs)}
63
+ if raw_inputs is not None:
64
+ for raw_inp in raw_inputs:
65
+ if self._no_prepare(raw_inp):
66
+ if not isinstance(self._inputs[0], ChunkData):
67
+ # not in tile, set_inputs from tileable
68
+ mapping[raw_inp] = next(function_inputs)
69
+ else:
70
+ # in tile, set_inputs from chunk
71
+ mapping[raw_inp] = build_fetch_tileable(raw_inp)
72
+ else:
73
+ mapping[raw_inp] = next(function_inputs)
74
+ self.function_args = replace_objects(self.function_args, mapping)
75
+ self.function_kwargs = replace_objects(self.function_kwargs, mapping)
76
+
77
+ def __call__(self):
78
+ find_inputs = partial(find_objects, types=ENTITY_TYPE)
79
+ inputs = find_inputs(self.function_args) + find_inputs(self.function_kwargs)
80
+ if self.n_output is None:
81
+ return self.new_tileable(inputs)
82
+ else:
83
+ return self.new_tileables(
84
+ inputs, kws=[dict(i=i) for i in range(self.n_output)]
85
+ )
86
+
87
+
88
+ def spawn(
89
+ func,
90
+ args=(),
91
+ kwargs=None,
92
+ retry_when_fail=False,
93
+ resolve_tileable_input=False,
94
+ n_output=None,
95
+ **kw,
96
+ ):
97
+ """
98
+ Spawn a function and return a MaxFrame Object which can be executed later.
99
+
100
+ Parameters
101
+ ----------
102
+ func : function
103
+ Function to spawn.
104
+ args: tuple
105
+ Args to pass to function
106
+ kwargs: dict
107
+ Kwargs to pass to function
108
+ retry_when_fail: bool, default False
109
+ If True, retry when function failed.
110
+ resolve_tileable_input: bool default False
111
+ If True, resolve tileable inputs as values.
112
+ n_output: int
113
+ Count of outputs for the function
114
+
115
+ Returns
116
+ -------
117
+ Object
118
+ MaxFrame Object.
119
+
120
+ Examples
121
+ --------
122
+ >>> import maxframe.remote as mr
123
+ >>> def inc(x):
124
+ >>> return x + 1
125
+ >>>
126
+ >>> result = mr.spawn(inc, args=(0,))
127
+ >>> result
128
+ Object <op=RemoteFunction, key=e0b31261d70dd9b1e00da469666d72d9>
129
+ >>> result.execute().fetch()
130
+ 1
131
+
132
+ List of spawned functions can be converted to :class:`maxframe.remote.ExecutableTuple`,
133
+ and `.execute()` can be called to run together.
134
+
135
+ >>> results = [mr.spawn(inc, args=(i,)) for i in range(10)]
136
+ >>> mr.ExecutableTuple(results).execute().fetch()
137
+ [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
138
+
139
+ MaxFrame Object returned by :meth:`maxframe.remote.spawn` can be treated
140
+ as arguments for other spawn functions.
141
+
142
+ >>> results = [mr.spawn(inc, args=(i,)) for i in range(10)] # list of spawned functions
143
+ >>> def sum_all(xs):
144
+ return sum(xs)
145
+ >>> mr.spawn(sum_all, args=(results,)).execute().fetch()
146
+ 55
147
+
148
+ inside a spawned function, new functions can be spawned.
149
+
150
+ >>> def driver():
151
+ >>> results = [mr.spawn(inc, args=(i,)) for i in range(10)]
152
+ >>> return mr.ExecutableTuple(results).execute().fetch()
153
+ >>>
154
+ >>> mr.spawn(driver).execute().fetch()
155
+ [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
156
+
157
+ MaxFrame tensor, DataFrame and so forth is available in spawned functions as well.
158
+
159
+ >>> import maxframe.tensor as mt
160
+ >>> def driver2():
161
+ >>> t = mt.random.rand(10, 10)
162
+ >>> return t.sum().to_numpy()
163
+ >>>
164
+ >>> mr.spawn(driver2).execute().fetch()
165
+ 52.47844223908132
166
+
167
+ Argument of `n_output` can indicate that the spawned function will return multiple outputs.
168
+ This is important when some of the outputs may be passed to different functions.
169
+
170
+ >>> def triage(alist):
171
+ >>> ret = [], []
172
+ >>> for i in alist:
173
+ >>> if i < 0.5:
174
+ >>> ret[0].append(i)
175
+ >>> else:
176
+ >>> ret[1].append(i)
177
+ >>> return ret
178
+ >>>
179
+ >>> def sum_all(xs):
180
+ >>> return sum(xs)
181
+ >>>
182
+ >>> l = [0.4, 0.7, 0.2, 0.8]
183
+ >>> la, lb = mr.spawn(triage, args=(l,), n_output=2)
184
+ >>>
185
+ >>> sa = mr.spawn(sum_all, args=(la,))
186
+ >>> sb = mr.spawn(sum_all, args=(lb,))
187
+ >>> mr.ExecutableTuple([sa, sb]).execute().fetch()
188
+ >>> [0.6000000000000001, 1.5]
189
+ """
190
+ if not isinstance(args, tuple):
191
+ args = [args]
192
+ else:
193
+ args = list(args)
194
+ if kwargs is None:
195
+ kwargs = dict()
196
+ if not isinstance(kwargs, dict):
197
+ raise TypeError("kwargs has to be a dict")
198
+
199
+ op = RemoteFunction(
200
+ function=func,
201
+ function_args=args,
202
+ function_kwargs=kwargs,
203
+ retry_when_fail=retry_when_fail,
204
+ resolve_tileable_input=resolve_tileable_input,
205
+ n_output=n_output,
206
+ **kw,
207
+ )
208
+ if op.extra_params:
209
+ raise ValueError(f"Unexpected kw: {list(op.extra_params)[0]}")
210
+ return op()