maxframe 2.4.0rc1__cp312-cp312-win32.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1122) hide show
  1. maxframe/__init__.py +33 -0
  2. maxframe/_utils.cp312-win32.pyd +0 -0
  3. maxframe/_utils.pxd +33 -0
  4. maxframe/_utils.pyi +21 -0
  5. maxframe/_utils.pyx +561 -0
  6. maxframe/codegen/__init__.py +27 -0
  7. maxframe/codegen/core.py +597 -0
  8. maxframe/codegen/spe/__init__.py +16 -0
  9. maxframe/codegen/spe/core.py +307 -0
  10. maxframe/codegen/spe/dataframe/__init__.py +38 -0
  11. maxframe/codegen/spe/dataframe/accessors/__init__.py +15 -0
  12. maxframe/codegen/spe/dataframe/accessors/base.py +71 -0
  13. maxframe/codegen/spe/dataframe/accessors/dict_.py +89 -0
  14. maxframe/codegen/spe/dataframe/accessors/list_.py +44 -0
  15. maxframe/codegen/spe/dataframe/accessors/struct_.py +28 -0
  16. maxframe/codegen/spe/dataframe/arithmetic.py +89 -0
  17. maxframe/codegen/spe/dataframe/datasource.py +181 -0
  18. maxframe/codegen/spe/dataframe/datastore.py +204 -0
  19. maxframe/codegen/spe/dataframe/extensions.py +63 -0
  20. maxframe/codegen/spe/dataframe/fetch.py +26 -0
  21. maxframe/codegen/spe/dataframe/groupby.py +312 -0
  22. maxframe/codegen/spe/dataframe/indexing.py +333 -0
  23. maxframe/codegen/spe/dataframe/merge.py +110 -0
  24. maxframe/codegen/spe/dataframe/misc.py +264 -0
  25. maxframe/codegen/spe/dataframe/missing.py +64 -0
  26. maxframe/codegen/spe/dataframe/reduction.py +183 -0
  27. maxframe/codegen/spe/dataframe/reshape.py +46 -0
  28. maxframe/codegen/spe/dataframe/sort.py +104 -0
  29. maxframe/codegen/spe/dataframe/statistics.py +46 -0
  30. maxframe/codegen/spe/dataframe/tests/__init__.py +13 -0
  31. maxframe/codegen/spe/dataframe/tests/accessors/__init__.py +13 -0
  32. maxframe/codegen/spe/dataframe/tests/accessors/test_base.py +33 -0
  33. maxframe/codegen/spe/dataframe/tests/accessors/test_dict.py +304 -0
  34. maxframe/codegen/spe/dataframe/tests/accessors/test_list.py +134 -0
  35. maxframe/codegen/spe/dataframe/tests/accessors/test_struct.py +75 -0
  36. maxframe/codegen/spe/dataframe/tests/indexing/__init__.py +13 -0
  37. maxframe/codegen/spe/dataframe/tests/indexing/conftest.py +58 -0
  38. maxframe/codegen/spe/dataframe/tests/indexing/test_getitem.py +124 -0
  39. maxframe/codegen/spe/dataframe/tests/indexing/test_iloc.py +95 -0
  40. maxframe/codegen/spe/dataframe/tests/indexing/test_indexing.py +39 -0
  41. maxframe/codegen/spe/dataframe/tests/indexing/test_loc.py +35 -0
  42. maxframe/codegen/spe/dataframe/tests/indexing/test_rename.py +51 -0
  43. maxframe/codegen/spe/dataframe/tests/indexing/test_reset_index.py +88 -0
  44. maxframe/codegen/spe/dataframe/tests/indexing/test_sample.py +45 -0
  45. maxframe/codegen/spe/dataframe/tests/indexing/test_set_axis.py +45 -0
  46. maxframe/codegen/spe/dataframe/tests/indexing/test_set_index.py +41 -0
  47. maxframe/codegen/spe/dataframe/tests/indexing/test_setitem.py +46 -0
  48. maxframe/codegen/spe/dataframe/tests/misc/__init__.py +13 -0
  49. maxframe/codegen/spe/dataframe/tests/misc/test_apply.py +133 -0
  50. maxframe/codegen/spe/dataframe/tests/misc/test_drop_duplicates.py +92 -0
  51. maxframe/codegen/spe/dataframe/tests/misc/test_misc.py +202 -0
  52. maxframe/codegen/spe/dataframe/tests/missing/__init__.py +13 -0
  53. maxframe/codegen/spe/dataframe/tests/missing/test_checkna.py +94 -0
  54. maxframe/codegen/spe/dataframe/tests/missing/test_dropna.py +50 -0
  55. maxframe/codegen/spe/dataframe/tests/missing/test_fillna.py +94 -0
  56. maxframe/codegen/spe/dataframe/tests/missing/test_replace.py +45 -0
  57. maxframe/codegen/spe/dataframe/tests/test_arithmetic.py +73 -0
  58. maxframe/codegen/spe/dataframe/tests/test_datasource.py +184 -0
  59. maxframe/codegen/spe/dataframe/tests/test_datastore.py +200 -0
  60. maxframe/codegen/spe/dataframe/tests/test_extensions.py +88 -0
  61. maxframe/codegen/spe/dataframe/tests/test_groupby.py +288 -0
  62. maxframe/codegen/spe/dataframe/tests/test_merge.py +426 -0
  63. maxframe/codegen/spe/dataframe/tests/test_reduction.py +117 -0
  64. maxframe/codegen/spe/dataframe/tests/test_reshape.py +79 -0
  65. maxframe/codegen/spe/dataframe/tests/test_sort.py +179 -0
  66. maxframe/codegen/spe/dataframe/tests/test_statistics.py +70 -0
  67. maxframe/codegen/spe/dataframe/tests/test_tseries.py +29 -0
  68. maxframe/codegen/spe/dataframe/tests/test_value_counts.py +60 -0
  69. maxframe/codegen/spe/dataframe/tests/test_window.py +69 -0
  70. maxframe/codegen/spe/dataframe/tseries.py +55 -0
  71. maxframe/codegen/spe/dataframe/udf.py +62 -0
  72. maxframe/codegen/spe/dataframe/value_counts.py +31 -0
  73. maxframe/codegen/spe/dataframe/window.py +65 -0
  74. maxframe/codegen/spe/learn/__init__.py +15 -0
  75. maxframe/codegen/spe/learn/contrib/__init__.py +15 -0
  76. maxframe/codegen/spe/learn/contrib/lightgbm.py +161 -0
  77. maxframe/codegen/spe/learn/contrib/models.py +41 -0
  78. maxframe/codegen/spe/learn/contrib/pytorch.py +49 -0
  79. maxframe/codegen/spe/learn/contrib/tests/__init__.py +13 -0
  80. maxframe/codegen/spe/learn/contrib/tests/test_lightgbm.py +123 -0
  81. maxframe/codegen/spe/learn/contrib/tests/test_models.py +41 -0
  82. maxframe/codegen/spe/learn/contrib/tests/test_pytorch.py +53 -0
  83. maxframe/codegen/spe/learn/contrib/tests/test_xgboost.py +99 -0
  84. maxframe/codegen/spe/learn/contrib/xgboost.py +152 -0
  85. maxframe/codegen/spe/learn/metrics/__init__.py +15 -0
  86. maxframe/codegen/spe/learn/metrics/_classification.py +120 -0
  87. maxframe/codegen/spe/learn/metrics/_ranking.py +76 -0
  88. maxframe/codegen/spe/learn/metrics/pairwise.py +51 -0
  89. maxframe/codegen/spe/learn/metrics/tests/__init__.py +13 -0
  90. maxframe/codegen/spe/learn/metrics/tests/test_classification.py +93 -0
  91. maxframe/codegen/spe/learn/metrics/tests/test_pairwise.py +36 -0
  92. maxframe/codegen/spe/learn/metrics/tests/test_ranking.py +59 -0
  93. maxframe/codegen/spe/learn/model_selection/__init__.py +13 -0
  94. maxframe/codegen/spe/learn/model_selection/tests/__init__.py +13 -0
  95. maxframe/codegen/spe/learn/model_selection/tests/test_split.py +41 -0
  96. maxframe/codegen/spe/learn/preprocessing/__init__.py +15 -0
  97. maxframe/codegen/spe/learn/preprocessing/_data.py +37 -0
  98. maxframe/codegen/spe/learn/preprocessing/_label.py +47 -0
  99. maxframe/codegen/spe/learn/preprocessing/tests/__init__.py +13 -0
  100. maxframe/codegen/spe/learn/preprocessing/tests/test_data.py +31 -0
  101. maxframe/codegen/spe/learn/preprocessing/tests/test_label.py +43 -0
  102. maxframe/codegen/spe/learn/utils/__init__.py +15 -0
  103. maxframe/codegen/spe/learn/utils/checks.py +55 -0
  104. maxframe/codegen/spe/learn/utils/multiclass.py +60 -0
  105. maxframe/codegen/spe/learn/utils/shuffle.py +85 -0
  106. maxframe/codegen/spe/learn/utils/sparsefuncs.py +35 -0
  107. maxframe/codegen/spe/learn/utils/tests/__init__.py +13 -0
  108. maxframe/codegen/spe/learn/utils/tests/test_checks.py +48 -0
  109. maxframe/codegen/spe/learn/utils/tests/test_multiclass.py +52 -0
  110. maxframe/codegen/spe/learn/utils/tests/test_shuffle.py +50 -0
  111. maxframe/codegen/spe/learn/utils/tests/test_sparsefuncs.py +34 -0
  112. maxframe/codegen/spe/learn/utils/tests/test_validation.py +44 -0
  113. maxframe/codegen/spe/learn/utils/validation.py +35 -0
  114. maxframe/codegen/spe/objects.py +26 -0
  115. maxframe/codegen/spe/remote.py +29 -0
  116. maxframe/codegen/spe/tensor/__init__.py +31 -0
  117. maxframe/codegen/spe/tensor/arithmetic.py +95 -0
  118. maxframe/codegen/spe/tensor/core.py +41 -0
  119. maxframe/codegen/spe/tensor/datasource.py +166 -0
  120. maxframe/codegen/spe/tensor/extensions.py +35 -0
  121. maxframe/codegen/spe/tensor/fetch.py +26 -0
  122. maxframe/codegen/spe/tensor/fft.py +74 -0
  123. maxframe/codegen/spe/tensor/indexing.py +63 -0
  124. maxframe/codegen/spe/tensor/linalg.py +90 -0
  125. maxframe/codegen/spe/tensor/merge.py +31 -0
  126. maxframe/codegen/spe/tensor/misc.py +175 -0
  127. maxframe/codegen/spe/tensor/random.py +29 -0
  128. maxframe/codegen/spe/tensor/reduction.py +39 -0
  129. maxframe/codegen/spe/tensor/reshape.py +26 -0
  130. maxframe/codegen/spe/tensor/sort.py +42 -0
  131. maxframe/codegen/spe/tensor/spatial.py +45 -0
  132. maxframe/codegen/spe/tensor/special.py +35 -0
  133. maxframe/codegen/spe/tensor/statistics.py +68 -0
  134. maxframe/codegen/spe/tensor/tests/__init__.py +13 -0
  135. maxframe/codegen/spe/tensor/tests/test_arithmetic.py +103 -0
  136. maxframe/codegen/spe/tensor/tests/test_datasource.py +99 -0
  137. maxframe/codegen/spe/tensor/tests/test_extensions.py +37 -0
  138. maxframe/codegen/spe/tensor/tests/test_fft.py +64 -0
  139. maxframe/codegen/spe/tensor/tests/test_indexing.py +44 -0
  140. maxframe/codegen/spe/tensor/tests/test_linalg.py +52 -0
  141. maxframe/codegen/spe/tensor/tests/test_merge.py +28 -0
  142. maxframe/codegen/spe/tensor/tests/test_misc.py +144 -0
  143. maxframe/codegen/spe/tensor/tests/test_random.py +55 -0
  144. maxframe/codegen/spe/tensor/tests/test_reduction.py +65 -0
  145. maxframe/codegen/spe/tensor/tests/test_reshape.py +39 -0
  146. maxframe/codegen/spe/tensor/tests/test_sort.py +49 -0
  147. maxframe/codegen/spe/tensor/tests/test_spatial.py +33 -0
  148. maxframe/codegen/spe/tensor/tests/test_special.py +28 -0
  149. maxframe/codegen/spe/tensor/tests/test_statistics.py +43 -0
  150. maxframe/codegen/spe/tests/__init__.py +13 -0
  151. maxframe/codegen/spe/tests/test_remote.py +29 -0
  152. maxframe/codegen/spe/tests/test_spe_codegen.py +135 -0
  153. maxframe/codegen/spe/utils.py +56 -0
  154. maxframe/codegen/tests/__init__.py +13 -0
  155. maxframe/codegen/tests/test_codegen.py +67 -0
  156. maxframe/config/__init__.py +15 -0
  157. maxframe/config/config.py +630 -0
  158. maxframe/config/tests/__init__.py +13 -0
  159. maxframe/config/tests/test_config.py +114 -0
  160. maxframe/config/tests/test_validators.py +46 -0
  161. maxframe/config/validators.py +142 -0
  162. maxframe/conftest.py +261 -0
  163. maxframe/core/__init__.py +53 -0
  164. maxframe/core/accessor.py +45 -0
  165. maxframe/core/base.py +157 -0
  166. maxframe/core/context.py +110 -0
  167. maxframe/core/entity/__init__.py +34 -0
  168. maxframe/core/entity/core.py +150 -0
  169. maxframe/core/entity/executable.py +337 -0
  170. maxframe/core/entity/objects.py +115 -0
  171. maxframe/core/entity/output_types.py +101 -0
  172. maxframe/core/entity/tests/__init__.py +13 -0
  173. maxframe/core/entity/tests/test_objects.py +42 -0
  174. maxframe/core/entity/tileables.py +376 -0
  175. maxframe/core/entity/utils.py +39 -0
  176. maxframe/core/graph/__init__.py +22 -0
  177. maxframe/core/graph/builder/__init__.py +15 -0
  178. maxframe/core/graph/builder/base.py +90 -0
  179. maxframe/core/graph/builder/tileable.py +34 -0
  180. maxframe/core/graph/builder/utils.py +37 -0
  181. maxframe/core/graph/core.cp312-win32.pyd +0 -0
  182. maxframe/core/graph/core.pyx +478 -0
  183. maxframe/core/graph/entity.py +187 -0
  184. maxframe/core/graph/tests/__init__.py +13 -0
  185. maxframe/core/graph/tests/test_graph.py +205 -0
  186. maxframe/core/mode.py +101 -0
  187. maxframe/core/operator/__init__.py +32 -0
  188. maxframe/core/operator/base.py +481 -0
  189. maxframe/core/operator/core.py +307 -0
  190. maxframe/core/operator/fetch.py +40 -0
  191. maxframe/core/operator/objects.py +43 -0
  192. maxframe/core/operator/shuffle.py +45 -0
  193. maxframe/core/operator/tests/__init__.py +13 -0
  194. maxframe/core/operator/tests/test_core.py +64 -0
  195. maxframe/core/operator/utils.py +68 -0
  196. maxframe/core/tests/__init__.py +13 -0
  197. maxframe/core/tests/test_mode.py +75 -0
  198. maxframe/dataframe/__init__.py +90 -0
  199. maxframe/dataframe/accessors/__init__.py +20 -0
  200. maxframe/dataframe/accessors/compat.py +45 -0
  201. maxframe/dataframe/accessors/datetime_/__init__.py +35 -0
  202. maxframe/dataframe/accessors/datetime_/accessor.py +67 -0
  203. maxframe/dataframe/accessors/datetime_/core.py +106 -0
  204. maxframe/dataframe/accessors/datetime_/tests/__init__.py +13 -0
  205. maxframe/dataframe/accessors/datetime_/tests/test_datetime_accessor.py +41 -0
  206. maxframe/dataframe/accessors/dict_/__init__.py +45 -0
  207. maxframe/dataframe/accessors/dict_/accessor.py +39 -0
  208. maxframe/dataframe/accessors/dict_/contains.py +72 -0
  209. maxframe/dataframe/accessors/dict_/core.py +48 -0
  210. maxframe/dataframe/accessors/dict_/getitem.py +140 -0
  211. maxframe/dataframe/accessors/dict_/length.py +64 -0
  212. maxframe/dataframe/accessors/dict_/remove.py +75 -0
  213. maxframe/dataframe/accessors/dict_/setitem.py +79 -0
  214. maxframe/dataframe/accessors/dict_/tests/__init__.py +13 -0
  215. maxframe/dataframe/accessors/dict_/tests/test_dict_accessor.py +168 -0
  216. maxframe/dataframe/accessors/list_/__init__.py +39 -0
  217. maxframe/dataframe/accessors/list_/accessor.py +39 -0
  218. maxframe/dataframe/accessors/list_/core.py +48 -0
  219. maxframe/dataframe/accessors/list_/getitem.py +128 -0
  220. maxframe/dataframe/accessors/list_/length.py +64 -0
  221. maxframe/dataframe/accessors/list_/tests/__init__.py +13 -0
  222. maxframe/dataframe/accessors/list_/tests/test_list_accessor.py +81 -0
  223. maxframe/dataframe/accessors/plotting/__init__.py +40 -0
  224. maxframe/dataframe/accessors/plotting/core.py +78 -0
  225. maxframe/dataframe/accessors/plotting/tests/__init__.py +13 -0
  226. maxframe/dataframe/accessors/plotting/tests/test_plotting_accessor.py +136 -0
  227. maxframe/dataframe/accessors/string_/__init__.py +36 -0
  228. maxframe/dataframe/accessors/string_/accessor.py +215 -0
  229. maxframe/dataframe/accessors/string_/core.py +226 -0
  230. maxframe/dataframe/accessors/string_/tests/__init__.py +13 -0
  231. maxframe/dataframe/accessors/string_/tests/test_string_accessor.py +73 -0
  232. maxframe/dataframe/accessors/struct_/__init__.py +39 -0
  233. maxframe/dataframe/accessors/struct_/accessor.py +39 -0
  234. maxframe/dataframe/accessors/struct_/core.py +43 -0
  235. maxframe/dataframe/accessors/struct_/dtypes.py +53 -0
  236. maxframe/dataframe/accessors/struct_/field.py +123 -0
  237. maxframe/dataframe/accessors/struct_/tests/__init__.py +13 -0
  238. maxframe/dataframe/accessors/struct_/tests/test_struct_accessor.py +91 -0
  239. maxframe/dataframe/arithmetic/__init__.py +373 -0
  240. maxframe/dataframe/arithmetic/abs.py +33 -0
  241. maxframe/dataframe/arithmetic/add.py +60 -0
  242. maxframe/dataframe/arithmetic/arccos.py +28 -0
  243. maxframe/dataframe/arithmetic/arccosh.py +28 -0
  244. maxframe/dataframe/arithmetic/arcsin.py +28 -0
  245. maxframe/dataframe/arithmetic/arcsinh.py +28 -0
  246. maxframe/dataframe/arithmetic/arctan.py +28 -0
  247. maxframe/dataframe/arithmetic/arctanh.py +28 -0
  248. maxframe/dataframe/arithmetic/between.py +106 -0
  249. maxframe/dataframe/arithmetic/bitwise_and.py +46 -0
  250. maxframe/dataframe/arithmetic/bitwise_or.py +50 -0
  251. maxframe/dataframe/arithmetic/bitwise_xor.py +46 -0
  252. maxframe/dataframe/arithmetic/ceil.py +28 -0
  253. maxframe/dataframe/arithmetic/core.py +361 -0
  254. maxframe/dataframe/arithmetic/cos.py +28 -0
  255. maxframe/dataframe/arithmetic/cosh.py +28 -0
  256. maxframe/dataframe/arithmetic/degrees.py +28 -0
  257. maxframe/dataframe/arithmetic/docstring.py +416 -0
  258. maxframe/dataframe/arithmetic/dot.py +237 -0
  259. maxframe/dataframe/arithmetic/equal.py +58 -0
  260. maxframe/dataframe/arithmetic/exp.py +28 -0
  261. maxframe/dataframe/arithmetic/exp2.py +28 -0
  262. maxframe/dataframe/arithmetic/expm1.py +28 -0
  263. maxframe/dataframe/arithmetic/floor.py +28 -0
  264. maxframe/dataframe/arithmetic/floordiv.py +64 -0
  265. maxframe/dataframe/arithmetic/greater.py +59 -0
  266. maxframe/dataframe/arithmetic/greater_equal.py +59 -0
  267. maxframe/dataframe/arithmetic/invert.py +33 -0
  268. maxframe/dataframe/arithmetic/is_ufuncs.py +62 -0
  269. maxframe/dataframe/arithmetic/less.py +57 -0
  270. maxframe/dataframe/arithmetic/less_equal.py +59 -0
  271. maxframe/dataframe/arithmetic/log.py +28 -0
  272. maxframe/dataframe/arithmetic/log10.py +28 -0
  273. maxframe/dataframe/arithmetic/log2.py +28 -0
  274. maxframe/dataframe/arithmetic/maximum.py +33 -0
  275. maxframe/dataframe/arithmetic/minimum.py +33 -0
  276. maxframe/dataframe/arithmetic/mod.py +60 -0
  277. maxframe/dataframe/arithmetic/multiply.py +60 -0
  278. maxframe/dataframe/arithmetic/negative.py +33 -0
  279. maxframe/dataframe/arithmetic/not_equal.py +58 -0
  280. maxframe/dataframe/arithmetic/power.py +68 -0
  281. maxframe/dataframe/arithmetic/radians.py +28 -0
  282. maxframe/dataframe/arithmetic/round.py +144 -0
  283. maxframe/dataframe/arithmetic/sin.py +28 -0
  284. maxframe/dataframe/arithmetic/sinh.py +28 -0
  285. maxframe/dataframe/arithmetic/sqrt.py +28 -0
  286. maxframe/dataframe/arithmetic/subtract.py +64 -0
  287. maxframe/dataframe/arithmetic/tan.py +28 -0
  288. maxframe/dataframe/arithmetic/tanh.py +28 -0
  289. maxframe/dataframe/arithmetic/tests/__init__.py +13 -0
  290. maxframe/dataframe/arithmetic/tests/test_arithmetic.py +747 -0
  291. maxframe/dataframe/arithmetic/truediv.py +64 -0
  292. maxframe/dataframe/arithmetic/trunc.py +28 -0
  293. maxframe/dataframe/core.py +2386 -0
  294. maxframe/dataframe/datasource/__init__.py +33 -0
  295. maxframe/dataframe/datasource/core.py +112 -0
  296. maxframe/dataframe/datasource/dataframe.py +59 -0
  297. maxframe/dataframe/datasource/date_range.py +512 -0
  298. maxframe/dataframe/datasource/direct.py +57 -0
  299. maxframe/dataframe/datasource/from_dict.py +124 -0
  300. maxframe/dataframe/datasource/from_index.py +58 -0
  301. maxframe/dataframe/datasource/from_records.py +191 -0
  302. maxframe/dataframe/datasource/from_tensor.py +503 -0
  303. maxframe/dataframe/datasource/index.py +117 -0
  304. maxframe/dataframe/datasource/read_csv.py +534 -0
  305. maxframe/dataframe/datasource/read_odps_query.py +536 -0
  306. maxframe/dataframe/datasource/read_odps_table.py +295 -0
  307. maxframe/dataframe/datasource/read_parquet.py +278 -0
  308. maxframe/dataframe/datasource/series.py +55 -0
  309. maxframe/dataframe/datasource/tests/__init__.py +13 -0
  310. maxframe/dataframe/datasource/tests/test_datasource.py +663 -0
  311. maxframe/dataframe/datastore/__init__.py +41 -0
  312. maxframe/dataframe/datastore/core.py +28 -0
  313. maxframe/dataframe/datastore/direct.py +268 -0
  314. maxframe/dataframe/datastore/tests/__init__.py +13 -0
  315. maxframe/dataframe/datastore/tests/test_to_odps.py +99 -0
  316. maxframe/dataframe/datastore/to_csv.py +219 -0
  317. maxframe/dataframe/datastore/to_json.py +215 -0
  318. maxframe/dataframe/datastore/to_odps.py +285 -0
  319. maxframe/dataframe/datastore/to_parquet.py +121 -0
  320. maxframe/dataframe/extensions/__init__.py +70 -0
  321. maxframe/dataframe/extensions/accessor.py +35 -0
  322. maxframe/dataframe/extensions/apply_chunk.py +733 -0
  323. maxframe/dataframe/extensions/cartesian_chunk.py +153 -0
  324. maxframe/dataframe/extensions/collect_kv.py +126 -0
  325. maxframe/dataframe/extensions/extract_kv.py +177 -0
  326. maxframe/dataframe/extensions/flatjson.py +133 -0
  327. maxframe/dataframe/extensions/flatmap.py +329 -0
  328. maxframe/dataframe/extensions/map_reduce.py +263 -0
  329. maxframe/dataframe/extensions/rebalance.py +62 -0
  330. maxframe/dataframe/extensions/reshuffle.py +83 -0
  331. maxframe/dataframe/extensions/tests/__init__.py +13 -0
  332. maxframe/dataframe/extensions/tests/test_apply_chunk.py +194 -0
  333. maxframe/dataframe/extensions/tests/test_extensions.py +198 -0
  334. maxframe/dataframe/extensions/tests/test_map_reduce.py +135 -0
  335. maxframe/dataframe/fetch/__init__.py +15 -0
  336. maxframe/dataframe/fetch/core.py +97 -0
  337. maxframe/dataframe/groupby/__init__.py +105 -0
  338. maxframe/dataframe/groupby/aggregation.py +485 -0
  339. maxframe/dataframe/groupby/apply.py +235 -0
  340. maxframe/dataframe/groupby/apply_chunk.py +407 -0
  341. maxframe/dataframe/groupby/core.py +342 -0
  342. maxframe/dataframe/groupby/cum.py +102 -0
  343. maxframe/dataframe/groupby/expanding.py +264 -0
  344. maxframe/dataframe/groupby/extensions.py +26 -0
  345. maxframe/dataframe/groupby/fill.py +149 -0
  346. maxframe/dataframe/groupby/getitem.py +105 -0
  347. maxframe/dataframe/groupby/head.py +115 -0
  348. maxframe/dataframe/groupby/rank.py +136 -0
  349. maxframe/dataframe/groupby/rolling.py +206 -0
  350. maxframe/dataframe/groupby/sample.py +214 -0
  351. maxframe/dataframe/groupby/shift.py +114 -0
  352. maxframe/dataframe/groupby/tests/__init__.py +13 -0
  353. maxframe/dataframe/groupby/tests/test_groupby.py +373 -0
  354. maxframe/dataframe/groupby/transform.py +264 -0
  355. maxframe/dataframe/indexing/__init__.py +104 -0
  356. maxframe/dataframe/indexing/add_prefix_suffix.py +110 -0
  357. maxframe/dataframe/indexing/align.py +350 -0
  358. maxframe/dataframe/indexing/at.py +83 -0
  359. maxframe/dataframe/indexing/droplevel.py +195 -0
  360. maxframe/dataframe/indexing/filter.py +169 -0
  361. maxframe/dataframe/indexing/get_level_values.py +76 -0
  362. maxframe/dataframe/indexing/getitem.py +205 -0
  363. maxframe/dataframe/indexing/iat.py +82 -0
  364. maxframe/dataframe/indexing/iloc.py +711 -0
  365. maxframe/dataframe/indexing/insert.py +118 -0
  366. maxframe/dataframe/indexing/loc.py +694 -0
  367. maxframe/dataframe/indexing/reindex.py +541 -0
  368. maxframe/dataframe/indexing/rename.py +445 -0
  369. maxframe/dataframe/indexing/rename_axis.py +217 -0
  370. maxframe/dataframe/indexing/reorder_levels.py +143 -0
  371. maxframe/dataframe/indexing/reset_index.py +427 -0
  372. maxframe/dataframe/indexing/sample.py +232 -0
  373. maxframe/dataframe/indexing/set_axis.py +197 -0
  374. maxframe/dataframe/indexing/set_index.py +128 -0
  375. maxframe/dataframe/indexing/setitem.py +133 -0
  376. maxframe/dataframe/indexing/swaplevel.py +185 -0
  377. maxframe/dataframe/indexing/take.py +99 -0
  378. maxframe/dataframe/indexing/tests/__init__.py +13 -0
  379. maxframe/dataframe/indexing/tests/test_indexing.py +488 -0
  380. maxframe/dataframe/indexing/truncate.py +140 -0
  381. maxframe/dataframe/indexing/where.py +300 -0
  382. maxframe/dataframe/indexing/xs.py +148 -0
  383. maxframe/dataframe/initializer.py +298 -0
  384. maxframe/dataframe/merge/__init__.py +53 -0
  385. maxframe/dataframe/merge/append.py +120 -0
  386. maxframe/dataframe/merge/combine.py +244 -0
  387. maxframe/dataframe/merge/combine_first.py +120 -0
  388. maxframe/dataframe/merge/compare.py +387 -0
  389. maxframe/dataframe/merge/concat.py +500 -0
  390. maxframe/dataframe/merge/merge.py +806 -0
  391. maxframe/dataframe/merge/tests/__init__.py +13 -0
  392. maxframe/dataframe/merge/tests/test_merge.py +390 -0
  393. maxframe/dataframe/merge/update.py +271 -0
  394. maxframe/dataframe/misc/__init__.py +145 -0
  395. maxframe/dataframe/misc/_duplicate.py +56 -0
  396. maxframe/dataframe/misc/apply.py +730 -0
  397. maxframe/dataframe/misc/astype.py +237 -0
  398. maxframe/dataframe/misc/case_when.py +145 -0
  399. maxframe/dataframe/misc/check_monotonic.py +84 -0
  400. maxframe/dataframe/misc/check_unique.py +82 -0
  401. maxframe/dataframe/misc/clip.py +145 -0
  402. maxframe/dataframe/misc/cut.py +386 -0
  403. maxframe/dataframe/misc/describe.py +278 -0
  404. maxframe/dataframe/misc/diff.py +210 -0
  405. maxframe/dataframe/misc/drop.py +473 -0
  406. maxframe/dataframe/misc/drop_duplicates.py +251 -0
  407. maxframe/dataframe/misc/duplicated.py +292 -0
  408. maxframe/dataframe/misc/eval.py +730 -0
  409. maxframe/dataframe/misc/explode.py +171 -0
  410. maxframe/dataframe/misc/factorize.py +160 -0
  411. maxframe/dataframe/misc/get_dummies.py +241 -0
  412. maxframe/dataframe/misc/infer_dtypes.py +251 -0
  413. maxframe/dataframe/misc/isin.py +220 -0
  414. maxframe/dataframe/misc/map.py +360 -0
  415. maxframe/dataframe/misc/memory_usage.py +248 -0
  416. maxframe/dataframe/misc/pct_change.py +68 -0
  417. maxframe/dataframe/misc/qcut.py +104 -0
  418. maxframe/dataframe/misc/rechunk.py +59 -0
  419. maxframe/dataframe/misc/repeat.py +159 -0
  420. maxframe/dataframe/misc/select_dtypes.py +104 -0
  421. maxframe/dataframe/misc/shift.py +259 -0
  422. maxframe/dataframe/misc/tests/__init__.py +13 -0
  423. maxframe/dataframe/misc/tests/test_misc.py +649 -0
  424. maxframe/dataframe/misc/to_numeric.py +181 -0
  425. maxframe/dataframe/misc/transform.py +346 -0
  426. maxframe/dataframe/misc/transpose.py +148 -0
  427. maxframe/dataframe/misc/valid_index.py +115 -0
  428. maxframe/dataframe/misc/value_counts.py +206 -0
  429. maxframe/dataframe/missing/__init__.py +53 -0
  430. maxframe/dataframe/missing/checkna.py +231 -0
  431. maxframe/dataframe/missing/dropna.py +294 -0
  432. maxframe/dataframe/missing/fillna.py +283 -0
  433. maxframe/dataframe/missing/replace.py +446 -0
  434. maxframe/dataframe/missing/tests/__init__.py +13 -0
  435. maxframe/dataframe/missing/tests/test_missing.py +90 -0
  436. maxframe/dataframe/operators.py +231 -0
  437. maxframe/dataframe/reduction/__init__.py +129 -0
  438. maxframe/dataframe/reduction/aggregation.py +502 -0
  439. maxframe/dataframe/reduction/all.py +78 -0
  440. maxframe/dataframe/reduction/any.py +78 -0
  441. maxframe/dataframe/reduction/argmax.py +103 -0
  442. maxframe/dataframe/reduction/argmin.py +103 -0
  443. maxframe/dataframe/reduction/core.py +923 -0
  444. maxframe/dataframe/reduction/count.py +63 -0
  445. maxframe/dataframe/reduction/cov.py +166 -0
  446. maxframe/dataframe/reduction/cummax.py +30 -0
  447. maxframe/dataframe/reduction/cummin.py +30 -0
  448. maxframe/dataframe/reduction/cumprod.py +30 -0
  449. maxframe/dataframe/reduction/cumsum.py +30 -0
  450. maxframe/dataframe/reduction/custom_reduction.py +42 -0
  451. maxframe/dataframe/reduction/idxmax.py +185 -0
  452. maxframe/dataframe/reduction/idxmin.py +185 -0
  453. maxframe/dataframe/reduction/kurtosis.py +111 -0
  454. maxframe/dataframe/reduction/max.py +65 -0
  455. maxframe/dataframe/reduction/mean.py +63 -0
  456. maxframe/dataframe/reduction/median.py +56 -0
  457. maxframe/dataframe/reduction/min.py +65 -0
  458. maxframe/dataframe/reduction/mode.py +190 -0
  459. maxframe/dataframe/reduction/nunique.py +149 -0
  460. maxframe/dataframe/reduction/prod.py +81 -0
  461. maxframe/dataframe/reduction/reduction_size.py +36 -0
  462. maxframe/dataframe/reduction/sem.py +73 -0
  463. maxframe/dataframe/reduction/skew.py +93 -0
  464. maxframe/dataframe/reduction/std.py +53 -0
  465. maxframe/dataframe/reduction/str_concat.py +51 -0
  466. maxframe/dataframe/reduction/sum.py +81 -0
  467. maxframe/dataframe/reduction/tests/__init__.py +13 -0
  468. maxframe/dataframe/reduction/tests/test_reduction.py +598 -0
  469. maxframe/dataframe/reduction/unique.py +153 -0
  470. maxframe/dataframe/reduction/var.py +76 -0
  471. maxframe/dataframe/reshape/__init__.py +38 -0
  472. maxframe/dataframe/reshape/melt.py +169 -0
  473. maxframe/dataframe/reshape/pivot.py +233 -0
  474. maxframe/dataframe/reshape/pivot_table.py +275 -0
  475. maxframe/dataframe/reshape/stack.py +240 -0
  476. maxframe/dataframe/reshape/unstack.py +114 -0
  477. maxframe/dataframe/sort/__init__.py +49 -0
  478. maxframe/dataframe/sort/argsort.py +68 -0
  479. maxframe/dataframe/sort/core.py +37 -0
  480. maxframe/dataframe/sort/nlargest.py +238 -0
  481. maxframe/dataframe/sort/nsmallest.py +228 -0
  482. maxframe/dataframe/sort/rank.py +147 -0
  483. maxframe/dataframe/sort/sort_index.py +153 -0
  484. maxframe/dataframe/sort/sort_values.py +308 -0
  485. maxframe/dataframe/sort/tests/__init__.py +13 -0
  486. maxframe/dataframe/sort/tests/test_sort.py +85 -0
  487. maxframe/dataframe/statistics/__init__.py +33 -0
  488. maxframe/dataframe/statistics/corr.py +284 -0
  489. maxframe/dataframe/statistics/quantile.py +338 -0
  490. maxframe/dataframe/statistics/tests/__init__.py +13 -0
  491. maxframe/dataframe/statistics/tests/test_statistics.py +82 -0
  492. maxframe/dataframe/tests/__init__.py +13 -0
  493. maxframe/dataframe/tests/test_initializer.py +60 -0
  494. maxframe/dataframe/tests/test_typing.py +119 -0
  495. maxframe/dataframe/tests/test_utils.py +169 -0
  496. maxframe/dataframe/tseries/__init__.py +32 -0
  497. maxframe/dataframe/tseries/at_time.py +61 -0
  498. maxframe/dataframe/tseries/between_time.py +122 -0
  499. maxframe/dataframe/tseries/tests/__init__.py +13 -0
  500. maxframe/dataframe/tseries/tests/test_tseries.py +30 -0
  501. maxframe/dataframe/tseries/to_datetime.py +299 -0
  502. maxframe/dataframe/typing_.py +196 -0
  503. maxframe/dataframe/ufunc/__init__.py +27 -0
  504. maxframe/dataframe/ufunc/tensor.py +54 -0
  505. maxframe/dataframe/ufunc/ufunc.py +53 -0
  506. maxframe/dataframe/utils.py +1728 -0
  507. maxframe/dataframe/window/__init__.py +29 -0
  508. maxframe/dataframe/window/aggregation.py +100 -0
  509. maxframe/dataframe/window/core.py +82 -0
  510. maxframe/dataframe/window/ewm.py +247 -0
  511. maxframe/dataframe/window/expanding.py +151 -0
  512. maxframe/dataframe/window/rolling.py +389 -0
  513. maxframe/dataframe/window/tests/__init__.py +13 -0
  514. maxframe/dataframe/window/tests/test_ewm.py +70 -0
  515. maxframe/dataframe/window/tests/test_expanding.py +60 -0
  516. maxframe/dataframe/window/tests/test_rolling.py +57 -0
  517. maxframe/env.py +37 -0
  518. maxframe/errors.py +52 -0
  519. maxframe/extension.py +131 -0
  520. maxframe/io/__init__.py +13 -0
  521. maxframe/io/objects/__init__.py +24 -0
  522. maxframe/io/objects/core.py +156 -0
  523. maxframe/io/objects/tensor.py +133 -0
  524. maxframe/io/objects/tests/__init__.py +13 -0
  525. maxframe/io/objects/tests/test_object_io.py +85 -0
  526. maxframe/io/odpsio/__init__.py +24 -0
  527. maxframe/io/odpsio/arrow.py +161 -0
  528. maxframe/io/odpsio/schema.py +533 -0
  529. maxframe/io/odpsio/tableio.py +736 -0
  530. maxframe/io/odpsio/tests/__init__.py +13 -0
  531. maxframe/io/odpsio/tests/test_arrow.py +132 -0
  532. maxframe/io/odpsio/tests/test_schema.py +582 -0
  533. maxframe/io/odpsio/tests/test_tableio.py +205 -0
  534. maxframe/io/odpsio/tests/test_volumeio.py +75 -0
  535. maxframe/io/odpsio/volumeio.py +102 -0
  536. maxframe/learn/__init__.py +25 -0
  537. maxframe/learn/cluster/__init__.py +15 -0
  538. maxframe/learn/cluster/_kmeans.py +782 -0
  539. maxframe/learn/contrib/__init__.py +17 -0
  540. maxframe/learn/contrib/graph/__init__.py +15 -0
  541. maxframe/learn/contrib/graph/connected_components.py +216 -0
  542. maxframe/learn/contrib/graph/tests/__init__.py +13 -0
  543. maxframe/learn/contrib/graph/tests/test_connected_components.py +53 -0
  544. maxframe/learn/contrib/lightgbm/__init__.py +33 -0
  545. maxframe/learn/contrib/lightgbm/_predict.py +138 -0
  546. maxframe/learn/contrib/lightgbm/_train.py +163 -0
  547. maxframe/learn/contrib/lightgbm/callback.py +114 -0
  548. maxframe/learn/contrib/lightgbm/classifier.py +199 -0
  549. maxframe/learn/contrib/lightgbm/core.py +372 -0
  550. maxframe/learn/contrib/lightgbm/dataset.py +153 -0
  551. maxframe/learn/contrib/lightgbm/regressor.py +29 -0
  552. maxframe/learn/contrib/lightgbm/tests/__init__.py +13 -0
  553. maxframe/learn/contrib/lightgbm/tests/test_callback.py +58 -0
  554. maxframe/learn/contrib/llm/__init__.py +17 -0
  555. maxframe/learn/contrib/llm/core.py +105 -0
  556. maxframe/learn/contrib/llm/deploy/__init__.py +13 -0
  557. maxframe/learn/contrib/llm/deploy/config.py +221 -0
  558. maxframe/learn/contrib/llm/deploy/core.py +247 -0
  559. maxframe/learn/contrib/llm/deploy/framework.py +35 -0
  560. maxframe/learn/contrib/llm/deploy/loader.py +360 -0
  561. maxframe/learn/contrib/llm/deploy/tests/__init__.py +13 -0
  562. maxframe/learn/contrib/llm/deploy/tests/test_register_models.py +359 -0
  563. maxframe/learn/contrib/llm/models/__init__.py +16 -0
  564. maxframe/learn/contrib/llm/models/dashscope.py +114 -0
  565. maxframe/learn/contrib/llm/models/managed.py +119 -0
  566. maxframe/learn/contrib/llm/models/openai.py +72 -0
  567. maxframe/learn/contrib/llm/multi_modal.py +135 -0
  568. maxframe/learn/contrib/llm/tests/__init__.py +13 -0
  569. maxframe/learn/contrib/llm/tests/test_core.py +34 -0
  570. maxframe/learn/contrib/llm/tests/test_openai.py +187 -0
  571. maxframe/learn/contrib/llm/tests/test_text_gen.py +155 -0
  572. maxframe/learn/contrib/llm/text.py +608 -0
  573. maxframe/learn/contrib/models.py +109 -0
  574. maxframe/learn/contrib/pytorch/__init__.py +16 -0
  575. maxframe/learn/contrib/pytorch/run_function.py +110 -0
  576. maxframe/learn/contrib/pytorch/run_script.py +102 -0
  577. maxframe/learn/contrib/pytorch/tests/__init__.py +13 -0
  578. maxframe/learn/contrib/pytorch/tests/test_pytorch.py +42 -0
  579. maxframe/learn/contrib/utils.py +108 -0
  580. maxframe/learn/contrib/xgboost/__init__.py +33 -0
  581. maxframe/learn/contrib/xgboost/callback.py +86 -0
  582. maxframe/learn/contrib/xgboost/classifier.py +119 -0
  583. maxframe/learn/contrib/xgboost/core.py +469 -0
  584. maxframe/learn/contrib/xgboost/dmatrix.py +157 -0
  585. maxframe/learn/contrib/xgboost/predict.py +133 -0
  586. maxframe/learn/contrib/xgboost/regressor.py +91 -0
  587. maxframe/learn/contrib/xgboost/tests/__init__.py +13 -0
  588. maxframe/learn/contrib/xgboost/tests/test_callback.py +41 -0
  589. maxframe/learn/contrib/xgboost/tests/test_core.py +43 -0
  590. maxframe/learn/contrib/xgboost/train.py +181 -0
  591. maxframe/learn/core.py +344 -0
  592. maxframe/learn/datasets/__init__.py +20 -0
  593. maxframe/learn/datasets/samples_generator.py +628 -0
  594. maxframe/learn/linear_model/__init__.py +15 -0
  595. maxframe/learn/linear_model/_base.py +220 -0
  596. maxframe/learn/linear_model/_lin_reg.py +175 -0
  597. maxframe/learn/metrics/__init__.py +31 -0
  598. maxframe/learn/metrics/_check_targets.py +95 -0
  599. maxframe/learn/metrics/_classification.py +1266 -0
  600. maxframe/learn/metrics/_ranking.py +477 -0
  601. maxframe/learn/metrics/_regression.py +256 -0
  602. maxframe/learn/metrics/_scorer.py +60 -0
  603. maxframe/learn/metrics/pairwise/__init__.py +21 -0
  604. maxframe/learn/metrics/pairwise/core.py +77 -0
  605. maxframe/learn/metrics/pairwise/cosine.py +115 -0
  606. maxframe/learn/metrics/pairwise/euclidean.py +176 -0
  607. maxframe/learn/metrics/pairwise/haversine.py +96 -0
  608. maxframe/learn/metrics/pairwise/manhattan.py +80 -0
  609. maxframe/learn/metrics/pairwise/pairwise.py +127 -0
  610. maxframe/learn/metrics/pairwise/pairwise_distances_topk.py +121 -0
  611. maxframe/learn/metrics/pairwise/rbf_kernel.py +51 -0
  612. maxframe/learn/metrics/tests/__init__.py +13 -0
  613. maxframe/learn/metrics/tests/test_scorer.py +26 -0
  614. maxframe/learn/model_selection/__init__.py +15 -0
  615. maxframe/learn/model_selection/_split.py +451 -0
  616. maxframe/learn/model_selection/tests/__init__.py +13 -0
  617. maxframe/learn/model_selection/tests/test_split.py +156 -0
  618. maxframe/learn/preprocessing/__init__.py +16 -0
  619. maxframe/learn/preprocessing/_data/__init__.py +17 -0
  620. maxframe/learn/preprocessing/_data/min_max_scaler.py +401 -0
  621. maxframe/learn/preprocessing/_data/normalize.py +127 -0
  622. maxframe/learn/preprocessing/_data/standard_scaler.py +512 -0
  623. maxframe/learn/preprocessing/_data/utils.py +79 -0
  624. maxframe/learn/preprocessing/_label/__init__.py +16 -0
  625. maxframe/learn/preprocessing/_label/_label_binarizer.py +599 -0
  626. maxframe/learn/preprocessing/_label/_label_encoder.py +174 -0
  627. maxframe/learn/utils/__init__.py +20 -0
  628. maxframe/learn/utils/_encode.py +312 -0
  629. maxframe/learn/utils/checks.py +160 -0
  630. maxframe/learn/utils/core.py +121 -0
  631. maxframe/learn/utils/extmath.py +246 -0
  632. maxframe/learn/utils/multiclass.py +292 -0
  633. maxframe/learn/utils/odpsio.py +262 -0
  634. maxframe/learn/utils/shuffle.py +114 -0
  635. maxframe/learn/utils/sparsefuncs.py +87 -0
  636. maxframe/learn/utils/validation.py +775 -0
  637. maxframe/lib/__init__.py +13 -0
  638. maxframe/lib/aio/__init__.py +27 -0
  639. maxframe/lib/aio/_runners.py +162 -0
  640. maxframe/lib/aio/_threads.py +35 -0
  641. maxframe/lib/aio/base.py +82 -0
  642. maxframe/lib/aio/file.py +85 -0
  643. maxframe/lib/aio/isolation.py +100 -0
  644. maxframe/lib/aio/lru.py +242 -0
  645. maxframe/lib/aio/parallelism.py +37 -0
  646. maxframe/lib/aio/tests/__init__.py +13 -0
  647. maxframe/lib/aio/tests/test_aio_file.py +55 -0
  648. maxframe/lib/compat.py +185 -0
  649. maxframe/lib/compression.py +55 -0
  650. maxframe/lib/cython/__init__.py +13 -0
  651. maxframe/lib/cython/libcpp.pxd +30 -0
  652. maxframe/lib/dtypes_extension/__init__.py +30 -0
  653. maxframe/lib/dtypes_extension/_fake_arrow_dtype.py +609 -0
  654. maxframe/lib/dtypes_extension/blob.py +304 -0
  655. maxframe/lib/dtypes_extension/dtypes.py +106 -0
  656. maxframe/lib/dtypes_extension/tests/__init__.py +13 -0
  657. maxframe/lib/dtypes_extension/tests/test_blob.py +88 -0
  658. maxframe/lib/dtypes_extension/tests/test_dtypes.py +63 -0
  659. maxframe/lib/dtypes_extension/tests/test_fake_arrow_dtype.py +75 -0
  660. maxframe/lib/filesystem/__init__.py +22 -0
  661. maxframe/lib/filesystem/_glob.py +173 -0
  662. maxframe/lib/filesystem/_oss_lib/__init__.py +13 -0
  663. maxframe/lib/filesystem/_oss_lib/common.py +274 -0
  664. maxframe/lib/filesystem/_oss_lib/glob.py +147 -0
  665. maxframe/lib/filesystem/_oss_lib/handle.py +180 -0
  666. maxframe/lib/filesystem/arrow.py +240 -0
  667. maxframe/lib/filesystem/base.py +327 -0
  668. maxframe/lib/filesystem/core.py +95 -0
  669. maxframe/lib/filesystem/fshandler.py +136 -0
  670. maxframe/lib/filesystem/fsmap.py +164 -0
  671. maxframe/lib/filesystem/hdfs.py +31 -0
  672. maxframe/lib/filesystem/local.py +120 -0
  673. maxframe/lib/filesystem/oss.py +283 -0
  674. maxframe/lib/filesystem/tests/__init__.py +13 -0
  675. maxframe/lib/filesystem/tests/test_filesystem.py +205 -0
  676. maxframe/lib/filesystem/tests/test_fshandler.py +281 -0
  677. maxframe/lib/filesystem/tests/test_oss.py +220 -0
  678. maxframe/lib/functools_compat.py +81 -0
  679. maxframe/lib/mmh3.cp312-win32.pyd +0 -0
  680. maxframe/lib/mmh3.pyi +43 -0
  681. maxframe/lib/mmh3_src/MurmurHash3.cpp +339 -0
  682. maxframe/lib/mmh3_src/MurmurHash3.h +43 -0
  683. maxframe/lib/mmh3_src/mmh3module.cpp +387 -0
  684. maxframe/lib/sparse/__init__.py +856 -0
  685. maxframe/lib/sparse/array.py +1616 -0
  686. maxframe/lib/sparse/core.py +90 -0
  687. maxframe/lib/sparse/linalg.py +31 -0
  688. maxframe/lib/sparse/matrix.py +244 -0
  689. maxframe/lib/sparse/tests/__init__.py +13 -0
  690. maxframe/lib/sparse/tests/test_sparse.py +476 -0
  691. maxframe/lib/sparse/vector.py +148 -0
  692. maxframe/lib/tblib/LICENSE +20 -0
  693. maxframe/lib/tblib/__init__.py +327 -0
  694. maxframe/lib/tblib/cpython.py +83 -0
  695. maxframe/lib/tblib/decorators.py +44 -0
  696. maxframe/lib/tblib/pickling_support.py +90 -0
  697. maxframe/lib/tests/__init__.py +13 -0
  698. maxframe/lib/tests/test_wrapped_pickle.py +51 -0
  699. maxframe/lib/version.py +620 -0
  700. maxframe/lib/wrapped_pickle.py +177 -0
  701. maxframe/mixin.py +157 -0
  702. maxframe/opcodes.py +654 -0
  703. maxframe/protocol.py +611 -0
  704. maxframe/remote/__init__.py +18 -0
  705. maxframe/remote/core.py +212 -0
  706. maxframe/remote/run_script.py +124 -0
  707. maxframe/serialization/__init__.py +39 -0
  708. maxframe/serialization/arrow.py +107 -0
  709. maxframe/serialization/blob.py +32 -0
  710. maxframe/serialization/core.cp312-win32.pyd +0 -0
  711. maxframe/serialization/core.pxd +50 -0
  712. maxframe/serialization/core.pyi +66 -0
  713. maxframe/serialization/core.pyx +1282 -0
  714. maxframe/serialization/exception.py +90 -0
  715. maxframe/serialization/maxframe_objects.py +39 -0
  716. maxframe/serialization/numpy.py +110 -0
  717. maxframe/serialization/pandas.py +278 -0
  718. maxframe/serialization/scipy.py +71 -0
  719. maxframe/serialization/serializables/__init__.py +55 -0
  720. maxframe/serialization/serializables/core.py +469 -0
  721. maxframe/serialization/serializables/field.py +624 -0
  722. maxframe/serialization/serializables/field_type.py +592 -0
  723. maxframe/serialization/serializables/tests/__init__.py +13 -0
  724. maxframe/serialization/serializables/tests/test_field_type.py +119 -0
  725. maxframe/serialization/serializables/tests/test_serializable.py +313 -0
  726. maxframe/serialization/tests/__init__.py +13 -0
  727. maxframe/serialization/tests/test_serial.py +516 -0
  728. maxframe/session.py +1250 -0
  729. maxframe/sperunner.py +165 -0
  730. maxframe/tensor/__init__.py +325 -0
  731. maxframe/tensor/arithmetic/__init__.py +322 -0
  732. maxframe/tensor/arithmetic/abs.py +66 -0
  733. maxframe/tensor/arithmetic/absolute.py +66 -0
  734. maxframe/tensor/arithmetic/add.py +112 -0
  735. maxframe/tensor/arithmetic/angle.py +70 -0
  736. maxframe/tensor/arithmetic/arccos.py +101 -0
  737. maxframe/tensor/arithmetic/arccosh.py +89 -0
  738. maxframe/tensor/arithmetic/arcsin.py +92 -0
  739. maxframe/tensor/arithmetic/arcsinh.py +84 -0
  740. maxframe/tensor/arithmetic/arctan.py +104 -0
  741. maxframe/tensor/arithmetic/arctan2.py +126 -0
  742. maxframe/tensor/arithmetic/arctanh.py +84 -0
  743. maxframe/tensor/arithmetic/around.py +112 -0
  744. maxframe/tensor/arithmetic/bitand.py +93 -0
  745. maxframe/tensor/arithmetic/bitor.py +100 -0
  746. maxframe/tensor/arithmetic/bitxor.py +93 -0
  747. maxframe/tensor/arithmetic/cbrt.py +64 -0
  748. maxframe/tensor/arithmetic/ceil.py +69 -0
  749. maxframe/tensor/arithmetic/clip.py +165 -0
  750. maxframe/tensor/arithmetic/conj.py +72 -0
  751. maxframe/tensor/arithmetic/copysign.py +76 -0
  752. maxframe/tensor/arithmetic/core.py +546 -0
  753. maxframe/tensor/arithmetic/cos.py +83 -0
  754. maxframe/tensor/arithmetic/cosh.py +70 -0
  755. maxframe/tensor/arithmetic/deg2rad.py +70 -0
  756. maxframe/tensor/arithmetic/degrees.py +75 -0
  757. maxframe/tensor/arithmetic/divide.py +112 -0
  758. maxframe/tensor/arithmetic/equal.py +74 -0
  759. maxframe/tensor/arithmetic/exp.py +104 -0
  760. maxframe/tensor/arithmetic/exp2.py +65 -0
  761. maxframe/tensor/arithmetic/expm1.py +77 -0
  762. maxframe/tensor/arithmetic/fabs.py +72 -0
  763. maxframe/tensor/arithmetic/fix.py +67 -0
  764. maxframe/tensor/arithmetic/float_power.py +101 -0
  765. maxframe/tensor/arithmetic/floor.py +75 -0
  766. maxframe/tensor/arithmetic/floordiv.py +92 -0
  767. maxframe/tensor/arithmetic/fmax.py +103 -0
  768. maxframe/tensor/arithmetic/fmin.py +104 -0
  769. maxframe/tensor/arithmetic/fmod.py +97 -0
  770. maxframe/tensor/arithmetic/frexp.py +96 -0
  771. maxframe/tensor/arithmetic/greater.py +75 -0
  772. maxframe/tensor/arithmetic/greater_equal.py +67 -0
  773. maxframe/tensor/arithmetic/hypot.py +75 -0
  774. maxframe/tensor/arithmetic/i0.py +87 -0
  775. maxframe/tensor/arithmetic/imag.py +65 -0
  776. maxframe/tensor/arithmetic/invert.py +108 -0
  777. maxframe/tensor/arithmetic/isclose.py +114 -0
  778. maxframe/tensor/arithmetic/iscomplex.py +62 -0
  779. maxframe/tensor/arithmetic/iscomplexobj.py +53 -0
  780. maxframe/tensor/arithmetic/isfinite.py +104 -0
  781. maxframe/tensor/arithmetic/isinf.py +101 -0
  782. maxframe/tensor/arithmetic/isnan.py +80 -0
  783. maxframe/tensor/arithmetic/isreal.py +61 -0
  784. maxframe/tensor/arithmetic/ldexp.py +97 -0
  785. maxframe/tensor/arithmetic/less.py +67 -0
  786. maxframe/tensor/arithmetic/less_equal.py +67 -0
  787. maxframe/tensor/arithmetic/log.py +90 -0
  788. maxframe/tensor/arithmetic/log10.py +83 -0
  789. maxframe/tensor/arithmetic/log1p.py +93 -0
  790. maxframe/tensor/arithmetic/log2.py +83 -0
  791. maxframe/tensor/arithmetic/logaddexp.py +78 -0
  792. maxframe/tensor/arithmetic/logaddexp2.py +76 -0
  793. maxframe/tensor/arithmetic/logical_and.py +79 -0
  794. maxframe/tensor/arithmetic/logical_not.py +72 -0
  795. maxframe/tensor/arithmetic/logical_or.py +80 -0
  796. maxframe/tensor/arithmetic/logical_xor.py +86 -0
  797. maxframe/tensor/arithmetic/lshift.py +80 -0
  798. maxframe/tensor/arithmetic/maximum.py +106 -0
  799. maxframe/tensor/arithmetic/minimum.py +106 -0
  800. maxframe/tensor/arithmetic/mod.py +102 -0
  801. maxframe/tensor/arithmetic/modf.py +87 -0
  802. maxframe/tensor/arithmetic/multiply.py +114 -0
  803. maxframe/tensor/arithmetic/nan_to_num.py +97 -0
  804. maxframe/tensor/arithmetic/negative.py +63 -0
  805. maxframe/tensor/arithmetic/nextafter.py +66 -0
  806. maxframe/tensor/arithmetic/not_equal.py +70 -0
  807. maxframe/tensor/arithmetic/positive.py +45 -0
  808. maxframe/tensor/arithmetic/power.py +104 -0
  809. maxframe/tensor/arithmetic/rad2deg.py +69 -0
  810. maxframe/tensor/arithmetic/radians.py +75 -0
  811. maxframe/tensor/arithmetic/real.py +68 -0
  812. maxframe/tensor/arithmetic/reciprocal.py +78 -0
  813. maxframe/tensor/arithmetic/rint.py +66 -0
  814. maxframe/tensor/arithmetic/rshift.py +79 -0
  815. maxframe/tensor/arithmetic/setimag.py +27 -0
  816. maxframe/tensor/arithmetic/setreal.py +27 -0
  817. maxframe/tensor/arithmetic/sign.py +79 -0
  818. maxframe/tensor/arithmetic/signbit.py +63 -0
  819. maxframe/tensor/arithmetic/sin.py +96 -0
  820. maxframe/tensor/arithmetic/sinc.py +100 -0
  821. maxframe/tensor/arithmetic/sinh.py +91 -0
  822. maxframe/tensor/arithmetic/spacing.py +70 -0
  823. maxframe/tensor/arithmetic/sqrt.py +79 -0
  824. maxframe/tensor/arithmetic/square.py +67 -0
  825. maxframe/tensor/arithmetic/subtract.py +83 -0
  826. maxframe/tensor/arithmetic/tan.py +86 -0
  827. maxframe/tensor/arithmetic/tanh.py +90 -0
  828. maxframe/tensor/arithmetic/tests/__init__.py +13 -0
  829. maxframe/tensor/arithmetic/tests/test_arithmetic.py +449 -0
  830. maxframe/tensor/arithmetic/truediv.py +102 -0
  831. maxframe/tensor/arithmetic/trunc.py +70 -0
  832. maxframe/tensor/arithmetic/utils.py +91 -0
  833. maxframe/tensor/array_utils.py +164 -0
  834. maxframe/tensor/core.py +597 -0
  835. maxframe/tensor/datasource/__init__.py +40 -0
  836. maxframe/tensor/datasource/arange.py +154 -0
  837. maxframe/tensor/datasource/array.py +399 -0
  838. maxframe/tensor/datasource/core.py +114 -0
  839. maxframe/tensor/datasource/diag.py +140 -0
  840. maxframe/tensor/datasource/diagflat.py +69 -0
  841. maxframe/tensor/datasource/empty.py +167 -0
  842. maxframe/tensor/datasource/eye.py +95 -0
  843. maxframe/tensor/datasource/from_dataframe.py +68 -0
  844. maxframe/tensor/datasource/from_dense.py +37 -0
  845. maxframe/tensor/datasource/from_sparse.py +45 -0
  846. maxframe/tensor/datasource/full.py +184 -0
  847. maxframe/tensor/datasource/identity.py +54 -0
  848. maxframe/tensor/datasource/indices.py +115 -0
  849. maxframe/tensor/datasource/linspace.py +140 -0
  850. maxframe/tensor/datasource/meshgrid.py +135 -0
  851. maxframe/tensor/datasource/ones.py +178 -0
  852. maxframe/tensor/datasource/scalar.py +40 -0
  853. maxframe/tensor/datasource/tests/__init__.py +13 -0
  854. maxframe/tensor/datasource/tests/test_datasource.py +310 -0
  855. maxframe/tensor/datasource/tri_array.py +107 -0
  856. maxframe/tensor/datasource/zeros.py +192 -0
  857. maxframe/tensor/extensions/__init__.py +33 -0
  858. maxframe/tensor/extensions/accessor.py +25 -0
  859. maxframe/tensor/extensions/apply_chunk.py +137 -0
  860. maxframe/tensor/extensions/rebalance.py +65 -0
  861. maxframe/tensor/fetch/__init__.py +15 -0
  862. maxframe/tensor/fetch/core.py +54 -0
  863. maxframe/tensor/fft/__init__.py +32 -0
  864. maxframe/tensor/fft/core.py +168 -0
  865. maxframe/tensor/fft/fft.py +112 -0
  866. maxframe/tensor/fft/fft2.py +118 -0
  867. maxframe/tensor/fft/fftfreq.py +80 -0
  868. maxframe/tensor/fft/fftn.py +123 -0
  869. maxframe/tensor/fft/fftshift.py +79 -0
  870. maxframe/tensor/fft/hfft.py +112 -0
  871. maxframe/tensor/fft/ifft.py +114 -0
  872. maxframe/tensor/fft/ifft2.py +115 -0
  873. maxframe/tensor/fft/ifftn.py +123 -0
  874. maxframe/tensor/fft/ifftshift.py +73 -0
  875. maxframe/tensor/fft/ihfft.py +93 -0
  876. maxframe/tensor/fft/irfft.py +118 -0
  877. maxframe/tensor/fft/irfft2.py +62 -0
  878. maxframe/tensor/fft/irfftn.py +114 -0
  879. maxframe/tensor/fft/rfft.py +116 -0
  880. maxframe/tensor/fft/rfft2.py +63 -0
  881. maxframe/tensor/fft/rfftfreq.py +87 -0
  882. maxframe/tensor/fft/rfftn.py +113 -0
  883. maxframe/tensor/indexing/__init__.py +47 -0
  884. maxframe/tensor/indexing/choose.py +198 -0
  885. maxframe/tensor/indexing/compress.py +122 -0
  886. maxframe/tensor/indexing/core.py +190 -0
  887. maxframe/tensor/indexing/extract.py +69 -0
  888. maxframe/tensor/indexing/fill_diagonal.py +180 -0
  889. maxframe/tensor/indexing/flatnonzero.py +58 -0
  890. maxframe/tensor/indexing/getitem.py +144 -0
  891. maxframe/tensor/indexing/nonzero.py +118 -0
  892. maxframe/tensor/indexing/setitem.py +142 -0
  893. maxframe/tensor/indexing/slice.py +32 -0
  894. maxframe/tensor/indexing/take.py +128 -0
  895. maxframe/tensor/indexing/tests/__init__.py +13 -0
  896. maxframe/tensor/indexing/tests/test_indexing.py +232 -0
  897. maxframe/tensor/indexing/unravel_index.py +103 -0
  898. maxframe/tensor/lib/__init__.py +16 -0
  899. maxframe/tensor/lib/index_tricks.py +404 -0
  900. maxframe/tensor/linalg/__init__.py +43 -0
  901. maxframe/tensor/linalg/_einsumfunc.py +1025 -0
  902. maxframe/tensor/linalg/cholesky.py +117 -0
  903. maxframe/tensor/linalg/dot.py +145 -0
  904. maxframe/tensor/linalg/einsum.py +339 -0
  905. maxframe/tensor/linalg/inner.py +36 -0
  906. maxframe/tensor/linalg/inv.py +83 -0
  907. maxframe/tensor/linalg/lstsq.py +100 -0
  908. maxframe/tensor/linalg/lu.py +115 -0
  909. maxframe/tensor/linalg/matmul.py +225 -0
  910. maxframe/tensor/linalg/matrix_norm.py +75 -0
  911. maxframe/tensor/linalg/norm.py +249 -0
  912. maxframe/tensor/linalg/qr.py +124 -0
  913. maxframe/tensor/linalg/solve.py +72 -0
  914. maxframe/tensor/linalg/solve_triangular.py +103 -0
  915. maxframe/tensor/linalg/svd.py +167 -0
  916. maxframe/tensor/linalg/tensordot.py +213 -0
  917. maxframe/tensor/linalg/vdot.py +73 -0
  918. maxframe/tensor/linalg/vector_norm.py +113 -0
  919. maxframe/tensor/merge/__init__.py +21 -0
  920. maxframe/tensor/merge/append.py +74 -0
  921. maxframe/tensor/merge/column_stack.py +63 -0
  922. maxframe/tensor/merge/concatenate.py +103 -0
  923. maxframe/tensor/merge/dstack.py +71 -0
  924. maxframe/tensor/merge/hstack.py +70 -0
  925. maxframe/tensor/merge/stack.py +130 -0
  926. maxframe/tensor/merge/tests/__init__.py +13 -0
  927. maxframe/tensor/merge/tests/test_merge.py +79 -0
  928. maxframe/tensor/merge/vstack.py +74 -0
  929. maxframe/tensor/misc/__init__.py +72 -0
  930. maxframe/tensor/misc/argwhere.py +72 -0
  931. maxframe/tensor/misc/array_split.py +46 -0
  932. maxframe/tensor/misc/astype.py +121 -0
  933. maxframe/tensor/misc/atleast_1d.py +72 -0
  934. maxframe/tensor/misc/atleast_2d.py +70 -0
  935. maxframe/tensor/misc/atleast_3d.py +85 -0
  936. maxframe/tensor/misc/broadcast_arrays.py +57 -0
  937. maxframe/tensor/misc/broadcast_to.py +89 -0
  938. maxframe/tensor/misc/copy.py +64 -0
  939. maxframe/tensor/misc/copyto.py +130 -0
  940. maxframe/tensor/misc/delete.py +104 -0
  941. maxframe/tensor/misc/diff.py +115 -0
  942. maxframe/tensor/misc/dsplit.py +68 -0
  943. maxframe/tensor/misc/ediff1d.py +74 -0
  944. maxframe/tensor/misc/expand_dims.py +85 -0
  945. maxframe/tensor/misc/flatten.py +63 -0
  946. maxframe/tensor/misc/flip.py +90 -0
  947. maxframe/tensor/misc/fliplr.py +64 -0
  948. maxframe/tensor/misc/flipud.py +68 -0
  949. maxframe/tensor/misc/hsplit.py +85 -0
  950. maxframe/tensor/misc/in1d.py +94 -0
  951. maxframe/tensor/misc/insert.py +139 -0
  952. maxframe/tensor/misc/isin.py +130 -0
  953. maxframe/tensor/misc/moveaxis.py +83 -0
  954. maxframe/tensor/misc/ndim.py +53 -0
  955. maxframe/tensor/misc/ravel.py +90 -0
  956. maxframe/tensor/misc/repeat.py +129 -0
  957. maxframe/tensor/misc/result_type.py +88 -0
  958. maxframe/tensor/misc/roll.py +124 -0
  959. maxframe/tensor/misc/rollaxis.py +77 -0
  960. maxframe/tensor/misc/searchsorted.py +147 -0
  961. maxframe/tensor/misc/setdiff1d.py +58 -0
  962. maxframe/tensor/misc/shape.py +89 -0
  963. maxframe/tensor/misc/split.py +190 -0
  964. maxframe/tensor/misc/squeeze.py +117 -0
  965. maxframe/tensor/misc/swapaxes.py +113 -0
  966. maxframe/tensor/misc/tests/__init__.py +13 -0
  967. maxframe/tensor/misc/tests/test_misc.py +112 -0
  968. maxframe/tensor/misc/tile.py +109 -0
  969. maxframe/tensor/misc/transpose.py +133 -0
  970. maxframe/tensor/misc/trapezoid.py +123 -0
  971. maxframe/tensor/misc/unique.py +227 -0
  972. maxframe/tensor/misc/vsplit.py +74 -0
  973. maxframe/tensor/misc/where.py +129 -0
  974. maxframe/tensor/operators.py +83 -0
  975. maxframe/tensor/random/__init__.py +166 -0
  976. maxframe/tensor/random/beta.py +87 -0
  977. maxframe/tensor/random/binomial.py +135 -0
  978. maxframe/tensor/random/bytes.py +37 -0
  979. maxframe/tensor/random/chisquare.py +108 -0
  980. maxframe/tensor/random/choice.py +187 -0
  981. maxframe/tensor/random/core.py +249 -0
  982. maxframe/tensor/random/dirichlet.py +121 -0
  983. maxframe/tensor/random/exponential.py +92 -0
  984. maxframe/tensor/random/f.py +133 -0
  985. maxframe/tensor/random/gamma.py +126 -0
  986. maxframe/tensor/random/geometric.py +91 -0
  987. maxframe/tensor/random/gumbel.py +165 -0
  988. maxframe/tensor/random/hypergeometric.py +146 -0
  989. maxframe/tensor/random/laplace.py +131 -0
  990. maxframe/tensor/random/logistic.py +127 -0
  991. maxframe/tensor/random/lognormal.py +157 -0
  992. maxframe/tensor/random/logseries.py +120 -0
  993. maxframe/tensor/random/multinomial.py +131 -0
  994. maxframe/tensor/random/multivariate_normal.py +190 -0
  995. maxframe/tensor/random/negative_binomial.py +123 -0
  996. maxframe/tensor/random/noncentral_chisquare.py +130 -0
  997. maxframe/tensor/random/noncentral_f.py +124 -0
  998. maxframe/tensor/random/normal.py +141 -0
  999. maxframe/tensor/random/pareto.py +138 -0
  1000. maxframe/tensor/random/permutation.py +107 -0
  1001. maxframe/tensor/random/poisson.py +109 -0
  1002. maxframe/tensor/random/power.py +140 -0
  1003. maxframe/tensor/random/rand.py +80 -0
  1004. maxframe/tensor/random/randint.py +119 -0
  1005. maxframe/tensor/random/randn.py +94 -0
  1006. maxframe/tensor/random/random_integers.py +121 -0
  1007. maxframe/tensor/random/random_sample.py +84 -0
  1008. maxframe/tensor/random/rayleigh.py +108 -0
  1009. maxframe/tensor/random/shuffle.py +61 -0
  1010. maxframe/tensor/random/standard_cauchy.py +103 -0
  1011. maxframe/tensor/random/standard_exponential.py +70 -0
  1012. maxframe/tensor/random/standard_gamma.py +118 -0
  1013. maxframe/tensor/random/standard_normal.py +72 -0
  1014. maxframe/tensor/random/standard_t.py +133 -0
  1015. maxframe/tensor/random/tests/__init__.py +13 -0
  1016. maxframe/tensor/random/tests/test_random.py +165 -0
  1017. maxframe/tensor/random/triangular.py +117 -0
  1018. maxframe/tensor/random/uniform.py +129 -0
  1019. maxframe/tensor/random/vonmises.py +129 -0
  1020. maxframe/tensor/random/wald.py +112 -0
  1021. maxframe/tensor/random/weibull.py +138 -0
  1022. maxframe/tensor/random/zipf.py +120 -0
  1023. maxframe/tensor/rechunk/__init__.py +26 -0
  1024. maxframe/tensor/rechunk/rechunk.py +43 -0
  1025. maxframe/tensor/reduction/__init__.py +64 -0
  1026. maxframe/tensor/reduction/all.py +101 -0
  1027. maxframe/tensor/reduction/allclose.py +86 -0
  1028. maxframe/tensor/reduction/any.py +103 -0
  1029. maxframe/tensor/reduction/argmax.py +101 -0
  1030. maxframe/tensor/reduction/argmin.py +101 -0
  1031. maxframe/tensor/reduction/array_equal.py +63 -0
  1032. maxframe/tensor/reduction/core.py +166 -0
  1033. maxframe/tensor/reduction/count_nonzero.py +80 -0
  1034. maxframe/tensor/reduction/cumprod.py +95 -0
  1035. maxframe/tensor/reduction/cumsum.py +99 -0
  1036. maxframe/tensor/reduction/max.py +118 -0
  1037. maxframe/tensor/reduction/mean.py +122 -0
  1038. maxframe/tensor/reduction/min.py +118 -0
  1039. maxframe/tensor/reduction/nanargmax.py +80 -0
  1040. maxframe/tensor/reduction/nanargmin.py +74 -0
  1041. maxframe/tensor/reduction/nancumprod.py +89 -0
  1042. maxframe/tensor/reduction/nancumsum.py +92 -0
  1043. maxframe/tensor/reduction/nanmax.py +109 -0
  1044. maxframe/tensor/reduction/nanmean.py +105 -0
  1045. maxframe/tensor/reduction/nanmin.py +109 -0
  1046. maxframe/tensor/reduction/nanprod.py +92 -0
  1047. maxframe/tensor/reduction/nanstd.py +124 -0
  1048. maxframe/tensor/reduction/nansum.py +113 -0
  1049. maxframe/tensor/reduction/nanvar.py +149 -0
  1050. maxframe/tensor/reduction/prod.py +128 -0
  1051. maxframe/tensor/reduction/std.py +132 -0
  1052. maxframe/tensor/reduction/sum.py +123 -0
  1053. maxframe/tensor/reduction/tests/__init__.py +13 -0
  1054. maxframe/tensor/reduction/tests/test_reduction.py +189 -0
  1055. maxframe/tensor/reduction/var.py +176 -0
  1056. maxframe/tensor/reshape/__init__.py +15 -0
  1057. maxframe/tensor/reshape/reshape.py +192 -0
  1058. maxframe/tensor/reshape/tests/__init__.py +13 -0
  1059. maxframe/tensor/reshape/tests/test_reshape.py +35 -0
  1060. maxframe/tensor/sort/__init__.py +18 -0
  1061. maxframe/tensor/sort/argpartition.py +98 -0
  1062. maxframe/tensor/sort/argsort.py +150 -0
  1063. maxframe/tensor/sort/partition.py +228 -0
  1064. maxframe/tensor/sort/sort.py +295 -0
  1065. maxframe/tensor/spatial/__init__.py +15 -0
  1066. maxframe/tensor/spatial/distance/__init__.py +17 -0
  1067. maxframe/tensor/spatial/distance/cdist.py +421 -0
  1068. maxframe/tensor/spatial/distance/pdist.py +398 -0
  1069. maxframe/tensor/spatial/distance/squareform.py +153 -0
  1070. maxframe/tensor/special/__init__.py +175 -0
  1071. maxframe/tensor/special/airy.py +55 -0
  1072. maxframe/tensor/special/bessel.py +199 -0
  1073. maxframe/tensor/special/core.py +99 -0
  1074. maxframe/tensor/special/ellip_func_integrals.py +155 -0
  1075. maxframe/tensor/special/ellip_harm.py +55 -0
  1076. maxframe/tensor/special/err_fresnel.py +223 -0
  1077. maxframe/tensor/special/gamma_funcs.py +303 -0
  1078. maxframe/tensor/special/hypergeometric_funcs.py +69 -0
  1079. maxframe/tensor/special/info_theory.py +189 -0
  1080. maxframe/tensor/special/misc.py +163 -0
  1081. maxframe/tensor/special/statistical.py +56 -0
  1082. maxframe/tensor/statistics/__init__.py +24 -0
  1083. maxframe/tensor/statistics/average.py +143 -0
  1084. maxframe/tensor/statistics/bincount.py +133 -0
  1085. maxframe/tensor/statistics/corrcoef.py +77 -0
  1086. maxframe/tensor/statistics/cov.py +222 -0
  1087. maxframe/tensor/statistics/digitize.py +126 -0
  1088. maxframe/tensor/statistics/histogram.py +520 -0
  1089. maxframe/tensor/statistics/median.py +85 -0
  1090. maxframe/tensor/statistics/percentile.py +175 -0
  1091. maxframe/tensor/statistics/ptp.py +89 -0
  1092. maxframe/tensor/statistics/quantile.py +290 -0
  1093. maxframe/tensor/ufunc/__init__.py +24 -0
  1094. maxframe/tensor/ufunc/ufunc.py +198 -0
  1095. maxframe/tensor/utils.py +719 -0
  1096. maxframe/tests/__init__.py +13 -0
  1097. maxframe/tests/test_protocol.py +178 -0
  1098. maxframe/tests/test_udf.py +61 -0
  1099. maxframe/tests/test_utils.py +627 -0
  1100. maxframe/tests/utils.py +245 -0
  1101. maxframe/typing_.py +42 -0
  1102. maxframe/udf.py +435 -0
  1103. maxframe/utils.py +1774 -0
  1104. maxframe-2.4.0rc1.dist-info/METADATA +109 -0
  1105. maxframe-2.4.0rc1.dist-info/RECORD +1122 -0
  1106. maxframe-2.4.0rc1.dist-info/WHEEL +5 -0
  1107. maxframe-2.4.0rc1.dist-info/top_level.txt +3 -0
  1108. maxframe_client/__init__.py +16 -0
  1109. maxframe_client/clients/__init__.py +13 -0
  1110. maxframe_client/clients/framedriver.py +137 -0
  1111. maxframe_client/conftest.py +15 -0
  1112. maxframe_client/fetcher.py +411 -0
  1113. maxframe_client/session/__init__.py +22 -0
  1114. maxframe_client/session/consts.py +39 -0
  1115. maxframe_client/session/graph.py +125 -0
  1116. maxframe_client/session/odps.py +813 -0
  1117. maxframe_client/session/task.py +329 -0
  1118. maxframe_client/session/tests/__init__.py +13 -0
  1119. maxframe_client/session/tests/test_task.py +115 -0
  1120. maxframe_client/tests/__init__.py +13 -0
  1121. maxframe_client/tests/test_fetcher.py +215 -0
  1122. maxframe_client/tests/test_session.py +409 -0
maxframe/session.py ADDED
@@ -0,0 +1,1250 @@
1
+ # Copyright 1999-2025 Alibaba Group Holding Ltd.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ import asyncio
16
+ import concurrent.futures
17
+ import logging
18
+ import random
19
+ import string
20
+ import threading
21
+ import warnings
22
+ from abc import ABC, ABCMeta, abstractmethod
23
+ from concurrent.futures import Future as SyncFuture
24
+ from dataclasses import dataclass
25
+ from functools import wraps
26
+ from typing import Callable, Coroutine, Dict, List, Optional, Tuple, Type, Union
27
+ from urllib.parse import urlparse
28
+ from weakref import ref
29
+
30
+ from odps import ODPS
31
+
32
+ from .config import options
33
+ from .core import TileableType
34
+ from .lib.aio import Isolation, get_isolation, new_isolation, stop_isolation
35
+ from .typing_ import ClientType
36
+ from .utils import classproperty, implements, relay_future
37
+
38
+ logger = logging.getLogger(__name__)
39
+
40
+
41
+ @dataclass
42
+ class Progress:
43
+ value: float = 0.0
44
+
45
+
46
+ @dataclass
47
+ class Profiling:
48
+ result: dict = None
49
+
50
+
51
+ class ExecutionInfo:
52
+ def __init__(
53
+ self,
54
+ aio_task: asyncio.Task,
55
+ progress: Progress,
56
+ profiling: Profiling,
57
+ loop: asyncio.AbstractEventLoop,
58
+ to_execute_tileables: List[TileableType],
59
+ ):
60
+ self._aio_task = aio_task
61
+ self._progress = progress
62
+ self._profiling = profiling
63
+ self._loop = loop
64
+ self._to_execute_tileables = [ref(t) for t in to_execute_tileables]
65
+
66
+ self._future_local = threading.local()
67
+
68
+ def _ensure_future(self):
69
+ try:
70
+ self._future_local.future
71
+ except AttributeError:
72
+
73
+ async def wait():
74
+ return await self._aio_task
75
+
76
+ self._future_local.future = fut = asyncio.run_coroutine_threadsafe(
77
+ wait(), self._loop
78
+ )
79
+ self._future_local.aio_future = asyncio.wrap_future(fut)
80
+
81
+ @property
82
+ def loop(self):
83
+ return self._loop
84
+
85
+ @property
86
+ def aio_task(self):
87
+ return self._aio_task
88
+
89
+ def progress(self) -> float:
90
+ return self._progress.value
91
+
92
+ @property
93
+ def to_execute_tileables(self) -> List[TileableType]:
94
+ return [t() for t in self._to_execute_tileables]
95
+
96
+ def profiling_result(self) -> dict:
97
+ return self._profiling.result
98
+
99
+ def result(self, timeout=None):
100
+ self._ensure_future()
101
+ return self._future_local.future.result(timeout=timeout)
102
+
103
+ def cancel(self):
104
+ self._aio_task.cancel()
105
+
106
+ def __getattr__(self, attr):
107
+ self._ensure_future()
108
+ return getattr(self._future_local.aio_future, attr)
109
+
110
+ def __await__(self):
111
+ self._ensure_future()
112
+ return self._future_local.aio_future.__await__()
113
+
114
+ def get_future(self):
115
+ self._ensure_future()
116
+ return self._future_local.aio_future
117
+
118
+
119
+ warning_msg = """
120
+ No session found, local session \
121
+ will be created in background, \
122
+ it may take a while before execution. \
123
+ If you want to new a local session by yourself, \
124
+ run code below:
125
+
126
+ ```
127
+ import maxframe
128
+
129
+ maxframe.new_session()
130
+ ```
131
+ """
132
+
133
+
134
+ class AbstractSession(ABC):
135
+ name = None
136
+ _default = None
137
+ _lock = threading.Lock()
138
+
139
+ def __init__(self, address: str, session_id: str):
140
+ self._address = address
141
+ self._session_id = session_id
142
+ self._closed = False
143
+
144
+ @property
145
+ def address(self):
146
+ return self._address
147
+
148
+ @property
149
+ def session_id(self):
150
+ return self._session_id
151
+
152
+ @property
153
+ def closed(self) -> bool:
154
+ return self._closed
155
+
156
+ def __eq__(self, other):
157
+ return (
158
+ isinstance(other, AbstractSession)
159
+ and self._address == other.address
160
+ and self._session_id == other.session_id
161
+ )
162
+
163
+ def __hash__(self):
164
+ return hash((AbstractSession, self._address, self._session_id))
165
+
166
+ def as_default(self) -> "AbstractSession":
167
+ """
168
+ Mark current session as default session.
169
+ """
170
+ AbstractSession._default = self
171
+ return self
172
+
173
+ @classmethod
174
+ def reset_default(cls):
175
+ AbstractSession._default = None
176
+
177
+ @classproperty
178
+ def default(self):
179
+ return AbstractSession._default
180
+
181
+
182
+ class AbstractAsyncSession(AbstractSession, metaclass=ABCMeta):
183
+ @classmethod
184
+ @abstractmethod
185
+ async def init(
186
+ cls, address: str, session_id: str, new: bool = True, **kwargs
187
+ ) -> "AbstractSession":
188
+ """
189
+ Init a new session.
190
+
191
+ Parameters
192
+ ----------
193
+ address : str
194
+ Address.
195
+ session_id : str
196
+ Session ID.
197
+ new : bool
198
+ New a session.
199
+ kwargs
200
+
201
+ Returns
202
+ -------
203
+ session
204
+ """
205
+
206
+ async def destroy(self):
207
+ """
208
+ Destroy a session.
209
+ """
210
+ self.reset_default()
211
+ self._closed = True
212
+
213
+ @abstractmethod
214
+ async def execute(self, *tileables, **kwargs) -> ExecutionInfo:
215
+ """
216
+ Execute tileables.
217
+
218
+ Parameters
219
+ ----------
220
+ tileables
221
+ Tileables.
222
+ kwargs
223
+ """
224
+
225
+ @abstractmethod
226
+ async def fetch(self, *tileables, **kwargs) -> list:
227
+ """
228
+ Fetch tileables' data.
229
+
230
+ Parameters
231
+ ----------
232
+ tileables
233
+ Tileables.
234
+
235
+ Returns
236
+ -------
237
+ data
238
+ """
239
+
240
+ @abstractmethod
241
+ async def decref(self, *tileables_keys):
242
+ """
243
+ Decref tileables.
244
+
245
+ Parameters
246
+ ----------
247
+ tileables_keys : list
248
+ Tileables' keys
249
+ """
250
+
251
+ @abstractmethod
252
+ async def _get_ref_counts(self) -> Dict[str, int]:
253
+ """
254
+ Get all ref counts
255
+
256
+ Returns
257
+ -------
258
+ ref_counts
259
+ """
260
+
261
+ @abstractmethod
262
+ async def fetch_tileable_op_logs(
263
+ self,
264
+ tileable_op_key: str,
265
+ offsets: Union[Dict[str, List[int]], str, int],
266
+ sizes: Union[Dict[str, List[int]], str, int],
267
+ ) -> Dict:
268
+ """
269
+ Fetch logs given tileable op key.
270
+
271
+ Parameters
272
+ ----------
273
+ tileable_op_key : str
274
+ Tileable op key.
275
+ offsets
276
+ Chunk op key to offsets.
277
+ sizes
278
+ Chunk op key to sizes.
279
+
280
+ Returns
281
+ -------
282
+ chunk_key_to_logs
283
+ """
284
+
285
+ @abstractmethod
286
+ async def get_total_n_cpu(self):
287
+ """
288
+ Get number of cluster cpus.
289
+
290
+ Returns
291
+ -------
292
+ number_of_cpu: int
293
+ """
294
+
295
+ @abstractmethod
296
+ async def get_cluster_versions(self) -> List[str]:
297
+ """
298
+ Get versions used in current MaxFrame cluster
299
+
300
+ Returns
301
+ -------
302
+ version_list : list
303
+ List of versions
304
+ """
305
+
306
+ @abstractmethod
307
+ async def get_web_endpoint(self) -> Optional[str]:
308
+ """
309
+ Get web endpoint of current session
310
+
311
+ Returns
312
+ -------
313
+ web_endpoint : str
314
+ web endpoint
315
+ """
316
+
317
+ async def stop_server(self):
318
+ """
319
+ Stop server.
320
+ """
321
+
322
+ @abstractmethod
323
+ async def get_logview_address(self, hours=None) -> Optional[str]:
324
+ """
325
+ Get Logview address
326
+ Returns
327
+ -------
328
+ Logview address
329
+ """
330
+
331
+ def close(self):
332
+ asyncio.run(self.destroy())
333
+
334
+ def __enter__(self):
335
+ return self
336
+
337
+ def __exit__(self, *_):
338
+ self.close()
339
+
340
+
341
+ class AbstractSyncSession(AbstractSession, metaclass=ABCMeta):
342
+ @classmethod
343
+ @abstractmethod
344
+ def init(
345
+ cls,
346
+ address: str,
347
+ session_id: str,
348
+ backend: str = "maxframe",
349
+ new: bool = True,
350
+ **kwargs,
351
+ ) -> "AbstractSession":
352
+ """
353
+ Init a new session.
354
+
355
+ Parameters
356
+ ----------
357
+ address : str
358
+ Address.
359
+ session_id : str
360
+ Session ID.
361
+ backend : str
362
+ Backend.
363
+ new : bool
364
+ New a session.
365
+ kwargs
366
+
367
+ Returns
368
+ -------
369
+ session
370
+ """
371
+
372
+ @abstractmethod
373
+ def execute(
374
+ self, tileable, *tileables, show_progress: Union[bool, str] = None, **kwargs
375
+ ) -> Union[List[TileableType], TileableType, ExecutionInfo]:
376
+ """
377
+ Execute tileables.
378
+
379
+ Parameters
380
+ ----------
381
+ tileable
382
+ Tileable.
383
+ tileables
384
+ Tileables.
385
+ show_progress
386
+ If show progress.
387
+ kwargs
388
+
389
+ Returns
390
+ -------
391
+ result
392
+ """
393
+
394
+ @abstractmethod
395
+ def fetch(self, *tileables, **kwargs) -> list:
396
+ """
397
+ Fetch tileables.
398
+
399
+ Parameters
400
+ ----------
401
+ tileables
402
+ Tileables.
403
+ kwargs
404
+
405
+ Returns
406
+ -------
407
+ fetched_data : list
408
+ """
409
+
410
+ @abstractmethod
411
+ def fetch_infos(self, *tileables, fields, **kwargs) -> list:
412
+ """
413
+ Fetch infos of tileables.
414
+
415
+ Parameters
416
+ ----------
417
+ tileables
418
+ Tileables.
419
+ fields
420
+ List of fields
421
+ kwargs
422
+
423
+ Returns
424
+ -------
425
+ fetched_infos : list
426
+ """
427
+
428
+ @abstractmethod
429
+ def decref(self, *tileables_keys):
430
+ """
431
+ Decref tileables.
432
+
433
+ Parameters
434
+ ----------
435
+ tileables_keys : list
436
+ Tileables' keys
437
+ """
438
+
439
+ @abstractmethod
440
+ def _get_ref_counts(self) -> Dict[str, int]:
441
+ """
442
+ Get all ref counts
443
+
444
+ Returns
445
+ -------
446
+ ref_counts
447
+ """
448
+
449
+ @abstractmethod
450
+ def fetch_tileable_op_logs(
451
+ self,
452
+ tileable_op_key: str,
453
+ offsets: Union[Dict[str, List[int]], str, int],
454
+ sizes: Union[Dict[str, List[int]], str, int],
455
+ ) -> Dict:
456
+ """
457
+ Fetch logs given tileable op key.
458
+
459
+ Parameters
460
+ ----------
461
+ tileable_op_key : str
462
+ Tileable op key.
463
+ offsets
464
+ Chunk op key to offsets.
465
+ sizes
466
+ Chunk op key to sizes.
467
+
468
+ Returns
469
+ -------
470
+ chunk_key_to_logs
471
+ """
472
+
473
+ @abstractmethod
474
+ def get_total_n_cpu(self):
475
+ """
476
+ Get number of cluster cpus.
477
+
478
+ Returns
479
+ -------
480
+ number_of_cpu: int
481
+ """
482
+
483
+ @abstractmethod
484
+ def get_cluster_versions(self) -> List[str]:
485
+ """
486
+ Get versions used in current MaxFrame cluster
487
+
488
+ Returns
489
+ -------
490
+ version_list : list
491
+ List of versions
492
+ """
493
+
494
+ @abstractmethod
495
+ def get_web_endpoint(self) -> Optional[str]:
496
+ """
497
+ Get web endpoint of current session
498
+
499
+ Returns
500
+ -------
501
+ web_endpoint : str
502
+ web endpoint
503
+ """
504
+
505
+ def fetch_log(
506
+ self,
507
+ tileables: List[TileableType],
508
+ offsets: List[int] = None,
509
+ sizes: List[int] = None,
510
+ ):
511
+ from .core.custom_log import fetch
512
+
513
+ return fetch(tileables, self, offsets=offsets, sizes=sizes)
514
+
515
+ @abstractmethod
516
+ def get_logview_address(self, hours=None) -> Optional[str]:
517
+ """
518
+ Get logview address
519
+ Returns
520
+ -------
521
+ logview address
522
+ """
523
+
524
+
525
+ def _delegate_to_isolated_session(func: Union[Callable, Coroutine]):
526
+ if asyncio.iscoroutinefunction(func):
527
+
528
+ @wraps(func)
529
+ async def inner(session: "AsyncSession", *args, **kwargs):
530
+ coro = getattr(session._isolated_session, func.__name__)(*args, **kwargs)
531
+ fut = asyncio.run_coroutine_threadsafe(coro, session._loop)
532
+ return await asyncio.wrap_future(fut)
533
+
534
+ else:
535
+
536
+ @wraps(func)
537
+ def inner(session: "SyncSession", *args, **kwargs):
538
+ coro = getattr(session._isolated_session, func.__name__)(*args, **kwargs)
539
+ fut = asyncio.run_coroutine_threadsafe(coro, session._loop)
540
+ return fut.result()
541
+
542
+ return inner
543
+
544
+
545
+ _schemes_to_isolated_session_cls: Dict[
546
+ Optional[str], Type["IsolatedAsyncSession"]
547
+ ] = dict()
548
+
549
+
550
+ class IsolatedAsyncSession(AbstractAsyncSession):
551
+ """
552
+ Abstract class of isolated session which can be registered
553
+ to different schemes
554
+ """
555
+
556
+ schemes = None
557
+
558
+ @classmethod
559
+ def register_schemes(cls, overwrite: bool = True):
560
+ assert isinstance(cls.schemes, list)
561
+ for scheme in cls.schemes:
562
+ if overwrite or scheme not in _schemes_to_isolated_session_cls:
563
+ _schemes_to_isolated_session_cls[scheme] = cls
564
+
565
+
566
+ def _get_isolated_session_cls(address: str) -> Type[IsolatedAsyncSession]:
567
+ if ":/" not in address:
568
+ url_scheme = None
569
+ else:
570
+ url_scheme = urlparse(address).scheme or None
571
+ scheme_cls = _schemes_to_isolated_session_cls.get(url_scheme)
572
+ if scheme_cls is None:
573
+ raise ValueError(f"Address scheme {url_scheme} not supported")
574
+ return scheme_cls
575
+
576
+
577
+ class AsyncSession(AbstractAsyncSession):
578
+ def __init__(
579
+ self,
580
+ address: str,
581
+ session_id: str,
582
+ isolated_session: IsolatedAsyncSession,
583
+ isolation: Isolation,
584
+ ):
585
+ super().__init__(address, session_id)
586
+
587
+ self._isolated_session = _get_isolated_session(isolated_session)
588
+ self._isolation = isolation
589
+ self._loop = isolation.loop
590
+
591
+ @classmethod
592
+ def from_isolated_session(
593
+ cls, isolated_session: IsolatedAsyncSession
594
+ ) -> "AsyncSession":
595
+ return cls(
596
+ isolated_session.address,
597
+ isolated_session.session_id,
598
+ isolated_session,
599
+ get_isolation(),
600
+ )
601
+
602
+ @property
603
+ def client(self):
604
+ return self._isolated_session.client
605
+
606
+ @client.setter
607
+ def client(self, client: ClientType):
608
+ self._isolated_session.client = client
609
+
610
+ @classmethod
611
+ @implements(AbstractAsyncSession.init)
612
+ async def init(
613
+ cls,
614
+ address: str,
615
+ session_id: str,
616
+ backend: str = "maxframe",
617
+ new: bool = True,
618
+ **kwargs,
619
+ ) -> "AbstractSession":
620
+ isolation = ensure_isolation_created(kwargs)
621
+ coro = _get_isolated_session_cls(address).init(
622
+ address, session_id, backend, new=new, **kwargs
623
+ )
624
+ fut = asyncio.run_coroutine_threadsafe(coro, isolation.loop)
625
+ isolated_session = await asyncio.wrap_future(fut)
626
+ return AsyncSession(address, session_id, isolated_session, isolation)
627
+
628
+ def as_default(self) -> AbstractSession:
629
+ AbstractSession._default = self._isolated_session
630
+ return self
631
+
632
+ @implements(AbstractAsyncSession.destroy)
633
+ async def destroy(self):
634
+ coro = self._isolated_session.destroy()
635
+ await asyncio.wrap_future(asyncio.run_coroutine_threadsafe(coro, self._loop))
636
+ self.reset_default()
637
+
638
+ @implements(AbstractAsyncSession.execute)
639
+ @_delegate_to_isolated_session
640
+ async def execute(self, *tileables, **kwargs) -> ExecutionInfo:
641
+ pass # pragma: no cover
642
+
643
+ @implements(AbstractAsyncSession.fetch)
644
+ async def fetch(self, *tileables, **kwargs) -> list:
645
+ coro = _fetch(*tileables, session=self._isolated_session, **kwargs)
646
+ return await asyncio.wrap_future(
647
+ asyncio.run_coroutine_threadsafe(coro, self._loop)
648
+ )
649
+
650
+ @implements(AbstractAsyncSession._get_ref_counts)
651
+ @_delegate_to_isolated_session
652
+ async def _get_ref_counts(self) -> Dict[str, int]:
653
+ pass # pragma: no cover
654
+
655
+ @implements(AbstractAsyncSession.fetch_tileable_op_logs)
656
+ @_delegate_to_isolated_session
657
+ async def fetch_tileable_op_logs(
658
+ self,
659
+ tileable_op_key: str,
660
+ offsets: Union[Dict[str, List[int]], str, int],
661
+ sizes: Union[Dict[str, List[int]], str, int],
662
+ ) -> Dict:
663
+ pass # pragma: no cover
664
+
665
+ @implements(AbstractAsyncSession.get_total_n_cpu)
666
+ @_delegate_to_isolated_session
667
+ async def get_total_n_cpu(self):
668
+ pass # pragma: no cover
669
+
670
+ @implements(AbstractAsyncSession.get_cluster_versions)
671
+ @_delegate_to_isolated_session
672
+ async def get_cluster_versions(self) -> List[str]:
673
+ pass # pragma: no cover
674
+
675
+ @implements(AbstractAsyncSession.get_web_endpoint)
676
+ @_delegate_to_isolated_session
677
+ async def get_web_endpoint(self) -> Optional[str]:
678
+ pass # pragma: no cover
679
+
680
+ @implements(AbstractAsyncSession.stop_server)
681
+ async def stop_server(self):
682
+ coro = self._isolated_session.stop_server()
683
+ await asyncio.wrap_future(asyncio.run_coroutine_threadsafe(coro, self._loop))
684
+ stop_isolation()
685
+
686
+ @implements(AbstractAsyncSession.get_logview_address)
687
+ @_delegate_to_isolated_session
688
+ async def get_logview_address(self, hours=None) -> Optional[str]:
689
+ pass # pragma: no cover
690
+
691
+
692
+ class ProgressBar:
693
+ def __init__(self, show_progress):
694
+ if not show_progress:
695
+ self.progress_bar = None
696
+ else:
697
+ try:
698
+ from tqdm.auto import tqdm
699
+ except ImportError:
700
+ if show_progress != "auto": # pragma: no cover
701
+ raise ImportError("tqdm is required to show progress")
702
+ else:
703
+ self.progress_bar = None
704
+ else:
705
+ self.progress_bar = tqdm(
706
+ total=100,
707
+ bar_format="{l_bar}{bar}| {n:6.2f}/{total_fmt} "
708
+ "[{elapsed}<{remaining}, {rate_fmt}{postfix}]",
709
+ )
710
+
711
+ self.last_progress: float = 0.0
712
+
713
+ @property
714
+ def show_progress(self) -> bool:
715
+ return self.progress_bar is not None
716
+
717
+ def __enter__(self):
718
+ self.progress_bar.__enter__()
719
+
720
+ def __exit__(self, *_):
721
+ self.progress_bar.__exit__(*_)
722
+
723
+ def update(self, progress: float):
724
+ progress = min(progress, 100)
725
+ last_progress = self.last_progress
726
+ if self.progress_bar:
727
+ incr = max(progress - last_progress, 0)
728
+ self.progress_bar.update(incr)
729
+ self.last_progress = max(last_progress, progress)
730
+
731
+
732
+ class SyncSession(AbstractSyncSession):
733
+ _execution_pool = concurrent.futures.ThreadPoolExecutor(1)
734
+
735
+ def __init__(
736
+ self,
737
+ address: str,
738
+ session_id: str,
739
+ isolated_session: IsolatedAsyncSession,
740
+ isolation: Isolation,
741
+ ):
742
+ super().__init__(address, session_id)
743
+
744
+ self._isolated_session = _get_isolated_session(isolated_session)
745
+ self._isolation = isolation
746
+ self._loop = isolation.loop
747
+
748
+ @classmethod
749
+ def from_isolated_session(
750
+ cls, isolated_session: IsolatedAsyncSession
751
+ ) -> "SyncSession":
752
+ return cls(
753
+ isolated_session.address,
754
+ isolated_session.session_id,
755
+ isolated_session,
756
+ get_isolation(),
757
+ )
758
+
759
+ @classmethod
760
+ def init(
761
+ cls,
762
+ address: str,
763
+ session_id: str,
764
+ backend: str = "maxframe",
765
+ new: bool = True,
766
+ **kwargs,
767
+ ) -> "AbstractSession":
768
+ isolation = ensure_isolation_created(kwargs)
769
+ coro = _get_isolated_session_cls(address).init(
770
+ address, session_id, backend, new=new, **kwargs
771
+ )
772
+ fut = asyncio.run_coroutine_threadsafe(coro, isolation.loop)
773
+ isolated_session = fut.result()
774
+ return SyncSession(address, session_id, isolated_session, isolation)
775
+
776
+ def as_default(self) -> AbstractSession:
777
+ AbstractSession._default = self._isolated_session
778
+ return self
779
+
780
+ @property
781
+ def _session(self):
782
+ return self._isolated_session
783
+
784
+ @property
785
+ def session_id(self):
786
+ try:
787
+ return self._session.session_id or self._session_id
788
+ except AttributeError:
789
+ return self._session_id
790
+
791
+ def _new_cancel_event(self):
792
+ async def new_event():
793
+ return asyncio.Event()
794
+
795
+ return asyncio.run_coroutine_threadsafe(new_event(), self._loop).result()
796
+
797
+ @implements(AbstractSyncSession.execute)
798
+ def execute(
799
+ self,
800
+ tileable,
801
+ *tileables,
802
+ show_progress: Union[bool, str] = None,
803
+ warn_duplicated_execution: bool = None,
804
+ **kwargs,
805
+ ) -> Union[List[TileableType], TileableType, ExecutionInfo]:
806
+ wait = kwargs.get("wait", True)
807
+ # add an intermediate future for cancel tests
808
+ result_future = kwargs.pop("result_future", None) or SyncFuture()
809
+
810
+ if show_progress is None:
811
+ show_progress = options.show_progress
812
+ if warn_duplicated_execution is None:
813
+ warn_duplicated_execution = options.warn_duplicated_execution
814
+ to_execute_tileables = []
815
+ for t in (tileable,) + tileables:
816
+ to_execute_tileables.extend(t.op.outputs)
817
+
818
+ cancelled = kwargs.get("cancelled")
819
+ if cancelled is None:
820
+ cancelled = kwargs["cancelled"] = self._new_cancel_event()
821
+
822
+ coro = _execute(
823
+ *set(to_execute_tileables),
824
+ session=self._isolated_session,
825
+ show_progress=show_progress,
826
+ warn_duplicated_execution=warn_duplicated_execution,
827
+ **kwargs,
828
+ )
829
+ fut = asyncio.run_coroutine_threadsafe(coro, self._loop)
830
+ relay_future(result_future, fut)
831
+ try:
832
+ execution_info: ExecutionInfo = result_future.result(
833
+ timeout=self._isolated_session.timeout
834
+ )
835
+ except KeyboardInterrupt: # pragma: no cover
836
+ logger.warning("Cancelling running task")
837
+ cancelled.set()
838
+ fut.result()
839
+ logger.warning("Cancel finished")
840
+
841
+ if wait:
842
+ return tileable if len(tileables) == 0 else [tileable] + list(tileables)
843
+ else:
844
+ aio_task = execution_info.aio_task
845
+
846
+ async def run():
847
+ await aio_task
848
+ return tileable if len(tileables) == 0 else [tileable] + list(tileables)
849
+
850
+ async def driver():
851
+ return asyncio.create_task(run())
852
+
853
+ new_aio_task = asyncio.run_coroutine_threadsafe(
854
+ driver(), execution_info.loop
855
+ ).result()
856
+ new_execution_info = ExecutionInfo(
857
+ new_aio_task,
858
+ execution_info._progress,
859
+ execution_info._profiling,
860
+ execution_info.loop,
861
+ to_execute_tileables,
862
+ )
863
+ return new_execution_info
864
+
865
+ @implements(AbstractSyncSession.fetch)
866
+ def fetch(self, *tileables, **kwargs) -> list:
867
+ coro = _fetch(*tileables, session=self._isolated_session, **kwargs)
868
+ return asyncio.run_coroutine_threadsafe(coro, self._loop).result()
869
+
870
+ @implements(AbstractSyncSession.fetch_infos)
871
+ def fetch_infos(self, *tileables, fields, **kwargs) -> list:
872
+ coro = _fetch_infos(
873
+ *tileables, fields=fields, session=self._isolated_session, **kwargs
874
+ )
875
+ return asyncio.run_coroutine_threadsafe(coro, self._loop).result()
876
+
877
+ @implements(AbstractSyncSession.decref)
878
+ def decref(self, *tileable_keys):
879
+ coro = _decref(*tileable_keys, session=self._isolated_session)
880
+ return asyncio.run_coroutine_threadsafe(coro, self._loop).result()
881
+
882
+ @implements(AbstractSyncSession._get_ref_counts)
883
+ @_delegate_to_isolated_session
884
+ def _get_ref_counts(self) -> Dict[str, int]:
885
+ pass # pragma: no cover
886
+
887
+ @implements(AbstractSyncSession.fetch_tileable_op_logs)
888
+ @_delegate_to_isolated_session
889
+ def fetch_tileable_op_logs(
890
+ self,
891
+ tileable_op_key: str,
892
+ offsets: Union[Dict[str, List[int]], str, int],
893
+ sizes: Union[Dict[str, List[int]], str, int],
894
+ ) -> Dict:
895
+ pass # pragma: no cover
896
+
897
+ @implements(AbstractSyncSession.get_total_n_cpu)
898
+ @_delegate_to_isolated_session
899
+ def get_total_n_cpu(self):
900
+ pass # pragma: no cover
901
+
902
+ @implements(AbstractSyncSession.get_web_endpoint)
903
+ @_delegate_to_isolated_session
904
+ def get_web_endpoint(self) -> Optional[str]:
905
+ pass # pragma: no cover
906
+
907
+ @implements(AbstractSyncSession.get_cluster_versions)
908
+ @_delegate_to_isolated_session
909
+ def get_cluster_versions(self) -> List[str]:
910
+ pass # pragma: no cover
911
+
912
+ @implements(AbstractSyncSession.get_logview_address)
913
+ @_delegate_to_isolated_session
914
+ def get_logview_address(self, hours=None) -> Optional[str]:
915
+ pass # pragma: no cover
916
+
917
+ def destroy(self):
918
+ coro = self._isolated_session.destroy()
919
+ asyncio.run_coroutine_threadsafe(coro, self._loop).result()
920
+ self.reset_default()
921
+
922
+ def stop_server(self, isolation=True):
923
+ try:
924
+ coro = self._isolated_session.stop_server()
925
+ future = asyncio.run_coroutine_threadsafe(coro, self._loop)
926
+ future.result(timeout=5)
927
+ finally:
928
+ self.reset_default()
929
+ if isolation:
930
+ stop_isolation()
931
+
932
+ def close(self):
933
+ self.destroy()
934
+
935
+ def __enter__(self):
936
+ return self
937
+
938
+ def __exit__(self, *_):
939
+ self.close()
940
+
941
+
942
+ async def _execute_with_progress(
943
+ execution_info: ExecutionInfo,
944
+ progress_bar: ProgressBar,
945
+ progress_update_interval: Union[int, float],
946
+ cancelled: asyncio.Event,
947
+ ):
948
+ with progress_bar:
949
+ while not cancelled.is_set():
950
+ done, _pending = await asyncio.wait(
951
+ [execution_info.get_future()], timeout=progress_update_interval
952
+ )
953
+ if not done:
954
+ if not cancelled.is_set() and execution_info.progress() is not None:
955
+ progress_bar.update(execution_info.progress() * 100)
956
+ else:
957
+ # done
958
+ if not cancelled.is_set():
959
+ progress_bar.update(100)
960
+ break
961
+
962
+
963
+ async def _execute(
964
+ *tileables: Tuple[TileableType, ...],
965
+ session: IsolatedAsyncSession = None,
966
+ wait: bool = True,
967
+ show_progress: Union[bool, str] = "auto",
968
+ progress_update_interval: Union[int, float] = 1,
969
+ cancelled: asyncio.Event = None,
970
+ **kwargs,
971
+ ):
972
+ execution_info = await session.execute(*tileables, **kwargs)
973
+
974
+ def _attach_session(future: asyncio.Future):
975
+ if future.exception() is None:
976
+ for t in execution_info.to_execute_tileables:
977
+ t._attach_session(session)
978
+
979
+ execution_info.add_done_callback(_attach_session)
980
+ cancelled = cancelled or asyncio.Event()
981
+
982
+ if wait:
983
+ progress_bar = ProgressBar(show_progress)
984
+ if progress_bar.show_progress:
985
+ await _execute_with_progress(
986
+ execution_info, progress_bar, progress_update_interval, cancelled
987
+ )
988
+ else:
989
+ exec_task = asyncio.ensure_future(execution_info)
990
+ cancel_task = asyncio.ensure_future(cancelled.wait())
991
+ await asyncio.wait(
992
+ [exec_task, cancel_task], return_when=asyncio.FIRST_COMPLETED
993
+ )
994
+ if cancelled.is_set():
995
+ execution_info.remove_done_callback(_attach_session)
996
+ execution_info.cancel()
997
+ else:
998
+ # set cancelled to avoid wait task leak
999
+ cancelled.set()
1000
+ await execution_info
1001
+ else:
1002
+ return execution_info
1003
+
1004
+
1005
+ def execute(
1006
+ tileable: TileableType,
1007
+ *tileables: Tuple[TileableType, ...],
1008
+ session: SyncSession = None,
1009
+ wait: bool = True,
1010
+ new_session_kwargs: dict = None,
1011
+ show_progress: Union[bool, str] = None,
1012
+ progress_update_interval=1,
1013
+ **kwargs,
1014
+ ):
1015
+ if isinstance(tileable, (tuple, list)) and len(tileables) == 0:
1016
+ tileable, tileables = tileable[0], tileable[1:]
1017
+ if session is None:
1018
+ session = get_default_or_create(**(new_session_kwargs or dict()))
1019
+ session = _ensure_sync(session)
1020
+ return session.execute(
1021
+ tileable,
1022
+ *tileables,
1023
+ wait=wait,
1024
+ show_progress=show_progress,
1025
+ progress_update_interval=progress_update_interval,
1026
+ **kwargs,
1027
+ )
1028
+
1029
+
1030
+ async def _fetch(
1031
+ tileable: TileableType,
1032
+ *tileables: Tuple[TileableType, ...],
1033
+ session: IsolatedAsyncSession = None,
1034
+ **kwargs,
1035
+ ):
1036
+ if isinstance(tileable, tuple) and len(tileables) == 0:
1037
+ tileable, tileables = tileable[0], tileable[1:]
1038
+ session = _get_isolated_session(session)
1039
+ data = await session.fetch(tileable, *tileables, **kwargs)
1040
+ return data[0] if len(tileables) == 0 else data
1041
+
1042
+
1043
+ async def _fetch_infos(
1044
+ tileable: TileableType,
1045
+ *tileables: Tuple[TileableType, ...],
1046
+ session: IsolatedAsyncSession = None,
1047
+ fields: List[str] = None,
1048
+ **kwargs,
1049
+ ):
1050
+ if isinstance(tileable, tuple) and len(tileables) == 0:
1051
+ tileable, tileables = tileable[0], tileable[1:]
1052
+ session = _get_isolated_session(session)
1053
+ data = await session.fetch_infos(tileable, *tileables, fields=fields, **kwargs)
1054
+ return data[0] if len(tileables) == 0 else data
1055
+
1056
+
1057
+ async def _decref(
1058
+ tileable_key: str,
1059
+ *tileable_keys: Tuple[str, ...],
1060
+ session: IsolatedAsyncSession = None,
1061
+ ):
1062
+ if isinstance(tileable_key, tuple) and len(tileable_keys) == 0:
1063
+ tileable_key, tileable_keys = tileable_key[0], tileable_key[1:]
1064
+ session = _get_isolated_session(session)
1065
+ await session.decref(tileable_key, *tileable_keys)
1066
+
1067
+
1068
+ def fetch(
1069
+ tileable: TileableType,
1070
+ *tileables: Tuple[TileableType],
1071
+ session: SyncSession = None,
1072
+ **kwargs,
1073
+ ):
1074
+ if isinstance(tileable, (tuple, list)) and len(tileables) == 0:
1075
+ tileable, tileables = tileable[0], tileable[1:]
1076
+ if session is None:
1077
+ session = get_default_session()
1078
+ if session is None: # pragma: no cover
1079
+ raise ValueError("No session found")
1080
+
1081
+ session = _ensure_sync(session)
1082
+ return session.fetch(tileable, *tileables, **kwargs)
1083
+
1084
+
1085
+ def fetch_infos(
1086
+ tileable: TileableType,
1087
+ *tileables: Tuple[TileableType],
1088
+ fields: List[str],
1089
+ session: SyncSession = None,
1090
+ **kwargs,
1091
+ ):
1092
+ if isinstance(tileable, tuple) and len(tileables) == 0:
1093
+ tileable, tileables = tileable[0], tileable[1:]
1094
+ if session is None:
1095
+ session = get_default_session()
1096
+ if session is None: # pragma: no cover
1097
+ raise ValueError("No session found")
1098
+ session = _ensure_sync(session)
1099
+ return session.fetch_infos(tileable, *tileables, fields=fields, **kwargs)
1100
+
1101
+
1102
+ def fetch_log(*tileables: TileableType, session: SyncSession = None, **kwargs):
1103
+ if len(tileables) == 1 and isinstance(tileables[0], (list, tuple)):
1104
+ tileables = tileables[0]
1105
+ if session is None:
1106
+ session = get_default_session()
1107
+ if session is None: # pragma: no cover
1108
+ raise ValueError("No session found")
1109
+ session = _ensure_sync(session)
1110
+ return session.fetch_log(list(tileables), **kwargs)
1111
+
1112
+
1113
+ def ensure_isolation_created(kwargs):
1114
+ loop = kwargs.pop("loop", None)
1115
+ use_uvloop = kwargs.pop("use_uvloop", "auto")
1116
+
1117
+ try:
1118
+ return get_isolation()
1119
+ except KeyError:
1120
+ if loop is None:
1121
+ if not use_uvloop:
1122
+ loop = asyncio.new_event_loop()
1123
+ else:
1124
+ try:
1125
+ import uvloop
1126
+
1127
+ loop = uvloop.new_event_loop()
1128
+ except ImportError:
1129
+ if use_uvloop == "auto":
1130
+ loop = asyncio.new_event_loop()
1131
+ else: # pragma: no cover
1132
+ raise
1133
+ return new_isolation(loop=loop)
1134
+
1135
+
1136
+ def _new_session_id():
1137
+ return "".join(
1138
+ random.choice(string.ascii_letters + string.digits) for _ in range(24)
1139
+ )
1140
+
1141
+
1142
+ async def _new_session(
1143
+ address: str,
1144
+ session_id: str = None,
1145
+ backend: str = "maxframe",
1146
+ default: bool = False,
1147
+ **kwargs,
1148
+ ) -> AbstractSession:
1149
+ if session_id is None:
1150
+ session_id = _new_session_id()
1151
+
1152
+ session = await AsyncSession.init(
1153
+ address, session_id=session_id, backend=backend, new=True, **kwargs
1154
+ )
1155
+ if default:
1156
+ session.as_default()
1157
+ return session
1158
+
1159
+
1160
+ def new_session(
1161
+ address: Union[str, ODPS] = None,
1162
+ session_id: str = None,
1163
+ backend: str = "maxframe",
1164
+ default: bool = True,
1165
+ new: bool = True,
1166
+ odps_entry: Optional[ODPS] = None,
1167
+ **kwargs,
1168
+ ) -> AbstractSession:
1169
+ from maxframe_client.session import register_session_schemes
1170
+
1171
+ register_session_schemes()
1172
+
1173
+ if isinstance(address, ODPS):
1174
+ address, odps_entry = None, address
1175
+
1176
+ # load third party extensions.
1177
+ ensure_isolation_created(kwargs)
1178
+
1179
+ odps_entry = odps_entry or ODPS.from_global() or ODPS.from_environments()
1180
+ if address is None:
1181
+ from maxframe_client.session.consts import ODPS_SESSION_INSECURE_SCHEME
1182
+
1183
+ address = f"{ODPS_SESSION_INSECURE_SCHEME}://"
1184
+
1185
+ if session_id is None:
1186
+ session_id = _new_session_id()
1187
+
1188
+ session = SyncSession.init(
1189
+ address,
1190
+ session_id=session_id,
1191
+ backend=backend,
1192
+ new=new,
1193
+ odps_entry=odps_entry,
1194
+ **kwargs,
1195
+ )
1196
+ if default:
1197
+ session.as_default()
1198
+ return session
1199
+
1200
+
1201
+ def get_default_session() -> Optional[SyncSession]:
1202
+ if AbstractSession.default is None:
1203
+ return
1204
+ return SyncSession.from_isolated_session(AbstractSession.default)
1205
+
1206
+
1207
+ def clear_default_session():
1208
+ AbstractSession.reset_default()
1209
+
1210
+
1211
+ def get_default_async_session() -> Optional[AsyncSession]:
1212
+ if AbstractSession.default is None:
1213
+ return
1214
+ return AsyncSession.from_isolated_session(AbstractSession.default)
1215
+
1216
+
1217
+ def get_default_or_create(**kwargs):
1218
+ with AbstractSession._lock:
1219
+ session = AbstractSession.default
1220
+ if session is None:
1221
+ # no session attached, try to create one
1222
+ warnings.warn(warning_msg)
1223
+ odps_entry = (
1224
+ kwargs.pop("odps_entry", None)
1225
+ or ODPS.from_global()
1226
+ or ODPS.from_environments()
1227
+ )
1228
+ session = new_session(odps_entry=odps_entry, **kwargs)
1229
+ session.as_default()
1230
+ if isinstance(session, IsolatedAsyncSession):
1231
+ session = SyncSession.from_isolated_session(session)
1232
+ return _ensure_sync(session)
1233
+
1234
+
1235
+ def stop_server():
1236
+ if AbstractSession.default:
1237
+ SyncSession.from_isolated_session(AbstractSession.default).stop_server()
1238
+
1239
+
1240
+ def _get_isolated_session(session: AbstractSession) -> IsolatedAsyncSession:
1241
+ if hasattr(session, "_isolated_session"):
1242
+ return session._isolated_session
1243
+ return session
1244
+
1245
+
1246
+ def _ensure_sync(session: AbstractSession) -> SyncSession:
1247
+ if isinstance(session, SyncSession):
1248
+ return session
1249
+ isolated_session = _get_isolated_session(session)
1250
+ return SyncSession.from_isolated_session(isolated_session)