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,150 @@
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 ..utils import validate_axis
16
+
17
+
18
+ def pct_change(
19
+ df_or_series, periods=1, fill_method="pad", limit=None, freq=None, **kwargs
20
+ ):
21
+ """
22
+ Percentage change between the current and a prior element.
23
+
24
+ Computes the percentage change from the immediately previous row by
25
+ default. This is useful in comparing the percentage of change in a time
26
+ series of elements.
27
+
28
+ Parameters
29
+ ----------
30
+ periods : int, default 1
31
+ Periods to shift for forming percent change.
32
+ fill_method : str, default 'pad'
33
+ How to handle NAs before computing percent changes.
34
+ limit : int, default None
35
+ The number of consecutive NAs to fill before stopping.
36
+ freq : DateOffset, timedelta, or str, optional
37
+ Increment to use from time series API (e.g. 'M' or BDay()).
38
+ **kwargs
39
+ Additional keyword arguments are passed into
40
+ `DataFrame.shift` or `Series.shift`.
41
+
42
+ Returns
43
+ -------
44
+ chg : Series or DataFrame
45
+ The same type as the calling object.
46
+
47
+ See Also
48
+ --------
49
+ Series.diff : Compute the difference of two elements in a Series.
50
+ DataFrame.diff : Compute the difference of two elements in a DataFrame.
51
+ Series.shift : Shift the index by some number of periods.
52
+ DataFrame.shift : Shift the index by some number of periods.
53
+
54
+ Examples
55
+ --------
56
+ **Series**
57
+
58
+ >>> import maxframe.dataframe as md
59
+
60
+ >>> s = md.Series([90, 91, 85])
61
+ >>> s.execute()
62
+ 0 90
63
+ 1 91
64
+ 2 85
65
+ dtype: int64
66
+
67
+ >>> s.pct_change().execute()
68
+ 0 NaN
69
+ 1 0.011111
70
+ 2 -0.065934
71
+ dtype: float64
72
+
73
+ >>> s.pct_change(periods=2).execute()
74
+ 0 NaN
75
+ 1 NaN
76
+ 2 -0.055556
77
+ dtype: float64
78
+
79
+ See the percentage change in a Series where filling NAs with last
80
+ valid observation forward to next valid.
81
+
82
+ >>> s = md.Series([90, 91, None, 85])
83
+ >>> s.execute()
84
+ 0 90.0
85
+ 1 91.0
86
+ 2 NaN
87
+ 3 85.0
88
+ dtype: float64
89
+
90
+ >>> s.pct_change(fill_method='ffill').execute()
91
+ 0 NaN
92
+ 1 0.011111
93
+ 2 0.000000
94
+ 3 -0.065934
95
+ dtype: float64
96
+
97
+ **DataFrame**
98
+
99
+ Percentage change in French franc, Deutsche Mark, and Italian lira from
100
+ 1980-01-01 to 1980-03-01.
101
+
102
+ >>> df = md.DataFrame({
103
+ ... 'FR': [4.0405, 4.0963, 4.3149],
104
+ ... 'GR': [1.7246, 1.7482, 1.8519],
105
+ ... 'IT': [804.74, 810.01, 860.13]},
106
+ ... index=['1980-01-01', '1980-02-01', '1980-03-01'])
107
+ >>> df.execute()
108
+ FR GR IT
109
+ 1980-01-01 4.0405 1.7246 804.74
110
+ 1980-02-01 4.0963 1.7482 810.01
111
+ 1980-03-01 4.3149 1.8519 860.13
112
+
113
+ >>> df.pct_change().execute()
114
+ FR GR IT
115
+ 1980-01-01 NaN NaN NaN
116
+ 1980-02-01 0.013810 0.013684 0.006549
117
+ 1980-03-01 0.053365 0.059318 0.061876
118
+
119
+ Percentage of change in GOOG and APPL stock volume. Shows computing
120
+ the percentage change between columns.
121
+
122
+ >>> df = md.DataFrame({
123
+ ... '2016': [1769950, 30586265],
124
+ ... '2015': [1500923, 40912316],
125
+ ... '2014': [1371819, 41403351]},
126
+ ... index=['GOOG', 'APPL'])
127
+ >>> df.execute()
128
+ 2016 2015 2014
129
+ GOOG 1769950 1500923 1371819
130
+ APPL 30586265 40912316 41403351
131
+
132
+ >>> df.pct_change(axis='columns').execute()
133
+ 2016 2015 2014
134
+ GOOG NaN -0.151997 -0.086016
135
+ APPL NaN 0.337604 0.012002
136
+ """
137
+
138
+ axis = validate_axis(kwargs.pop("axis", 0))
139
+ if fill_method is None:
140
+ data = df_or_series
141
+ else:
142
+ data = df_or_series.fillna(method=fill_method, axis=axis, limit=limit)
143
+
144
+ rs = data.div(data.shift(periods=periods, freq=freq, axis=axis, **kwargs)) - 1
145
+ if freq is not None:
146
+ # Shift method is implemented differently when freq is not None
147
+ # We want to restore the original index
148
+ rs = rs.loc[~rs.index.duplicated()]
149
+ rs = rs.reindex_like(data)
150
+ return rs
@@ -0,0 +1,262 @@
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
+ import pandas as pd
17
+ from pandas.api.types import is_list_like
18
+
19
+ from ... import opcodes
20
+ from ...core import OutputType
21
+ from ...serialization.serializables import AnyField, BoolField, StringField
22
+ from ...utils import no_default
23
+ from ..operators import DataFrameOperator, DataFrameOperatorMixin
24
+ from ..utils import build_df, parse_index
25
+
26
+
27
+ class DataFramePivotTable(DataFrameOperator, DataFrameOperatorMixin):
28
+ _op_type_ = opcodes.PIVOT_TABLE
29
+
30
+ values = AnyField("values", default=None)
31
+ index = AnyField("index", default=None)
32
+ columns = AnyField("columns", default=None)
33
+ aggfunc = AnyField("aggfunc", default="mean")
34
+ fill_value = AnyField("fill_value", default=None)
35
+ margins = BoolField("margins", default=False)
36
+ dropna = BoolField("dropna", default=True)
37
+ margins_name = StringField("margins_name", default=None)
38
+ sort = BoolField("sort", default=False)
39
+
40
+ def __init__(self, **kw):
41
+ super().__init__(**kw)
42
+ self.output_types = [OutputType.dataframe]
43
+
44
+ def __call__(self, df):
45
+ index_value = columns_value = dtypes = None
46
+ if self.index is not None:
47
+ # index is now a required field
48
+ if len(self.index) == 1:
49
+ index_data = pd.Index(
50
+ [], dtype=df.dtypes[self.index[0]], name=self.index[0]
51
+ )
52
+ else:
53
+ index_data = pd.MultiIndex.from_frame(build_df(df[self.index]))
54
+ index_value = parse_index(index_data)
55
+
56
+ if self.columns is None: # output columns can be determined
57
+ sel_df = df
58
+ groupby_obj = sel_df.groupby(self.index)
59
+ if self.values:
60
+ groupby_obj = groupby_obj[self.values]
61
+ aggregated_df = groupby_obj.agg(self.aggfunc)
62
+ index_value = aggregated_df.index_value
63
+ columns_value = aggregated_df.columns_value
64
+ dtypes = aggregated_df.dtypes
65
+ else:
66
+ columns_value = dtypes = None
67
+ return self.new_dataframe(
68
+ [df],
69
+ shape=(np.nan, np.nan),
70
+ dtypes=dtypes,
71
+ columns_value=columns_value,
72
+ index_value=index_value,
73
+ )
74
+
75
+
76
+ def pivot_table(
77
+ data,
78
+ values=None,
79
+ index=None,
80
+ columns=None,
81
+ aggfunc="mean",
82
+ fill_value=None,
83
+ margins=False,
84
+ dropna=True,
85
+ margins_name="All",
86
+ sort=True,
87
+ ):
88
+ """
89
+ Create a spreadsheet-style pivot table as a DataFrame.
90
+
91
+ The levels in the pivot table will be stored in MultiIndex objects
92
+ (hierarchical indexes) on the index and columns of the result DataFrame.
93
+
94
+ Parameters
95
+ ----------
96
+ values : column to aggregate, optional
97
+ index : column, Grouper, array, or list of the previous
98
+ If an array is passed, it must be the same length as the data. The
99
+ list can contain any of the other types (except list).
100
+ Keys to group by on the pivot table index. If an array is passed,
101
+ it is being used as the same manner as column values.
102
+ columns : column, Grouper, array, or list of the previous
103
+ If an array is passed, it must be the same length as the data. The
104
+ list can contain any of the other types (except list).
105
+ Keys to group by on the pivot table column. If an array is passed,
106
+ it is being used as the same manner as column values.
107
+ aggfunc : function, list of functions, dict, default numpy.mean
108
+ If list of functions passed, the resulting pivot table will have
109
+ hierarchical columns whose top level are the function names
110
+ (inferred from the function objects themselves)
111
+ If dict is passed, the key is column to aggregate and value
112
+ is function or list of functions.
113
+ fill_value : scalar, default None
114
+ Value to replace missing values with (in the resulting pivot table,
115
+ after aggregation).
116
+ margins : bool, default False
117
+ Add all row / columns (e.g. for subtotal / grand totals).
118
+ dropna : bool, default True
119
+ Do not include columns whose entries are all NaN.
120
+ margins_name : str, default 'All'
121
+ Name of the row / column that will contain the totals
122
+ when margins is True.
123
+ sort : bool, default True
124
+ Specifies if the result should be sorted.
125
+
126
+ Returns
127
+ -------
128
+ DataFrame
129
+ An Excel style pivot table.
130
+
131
+ See Also
132
+ --------
133
+ DataFrame.pivot : Pivot without aggregation that can handle
134
+ non-numeric data.
135
+ DataFrame.melt: Unpivot a DataFrame from wide to long format,
136
+ optionally leaving identifiers set.
137
+ wide_to_long : Wide panel to long format. Less flexible but more
138
+ user-friendly than melt.
139
+
140
+ Examples
141
+ --------
142
+ >>> import numpy as np
143
+ >>> import maxframe.dataframe as md
144
+ >>> df = md.DataFrame({"A": ["foo", "foo", "foo", "foo", "foo",
145
+ ... "bar", "bar", "bar", "bar"],
146
+ ... "B": ["one", "one", "one", "two", "two",
147
+ ... "one", "one", "two", "two"],
148
+ ... "C": ["small", "large", "large", "small",
149
+ ... "small", "large", "small", "small",
150
+ ... "large"],
151
+ ... "D": [1, 2, 2, 3, 3, 4, 5, 6, 7],
152
+ ... "E": [2, 4, 5, 5, 6, 6, 8, 9, 9]})
153
+ >>> df.execute()
154
+ A B C D E
155
+ 0 foo one small 1 2
156
+ 1 foo one large 2 4
157
+ 2 foo one large 2 5
158
+ 3 foo two small 3 5
159
+ 4 foo two small 3 6
160
+ 5 bar one large 4 6
161
+ 6 bar one small 5 8
162
+ 7 bar two small 6 9
163
+ 8 bar two large 7 9
164
+
165
+ This first example aggregates values by taking the sum.
166
+
167
+ >>> table = md.pivot_table(df, values='D', index=['A', 'B'],
168
+ ... columns=['C'], aggfunc=np.sum)
169
+ >>> table.execute()
170
+ C large small
171
+ A B
172
+ bar one 4.0 5.0
173
+ two 7.0 6.0
174
+ foo one 4.0 1.0
175
+ two NaN 6.0
176
+
177
+ We can also fill missing values using the `fill_value` parameter.
178
+
179
+ >>> table = md.pivot_table(df, values='D', index=['A', 'B'],
180
+ ... columns=['C'], aggfunc=np.sum, fill_value=0)
181
+ >>> table.execute()
182
+ C large small
183
+ A B
184
+ bar one 4 5
185
+ two 7 6
186
+ foo one 4 1
187
+ two 0 6
188
+
189
+ The next example aggregates by taking the mean across multiple columns.
190
+
191
+ >>> table = md.pivot_table(df, values=['D', 'E'], index=['A', 'C'],
192
+ ... aggfunc={'D': np.mean,
193
+ ... 'E': np.mean})
194
+ >>> table.execute()
195
+ D E
196
+ A C
197
+ bar large 5.500000 7.500000
198
+ small 5.500000 8.500000
199
+ foo large 2.000000 4.500000
200
+ small 2.333333 4.333333
201
+
202
+ We can also calculate multiple types of aggregations for any given
203
+ value column.
204
+
205
+ >>> table = md.pivot_table(df, values=['D', 'E'], index=['A', 'C'],
206
+ ... aggfunc={'D': np.mean,
207
+ ... 'E': [min, max, np.mean]})
208
+ >>> table.execute()
209
+ D E
210
+ mean max mean min
211
+ A C
212
+ bar large 5.500000 9.0 7.500000 6.0
213
+ small 5.500000 9.0 8.500000 8.0
214
+ foo large 2.000000 5.0 4.500000 4.0
215
+ small 2.333333 6.0 4.333333 2.0
216
+ """
217
+ if index is None and columns is None:
218
+ raise ValueError(
219
+ "No group keys passed, need to specify at least one of index or columns"
220
+ )
221
+
222
+ def make_col_list(col):
223
+ try:
224
+ if col in data.dtypes.index:
225
+ return [col]
226
+ except TypeError:
227
+ return col
228
+ return col
229
+
230
+ values_list = make_col_list(values)
231
+ index_list = make_col_list(index)
232
+ columns_list = make_col_list(columns)
233
+
234
+ name_to_attr = {"values": values_list, "index": index_list, "columns": columns_list}
235
+ for key, val in name_to_attr.items():
236
+ if val is None:
237
+ continue
238
+ if not is_list_like(val):
239
+ raise ValueError(f"Need to specify {key} as a list-like object.")
240
+ non_exist_key = next((c for c in val if c not in data.dtypes.index), no_default)
241
+ if non_exist_key is not no_default:
242
+ raise ValueError(
243
+ f"Column {non_exist_key} specified in {key} is not a valid column."
244
+ )
245
+
246
+ if columns is None and not margins:
247
+ if values_list:
248
+ data = data[index_list + values_list]
249
+ return data.groupby(index, sort=sort).agg(aggfunc)
250
+
251
+ op = DataFramePivotTable(
252
+ values=values,
253
+ index=index,
254
+ columns=columns,
255
+ aggfunc=aggfunc,
256
+ fill_value=fill_value,
257
+ margins=margins,
258
+ dropna=dropna,
259
+ margins_name=margins_name,
260
+ sort=sort,
261
+ )
262
+ return op(data)
@@ -0,0 +1,104 @@
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
+ import pandas as pd
17
+ from pandas.api.types import is_integer
18
+
19
+ from ...core import ENTITY_TYPE
20
+ from ...tensor import tensor as astensor
21
+ from ...tensor.statistics.percentile import percentile
22
+ from ..core import DATAFRAME_TYPE, SERIES_TYPE
23
+ from ..initializer import DataFrame, Series
24
+ from .cut import cut
25
+
26
+
27
+ def qcut(x, q, labels=None, retbins=False, precision=3, duplicate="raise"):
28
+ """
29
+ Quantile-based discretization function.
30
+
31
+ Discretize variable into equal-sized buckets based on rank or based
32
+ on sample quantiles. For example 1000 values for 10 quantiles would
33
+ produce a Categorical object indicating quantile membership for each data point.
34
+
35
+ Parameters
36
+ ----------
37
+ x : 1d tensor or Series
38
+ q : int or list-like of float
39
+ Number of quantiles. 10 for deciles, 4 for quartiles, etc. Alternately
40
+ array of quantiles, e.g. [0, .25, .5, .75, 1.] for quartiles.
41
+ labels : array or False, default None
42
+ Used as labels for the resulting bins. Must be of the same length as
43
+ the resulting bins. If False, return only integer indicators of the
44
+ bins. If True, raises an error.
45
+ retbins : bool, optional
46
+ Whether to return the (bins, labels) or not. Can be useful if bins
47
+ is given as a scalar.
48
+ precision : int, optional
49
+ The precision at which to store and display the bins labels.
50
+ duplicates : {default 'raise', 'drop'}, optional
51
+ If bin edges are not unique, raise ValueError or drop non-uniques.
52
+
53
+ Returns
54
+ -------
55
+ out : Categorical or Series or tensor of integers if labels is False
56
+ The return type (Categorical or Series) depends on the input: a Series
57
+ of type category if input is a Series else Categorical. Bins are
58
+ represented as categories when categorical data is returned.
59
+ bins : tensor of floats
60
+ Returned only if `retbins` is True.
61
+
62
+ Notes
63
+ -----
64
+ Out of bounds values will be NA in the resulting Categorical object
65
+
66
+ Examples
67
+ --------
68
+ >>> import maxframe.dataframe as md
69
+ >>> md.qcut(range(5), 4).execute()
70
+ ... # doctest: +ELLIPSIS
71
+ [(-0.001, 1.0], (-0.001, 1.0], (1.0, 2.0], (2.0, 3.0], (3.0, 4.0]]
72
+ Categories (4, interval[float64]): [(-0.001, 1.0] < (1.0, 2.0] ...
73
+
74
+ >>> md.qcut(range(5), 3, labels=["good", "medium", "bad"]).execute()
75
+ ... # doctest: +SKIP
76
+ [good, good, medium, bad, bad]
77
+ Categories (3, object): [good < medium < bad]
78
+
79
+ >>> md.qcut(range(5), 4, labels=False).execute()
80
+ array([0, 0, 1, 2, 3])
81
+ """
82
+ if is_integer(q):
83
+ q = np.linspace(0, 1, q + 1)
84
+
85
+ if isinstance(x, (DATAFRAME_TYPE, SERIES_TYPE, pd.DataFrame, pd.Series)):
86
+ x = DataFrame(x) if x.ndim == 2 else Series(x)
87
+ bins = x.quantile(q)
88
+ else:
89
+ x = astensor(x)
90
+ if isinstance(q, ENTITY_TYPE):
91
+ q = q * 100
92
+ else:
93
+ q = [iq * 100 for iq in q]
94
+ bins = percentile(x, q)
95
+
96
+ return cut(
97
+ x,
98
+ bins,
99
+ labels=labels,
100
+ retbins=retbins,
101
+ precision=precision,
102
+ include_lowest=True,
103
+ duplicates=duplicate,
104
+ )
@@ -0,0 +1,104 @@
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 ..utils import build_empty_df
16
+
17
+
18
+ def select_dtypes(df, include=None, exclude=None):
19
+ """
20
+ Return a subset of the DataFrame's columns based on the column dtypes.
21
+
22
+ Parameters
23
+ ----------
24
+ include, exclude : scalar or list-like
25
+ A selection of dtypes or strings to be included/excluded. At least
26
+ one of these parameters must be supplied.
27
+
28
+ Returns
29
+ -------
30
+ DataFrame
31
+ The subset of the frame including the dtypes in ``include`` and
32
+ excluding the dtypes in ``exclude``.
33
+
34
+ Raises
35
+ ------
36
+ ValueError
37
+ * If both of ``include`` and ``exclude`` are empty
38
+ * If ``include`` and ``exclude`` have overlapping elements
39
+ * If any kind of string dtype is passed in.
40
+
41
+ See Also
42
+ --------
43
+ DataFrame.dtypes: Return Series with the data type of each column.
44
+
45
+ Notes
46
+ -----
47
+ * To select all *numeric* types, use ``np.number`` or ``'number'``
48
+ * To select strings you must use the ``object`` dtype, but note that
49
+ this will return *all* object dtype columns
50
+ * See the `numpy dtype hierarchy
51
+ <https://numpy.org/doc/stable/reference/arrays.scalars.html>`__
52
+ * To select datetimes, use ``np.datetime64``, ``'datetime'`` or
53
+ ``'datetime64'``
54
+ * To select timedeltas, use ``np.timedelta64``, ``'timedelta'`` or
55
+ ``'timedelta64'``
56
+ * To select Pandas categorical dtypes, use ``'category'``
57
+ * To select Pandas datetimetz dtypes, use ``'datetimetz'`` (new in
58
+ 0.20.0) or ``'datetime64[ns, tz]'``
59
+
60
+ Examples
61
+ --------
62
+ >>> import maxframe.dataframe as md
63
+ >>> df = md.DataFrame({'a': [1, 2] * 3,
64
+ ... 'b': [True, False] * 3,
65
+ ... 'c': [1.0, 2.0] * 3})
66
+ >>> df.execute()
67
+ a b c
68
+ 0 1 True 1.0
69
+ 1 2 False 2.0
70
+ 2 1 True 1.0
71
+ 3 2 False 2.0
72
+ 4 1 True 1.0
73
+ 5 2 False 2.0
74
+
75
+ >>> df.select_dtypes(include='bool').execute()
76
+ b
77
+ 0 True
78
+ 1 False
79
+ 2 True
80
+ 3 False
81
+ 4 True
82
+ 5 False
83
+
84
+ >>> df.select_dtypes(include=['float64']).execute()
85
+ c
86
+ 0 1.0
87
+ 1 2.0
88
+ 2 1.0
89
+ 3 2.0
90
+ 4 1.0
91
+ 5 2.0
92
+
93
+ >>> df.select_dtypes(exclude=['int64']).execute()
94
+ b c
95
+ 0 True 1.0
96
+ 1 False 2.0
97
+ 2 True 1.0
98
+ 3 False 2.0
99
+ 4 True 1.0
100
+ 5 False 2.0
101
+ """
102
+ test_df = build_empty_df(df.dtypes)
103
+ test_df = test_df.select_dtypes(include=include, exclude=exclude)
104
+ return df[test_df.dtypes.index.tolist()]