maxframe 0.1.0b5__cp38-cp38-macosx_11_0_arm64.whl

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

Potentially problematic release.


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

Files changed (647) hide show
  1. maxframe/__init__.py +32 -0
  2. maxframe/_utils.cpython-38-darwin.so +0 -0
  3. maxframe/_utils.pxd +33 -0
  4. maxframe/_utils.pyx +547 -0
  5. maxframe/codegen.py +528 -0
  6. maxframe/config/__init__.py +15 -0
  7. maxframe/config/config.py +443 -0
  8. maxframe/config/tests/__init__.py +13 -0
  9. maxframe/config/tests/test_config.py +103 -0
  10. maxframe/config/tests/test_validators.py +34 -0
  11. maxframe/config/validators.py +57 -0
  12. maxframe/conftest.py +139 -0
  13. maxframe/core/__init__.py +65 -0
  14. maxframe/core/base.py +156 -0
  15. maxframe/core/entity/__init__.py +44 -0
  16. maxframe/core/entity/chunks.py +68 -0
  17. maxframe/core/entity/core.py +152 -0
  18. maxframe/core/entity/executable.py +337 -0
  19. maxframe/core/entity/fuse.py +73 -0
  20. maxframe/core/entity/objects.py +100 -0
  21. maxframe/core/entity/output_types.py +90 -0
  22. maxframe/core/entity/tileables.py +438 -0
  23. maxframe/core/entity/utils.py +24 -0
  24. maxframe/core/graph/__init__.py +17 -0
  25. maxframe/core/graph/builder/__init__.py +16 -0
  26. maxframe/core/graph/builder/base.py +86 -0
  27. maxframe/core/graph/builder/chunk.py +430 -0
  28. maxframe/core/graph/builder/tileable.py +34 -0
  29. maxframe/core/graph/builder/utils.py +41 -0
  30. maxframe/core/graph/core.cpython-38-darwin.so +0 -0
  31. maxframe/core/graph/core.pyx +467 -0
  32. maxframe/core/graph/entity.py +171 -0
  33. maxframe/core/graph/tests/__init__.py +13 -0
  34. maxframe/core/graph/tests/test_graph.py +205 -0
  35. maxframe/core/mode.py +96 -0
  36. maxframe/core/operator/__init__.py +34 -0
  37. maxframe/core/operator/base.py +450 -0
  38. maxframe/core/operator/core.py +276 -0
  39. maxframe/core/operator/fetch.py +53 -0
  40. maxframe/core/operator/fuse.py +29 -0
  41. maxframe/core/operator/objects.py +72 -0
  42. maxframe/core/operator/shuffle.py +111 -0
  43. maxframe/core/operator/tests/__init__.py +13 -0
  44. maxframe/core/operator/tests/test_core.py +64 -0
  45. maxframe/core/tests/__init__.py +13 -0
  46. maxframe/core/tests/test_mode.py +75 -0
  47. maxframe/dataframe/__init__.py +81 -0
  48. maxframe/dataframe/arithmetic/__init__.py +359 -0
  49. maxframe/dataframe/arithmetic/abs.py +33 -0
  50. maxframe/dataframe/arithmetic/add.py +60 -0
  51. maxframe/dataframe/arithmetic/arccos.py +28 -0
  52. maxframe/dataframe/arithmetic/arccosh.py +28 -0
  53. maxframe/dataframe/arithmetic/arcsin.py +28 -0
  54. maxframe/dataframe/arithmetic/arcsinh.py +28 -0
  55. maxframe/dataframe/arithmetic/arctan.py +28 -0
  56. maxframe/dataframe/arithmetic/arctanh.py +28 -0
  57. maxframe/dataframe/arithmetic/around.py +152 -0
  58. maxframe/dataframe/arithmetic/bitwise_and.py +46 -0
  59. maxframe/dataframe/arithmetic/bitwise_or.py +50 -0
  60. maxframe/dataframe/arithmetic/bitwise_xor.py +46 -0
  61. maxframe/dataframe/arithmetic/ceil.py +28 -0
  62. maxframe/dataframe/arithmetic/core.py +342 -0
  63. maxframe/dataframe/arithmetic/cos.py +28 -0
  64. maxframe/dataframe/arithmetic/cosh.py +28 -0
  65. maxframe/dataframe/arithmetic/degrees.py +28 -0
  66. maxframe/dataframe/arithmetic/docstring.py +442 -0
  67. maxframe/dataframe/arithmetic/equal.py +56 -0
  68. maxframe/dataframe/arithmetic/exp.py +28 -0
  69. maxframe/dataframe/arithmetic/exp2.py +28 -0
  70. maxframe/dataframe/arithmetic/expm1.py +28 -0
  71. maxframe/dataframe/arithmetic/floor.py +28 -0
  72. maxframe/dataframe/arithmetic/floordiv.py +64 -0
  73. maxframe/dataframe/arithmetic/greater.py +57 -0
  74. maxframe/dataframe/arithmetic/greater_equal.py +57 -0
  75. maxframe/dataframe/arithmetic/invert.py +33 -0
  76. maxframe/dataframe/arithmetic/is_ufuncs.py +62 -0
  77. maxframe/dataframe/arithmetic/less.py +57 -0
  78. maxframe/dataframe/arithmetic/less_equal.py +57 -0
  79. maxframe/dataframe/arithmetic/log.py +28 -0
  80. maxframe/dataframe/arithmetic/log10.py +28 -0
  81. maxframe/dataframe/arithmetic/log2.py +28 -0
  82. maxframe/dataframe/arithmetic/mod.py +60 -0
  83. maxframe/dataframe/arithmetic/multiply.py +60 -0
  84. maxframe/dataframe/arithmetic/negative.py +33 -0
  85. maxframe/dataframe/arithmetic/not_equal.py +56 -0
  86. maxframe/dataframe/arithmetic/power.py +68 -0
  87. maxframe/dataframe/arithmetic/radians.py +28 -0
  88. maxframe/dataframe/arithmetic/sin.py +28 -0
  89. maxframe/dataframe/arithmetic/sinh.py +28 -0
  90. maxframe/dataframe/arithmetic/sqrt.py +28 -0
  91. maxframe/dataframe/arithmetic/subtract.py +64 -0
  92. maxframe/dataframe/arithmetic/tan.py +28 -0
  93. maxframe/dataframe/arithmetic/tanh.py +28 -0
  94. maxframe/dataframe/arithmetic/tests/__init__.py +13 -0
  95. maxframe/dataframe/arithmetic/tests/test_arithmetic.py +695 -0
  96. maxframe/dataframe/arithmetic/truediv.py +64 -0
  97. maxframe/dataframe/arithmetic/trunc.py +28 -0
  98. maxframe/dataframe/arrays.py +864 -0
  99. maxframe/dataframe/core.py +2417 -0
  100. maxframe/dataframe/datasource/__init__.py +15 -0
  101. maxframe/dataframe/datasource/core.py +81 -0
  102. maxframe/dataframe/datasource/dataframe.py +59 -0
  103. maxframe/dataframe/datasource/date_range.py +504 -0
  104. maxframe/dataframe/datasource/from_index.py +54 -0
  105. maxframe/dataframe/datasource/from_records.py +107 -0
  106. maxframe/dataframe/datasource/from_tensor.py +419 -0
  107. maxframe/dataframe/datasource/index.py +117 -0
  108. maxframe/dataframe/datasource/read_csv.py +528 -0
  109. maxframe/dataframe/datasource/read_odps_query.py +299 -0
  110. maxframe/dataframe/datasource/read_odps_table.py +253 -0
  111. maxframe/dataframe/datasource/read_parquet.py +421 -0
  112. maxframe/dataframe/datasource/series.py +55 -0
  113. maxframe/dataframe/datasource/tests/__init__.py +13 -0
  114. maxframe/dataframe/datasource/tests/test_datasource.py +401 -0
  115. maxframe/dataframe/datastore/__init__.py +26 -0
  116. maxframe/dataframe/datastore/core.py +19 -0
  117. maxframe/dataframe/datastore/to_csv.py +227 -0
  118. maxframe/dataframe/datastore/to_odps.py +162 -0
  119. maxframe/dataframe/extensions/__init__.py +41 -0
  120. maxframe/dataframe/extensions/accessor.py +50 -0
  121. maxframe/dataframe/extensions/reshuffle.py +83 -0
  122. maxframe/dataframe/extensions/tests/__init__.py +13 -0
  123. maxframe/dataframe/extensions/tests/test_extensions.py +38 -0
  124. maxframe/dataframe/fetch/__init__.py +15 -0
  125. maxframe/dataframe/fetch/core.py +86 -0
  126. maxframe/dataframe/groupby/__init__.py +82 -0
  127. maxframe/dataframe/groupby/aggregation.py +350 -0
  128. maxframe/dataframe/groupby/apply.py +251 -0
  129. maxframe/dataframe/groupby/core.py +179 -0
  130. maxframe/dataframe/groupby/cum.py +124 -0
  131. maxframe/dataframe/groupby/fill.py +141 -0
  132. maxframe/dataframe/groupby/getitem.py +92 -0
  133. maxframe/dataframe/groupby/head.py +105 -0
  134. maxframe/dataframe/groupby/sample.py +214 -0
  135. maxframe/dataframe/groupby/tests/__init__.py +13 -0
  136. maxframe/dataframe/groupby/tests/test_groupby.py +374 -0
  137. maxframe/dataframe/groupby/transform.py +255 -0
  138. maxframe/dataframe/indexing/__init__.py +84 -0
  139. maxframe/dataframe/indexing/add_prefix_suffix.py +110 -0
  140. maxframe/dataframe/indexing/align.py +349 -0
  141. maxframe/dataframe/indexing/at.py +83 -0
  142. maxframe/dataframe/indexing/getitem.py +204 -0
  143. maxframe/dataframe/indexing/iat.py +37 -0
  144. maxframe/dataframe/indexing/iloc.py +566 -0
  145. maxframe/dataframe/indexing/insert.py +86 -0
  146. maxframe/dataframe/indexing/loc.py +411 -0
  147. maxframe/dataframe/indexing/reindex.py +526 -0
  148. maxframe/dataframe/indexing/rename.py +462 -0
  149. maxframe/dataframe/indexing/rename_axis.py +209 -0
  150. maxframe/dataframe/indexing/reset_index.py +402 -0
  151. maxframe/dataframe/indexing/sample.py +221 -0
  152. maxframe/dataframe/indexing/set_axis.py +194 -0
  153. maxframe/dataframe/indexing/set_index.py +61 -0
  154. maxframe/dataframe/indexing/setitem.py +130 -0
  155. maxframe/dataframe/indexing/tests/__init__.py +13 -0
  156. maxframe/dataframe/indexing/tests/test_indexing.py +488 -0
  157. maxframe/dataframe/indexing/where.py +308 -0
  158. maxframe/dataframe/initializer.py +288 -0
  159. maxframe/dataframe/merge/__init__.py +32 -0
  160. maxframe/dataframe/merge/append.py +121 -0
  161. maxframe/dataframe/merge/concat.py +325 -0
  162. maxframe/dataframe/merge/merge.py +593 -0
  163. maxframe/dataframe/merge/tests/__init__.py +13 -0
  164. maxframe/dataframe/merge/tests/test_merge.py +215 -0
  165. maxframe/dataframe/misc/__init__.py +134 -0
  166. maxframe/dataframe/misc/_duplicate.py +46 -0
  167. maxframe/dataframe/misc/accessor.py +276 -0
  168. maxframe/dataframe/misc/apply.py +692 -0
  169. maxframe/dataframe/misc/astype.py +236 -0
  170. maxframe/dataframe/misc/case_when.py +141 -0
  171. maxframe/dataframe/misc/check_monotonic.py +84 -0
  172. maxframe/dataframe/misc/cut.py +383 -0
  173. maxframe/dataframe/misc/datetimes.py +79 -0
  174. maxframe/dataframe/misc/describe.py +108 -0
  175. maxframe/dataframe/misc/diff.py +210 -0
  176. maxframe/dataframe/misc/drop.py +440 -0
  177. maxframe/dataframe/misc/drop_duplicates.py +248 -0
  178. maxframe/dataframe/misc/duplicated.py +292 -0
  179. maxframe/dataframe/misc/eval.py +728 -0
  180. maxframe/dataframe/misc/explode.py +171 -0
  181. maxframe/dataframe/misc/get_dummies.py +208 -0
  182. maxframe/dataframe/misc/isin.py +217 -0
  183. maxframe/dataframe/misc/map.py +236 -0
  184. maxframe/dataframe/misc/melt.py +162 -0
  185. maxframe/dataframe/misc/memory_usage.py +248 -0
  186. maxframe/dataframe/misc/pct_change.py +150 -0
  187. maxframe/dataframe/misc/pivot_table.py +262 -0
  188. maxframe/dataframe/misc/qcut.py +104 -0
  189. maxframe/dataframe/misc/select_dtypes.py +104 -0
  190. maxframe/dataframe/misc/shift.py +256 -0
  191. maxframe/dataframe/misc/stack.py +238 -0
  192. maxframe/dataframe/misc/string_.py +221 -0
  193. maxframe/dataframe/misc/tests/__init__.py +13 -0
  194. maxframe/dataframe/misc/tests/test_misc.py +468 -0
  195. maxframe/dataframe/misc/to_numeric.py +178 -0
  196. maxframe/dataframe/misc/transform.py +361 -0
  197. maxframe/dataframe/misc/transpose.py +136 -0
  198. maxframe/dataframe/misc/value_counts.py +182 -0
  199. maxframe/dataframe/missing/__init__.py +53 -0
  200. maxframe/dataframe/missing/checkna.py +223 -0
  201. maxframe/dataframe/missing/dropna.py +280 -0
  202. maxframe/dataframe/missing/fillna.py +275 -0
  203. maxframe/dataframe/missing/replace.py +439 -0
  204. maxframe/dataframe/missing/tests/__init__.py +13 -0
  205. maxframe/dataframe/missing/tests/test_missing.py +89 -0
  206. maxframe/dataframe/operators.py +273 -0
  207. maxframe/dataframe/plotting/__init__.py +40 -0
  208. maxframe/dataframe/plotting/core.py +78 -0
  209. maxframe/dataframe/plotting/tests/__init__.py +13 -0
  210. maxframe/dataframe/plotting/tests/test_plotting.py +136 -0
  211. maxframe/dataframe/reduction/__init__.py +107 -0
  212. maxframe/dataframe/reduction/aggregation.py +344 -0
  213. maxframe/dataframe/reduction/all.py +78 -0
  214. maxframe/dataframe/reduction/any.py +78 -0
  215. maxframe/dataframe/reduction/core.py +837 -0
  216. maxframe/dataframe/reduction/count.py +59 -0
  217. maxframe/dataframe/reduction/cummax.py +30 -0
  218. maxframe/dataframe/reduction/cummin.py +30 -0
  219. maxframe/dataframe/reduction/cumprod.py +30 -0
  220. maxframe/dataframe/reduction/cumsum.py +30 -0
  221. maxframe/dataframe/reduction/custom_reduction.py +42 -0
  222. maxframe/dataframe/reduction/kurtosis.py +104 -0
  223. maxframe/dataframe/reduction/max.py +65 -0
  224. maxframe/dataframe/reduction/mean.py +61 -0
  225. maxframe/dataframe/reduction/min.py +65 -0
  226. maxframe/dataframe/reduction/nunique.py +141 -0
  227. maxframe/dataframe/reduction/prod.py +76 -0
  228. maxframe/dataframe/reduction/reduction_size.py +36 -0
  229. maxframe/dataframe/reduction/sem.py +69 -0
  230. maxframe/dataframe/reduction/skew.py +89 -0
  231. maxframe/dataframe/reduction/std.py +53 -0
  232. maxframe/dataframe/reduction/str_concat.py +48 -0
  233. maxframe/dataframe/reduction/sum.py +77 -0
  234. maxframe/dataframe/reduction/tests/__init__.py +13 -0
  235. maxframe/dataframe/reduction/tests/test_reduction.py +486 -0
  236. maxframe/dataframe/reduction/unique.py +90 -0
  237. maxframe/dataframe/reduction/var.py +72 -0
  238. maxframe/dataframe/sort/__init__.py +34 -0
  239. maxframe/dataframe/sort/core.py +36 -0
  240. maxframe/dataframe/sort/sort_index.py +153 -0
  241. maxframe/dataframe/sort/sort_values.py +311 -0
  242. maxframe/dataframe/sort/tests/__init__.py +13 -0
  243. maxframe/dataframe/sort/tests/test_sort.py +81 -0
  244. maxframe/dataframe/statistics/__init__.py +33 -0
  245. maxframe/dataframe/statistics/corr.py +280 -0
  246. maxframe/dataframe/statistics/quantile.py +341 -0
  247. maxframe/dataframe/statistics/tests/__init__.py +13 -0
  248. maxframe/dataframe/statistics/tests/test_statistics.py +82 -0
  249. maxframe/dataframe/tests/__init__.py +13 -0
  250. maxframe/dataframe/tests/test_initializer.py +29 -0
  251. maxframe/dataframe/tseries/__init__.py +13 -0
  252. maxframe/dataframe/tseries/tests/__init__.py +13 -0
  253. maxframe/dataframe/tseries/tests/test_tseries.py +30 -0
  254. maxframe/dataframe/tseries/to_datetime.py +297 -0
  255. maxframe/dataframe/ufunc/__init__.py +27 -0
  256. maxframe/dataframe/ufunc/tensor.py +54 -0
  257. maxframe/dataframe/ufunc/ufunc.py +52 -0
  258. maxframe/dataframe/utils.py +1267 -0
  259. maxframe/dataframe/window/__init__.py +29 -0
  260. maxframe/dataframe/window/aggregation.py +96 -0
  261. maxframe/dataframe/window/core.py +69 -0
  262. maxframe/dataframe/window/ewm.py +249 -0
  263. maxframe/dataframe/window/expanding.py +147 -0
  264. maxframe/dataframe/window/rolling.py +376 -0
  265. maxframe/dataframe/window/tests/__init__.py +13 -0
  266. maxframe/dataframe/window/tests/test_ewm.py +70 -0
  267. maxframe/dataframe/window/tests/test_expanding.py +66 -0
  268. maxframe/dataframe/window/tests/test_rolling.py +57 -0
  269. maxframe/env.py +33 -0
  270. maxframe/errors.py +21 -0
  271. maxframe/extension.py +81 -0
  272. maxframe/learn/__init__.py +17 -0
  273. maxframe/learn/contrib/__init__.py +17 -0
  274. maxframe/learn/contrib/pytorch/__init__.py +16 -0
  275. maxframe/learn/contrib/pytorch/run_function.py +110 -0
  276. maxframe/learn/contrib/pytorch/run_script.py +102 -0
  277. maxframe/learn/contrib/pytorch/tests/__init__.py +13 -0
  278. maxframe/learn/contrib/pytorch/tests/test_pytorch.py +42 -0
  279. maxframe/learn/contrib/utils.py +52 -0
  280. maxframe/learn/contrib/xgboost/__init__.py +26 -0
  281. maxframe/learn/contrib/xgboost/classifier.py +86 -0
  282. maxframe/learn/contrib/xgboost/core.py +156 -0
  283. maxframe/learn/contrib/xgboost/dmatrix.py +150 -0
  284. maxframe/learn/contrib/xgboost/predict.py +138 -0
  285. maxframe/learn/contrib/xgboost/regressor.py +78 -0
  286. maxframe/learn/contrib/xgboost/tests/__init__.py +13 -0
  287. maxframe/learn/contrib/xgboost/tests/test_core.py +43 -0
  288. maxframe/learn/contrib/xgboost/train.py +121 -0
  289. maxframe/learn/utils/__init__.py +15 -0
  290. maxframe/learn/utils/core.py +29 -0
  291. maxframe/lib/__init__.py +15 -0
  292. maxframe/lib/aio/__init__.py +27 -0
  293. maxframe/lib/aio/_runners.py +162 -0
  294. maxframe/lib/aio/_threads.py +35 -0
  295. maxframe/lib/aio/base.py +82 -0
  296. maxframe/lib/aio/file.py +85 -0
  297. maxframe/lib/aio/isolation.py +100 -0
  298. maxframe/lib/aio/lru.py +242 -0
  299. maxframe/lib/aio/parallelism.py +37 -0
  300. maxframe/lib/aio/tests/__init__.py +13 -0
  301. maxframe/lib/aio/tests/test_aio_file.py +55 -0
  302. maxframe/lib/compression.py +55 -0
  303. maxframe/lib/cython/__init__.py +13 -0
  304. maxframe/lib/cython/libcpp.pxd +30 -0
  305. maxframe/lib/filesystem/__init__.py +21 -0
  306. maxframe/lib/filesystem/_glob.py +173 -0
  307. maxframe/lib/filesystem/_oss_lib/__init__.py +13 -0
  308. maxframe/lib/filesystem/_oss_lib/common.py +198 -0
  309. maxframe/lib/filesystem/_oss_lib/glob.py +147 -0
  310. maxframe/lib/filesystem/_oss_lib/handle.py +156 -0
  311. maxframe/lib/filesystem/arrow.py +236 -0
  312. maxframe/lib/filesystem/base.py +263 -0
  313. maxframe/lib/filesystem/core.py +95 -0
  314. maxframe/lib/filesystem/fsmap.py +164 -0
  315. maxframe/lib/filesystem/hdfs.py +31 -0
  316. maxframe/lib/filesystem/local.py +112 -0
  317. maxframe/lib/filesystem/oss.py +157 -0
  318. maxframe/lib/filesystem/tests/__init__.py +13 -0
  319. maxframe/lib/filesystem/tests/test_filesystem.py +223 -0
  320. maxframe/lib/filesystem/tests/test_oss.py +182 -0
  321. maxframe/lib/functools_compat.py +81 -0
  322. maxframe/lib/mmh3.cpython-38-darwin.so +0 -0
  323. maxframe/lib/mmh3_src/MurmurHash3.cpp +339 -0
  324. maxframe/lib/mmh3_src/MurmurHash3.h +43 -0
  325. maxframe/lib/mmh3_src/mmh3module.cpp +387 -0
  326. maxframe/lib/sparse/__init__.py +861 -0
  327. maxframe/lib/sparse/array.py +1604 -0
  328. maxframe/lib/sparse/core.py +92 -0
  329. maxframe/lib/sparse/matrix.py +241 -0
  330. maxframe/lib/sparse/tests/__init__.py +15 -0
  331. maxframe/lib/sparse/tests/test_sparse.py +476 -0
  332. maxframe/lib/sparse/vector.py +150 -0
  333. maxframe/lib/tblib/LICENSE +20 -0
  334. maxframe/lib/tblib/__init__.py +327 -0
  335. maxframe/lib/tblib/cpython.py +83 -0
  336. maxframe/lib/tblib/decorators.py +44 -0
  337. maxframe/lib/tblib/pickling_support.py +90 -0
  338. maxframe/lib/tests/__init__.py +13 -0
  339. maxframe/lib/tests/test_wrapped_pickle.py +51 -0
  340. maxframe/lib/version.py +620 -0
  341. maxframe/lib/wrapped_pickle.py +139 -0
  342. maxframe/mixin.py +100 -0
  343. maxframe/odpsio/__init__.py +21 -0
  344. maxframe/odpsio/arrow.py +91 -0
  345. maxframe/odpsio/schema.py +364 -0
  346. maxframe/odpsio/tableio.py +322 -0
  347. maxframe/odpsio/tests/__init__.py +13 -0
  348. maxframe/odpsio/tests/test_arrow.py +88 -0
  349. maxframe/odpsio/tests/test_schema.py +297 -0
  350. maxframe/odpsio/tests/test_tableio.py +136 -0
  351. maxframe/odpsio/tests/test_volumeio.py +90 -0
  352. maxframe/odpsio/volumeio.py +95 -0
  353. maxframe/opcodes.py +590 -0
  354. maxframe/protocol.py +415 -0
  355. maxframe/remote/__init__.py +18 -0
  356. maxframe/remote/core.py +210 -0
  357. maxframe/remote/run_script.py +121 -0
  358. maxframe/serialization/__init__.py +26 -0
  359. maxframe/serialization/arrow.py +95 -0
  360. maxframe/serialization/core.cpython-38-darwin.so +0 -0
  361. maxframe/serialization/core.pxd +44 -0
  362. maxframe/serialization/core.pyi +61 -0
  363. maxframe/serialization/core.pyx +1094 -0
  364. maxframe/serialization/exception.py +86 -0
  365. maxframe/serialization/maxframe_objects.py +39 -0
  366. maxframe/serialization/numpy.py +91 -0
  367. maxframe/serialization/pandas.py +202 -0
  368. maxframe/serialization/scipy.py +71 -0
  369. maxframe/serialization/serializables/__init__.py +55 -0
  370. maxframe/serialization/serializables/core.py +262 -0
  371. maxframe/serialization/serializables/field.py +624 -0
  372. maxframe/serialization/serializables/field_type.py +589 -0
  373. maxframe/serialization/serializables/tests/__init__.py +13 -0
  374. maxframe/serialization/serializables/tests/test_field_type.py +121 -0
  375. maxframe/serialization/serializables/tests/test_serializable.py +250 -0
  376. maxframe/serialization/tests/__init__.py +13 -0
  377. maxframe/serialization/tests/test_serial.py +412 -0
  378. maxframe/session.py +1310 -0
  379. maxframe/tensor/__init__.py +183 -0
  380. maxframe/tensor/arithmetic/__init__.py +315 -0
  381. maxframe/tensor/arithmetic/abs.py +68 -0
  382. maxframe/tensor/arithmetic/absolute.py +68 -0
  383. maxframe/tensor/arithmetic/add.py +82 -0
  384. maxframe/tensor/arithmetic/angle.py +72 -0
  385. maxframe/tensor/arithmetic/arccos.py +104 -0
  386. maxframe/tensor/arithmetic/arccosh.py +91 -0
  387. maxframe/tensor/arithmetic/arcsin.py +94 -0
  388. maxframe/tensor/arithmetic/arcsinh.py +86 -0
  389. maxframe/tensor/arithmetic/arctan.py +106 -0
  390. maxframe/tensor/arithmetic/arctan2.py +128 -0
  391. maxframe/tensor/arithmetic/arctanh.py +86 -0
  392. maxframe/tensor/arithmetic/around.py +114 -0
  393. maxframe/tensor/arithmetic/bitand.py +95 -0
  394. maxframe/tensor/arithmetic/bitor.py +102 -0
  395. maxframe/tensor/arithmetic/bitxor.py +95 -0
  396. maxframe/tensor/arithmetic/cbrt.py +66 -0
  397. maxframe/tensor/arithmetic/ceil.py +71 -0
  398. maxframe/tensor/arithmetic/clip.py +165 -0
  399. maxframe/tensor/arithmetic/conj.py +74 -0
  400. maxframe/tensor/arithmetic/copysign.py +78 -0
  401. maxframe/tensor/arithmetic/core.py +544 -0
  402. maxframe/tensor/arithmetic/cos.py +85 -0
  403. maxframe/tensor/arithmetic/cosh.py +72 -0
  404. maxframe/tensor/arithmetic/deg2rad.py +72 -0
  405. maxframe/tensor/arithmetic/degrees.py +77 -0
  406. maxframe/tensor/arithmetic/divide.py +114 -0
  407. maxframe/tensor/arithmetic/equal.py +76 -0
  408. maxframe/tensor/arithmetic/exp.py +106 -0
  409. maxframe/tensor/arithmetic/exp2.py +67 -0
  410. maxframe/tensor/arithmetic/expm1.py +79 -0
  411. maxframe/tensor/arithmetic/fabs.py +74 -0
  412. maxframe/tensor/arithmetic/fix.py +69 -0
  413. maxframe/tensor/arithmetic/float_power.py +103 -0
  414. maxframe/tensor/arithmetic/floor.py +77 -0
  415. maxframe/tensor/arithmetic/floordiv.py +94 -0
  416. maxframe/tensor/arithmetic/fmax.py +105 -0
  417. maxframe/tensor/arithmetic/fmin.py +106 -0
  418. maxframe/tensor/arithmetic/fmod.py +99 -0
  419. maxframe/tensor/arithmetic/frexp.py +92 -0
  420. maxframe/tensor/arithmetic/greater.py +77 -0
  421. maxframe/tensor/arithmetic/greater_equal.py +69 -0
  422. maxframe/tensor/arithmetic/hypot.py +77 -0
  423. maxframe/tensor/arithmetic/i0.py +89 -0
  424. maxframe/tensor/arithmetic/imag.py +67 -0
  425. maxframe/tensor/arithmetic/invert.py +110 -0
  426. maxframe/tensor/arithmetic/isclose.py +115 -0
  427. maxframe/tensor/arithmetic/iscomplex.py +64 -0
  428. maxframe/tensor/arithmetic/isfinite.py +106 -0
  429. maxframe/tensor/arithmetic/isinf.py +103 -0
  430. maxframe/tensor/arithmetic/isnan.py +82 -0
  431. maxframe/tensor/arithmetic/isreal.py +63 -0
  432. maxframe/tensor/arithmetic/ldexp.py +99 -0
  433. maxframe/tensor/arithmetic/less.py +69 -0
  434. maxframe/tensor/arithmetic/less_equal.py +69 -0
  435. maxframe/tensor/arithmetic/log.py +92 -0
  436. maxframe/tensor/arithmetic/log10.py +85 -0
  437. maxframe/tensor/arithmetic/log1p.py +95 -0
  438. maxframe/tensor/arithmetic/log2.py +85 -0
  439. maxframe/tensor/arithmetic/logaddexp.py +80 -0
  440. maxframe/tensor/arithmetic/logaddexp2.py +78 -0
  441. maxframe/tensor/arithmetic/logical_and.py +81 -0
  442. maxframe/tensor/arithmetic/logical_not.py +74 -0
  443. maxframe/tensor/arithmetic/logical_or.py +82 -0
  444. maxframe/tensor/arithmetic/logical_xor.py +88 -0
  445. maxframe/tensor/arithmetic/lshift.py +82 -0
  446. maxframe/tensor/arithmetic/maximum.py +108 -0
  447. maxframe/tensor/arithmetic/minimum.py +108 -0
  448. maxframe/tensor/arithmetic/mod.py +104 -0
  449. maxframe/tensor/arithmetic/modf.py +83 -0
  450. maxframe/tensor/arithmetic/multiply.py +81 -0
  451. maxframe/tensor/arithmetic/nan_to_num.py +99 -0
  452. maxframe/tensor/arithmetic/negative.py +65 -0
  453. maxframe/tensor/arithmetic/nextafter.py +68 -0
  454. maxframe/tensor/arithmetic/not_equal.py +72 -0
  455. maxframe/tensor/arithmetic/positive.py +47 -0
  456. maxframe/tensor/arithmetic/power.py +106 -0
  457. maxframe/tensor/arithmetic/rad2deg.py +71 -0
  458. maxframe/tensor/arithmetic/radians.py +77 -0
  459. maxframe/tensor/arithmetic/real.py +70 -0
  460. maxframe/tensor/arithmetic/reciprocal.py +76 -0
  461. maxframe/tensor/arithmetic/rint.py +68 -0
  462. maxframe/tensor/arithmetic/rshift.py +81 -0
  463. maxframe/tensor/arithmetic/setimag.py +29 -0
  464. maxframe/tensor/arithmetic/setreal.py +29 -0
  465. maxframe/tensor/arithmetic/sign.py +81 -0
  466. maxframe/tensor/arithmetic/signbit.py +65 -0
  467. maxframe/tensor/arithmetic/sin.py +98 -0
  468. maxframe/tensor/arithmetic/sinc.py +102 -0
  469. maxframe/tensor/arithmetic/sinh.py +93 -0
  470. maxframe/tensor/arithmetic/spacing.py +72 -0
  471. maxframe/tensor/arithmetic/sqrt.py +81 -0
  472. maxframe/tensor/arithmetic/square.py +69 -0
  473. maxframe/tensor/arithmetic/subtract.py +81 -0
  474. maxframe/tensor/arithmetic/tan.py +88 -0
  475. maxframe/tensor/arithmetic/tanh.py +92 -0
  476. maxframe/tensor/arithmetic/tests/__init__.py +15 -0
  477. maxframe/tensor/arithmetic/tests/test_arithmetic.py +414 -0
  478. maxframe/tensor/arithmetic/truediv.py +104 -0
  479. maxframe/tensor/arithmetic/trunc.py +72 -0
  480. maxframe/tensor/arithmetic/utils.py +65 -0
  481. maxframe/tensor/array_utils.py +186 -0
  482. maxframe/tensor/base/__init__.py +34 -0
  483. maxframe/tensor/base/astype.py +119 -0
  484. maxframe/tensor/base/atleast_1d.py +74 -0
  485. maxframe/tensor/base/broadcast_to.py +89 -0
  486. maxframe/tensor/base/ravel.py +92 -0
  487. maxframe/tensor/base/tests/__init__.py +13 -0
  488. maxframe/tensor/base/tests/test_base.py +114 -0
  489. maxframe/tensor/base/transpose.py +125 -0
  490. maxframe/tensor/base/unique.py +205 -0
  491. maxframe/tensor/base/where.py +127 -0
  492. maxframe/tensor/core.py +724 -0
  493. maxframe/tensor/datasource/__init__.py +32 -0
  494. maxframe/tensor/datasource/arange.py +156 -0
  495. maxframe/tensor/datasource/array.py +415 -0
  496. maxframe/tensor/datasource/core.py +109 -0
  497. maxframe/tensor/datasource/empty.py +169 -0
  498. maxframe/tensor/datasource/from_dataframe.py +70 -0
  499. maxframe/tensor/datasource/from_dense.py +54 -0
  500. maxframe/tensor/datasource/from_sparse.py +47 -0
  501. maxframe/tensor/datasource/full.py +186 -0
  502. maxframe/tensor/datasource/ones.py +173 -0
  503. maxframe/tensor/datasource/scalar.py +40 -0
  504. maxframe/tensor/datasource/tests/__init__.py +13 -0
  505. maxframe/tensor/datasource/tests/test_datasource.py +278 -0
  506. maxframe/tensor/datasource/zeros.py +188 -0
  507. maxframe/tensor/fetch/__init__.py +15 -0
  508. maxframe/tensor/fetch/core.py +54 -0
  509. maxframe/tensor/indexing/__init__.py +47 -0
  510. maxframe/tensor/indexing/choose.py +196 -0
  511. maxframe/tensor/indexing/compress.py +124 -0
  512. maxframe/tensor/indexing/core.py +190 -0
  513. maxframe/tensor/indexing/extract.py +71 -0
  514. maxframe/tensor/indexing/fill_diagonal.py +183 -0
  515. maxframe/tensor/indexing/flatnonzero.py +60 -0
  516. maxframe/tensor/indexing/getitem.py +175 -0
  517. maxframe/tensor/indexing/nonzero.py +120 -0
  518. maxframe/tensor/indexing/setitem.py +132 -0
  519. maxframe/tensor/indexing/slice.py +29 -0
  520. maxframe/tensor/indexing/take.py +130 -0
  521. maxframe/tensor/indexing/tests/__init__.py +15 -0
  522. maxframe/tensor/indexing/tests/test_indexing.py +234 -0
  523. maxframe/tensor/indexing/unravel_index.py +103 -0
  524. maxframe/tensor/merge/__init__.py +15 -0
  525. maxframe/tensor/merge/stack.py +132 -0
  526. maxframe/tensor/merge/tests/__init__.py +13 -0
  527. maxframe/tensor/merge/tests/test_merge.py +52 -0
  528. maxframe/tensor/operators.py +123 -0
  529. maxframe/tensor/random/__init__.py +168 -0
  530. maxframe/tensor/random/beta.py +87 -0
  531. maxframe/tensor/random/binomial.py +137 -0
  532. maxframe/tensor/random/bytes.py +39 -0
  533. maxframe/tensor/random/chisquare.py +110 -0
  534. maxframe/tensor/random/choice.py +186 -0
  535. maxframe/tensor/random/core.py +234 -0
  536. maxframe/tensor/random/dirichlet.py +123 -0
  537. maxframe/tensor/random/exponential.py +94 -0
  538. maxframe/tensor/random/f.py +135 -0
  539. maxframe/tensor/random/gamma.py +128 -0
  540. maxframe/tensor/random/geometric.py +93 -0
  541. maxframe/tensor/random/gumbel.py +167 -0
  542. maxframe/tensor/random/hypergeometric.py +148 -0
  543. maxframe/tensor/random/laplace.py +133 -0
  544. maxframe/tensor/random/logistic.py +129 -0
  545. maxframe/tensor/random/lognormal.py +159 -0
  546. maxframe/tensor/random/logseries.py +122 -0
  547. maxframe/tensor/random/multinomial.py +133 -0
  548. maxframe/tensor/random/multivariate_normal.py +192 -0
  549. maxframe/tensor/random/negative_binomial.py +125 -0
  550. maxframe/tensor/random/noncentral_chisquare.py +132 -0
  551. maxframe/tensor/random/noncentral_f.py +126 -0
  552. maxframe/tensor/random/normal.py +143 -0
  553. maxframe/tensor/random/pareto.py +140 -0
  554. maxframe/tensor/random/permutation.py +104 -0
  555. maxframe/tensor/random/poisson.py +111 -0
  556. maxframe/tensor/random/power.py +142 -0
  557. maxframe/tensor/random/rand.py +82 -0
  558. maxframe/tensor/random/randint.py +121 -0
  559. maxframe/tensor/random/randn.py +96 -0
  560. maxframe/tensor/random/random_integers.py +123 -0
  561. maxframe/tensor/random/random_sample.py +86 -0
  562. maxframe/tensor/random/rayleigh.py +110 -0
  563. maxframe/tensor/random/shuffle.py +61 -0
  564. maxframe/tensor/random/standard_cauchy.py +105 -0
  565. maxframe/tensor/random/standard_exponential.py +72 -0
  566. maxframe/tensor/random/standard_gamma.py +120 -0
  567. maxframe/tensor/random/standard_normal.py +74 -0
  568. maxframe/tensor/random/standard_t.py +135 -0
  569. maxframe/tensor/random/tests/__init__.py +15 -0
  570. maxframe/tensor/random/tests/test_random.py +167 -0
  571. maxframe/tensor/random/triangular.py +119 -0
  572. maxframe/tensor/random/uniform.py +131 -0
  573. maxframe/tensor/random/vonmises.py +131 -0
  574. maxframe/tensor/random/wald.py +114 -0
  575. maxframe/tensor/random/weibull.py +140 -0
  576. maxframe/tensor/random/zipf.py +122 -0
  577. maxframe/tensor/rechunk/__init__.py +26 -0
  578. maxframe/tensor/rechunk/rechunk.py +43 -0
  579. maxframe/tensor/reduction/__init__.py +66 -0
  580. maxframe/tensor/reduction/all.py +103 -0
  581. maxframe/tensor/reduction/allclose.py +88 -0
  582. maxframe/tensor/reduction/any.py +105 -0
  583. maxframe/tensor/reduction/argmax.py +103 -0
  584. maxframe/tensor/reduction/argmin.py +103 -0
  585. maxframe/tensor/reduction/array_equal.py +64 -0
  586. maxframe/tensor/reduction/core.py +168 -0
  587. maxframe/tensor/reduction/count_nonzero.py +81 -0
  588. maxframe/tensor/reduction/cumprod.py +97 -0
  589. maxframe/tensor/reduction/cumsum.py +101 -0
  590. maxframe/tensor/reduction/max.py +120 -0
  591. maxframe/tensor/reduction/mean.py +123 -0
  592. maxframe/tensor/reduction/min.py +120 -0
  593. maxframe/tensor/reduction/nanargmax.py +82 -0
  594. maxframe/tensor/reduction/nanargmin.py +76 -0
  595. maxframe/tensor/reduction/nancumprod.py +91 -0
  596. maxframe/tensor/reduction/nancumsum.py +94 -0
  597. maxframe/tensor/reduction/nanmax.py +111 -0
  598. maxframe/tensor/reduction/nanmean.py +106 -0
  599. maxframe/tensor/reduction/nanmin.py +111 -0
  600. maxframe/tensor/reduction/nanprod.py +94 -0
  601. maxframe/tensor/reduction/nanstd.py +126 -0
  602. maxframe/tensor/reduction/nansum.py +115 -0
  603. maxframe/tensor/reduction/nanvar.py +149 -0
  604. maxframe/tensor/reduction/prod.py +130 -0
  605. maxframe/tensor/reduction/std.py +134 -0
  606. maxframe/tensor/reduction/sum.py +125 -0
  607. maxframe/tensor/reduction/tests/__init__.py +13 -0
  608. maxframe/tensor/reduction/tests/test_reduction.py +181 -0
  609. maxframe/tensor/reduction/var.py +176 -0
  610. maxframe/tensor/reshape/__init__.py +17 -0
  611. maxframe/tensor/reshape/reshape.py +188 -0
  612. maxframe/tensor/reshape/tests/__init__.py +15 -0
  613. maxframe/tensor/reshape/tests/test_reshape.py +37 -0
  614. maxframe/tensor/statistics/__init__.py +13 -0
  615. maxframe/tensor/statistics/percentile.py +175 -0
  616. maxframe/tensor/statistics/quantile.py +288 -0
  617. maxframe/tensor/ufunc/__init__.py +26 -0
  618. maxframe/tensor/ufunc/ufunc.py +200 -0
  619. maxframe/tensor/utils.py +718 -0
  620. maxframe/tests/__init__.py +13 -0
  621. maxframe/tests/test_codegen.py +69 -0
  622. maxframe/tests/test_protocol.py +144 -0
  623. maxframe/tests/test_utils.py +376 -0
  624. maxframe/tests/utils.py +164 -0
  625. maxframe/typing_.py +37 -0
  626. maxframe/udf.py +134 -0
  627. maxframe/utils.py +1114 -0
  628. maxframe-0.1.0b5.dist-info/METADATA +104 -0
  629. maxframe-0.1.0b5.dist-info/RECORD +647 -0
  630. maxframe-0.1.0b5.dist-info/WHEEL +5 -0
  631. maxframe-0.1.0b5.dist-info/top_level.txt +2 -0
  632. maxframe_client/__init__.py +17 -0
  633. maxframe_client/clients/__init__.py +13 -0
  634. maxframe_client/clients/framedriver.py +118 -0
  635. maxframe_client/clients/spe.py +104 -0
  636. maxframe_client/conftest.py +15 -0
  637. maxframe_client/fetcher.py +264 -0
  638. maxframe_client/session/__init__.py +22 -0
  639. maxframe_client/session/consts.py +36 -0
  640. maxframe_client/session/graph.py +119 -0
  641. maxframe_client/session/odps.py +482 -0
  642. maxframe_client/session/task.py +280 -0
  643. maxframe_client/session/tests/__init__.py +13 -0
  644. maxframe_client/session/tests/test_task.py +85 -0
  645. maxframe_client/tests/__init__.py +13 -0
  646. maxframe_client/tests/test_fetcher.py +89 -0
  647. maxframe_client/tests/test_session.py +255 -0
@@ -0,0 +1,692 @@
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 inspect
16
+ from typing import Any, Union
17
+
18
+ import numpy as np
19
+ import pandas as pd
20
+ from pandas import DataFrame, Series
21
+
22
+ from ... import opcodes
23
+ from ...core import OutputType
24
+ from ...core.operator import OperatorLogicKeyGeneratorMixin
25
+ from ...serialization.serializables import (
26
+ AnyField,
27
+ BoolField,
28
+ DictField,
29
+ FunctionField,
30
+ StringField,
31
+ TupleField,
32
+ )
33
+ from ...utils import get_func_token, quiet_stdio, tokenize
34
+ from ..operators import DataFrameOperator, DataFrameOperatorMixin
35
+ from ..utils import (
36
+ build_df,
37
+ build_series,
38
+ make_dtype,
39
+ make_dtypes,
40
+ pack_func_args,
41
+ parse_index,
42
+ validate_axis,
43
+ validate_output_types,
44
+ )
45
+
46
+
47
+ class ApplyOperandLogicKeyGeneratorMixin(OperatorLogicKeyGeneratorMixin):
48
+ def _get_logic_key_token_values(self):
49
+ token_values = super()._get_logic_key_token_values() + [
50
+ self.axis,
51
+ self.convert_dtype,
52
+ self.raw,
53
+ self.result_type,
54
+ self.elementwise,
55
+ ]
56
+ if self.func:
57
+ return token_values + [get_func_token(self.func)]
58
+ else: # pragma: no cover
59
+ return token_values
60
+
61
+
62
+ class ApplyOperator(
63
+ DataFrameOperator, DataFrameOperatorMixin, ApplyOperandLogicKeyGeneratorMixin
64
+ ):
65
+ _op_type_ = opcodes.APPLY
66
+
67
+ func = FunctionField("func")
68
+ axis = AnyField("axis", default=0)
69
+ convert_dtype = BoolField("convert_dtype", default=True)
70
+ raw = BoolField("raw", default=False)
71
+ result_type = StringField("result_type", default=None)
72
+ elementwise = BoolField("elementwise")
73
+ logic_key = StringField("logic_key")
74
+ need_clean_up_func = BoolField("need_clean_up_func")
75
+ args = TupleField("args", default=())
76
+ kwds = DictField("kwds", default={})
77
+
78
+ def __init__(self, output_type=None, **kw):
79
+ if output_type:
80
+ kw["_output_types"] = [output_type]
81
+ super().__init__(**kw)
82
+
83
+ def _update_key(self):
84
+ values = [v for v in self._values_ if v is not self.func] + [
85
+ get_func_token(self.func)
86
+ ]
87
+ self._obj_set("_key", tokenize(type(self).__name__, *values))
88
+ return self
89
+
90
+ def _infer_df_func_returns(self, df, dtypes, dtype=None, name=None, index=None):
91
+ if isinstance(self.func, np.ufunc):
92
+ output_type = OutputType.dataframe
93
+ new_dtypes = None
94
+ index_value = "inherit"
95
+ new_elementwise = True
96
+ else:
97
+ if self.output_types is not None and (
98
+ dtypes is not None or dtype is not None
99
+ ):
100
+ ret_dtypes = dtypes if dtypes is not None else (name, dtype)
101
+ ret_index_value = parse_index(index) if index is not None else None
102
+ self.elementwise = False
103
+ return ret_dtypes, ret_index_value
104
+
105
+ output_type = new_dtypes = index_value = None
106
+ new_elementwise = False
107
+
108
+ try:
109
+ empty_df = build_df(df, size=2)
110
+ with np.errstate(all="ignore"), quiet_stdio():
111
+ infer_df = empty_df.apply(
112
+ self.func,
113
+ axis=self.axis,
114
+ raw=self.raw,
115
+ result_type=self.result_type,
116
+ args=self.args,
117
+ **self.kwds,
118
+ )
119
+ if index_value is None:
120
+ if infer_df.index is empty_df.index:
121
+ index_value = "inherit"
122
+ else:
123
+ index_value = parse_index(pd.RangeIndex(-1))
124
+
125
+ if isinstance(infer_df, pd.DataFrame):
126
+ output_type = output_type or OutputType.dataframe
127
+ new_dtypes = new_dtypes or infer_df.dtypes
128
+ else:
129
+ output_type = output_type or OutputType.series
130
+ new_dtypes = (name or infer_df.name, dtype or infer_df.dtype)
131
+ new_elementwise = False if new_elementwise is None else new_elementwise
132
+ except: # noqa: E722 # nosec
133
+ pass
134
+
135
+ self.output_types = (
136
+ [output_type]
137
+ if not self.output_types and output_type
138
+ else self.output_types
139
+ )
140
+ dtypes = new_dtypes if dtypes is None else dtypes
141
+ index_value = index_value if index is None else parse_index(index)
142
+ self.elementwise = (
143
+ new_elementwise if self.elementwise is None else self.elementwise
144
+ )
145
+ return dtypes, index_value
146
+
147
+ def _call_df_or_series(self, df):
148
+ return self.new_df_or_series([df])
149
+
150
+ def _call_dataframe(self, df, dtypes=None, dtype=None, name=None, index=None):
151
+ # for backward compatibility
152
+ dtype = dtype if dtype is not None else dtypes
153
+ dtypes, index_value = self._infer_df_func_returns(
154
+ df, dtypes, dtype=dtype, name=name, index=index
155
+ )
156
+ if index_value is None:
157
+ index_value = parse_index(None, (df.key, df.index_value.key))
158
+ for arg, desc in zip((self.output_types, dtypes), ("output_types", "dtypes")):
159
+ if arg is None:
160
+ raise TypeError(
161
+ f"Cannot determine {desc} by calculating with enumerate data, "
162
+ "please specify it as arguments"
163
+ )
164
+
165
+ if index_value == "inherit":
166
+ index_value = df.index_value
167
+
168
+ if self.elementwise:
169
+ shape = df.shape
170
+ elif self.output_types[0] == OutputType.dataframe:
171
+ shape = [np.nan, np.nan]
172
+ shape[1 - self.axis] = df.shape[1 - self.axis]
173
+ shape = tuple(shape)
174
+ else:
175
+ shape = (df.shape[1 - self.axis],)
176
+
177
+ if self.output_types[0] == OutputType.dataframe:
178
+ if self.axis == 0:
179
+ return self.new_dataframe(
180
+ [df],
181
+ shape=shape,
182
+ dtypes=dtypes,
183
+ index_value=index_value,
184
+ columns_value=parse_index(dtypes.index, store_data=True),
185
+ )
186
+ else:
187
+ return self.new_dataframe(
188
+ [df],
189
+ shape=shape,
190
+ dtypes=dtypes,
191
+ index_value=df.index_value,
192
+ columns_value=parse_index(dtypes.index, store_data=True),
193
+ )
194
+ else:
195
+ name, dtype = dtypes
196
+ return self.new_series(
197
+ [df], shape=shape, name=name, dtype=dtype, index_value=index_value
198
+ )
199
+
200
+ def _call_series(self, series, dtypes=None, dtype=None, name=None, index=None):
201
+ # for backward compatibility
202
+ dtype = dtype if dtype is not None else dtypes
203
+ if self.convert_dtype:
204
+ if self.output_types is not None and (
205
+ dtypes is not None or dtype is not None
206
+ ):
207
+ infer_series = test_series = None
208
+ else:
209
+ test_series = build_series(series, size=2, name=series.name)
210
+ try:
211
+ with np.errstate(all="ignore"), quiet_stdio():
212
+ infer_series = test_series.apply(
213
+ self.func, args=self.args, **self.kwds
214
+ )
215
+ except: # noqa: E722 # nosec # pylint: disable=bare-except
216
+ infer_series = None
217
+
218
+ output_type = self._output_types[0]
219
+
220
+ if index is not None:
221
+ index_value = parse_index(index)
222
+ elif infer_series is not None:
223
+ if infer_series.index is test_series.index:
224
+ index_value = series.index_value
225
+ else: # pragma: no cover
226
+ index_value = parse_index(infer_series.index)
227
+ else:
228
+ index_value = parse_index(series.index_value)
229
+
230
+ if output_type == OutputType.dataframe:
231
+ if dtypes is None:
232
+ if infer_series is not None and infer_series.ndim == 2:
233
+ dtypes = infer_series.dtypes
234
+ else:
235
+ raise TypeError(
236
+ "Cannot determine dtypes, "
237
+ "please specify `dtypes` as argument"
238
+ )
239
+ columns_value = parse_index(dtypes.index, store_data=True)
240
+
241
+ return self.new_dataframe(
242
+ [series],
243
+ shape=(series.shape[0], len(dtypes)),
244
+ index_value=index_value,
245
+ columns_value=columns_value,
246
+ dtypes=dtypes,
247
+ )
248
+ else:
249
+ if (
250
+ dtype is None
251
+ and infer_series is not None
252
+ and infer_series.ndim == 1
253
+ ):
254
+ dtype = infer_series.dtype
255
+ else:
256
+ dtype = dtype if dtype is not None else np.dtype(object)
257
+ if infer_series is not None and infer_series.ndim == 1:
258
+ name = name or infer_series.name
259
+ return self.new_series(
260
+ [series],
261
+ dtype=dtype,
262
+ shape=series.shape,
263
+ index_value=index_value,
264
+ name=name,
265
+ )
266
+ else:
267
+ dtype = dtype if dtype is not None else np.dtype("object")
268
+ return self.new_series(
269
+ [series],
270
+ dtype=dtype,
271
+ shape=series.shape,
272
+ index_value=series.index_value,
273
+ name=name,
274
+ )
275
+
276
+ def __call__(self, df_or_series, dtypes=None, dtype=None, name=None, index=None):
277
+ axis = getattr(self, "axis", None) or 0
278
+ dtypes = make_dtypes(dtypes)
279
+ dtype = make_dtype(dtype)
280
+ self.axis = validate_axis(axis, df_or_series)
281
+
282
+ if self.output_types and self.output_types[0] == OutputType.df_or_series:
283
+ return self._call_df_or_series(df_or_series)
284
+
285
+ if df_or_series.op.output_types[0] == OutputType.dataframe:
286
+ return self._call_dataframe(
287
+ df_or_series, dtypes=dtypes, dtype=dtype, name=name, index=index
288
+ )
289
+ else:
290
+ return self._call_series(
291
+ df_or_series, dtypes=dtypes, dtype=dtype, name=name, index=index
292
+ )
293
+
294
+ def _build_stub_pandas_obj(self, df_or_series) -> Union[DataFrame, Series]:
295
+ if self.output_types[0] == OutputType.dataframe:
296
+ return build_df(df_or_series, size=2)
297
+ return build_series(df_or_series, size=2, name=df_or_series.name)
298
+
299
+ def get_packed_funcs(self, df=None) -> Any:
300
+ stub_df = self._build_stub_pandas_obj(df or self.inputs[0])
301
+ return pack_func_args(stub_df, self.func, *self.args, **self.kwds)
302
+
303
+
304
+ def df_apply(
305
+ df,
306
+ func,
307
+ axis=0,
308
+ raw=False,
309
+ result_type=None,
310
+ args=(),
311
+ dtypes=None,
312
+ dtype=None,
313
+ name=None,
314
+ output_type=None,
315
+ index=None,
316
+ elementwise=None,
317
+ skip_infer=False,
318
+ **kwds,
319
+ ):
320
+ """
321
+ Apply a function along an axis of the DataFrame.
322
+
323
+ Objects passed to the function are Series objects whose index is
324
+ either the DataFrame's index (``axis=0``) or the DataFrame's columns
325
+ (``axis=1``). By default (``result_type=None``), the final return type
326
+ is inferred from the return type of the applied function. Otherwise,
327
+ it depends on the `result_type` argument.
328
+
329
+ Parameters
330
+ ----------
331
+ func : function
332
+ Function to apply to each column or row.
333
+ axis : {0 or 'index', 1 or 'columns'}, default 0
334
+ Axis along which the function is applied:
335
+
336
+ * 0 or 'index': apply function to each column.
337
+ * 1 or 'columns': apply function to each row.
338
+
339
+ raw : bool, default False
340
+ Determines if row or column is passed as a Series or ndarray object:
341
+
342
+ * ``False`` : passes each row or column as a Series to the
343
+ function.
344
+ * ``True`` : the passed function will receive ndarray objects
345
+ instead.
346
+ If you are just applying a NumPy reduction function this will
347
+ achieve much better performance.
348
+
349
+ result_type : {'expand', 'reduce', 'broadcast', None}, default None
350
+ These only act when ``axis=1`` (columns):
351
+
352
+ * 'expand' : list-like results will be turned into columns.
353
+ * 'reduce' : returns a Series if possible rather than expanding
354
+ list-like results. This is the opposite of 'expand'.
355
+ * 'broadcast' : results will be broadcast to the original shape
356
+ of the DataFrame, the original index and columns will be
357
+ retained.
358
+
359
+ The default behaviour (None) depends on the return value of the
360
+ applied function: list-like results will be returned as a Series
361
+ of those. However if the apply function returns a Series these
362
+ are expanded to columns.
363
+
364
+ output_type : {'dataframe', 'series'}, default None
365
+ Specify type of returned object. See `Notes` for more details.
366
+
367
+ dtypes : Series, default None
368
+ Specify dtypes of returned DataFrames. See `Notes` for more details.
369
+
370
+ dtype : numpy.dtype, default None
371
+ Specify dtype of returned Series. See `Notes` for more details.
372
+
373
+ name : str, default None
374
+ Specify name of returned Series. See `Notes` for more details.
375
+
376
+ index : Index, default None
377
+ Specify index of returned object. See `Notes` for more details.
378
+
379
+ elementwise : bool, default False
380
+ Specify whether ``func`` is an elementwise function:
381
+
382
+ * ``False`` : The function is not elementwise. MaxFrame will try
383
+ concatenating chunks in rows (when ``axis=0``) or in columns
384
+ (when ``axis=1``) and then apply ``func`` onto the concatenated
385
+ chunk. The concatenation step can cause extra latency.
386
+ * ``True`` : The function is elementwise. MaxFrame will apply
387
+ ``func`` to original chunks. This will not introduce extra
388
+ concatenation step and reduce overhead.
389
+
390
+ skip_infer: bool, default False
391
+ Whether infer dtypes when dtypes or output_type is not specified.
392
+
393
+ args : tuple
394
+ Positional arguments to pass to `func` in addition to the
395
+ array/series.
396
+
397
+ **kwds
398
+ Additional keyword arguments to pass as keywords arguments to
399
+ `func`.
400
+
401
+ Returns
402
+ -------
403
+ Series or DataFrame
404
+ Result of applying ``func`` along the given axis of the
405
+ DataFrame.
406
+
407
+ See Also
408
+ --------
409
+ DataFrame.applymap: For elementwise operations.
410
+ DataFrame.aggregate: Only perform aggregating type operations.
411
+ DataFrame.transform: Only perform transforming type operations.
412
+
413
+ Notes
414
+ -----
415
+ When deciding output dtypes and shape of the return value, MaxFrame will
416
+ try applying ``func`` onto a mock DataFrame, and the apply call may
417
+ fail. When this happens, you need to specify the type of apply call
418
+ (DataFrame or Series) in output_type.
419
+
420
+ * For DataFrame output, you need to specify a list or a pandas Series
421
+ as ``dtypes`` of output DataFrame. ``index`` of output can also be
422
+ specified.
423
+ * For Series output, you need to specify ``dtype`` and ``name`` of
424
+ output Series.
425
+
426
+ Examples
427
+ --------
428
+ >>> import numpy as np
429
+ >>> import maxframe.tensor as mt
430
+ >>> import maxframe.dataframe as md
431
+ >>> df = md.DataFrame([[4, 9]] * 3, columns=['A', 'B'])
432
+ >>> df.execute()
433
+ A B
434
+ 0 4 9
435
+ 1 4 9
436
+ 2 4 9
437
+
438
+ Using a reducing function on either axis
439
+
440
+ >>> df.apply(np.sum, axis=0).execute()
441
+ A 12
442
+ B 27
443
+ dtype: int64
444
+
445
+ >>> df.apply(np.sum, axis=1).execute()
446
+ 0 13
447
+ 1 13
448
+ 2 13
449
+ dtype: int64
450
+
451
+ Returning a list-like will result in a Series
452
+
453
+ >>> df.apply(lambda x: [1, 2], axis=1).execute()
454
+ 0 [1, 2]
455
+ 1 [1, 2]
456
+ 2 [1, 2]
457
+ dtype: object
458
+
459
+ Passing ``result_type='expand'`` will expand list-like results
460
+ to columns of a Dataframe
461
+
462
+ >>> df.apply(lambda x: [1, 2], axis=1, result_type='expand').execute()
463
+ 0 1
464
+ 0 1 2
465
+ 1 1 2
466
+ 2 1 2
467
+
468
+ Returning a Series inside the function is similar to passing
469
+ ``result_type='expand'``. The resulting column names
470
+ will be the Series index.
471
+
472
+ >>> df.apply(lambda x: md.Series([1, 2], index=['foo', 'bar']), axis=1).execute()
473
+ foo bar
474
+ 0 1 2
475
+ 1 1 2
476
+ 2 1 2
477
+
478
+ Passing ``result_type='broadcast'`` will ensure the same shape
479
+ result, whether list-like or scalar is returned by the function,
480
+ and broadcast it along the axis. The resulting column names will
481
+ be the originals.
482
+
483
+ >>> df.apply(lambda x: [1, 2], axis=1, result_type='broadcast').execute()
484
+ A B
485
+ 0 1 2
486
+ 1 1 2
487
+ 2 1 2
488
+ """
489
+ if isinstance(func, (list, dict)):
490
+ return df.aggregate(func, axis)
491
+
492
+ output_types = kwds.pop("output_types", None)
493
+ object_type = kwds.pop("object_type", None)
494
+ output_types = validate_output_types(
495
+ output_type=output_type, output_types=output_types, object_type=object_type
496
+ )
497
+ output_type = output_types[0] if output_types else None
498
+ if skip_infer and output_type is None:
499
+ output_type = OutputType.df_or_series
500
+
501
+ # calling member function
502
+ if isinstance(func, str):
503
+ func = getattr(df, func)
504
+ sig = inspect.getfullargspec(func)
505
+ if "axis" in sig.args:
506
+ kwds["axis"] = axis
507
+ return func(*args, **kwds)
508
+
509
+ op = ApplyOperator(
510
+ func=func,
511
+ axis=axis,
512
+ raw=raw,
513
+ result_type=result_type,
514
+ args=args,
515
+ kwds=kwds,
516
+ output_type=output_type,
517
+ elementwise=elementwise,
518
+ )
519
+ return op(df, dtypes=dtypes, dtype=dtype, name=name, index=index)
520
+
521
+
522
+ def series_apply(
523
+ series,
524
+ func,
525
+ convert_dtype=True,
526
+ output_type=None,
527
+ args=(),
528
+ dtypes=None,
529
+ dtype=None,
530
+ name=None,
531
+ index=None,
532
+ skip_infer=False,
533
+ **kwds,
534
+ ):
535
+ """
536
+ Invoke function on values of Series.
537
+
538
+ Can be ufunc (a NumPy function that applies to the entire Series)
539
+ or a Python function that only works on single values.
540
+
541
+ Parameters
542
+ ----------
543
+ func : function
544
+ Python function or NumPy ufunc to apply.
545
+
546
+ convert_dtype : bool, default True
547
+ Try to find better dtype for elementwise function results. If
548
+ False, leave as dtype=object.
549
+
550
+ output_type : {'dataframe', 'series'}, default None
551
+ Specify type of returned object. See `Notes` for more details.
552
+
553
+ dtypes : Series, default None
554
+ Specify dtypes of returned DataFrames. See `Notes` for more details.
555
+
556
+ dtype : numpy.dtype, default None
557
+ Specify dtype of returned Series. See `Notes` for more details.
558
+
559
+ name : str, default None
560
+ Specify name of returned Series. See `Notes` for more details.
561
+
562
+ index : Index, default None
563
+ Specify index of returned object. See `Notes` for more details.
564
+
565
+ args : tuple
566
+ Positional arguments passed to func after the series value.
567
+
568
+ skip_infer: bool, default False
569
+ Whether infer dtypes when dtypes or output_type is not specified.
570
+
571
+ **kwds
572
+ Additional keyword arguments passed to func.
573
+
574
+ Returns
575
+ -------
576
+ Series or DataFrame
577
+ If func returns a Series object the result will be a DataFrame.
578
+
579
+ See Also
580
+ --------
581
+ Series.map: For element-wise operations.
582
+ Series.agg: Only perform aggregating type operations.
583
+ Series.transform: Only perform transforming type operations.
584
+
585
+ Notes
586
+ -----
587
+ When deciding output dtypes and shape of the return value, MaxFrame will
588
+ try applying ``func`` onto a mock Series, and the apply call may fail.
589
+ When this happens, you need to specify the type of apply call
590
+ (DataFrame or Series) in output_type.
591
+
592
+ * For DataFrame output, you need to specify a list or a pandas Series
593
+ as ``dtypes`` of output DataFrame. ``index`` of output can also be
594
+ specified.
595
+ * For Series output, you need to specify ``dtype`` and ``name`` of
596
+ output Series.
597
+
598
+ Examples
599
+ --------
600
+ Create a series with typical summer temperatures for each city.
601
+
602
+ >>> import maxframe.tensor as mt
603
+ >>> import maxframe.dataframe as md
604
+ >>> s = md.Series([20, 21, 12],
605
+ ... index=['London', 'New York', 'Helsinki'])
606
+ >>> s.execute()
607
+ London 20
608
+ New York 21
609
+ Helsinki 12
610
+ dtype: int64
611
+
612
+ Square the values by defining a function and passing it as an
613
+ argument to ``apply()``.
614
+
615
+ >>> def square(x):
616
+ ... return x ** 2
617
+ >>> s.apply(square).execute()
618
+ London 400
619
+ New York 441
620
+ Helsinki 144
621
+ dtype: int64
622
+
623
+ Square the values by passing an anonymous function as an
624
+ argument to ``apply()``.
625
+
626
+ >>> s.apply(lambda x: x ** 2).execute()
627
+ London 400
628
+ New York 441
629
+ Helsinki 144
630
+ dtype: int64
631
+
632
+ Define a custom function that needs additional positional
633
+ arguments and pass these additional arguments using the
634
+ ``args`` keyword.
635
+
636
+ >>> def subtract_custom_value(x, custom_value):
637
+ ... return x - custom_value
638
+
639
+ >>> s.apply(subtract_custom_value, args=(5,)).execute()
640
+ London 15
641
+ New York 16
642
+ Helsinki 7
643
+ dtype: int64
644
+
645
+ Define a custom function that takes keyword arguments
646
+ and pass these arguments to ``apply``.
647
+
648
+ >>> def add_custom_values(x, **kwargs):
649
+ ... for month in kwargs:
650
+ ... x += kwargs[month]
651
+ ... return x
652
+
653
+ >>> s.apply(add_custom_values, june=30, july=20, august=25).execute()
654
+ London 95
655
+ New York 96
656
+ Helsinki 87
657
+ dtype: int64
658
+ """
659
+ if isinstance(func, (list, dict)):
660
+ return series.aggregate(func)
661
+
662
+ # calling member function
663
+ if isinstance(func, str):
664
+ func_body = getattr(series, func, None)
665
+ if func_body is not None:
666
+ return func_body(*args, **kwds)
667
+ func_str = func
668
+ func = getattr(np, func_str, None)
669
+ if func is None:
670
+ raise AttributeError(
671
+ f"'{func_str!r}' is not a valid function "
672
+ f"for '{type(series).__name__}' object"
673
+ )
674
+
675
+ if skip_infer and output_type is None:
676
+ output_type = OutputType.df_or_series
677
+
678
+ output_types = kwds.pop("output_types", None)
679
+ object_type = kwds.pop("object_type", None)
680
+ output_types = validate_output_types(
681
+ output_type=output_type, output_types=output_types, object_type=object_type
682
+ )
683
+ output_type = output_types[0] if output_types else OutputType.series
684
+
685
+ op = ApplyOperator(
686
+ func=func,
687
+ convert_dtype=convert_dtype,
688
+ args=args,
689
+ kwds=kwds,
690
+ output_type=output_type,
691
+ )
692
+ return op(series, dtypes=dtypes, dtype=dtype, name=name, index=index)