maxframe 0.1.0b5__cp310-cp310-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-310-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-310-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-310-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-310-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,566 @@
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
+ from pandas.core.dtypes.cast import find_common_type
20
+ from pandas.core.indexing import IndexingError
21
+
22
+ from ... import opcodes
23
+ from ...config import options
24
+ from ...core import ENTITY_TYPE, OutputType
25
+ from ...serialization.serializables import AnyField, KeyField, ListField
26
+ from ...tensor import asarray
27
+ from ...tensor.indexing.core import calc_shape
28
+ from ..operators import DATAFRAME_TYPE, DataFrameOperator, DataFrameOperatorMixin
29
+ from ..utils import indexing_index_value
30
+
31
+ _ILOC_ERROR_MSG = (
32
+ "Location based indexing can only have [integer, "
33
+ "integer slice (START point is INCLUDED, END point is EXCLUDED), "
34
+ "listlike of integers, boolean array] types"
35
+ )
36
+
37
+
38
+ def process_iloc_indexes(inp, indexes):
39
+ ndim = inp.ndim
40
+
41
+ if not isinstance(indexes, tuple):
42
+ indexes = (indexes,)
43
+ if len(indexes) < ndim:
44
+ indexes += (slice(None),) * (ndim - len(indexes))
45
+ if len(indexes) > ndim:
46
+ raise IndexingError("Too many indexers")
47
+
48
+ new_indexes = []
49
+ # check each index
50
+ for ax, index in enumerate(indexes):
51
+ if isinstance(index, tuple):
52
+ # a tuple should already have been caught by this point
53
+ # so don't treat a tuple as a valid indexer
54
+ raise IndexingError("Too many indexers")
55
+ elif isinstance(index, slice):
56
+ if any(v is not None for v in [index.start, index.stop, index.step]):
57
+ pd_index = (
58
+ inp.index_value if ax == 0 else inp.columns_value
59
+ ).to_pandas()
60
+ for val in [index.start, index.stop, index.step]:
61
+ if val is not None:
62
+ try:
63
+ pd_index[val] # check on the pandas
64
+ except IndexError:
65
+ pass
66
+ except TypeError:
67
+ raise TypeError(
68
+ f"cannot do slice indexing on {type(pd_index)} "
69
+ f"with these indexers [{val}] of {type(val)}"
70
+ )
71
+ new_indexes.append(index)
72
+ elif isinstance(index, (list, np.ndarray, pd.Series, ENTITY_TYPE)):
73
+ if not isinstance(index, ENTITY_TYPE):
74
+ index = np.asarray(index)
75
+ else:
76
+ index = asarray(index)
77
+ if ax == 1:
78
+ # do not support tensor index on axis 1
79
+ # because if so, the dtypes and columns_value would be unknown
80
+ try:
81
+ index = index.fetch()
82
+ except (RuntimeError, ValueError):
83
+ raise NotImplementedError(
84
+ "indexer on axis columns cannot be non-executed tensor"
85
+ )
86
+ if index.dtype != np.bool_:
87
+ index = index.astype(np.int64)
88
+ if index.ndim != 1:
89
+ raise ValueError(
90
+ "Buffer has wrong number of dimensions "
91
+ f"(expected 1, got {index.ndim})"
92
+ )
93
+ new_indexes.append(index)
94
+ elif isinstance(index, Integral):
95
+ shape = inp.shape[ax]
96
+ if not np.isnan(shape):
97
+ if index < -shape or index >= shape:
98
+ raise IndexError("single positional indexer is out-of-bounds")
99
+ new_indexes.append(index)
100
+ else:
101
+ raise ValueError(_ILOC_ERROR_MSG)
102
+
103
+ return new_indexes
104
+
105
+
106
+ class DataFrameIloc:
107
+ def __init__(self, obj):
108
+ self._obj = obj
109
+
110
+ def __getitem__(self, indexes):
111
+ if isinstance(self._obj, DATAFRAME_TYPE):
112
+ op = DataFrameIlocGetItem(indexes=process_iloc_indexes(self._obj, indexes))
113
+ else:
114
+ op = SeriesIlocGetItem(indexes=process_iloc_indexes(self._obj, indexes))
115
+ return op(self._obj)
116
+
117
+ def __setitem__(self, indexes, value):
118
+ if not np.isscalar(value):
119
+ raise NotImplementedError("Only scalar value is supported to set by iloc")
120
+
121
+ if isinstance(self._obj, DATAFRAME_TYPE):
122
+ op = DataFrameIlocSetItem(
123
+ indexes=process_iloc_indexes(self._obj, indexes), value=value
124
+ )
125
+ else:
126
+ op = SeriesIlocSetItem(
127
+ indexes=process_iloc_indexes(self._obj, indexes), value=value
128
+ )
129
+
130
+ ret = op(self._obj)
131
+ self._obj.data = ret.data
132
+
133
+
134
+ class HeadTailOptimizedOperatorMixin(DataFrameOperatorMixin):
135
+ __slots__ = ()
136
+
137
+ @classmethod
138
+ def _is_head(cls, index0):
139
+ return (
140
+ (index0.start is None or index0.start == 0)
141
+ and index0.stop is not None
142
+ and index0.stop > 0
143
+ )
144
+
145
+ @classmethod
146
+ def _is_tail(cls, index0):
147
+ return index0.start is not None and index0.start < 0 and index0.stop is None
148
+
149
+ @classmethod
150
+ def _is_indexes_head_or_tail(cls, indexes):
151
+ index0 = indexes[0]
152
+ if not isinstance(index0, slice):
153
+ # have to be slice
154
+ return False
155
+ if index0.step is not None and index0.step != 1:
156
+ return False
157
+ if len(indexes) == 2:
158
+ if not isinstance(indexes[1], slice):
159
+ return False
160
+ if indexes[1] != slice(None):
161
+ return False
162
+ if cls._is_tail(index0):
163
+ # tail
164
+ return True
165
+ if cls._is_head(index0):
166
+ # head
167
+ return True
168
+ return False
169
+
170
+ def can_be_optimized(self):
171
+ return (
172
+ self._is_indexes_head_or_tail(self.indexes)
173
+ and self._is_head(self.indexes[0])
174
+ and self.indexes[0].stop <= options.optimize.head_optimize_threshold
175
+ )
176
+
177
+
178
+ class DataFrameIlocGetItem(DataFrameOperator, HeadTailOptimizedOperatorMixin):
179
+ _op_type_ = opcodes.DATAFRAME_ILOC_GETITEM
180
+
181
+ _input = KeyField("input")
182
+ indexes = ListField("indexes", default=None)
183
+
184
+ def __init__(self, gpu=None, sparse=False, output_types=None, **kw):
185
+ super().__init__(gpu=gpu, sparse=sparse, _output_types=output_types, **kw)
186
+ if not self.output_types:
187
+ self.output_types = [OutputType.dataframe]
188
+
189
+ @property
190
+ def input(self):
191
+ return self._input
192
+
193
+ def _set_inputs(self, inputs):
194
+ super()._set_inputs(inputs)
195
+ inputs_iter = iter(self._inputs)
196
+ self._input = next(inputs_iter)
197
+ indexes = []
198
+ for index in self.indexes:
199
+ if isinstance(index, ENTITY_TYPE):
200
+ indexes.append(next(inputs_iter))
201
+ else:
202
+ indexes.append(index)
203
+ self.indexes = indexes
204
+
205
+ def __call__(self, df):
206
+ # Note [Fancy Index of Numpy and Pandas]
207
+ #
208
+ # The numpy and pandas.iloc have different semantic when processing fancy index:
209
+ #
210
+ # >>> np.ones((3,3))[[1,2],[1,2]]
211
+ # array([1., 1.])
212
+ #
213
+ # >>> pd.DataFrame(np.ones((3,3))).iloc[[1,2],[1,2]]
214
+ # 1 2
215
+ # 1 1.0 1.0
216
+ # 2 1.0 1.0
217
+ #
218
+ # Thus, we processing the index along two axis of DataFrame separately.
219
+ shape0 = tuple(calc_shape((df.shape[0],), (self.indexes[0],)))
220
+ shape1 = tuple(calc_shape((df.shape[1],), (self.indexes[1],)))
221
+
222
+ inputs = [df] + [
223
+ index for index in self.indexes if isinstance(index, ENTITY_TYPE)
224
+ ]
225
+
226
+ # NB: pandas only compresses the result to series when index on one of axis is integral
227
+ if isinstance(self.indexes[1], Integral):
228
+ shape = shape0
229
+ dtype = df.dtypes.iloc[self.indexes[1]]
230
+ index_value = indexing_index_value(df.index_value, self.indexes[0])
231
+ if isinstance(self.indexes[0], Integral):
232
+ # scalar
233
+ return self.new_scalar(inputs, dtype=dtype)
234
+ else:
235
+ return self.new_series(
236
+ inputs,
237
+ shape=shape,
238
+ dtype=dtype,
239
+ index_value=index_value,
240
+ name=df.dtypes.index[self.indexes[1]],
241
+ )
242
+ elif isinstance(self.indexes[0], Integral):
243
+ shape = shape1
244
+ dtype = find_common_type(list(df.dtypes.iloc[self.indexes[1]].values))
245
+ index_value = indexing_index_value(df.columns_value, self.indexes[1])
246
+ return self.new_series(
247
+ inputs, shape=shape, dtype=dtype, index_value=index_value
248
+ )
249
+ else:
250
+ return self.new_dataframe(
251
+ inputs,
252
+ shape=shape0 + shape1,
253
+ dtypes=df.dtypes.iloc[self.indexes[1]],
254
+ index_value=indexing_index_value(df.index_value, self.indexes[0]),
255
+ columns_value=indexing_index_value(
256
+ df.columns_value, self.indexes[1], store_data=True
257
+ ),
258
+ )
259
+
260
+
261
+ class SeriesIlocGetItem(DataFrameOperator, HeadTailOptimizedOperatorMixin):
262
+ _op_module_ = "series"
263
+ _op_type_ = opcodes.DATAFRAME_ILOC_GETITEM
264
+
265
+ _input = KeyField("input")
266
+ indexes = ListField("indexes", default=None)
267
+
268
+ def __init__(self, gpu=None, sparse=False, output_types=None, **kw):
269
+ super().__init__(gpu=gpu, sparse=sparse, _output_types=output_types, **kw)
270
+ if not self.output_types:
271
+ self.output_types = [OutputType.series]
272
+
273
+ @property
274
+ def input(self):
275
+ return self._input
276
+
277
+ def _set_inputs(self, inputs):
278
+ super()._set_inputs(inputs)
279
+
280
+ inputs_iter = iter(self._inputs)
281
+ self._input = next(inputs_iter)
282
+
283
+ indexes = []
284
+ for index in self.indexes:
285
+ if isinstance(index, ENTITY_TYPE):
286
+ indexes.append(next(inputs_iter))
287
+ else:
288
+ indexes.append(index)
289
+ self.indexes = indexes
290
+
291
+ def __call__(self, series):
292
+ if isinstance(self.indexes[0], Integral):
293
+ return self.new_scalar([series], dtype=series.dtype)
294
+ else:
295
+ shape = tuple(calc_shape(series.shape, self.indexes))
296
+ index_value = indexing_index_value(series.index_value, self.indexes[0])
297
+ inputs = [series] + [
298
+ index for index in self.indexes if isinstance(index, ENTITY_TYPE)
299
+ ]
300
+ return self.new_series(
301
+ inputs,
302
+ shape=shape,
303
+ dtype=series.dtype,
304
+ index_value=index_value,
305
+ name=series.name,
306
+ )
307
+
308
+
309
+ class IndexIlocGetItem(DataFrameOperator, DataFrameOperatorMixin):
310
+ _op_module_ = "index"
311
+ _op_type_ = opcodes.DATAFRAME_ILOC_GETITEM
312
+
313
+ _input = KeyField("input")
314
+ indexes = ListField("indexes", default=None)
315
+
316
+ def __init__(self, gpu=None, sparse=False, output_types=None, **kw):
317
+ super().__init__(gpu=gpu, sparse=sparse, _output_types=output_types, **kw)
318
+ if not self.output_types:
319
+ self.output_types = [OutputType.index]
320
+
321
+ @property
322
+ def input(self):
323
+ return self._input
324
+
325
+ def _set_inputs(self, inputs):
326
+ super()._set_inputs(inputs)
327
+
328
+ inputs_iter = iter(self._inputs)
329
+ self._input = next(inputs_iter)
330
+
331
+ indexes = []
332
+ for index in self.indexes:
333
+ if isinstance(index, ENTITY_TYPE):
334
+ indexes.append(next(inputs_iter))
335
+ else:
336
+ indexes.append(index)
337
+ self.indexes = indexes
338
+
339
+ def __call__(self, idx):
340
+ if isinstance(self.indexes[0], Integral):
341
+ return self.new_scalar([idx], dtype=idx.dtype)
342
+ else:
343
+ shape = tuple(calc_shape(idx.shape, self.indexes))
344
+ index_value = indexing_index_value(idx.index_value, self.indexes[0])
345
+ inputs = [idx] + [
346
+ index for index in self.indexes if isinstance(index, ENTITY_TYPE)
347
+ ]
348
+ return self.new_index(
349
+ inputs,
350
+ shape=shape,
351
+ dtype=idx.dtype,
352
+ index_value=index_value,
353
+ name=idx.name,
354
+ )
355
+
356
+
357
+ class DataFrameIlocSetItem(DataFrameOperator, DataFrameOperatorMixin):
358
+ _op_type_ = opcodes.DATAFRAME_ILOC_SETITEM
359
+
360
+ indexes = ListField("indexes", default=None)
361
+ value = AnyField("value", default=None)
362
+
363
+ def __init__(self, gpu=None, sparse=False, output_types=None, **kw):
364
+ super().__init__(
365
+ gpu=gpu,
366
+ sparse=sparse,
367
+ _output_types=output_types,
368
+ **kw,
369
+ )
370
+ if not self.output_types:
371
+ self.output_types = [OutputType.dataframe]
372
+
373
+ def __call__(self, df):
374
+ return self.new_dataframe(
375
+ [df],
376
+ shape=df.shape,
377
+ dtypes=df.dtypes,
378
+ index_value=df.index_value,
379
+ columns_value=df.columns_value,
380
+ )
381
+
382
+
383
+ class SeriesIlocSetItem(DataFrameOperator, DataFrameOperatorMixin):
384
+ _op_module_ = "series"
385
+ _op_type_ = opcodes.DATAFRAME_ILOC_SETITEM
386
+
387
+ indexes = ListField("indexes", default=None)
388
+ value = AnyField("value", default=None)
389
+
390
+ def __init__(self, gpu=None, sparse=False, **kw):
391
+ super().__init__(
392
+ gpu=gpu,
393
+ sparse=sparse,
394
+ _output_types=[OutputType.series],
395
+ **kw,
396
+ )
397
+
398
+ def __call__(self, series):
399
+ return self.new_series(
400
+ [series],
401
+ shape=series.shape,
402
+ dtype=series.dtype,
403
+ index_value=series.index_value,
404
+ name=series.name,
405
+ )
406
+
407
+
408
+ def index_getitem(idx, indexes):
409
+ op = IndexIlocGetItem(indexes=process_iloc_indexes(idx, indexes))
410
+ return op(idx)
411
+
412
+
413
+ def index_setitem(_idx, *_):
414
+ raise TypeError("Index does not support mutable operations")
415
+
416
+
417
+ def iloc(a):
418
+ return DataFrameIloc(a)
419
+
420
+
421
+ def head(a, n=5):
422
+ """
423
+ Return the first `n` rows.
424
+
425
+ This function returns the first `n` rows for the object based
426
+ on position. It is useful for quickly testing if your object
427
+ has the right type of data in it.
428
+
429
+ For negative values of `n`, this function returns all rows except
430
+ the last `n` rows, equivalent to ``df[:-n]``.
431
+
432
+ Parameters
433
+ ----------
434
+ n : int, default 5
435
+ Number of rows to select.
436
+
437
+ Returns
438
+ -------
439
+ same type as caller
440
+ The first `n` rows of the caller object.
441
+
442
+ See Also
443
+ --------
444
+ DataFrame.tail: Returns the last `n` rows.
445
+
446
+ Examples
447
+ --------
448
+ >>> import maxframe.dataframe as md
449
+ >>> df = md.DataFrame({'animal': ['alligator', 'bee', 'falcon', 'lion',
450
+ ... 'monkey', 'parrot', 'shark', 'whale', 'zebra']})
451
+ >>> df.execute()
452
+ animal
453
+ 0 alligator
454
+ 1 bee
455
+ 2 falcon
456
+ 3 lion
457
+ 4 monkey
458
+ 5 parrot
459
+ 6 shark
460
+ 7 whale
461
+ 8 zebra
462
+
463
+ Viewing the first 5 lines
464
+
465
+ >>> df.head().execute()
466
+ animal
467
+ 0 alligator
468
+ 1 bee
469
+ 2 falcon
470
+ 3 lion
471
+ 4 monkey
472
+
473
+ Viewing the first `n` lines (three in this case)
474
+
475
+ >>> df.head(3).execute()
476
+ animal
477
+ 0 alligator
478
+ 1 bee
479
+ 2 falcon
480
+
481
+ For negative values of `n`
482
+
483
+ >>> df.head(-3).execute()
484
+ animal
485
+ 0 alligator
486
+ 1 bee
487
+ 2 falcon
488
+ 3 lion
489
+ 4 monkey
490
+ 5 parrot
491
+ """
492
+ return DataFrameIloc(a)[0:n]
493
+
494
+
495
+ def tail(a, n=5):
496
+ """
497
+ Return the last `n` rows.
498
+
499
+ This function returns last `n` rows from the object based on
500
+ position. It is useful for quickly verifying data, for example,
501
+ after sorting or appending rows.
502
+
503
+ For negative values of `n`, this function returns all rows except
504
+ the first `n` rows, equivalent to ``df[n:]``.
505
+
506
+ Parameters
507
+ ----------
508
+ n : int, default 5
509
+ Number of rows to select.
510
+
511
+ Returns
512
+ -------
513
+ type of caller
514
+ The last `n` rows of the caller object.
515
+
516
+ See Also
517
+ --------
518
+ DataFrame.head : The first `n` rows of the caller object.
519
+
520
+ Examples
521
+ --------
522
+ >>> import maxframe.dataframe as md
523
+ >>> df = md.DataFrame({'animal': ['alligator', 'bee', 'falcon', 'lion',
524
+ ... 'monkey', 'parrot', 'shark', 'whale', 'zebra']})
525
+ >>> df.execute()
526
+ animal
527
+ 0 alligator
528
+ 1 bee
529
+ 2 falcon
530
+ 3 lion
531
+ 4 monkey
532
+ 5 parrot
533
+ 6 shark
534
+ 7 whale
535
+ 8 zebra
536
+
537
+ Viewing the last 5 lines
538
+
539
+ >>> df.tail().execute()
540
+ animal
541
+ 4 monkey
542
+ 5 parrot
543
+ 6 shark
544
+ 7 whale
545
+ 8 zebra
546
+
547
+ Viewing the last `n` lines (three in this case)
548
+
549
+ >>> df.tail(3).execute()
550
+ animal
551
+ 6 shark
552
+ 7 whale
553
+ 8 zebra
554
+
555
+ For negative values of `n`
556
+
557
+ >>> df.tail(-3).execute()
558
+ animal
559
+ 3 lion
560
+ 4 monkey
561
+ 5 parrot
562
+ 6 shark
563
+ 7 whale
564
+ 8 zebra
565
+ """
566
+ return DataFrameIloc(a)[-n:]
@@ -0,0 +1,86 @@
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 pandas as pd
16
+
17
+ from ... import opcodes
18
+ from ...serialization.serializables import AnyField, BoolField, Int64Field
19
+ from ...tensor.core import TENSOR_TYPE
20
+ from ..core import SERIES_TYPE
21
+ from ..operators import DataFrameOperator, DataFrameOperatorMixin
22
+ from ..utils import build_empty_df, parse_index
23
+
24
+
25
+ class DataFrameInsert(DataFrameOperator, DataFrameOperatorMixin):
26
+ _op_type_ = opcodes.INSERT
27
+
28
+ loc = Int64Field("loc")
29
+ column = AnyField("column")
30
+ value = AnyField("value")
31
+ allow_duplicates = BoolField("allow_duplicates")
32
+
33
+ def _set_inputs(self, inputs):
34
+ super()._set_inputs(inputs)
35
+ if len(inputs) > 1:
36
+ self._value = self._inputs[-1]
37
+
38
+ def __call__(self, df):
39
+ inputs = [df]
40
+ if isinstance(self.value, (SERIES_TYPE, TENSOR_TYPE)):
41
+ value_dtype = self.value.dtype
42
+ inputs.append(self.value)
43
+ else:
44
+ value_dtype = pd.Series(self.value).dtype
45
+
46
+ empty_df = build_empty_df(df.dtypes)
47
+ empty_df.insert(
48
+ loc=self.loc,
49
+ column=self.column,
50
+ allow_duplicates=self.allow_duplicates,
51
+ value=pd.Series([], dtype=value_dtype),
52
+ )
53
+
54
+ params = df.params
55
+ params["columns_value"] = parse_index(empty_df.columns, store_data=True)
56
+ params["dtypes"] = empty_df.dtypes
57
+ params["shape"] = (df.shape[0], df.shape[1] + 1)
58
+ return self.new_dataframe(inputs, **params)
59
+
60
+
61
+ def df_insert(df, loc, column, value, allow_duplicates=False):
62
+ """
63
+ Insert column into DataFrame at specified location.
64
+
65
+ Raises a ValueError if `column` is already contained in the DataFrame,
66
+ unless `allow_duplicates` is set to True.
67
+
68
+ Parameters
69
+ ----------
70
+ loc : int
71
+ Insertion index. Must verify 0 <= loc <= len(columns).
72
+ column : str, number, or hashable object
73
+ Label of the inserted column.
74
+ value : int, Series, or array-like
75
+ allow_duplicates : bool, optional
76
+ """
77
+ if isinstance(value, TENSOR_TYPE) and value.ndim > 1:
78
+ raise ValueError(
79
+ f"Wrong number of items passed {value.ndim}, placement implies 1"
80
+ )
81
+
82
+ op = DataFrameInsert(
83
+ loc=loc, column=column, value=value, allow_duplicates=allow_duplicates
84
+ )
85
+ out_df = op(df)
86
+ df.data = out_df.data