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,15 @@
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 .core import PandasDataSourceOperator
@@ -0,0 +1,81 @@
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 asyncio
16
+ from typing import List, Optional
17
+
18
+ from ...serialization.serializables import Int64Field, StringField
19
+ from ..operators import DataFrameOperator, DataFrameOperatorMixin
20
+
21
+
22
+ class HeadOptimizedDataSource(DataFrameOperator, DataFrameOperatorMixin):
23
+ __slots__ = ()
24
+ # Data source op that optimized for head,
25
+ # First, it will try to trigger first_chunk.head() and raise TilesError,
26
+ # When iterative tiling is triggered,
27
+ # check if the first_chunk.head() meets requirements.
28
+ nrows = Int64Field("nrows", default=None)
29
+
30
+
31
+ class ColumnPruneSupportedDataSourceMixin(DataFrameOperatorMixin):
32
+ __slots__ = ()
33
+
34
+ def get_columns(self): # pragma: no cover
35
+ raise NotImplementedError
36
+
37
+ def set_pruned_columns(self, columns, *, keep_order=None): # pragma: no cover
38
+ raise NotImplementedError
39
+
40
+
41
+ class _IncrementalIndexRecorder:
42
+ _done: List[Optional[asyncio.Event]]
43
+ _chunk_sizes: List[Optional[int]]
44
+
45
+ def __init__(self, n_chunk: int):
46
+ self._n_chunk = n_chunk
47
+ self._done = [asyncio.Event() for _ in range(n_chunk)]
48
+ self._chunk_sizes = [None] * n_chunk
49
+ self._waiters = set()
50
+
51
+ def _can_destroy(self):
52
+ return all(e.is_set() for e in self._done) and not self._waiters
53
+
54
+ def add_waiter(self, i: int):
55
+ self._waiters.add(i)
56
+
57
+ async def wait(self, i: int):
58
+ if i == 0:
59
+ return 0, self._can_destroy()
60
+ self._waiters.add(i)
61
+ try:
62
+ await asyncio.gather(*(e.wait() for e in self._done[:i]))
63
+ finally:
64
+ self._waiters.remove(i)
65
+ # all chunk finished and no waiters
66
+ return sum(self._chunk_sizes[:i]), self._can_destroy()
67
+
68
+ async def finish(self, i: int, size: int):
69
+ self._chunk_sizes[i] = size
70
+ self._done[i].set()
71
+
72
+
73
+ class IncrementalIndexDatasource(HeadOptimizedDataSource):
74
+ __slots__ = ()
75
+
76
+ incremental_index_recorder_name = StringField("incremental_index_recorder_name")
77
+
78
+
79
+ class PandasDataSourceOperator(DataFrameOperator):
80
+ def get_data(self):
81
+ return getattr(self, "data", None)
@@ -0,0 +1,59 @@
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 ... import opcodes
16
+ from ...core import OutputType
17
+ from ...serialization.serializables import DataFrameField, SeriesField
18
+ from ..operators import DataFrameOperatorMixin
19
+ from ..utils import is_cudf, parse_index
20
+ from .core import PandasDataSourceOperator
21
+
22
+
23
+ class DataFrameDataSource(PandasDataSourceOperator, DataFrameOperatorMixin):
24
+ """
25
+ Represents data from pandas DataFrame
26
+ """
27
+
28
+ _op_type_ = opcodes.DATAFRAME_DATA_SOURCE
29
+
30
+ data = DataFrameField("data")
31
+ dtypes = SeriesField("dtypes")
32
+
33
+ def __init__(self, data=None, dtypes=None, gpu=None, **kw):
34
+ if dtypes is None and data is not None:
35
+ dtypes = data.dtypes
36
+ if gpu is None and is_cudf(data): # pragma: no cover
37
+ gpu = True
38
+ super().__init__(
39
+ data=data,
40
+ dtypes=dtypes,
41
+ gpu=gpu,
42
+ _output_types=[OutputType.dataframe],
43
+ **kw
44
+ )
45
+
46
+ def __call__(self, shape, chunk_size=None):
47
+ return self.new_dataframe(
48
+ None,
49
+ shape,
50
+ dtypes=self.dtypes,
51
+ index_value=parse_index(self.data.index),
52
+ columns_value=parse_index(self.data.columns, store_data=True),
53
+ raw_chunk_size=chunk_size,
54
+ )
55
+
56
+
57
+ def from_pandas(data, chunk_size=None, gpu=None, sparse=False):
58
+ op = DataFrameDataSource(data=data, gpu=gpu, sparse=sparse)
59
+ return op(data.shape, chunk_size=chunk_size)
@@ -0,0 +1,504 @@
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 warnings
16
+ from datetime import date, datetime, time
17
+
18
+ import numpy as np
19
+ import pandas as pd
20
+ from pandas import NaT, Timestamp
21
+ from pandas._libs.tslibs import timezones
22
+ from pandas.tseries.frequencies import to_offset
23
+ from pandas.tseries.offsets import Tick
24
+
25
+ from ... import opcodes as OperandDef
26
+ from ...core import OutputType
27
+ from ...serialization.serializables import AnyField, BoolField, Int64Field, StringField
28
+ from ...utils import no_default, pd_release_version
29
+ from ..operators import DataFrameOperator, DataFrameOperatorMixin
30
+ from ..utils import parse_index
31
+
32
+ try:
33
+ from pandas._libs.tslib import normalize_date
34
+ except ImportError: # pragma: no cover
35
+
36
+ def normalize_date(dt): # from pandas/_libs/tslibs/conversion.pyx
37
+ if isinstance(dt, datetime):
38
+ if isinstance(dt, pd.Timestamp):
39
+ return dt.replace(
40
+ hour=0, minute=0, second=0, microsecond=0, nanosecond=0
41
+ )
42
+ else:
43
+ return dt.replace(hour=0, minute=0, second=0, microsecond=0)
44
+ elif isinstance(dt, date):
45
+ return datetime(dt.year, dt.month, dt.day)
46
+ else:
47
+ raise TypeError(f"Unrecognized type: {type(dt)}")
48
+
49
+
50
+ _date_range_use_inclusive = pd_release_version[:2] >= (1, 4)
51
+
52
+
53
+ # adapted from pandas.core.arrays.datetimes.generate_range
54
+ def generate_range_count(
55
+ start=None, end=None, periods=None, offset=None
56
+ ): # pragma: no cover
57
+ offset = to_offset(offset)
58
+
59
+ start = Timestamp(start)
60
+ start = start if start is not NaT else None
61
+ end = Timestamp(end)
62
+ end = end if end is not NaT else None
63
+
64
+ if start and not offset.is_on_offset(start):
65
+ start = offset.rollforward(start)
66
+
67
+ elif end and not offset.is_on_offset(end):
68
+ end = offset.rollback(end)
69
+
70
+ if periods is None and end < start and offset.n >= 0:
71
+ end = None
72
+ periods = 0
73
+
74
+ if end is None:
75
+ end = start + (periods - 1) * offset
76
+
77
+ if start is None:
78
+ start = end - (periods - 1) * offset
79
+
80
+ cur = start
81
+ count = 0
82
+ if offset.n >= 0:
83
+ while cur <= end:
84
+ count += 1
85
+
86
+ if cur == end:
87
+ # GH#24252 avoid overflows by not performing the addition
88
+ # in offset.apply unless we have to
89
+ break
90
+
91
+ # faster than cur + offset
92
+ try:
93
+ next_date = offset._apply(cur)
94
+ except AttributeError:
95
+ next_date = cur + offset
96
+ if next_date <= cur:
97
+ raise ValueError(f"Offset {offset} did not increment date")
98
+ cur = next_date
99
+ else:
100
+ while cur >= end:
101
+ count += 1
102
+
103
+ if cur == end:
104
+ # GH#24252 avoid overflows by not performing the addition
105
+ # in offset.apply unless we have to
106
+ break
107
+
108
+ # faster than cur + offset
109
+ try:
110
+ next_date = offset._apply(cur)
111
+ except AttributeError:
112
+ next_date = cur + offset
113
+ if next_date >= cur:
114
+ raise ValueError(f"Offset {offset} did not decrement date")
115
+ cur = next_date
116
+ return count
117
+
118
+
119
+ class DataFrameDateRange(DataFrameOperator, DataFrameOperatorMixin):
120
+ _op_type_ = OperandDef.DATE_RANGE
121
+
122
+ start = AnyField("start")
123
+ end = AnyField("end")
124
+ periods = Int64Field("periods")
125
+ freq = AnyField("freq")
126
+ tz = AnyField("tz")
127
+ normalize = BoolField("normalize")
128
+ name = StringField("name")
129
+ inclusive = StringField("inclusive")
130
+
131
+ def __init__(
132
+ self,
133
+ output_types=None,
134
+ **kw,
135
+ ):
136
+ super().__init__(_output_types=output_types, **kw)
137
+ if self.output_types is None:
138
+ self.output_types = [OutputType.index]
139
+ if getattr(self, "inclusive", None) is None:
140
+ self.inclusive = "both"
141
+
142
+ def __call__(self, shape, chunk_size=None):
143
+ dtype = pd.Index([self.start]).dtype
144
+ index_value = parse_index(
145
+ pd.Index([], dtype=dtype), self.start, self.end, self.periods, self.tz
146
+ )
147
+ # gen index value info
148
+ index_value.value._min_val = self.start
149
+ index_value.value._min_val_close = True
150
+ index_value.value._max_val = self.end
151
+ index_value.value._max_val_close = True
152
+ index_value.value._is_unique = True
153
+ index_value.value._is_monotonic_increasing = True
154
+ index_value.value._freq = self.freq
155
+ return self.new_index(
156
+ None,
157
+ shape=shape,
158
+ dtype=dtype,
159
+ index_value=index_value,
160
+ name=self.name,
161
+ raw_chunk_size=chunk_size,
162
+ freq=self.freq,
163
+ )
164
+
165
+
166
+ _midnight = time(0, 0)
167
+
168
+
169
+ def _maybe_normalize_endpoints(start, end, normalize): # pragma: no cover
170
+ _normalized = True
171
+
172
+ if start is not None:
173
+ if normalize:
174
+ start = normalize_date(start)
175
+ _normalized = True
176
+ else:
177
+ _normalized = _normalized and start.time() == _midnight
178
+
179
+ if end is not None:
180
+ if normalize:
181
+ end = normalize_date(end)
182
+ _normalized = True
183
+ else:
184
+ _normalized = _normalized and end.time() == _midnight
185
+
186
+ return start, end, _normalized
187
+
188
+
189
+ def _infer_tz_from_endpoints(start, end, tz): # pragma: no cover
190
+ """
191
+ If a timezone is not explicitly given via `tz`, see if one can
192
+ be inferred from the `start` and `end` endpoints. If more than one
193
+ of these inputs provides a timezone, require that they all agree.
194
+
195
+ Parameters
196
+ ----------
197
+ start : Timestamp
198
+ end : Timestamp
199
+ tz : tzinfo or None
200
+
201
+ Returns
202
+ -------
203
+ tz : tzinfo or None
204
+
205
+ Raises
206
+ ------
207
+ TypeError : if start and end timezones do not agree
208
+ """
209
+ try:
210
+ inferred_tz = timezones.infer_tzinfo(start, end)
211
+ except AssertionError:
212
+ # infer_tzinfo raises AssertionError if passed mismatched timezones
213
+ raise TypeError(
214
+ "Start and end cannot both be tz-aware with different timezones"
215
+ )
216
+
217
+ inferred_tz = timezones.maybe_get_tz(inferred_tz)
218
+ tz = timezones.maybe_get_tz(tz)
219
+
220
+ if tz is not None and inferred_tz is not None:
221
+ if not timezones.tz_compare(inferred_tz, tz):
222
+ raise AssertionError("Inferred time zone not equal to passed time zone")
223
+
224
+ elif inferred_tz is not None:
225
+ tz = inferred_tz
226
+
227
+ return tz
228
+
229
+
230
+ def _maybe_localize_point(
231
+ ts, is_none, is_not_none, freq, tz, ambiguous, nonexistent
232
+ ): # pragma: no cover
233
+ """
234
+ Localize a start or end Timestamp to the timezone of the corresponding
235
+ start or end Timestamp
236
+
237
+ Parameters
238
+ ----------
239
+ ts : start or end Timestamp to potentially localize
240
+ is_none : argument that should be None
241
+ is_not_none : argument that should not be None
242
+ freq : Tick, DateOffset, or None
243
+ tz : str, timezone object or None
244
+ ambiguous: str, localization behavior for ambiguous times
245
+ nonexistent: str, localization behavior for nonexistent times
246
+
247
+ Returns
248
+ -------
249
+ ts : Timestamp
250
+ """
251
+ # Make sure start and end are timezone localized if:
252
+ # 1) freq = a Timedelta-like frequency (Tick)
253
+ # 2) freq = None i.e. generating a linspaced range
254
+ if is_none is None and is_not_none is not None:
255
+ # Note: We can't ambiguous='infer' a singular ambiguous time; however,
256
+ # we have historically defaulted ambiguous=False
257
+ ambiguous = ambiguous if ambiguous != "infer" else False
258
+ localize_args = {"ambiguous": ambiguous, "nonexistent": nonexistent, "tz": None}
259
+ if isinstance(freq, Tick) or freq is None:
260
+ localize_args["tz"] = tz
261
+ ts = ts.tz_localize(**localize_args)
262
+ return ts
263
+
264
+
265
+ def date_range(
266
+ start=None,
267
+ end=None,
268
+ periods=None,
269
+ freq=None,
270
+ tz=None,
271
+ normalize=False,
272
+ name=None,
273
+ closed=no_default,
274
+ inclusive=None,
275
+ chunk_size=None,
276
+ **kwargs,
277
+ ):
278
+ """
279
+ Return a fixed frequency DatetimeIndex.
280
+
281
+ Parameters
282
+ ----------
283
+ start : str or datetime-like, optional
284
+ Left bound for generating dates.
285
+ end : str or datetime-like, optional
286
+ Right bound for generating dates.
287
+ periods : int, optional
288
+ Number of periods to generate.
289
+ freq : str or DateOffset, default 'D'
290
+ Frequency strings can have multiples, e.g. '5H'. See
291
+ :ref:`here <timeseries.offset_aliases>` for a list of
292
+ frequency aliases.
293
+ tz : str or tzinfo, optional
294
+ Time zone name for returning localized DatetimeIndex, for example
295
+ 'Asia/Hong_Kong'. By default, the resulting DatetimeIndex is
296
+ timezone-naive.
297
+ normalize : bool, default False
298
+ Normalize start/end dates to midnight before generating date range.
299
+ name : str, default None
300
+ Name of the resulting DatetimeIndex.
301
+ inclusive : {“both”, “neither”, “left”, “right”}, default “both”
302
+ Include boundaries; Whether to set each bound as closed or open.
303
+ **kwargs
304
+ For compatibility. Has no effect on the result.
305
+
306
+ Returns
307
+ -------
308
+ rng : DatetimeIndex
309
+
310
+ See Also
311
+ --------
312
+ DatetimeIndex : An immutable container for datetimes.
313
+ timedelta_range : Return a fixed frequency TimedeltaIndex.
314
+ period_range : Return a fixed frequency PeriodIndex.
315
+ interval_range : Return a fixed frequency IntervalIndex.
316
+
317
+ Notes
318
+ -----
319
+ Of the four parameters ``start``, ``end``, ``periods``, and ``freq``,
320
+ exactly three must be specified. If ``freq`` is omitted, the resulting
321
+ ``DatetimeIndex`` will have ``periods`` linearly spaced elements between
322
+ ``start`` and ``end`` (closed on both sides).
323
+
324
+ To learn more about the frequency strings, please see `this link
325
+ <https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases>`__.
326
+
327
+ Examples
328
+ --------
329
+ **Specifying the values**
330
+
331
+ The next four examples generate the same `DatetimeIndex`, but vary
332
+ the combination of `start`, `end` and `periods`.
333
+
334
+ Specify `start` and `end`, with the default daily frequency.
335
+ >>> import maxframe.dataframe as md
336
+
337
+ >>> md.date_range(start='1/1/2018', end='1/08/2018').execute()
338
+ DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04',
339
+ '2018-01-05', '2018-01-06', '2018-01-07', '2018-01-08'],
340
+ dtype='datetime64[ns]', freq='D')
341
+
342
+ Specify `start` and `periods`, the number of periods (days).
343
+
344
+ >>> md.date_range(start='1/1/2018', periods=8).execute()
345
+ DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04',
346
+ '2018-01-05', '2018-01-06', '2018-01-07', '2018-01-08'],
347
+ dtype='datetime64[ns]', freq='D')
348
+
349
+ Specify `end` and `periods`, the number of periods (days).
350
+
351
+ >>> md.date_range(end='1/1/2018', periods=8).execute()
352
+ DatetimeIndex(['2017-12-25', '2017-12-26', '2017-12-27', '2017-12-28',
353
+ '2017-12-29', '2017-12-30', '2017-12-31', '2018-01-01'],
354
+ dtype='datetime64[ns]', freq='D')
355
+
356
+ Specify `start`, `end`, and `periods`; the frequency is generated
357
+ automatically (linearly spaced).
358
+
359
+ >>> md.date_range(start='2018-04-24', end='2018-04-27', periods=3).execute()
360
+ DatetimeIndex(['2018-04-24 00:00:00', '2018-04-25 12:00:00',
361
+ '2018-04-27 00:00:00'],
362
+ dtype='datetime64[ns]', freq=None)
363
+
364
+ **Other Parameters**
365
+
366
+ Changed the `freq` (frequency) to ``'M'`` (month end frequency).
367
+
368
+ >>> md.date_range(start='1/1/2018', periods=5, freq='M').execute()
369
+ DatetimeIndex(['2018-01-31', '2018-02-28', '2018-03-31', '2018-04-30',
370
+ '2018-05-31'],
371
+ dtype='datetime64[ns]', freq='M')
372
+
373
+ Multiples are allowed
374
+
375
+ >>> md.date_range(start='1/1/2018', periods=5, freq='3M').execute()
376
+ DatetimeIndex(['2018-01-31', '2018-04-30', '2018-07-31', '2018-10-31',
377
+ '2019-01-31'],
378
+ dtype='datetime64[ns]', freq='3M')
379
+
380
+ `freq` can also be specified as an Offset object.
381
+
382
+ >>> md.date_range(start='1/1/2018', periods=5, freq=md.offsets.MonthEnd(3)).execute()
383
+ DatetimeIndex(['2018-01-31', '2018-04-30', '2018-07-31', '2018-10-31',
384
+ '2019-01-31'],
385
+ dtype='datetime64[ns]', freq='3M')
386
+
387
+ Specify `tz` to set the timezone.
388
+
389
+ >>> md.date_range(start='1/1/2018', periods=5, tz='Asia/Tokyo').execute()
390
+ DatetimeIndex(['2018-01-01 00:00:00+09:00', '2018-01-02 00:00:00+09:00',
391
+ '2018-01-03 00:00:00+09:00', '2018-01-04 00:00:00+09:00',
392
+ '2018-01-05 00:00:00+09:00'],
393
+ dtype='datetime64[ns, Asia/Tokyo]', freq='D')
394
+
395
+ `inclusive` controls whether to include `start` and `end` that are on the
396
+ boundary. The default, "both", includes boundary points on either end.
397
+
398
+ >>> md.date_range(start='2017-01-01', end='2017-01-04', inclusive='both').execute()
399
+ DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04'],
400
+ dtype='datetime64[ns]', freq='D')
401
+
402
+ Use ``inclusive='left'`` to exclude `end` if it falls on the boundary.
403
+
404
+ >>> md.date_range(start='2017-01-01', end='2017-01-04', closed='left').execute()
405
+ DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03'],
406
+ dtype='datetime64[ns]', freq='D')
407
+
408
+ Use ``inclusive='right'`` to exclude `start` if it falls on the boundary,
409
+ and similarly inclusive='neither' will exclude both `start` and `end`.
410
+
411
+ >>> md.date_range(start='2017-01-01', end='2017-01-04', closed='right').execute()
412
+ DatetimeIndex(['2017-01-02', '2017-01-03', '2017-01-04'],
413
+ dtype='datetime64[ns]', freq='D')
414
+
415
+ .. note::
416
+ Pandas 1.4.0 or later is required to use ``inclusive='neither'``.
417
+ Otherwise an error may be raised.
418
+ """
419
+ # validate periods
420
+ if isinstance(periods, (float, np.floating)):
421
+ periods = int(periods)
422
+ if periods is not None and not isinstance(periods, (int, np.integer)):
423
+ raise TypeError(f"periods must be a number, got {periods}")
424
+
425
+ if freq is None and any(arg is None for arg in [periods, start, end]):
426
+ freq = "D"
427
+ if sum(arg is not None for arg in [start, end, periods, freq]) != 3:
428
+ raise ValueError(
429
+ "Of the four parameters: start, end, periods, "
430
+ "and freq, exactly three must be specified"
431
+ )
432
+ freq = to_offset(freq)
433
+
434
+ if _date_range_use_inclusive and closed is not no_default:
435
+ warnings.warn(
436
+ "Argument `closed` is deprecated in favor of `inclusive`.", FutureWarning
437
+ )
438
+ elif closed is no_default:
439
+ closed = None
440
+
441
+ if inclusive is None and closed is not no_default:
442
+ inclusive = closed
443
+
444
+ if start is not None:
445
+ start = pd.Timestamp(start)
446
+
447
+ if end is not None:
448
+ end = pd.Timestamp(end)
449
+
450
+ if start is pd.NaT or end is pd.NaT:
451
+ raise ValueError("Neither `start` nor `end` can be NaT")
452
+
453
+ start, end, _ = _maybe_normalize_endpoints(start, end, normalize)
454
+ tz = _infer_tz_from_endpoints(start, end, tz)
455
+
456
+ if start is None and end is not None:
457
+ # start is None and end is not None
458
+ # adjust end first
459
+ end = pd.date_range(end=end, periods=1, freq=freq)[0]
460
+ if inclusive == "neither":
461
+ end -= freq
462
+ size = periods
463
+ start = end - (periods - 1) * freq
464
+ if inclusive in ("neither", "left"):
465
+ size -= 1
466
+ elif inclusive == "right":
467
+ # when start is None, closed == 'left' would not take effect
468
+ # thus just ignore
469
+ inclusive = "both"
470
+ elif end is None:
471
+ # end is None
472
+ # adjust start first
473
+ start = pd.date_range(start=start, periods=1, freq=freq)[0]
474
+ size = periods
475
+ end = start + (periods - 1) * freq
476
+ if inclusive in ("neither", "right"):
477
+ size -= 1
478
+ elif inclusive == "left":
479
+ # when end is None, closed == 'left' would not take effect
480
+ # thus just ignore
481
+ inclusive = "both"
482
+ else:
483
+ if periods is None:
484
+ periods = size = generate_range_count(start, end, periods, freq)
485
+ else:
486
+ size = periods
487
+ if inclusive in ("left", "right"):
488
+ size -= 1
489
+ elif inclusive == "neither":
490
+ size -= 2
491
+
492
+ shape = (size,)
493
+ op = DataFrameDateRange(
494
+ start=start,
495
+ end=end,
496
+ periods=periods,
497
+ freq=freq,
498
+ tz=tz,
499
+ normalize=normalize,
500
+ name=name,
501
+ inclusive=inclusive,
502
+ **kwargs,
503
+ )
504
+ return op(shape, chunk_size=chunk_size)