maxframe 0.1.0b5__cp311-cp311-macosx_11_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of maxframe might be problematic. Click here for more details.

Files changed (647) hide show
  1. maxframe/__init__.py +32 -0
  2. maxframe/_utils.cpython-311-darwin.so +0 -0
  3. maxframe/_utils.pxd +33 -0
  4. maxframe/_utils.pyx +547 -0
  5. maxframe/codegen.py +528 -0
  6. maxframe/config/__init__.py +15 -0
  7. maxframe/config/config.py +443 -0
  8. maxframe/config/tests/__init__.py +13 -0
  9. maxframe/config/tests/test_config.py +103 -0
  10. maxframe/config/tests/test_validators.py +34 -0
  11. maxframe/config/validators.py +57 -0
  12. maxframe/conftest.py +139 -0
  13. maxframe/core/__init__.py +65 -0
  14. maxframe/core/base.py +156 -0
  15. maxframe/core/entity/__init__.py +44 -0
  16. maxframe/core/entity/chunks.py +68 -0
  17. maxframe/core/entity/core.py +152 -0
  18. maxframe/core/entity/executable.py +337 -0
  19. maxframe/core/entity/fuse.py +73 -0
  20. maxframe/core/entity/objects.py +100 -0
  21. maxframe/core/entity/output_types.py +90 -0
  22. maxframe/core/entity/tileables.py +438 -0
  23. maxframe/core/entity/utils.py +24 -0
  24. maxframe/core/graph/__init__.py +17 -0
  25. maxframe/core/graph/builder/__init__.py +16 -0
  26. maxframe/core/graph/builder/base.py +86 -0
  27. maxframe/core/graph/builder/chunk.py +430 -0
  28. maxframe/core/graph/builder/tileable.py +34 -0
  29. maxframe/core/graph/builder/utils.py +41 -0
  30. maxframe/core/graph/core.cpython-311-darwin.so +0 -0
  31. maxframe/core/graph/core.pyx +467 -0
  32. maxframe/core/graph/entity.py +171 -0
  33. maxframe/core/graph/tests/__init__.py +13 -0
  34. maxframe/core/graph/tests/test_graph.py +205 -0
  35. maxframe/core/mode.py +96 -0
  36. maxframe/core/operator/__init__.py +34 -0
  37. maxframe/core/operator/base.py +450 -0
  38. maxframe/core/operator/core.py +276 -0
  39. maxframe/core/operator/fetch.py +53 -0
  40. maxframe/core/operator/fuse.py +29 -0
  41. maxframe/core/operator/objects.py +72 -0
  42. maxframe/core/operator/shuffle.py +111 -0
  43. maxframe/core/operator/tests/__init__.py +13 -0
  44. maxframe/core/operator/tests/test_core.py +64 -0
  45. maxframe/core/tests/__init__.py +13 -0
  46. maxframe/core/tests/test_mode.py +75 -0
  47. maxframe/dataframe/__init__.py +81 -0
  48. maxframe/dataframe/arithmetic/__init__.py +359 -0
  49. maxframe/dataframe/arithmetic/abs.py +33 -0
  50. maxframe/dataframe/arithmetic/add.py +60 -0
  51. maxframe/dataframe/arithmetic/arccos.py +28 -0
  52. maxframe/dataframe/arithmetic/arccosh.py +28 -0
  53. maxframe/dataframe/arithmetic/arcsin.py +28 -0
  54. maxframe/dataframe/arithmetic/arcsinh.py +28 -0
  55. maxframe/dataframe/arithmetic/arctan.py +28 -0
  56. maxframe/dataframe/arithmetic/arctanh.py +28 -0
  57. maxframe/dataframe/arithmetic/around.py +152 -0
  58. maxframe/dataframe/arithmetic/bitwise_and.py +46 -0
  59. maxframe/dataframe/arithmetic/bitwise_or.py +50 -0
  60. maxframe/dataframe/arithmetic/bitwise_xor.py +46 -0
  61. maxframe/dataframe/arithmetic/ceil.py +28 -0
  62. maxframe/dataframe/arithmetic/core.py +342 -0
  63. maxframe/dataframe/arithmetic/cos.py +28 -0
  64. maxframe/dataframe/arithmetic/cosh.py +28 -0
  65. maxframe/dataframe/arithmetic/degrees.py +28 -0
  66. maxframe/dataframe/arithmetic/docstring.py +442 -0
  67. maxframe/dataframe/arithmetic/equal.py +56 -0
  68. maxframe/dataframe/arithmetic/exp.py +28 -0
  69. maxframe/dataframe/arithmetic/exp2.py +28 -0
  70. maxframe/dataframe/arithmetic/expm1.py +28 -0
  71. maxframe/dataframe/arithmetic/floor.py +28 -0
  72. maxframe/dataframe/arithmetic/floordiv.py +64 -0
  73. maxframe/dataframe/arithmetic/greater.py +57 -0
  74. maxframe/dataframe/arithmetic/greater_equal.py +57 -0
  75. maxframe/dataframe/arithmetic/invert.py +33 -0
  76. maxframe/dataframe/arithmetic/is_ufuncs.py +62 -0
  77. maxframe/dataframe/arithmetic/less.py +57 -0
  78. maxframe/dataframe/arithmetic/less_equal.py +57 -0
  79. maxframe/dataframe/arithmetic/log.py +28 -0
  80. maxframe/dataframe/arithmetic/log10.py +28 -0
  81. maxframe/dataframe/arithmetic/log2.py +28 -0
  82. maxframe/dataframe/arithmetic/mod.py +60 -0
  83. maxframe/dataframe/arithmetic/multiply.py +60 -0
  84. maxframe/dataframe/arithmetic/negative.py +33 -0
  85. maxframe/dataframe/arithmetic/not_equal.py +56 -0
  86. maxframe/dataframe/arithmetic/power.py +68 -0
  87. maxframe/dataframe/arithmetic/radians.py +28 -0
  88. maxframe/dataframe/arithmetic/sin.py +28 -0
  89. maxframe/dataframe/arithmetic/sinh.py +28 -0
  90. maxframe/dataframe/arithmetic/sqrt.py +28 -0
  91. maxframe/dataframe/arithmetic/subtract.py +64 -0
  92. maxframe/dataframe/arithmetic/tan.py +28 -0
  93. maxframe/dataframe/arithmetic/tanh.py +28 -0
  94. maxframe/dataframe/arithmetic/tests/__init__.py +13 -0
  95. maxframe/dataframe/arithmetic/tests/test_arithmetic.py +695 -0
  96. maxframe/dataframe/arithmetic/truediv.py +64 -0
  97. maxframe/dataframe/arithmetic/trunc.py +28 -0
  98. maxframe/dataframe/arrays.py +864 -0
  99. maxframe/dataframe/core.py +2417 -0
  100. maxframe/dataframe/datasource/__init__.py +15 -0
  101. maxframe/dataframe/datasource/core.py +81 -0
  102. maxframe/dataframe/datasource/dataframe.py +59 -0
  103. maxframe/dataframe/datasource/date_range.py +504 -0
  104. maxframe/dataframe/datasource/from_index.py +54 -0
  105. maxframe/dataframe/datasource/from_records.py +107 -0
  106. maxframe/dataframe/datasource/from_tensor.py +419 -0
  107. maxframe/dataframe/datasource/index.py +117 -0
  108. maxframe/dataframe/datasource/read_csv.py +528 -0
  109. maxframe/dataframe/datasource/read_odps_query.py +299 -0
  110. maxframe/dataframe/datasource/read_odps_table.py +253 -0
  111. maxframe/dataframe/datasource/read_parquet.py +421 -0
  112. maxframe/dataframe/datasource/series.py +55 -0
  113. maxframe/dataframe/datasource/tests/__init__.py +13 -0
  114. maxframe/dataframe/datasource/tests/test_datasource.py +401 -0
  115. maxframe/dataframe/datastore/__init__.py +26 -0
  116. maxframe/dataframe/datastore/core.py +19 -0
  117. maxframe/dataframe/datastore/to_csv.py +227 -0
  118. maxframe/dataframe/datastore/to_odps.py +162 -0
  119. maxframe/dataframe/extensions/__init__.py +41 -0
  120. maxframe/dataframe/extensions/accessor.py +50 -0
  121. maxframe/dataframe/extensions/reshuffle.py +83 -0
  122. maxframe/dataframe/extensions/tests/__init__.py +13 -0
  123. maxframe/dataframe/extensions/tests/test_extensions.py +38 -0
  124. maxframe/dataframe/fetch/__init__.py +15 -0
  125. maxframe/dataframe/fetch/core.py +86 -0
  126. maxframe/dataframe/groupby/__init__.py +82 -0
  127. maxframe/dataframe/groupby/aggregation.py +350 -0
  128. maxframe/dataframe/groupby/apply.py +251 -0
  129. maxframe/dataframe/groupby/core.py +179 -0
  130. maxframe/dataframe/groupby/cum.py +124 -0
  131. maxframe/dataframe/groupby/fill.py +141 -0
  132. maxframe/dataframe/groupby/getitem.py +92 -0
  133. maxframe/dataframe/groupby/head.py +105 -0
  134. maxframe/dataframe/groupby/sample.py +214 -0
  135. maxframe/dataframe/groupby/tests/__init__.py +13 -0
  136. maxframe/dataframe/groupby/tests/test_groupby.py +374 -0
  137. maxframe/dataframe/groupby/transform.py +255 -0
  138. maxframe/dataframe/indexing/__init__.py +84 -0
  139. maxframe/dataframe/indexing/add_prefix_suffix.py +110 -0
  140. maxframe/dataframe/indexing/align.py +349 -0
  141. maxframe/dataframe/indexing/at.py +83 -0
  142. maxframe/dataframe/indexing/getitem.py +204 -0
  143. maxframe/dataframe/indexing/iat.py +37 -0
  144. maxframe/dataframe/indexing/iloc.py +566 -0
  145. maxframe/dataframe/indexing/insert.py +86 -0
  146. maxframe/dataframe/indexing/loc.py +411 -0
  147. maxframe/dataframe/indexing/reindex.py +526 -0
  148. maxframe/dataframe/indexing/rename.py +462 -0
  149. maxframe/dataframe/indexing/rename_axis.py +209 -0
  150. maxframe/dataframe/indexing/reset_index.py +402 -0
  151. maxframe/dataframe/indexing/sample.py +221 -0
  152. maxframe/dataframe/indexing/set_axis.py +194 -0
  153. maxframe/dataframe/indexing/set_index.py +61 -0
  154. maxframe/dataframe/indexing/setitem.py +130 -0
  155. maxframe/dataframe/indexing/tests/__init__.py +13 -0
  156. maxframe/dataframe/indexing/tests/test_indexing.py +488 -0
  157. maxframe/dataframe/indexing/where.py +308 -0
  158. maxframe/dataframe/initializer.py +288 -0
  159. maxframe/dataframe/merge/__init__.py +32 -0
  160. maxframe/dataframe/merge/append.py +121 -0
  161. maxframe/dataframe/merge/concat.py +325 -0
  162. maxframe/dataframe/merge/merge.py +593 -0
  163. maxframe/dataframe/merge/tests/__init__.py +13 -0
  164. maxframe/dataframe/merge/tests/test_merge.py +215 -0
  165. maxframe/dataframe/misc/__init__.py +134 -0
  166. maxframe/dataframe/misc/_duplicate.py +46 -0
  167. maxframe/dataframe/misc/accessor.py +276 -0
  168. maxframe/dataframe/misc/apply.py +692 -0
  169. maxframe/dataframe/misc/astype.py +236 -0
  170. maxframe/dataframe/misc/case_when.py +141 -0
  171. maxframe/dataframe/misc/check_monotonic.py +84 -0
  172. maxframe/dataframe/misc/cut.py +383 -0
  173. maxframe/dataframe/misc/datetimes.py +79 -0
  174. maxframe/dataframe/misc/describe.py +108 -0
  175. maxframe/dataframe/misc/diff.py +210 -0
  176. maxframe/dataframe/misc/drop.py +440 -0
  177. maxframe/dataframe/misc/drop_duplicates.py +248 -0
  178. maxframe/dataframe/misc/duplicated.py +292 -0
  179. maxframe/dataframe/misc/eval.py +728 -0
  180. maxframe/dataframe/misc/explode.py +171 -0
  181. maxframe/dataframe/misc/get_dummies.py +208 -0
  182. maxframe/dataframe/misc/isin.py +217 -0
  183. maxframe/dataframe/misc/map.py +236 -0
  184. maxframe/dataframe/misc/melt.py +162 -0
  185. maxframe/dataframe/misc/memory_usage.py +248 -0
  186. maxframe/dataframe/misc/pct_change.py +150 -0
  187. maxframe/dataframe/misc/pivot_table.py +262 -0
  188. maxframe/dataframe/misc/qcut.py +104 -0
  189. maxframe/dataframe/misc/select_dtypes.py +104 -0
  190. maxframe/dataframe/misc/shift.py +256 -0
  191. maxframe/dataframe/misc/stack.py +238 -0
  192. maxframe/dataframe/misc/string_.py +221 -0
  193. maxframe/dataframe/misc/tests/__init__.py +13 -0
  194. maxframe/dataframe/misc/tests/test_misc.py +468 -0
  195. maxframe/dataframe/misc/to_numeric.py +178 -0
  196. maxframe/dataframe/misc/transform.py +361 -0
  197. maxframe/dataframe/misc/transpose.py +136 -0
  198. maxframe/dataframe/misc/value_counts.py +182 -0
  199. maxframe/dataframe/missing/__init__.py +53 -0
  200. maxframe/dataframe/missing/checkna.py +223 -0
  201. maxframe/dataframe/missing/dropna.py +280 -0
  202. maxframe/dataframe/missing/fillna.py +275 -0
  203. maxframe/dataframe/missing/replace.py +439 -0
  204. maxframe/dataframe/missing/tests/__init__.py +13 -0
  205. maxframe/dataframe/missing/tests/test_missing.py +89 -0
  206. maxframe/dataframe/operators.py +273 -0
  207. maxframe/dataframe/plotting/__init__.py +40 -0
  208. maxframe/dataframe/plotting/core.py +78 -0
  209. maxframe/dataframe/plotting/tests/__init__.py +13 -0
  210. maxframe/dataframe/plotting/tests/test_plotting.py +136 -0
  211. maxframe/dataframe/reduction/__init__.py +107 -0
  212. maxframe/dataframe/reduction/aggregation.py +344 -0
  213. maxframe/dataframe/reduction/all.py +78 -0
  214. maxframe/dataframe/reduction/any.py +78 -0
  215. maxframe/dataframe/reduction/core.py +837 -0
  216. maxframe/dataframe/reduction/count.py +59 -0
  217. maxframe/dataframe/reduction/cummax.py +30 -0
  218. maxframe/dataframe/reduction/cummin.py +30 -0
  219. maxframe/dataframe/reduction/cumprod.py +30 -0
  220. maxframe/dataframe/reduction/cumsum.py +30 -0
  221. maxframe/dataframe/reduction/custom_reduction.py +42 -0
  222. maxframe/dataframe/reduction/kurtosis.py +104 -0
  223. maxframe/dataframe/reduction/max.py +65 -0
  224. maxframe/dataframe/reduction/mean.py +61 -0
  225. maxframe/dataframe/reduction/min.py +65 -0
  226. maxframe/dataframe/reduction/nunique.py +141 -0
  227. maxframe/dataframe/reduction/prod.py +76 -0
  228. maxframe/dataframe/reduction/reduction_size.py +36 -0
  229. maxframe/dataframe/reduction/sem.py +69 -0
  230. maxframe/dataframe/reduction/skew.py +89 -0
  231. maxframe/dataframe/reduction/std.py +53 -0
  232. maxframe/dataframe/reduction/str_concat.py +48 -0
  233. maxframe/dataframe/reduction/sum.py +77 -0
  234. maxframe/dataframe/reduction/tests/__init__.py +13 -0
  235. maxframe/dataframe/reduction/tests/test_reduction.py +486 -0
  236. maxframe/dataframe/reduction/unique.py +90 -0
  237. maxframe/dataframe/reduction/var.py +72 -0
  238. maxframe/dataframe/sort/__init__.py +34 -0
  239. maxframe/dataframe/sort/core.py +36 -0
  240. maxframe/dataframe/sort/sort_index.py +153 -0
  241. maxframe/dataframe/sort/sort_values.py +311 -0
  242. maxframe/dataframe/sort/tests/__init__.py +13 -0
  243. maxframe/dataframe/sort/tests/test_sort.py +81 -0
  244. maxframe/dataframe/statistics/__init__.py +33 -0
  245. maxframe/dataframe/statistics/corr.py +280 -0
  246. maxframe/dataframe/statistics/quantile.py +341 -0
  247. maxframe/dataframe/statistics/tests/__init__.py +13 -0
  248. maxframe/dataframe/statistics/tests/test_statistics.py +82 -0
  249. maxframe/dataframe/tests/__init__.py +13 -0
  250. maxframe/dataframe/tests/test_initializer.py +29 -0
  251. maxframe/dataframe/tseries/__init__.py +13 -0
  252. maxframe/dataframe/tseries/tests/__init__.py +13 -0
  253. maxframe/dataframe/tseries/tests/test_tseries.py +30 -0
  254. maxframe/dataframe/tseries/to_datetime.py +297 -0
  255. maxframe/dataframe/ufunc/__init__.py +27 -0
  256. maxframe/dataframe/ufunc/tensor.py +54 -0
  257. maxframe/dataframe/ufunc/ufunc.py +52 -0
  258. maxframe/dataframe/utils.py +1267 -0
  259. maxframe/dataframe/window/__init__.py +29 -0
  260. maxframe/dataframe/window/aggregation.py +96 -0
  261. maxframe/dataframe/window/core.py +69 -0
  262. maxframe/dataframe/window/ewm.py +249 -0
  263. maxframe/dataframe/window/expanding.py +147 -0
  264. maxframe/dataframe/window/rolling.py +376 -0
  265. maxframe/dataframe/window/tests/__init__.py +13 -0
  266. maxframe/dataframe/window/tests/test_ewm.py +70 -0
  267. maxframe/dataframe/window/tests/test_expanding.py +66 -0
  268. maxframe/dataframe/window/tests/test_rolling.py +57 -0
  269. maxframe/env.py +33 -0
  270. maxframe/errors.py +21 -0
  271. maxframe/extension.py +81 -0
  272. maxframe/learn/__init__.py +17 -0
  273. maxframe/learn/contrib/__init__.py +17 -0
  274. maxframe/learn/contrib/pytorch/__init__.py +16 -0
  275. maxframe/learn/contrib/pytorch/run_function.py +110 -0
  276. maxframe/learn/contrib/pytorch/run_script.py +102 -0
  277. maxframe/learn/contrib/pytorch/tests/__init__.py +13 -0
  278. maxframe/learn/contrib/pytorch/tests/test_pytorch.py +42 -0
  279. maxframe/learn/contrib/utils.py +52 -0
  280. maxframe/learn/contrib/xgboost/__init__.py +26 -0
  281. maxframe/learn/contrib/xgboost/classifier.py +86 -0
  282. maxframe/learn/contrib/xgboost/core.py +156 -0
  283. maxframe/learn/contrib/xgboost/dmatrix.py +150 -0
  284. maxframe/learn/contrib/xgboost/predict.py +138 -0
  285. maxframe/learn/contrib/xgboost/regressor.py +78 -0
  286. maxframe/learn/contrib/xgboost/tests/__init__.py +13 -0
  287. maxframe/learn/contrib/xgboost/tests/test_core.py +43 -0
  288. maxframe/learn/contrib/xgboost/train.py +121 -0
  289. maxframe/learn/utils/__init__.py +15 -0
  290. maxframe/learn/utils/core.py +29 -0
  291. maxframe/lib/__init__.py +15 -0
  292. maxframe/lib/aio/__init__.py +27 -0
  293. maxframe/lib/aio/_runners.py +162 -0
  294. maxframe/lib/aio/_threads.py +35 -0
  295. maxframe/lib/aio/base.py +82 -0
  296. maxframe/lib/aio/file.py +85 -0
  297. maxframe/lib/aio/isolation.py +100 -0
  298. maxframe/lib/aio/lru.py +242 -0
  299. maxframe/lib/aio/parallelism.py +37 -0
  300. maxframe/lib/aio/tests/__init__.py +13 -0
  301. maxframe/lib/aio/tests/test_aio_file.py +55 -0
  302. maxframe/lib/compression.py +55 -0
  303. maxframe/lib/cython/__init__.py +13 -0
  304. maxframe/lib/cython/libcpp.pxd +30 -0
  305. maxframe/lib/filesystem/__init__.py +21 -0
  306. maxframe/lib/filesystem/_glob.py +173 -0
  307. maxframe/lib/filesystem/_oss_lib/__init__.py +13 -0
  308. maxframe/lib/filesystem/_oss_lib/common.py +198 -0
  309. maxframe/lib/filesystem/_oss_lib/glob.py +147 -0
  310. maxframe/lib/filesystem/_oss_lib/handle.py +156 -0
  311. maxframe/lib/filesystem/arrow.py +236 -0
  312. maxframe/lib/filesystem/base.py +263 -0
  313. maxframe/lib/filesystem/core.py +95 -0
  314. maxframe/lib/filesystem/fsmap.py +164 -0
  315. maxframe/lib/filesystem/hdfs.py +31 -0
  316. maxframe/lib/filesystem/local.py +112 -0
  317. maxframe/lib/filesystem/oss.py +157 -0
  318. maxframe/lib/filesystem/tests/__init__.py +13 -0
  319. maxframe/lib/filesystem/tests/test_filesystem.py +223 -0
  320. maxframe/lib/filesystem/tests/test_oss.py +182 -0
  321. maxframe/lib/functools_compat.py +81 -0
  322. maxframe/lib/mmh3.cpython-311-darwin.so +0 -0
  323. maxframe/lib/mmh3_src/MurmurHash3.cpp +339 -0
  324. maxframe/lib/mmh3_src/MurmurHash3.h +43 -0
  325. maxframe/lib/mmh3_src/mmh3module.cpp +387 -0
  326. maxframe/lib/sparse/__init__.py +861 -0
  327. maxframe/lib/sparse/array.py +1604 -0
  328. maxframe/lib/sparse/core.py +92 -0
  329. maxframe/lib/sparse/matrix.py +241 -0
  330. maxframe/lib/sparse/tests/__init__.py +15 -0
  331. maxframe/lib/sparse/tests/test_sparse.py +476 -0
  332. maxframe/lib/sparse/vector.py +150 -0
  333. maxframe/lib/tblib/LICENSE +20 -0
  334. maxframe/lib/tblib/__init__.py +327 -0
  335. maxframe/lib/tblib/cpython.py +83 -0
  336. maxframe/lib/tblib/decorators.py +44 -0
  337. maxframe/lib/tblib/pickling_support.py +90 -0
  338. maxframe/lib/tests/__init__.py +13 -0
  339. maxframe/lib/tests/test_wrapped_pickle.py +51 -0
  340. maxframe/lib/version.py +620 -0
  341. maxframe/lib/wrapped_pickle.py +139 -0
  342. maxframe/mixin.py +100 -0
  343. maxframe/odpsio/__init__.py +21 -0
  344. maxframe/odpsio/arrow.py +91 -0
  345. maxframe/odpsio/schema.py +364 -0
  346. maxframe/odpsio/tableio.py +322 -0
  347. maxframe/odpsio/tests/__init__.py +13 -0
  348. maxframe/odpsio/tests/test_arrow.py +88 -0
  349. maxframe/odpsio/tests/test_schema.py +297 -0
  350. maxframe/odpsio/tests/test_tableio.py +136 -0
  351. maxframe/odpsio/tests/test_volumeio.py +90 -0
  352. maxframe/odpsio/volumeio.py +95 -0
  353. maxframe/opcodes.py +590 -0
  354. maxframe/protocol.py +415 -0
  355. maxframe/remote/__init__.py +18 -0
  356. maxframe/remote/core.py +210 -0
  357. maxframe/remote/run_script.py +121 -0
  358. maxframe/serialization/__init__.py +26 -0
  359. maxframe/serialization/arrow.py +95 -0
  360. maxframe/serialization/core.cpython-311-darwin.so +0 -0
  361. maxframe/serialization/core.pxd +44 -0
  362. maxframe/serialization/core.pyi +61 -0
  363. maxframe/serialization/core.pyx +1094 -0
  364. maxframe/serialization/exception.py +86 -0
  365. maxframe/serialization/maxframe_objects.py +39 -0
  366. maxframe/serialization/numpy.py +91 -0
  367. maxframe/serialization/pandas.py +202 -0
  368. maxframe/serialization/scipy.py +71 -0
  369. maxframe/serialization/serializables/__init__.py +55 -0
  370. maxframe/serialization/serializables/core.py +262 -0
  371. maxframe/serialization/serializables/field.py +624 -0
  372. maxframe/serialization/serializables/field_type.py +589 -0
  373. maxframe/serialization/serializables/tests/__init__.py +13 -0
  374. maxframe/serialization/serializables/tests/test_field_type.py +121 -0
  375. maxframe/serialization/serializables/tests/test_serializable.py +250 -0
  376. maxframe/serialization/tests/__init__.py +13 -0
  377. maxframe/serialization/tests/test_serial.py +412 -0
  378. maxframe/session.py +1310 -0
  379. maxframe/tensor/__init__.py +183 -0
  380. maxframe/tensor/arithmetic/__init__.py +315 -0
  381. maxframe/tensor/arithmetic/abs.py +68 -0
  382. maxframe/tensor/arithmetic/absolute.py +68 -0
  383. maxframe/tensor/arithmetic/add.py +82 -0
  384. maxframe/tensor/arithmetic/angle.py +72 -0
  385. maxframe/tensor/arithmetic/arccos.py +104 -0
  386. maxframe/tensor/arithmetic/arccosh.py +91 -0
  387. maxframe/tensor/arithmetic/arcsin.py +94 -0
  388. maxframe/tensor/arithmetic/arcsinh.py +86 -0
  389. maxframe/tensor/arithmetic/arctan.py +106 -0
  390. maxframe/tensor/arithmetic/arctan2.py +128 -0
  391. maxframe/tensor/arithmetic/arctanh.py +86 -0
  392. maxframe/tensor/arithmetic/around.py +114 -0
  393. maxframe/tensor/arithmetic/bitand.py +95 -0
  394. maxframe/tensor/arithmetic/bitor.py +102 -0
  395. maxframe/tensor/arithmetic/bitxor.py +95 -0
  396. maxframe/tensor/arithmetic/cbrt.py +66 -0
  397. maxframe/tensor/arithmetic/ceil.py +71 -0
  398. maxframe/tensor/arithmetic/clip.py +165 -0
  399. maxframe/tensor/arithmetic/conj.py +74 -0
  400. maxframe/tensor/arithmetic/copysign.py +78 -0
  401. maxframe/tensor/arithmetic/core.py +544 -0
  402. maxframe/tensor/arithmetic/cos.py +85 -0
  403. maxframe/tensor/arithmetic/cosh.py +72 -0
  404. maxframe/tensor/arithmetic/deg2rad.py +72 -0
  405. maxframe/tensor/arithmetic/degrees.py +77 -0
  406. maxframe/tensor/arithmetic/divide.py +114 -0
  407. maxframe/tensor/arithmetic/equal.py +76 -0
  408. maxframe/tensor/arithmetic/exp.py +106 -0
  409. maxframe/tensor/arithmetic/exp2.py +67 -0
  410. maxframe/tensor/arithmetic/expm1.py +79 -0
  411. maxframe/tensor/arithmetic/fabs.py +74 -0
  412. maxframe/tensor/arithmetic/fix.py +69 -0
  413. maxframe/tensor/arithmetic/float_power.py +103 -0
  414. maxframe/tensor/arithmetic/floor.py +77 -0
  415. maxframe/tensor/arithmetic/floordiv.py +94 -0
  416. maxframe/tensor/arithmetic/fmax.py +105 -0
  417. maxframe/tensor/arithmetic/fmin.py +106 -0
  418. maxframe/tensor/arithmetic/fmod.py +99 -0
  419. maxframe/tensor/arithmetic/frexp.py +92 -0
  420. maxframe/tensor/arithmetic/greater.py +77 -0
  421. maxframe/tensor/arithmetic/greater_equal.py +69 -0
  422. maxframe/tensor/arithmetic/hypot.py +77 -0
  423. maxframe/tensor/arithmetic/i0.py +89 -0
  424. maxframe/tensor/arithmetic/imag.py +67 -0
  425. maxframe/tensor/arithmetic/invert.py +110 -0
  426. maxframe/tensor/arithmetic/isclose.py +115 -0
  427. maxframe/tensor/arithmetic/iscomplex.py +64 -0
  428. maxframe/tensor/arithmetic/isfinite.py +106 -0
  429. maxframe/tensor/arithmetic/isinf.py +103 -0
  430. maxframe/tensor/arithmetic/isnan.py +82 -0
  431. maxframe/tensor/arithmetic/isreal.py +63 -0
  432. maxframe/tensor/arithmetic/ldexp.py +99 -0
  433. maxframe/tensor/arithmetic/less.py +69 -0
  434. maxframe/tensor/arithmetic/less_equal.py +69 -0
  435. maxframe/tensor/arithmetic/log.py +92 -0
  436. maxframe/tensor/arithmetic/log10.py +85 -0
  437. maxframe/tensor/arithmetic/log1p.py +95 -0
  438. maxframe/tensor/arithmetic/log2.py +85 -0
  439. maxframe/tensor/arithmetic/logaddexp.py +80 -0
  440. maxframe/tensor/arithmetic/logaddexp2.py +78 -0
  441. maxframe/tensor/arithmetic/logical_and.py +81 -0
  442. maxframe/tensor/arithmetic/logical_not.py +74 -0
  443. maxframe/tensor/arithmetic/logical_or.py +82 -0
  444. maxframe/tensor/arithmetic/logical_xor.py +88 -0
  445. maxframe/tensor/arithmetic/lshift.py +82 -0
  446. maxframe/tensor/arithmetic/maximum.py +108 -0
  447. maxframe/tensor/arithmetic/minimum.py +108 -0
  448. maxframe/tensor/arithmetic/mod.py +104 -0
  449. maxframe/tensor/arithmetic/modf.py +83 -0
  450. maxframe/tensor/arithmetic/multiply.py +81 -0
  451. maxframe/tensor/arithmetic/nan_to_num.py +99 -0
  452. maxframe/tensor/arithmetic/negative.py +65 -0
  453. maxframe/tensor/arithmetic/nextafter.py +68 -0
  454. maxframe/tensor/arithmetic/not_equal.py +72 -0
  455. maxframe/tensor/arithmetic/positive.py +47 -0
  456. maxframe/tensor/arithmetic/power.py +106 -0
  457. maxframe/tensor/arithmetic/rad2deg.py +71 -0
  458. maxframe/tensor/arithmetic/radians.py +77 -0
  459. maxframe/tensor/arithmetic/real.py +70 -0
  460. maxframe/tensor/arithmetic/reciprocal.py +76 -0
  461. maxframe/tensor/arithmetic/rint.py +68 -0
  462. maxframe/tensor/arithmetic/rshift.py +81 -0
  463. maxframe/tensor/arithmetic/setimag.py +29 -0
  464. maxframe/tensor/arithmetic/setreal.py +29 -0
  465. maxframe/tensor/arithmetic/sign.py +81 -0
  466. maxframe/tensor/arithmetic/signbit.py +65 -0
  467. maxframe/tensor/arithmetic/sin.py +98 -0
  468. maxframe/tensor/arithmetic/sinc.py +102 -0
  469. maxframe/tensor/arithmetic/sinh.py +93 -0
  470. maxframe/tensor/arithmetic/spacing.py +72 -0
  471. maxframe/tensor/arithmetic/sqrt.py +81 -0
  472. maxframe/tensor/arithmetic/square.py +69 -0
  473. maxframe/tensor/arithmetic/subtract.py +81 -0
  474. maxframe/tensor/arithmetic/tan.py +88 -0
  475. maxframe/tensor/arithmetic/tanh.py +92 -0
  476. maxframe/tensor/arithmetic/tests/__init__.py +15 -0
  477. maxframe/tensor/arithmetic/tests/test_arithmetic.py +414 -0
  478. maxframe/tensor/arithmetic/truediv.py +104 -0
  479. maxframe/tensor/arithmetic/trunc.py +72 -0
  480. maxframe/tensor/arithmetic/utils.py +65 -0
  481. maxframe/tensor/array_utils.py +186 -0
  482. maxframe/tensor/base/__init__.py +34 -0
  483. maxframe/tensor/base/astype.py +119 -0
  484. maxframe/tensor/base/atleast_1d.py +74 -0
  485. maxframe/tensor/base/broadcast_to.py +89 -0
  486. maxframe/tensor/base/ravel.py +92 -0
  487. maxframe/tensor/base/tests/__init__.py +13 -0
  488. maxframe/tensor/base/tests/test_base.py +114 -0
  489. maxframe/tensor/base/transpose.py +125 -0
  490. maxframe/tensor/base/unique.py +205 -0
  491. maxframe/tensor/base/where.py +127 -0
  492. maxframe/tensor/core.py +724 -0
  493. maxframe/tensor/datasource/__init__.py +32 -0
  494. maxframe/tensor/datasource/arange.py +156 -0
  495. maxframe/tensor/datasource/array.py +415 -0
  496. maxframe/tensor/datasource/core.py +109 -0
  497. maxframe/tensor/datasource/empty.py +169 -0
  498. maxframe/tensor/datasource/from_dataframe.py +70 -0
  499. maxframe/tensor/datasource/from_dense.py +54 -0
  500. maxframe/tensor/datasource/from_sparse.py +47 -0
  501. maxframe/tensor/datasource/full.py +186 -0
  502. maxframe/tensor/datasource/ones.py +173 -0
  503. maxframe/tensor/datasource/scalar.py +40 -0
  504. maxframe/tensor/datasource/tests/__init__.py +13 -0
  505. maxframe/tensor/datasource/tests/test_datasource.py +278 -0
  506. maxframe/tensor/datasource/zeros.py +188 -0
  507. maxframe/tensor/fetch/__init__.py +15 -0
  508. maxframe/tensor/fetch/core.py +54 -0
  509. maxframe/tensor/indexing/__init__.py +47 -0
  510. maxframe/tensor/indexing/choose.py +196 -0
  511. maxframe/tensor/indexing/compress.py +124 -0
  512. maxframe/tensor/indexing/core.py +190 -0
  513. maxframe/tensor/indexing/extract.py +71 -0
  514. maxframe/tensor/indexing/fill_diagonal.py +183 -0
  515. maxframe/tensor/indexing/flatnonzero.py +60 -0
  516. maxframe/tensor/indexing/getitem.py +175 -0
  517. maxframe/tensor/indexing/nonzero.py +120 -0
  518. maxframe/tensor/indexing/setitem.py +132 -0
  519. maxframe/tensor/indexing/slice.py +29 -0
  520. maxframe/tensor/indexing/take.py +130 -0
  521. maxframe/tensor/indexing/tests/__init__.py +15 -0
  522. maxframe/tensor/indexing/tests/test_indexing.py +234 -0
  523. maxframe/tensor/indexing/unravel_index.py +103 -0
  524. maxframe/tensor/merge/__init__.py +15 -0
  525. maxframe/tensor/merge/stack.py +132 -0
  526. maxframe/tensor/merge/tests/__init__.py +13 -0
  527. maxframe/tensor/merge/tests/test_merge.py +52 -0
  528. maxframe/tensor/operators.py +123 -0
  529. maxframe/tensor/random/__init__.py +168 -0
  530. maxframe/tensor/random/beta.py +87 -0
  531. maxframe/tensor/random/binomial.py +137 -0
  532. maxframe/tensor/random/bytes.py +39 -0
  533. maxframe/tensor/random/chisquare.py +110 -0
  534. maxframe/tensor/random/choice.py +186 -0
  535. maxframe/tensor/random/core.py +234 -0
  536. maxframe/tensor/random/dirichlet.py +123 -0
  537. maxframe/tensor/random/exponential.py +94 -0
  538. maxframe/tensor/random/f.py +135 -0
  539. maxframe/tensor/random/gamma.py +128 -0
  540. maxframe/tensor/random/geometric.py +93 -0
  541. maxframe/tensor/random/gumbel.py +167 -0
  542. maxframe/tensor/random/hypergeometric.py +148 -0
  543. maxframe/tensor/random/laplace.py +133 -0
  544. maxframe/tensor/random/logistic.py +129 -0
  545. maxframe/tensor/random/lognormal.py +159 -0
  546. maxframe/tensor/random/logseries.py +122 -0
  547. maxframe/tensor/random/multinomial.py +133 -0
  548. maxframe/tensor/random/multivariate_normal.py +192 -0
  549. maxframe/tensor/random/negative_binomial.py +125 -0
  550. maxframe/tensor/random/noncentral_chisquare.py +132 -0
  551. maxframe/tensor/random/noncentral_f.py +126 -0
  552. maxframe/tensor/random/normal.py +143 -0
  553. maxframe/tensor/random/pareto.py +140 -0
  554. maxframe/tensor/random/permutation.py +104 -0
  555. maxframe/tensor/random/poisson.py +111 -0
  556. maxframe/tensor/random/power.py +142 -0
  557. maxframe/tensor/random/rand.py +82 -0
  558. maxframe/tensor/random/randint.py +121 -0
  559. maxframe/tensor/random/randn.py +96 -0
  560. maxframe/tensor/random/random_integers.py +123 -0
  561. maxframe/tensor/random/random_sample.py +86 -0
  562. maxframe/tensor/random/rayleigh.py +110 -0
  563. maxframe/tensor/random/shuffle.py +61 -0
  564. maxframe/tensor/random/standard_cauchy.py +105 -0
  565. maxframe/tensor/random/standard_exponential.py +72 -0
  566. maxframe/tensor/random/standard_gamma.py +120 -0
  567. maxframe/tensor/random/standard_normal.py +74 -0
  568. maxframe/tensor/random/standard_t.py +135 -0
  569. maxframe/tensor/random/tests/__init__.py +15 -0
  570. maxframe/tensor/random/tests/test_random.py +167 -0
  571. maxframe/tensor/random/triangular.py +119 -0
  572. maxframe/tensor/random/uniform.py +131 -0
  573. maxframe/tensor/random/vonmises.py +131 -0
  574. maxframe/tensor/random/wald.py +114 -0
  575. maxframe/tensor/random/weibull.py +140 -0
  576. maxframe/tensor/random/zipf.py +122 -0
  577. maxframe/tensor/rechunk/__init__.py +26 -0
  578. maxframe/tensor/rechunk/rechunk.py +43 -0
  579. maxframe/tensor/reduction/__init__.py +66 -0
  580. maxframe/tensor/reduction/all.py +103 -0
  581. maxframe/tensor/reduction/allclose.py +88 -0
  582. maxframe/tensor/reduction/any.py +105 -0
  583. maxframe/tensor/reduction/argmax.py +103 -0
  584. maxframe/tensor/reduction/argmin.py +103 -0
  585. maxframe/tensor/reduction/array_equal.py +64 -0
  586. maxframe/tensor/reduction/core.py +168 -0
  587. maxframe/tensor/reduction/count_nonzero.py +81 -0
  588. maxframe/tensor/reduction/cumprod.py +97 -0
  589. maxframe/tensor/reduction/cumsum.py +101 -0
  590. maxframe/tensor/reduction/max.py +120 -0
  591. maxframe/tensor/reduction/mean.py +123 -0
  592. maxframe/tensor/reduction/min.py +120 -0
  593. maxframe/tensor/reduction/nanargmax.py +82 -0
  594. maxframe/tensor/reduction/nanargmin.py +76 -0
  595. maxframe/tensor/reduction/nancumprod.py +91 -0
  596. maxframe/tensor/reduction/nancumsum.py +94 -0
  597. maxframe/tensor/reduction/nanmax.py +111 -0
  598. maxframe/tensor/reduction/nanmean.py +106 -0
  599. maxframe/tensor/reduction/nanmin.py +111 -0
  600. maxframe/tensor/reduction/nanprod.py +94 -0
  601. maxframe/tensor/reduction/nanstd.py +126 -0
  602. maxframe/tensor/reduction/nansum.py +115 -0
  603. maxframe/tensor/reduction/nanvar.py +149 -0
  604. maxframe/tensor/reduction/prod.py +130 -0
  605. maxframe/tensor/reduction/std.py +134 -0
  606. maxframe/tensor/reduction/sum.py +125 -0
  607. maxframe/tensor/reduction/tests/__init__.py +13 -0
  608. maxframe/tensor/reduction/tests/test_reduction.py +181 -0
  609. maxframe/tensor/reduction/var.py +176 -0
  610. maxframe/tensor/reshape/__init__.py +17 -0
  611. maxframe/tensor/reshape/reshape.py +188 -0
  612. maxframe/tensor/reshape/tests/__init__.py +15 -0
  613. maxframe/tensor/reshape/tests/test_reshape.py +37 -0
  614. maxframe/tensor/statistics/__init__.py +13 -0
  615. maxframe/tensor/statistics/percentile.py +175 -0
  616. maxframe/tensor/statistics/quantile.py +288 -0
  617. maxframe/tensor/ufunc/__init__.py +26 -0
  618. maxframe/tensor/ufunc/ufunc.py +200 -0
  619. maxframe/tensor/utils.py +718 -0
  620. maxframe/tests/__init__.py +13 -0
  621. maxframe/tests/test_codegen.py +69 -0
  622. maxframe/tests/test_protocol.py +144 -0
  623. maxframe/tests/test_utils.py +376 -0
  624. maxframe/tests/utils.py +164 -0
  625. maxframe/typing_.py +37 -0
  626. maxframe/udf.py +134 -0
  627. maxframe/utils.py +1114 -0
  628. maxframe-0.1.0b5.dist-info/METADATA +104 -0
  629. maxframe-0.1.0b5.dist-info/RECORD +647 -0
  630. maxframe-0.1.0b5.dist-info/WHEEL +5 -0
  631. maxframe-0.1.0b5.dist-info/top_level.txt +3 -0
  632. maxframe_client/__init__.py +17 -0
  633. maxframe_client/clients/__init__.py +13 -0
  634. maxframe_client/clients/framedriver.py +118 -0
  635. maxframe_client/clients/spe.py +104 -0
  636. maxframe_client/conftest.py +15 -0
  637. maxframe_client/fetcher.py +264 -0
  638. maxframe_client/session/__init__.py +22 -0
  639. maxframe_client/session/consts.py +36 -0
  640. maxframe_client/session/graph.py +119 -0
  641. maxframe_client/session/odps.py +482 -0
  642. maxframe_client/session/task.py +280 -0
  643. maxframe_client/session/tests/__init__.py +13 -0
  644. maxframe_client/session/tests/test_task.py +85 -0
  645. maxframe_client/tests/__init__.py +13 -0
  646. maxframe_client/tests/test_fetcher.py +89 -0
  647. maxframe_client/tests/test_session.py +255 -0
@@ -0,0 +1,349 @@
1
+ # Copyright 1999-2024 Alibaba Group Holding Ltd.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from typing import Any, Optional, Union
16
+
17
+ import numpy as np
18
+
19
+ from ... import opcodes
20
+ from ...core import OutputType, get_output_types
21
+ from ...serialization.serializables import (
22
+ AnyField,
23
+ Int16Field,
24
+ Int64Field,
25
+ KeyField,
26
+ StringField,
27
+ )
28
+ from ...typing_ import TileableType
29
+ from ..core import IndexValue
30
+ from ..operators import DataFrameOperator, DataFrameOperatorMixin
31
+ from ..utils import build_empty_df, parse_index, validate_axis
32
+
33
+
34
+ class _NoNeedToAlign(Exception):
35
+ pass
36
+
37
+
38
+ class DataFrameAlign(DataFrameOperator, DataFrameOperatorMixin):
39
+ _op_type_ = opcodes.ALIGN
40
+
41
+ lhs = KeyField("lhs")
42
+ rhs = KeyField("rhs")
43
+ join = StringField("join", default=None)
44
+ axis = Int16Field("axis", default=None)
45
+ level = AnyField("level", default=None)
46
+ fill_value = AnyField("fill_value", default=None)
47
+ method = StringField("method", default=None)
48
+ limit = Int64Field("limit", default=None)
49
+ fill_axis = Int16Field("fill_axis", default=None)
50
+ broadcast_axis = Int16Field("broadcast_axis", default=None)
51
+
52
+ @property
53
+ def output_limit(self) -> int:
54
+ return 2
55
+
56
+ def _set_inputs(self, inputs):
57
+ super()._set_inputs(inputs)
58
+ self.lhs = inputs[0]
59
+ self.rhs = inputs[1]
60
+
61
+ def __call__(self, lhs: TileableType, rhs: TileableType):
62
+ if self.broadcast_axis != 1 or lhs.ndim == rhs.ndim:
63
+ self._output_types = get_output_types(lhs, rhs)
64
+ else:
65
+ self._output_types = [OutputType.dataframe, OutputType.dataframe]
66
+
67
+ if lhs.ndim == rhs.ndim:
68
+ if lhs.ndim == 1:
69
+ return self._call_series_series(lhs, rhs)
70
+ else:
71
+ return self._call_dataframe_dataframe(lhs, rhs)
72
+ else:
73
+ if lhs.ndim == 1:
74
+ # join order need to be reversed if not symmetric
75
+ asym_joins = {"left", "right"} - {self.join}
76
+ if len(asym_joins) == 1: # self.join in {"left", "right"}
77
+ self.join = asym_joins.pop()
78
+ # need to put dataframe first
79
+ self._output_types = get_output_types(rhs, lhs)
80
+ return self._call_dataframe_series(rhs, lhs)[::-1]
81
+ else:
82
+ return self._call_dataframe_series(lhs, rhs)
83
+
84
+ def _call_dataframe_dataframe(self, lhs: TileableType, rhs: TileableType):
85
+ l_shape = list(lhs.shape)
86
+ r_shape = list(rhs.shape)
87
+ if self.axis is None or self.axis == 0:
88
+ l_idx_val = r_idx_val = self._merge_index(
89
+ lhs.index_value, rhs.index_value, how=self.join
90
+ )
91
+ l_shape[0] = r_shape[0] = np.nan
92
+ else:
93
+ l_idx_val, r_idx_val = lhs.index_value, rhs.index_value
94
+
95
+ if self.axis is None or self.axis == 1:
96
+ l_empty = build_empty_df(lhs.dtypes)
97
+ r_empty = build_empty_df(rhs.dtypes)
98
+ aligned, _ = l_empty.align(r_empty, axis=1)
99
+ l_dtypes = r_dtypes = aligned.dtypes
100
+ l_col_val = r_col_val = parse_index(aligned.columns, store_data=True)
101
+ l_shape[1] = r_shape[1] = len(l_dtypes)
102
+ else:
103
+ l_dtypes, r_dtypes = lhs.dtypes, rhs.dtypes
104
+ l_col_val, r_col_val = lhs.columns_value, rhs.columns_value
105
+
106
+ l_kws = {
107
+ "index_value": l_idx_val,
108
+ "dtypes": l_dtypes,
109
+ "shape": tuple(l_shape),
110
+ "columns_value": l_col_val,
111
+ }
112
+ r_kws = {
113
+ "index_value": r_idx_val,
114
+ "dtypes": r_dtypes,
115
+ "shape": tuple(r_shape),
116
+ "columns_value": r_col_val,
117
+ }
118
+ return self.new_tileables([lhs, rhs], kws=[l_kws, r_kws])
119
+
120
+ def _call_dataframe_series(self, lhs: TileableType, rhs: TileableType):
121
+ l_shape = list(lhs.shape)
122
+ if self.axis == 0 or self.broadcast_axis == 1:
123
+ dtypes = lhs.dtypes
124
+ col_val = lhs.columns_value
125
+ l_idx_val = r_idx_val = self._merge_index(
126
+ lhs.index_value, rhs.index_value, how=self.join
127
+ )
128
+ l_shape[0] = r_size = np.nan
129
+ else:
130
+ l_idx_val = lhs.index_value
131
+ if not rhs.index_value.has_value():
132
+ dtypes = None
133
+ l_shape[1] = r_size = np.nan
134
+ col_val = r_idx_val = self._merge_index(
135
+ lhs.columns_value, rhs.index_value, how=self.join
136
+ )
137
+ else:
138
+ series_index = rhs.index_value.to_pandas()
139
+ dtypes = lhs.dtypes.reindex(
140
+ lhs.dtypes.index.join(series_index, how=self.join)
141
+ ).fillna(np.dtype(np.float_))
142
+ l_shape[1] = r_size = len(dtypes)
143
+ col_val = r_idx_val = parse_index(dtypes.index, store_data=True)
144
+
145
+ l_kws = {
146
+ "index_value": l_idx_val,
147
+ "dtypes": dtypes,
148
+ "shape": tuple(l_shape),
149
+ "columns_value": col_val,
150
+ }
151
+ if self.broadcast_axis == 1:
152
+ r_kws = {
153
+ "index_value": r_idx_val,
154
+ "dtypes": dtypes,
155
+ "shape": tuple(l_shape),
156
+ "columns_value": col_val,
157
+ }
158
+ else:
159
+ r_kws = {
160
+ "index_value": r_idx_val,
161
+ "shape": (r_size,),
162
+ "dtype": rhs.dtype,
163
+ }
164
+ return self.new_tileables([lhs, rhs], kws=[l_kws, r_kws])
165
+
166
+ def _call_series_series(self, lhs: TileableType, rhs: TileableType):
167
+ idx = self._merge_index(lhs.index_value, rhs.index_value, how=self.join)
168
+ kws = [
169
+ {"index_value": idx, "shape": (np.nan,), "dtype": lhs.dtype},
170
+ {"index_value": idx, "shape": (np.nan,), "dtype": rhs.dtype},
171
+ ]
172
+ return self.new_tileables([lhs, rhs], kws=kws)
173
+
174
+ @staticmethod
175
+ def _merge_index(
176
+ left_index_value: IndexValue, right_index_value: IndexValue, how: str = "outer"
177
+ ):
178
+ left_pd = left_index_value.to_pandas()
179
+ right_pd = right_index_value.to_pandas()
180
+
181
+ if not left_index_value.has_value() or not right_index_value.has_value():
182
+ left_pd = left_pd[:0]
183
+ right_pd = right_pd[:0]
184
+ store_data = False
185
+ else:
186
+ store_data = True
187
+
188
+ joined = left_pd.join(right_pd, how=how)
189
+ if store_data:
190
+ return parse_index(joined, store_data=store_data)
191
+ else:
192
+ return parse_index(
193
+ joined,
194
+ {left_index_value.key, right_index_value.key},
195
+ store_data=store_data,
196
+ )
197
+
198
+
199
+ def align(
200
+ df,
201
+ other,
202
+ join: str = "outer",
203
+ axis: Union[int, str, None] = None,
204
+ level: Union[int, str, None] = None,
205
+ copy: bool = True,
206
+ fill_value: Any = None,
207
+ method: str = None,
208
+ limit: Optional[int] = None,
209
+ fill_axis: Union[int, str] = 0,
210
+ broadcast_axis: Union[int, str] = None,
211
+ ):
212
+ """
213
+ Align two objects on their axes with the specified join method.
214
+
215
+ Join method is specified for each axis Index.
216
+
217
+ Parameters
218
+ ----------
219
+ other : DataFrame or Series
220
+ join : {'outer', 'inner', 'left', 'right'}, default 'outer'
221
+ axis : allowed axis of the other object, default None
222
+ Align on index (0), columns (1), or both (None).
223
+ level : int or level name, default None
224
+ Broadcast across a level, matching Index values on the
225
+ passed MultiIndex level.
226
+ copy : bool, default True
227
+ Always returns new objects. If copy=False and no reindexing is
228
+ required then original objects are returned.
229
+ fill_value : scalar, default np.NaN
230
+ Value to use for missing values. Defaults to NaN, but can be any
231
+ "compatible" value.
232
+ method : {'backfill', 'bfill', 'pad', 'ffill', None}, default None
233
+ Method to use for filling holes in reindexed Series:
234
+
235
+ - pad / ffill: propagate last valid observation forward to next valid.
236
+ - backfill / bfill: use NEXT valid observation to fill gap.
237
+
238
+ limit : int, default None
239
+ If method is specified, this is the maximum number of consecutive
240
+ NaN values to forward/backward fill. In other words, if there is
241
+ a gap with more than this number of consecutive NaNs, it will only
242
+ be partially filled. If method is not specified, this is the
243
+ maximum number of entries along the entire axis where NaNs will be
244
+ filled. Must be greater than 0 if not None.
245
+ fill_axis : {0 or 'index', 1 or 'columns'}, default 0
246
+ Filling axis, method and limit.
247
+ broadcast_axis : {0 or 'index', 1 or 'columns'}, default None
248
+ Broadcast values along this axis, if aligning two objects of
249
+ different dimensions.
250
+
251
+ Notes
252
+ -----
253
+ Currently argument `level` is not supported.
254
+
255
+ Returns
256
+ -------
257
+ (left, right) : (DataFrame, type of other)
258
+ Aligned objects.
259
+
260
+ Examples
261
+ --------
262
+ >>> import maxframe.tensor as mt
263
+ >>> import maxframe.dataframe as md
264
+ >>> df = md.DataFrame(
265
+ ... [[1, 2, 3, 4], [6, 7, 8, 9]], columns=["D", "B", "E", "A"], index=[1, 2]
266
+ ... )
267
+ >>> other = md.DataFrame(
268
+ ... [[10, 20, 30, 40], [60, 70, 80, 90], [600, 700, 800, 900]],
269
+ ... columns=["A", "B", "C", "D"],
270
+ ... index=[2, 3, 4],
271
+ ... )
272
+ >>> df.execute()
273
+ D B E A
274
+ 1 1 2 3 4
275
+ 2 6 7 8 9
276
+ >>> other.execute()
277
+ A B C D
278
+ 2 10 20 30 40
279
+ 3 60 70 80 90
280
+ 4 600 700 800 900
281
+
282
+ Align on columns:
283
+
284
+ >>> left, right = df.align(other, join="outer", axis=1)
285
+ >>> left.execute()
286
+ A B C D E
287
+ 1 4 2 NaN 1 3
288
+ 2 9 7 NaN 6 8
289
+ >>> right.execute()
290
+ A B C D E
291
+ 2 10 20 30 40 NaN
292
+ 3 60 70 80 90 NaN
293
+ 4 600 700 800 900 NaN
294
+
295
+ We can also align on the index:
296
+
297
+ >>> left, right = df.align(other, join="outer", axis=0)
298
+ >>> left.execute()
299
+ D B E A
300
+ 1 1.0 2.0 3.0 4.0
301
+ 2 6.0 7.0 8.0 9.0
302
+ 3 NaN NaN NaN NaN
303
+ 4 NaN NaN NaN NaN
304
+ >>> right.execute()
305
+ A B C D
306
+ 1 NaN NaN NaN NaN
307
+ 2 10.0 20.0 30.0 40.0
308
+ 3 60.0 70.0 80.0 90.0
309
+ 4 600.0 700.0 800.0 900.0
310
+
311
+ Finally, the default `axis=None` will align on both index and columns:
312
+
313
+ >>> left, right = df.align(other, join="outer", axis=None)
314
+ >>> left.execute()
315
+ A B C D E
316
+ 1 4.0 2.0 NaN 1.0 3.0
317
+ 2 9.0 7.0 NaN 6.0 8.0
318
+ 3 NaN NaN NaN NaN NaN
319
+ 4 NaN NaN NaN NaN NaN
320
+ >>> right.execute()
321
+ A B C D E
322
+ 1 NaN NaN NaN NaN NaN
323
+ 2 10.0 20.0 30.0 40.0 NaN
324
+ 3 60.0 70.0 80.0 90.0 NaN
325
+ 4 600.0 700.0 800.0 900.0 NaN
326
+ """
327
+ axis = validate_axis(axis) if axis is not None else None
328
+ fill_axis = validate_axis(fill_axis) if fill_axis is not None else None
329
+ broadcast_axis = (
330
+ validate_axis(broadcast_axis) if broadcast_axis is not None else None
331
+ )
332
+
333
+ if level is not None:
334
+ raise NotImplementedError(f"Argument `level` not supported")
335
+ if df.ndim != other.ndim and axis is None:
336
+ raise ValueError("Must specify axis=0 or 1")
337
+
338
+ op = DataFrameAlign(
339
+ join=join,
340
+ axis=axis,
341
+ level=level,
342
+ copy=copy,
343
+ fill_value=fill_value,
344
+ method=method,
345
+ limit=limit,
346
+ fill_axis=fill_axis,
347
+ broadcast_axis=broadcast_axis,
348
+ )
349
+ return op(df, other)
@@ -0,0 +1,83 @@
1
+ # Copyright 1999-2024 Alibaba Group Holding Ltd.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ import numpy as np
16
+
17
+ from .loc import DataFrameLoc
18
+
19
+
20
+ class DataFrameAt:
21
+ def __init__(self, obj):
22
+ self._obj = obj
23
+ self._loc = DataFrameLoc(self._obj)
24
+
25
+ def __getitem__(self, indexes):
26
+ if not isinstance(indexes, tuple):
27
+ indexes = (indexes,)
28
+
29
+ for index in indexes:
30
+ if not np.isscalar(index):
31
+ raise ValueError("Invalid call for scalar access (getting)!")
32
+
33
+ return self._loc[indexes]
34
+
35
+
36
+ def at(a):
37
+ """
38
+ Access a single value for a row/column label pair.
39
+
40
+ Similar to ``loc``, in that both provide label-based lookups. Use
41
+ ``at`` if you only need to get or set a single value in a DataFrame
42
+ or Series.
43
+
44
+ Raises
45
+ ------
46
+ KeyError
47
+ If 'label' does not exist in DataFrame.
48
+
49
+ See Also
50
+ --------
51
+ DataFrame.iat : Access a single value for a row/column pair by integer
52
+ position.
53
+ DataFrame.loc : Access a group of rows and columns by label(s).
54
+ Series.at : Access a single value using a label.
55
+
56
+ Examples
57
+ --------
58
+ >>> import maxframe.dataframe as md
59
+ >>> df = md.DataFrame([[0, 2, 3], [0, 4, 1], [10, 20, 30]],
60
+ ... index=[4, 5, 6], columns=['A', 'B', 'C'])
61
+ >>> df.execute()
62
+ A B C
63
+ 4 0 2 3
64
+ 5 0 4 1
65
+ 6 10 20 30
66
+
67
+ Get value at specified row/column pair
68
+
69
+ >>> df.at[4, 'B'].execute()
70
+ 2
71
+
72
+ # Set value at specified row/column pair
73
+ #
74
+ # >>> df.at[4, 'B'] = 10
75
+ # >>> df.at[4, 'B']
76
+ # 10
77
+
78
+ Get value within a Series
79
+
80
+ >>> df.loc[5].at['B'].execute()
81
+ 4
82
+ """
83
+ return DataFrameAt(a)
@@ -0,0 +1,204 @@
1
+ # Copyright 1999-2024 Alibaba Group Holding Ltd.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from numbers import Integral
16
+
17
+ import numpy as np
18
+ import pandas as pd
19
+
20
+ from ... import opcodes
21
+ from ...core import ENTITY_TYPE, OutputType
22
+ from ...serialization.serializables import AnyField, BoolField
23
+ from ...tensor.core import TENSOR_TYPE
24
+ from ...tensor.datasource import tensor as astensor
25
+ from ..core import DATAFRAME_TYPE, SERIES_TYPE
26
+ from ..operators import DataFrameOperator, DataFrameOperatorMixin
27
+ from ..utils import parse_index
28
+
29
+
30
+ class SeriesIndex(DataFrameOperator, DataFrameOperatorMixin):
31
+ _op_module_ = "series"
32
+ _op_type_ = opcodes.INDEX
33
+
34
+ labels = AnyField("labels", default=None)
35
+
36
+ is_intermediate = BoolField("is_intermediate", default=None)
37
+
38
+ def __init__(self, output_types=None, **kw):
39
+ super().__init__(_output_types=output_types, **kw)
40
+
41
+ def __call__(self, series, name=None):
42
+ return self.new_tileable([series], dtype=series.dtype, name=name)
43
+
44
+ def _new_tileables(self, inputs, kws=None, **kw):
45
+ # Override this method to automatically decide the output type,
46
+ # when `labels` is a list, we will set `output_types` as series,
47
+ # otherwise it will be a scalar.
48
+ output_types = getattr(self, "_output_types", None)
49
+ shape = kw.pop("shape", None)
50
+ is_scalar = not isinstance(self.labels, list)
51
+ if not output_types:
52
+ output_types = [OutputType.scalar] if is_scalar else [OutputType.series]
53
+ self.output_types = output_types
54
+ if shape is None:
55
+ shape = () if is_scalar else ((len(self.labels)),)
56
+ kw["shape"] = shape
57
+ if not is_scalar:
58
+ index_value = kw.pop("index_value", None) or parse_index(
59
+ pd.Index(self.labels)
60
+ )
61
+ kw["index_value"] = index_value
62
+ return super()._new_tileables(inputs, kws=kws, **kw)
63
+
64
+
65
+ class DataFrameIndex(DataFrameOperator, DataFrameOperatorMixin):
66
+ _op_type_ = opcodes.INDEX
67
+
68
+ col_names = AnyField("col_names", default=None)
69
+
70
+ # for bool index
71
+ mask = AnyField("mask", default=None)
72
+ identical_index = BoolField("identical_index")
73
+
74
+ def __init__(self, output_types=None, **kw):
75
+ output_types = output_types or [OutputType.series]
76
+ super().__init__(_output_types=output_types, **kw)
77
+
78
+ def _set_inputs(self, inputs):
79
+ super()._set_inputs(inputs)
80
+ if isinstance(self.col_names, ENTITY_TYPE):
81
+ self.col_names = self._inputs[0]
82
+ if isinstance(self.mask, ENTITY_TYPE):
83
+ self.mask = self._inputs[-1]
84
+
85
+ def __call__(self, df):
86
+ if self.col_names is not None:
87
+ # if col_names is a list, return a DataFrame, else return a Series
88
+ col_names = self.col_names
89
+ if not isinstance(col_names, list):
90
+ col_names = [col_names]
91
+ is_list = False
92
+ else:
93
+ is_list = True
94
+
95
+ dtypes_list = df._get_dtypes_by_columns(col_names)
96
+ if is_list or len(dtypes_list) > 1:
97
+ if len(col_names) != len(dtypes_list):
98
+ col_names = df._get_columns_by_columns(col_names)
99
+ columns = parse_index(pd.Index(col_names), store_data=True)
100
+ return self.new_dataframe(
101
+ [df],
102
+ shape=(df.shape[0], len(col_names)),
103
+ dtypes=pd.Series(dtypes_list, index=col_names, dtype=np.dtype("O")),
104
+ index_value=df.index_value,
105
+ columns_value=columns,
106
+ )
107
+ else:
108
+ dtype = dtypes_list[0]
109
+ return self.new_series(
110
+ [df],
111
+ shape=(df.shape[0],),
112
+ dtype=dtype,
113
+ index_value=df.index_value,
114
+ name=self.col_names,
115
+ )
116
+ else:
117
+ if isinstance(self.mask, (SERIES_TYPE, DATAFRAME_TYPE, TENSOR_TYPE)):
118
+ index_value = parse_index(
119
+ pd.Index(
120
+ [],
121
+ dtype=df.index_value.to_pandas().dtype,
122
+ name=df.index_value.name,
123
+ ),
124
+ df,
125
+ self.mask,
126
+ )
127
+ return self.new_dataframe(
128
+ [df, self.mask],
129
+ shape=(np.nan, df.shape[1]),
130
+ dtypes=df.dtypes,
131
+ index_value=index_value,
132
+ columns_value=df.columns_value,
133
+ )
134
+ else:
135
+ index_value = parse_index(
136
+ pd.Index(
137
+ [],
138
+ dtype=df.index_value.to_pandas().dtype,
139
+ name=df.index_value.name,
140
+ ),
141
+ df,
142
+ self.mask,
143
+ )
144
+ return self.new_dataframe(
145
+ [df],
146
+ shape=(np.nan, df.shape[1]),
147
+ dtypes=df.dtypes,
148
+ index_value=index_value,
149
+ columns_value=df.columns_value,
150
+ )
151
+
152
+
153
+ _list_like_types = (list, np.ndarray, SERIES_TYPE, pd.Series, TENSOR_TYPE)
154
+
155
+
156
+ def dataframe_getitem(df, item):
157
+ columns_set = set(df.dtypes.keys())
158
+
159
+ if isinstance(item, (np.ndarray, pd.Series)) and item.dtype != np.bool_:
160
+ item = item.tolist()
161
+
162
+ if isinstance(item, slice):
163
+ edge = item.start if item.start is not None else item.stop
164
+ if isinstance(edge, Integral):
165
+ return df.iloc[item]
166
+ else:
167
+ return df.loc[item]
168
+ elif isinstance(item, list):
169
+ for col_name in item:
170
+ if col_name not in columns_set:
171
+ raise KeyError(f"{col_name} not in columns")
172
+ op = DataFrameIndex(col_names=item, output_types=[OutputType.dataframe])
173
+ elif isinstance(item, _list_like_types) or hasattr(item, "dtypes"):
174
+ # NB: don't enforce the dtype of `item` to be `bool` since it may be unknown
175
+ if isinstance(item, DATAFRAME_TYPE + SERIES_TYPE):
176
+ identical_index = df.index_value.key == item.index_value.key
177
+ else:
178
+ identical_index = False
179
+ op = DataFrameIndex(
180
+ mask=item,
181
+ identical_index=identical_index,
182
+ output_types=[OutputType.dataframe],
183
+ )
184
+ else:
185
+ if item not in columns_set:
186
+ raise KeyError(f"{item} not in columns {columns_set}")
187
+ op = DataFrameIndex(col_names=item)
188
+ return op(df)
189
+
190
+
191
+ def series_getitem(series, labels):
192
+ if isinstance(labels, list) or isinstance(labels, tuple) or np.isscalar(labels):
193
+ op = SeriesIndex(labels=labels)
194
+ return op(series, name=series.name)
195
+ elif isinstance(labels, _list_like_types) and astensor(labels).dtype == np.bool_:
196
+ return series.loc[labels]
197
+ elif isinstance(labels, slice):
198
+ edge = labels.start if labels.start is not None else labels.stop
199
+ if isinstance(edge, Integral):
200
+ return series.iloc[labels]
201
+ else:
202
+ return series.loc[labels]
203
+ else:
204
+ raise NotImplementedError(f"type {type(labels)} is not support for getitem")
@@ -0,0 +1,37 @@
1
+ # Copyright 1999-2024 Alibaba Group Holding Ltd.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from numbers import Integral
16
+
17
+ from .iloc import DataFrameIloc
18
+
19
+
20
+ class DataFrameIat:
21
+ def __init__(self, obj):
22
+ self._obj = obj
23
+ self._iloc = DataFrameIloc(self._obj)
24
+
25
+ def __getitem__(self, indexes):
26
+ if not isinstance(indexes, tuple):
27
+ indexes = (indexes,)
28
+
29
+ for index in indexes:
30
+ if not isinstance(index, Integral):
31
+ raise ValueError("Invalid call for scalar access (getting)!")
32
+
33
+ return self._iloc[indexes]
34
+
35
+
36
+ def iat(a):
37
+ return DataFrameIat(a)