maxframe 0.1.0b5__cp310-cp310-macosx_11_0_arm64.whl

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

Potentially problematic release.


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

Files changed (647) hide show
  1. maxframe/__init__.py +32 -0
  2. maxframe/_utils.cpython-310-darwin.so +0 -0
  3. maxframe/_utils.pxd +33 -0
  4. maxframe/_utils.pyx +547 -0
  5. maxframe/codegen.py +528 -0
  6. maxframe/config/__init__.py +15 -0
  7. maxframe/config/config.py +443 -0
  8. maxframe/config/tests/__init__.py +13 -0
  9. maxframe/config/tests/test_config.py +103 -0
  10. maxframe/config/tests/test_validators.py +34 -0
  11. maxframe/config/validators.py +57 -0
  12. maxframe/conftest.py +139 -0
  13. maxframe/core/__init__.py +65 -0
  14. maxframe/core/base.py +156 -0
  15. maxframe/core/entity/__init__.py +44 -0
  16. maxframe/core/entity/chunks.py +68 -0
  17. maxframe/core/entity/core.py +152 -0
  18. maxframe/core/entity/executable.py +337 -0
  19. maxframe/core/entity/fuse.py +73 -0
  20. maxframe/core/entity/objects.py +100 -0
  21. maxframe/core/entity/output_types.py +90 -0
  22. maxframe/core/entity/tileables.py +438 -0
  23. maxframe/core/entity/utils.py +24 -0
  24. maxframe/core/graph/__init__.py +17 -0
  25. maxframe/core/graph/builder/__init__.py +16 -0
  26. maxframe/core/graph/builder/base.py +86 -0
  27. maxframe/core/graph/builder/chunk.py +430 -0
  28. maxframe/core/graph/builder/tileable.py +34 -0
  29. maxframe/core/graph/builder/utils.py +41 -0
  30. maxframe/core/graph/core.cpython-310-darwin.so +0 -0
  31. maxframe/core/graph/core.pyx +467 -0
  32. maxframe/core/graph/entity.py +171 -0
  33. maxframe/core/graph/tests/__init__.py +13 -0
  34. maxframe/core/graph/tests/test_graph.py +205 -0
  35. maxframe/core/mode.py +96 -0
  36. maxframe/core/operator/__init__.py +34 -0
  37. maxframe/core/operator/base.py +450 -0
  38. maxframe/core/operator/core.py +276 -0
  39. maxframe/core/operator/fetch.py +53 -0
  40. maxframe/core/operator/fuse.py +29 -0
  41. maxframe/core/operator/objects.py +72 -0
  42. maxframe/core/operator/shuffle.py +111 -0
  43. maxframe/core/operator/tests/__init__.py +13 -0
  44. maxframe/core/operator/tests/test_core.py +64 -0
  45. maxframe/core/tests/__init__.py +13 -0
  46. maxframe/core/tests/test_mode.py +75 -0
  47. maxframe/dataframe/__init__.py +81 -0
  48. maxframe/dataframe/arithmetic/__init__.py +359 -0
  49. maxframe/dataframe/arithmetic/abs.py +33 -0
  50. maxframe/dataframe/arithmetic/add.py +60 -0
  51. maxframe/dataframe/arithmetic/arccos.py +28 -0
  52. maxframe/dataframe/arithmetic/arccosh.py +28 -0
  53. maxframe/dataframe/arithmetic/arcsin.py +28 -0
  54. maxframe/dataframe/arithmetic/arcsinh.py +28 -0
  55. maxframe/dataframe/arithmetic/arctan.py +28 -0
  56. maxframe/dataframe/arithmetic/arctanh.py +28 -0
  57. maxframe/dataframe/arithmetic/around.py +152 -0
  58. maxframe/dataframe/arithmetic/bitwise_and.py +46 -0
  59. maxframe/dataframe/arithmetic/bitwise_or.py +50 -0
  60. maxframe/dataframe/arithmetic/bitwise_xor.py +46 -0
  61. maxframe/dataframe/arithmetic/ceil.py +28 -0
  62. maxframe/dataframe/arithmetic/core.py +342 -0
  63. maxframe/dataframe/arithmetic/cos.py +28 -0
  64. maxframe/dataframe/arithmetic/cosh.py +28 -0
  65. maxframe/dataframe/arithmetic/degrees.py +28 -0
  66. maxframe/dataframe/arithmetic/docstring.py +442 -0
  67. maxframe/dataframe/arithmetic/equal.py +56 -0
  68. maxframe/dataframe/arithmetic/exp.py +28 -0
  69. maxframe/dataframe/arithmetic/exp2.py +28 -0
  70. maxframe/dataframe/arithmetic/expm1.py +28 -0
  71. maxframe/dataframe/arithmetic/floor.py +28 -0
  72. maxframe/dataframe/arithmetic/floordiv.py +64 -0
  73. maxframe/dataframe/arithmetic/greater.py +57 -0
  74. maxframe/dataframe/arithmetic/greater_equal.py +57 -0
  75. maxframe/dataframe/arithmetic/invert.py +33 -0
  76. maxframe/dataframe/arithmetic/is_ufuncs.py +62 -0
  77. maxframe/dataframe/arithmetic/less.py +57 -0
  78. maxframe/dataframe/arithmetic/less_equal.py +57 -0
  79. maxframe/dataframe/arithmetic/log.py +28 -0
  80. maxframe/dataframe/arithmetic/log10.py +28 -0
  81. maxframe/dataframe/arithmetic/log2.py +28 -0
  82. maxframe/dataframe/arithmetic/mod.py +60 -0
  83. maxframe/dataframe/arithmetic/multiply.py +60 -0
  84. maxframe/dataframe/arithmetic/negative.py +33 -0
  85. maxframe/dataframe/arithmetic/not_equal.py +56 -0
  86. maxframe/dataframe/arithmetic/power.py +68 -0
  87. maxframe/dataframe/arithmetic/radians.py +28 -0
  88. maxframe/dataframe/arithmetic/sin.py +28 -0
  89. maxframe/dataframe/arithmetic/sinh.py +28 -0
  90. maxframe/dataframe/arithmetic/sqrt.py +28 -0
  91. maxframe/dataframe/arithmetic/subtract.py +64 -0
  92. maxframe/dataframe/arithmetic/tan.py +28 -0
  93. maxframe/dataframe/arithmetic/tanh.py +28 -0
  94. maxframe/dataframe/arithmetic/tests/__init__.py +13 -0
  95. maxframe/dataframe/arithmetic/tests/test_arithmetic.py +695 -0
  96. maxframe/dataframe/arithmetic/truediv.py +64 -0
  97. maxframe/dataframe/arithmetic/trunc.py +28 -0
  98. maxframe/dataframe/arrays.py +864 -0
  99. maxframe/dataframe/core.py +2417 -0
  100. maxframe/dataframe/datasource/__init__.py +15 -0
  101. maxframe/dataframe/datasource/core.py +81 -0
  102. maxframe/dataframe/datasource/dataframe.py +59 -0
  103. maxframe/dataframe/datasource/date_range.py +504 -0
  104. maxframe/dataframe/datasource/from_index.py +54 -0
  105. maxframe/dataframe/datasource/from_records.py +107 -0
  106. maxframe/dataframe/datasource/from_tensor.py +419 -0
  107. maxframe/dataframe/datasource/index.py +117 -0
  108. maxframe/dataframe/datasource/read_csv.py +528 -0
  109. maxframe/dataframe/datasource/read_odps_query.py +299 -0
  110. maxframe/dataframe/datasource/read_odps_table.py +253 -0
  111. maxframe/dataframe/datasource/read_parquet.py +421 -0
  112. maxframe/dataframe/datasource/series.py +55 -0
  113. maxframe/dataframe/datasource/tests/__init__.py +13 -0
  114. maxframe/dataframe/datasource/tests/test_datasource.py +401 -0
  115. maxframe/dataframe/datastore/__init__.py +26 -0
  116. maxframe/dataframe/datastore/core.py +19 -0
  117. maxframe/dataframe/datastore/to_csv.py +227 -0
  118. maxframe/dataframe/datastore/to_odps.py +162 -0
  119. maxframe/dataframe/extensions/__init__.py +41 -0
  120. maxframe/dataframe/extensions/accessor.py +50 -0
  121. maxframe/dataframe/extensions/reshuffle.py +83 -0
  122. maxframe/dataframe/extensions/tests/__init__.py +13 -0
  123. maxframe/dataframe/extensions/tests/test_extensions.py +38 -0
  124. maxframe/dataframe/fetch/__init__.py +15 -0
  125. maxframe/dataframe/fetch/core.py +86 -0
  126. maxframe/dataframe/groupby/__init__.py +82 -0
  127. maxframe/dataframe/groupby/aggregation.py +350 -0
  128. maxframe/dataframe/groupby/apply.py +251 -0
  129. maxframe/dataframe/groupby/core.py +179 -0
  130. maxframe/dataframe/groupby/cum.py +124 -0
  131. maxframe/dataframe/groupby/fill.py +141 -0
  132. maxframe/dataframe/groupby/getitem.py +92 -0
  133. maxframe/dataframe/groupby/head.py +105 -0
  134. maxframe/dataframe/groupby/sample.py +214 -0
  135. maxframe/dataframe/groupby/tests/__init__.py +13 -0
  136. maxframe/dataframe/groupby/tests/test_groupby.py +374 -0
  137. maxframe/dataframe/groupby/transform.py +255 -0
  138. maxframe/dataframe/indexing/__init__.py +84 -0
  139. maxframe/dataframe/indexing/add_prefix_suffix.py +110 -0
  140. maxframe/dataframe/indexing/align.py +349 -0
  141. maxframe/dataframe/indexing/at.py +83 -0
  142. maxframe/dataframe/indexing/getitem.py +204 -0
  143. maxframe/dataframe/indexing/iat.py +37 -0
  144. maxframe/dataframe/indexing/iloc.py +566 -0
  145. maxframe/dataframe/indexing/insert.py +86 -0
  146. maxframe/dataframe/indexing/loc.py +411 -0
  147. maxframe/dataframe/indexing/reindex.py +526 -0
  148. maxframe/dataframe/indexing/rename.py +462 -0
  149. maxframe/dataframe/indexing/rename_axis.py +209 -0
  150. maxframe/dataframe/indexing/reset_index.py +402 -0
  151. maxframe/dataframe/indexing/sample.py +221 -0
  152. maxframe/dataframe/indexing/set_axis.py +194 -0
  153. maxframe/dataframe/indexing/set_index.py +61 -0
  154. maxframe/dataframe/indexing/setitem.py +130 -0
  155. maxframe/dataframe/indexing/tests/__init__.py +13 -0
  156. maxframe/dataframe/indexing/tests/test_indexing.py +488 -0
  157. maxframe/dataframe/indexing/where.py +308 -0
  158. maxframe/dataframe/initializer.py +288 -0
  159. maxframe/dataframe/merge/__init__.py +32 -0
  160. maxframe/dataframe/merge/append.py +121 -0
  161. maxframe/dataframe/merge/concat.py +325 -0
  162. maxframe/dataframe/merge/merge.py +593 -0
  163. maxframe/dataframe/merge/tests/__init__.py +13 -0
  164. maxframe/dataframe/merge/tests/test_merge.py +215 -0
  165. maxframe/dataframe/misc/__init__.py +134 -0
  166. maxframe/dataframe/misc/_duplicate.py +46 -0
  167. maxframe/dataframe/misc/accessor.py +276 -0
  168. maxframe/dataframe/misc/apply.py +692 -0
  169. maxframe/dataframe/misc/astype.py +236 -0
  170. maxframe/dataframe/misc/case_when.py +141 -0
  171. maxframe/dataframe/misc/check_monotonic.py +84 -0
  172. maxframe/dataframe/misc/cut.py +383 -0
  173. maxframe/dataframe/misc/datetimes.py +79 -0
  174. maxframe/dataframe/misc/describe.py +108 -0
  175. maxframe/dataframe/misc/diff.py +210 -0
  176. maxframe/dataframe/misc/drop.py +440 -0
  177. maxframe/dataframe/misc/drop_duplicates.py +248 -0
  178. maxframe/dataframe/misc/duplicated.py +292 -0
  179. maxframe/dataframe/misc/eval.py +728 -0
  180. maxframe/dataframe/misc/explode.py +171 -0
  181. maxframe/dataframe/misc/get_dummies.py +208 -0
  182. maxframe/dataframe/misc/isin.py +217 -0
  183. maxframe/dataframe/misc/map.py +236 -0
  184. maxframe/dataframe/misc/melt.py +162 -0
  185. maxframe/dataframe/misc/memory_usage.py +248 -0
  186. maxframe/dataframe/misc/pct_change.py +150 -0
  187. maxframe/dataframe/misc/pivot_table.py +262 -0
  188. maxframe/dataframe/misc/qcut.py +104 -0
  189. maxframe/dataframe/misc/select_dtypes.py +104 -0
  190. maxframe/dataframe/misc/shift.py +256 -0
  191. maxframe/dataframe/misc/stack.py +238 -0
  192. maxframe/dataframe/misc/string_.py +221 -0
  193. maxframe/dataframe/misc/tests/__init__.py +13 -0
  194. maxframe/dataframe/misc/tests/test_misc.py +468 -0
  195. maxframe/dataframe/misc/to_numeric.py +178 -0
  196. maxframe/dataframe/misc/transform.py +361 -0
  197. maxframe/dataframe/misc/transpose.py +136 -0
  198. maxframe/dataframe/misc/value_counts.py +182 -0
  199. maxframe/dataframe/missing/__init__.py +53 -0
  200. maxframe/dataframe/missing/checkna.py +223 -0
  201. maxframe/dataframe/missing/dropna.py +280 -0
  202. maxframe/dataframe/missing/fillna.py +275 -0
  203. maxframe/dataframe/missing/replace.py +439 -0
  204. maxframe/dataframe/missing/tests/__init__.py +13 -0
  205. maxframe/dataframe/missing/tests/test_missing.py +89 -0
  206. maxframe/dataframe/operators.py +273 -0
  207. maxframe/dataframe/plotting/__init__.py +40 -0
  208. maxframe/dataframe/plotting/core.py +78 -0
  209. maxframe/dataframe/plotting/tests/__init__.py +13 -0
  210. maxframe/dataframe/plotting/tests/test_plotting.py +136 -0
  211. maxframe/dataframe/reduction/__init__.py +107 -0
  212. maxframe/dataframe/reduction/aggregation.py +344 -0
  213. maxframe/dataframe/reduction/all.py +78 -0
  214. maxframe/dataframe/reduction/any.py +78 -0
  215. maxframe/dataframe/reduction/core.py +837 -0
  216. maxframe/dataframe/reduction/count.py +59 -0
  217. maxframe/dataframe/reduction/cummax.py +30 -0
  218. maxframe/dataframe/reduction/cummin.py +30 -0
  219. maxframe/dataframe/reduction/cumprod.py +30 -0
  220. maxframe/dataframe/reduction/cumsum.py +30 -0
  221. maxframe/dataframe/reduction/custom_reduction.py +42 -0
  222. maxframe/dataframe/reduction/kurtosis.py +104 -0
  223. maxframe/dataframe/reduction/max.py +65 -0
  224. maxframe/dataframe/reduction/mean.py +61 -0
  225. maxframe/dataframe/reduction/min.py +65 -0
  226. maxframe/dataframe/reduction/nunique.py +141 -0
  227. maxframe/dataframe/reduction/prod.py +76 -0
  228. maxframe/dataframe/reduction/reduction_size.py +36 -0
  229. maxframe/dataframe/reduction/sem.py +69 -0
  230. maxframe/dataframe/reduction/skew.py +89 -0
  231. maxframe/dataframe/reduction/std.py +53 -0
  232. maxframe/dataframe/reduction/str_concat.py +48 -0
  233. maxframe/dataframe/reduction/sum.py +77 -0
  234. maxframe/dataframe/reduction/tests/__init__.py +13 -0
  235. maxframe/dataframe/reduction/tests/test_reduction.py +486 -0
  236. maxframe/dataframe/reduction/unique.py +90 -0
  237. maxframe/dataframe/reduction/var.py +72 -0
  238. maxframe/dataframe/sort/__init__.py +34 -0
  239. maxframe/dataframe/sort/core.py +36 -0
  240. maxframe/dataframe/sort/sort_index.py +153 -0
  241. maxframe/dataframe/sort/sort_values.py +311 -0
  242. maxframe/dataframe/sort/tests/__init__.py +13 -0
  243. maxframe/dataframe/sort/tests/test_sort.py +81 -0
  244. maxframe/dataframe/statistics/__init__.py +33 -0
  245. maxframe/dataframe/statistics/corr.py +280 -0
  246. maxframe/dataframe/statistics/quantile.py +341 -0
  247. maxframe/dataframe/statistics/tests/__init__.py +13 -0
  248. maxframe/dataframe/statistics/tests/test_statistics.py +82 -0
  249. maxframe/dataframe/tests/__init__.py +13 -0
  250. maxframe/dataframe/tests/test_initializer.py +29 -0
  251. maxframe/dataframe/tseries/__init__.py +13 -0
  252. maxframe/dataframe/tseries/tests/__init__.py +13 -0
  253. maxframe/dataframe/tseries/tests/test_tseries.py +30 -0
  254. maxframe/dataframe/tseries/to_datetime.py +297 -0
  255. maxframe/dataframe/ufunc/__init__.py +27 -0
  256. maxframe/dataframe/ufunc/tensor.py +54 -0
  257. maxframe/dataframe/ufunc/ufunc.py +52 -0
  258. maxframe/dataframe/utils.py +1267 -0
  259. maxframe/dataframe/window/__init__.py +29 -0
  260. maxframe/dataframe/window/aggregation.py +96 -0
  261. maxframe/dataframe/window/core.py +69 -0
  262. maxframe/dataframe/window/ewm.py +249 -0
  263. maxframe/dataframe/window/expanding.py +147 -0
  264. maxframe/dataframe/window/rolling.py +376 -0
  265. maxframe/dataframe/window/tests/__init__.py +13 -0
  266. maxframe/dataframe/window/tests/test_ewm.py +70 -0
  267. maxframe/dataframe/window/tests/test_expanding.py +66 -0
  268. maxframe/dataframe/window/tests/test_rolling.py +57 -0
  269. maxframe/env.py +33 -0
  270. maxframe/errors.py +21 -0
  271. maxframe/extension.py +81 -0
  272. maxframe/learn/__init__.py +17 -0
  273. maxframe/learn/contrib/__init__.py +17 -0
  274. maxframe/learn/contrib/pytorch/__init__.py +16 -0
  275. maxframe/learn/contrib/pytorch/run_function.py +110 -0
  276. maxframe/learn/contrib/pytorch/run_script.py +102 -0
  277. maxframe/learn/contrib/pytorch/tests/__init__.py +13 -0
  278. maxframe/learn/contrib/pytorch/tests/test_pytorch.py +42 -0
  279. maxframe/learn/contrib/utils.py +52 -0
  280. maxframe/learn/contrib/xgboost/__init__.py +26 -0
  281. maxframe/learn/contrib/xgboost/classifier.py +86 -0
  282. maxframe/learn/contrib/xgboost/core.py +156 -0
  283. maxframe/learn/contrib/xgboost/dmatrix.py +150 -0
  284. maxframe/learn/contrib/xgboost/predict.py +138 -0
  285. maxframe/learn/contrib/xgboost/regressor.py +78 -0
  286. maxframe/learn/contrib/xgboost/tests/__init__.py +13 -0
  287. maxframe/learn/contrib/xgboost/tests/test_core.py +43 -0
  288. maxframe/learn/contrib/xgboost/train.py +121 -0
  289. maxframe/learn/utils/__init__.py +15 -0
  290. maxframe/learn/utils/core.py +29 -0
  291. maxframe/lib/__init__.py +15 -0
  292. maxframe/lib/aio/__init__.py +27 -0
  293. maxframe/lib/aio/_runners.py +162 -0
  294. maxframe/lib/aio/_threads.py +35 -0
  295. maxframe/lib/aio/base.py +82 -0
  296. maxframe/lib/aio/file.py +85 -0
  297. maxframe/lib/aio/isolation.py +100 -0
  298. maxframe/lib/aio/lru.py +242 -0
  299. maxframe/lib/aio/parallelism.py +37 -0
  300. maxframe/lib/aio/tests/__init__.py +13 -0
  301. maxframe/lib/aio/tests/test_aio_file.py +55 -0
  302. maxframe/lib/compression.py +55 -0
  303. maxframe/lib/cython/__init__.py +13 -0
  304. maxframe/lib/cython/libcpp.pxd +30 -0
  305. maxframe/lib/filesystem/__init__.py +21 -0
  306. maxframe/lib/filesystem/_glob.py +173 -0
  307. maxframe/lib/filesystem/_oss_lib/__init__.py +13 -0
  308. maxframe/lib/filesystem/_oss_lib/common.py +198 -0
  309. maxframe/lib/filesystem/_oss_lib/glob.py +147 -0
  310. maxframe/lib/filesystem/_oss_lib/handle.py +156 -0
  311. maxframe/lib/filesystem/arrow.py +236 -0
  312. maxframe/lib/filesystem/base.py +263 -0
  313. maxframe/lib/filesystem/core.py +95 -0
  314. maxframe/lib/filesystem/fsmap.py +164 -0
  315. maxframe/lib/filesystem/hdfs.py +31 -0
  316. maxframe/lib/filesystem/local.py +112 -0
  317. maxframe/lib/filesystem/oss.py +157 -0
  318. maxframe/lib/filesystem/tests/__init__.py +13 -0
  319. maxframe/lib/filesystem/tests/test_filesystem.py +223 -0
  320. maxframe/lib/filesystem/tests/test_oss.py +182 -0
  321. maxframe/lib/functools_compat.py +81 -0
  322. maxframe/lib/mmh3.cpython-310-darwin.so +0 -0
  323. maxframe/lib/mmh3_src/MurmurHash3.cpp +339 -0
  324. maxframe/lib/mmh3_src/MurmurHash3.h +43 -0
  325. maxframe/lib/mmh3_src/mmh3module.cpp +387 -0
  326. maxframe/lib/sparse/__init__.py +861 -0
  327. maxframe/lib/sparse/array.py +1604 -0
  328. maxframe/lib/sparse/core.py +92 -0
  329. maxframe/lib/sparse/matrix.py +241 -0
  330. maxframe/lib/sparse/tests/__init__.py +15 -0
  331. maxframe/lib/sparse/tests/test_sparse.py +476 -0
  332. maxframe/lib/sparse/vector.py +150 -0
  333. maxframe/lib/tblib/LICENSE +20 -0
  334. maxframe/lib/tblib/__init__.py +327 -0
  335. maxframe/lib/tblib/cpython.py +83 -0
  336. maxframe/lib/tblib/decorators.py +44 -0
  337. maxframe/lib/tblib/pickling_support.py +90 -0
  338. maxframe/lib/tests/__init__.py +13 -0
  339. maxframe/lib/tests/test_wrapped_pickle.py +51 -0
  340. maxframe/lib/version.py +620 -0
  341. maxframe/lib/wrapped_pickle.py +139 -0
  342. maxframe/mixin.py +100 -0
  343. maxframe/odpsio/__init__.py +21 -0
  344. maxframe/odpsio/arrow.py +91 -0
  345. maxframe/odpsio/schema.py +364 -0
  346. maxframe/odpsio/tableio.py +322 -0
  347. maxframe/odpsio/tests/__init__.py +13 -0
  348. maxframe/odpsio/tests/test_arrow.py +88 -0
  349. maxframe/odpsio/tests/test_schema.py +297 -0
  350. maxframe/odpsio/tests/test_tableio.py +136 -0
  351. maxframe/odpsio/tests/test_volumeio.py +90 -0
  352. maxframe/odpsio/volumeio.py +95 -0
  353. maxframe/opcodes.py +590 -0
  354. maxframe/protocol.py +415 -0
  355. maxframe/remote/__init__.py +18 -0
  356. maxframe/remote/core.py +210 -0
  357. maxframe/remote/run_script.py +121 -0
  358. maxframe/serialization/__init__.py +26 -0
  359. maxframe/serialization/arrow.py +95 -0
  360. maxframe/serialization/core.cpython-310-darwin.so +0 -0
  361. maxframe/serialization/core.pxd +44 -0
  362. maxframe/serialization/core.pyi +61 -0
  363. maxframe/serialization/core.pyx +1094 -0
  364. maxframe/serialization/exception.py +86 -0
  365. maxframe/serialization/maxframe_objects.py +39 -0
  366. maxframe/serialization/numpy.py +91 -0
  367. maxframe/serialization/pandas.py +202 -0
  368. maxframe/serialization/scipy.py +71 -0
  369. maxframe/serialization/serializables/__init__.py +55 -0
  370. maxframe/serialization/serializables/core.py +262 -0
  371. maxframe/serialization/serializables/field.py +624 -0
  372. maxframe/serialization/serializables/field_type.py +589 -0
  373. maxframe/serialization/serializables/tests/__init__.py +13 -0
  374. maxframe/serialization/serializables/tests/test_field_type.py +121 -0
  375. maxframe/serialization/serializables/tests/test_serializable.py +250 -0
  376. maxframe/serialization/tests/__init__.py +13 -0
  377. maxframe/serialization/tests/test_serial.py +412 -0
  378. maxframe/session.py +1310 -0
  379. maxframe/tensor/__init__.py +183 -0
  380. maxframe/tensor/arithmetic/__init__.py +315 -0
  381. maxframe/tensor/arithmetic/abs.py +68 -0
  382. maxframe/tensor/arithmetic/absolute.py +68 -0
  383. maxframe/tensor/arithmetic/add.py +82 -0
  384. maxframe/tensor/arithmetic/angle.py +72 -0
  385. maxframe/tensor/arithmetic/arccos.py +104 -0
  386. maxframe/tensor/arithmetic/arccosh.py +91 -0
  387. maxframe/tensor/arithmetic/arcsin.py +94 -0
  388. maxframe/tensor/arithmetic/arcsinh.py +86 -0
  389. maxframe/tensor/arithmetic/arctan.py +106 -0
  390. maxframe/tensor/arithmetic/arctan2.py +128 -0
  391. maxframe/tensor/arithmetic/arctanh.py +86 -0
  392. maxframe/tensor/arithmetic/around.py +114 -0
  393. maxframe/tensor/arithmetic/bitand.py +95 -0
  394. maxframe/tensor/arithmetic/bitor.py +102 -0
  395. maxframe/tensor/arithmetic/bitxor.py +95 -0
  396. maxframe/tensor/arithmetic/cbrt.py +66 -0
  397. maxframe/tensor/arithmetic/ceil.py +71 -0
  398. maxframe/tensor/arithmetic/clip.py +165 -0
  399. maxframe/tensor/arithmetic/conj.py +74 -0
  400. maxframe/tensor/arithmetic/copysign.py +78 -0
  401. maxframe/tensor/arithmetic/core.py +544 -0
  402. maxframe/tensor/arithmetic/cos.py +85 -0
  403. maxframe/tensor/arithmetic/cosh.py +72 -0
  404. maxframe/tensor/arithmetic/deg2rad.py +72 -0
  405. maxframe/tensor/arithmetic/degrees.py +77 -0
  406. maxframe/tensor/arithmetic/divide.py +114 -0
  407. maxframe/tensor/arithmetic/equal.py +76 -0
  408. maxframe/tensor/arithmetic/exp.py +106 -0
  409. maxframe/tensor/arithmetic/exp2.py +67 -0
  410. maxframe/tensor/arithmetic/expm1.py +79 -0
  411. maxframe/tensor/arithmetic/fabs.py +74 -0
  412. maxframe/tensor/arithmetic/fix.py +69 -0
  413. maxframe/tensor/arithmetic/float_power.py +103 -0
  414. maxframe/tensor/arithmetic/floor.py +77 -0
  415. maxframe/tensor/arithmetic/floordiv.py +94 -0
  416. maxframe/tensor/arithmetic/fmax.py +105 -0
  417. maxframe/tensor/arithmetic/fmin.py +106 -0
  418. maxframe/tensor/arithmetic/fmod.py +99 -0
  419. maxframe/tensor/arithmetic/frexp.py +92 -0
  420. maxframe/tensor/arithmetic/greater.py +77 -0
  421. maxframe/tensor/arithmetic/greater_equal.py +69 -0
  422. maxframe/tensor/arithmetic/hypot.py +77 -0
  423. maxframe/tensor/arithmetic/i0.py +89 -0
  424. maxframe/tensor/arithmetic/imag.py +67 -0
  425. maxframe/tensor/arithmetic/invert.py +110 -0
  426. maxframe/tensor/arithmetic/isclose.py +115 -0
  427. maxframe/tensor/arithmetic/iscomplex.py +64 -0
  428. maxframe/tensor/arithmetic/isfinite.py +106 -0
  429. maxframe/tensor/arithmetic/isinf.py +103 -0
  430. maxframe/tensor/arithmetic/isnan.py +82 -0
  431. maxframe/tensor/arithmetic/isreal.py +63 -0
  432. maxframe/tensor/arithmetic/ldexp.py +99 -0
  433. maxframe/tensor/arithmetic/less.py +69 -0
  434. maxframe/tensor/arithmetic/less_equal.py +69 -0
  435. maxframe/tensor/arithmetic/log.py +92 -0
  436. maxframe/tensor/arithmetic/log10.py +85 -0
  437. maxframe/tensor/arithmetic/log1p.py +95 -0
  438. maxframe/tensor/arithmetic/log2.py +85 -0
  439. maxframe/tensor/arithmetic/logaddexp.py +80 -0
  440. maxframe/tensor/arithmetic/logaddexp2.py +78 -0
  441. maxframe/tensor/arithmetic/logical_and.py +81 -0
  442. maxframe/tensor/arithmetic/logical_not.py +74 -0
  443. maxframe/tensor/arithmetic/logical_or.py +82 -0
  444. maxframe/tensor/arithmetic/logical_xor.py +88 -0
  445. maxframe/tensor/arithmetic/lshift.py +82 -0
  446. maxframe/tensor/arithmetic/maximum.py +108 -0
  447. maxframe/tensor/arithmetic/minimum.py +108 -0
  448. maxframe/tensor/arithmetic/mod.py +104 -0
  449. maxframe/tensor/arithmetic/modf.py +83 -0
  450. maxframe/tensor/arithmetic/multiply.py +81 -0
  451. maxframe/tensor/arithmetic/nan_to_num.py +99 -0
  452. maxframe/tensor/arithmetic/negative.py +65 -0
  453. maxframe/tensor/arithmetic/nextafter.py +68 -0
  454. maxframe/tensor/arithmetic/not_equal.py +72 -0
  455. maxframe/tensor/arithmetic/positive.py +47 -0
  456. maxframe/tensor/arithmetic/power.py +106 -0
  457. maxframe/tensor/arithmetic/rad2deg.py +71 -0
  458. maxframe/tensor/arithmetic/radians.py +77 -0
  459. maxframe/tensor/arithmetic/real.py +70 -0
  460. maxframe/tensor/arithmetic/reciprocal.py +76 -0
  461. maxframe/tensor/arithmetic/rint.py +68 -0
  462. maxframe/tensor/arithmetic/rshift.py +81 -0
  463. maxframe/tensor/arithmetic/setimag.py +29 -0
  464. maxframe/tensor/arithmetic/setreal.py +29 -0
  465. maxframe/tensor/arithmetic/sign.py +81 -0
  466. maxframe/tensor/arithmetic/signbit.py +65 -0
  467. maxframe/tensor/arithmetic/sin.py +98 -0
  468. maxframe/tensor/arithmetic/sinc.py +102 -0
  469. maxframe/tensor/arithmetic/sinh.py +93 -0
  470. maxframe/tensor/arithmetic/spacing.py +72 -0
  471. maxframe/tensor/arithmetic/sqrt.py +81 -0
  472. maxframe/tensor/arithmetic/square.py +69 -0
  473. maxframe/tensor/arithmetic/subtract.py +81 -0
  474. maxframe/tensor/arithmetic/tan.py +88 -0
  475. maxframe/tensor/arithmetic/tanh.py +92 -0
  476. maxframe/tensor/arithmetic/tests/__init__.py +15 -0
  477. maxframe/tensor/arithmetic/tests/test_arithmetic.py +414 -0
  478. maxframe/tensor/arithmetic/truediv.py +104 -0
  479. maxframe/tensor/arithmetic/trunc.py +72 -0
  480. maxframe/tensor/arithmetic/utils.py +65 -0
  481. maxframe/tensor/array_utils.py +186 -0
  482. maxframe/tensor/base/__init__.py +34 -0
  483. maxframe/tensor/base/astype.py +119 -0
  484. maxframe/tensor/base/atleast_1d.py +74 -0
  485. maxframe/tensor/base/broadcast_to.py +89 -0
  486. maxframe/tensor/base/ravel.py +92 -0
  487. maxframe/tensor/base/tests/__init__.py +13 -0
  488. maxframe/tensor/base/tests/test_base.py +114 -0
  489. maxframe/tensor/base/transpose.py +125 -0
  490. maxframe/tensor/base/unique.py +205 -0
  491. maxframe/tensor/base/where.py +127 -0
  492. maxframe/tensor/core.py +724 -0
  493. maxframe/tensor/datasource/__init__.py +32 -0
  494. maxframe/tensor/datasource/arange.py +156 -0
  495. maxframe/tensor/datasource/array.py +415 -0
  496. maxframe/tensor/datasource/core.py +109 -0
  497. maxframe/tensor/datasource/empty.py +169 -0
  498. maxframe/tensor/datasource/from_dataframe.py +70 -0
  499. maxframe/tensor/datasource/from_dense.py +54 -0
  500. maxframe/tensor/datasource/from_sparse.py +47 -0
  501. maxframe/tensor/datasource/full.py +186 -0
  502. maxframe/tensor/datasource/ones.py +173 -0
  503. maxframe/tensor/datasource/scalar.py +40 -0
  504. maxframe/tensor/datasource/tests/__init__.py +13 -0
  505. maxframe/tensor/datasource/tests/test_datasource.py +278 -0
  506. maxframe/tensor/datasource/zeros.py +188 -0
  507. maxframe/tensor/fetch/__init__.py +15 -0
  508. maxframe/tensor/fetch/core.py +54 -0
  509. maxframe/tensor/indexing/__init__.py +47 -0
  510. maxframe/tensor/indexing/choose.py +196 -0
  511. maxframe/tensor/indexing/compress.py +124 -0
  512. maxframe/tensor/indexing/core.py +190 -0
  513. maxframe/tensor/indexing/extract.py +71 -0
  514. maxframe/tensor/indexing/fill_diagonal.py +183 -0
  515. maxframe/tensor/indexing/flatnonzero.py +60 -0
  516. maxframe/tensor/indexing/getitem.py +175 -0
  517. maxframe/tensor/indexing/nonzero.py +120 -0
  518. maxframe/tensor/indexing/setitem.py +132 -0
  519. maxframe/tensor/indexing/slice.py +29 -0
  520. maxframe/tensor/indexing/take.py +130 -0
  521. maxframe/tensor/indexing/tests/__init__.py +15 -0
  522. maxframe/tensor/indexing/tests/test_indexing.py +234 -0
  523. maxframe/tensor/indexing/unravel_index.py +103 -0
  524. maxframe/tensor/merge/__init__.py +15 -0
  525. maxframe/tensor/merge/stack.py +132 -0
  526. maxframe/tensor/merge/tests/__init__.py +13 -0
  527. maxframe/tensor/merge/tests/test_merge.py +52 -0
  528. maxframe/tensor/operators.py +123 -0
  529. maxframe/tensor/random/__init__.py +168 -0
  530. maxframe/tensor/random/beta.py +87 -0
  531. maxframe/tensor/random/binomial.py +137 -0
  532. maxframe/tensor/random/bytes.py +39 -0
  533. maxframe/tensor/random/chisquare.py +110 -0
  534. maxframe/tensor/random/choice.py +186 -0
  535. maxframe/tensor/random/core.py +234 -0
  536. maxframe/tensor/random/dirichlet.py +123 -0
  537. maxframe/tensor/random/exponential.py +94 -0
  538. maxframe/tensor/random/f.py +135 -0
  539. maxframe/tensor/random/gamma.py +128 -0
  540. maxframe/tensor/random/geometric.py +93 -0
  541. maxframe/tensor/random/gumbel.py +167 -0
  542. maxframe/tensor/random/hypergeometric.py +148 -0
  543. maxframe/tensor/random/laplace.py +133 -0
  544. maxframe/tensor/random/logistic.py +129 -0
  545. maxframe/tensor/random/lognormal.py +159 -0
  546. maxframe/tensor/random/logseries.py +122 -0
  547. maxframe/tensor/random/multinomial.py +133 -0
  548. maxframe/tensor/random/multivariate_normal.py +192 -0
  549. maxframe/tensor/random/negative_binomial.py +125 -0
  550. maxframe/tensor/random/noncentral_chisquare.py +132 -0
  551. maxframe/tensor/random/noncentral_f.py +126 -0
  552. maxframe/tensor/random/normal.py +143 -0
  553. maxframe/tensor/random/pareto.py +140 -0
  554. maxframe/tensor/random/permutation.py +104 -0
  555. maxframe/tensor/random/poisson.py +111 -0
  556. maxframe/tensor/random/power.py +142 -0
  557. maxframe/tensor/random/rand.py +82 -0
  558. maxframe/tensor/random/randint.py +121 -0
  559. maxframe/tensor/random/randn.py +96 -0
  560. maxframe/tensor/random/random_integers.py +123 -0
  561. maxframe/tensor/random/random_sample.py +86 -0
  562. maxframe/tensor/random/rayleigh.py +110 -0
  563. maxframe/tensor/random/shuffle.py +61 -0
  564. maxframe/tensor/random/standard_cauchy.py +105 -0
  565. maxframe/tensor/random/standard_exponential.py +72 -0
  566. maxframe/tensor/random/standard_gamma.py +120 -0
  567. maxframe/tensor/random/standard_normal.py +74 -0
  568. maxframe/tensor/random/standard_t.py +135 -0
  569. maxframe/tensor/random/tests/__init__.py +15 -0
  570. maxframe/tensor/random/tests/test_random.py +167 -0
  571. maxframe/tensor/random/triangular.py +119 -0
  572. maxframe/tensor/random/uniform.py +131 -0
  573. maxframe/tensor/random/vonmises.py +131 -0
  574. maxframe/tensor/random/wald.py +114 -0
  575. maxframe/tensor/random/weibull.py +140 -0
  576. maxframe/tensor/random/zipf.py +122 -0
  577. maxframe/tensor/rechunk/__init__.py +26 -0
  578. maxframe/tensor/rechunk/rechunk.py +43 -0
  579. maxframe/tensor/reduction/__init__.py +66 -0
  580. maxframe/tensor/reduction/all.py +103 -0
  581. maxframe/tensor/reduction/allclose.py +88 -0
  582. maxframe/tensor/reduction/any.py +105 -0
  583. maxframe/tensor/reduction/argmax.py +103 -0
  584. maxframe/tensor/reduction/argmin.py +103 -0
  585. maxframe/tensor/reduction/array_equal.py +64 -0
  586. maxframe/tensor/reduction/core.py +168 -0
  587. maxframe/tensor/reduction/count_nonzero.py +81 -0
  588. maxframe/tensor/reduction/cumprod.py +97 -0
  589. maxframe/tensor/reduction/cumsum.py +101 -0
  590. maxframe/tensor/reduction/max.py +120 -0
  591. maxframe/tensor/reduction/mean.py +123 -0
  592. maxframe/tensor/reduction/min.py +120 -0
  593. maxframe/tensor/reduction/nanargmax.py +82 -0
  594. maxframe/tensor/reduction/nanargmin.py +76 -0
  595. maxframe/tensor/reduction/nancumprod.py +91 -0
  596. maxframe/tensor/reduction/nancumsum.py +94 -0
  597. maxframe/tensor/reduction/nanmax.py +111 -0
  598. maxframe/tensor/reduction/nanmean.py +106 -0
  599. maxframe/tensor/reduction/nanmin.py +111 -0
  600. maxframe/tensor/reduction/nanprod.py +94 -0
  601. maxframe/tensor/reduction/nanstd.py +126 -0
  602. maxframe/tensor/reduction/nansum.py +115 -0
  603. maxframe/tensor/reduction/nanvar.py +149 -0
  604. maxframe/tensor/reduction/prod.py +130 -0
  605. maxframe/tensor/reduction/std.py +134 -0
  606. maxframe/tensor/reduction/sum.py +125 -0
  607. maxframe/tensor/reduction/tests/__init__.py +13 -0
  608. maxframe/tensor/reduction/tests/test_reduction.py +181 -0
  609. maxframe/tensor/reduction/var.py +176 -0
  610. maxframe/tensor/reshape/__init__.py +17 -0
  611. maxframe/tensor/reshape/reshape.py +188 -0
  612. maxframe/tensor/reshape/tests/__init__.py +15 -0
  613. maxframe/tensor/reshape/tests/test_reshape.py +37 -0
  614. maxframe/tensor/statistics/__init__.py +13 -0
  615. maxframe/tensor/statistics/percentile.py +175 -0
  616. maxframe/tensor/statistics/quantile.py +288 -0
  617. maxframe/tensor/ufunc/__init__.py +26 -0
  618. maxframe/tensor/ufunc/ufunc.py +200 -0
  619. maxframe/tensor/utils.py +718 -0
  620. maxframe/tests/__init__.py +13 -0
  621. maxframe/tests/test_codegen.py +69 -0
  622. maxframe/tests/test_protocol.py +144 -0
  623. maxframe/tests/test_utils.py +376 -0
  624. maxframe/tests/utils.py +164 -0
  625. maxframe/typing_.py +37 -0
  626. maxframe/udf.py +134 -0
  627. maxframe/utils.py +1114 -0
  628. maxframe-0.1.0b5.dist-info/METADATA +104 -0
  629. maxframe-0.1.0b5.dist-info/RECORD +647 -0
  630. maxframe-0.1.0b5.dist-info/WHEEL +5 -0
  631. maxframe-0.1.0b5.dist-info/top_level.txt +3 -0
  632. maxframe_client/__init__.py +17 -0
  633. maxframe_client/clients/__init__.py +13 -0
  634. maxframe_client/clients/framedriver.py +118 -0
  635. maxframe_client/clients/spe.py +104 -0
  636. maxframe_client/conftest.py +15 -0
  637. maxframe_client/fetcher.py +264 -0
  638. maxframe_client/session/__init__.py +22 -0
  639. maxframe_client/session/consts.py +36 -0
  640. maxframe_client/session/graph.py +119 -0
  641. maxframe_client/session/odps.py +482 -0
  642. maxframe_client/session/task.py +280 -0
  643. maxframe_client/session/tests/__init__.py +13 -0
  644. maxframe_client/session/tests/test_task.py +85 -0
  645. maxframe_client/tests/__init__.py +13 -0
  646. maxframe_client/tests/test_fetcher.py +89 -0
  647. maxframe_client/tests/test_session.py +255 -0
@@ -0,0 +1,175 @@
1
+ # Copyright 1999-2024 Alibaba Group Holding Ltd.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ import numpy as np
16
+
17
+ from ...core import ENTITY_TYPE
18
+ from ..arithmetic import truediv
19
+ from .quantile import _quantile_is_valid, _quantile_unchecked
20
+
21
+ q_error_msg = "Percentiles must be in the range [0, 100]"
22
+
23
+
24
+ def percentile(
25
+ a,
26
+ q,
27
+ axis=None,
28
+ out=None,
29
+ overwrite_input=False,
30
+ interpolation="linear",
31
+ keepdims=False,
32
+ ):
33
+ """
34
+ Compute the q-th percentile of the data along the specified axis.
35
+
36
+ Returns the q-th percentile(s) of the array elements.
37
+
38
+ Parameters
39
+ ----------
40
+ a : array_like
41
+ Input tensor or object that can be converted to a tensor.
42
+ q : array_like of float
43
+ Percentile or sequence of percentiles to compute, which must be between
44
+ 0 and 100 inclusive.
45
+ axis : {int, tuple of int, None}, optional
46
+ Axis or axes along which the percentiles are computed. The
47
+ default is to compute the percentile(s) along a flattened
48
+ version of the tensor.
49
+ out : ndarray, optional
50
+ Alternative output array in which to place the result. It must
51
+ have the same shape and buffer length as the expected output,
52
+ but the type (of the output) will be cast if necessary.
53
+ overwrite_input : bool, optional
54
+ Just for compatibility with Numpy, would not take effect.
55
+ interpolation : {'linear', 'lower', 'higher', 'midpoint', 'nearest'}
56
+ This optional parameter specifies the interpolation method to
57
+ use when the desired percentile lies between two data points
58
+ ``i < j``:
59
+
60
+ * 'linear': ``i + (j - i) * fraction``, where ``fraction``
61
+ is the fractional part of the index surrounded by ``i``
62
+ and ``j``.
63
+ * 'lower': ``i``.
64
+ * 'higher': ``j``.
65
+ * 'nearest': ``i`` or ``j``, whichever is nearest.
66
+ * 'midpoint': ``(i + j) / 2``.
67
+ keepdims : bool, optional
68
+ If this is set to True, the axes which are reduced are left in
69
+ the result as dimensions with size one. With this option, the
70
+ result will broadcast correctly against the original array `a`.
71
+
72
+ Returns
73
+ -------
74
+ percentile : scalar or ndarray
75
+ If `q` is a single percentile and `axis=None`, then the result
76
+ is a scalar. If multiple percentiles are given, first axis of
77
+ the result corresponds to the percentiles. The other axes are
78
+ the axes that remain after the reduction of `a`. If the input
79
+ contains integers or floats smaller than ``float64``, the output
80
+ data-type is ``float64``. Otherwise, the output data-type is the
81
+ same as that of the input. If `out` is specified, that array is
82
+ returned instead.
83
+
84
+ See Also
85
+ --------
86
+ mean
87
+ median : equivalent to ``percentile(..., 50)``
88
+ nanpercentile
89
+ quantile : equivalent to percentile, except with q in the range [0, 1].
90
+
91
+ Notes
92
+ -----
93
+ Given a vector ``V`` of length ``N``, the q-th percentile of
94
+ ``V`` is the value ``q/100`` of the way from the minimum to the
95
+ maximum in a sorted copy of ``V``. The values and distances of
96
+ the two nearest neighbors as well as the `interpolation` parameter
97
+ will determine the percentile if the normalized ranking does not
98
+ match the location of ``q`` exactly. This function is the same as
99
+ the median if ``q=50``, the same as the minimum if ``q=0`` and the
100
+ same as the maximum if ``q=100``.
101
+
102
+ Examples
103
+ --------
104
+ >>> import maxframe.tensor as mt
105
+ >>> a = mt.array([[10, 7, 4], [3, 2, 1]])
106
+ >>> a.execute()
107
+ array([[10, 7, 4],
108
+ [ 3, 2, 1]])
109
+ >>> mt.percentile(a, 50).execute()
110
+ 3.5
111
+ >>> mt.percentile(a, 50, axis=0).execute()
112
+ array([6.5, 4.5, 2.5])
113
+ >>> mt.percentile(a, 50, axis=1).execute()
114
+ array([7., 2.])
115
+ >>> mt.percentile(a, 50, axis=1, keepdims=True).execute()
116
+ array([[7.],
117
+ [2.]])
118
+
119
+ >>> m = mt.percentile(a, 50, axis=0)
120
+ >>> out = mt.zeros_like(m)
121
+ >>> mt.percentile(a, 50, axis=0, out=out).execute()
122
+ array([6.5, 4.5, 2.5])
123
+ >>> m.execute()
124
+ array([6.5, 4.5, 2.5])
125
+
126
+ The different types of interpolation can be visualized graphically:
127
+
128
+ .. plot::
129
+
130
+ import matplotlib.pyplot as plt
131
+ import maxframe.tensor as mt
132
+ import numpy as np
133
+
134
+ a = mt.arange(4)
135
+ p = mt.linspace(0, 100, 6001)
136
+ ax = plt.gca()
137
+ lines = [
138
+ ('linear', None),
139
+ ('higher', '--'),
140
+ ('lower', '--'),
141
+ ('nearest', '-.'),
142
+ ('midpoint', '-.'),
143
+ ]
144
+ for interpolation, style in lines:
145
+ ax.plot(
146
+ np.asarray(p), np.asarray(mt.percentile(a, p, interpolation=interpolation)),
147
+ label=interpolation, linestyle=style)
148
+ ax.set(
149
+ title='Interpolation methods for list: ' + str(a),
150
+ xlabel='Percentile',
151
+ ylabel='List item returned',
152
+ yticks=np.asarray(a))
153
+ ax.legend()
154
+ plt.show()
155
+
156
+ """
157
+ if not isinstance(q, ENTITY_TYPE):
158
+ q = np.asanyarray(q)
159
+ q = np.true_divide(q, 100)
160
+ # do check instantly if q is not a tensor
161
+ if not _quantile_is_valid(q):
162
+ raise ValueError(q_error_msg)
163
+ else:
164
+ q = truediv(q, 100)
165
+
166
+ return _quantile_unchecked(
167
+ a,
168
+ q,
169
+ axis=axis,
170
+ out=out,
171
+ overwrite_input=overwrite_input,
172
+ interpolation=interpolation,
173
+ keepdims=keepdims,
174
+ q_error_msg=q_error_msg,
175
+ )
@@ -0,0 +1,288 @@
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 collections.abc import Iterable
16
+
17
+ import numpy as np
18
+
19
+ from ... import opcodes as OperandDef
20
+ from ...core import ENTITY_TYPE
21
+ from ...serialization.serializables import AnyField, BoolField, KeyField, StringField
22
+ from ..core import TENSOR_TYPE, TensorOrder
23
+ from ..datasource import tensor as astensor
24
+ from ..operators import TensorOperator, TensorOperatorMixin
25
+ from ..utils import check_out_param
26
+
27
+
28
+ def _quantile_is_valid(q):
29
+ # avoid expensive reductions, relevant for arrays with < O(1000) elements
30
+ if q.ndim == 1 and q.size < 10:
31
+ for i in range(q.size):
32
+ if q[i] < 0.0 or q[i] > 1.0:
33
+ return False
34
+ else:
35
+ # faster than any()
36
+ if np.count_nonzero(q < 0.0) or np.count_nonzero(q > 1.0):
37
+ return False
38
+ return True
39
+
40
+
41
+ q_error_msg = "Quantiles must be in the range [0, 1]"
42
+
43
+
44
+ class TensorQuantile(TensorOperator, TensorOperatorMixin):
45
+ __slots__ = ("q_error_msg",)
46
+ _op_type_ = OperandDef.QUANTILE
47
+
48
+ a = KeyField("a")
49
+ q = AnyField("q")
50
+ axis = AnyField("axis")
51
+ out = KeyField("out")
52
+ overwrite_input = BoolField("overwrite_input")
53
+ interpolation = StringField("interpolation")
54
+ keepdims = BoolField("keepdims")
55
+
56
+ def __init__(self, **kw):
57
+ self.q_error_msg = kw.pop("q_error_msg", q_error_msg)
58
+ super().__init__(**kw)
59
+
60
+ def _set_inputs(self, inputs):
61
+ super()._set_inputs(inputs)
62
+ self.a = self._inputs[0]
63
+ if isinstance(self.q, TENSOR_TYPE):
64
+ self.q = self._inputs[1]
65
+ if isinstance(self.out, TENSOR_TYPE):
66
+ self.out = self._inputs[-1]
67
+
68
+ def __call__(self, a, q=None, out=None):
69
+ shape = [self.q.size] if self.q.ndim > 0 else []
70
+ if self.axis is None:
71
+ exclude_axes = set(range(a.ndim))
72
+ elif isinstance(self.axis, tuple):
73
+ exclude_axes = set(self.axis)
74
+ else:
75
+ exclude_axes = {self.axis}
76
+ for ax, s in enumerate(a.shape):
77
+ if ax not in exclude_axes:
78
+ shape.append(s)
79
+ elif self.keepdims:
80
+ shape.append(1)
81
+ inputs = [a] if q is None else [a, q]
82
+ order = TensorOrder.C_ORDER
83
+ if out is not None:
84
+ inputs.append(out)
85
+ order = out.order
86
+ shape = out.shape
87
+ t = self.new_tensor(inputs, shape=tuple(shape), order=order)
88
+ if out is not None:
89
+ check_out_param(out, t, "same_kind")
90
+ out.data = t.data
91
+ return out
92
+ else:
93
+ return t
94
+
95
+
96
+ INTERPOLATION_TYPES = {"linear", "lower", "higher", "midpoint", "nearest"}
97
+
98
+
99
+ def _quantile_unchecked(
100
+ a,
101
+ q,
102
+ axis=None,
103
+ out=None,
104
+ overwrite_input=False,
105
+ interpolation="linear",
106
+ keepdims=False,
107
+ q_error_msg=None,
108
+ handle_non_numeric=None,
109
+ ):
110
+ a = astensor(a)
111
+ raw_dtype = a.dtype
112
+ need_view_back = False
113
+ if handle_non_numeric and not np.issubdtype(a.dtype, np.number):
114
+ # enable handle_non_numeric is often used
115
+ # to handle the datetime-like dtype
116
+ a = a.astype("i8")
117
+ need_view_back = True
118
+ if isinstance(q, ENTITY_TYPE):
119
+ q = astensor(q)
120
+ # do check in tile
121
+ q_input = q
122
+ else:
123
+ q_input = None
124
+
125
+ if isinstance(axis, Iterable):
126
+ axis = tuple(axis)
127
+
128
+ if q.ndim > 1:
129
+ raise ValueError("`q` should be a scalar or array of float")
130
+
131
+ if out is not None and not isinstance(out, TENSOR_TYPE):
132
+ raise TypeError(f"`out` should be a tensor, got {type(out)}")
133
+
134
+ if interpolation not in INTERPOLATION_TYPES:
135
+ raise ValueError(
136
+ "interpolation can only be 'linear', 'lower' "
137
+ "'higher', 'midpoint', or 'nearest'"
138
+ )
139
+
140
+ # infer dtype
141
+ q_tiny = np.random.rand(2 if q.size % 2 == 0 else 1).astype(q.dtype)
142
+ if handle_non_numeric and not np.issubdtype(a.dtype, np.number):
143
+ dtype = a.dtype
144
+ else:
145
+ dtype = np.quantile(
146
+ np.empty(1, dtype=a.dtype), q_tiny, interpolation=interpolation
147
+ ).dtype
148
+ op = TensorQuantile(
149
+ q=q,
150
+ axis=axis,
151
+ out=out,
152
+ overwrite_input=overwrite_input,
153
+ interpolation=interpolation,
154
+ keepdims=keepdims,
155
+ handle_non_numeric=handle_non_numeric,
156
+ q_error_msg=q_error_msg,
157
+ dtype=dtype,
158
+ gpu=a.op.gpu,
159
+ )
160
+ ret = op(a, q=q_input, out=out)
161
+ if need_view_back:
162
+ ret = ret.astype(raw_dtype)
163
+ return ret
164
+
165
+
166
+ def quantile(
167
+ a,
168
+ q,
169
+ axis=None,
170
+ out=None,
171
+ overwrite_input=False,
172
+ interpolation="linear",
173
+ keepdims=False,
174
+ **kw,
175
+ ):
176
+ """
177
+ Compute the q-th quantile of the data along the specified axis.
178
+
179
+ Parameters
180
+ ----------
181
+ a : array_like
182
+ Input tensor or object that can be converted to a tensor.
183
+ q : array_like of float
184
+ Quantile or sequence of quantiles to compute, which must be between
185
+ 0 and 1 inclusive.
186
+ axis : {int, tuple of int, None}, optional
187
+ Axis or axes along which the quantiles are computed. The
188
+ default is to compute the quantile(s) along a flattened
189
+ version of the tensor.
190
+ out : Tensor, optional
191
+ Alternative output tensor in which to place the result. It must
192
+ have the same shape and buffer length as the expected output,
193
+ but the type (of the output) will be cast if necessary.
194
+ overwrite_input : bool, optional
195
+ Just for compatibility with Numpy, would not take effect.
196
+ interpolation : {'linear', 'lower', 'higher', 'midpoint', 'nearest'}
197
+ This optional parameter specifies the interpolation method to
198
+ use when the desired quantile lies between two data points
199
+ ``i < j``:
200
+
201
+ * linear: ``i + (j - i) * fraction``, where ``fraction``
202
+ is the fractional part of the index surrounded by ``i``
203
+ and ``j``.
204
+ * lower: ``i``.
205
+ * higher: ``j``.
206
+ * nearest: ``i`` or ``j``, whichever is nearest.
207
+ * midpoint: ``(i + j) / 2``.
208
+ keepdims : bool, optional
209
+ If this is set to True, the axes which are reduced are left in
210
+ the result as dimensions with size one. With this option, the
211
+ result will broadcast correctly against the original tensor `a`.
212
+
213
+ Returns
214
+ -------
215
+ quantile : scalar or Tensor
216
+ If `q` is a single quantile and `axis=None`, then the result
217
+ is a scalar. If multiple quantiles are given, first axis of
218
+ the result corresponds to the quantiles. The other axes are
219
+ the axes that remain after the reduction of `a`. If the input
220
+ contains integers or floats smaller than ``float64``, the output
221
+ data-type is ``float64``. Otherwise, the output data-type is the
222
+ same as that of the input. If `out` is specified, that tensor is
223
+ returned instead.
224
+
225
+ See Also
226
+ --------
227
+ mean
228
+ percentile : equivalent to quantile, but with q in the range [0, 100].
229
+ median : equivalent to ``quantile(..., 0.5)``
230
+ nanquantile
231
+
232
+ Notes
233
+ -----
234
+ Given a vector ``V`` of length ``N``, the q-th quantile of
235
+ ``V`` is the value ``q`` of the way from the minimum to the
236
+ maximum in a sorted copy of ``V``. The values and distances of
237
+ the two nearest neighbors as well as the `interpolation` parameter
238
+ will determine the quantile if the normalized ranking does not
239
+ match the location of ``q`` exactly. This function is the same as
240
+ the median if ``q=0.5``, the same as the minimum if ``q=0.0`` and the
241
+ same as the maximum if ``q=1.0``.
242
+
243
+ Examples
244
+ --------
245
+ >>> import maxframe.tensor as mt
246
+ >>> a = mt.array([[10, 7, 4], [3, 2, 1]])
247
+ >>> a.execute()
248
+ array([[10, 7, 4],
249
+ [ 3, 2, 1]])
250
+ >>> mt.quantile(a, 0.5).execute()
251
+ 3.5
252
+ >>> mt.quantile(a, 0.5, axis=0).execute()
253
+ array([6.5, 4.5, 2.5])
254
+ >>> mt.quantile(a, 0.5, axis=1).execute()
255
+ array([7., 2.])
256
+ >>> mt.quantile(a, 0.5, axis=1, keepdims=True).execute()
257
+ array([[7.],
258
+ [2.]])
259
+ >>> m = mt.quantile(a, 0.5, axis=0)
260
+ >>> out = mt.zeros_like(m)
261
+ >>> mt.quantile(a, 0.5, axis=0, out=out).execute()
262
+ array([6.5, 4.5, 2.5])
263
+ >>> m.execute()
264
+ array([6.5, 4.5, 2.5])
265
+ """
266
+
267
+ handle_non_numeric = kw.pop("handle_non_numeric", None)
268
+ if len(kw) > 0: # pragma: no cover
269
+ raise TypeError(
270
+ f"quantile() got an unexpected keyword argument '{next(iter(kw))}'"
271
+ )
272
+
273
+ if not isinstance(q, ENTITY_TYPE):
274
+ q = np.asanyarray(q)
275
+ # do check instantly if q is not a tensor
276
+ if not _quantile_is_valid(q):
277
+ raise ValueError(q_error_msg)
278
+
279
+ return _quantile_unchecked(
280
+ a,
281
+ q,
282
+ axis=axis,
283
+ out=out,
284
+ overwrite_input=overwrite_input,
285
+ interpolation=interpolation,
286
+ keepdims=keepdims,
287
+ handle_non_numeric=handle_non_numeric,
288
+ )
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ # Copyright 1999-2024 Alibaba Group Holding Ltd.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+
18
+ def _install():
19
+ from ..core import Tensor
20
+ from .ufunc import _array_ufunc
21
+
22
+ Tensor.__array_ufunc__ = _array_ufunc
23
+
24
+
25
+ _install()
26
+ del _install
@@ -0,0 +1,200 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ # Copyright 1999-2024 Alibaba Group Holding Ltd.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ from numbers import Number
18
+
19
+ import numpy as np
20
+
21
+ from .. import arithmetic as arith
22
+ from .. import reduction
23
+ from ..datasource import tensor as astensor
24
+
25
+
26
+ class TensorUfuncDef:
27
+ def __init__(
28
+ self, method, aggregator=None, accumulator=None, pre_agg=None, post_agg=None
29
+ ):
30
+ self._method = method
31
+ self._aggregator = aggregator
32
+ self._accumulator = accumulator
33
+ self._pre_agg = pre_agg
34
+ self._post_agg = post_agg
35
+
36
+ def __call__(self, *args, **kwargs):
37
+ return self._method(*args, **kwargs)
38
+
39
+ def at(self, a, indices, b=None):
40
+ # todo handle setting duplicated keys, a separate operator may be needed
41
+ if b is None:
42
+ a[indices] = self(a[indices])
43
+ else:
44
+ a[indices] = self(a[indices], b)
45
+
46
+ def accumulate(self, array, axis=0, dtype=None, out=None):
47
+ if self._accumulator is None:
48
+ raise NotImplementedError
49
+ data = array if self._pre_agg is None else self._pre_agg(array)
50
+ result = self._accumulator(data, axis=axis, dtype=dtype)
51
+ result = result if self._post_agg is None else self._post_agg(result)
52
+ if out is not None:
53
+ out[0]._data = result._data
54
+ else:
55
+ return result
56
+
57
+ def reduce(self, array, axis=0, dtype=None, out=None, keepdims=False):
58
+ if self._aggregator is None:
59
+ raise NotImplementedError
60
+ data = array if self._pre_agg is None else self._pre_agg(array)
61
+ result = self._aggregator(data, axis=axis, dtype=dtype, keepdims=keepdims)
62
+ result = result if self._post_agg is None else self._post_agg(result)
63
+ if out is not None:
64
+ out[0]._data = result._data
65
+ else:
66
+ return result
67
+
68
+
69
+ UFUNC_TO_TENSOR_FUNCS = {
70
+ np.add: TensorUfuncDef(
71
+ arith.add,
72
+ accumulator=reduction.cumsum,
73
+ aggregator=reduction.sum,
74
+ ),
75
+ np.subtract: TensorUfuncDef(arith.subtract),
76
+ np.multiply: TensorUfuncDef(
77
+ arith.multiply,
78
+ accumulator=reduction.cumprod,
79
+ aggregator=reduction.prod,
80
+ ),
81
+ np.divide: TensorUfuncDef(arith.divide),
82
+ np.logaddexp: TensorUfuncDef(
83
+ arith.logaddexp,
84
+ accumulator=reduction.cumsum,
85
+ aggregator=reduction.sum,
86
+ pre_agg=arith.exp,
87
+ post_agg=arith.log,
88
+ ),
89
+ np.logaddexp2: TensorUfuncDef(
90
+ arith.logaddexp2,
91
+ accumulator=reduction.cumsum,
92
+ aggregator=reduction.sum,
93
+ pre_agg=lambda x: arith.power(2, x),
94
+ post_agg=arith.log2,
95
+ ),
96
+ np.true_divide: TensorUfuncDef(arith.truediv),
97
+ np.floor_divide: TensorUfuncDef(arith.floordiv),
98
+ # unary
99
+ np.negative: TensorUfuncDef(arith.negative),
100
+ np.power: TensorUfuncDef(arith.power),
101
+ np.float_power: TensorUfuncDef(arith.float_power),
102
+ np.remainder: TensorUfuncDef(arith.remainder),
103
+ np.mod: TensorUfuncDef(arith.mod),
104
+ np.fmod: TensorUfuncDef(arith.fmod),
105
+ np.conj: TensorUfuncDef(arith.conj),
106
+ np.conjugate: TensorUfuncDef(arith.conjugate),
107
+ np.exp: TensorUfuncDef(arith.exp),
108
+ np.exp2: TensorUfuncDef(arith.exp2),
109
+ np.log: TensorUfuncDef(arith.log),
110
+ np.log2: TensorUfuncDef(arith.log2),
111
+ np.log10: TensorUfuncDef(arith.log10),
112
+ np.log1p: TensorUfuncDef(arith.log1p),
113
+ np.expm1: TensorUfuncDef(arith.expm1),
114
+ np.sqrt: TensorUfuncDef(arith.sqrt),
115
+ np.square: TensorUfuncDef(arith.square),
116
+ np.cbrt: TensorUfuncDef(arith.cbrt),
117
+ np.reciprocal: TensorUfuncDef(arith.reciprocal),
118
+ # trigonometric functions
119
+ np.sin: TensorUfuncDef(arith.sin),
120
+ np.cos: TensorUfuncDef(arith.cos),
121
+ np.tan: TensorUfuncDef(arith.tan),
122
+ np.arcsin: TensorUfuncDef(arith.arcsin),
123
+ np.arccos: TensorUfuncDef(arith.arccos),
124
+ np.arctan: TensorUfuncDef(arith.arctan),
125
+ np.arctan2: TensorUfuncDef(arith.arctan2),
126
+ np.hypot: TensorUfuncDef(arith.hypot),
127
+ np.sinh: TensorUfuncDef(arith.sinh),
128
+ np.cosh: TensorUfuncDef(arith.cosh),
129
+ np.tanh: TensorUfuncDef(arith.tanh),
130
+ np.arcsinh: TensorUfuncDef(arith.arcsinh),
131
+ np.arccosh: TensorUfuncDef(arith.arccosh),
132
+ np.arctanh: TensorUfuncDef(arith.arctanh),
133
+ np.deg2rad: TensorUfuncDef(arith.deg2rad),
134
+ np.rad2deg: TensorUfuncDef(arith.rad2deg),
135
+ # comparison functions
136
+ np.greater: TensorUfuncDef(arith.greater),
137
+ np.greater_equal: TensorUfuncDef(arith.greater_equal),
138
+ np.less: TensorUfuncDef(arith.less),
139
+ np.less_equal: TensorUfuncDef(arith.less_equal),
140
+ np.not_equal: TensorUfuncDef(arith.not_equal),
141
+ np.equal: TensorUfuncDef(arith.equal),
142
+ np.logical_and: TensorUfuncDef(arith.logical_and),
143
+ np.logical_or: TensorUfuncDef(arith.logical_or),
144
+ np.logical_xor: TensorUfuncDef(arith.logical_xor),
145
+ np.logical_not: TensorUfuncDef(arith.logical_not),
146
+ np.maximum: TensorUfuncDef(arith.maximum),
147
+ np.minimum: TensorUfuncDef(arith.minimum),
148
+ np.fmax: TensorUfuncDef(arith.fmax),
149
+ np.fmin: TensorUfuncDef(arith.fmin),
150
+ # floating functions
151
+ np.isfinite: TensorUfuncDef(arith.isfinite),
152
+ np.isinf: TensorUfuncDef(arith.isinf),
153
+ np.isnan: TensorUfuncDef(arith.isnan),
154
+ np.signbit: TensorUfuncDef(arith.signbit),
155
+ np.copysign: TensorUfuncDef(arith.copysign),
156
+ np.nextafter: TensorUfuncDef(arith.nextafter),
157
+ np.spacing: TensorUfuncDef(arith.spacing),
158
+ np.modf: TensorUfuncDef(arith.modf),
159
+ np.ldexp: TensorUfuncDef(arith.ldexp),
160
+ np.frexp: TensorUfuncDef(arith.frexp),
161
+ np.floor: TensorUfuncDef(arith.floor),
162
+ np.ceil: TensorUfuncDef(arith.ceil),
163
+ np.trunc: TensorUfuncDef(arith.trunc),
164
+ # more math functions
165
+ np.degrees: TensorUfuncDef(arith.degrees),
166
+ np.radians: TensorUfuncDef(arith.radians),
167
+ np.rint: TensorUfuncDef(arith.rint),
168
+ np.fabs: TensorUfuncDef(arith.fabs),
169
+ np.sign: TensorUfuncDef(arith.sign),
170
+ np.absolute: TensorUfuncDef(arith.absolute),
171
+ }
172
+
173
+
174
+ def _check_arg(arg):
175
+ if isinstance(arg, Number):
176
+ return True
177
+
178
+ try:
179
+ astensor(arg)
180
+ return True
181
+ except ValueError:
182
+ return False
183
+
184
+
185
+ def _array_ufunc(_, ufunc, method, *inputs, **kwargs):
186
+ out = kwargs.get("out", tuple())
187
+ for x in inputs + out:
188
+ if not _check_arg(x):
189
+ return NotImplemented
190
+
191
+ if ufunc.signature is not None:
192
+ return NotImplemented
193
+ if ufunc not in UFUNC_TO_TENSOR_FUNCS:
194
+ return NotImplemented
195
+
196
+ try:
197
+ tensor_func = getattr(UFUNC_TO_TENSOR_FUNCS[ufunc], method)
198
+ return tensor_func(*inputs, **kwargs)
199
+ except (AttributeError, NotImplementedError):
200
+ return NotImplemented