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,130 @@
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 ..datasource import tensor as astensor
18
+ from ..utils import check_out_param, validate_axis
19
+
20
+
21
+ def take(a, indices, axis=None, out=None):
22
+ """
23
+ Take elements from a tensor along an axis.
24
+
25
+ When axis is not None, this function does the same thing as "fancy"
26
+ indexing (indexing arrays using tensors); however, it can be easier to use
27
+ if you need elements along a given axis. A call such as
28
+ ``mt.take(arr, indices, axis=3)`` is equivalent to
29
+ ``arr[:,:,:,indices,...]``.
30
+
31
+ Explained without fancy indexing, this is equivalent to the following use
32
+ of `ndindex`, which sets each of ``ii``, ``jj``, and ``kk`` to a tuple of
33
+ indices::
34
+
35
+ Ni, Nk = a.shape[:axis], a.shape[axis+1:]
36
+ Nj = indices.shape
37
+ for ii in ndindex(Ni):
38
+ for jj in ndindex(Nj):
39
+ for kk in ndindex(Nk):
40
+ out[ii + jj + kk] = a[ii + (indices[jj],) + kk]
41
+
42
+ Parameters
43
+ ----------
44
+ a : array_like (Ni..., M, Nk...)
45
+ The source tensor.
46
+ indices : array_like (Nj...)
47
+ The indices of the values to extract.
48
+
49
+ Also allow scalars for indices.
50
+ axis : int, optional
51
+ The axis over which to select values. By default, the flattened
52
+ input tensor is used.
53
+ out : Tensor, optional (Ni..., Nj..., Nk...)
54
+ If provided, the result will be placed in this tensor. It should
55
+ be of the appropriate shape and dtype.
56
+ mode : {'raise', 'wrap', 'clip'}, optional
57
+ Specifies how out-of-bounds indices will behave.
58
+
59
+ * 'raise' -- raise an error (default)
60
+ * 'wrap' -- wrap around
61
+ * 'clip' -- clip to the range
62
+
63
+ 'clip' mode means that all indices that are too large are replaced
64
+ by the index that addresses the last element along that axis. Note
65
+ that this disables indexing with negative numbers.
66
+
67
+ Returns
68
+ -------
69
+ out : Tensor (Ni..., Nj..., Nk...)
70
+ The returned tensor has the same type as `a`.
71
+
72
+ See Also
73
+ --------
74
+ compress : Take elements using a boolean mask
75
+ Tensor.take : equivalent method
76
+
77
+ Notes
78
+ -----
79
+
80
+ By eliminating the inner loop in the description above, and using `s_` to
81
+ build simple slice objects, `take` can be expressed in terms of applying
82
+ fancy indexing to each 1-d slice::
83
+
84
+ Ni, Nk = a.shape[:axis], a.shape[axis+1:]
85
+ for ii in ndindex(Ni):
86
+ for kk in ndindex(Nj):
87
+ out[ii + s_[...,] + kk] = a[ii + s_[:,] + kk][indices]
88
+
89
+ For this reason, it is equivalent to (but faster than) the following use
90
+ of `apply_along_axis`::
91
+
92
+ out = mt.apply_along_axis(lambda a_1d: a_1d[indices], axis, a)
93
+
94
+ Examples
95
+ --------
96
+ >>> import maxframe.tensor as mt
97
+ >>> a = [4, 3, 5, 7, 6, 8]
98
+ >>> indices = [0, 1, 4]
99
+ >>> mt.take(a, indices).execute()
100
+ array([4, 3, 6])
101
+
102
+ In this example if `a` is a tensor, "fancy" indexing can be used.
103
+
104
+ >>> a = mt.array(a)
105
+ >>> a[indices].execute()
106
+ array([4, 3, 6])
107
+
108
+ If `indices` is not one dimensional, the output also has these dimensions.
109
+
110
+ >>> mt.take(a, [[0, 1], [2, 3]]).execute()
111
+ array([[4, 3],
112
+ [5, 7]])
113
+ """
114
+ a = astensor(a)
115
+ if axis is None:
116
+ t = a.ravel()[indices]
117
+ else:
118
+ axis = validate_axis(a.ndim, axis)
119
+ t = a[(slice(None),) * axis + (indices,)]
120
+
121
+ if out is None:
122
+ return t
123
+
124
+ if out.shape != t.shape:
125
+ raise ValueError(
126
+ f"output tensor has wrong shape, expect: {t.shape}, got: {out.shape}"
127
+ )
128
+ check_out_param(out, t, "unsafe")
129
+ out.data = t.data
130
+ return out
@@ -0,0 +1,15 @@
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.
@@ -0,0 +1,234 @@
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
+ import numpy as np
18
+ import pytest
19
+
20
+ from ...datasource import array, empty, ones, tensor
21
+ from ...datasource.ones import TensorOnes
22
+ from .. import choose, compress, fill_diagonal, unravel_index
23
+ from ..setitem import TensorIndexSetValue
24
+
25
+
26
+ def test_bool_indexing():
27
+ t = ones((100, 200, 300))
28
+ indexed = t[t < 2]
29
+ assert len(indexed.shape) == 1
30
+ assert np.isnan(indexed.shape[0])
31
+
32
+ t2 = ones((100, 200))
33
+ indexed = t[t2 < 2]
34
+ assert len(indexed.shape) == 2
35
+ assert np.isnan(indexed.shape[0])
36
+ assert indexed.shape[1] == 300
37
+
38
+ t2 = ones((100, 200))
39
+ indexed = t[t2 < 2] + 1
40
+ assert len(indexed.shape) == 2
41
+ assert np.isnan(indexed.shape[0])
42
+ assert indexed.shape[1] == 300
43
+
44
+ t2 = ones((10, 20))
45
+ rs = np.random.RandomState(0)
46
+ i1 = np.zeros(10, dtype=bool)
47
+ i1[rs.permutation(np.arange(10))[:5]] = True
48
+ i2 = np.zeros(20, dtype=bool)
49
+ i2[rs.permutation(np.arange(20))[:5]] = True
50
+ indexed = t2[i1, i2]
51
+ assert len(indexed.shape) == 1
52
+ assert indexed.shape[0] == 5
53
+
54
+ t3 = ones((101, 200))
55
+ with pytest.raises(IndexError) as cm:
56
+ _ = t[t3 < 2] # noqa: F841
57
+ e = cm.value.args[0]
58
+ assert "along dimension 0" in e
59
+ assert "dimension is 100 but corresponding boolean dimension is 101" in e
60
+
61
+ t4 = ones((100, 201))
62
+ with pytest.raises(IndexError) as cm:
63
+ _ = t[t4 < 2] # noqa: F841
64
+ e = cm.value.args[0]
65
+ assert "along dimension 1" in e
66
+ assert "dimension is 200 but corresponding boolean dimension is 201" in e
67
+
68
+
69
+ def test_slice():
70
+ t = ones((100, 200, 300))
71
+ t2 = t[10:30, 199:, -30:303]
72
+ assert t2.shape == (20, 1, 30)
73
+
74
+ t3 = t[10:90:4, 20:80:5]
75
+ s1 = len(list(range(100))[10:90:4])
76
+ s2 = len(list(range(200))[20:80:5])
77
+ assert t3.shape == (s1, s2, 300)
78
+
79
+
80
+ def test_fancy_indexing():
81
+ t = ones((100, 200, 300))
82
+ t2 = t[[0, 1], [2, 3]]
83
+ assert t2.shape == (2, 300)
84
+
85
+ t3 = t[[[0, 1], [2, 3]], [4, 5]]
86
+ assert t3.shape == (2, 2, 300)
87
+
88
+ with pytest.raises(IndexError) as cm:
89
+ _ = t[[1, 2], [3, 4, 5]] # noqa: F841
90
+ e = cm.value.args[0]
91
+ assert (
92
+ e == "shape mismatch: indexing arrays could not be broadcast "
93
+ "together with shapes (2,) (3,)"
94
+ )
95
+
96
+ with pytest.raises(IndexError):
97
+ t[[100]]
98
+
99
+ t = ones((100, 200, 300), chunk_size=10)
100
+
101
+ # fancy index on numpy ndarrays
102
+
103
+ t4 = t[:10, -10:, [13, 244, 151, 242, 34]]
104
+ assert t4.shape == (10, 10, 5)
105
+
106
+ t5 = t[:10, -10:, [1, 10, 20, 33, 34, 200]]
107
+ assert t5.shape == (10, 10, 6)
108
+
109
+ t6 = t[[20, 1, 33, 22, 11], :15, [255, 211, 2, 11, 121]]
110
+ assert t6.shape == (5, 15)
111
+
112
+ t7 = t[[5, 6, 33, 66], :15, [0, 9, 2, 11]]
113
+ assert t7.shape == (4, 15)
114
+
115
+ t8 = t[[[5, 33], [66, 6]], :15, [255, 11]]
116
+ assert t8.shape == (2, 2, 15)
117
+
118
+ # fancy index on tensors
119
+
120
+ t9 = t[:10, -10:, tensor([13, 244, 151, 242, 34], chunk_size=2)]
121
+ assert t9.shape == (10, 10, 5)
122
+
123
+ t10 = t[:10, -10:, tensor([1, 10, 20, 33, 34, 200], chunk_size=4)]
124
+ assert t10.shape == (10, 10, 6)
125
+
126
+ t11 = t[
127
+ tensor([20, 1, 33, 22, 11], chunk_size=2),
128
+ :15,
129
+ tensor([255, 211, 2, 11, 121], chunk_size=3),
130
+ ]
131
+ assert t11.shape == (5, 15)
132
+ # need a concat, because the fancy indexes are not ascending according to chunk index
133
+
134
+ t12 = t[tensor([5, 6, 33, 66], chunk_size=2), :15, [0, 9, 2, 11]]
135
+ assert t12.shape == (4, 15)
136
+
137
+ t13 = t[tensor([[5, 33], [66, 6]]), :15, tensor([255, 11])]
138
+ assert t13.shape == (2, 2, 15)
139
+
140
+
141
+ def test_mixed_indexing():
142
+ t = ones((100, 200, 300, 400))
143
+
144
+ with pytest.raises(IndexError):
145
+ _ = t[ones((100, 200), dtype=float)] # noqa: F841
146
+
147
+ t2 = t[ones(100) < 2, ..., 20::101, 2]
148
+ assert len(t2.shape) == 3
149
+ assert np.isnan(t2.shape[0])
150
+
151
+ t3 = ones((2, 3, 4, 5))
152
+ t4 = t3[1]
153
+ assert t4.flags["C_CONTIGUOUS"] == np.ones((2, 3, 4, 5))[1].flags["C_CONTIGUOUS"]
154
+ assert t4.flags["F_CONTIGUOUS"] == np.ones((2, 3, 4, 5))[1].flags["F_CONTIGUOUS"]
155
+
156
+
157
+ def test_setitem():
158
+ shape = (10, 20, 30, 40)
159
+ t = ones(shape, chunk_size=5, dtype="i4")
160
+ t[5:20:3, 5, ..., :-5] = 2.2
161
+
162
+ assert isinstance(t.op, TensorIndexSetValue)
163
+ assert t.shape == shape
164
+ assert isinstance(t.inputs[0].op.outputs[0].op, TensorOnes)
165
+
166
+ t2 = ones(shape, chunk_size=5, dtype="i4")
167
+ shape = t2[5:20:3, 5, ..., :-5].shape
168
+ t2[5:20:3, 5, ..., :-5] = ones(shape, chunk_size=4, dtype="i4") * 2
169
+
170
+ assert isinstance(t2.op, TensorIndexSetValue)
171
+
172
+
173
+ def test_choose():
174
+ choices = [[0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33]]
175
+
176
+ with pytest.raises(TypeError):
177
+ choose([2, 3, 1, 0], choices, out=1)
178
+
179
+ with pytest.raises(ValueError):
180
+ choose([2, 3, 1, 0], choices, out=tensor(np.empty((1, 4))))
181
+
182
+
183
+ def test_unravel_index():
184
+ indices = tensor([22, 41, 37], chunk_size=1)
185
+ t = unravel_index(indices, (7, 6))
186
+
187
+ assert len(t) == 2
188
+
189
+ with pytest.raises(TypeError):
190
+ unravel_index([22, 41, 37], (7, 6), order="B")
191
+
192
+
193
+ def test_compress():
194
+ a = np.array([[1, 2], [3, 4], [5, 6]])
195
+
196
+ with pytest.raises(TypeError):
197
+ compress([0, 1], a, axis=0, out=1)
198
+
199
+ with pytest.raises(TypeError):
200
+ compress(
201
+ [0, 1],
202
+ array([[1, 2], [3, 4], [5, 6]], dtype="i8"),
203
+ axis=0,
204
+ out=empty((1, 2), dtype="f8"),
205
+ )
206
+
207
+
208
+ def test_operator_key():
209
+ t = ones((10, 2), chunk_size=5)
210
+ t_slice1 = t[:5]
211
+ t_slice2 = t[5:]
212
+
213
+ assert t_slice1.op.key != t_slice2.op.key
214
+
215
+
216
+ def test_fill_diagonal():
217
+ a = tensor(np.random.rand(10, 13))
218
+ fill_diagonal(a, 10)
219
+
220
+ assert a.shape == (10, 13)
221
+
222
+ # must be Tensor
223
+ with pytest.raises(TypeError):
224
+ fill_diagonal(np.random.rand(11, 10), 1)
225
+
226
+ # at least 2-d required
227
+ with pytest.raises(ValueError):
228
+ a = tensor(np.random.rand(4))
229
+ fill_diagonal(a, 1)
230
+
231
+ # for more than 2-d, shape on each dimension should be equal
232
+ with pytest.raises(ValueError):
233
+ a = tensor(np.random.rand(11, 10, 11))
234
+ fill_diagonal(a, 1)
@@ -0,0 +1,103 @@
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 collections.abc import Iterable
18
+
19
+ import numpy as np
20
+
21
+ from ... import opcodes
22
+ from ...core import ExecutableTuple
23
+ from ...serialization.serializables import FieldTypes, KeyField, StringField, TupleField
24
+ from ..core import TensorOrder
25
+ from ..datasource import tensor as astensor
26
+ from ..operators import TensorHasInput, TensorOperatorMixin
27
+
28
+
29
+ class TensorUnravelIndex(TensorHasInput, TensorOperatorMixin):
30
+ _op_type_ = opcodes.UNRAVEL_INDEX
31
+
32
+ _input = KeyField("input")
33
+ dims = TupleField("dims", FieldTypes.int32, default=None)
34
+ order = StringField("order", default=None)
35
+
36
+ def __init__(self, order=None, **kw):
37
+ super().__init__(order=order, **kw)
38
+ if self.order is None:
39
+ self.order = "C"
40
+
41
+ @property
42
+ def output_limit(self):
43
+ return float("inf")
44
+
45
+ def _set_inputs(self, inputs):
46
+ super()._set_inputs(inputs)
47
+ self._input = self._inputs[0]
48
+
49
+ def __call__(self, indices):
50
+ order = TensorOrder.C_ORDER if self.order == "C" else TensorOrder.F_ORDER
51
+ kws = [{"pos": i, "order": order} for i in range(len(self.dims))]
52
+ return ExecutableTuple(
53
+ self.new_tensors([indices], indices.shape, kws=kws, output_limit=len(kws))
54
+ )
55
+
56
+
57
+ def unravel_index(indices, dims, order="C"):
58
+ """
59
+ Converts a flat index or tensor of flat indices into a tuple
60
+ of coordinate tensors.
61
+
62
+ Parameters
63
+ ----------
64
+ indices : array_like
65
+ An integer tensor whose elements are indices into the flattened
66
+ version of a tensor of dimensions ``dims``.
67
+ dims : tuple of ints
68
+ The shape of the tensor to use for unraveling ``indices``.
69
+ order : {'C', 'F'}, optional
70
+ Determines whether the indices should be viewed as indexing in
71
+ row-major (C-style) or column-major (Fortran-style) order.
72
+
73
+ Returns
74
+ -------
75
+ unraveled_coords : tuple of Tensor
76
+ Each tensor in the tuple has the same shape as the ``indices``
77
+ tensor.
78
+
79
+ See Also
80
+ --------
81
+ ravel_multi_index
82
+
83
+ Examples
84
+ --------
85
+ >>> import maxframe.tensor as mt
86
+
87
+ >>> mt.unravel_index([22, 41, 37], (7,6)).execute()
88
+ (array([3, 6, 6]), array([4, 5, 1]))
89
+
90
+ >>> mt.unravel_index(1621, (6,7,8,9)).execute()
91
+ (3, 1, 4, 1)
92
+ """
93
+ indices = astensor(indices)
94
+ if isinstance(dims, Iterable):
95
+ dims = tuple(dims)
96
+ else:
97
+ dims = (dims,)
98
+
99
+ if order not in "CF":
100
+ raise TypeError("only 'C' or 'F' order is permitted")
101
+
102
+ op = TensorUnravelIndex(dims=dims, dtype=np.dtype(np.intp), order=order)
103
+ return op(indices)
@@ -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 .stack import stack
@@ -0,0 +1,132 @@
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
+ import numpy as np
18
+
19
+ from ... import opcodes
20
+ from ...serialization.serializables import Int32Field
21
+ from ..core import Tensor, TensorOrder
22
+ from ..datasource import tensor as astensor
23
+ from ..operators import TensorOperator, TensorOperatorMixin
24
+ from ..utils import check_out_param
25
+
26
+
27
+ class TensorStack(TensorOperator, TensorOperatorMixin):
28
+ _op_type_ = opcodes.STACK
29
+
30
+ axis = Int32Field("axis", default=None)
31
+
32
+ def __call__(self, tensors, out=None):
33
+ if out is not None and not isinstance(out, Tensor):
34
+ raise TypeError(f"`out` must be a Tensor, got {type(out)} instead")
35
+
36
+ shape = (
37
+ tensors[0].shape[: self.axis]
38
+ + (len(tensors),)
39
+ + tensors[0].shape[self.axis :]
40
+ )
41
+ tensor_order = TensorOrder.C_ORDER if out is None else out.order
42
+ t = self.new_tensor(tensors, shape, order=tensor_order)
43
+
44
+ if out is None:
45
+ return t
46
+
47
+ if out.shape != t.shape:
48
+ raise ValueError("Output tensor has wrong dimensionality")
49
+ check_out_param(out, t, "same_kind")
50
+ out.data = t.data
51
+ return out
52
+
53
+
54
+ def stack(tensors, axis=0, out=None):
55
+ """
56
+ Join a sequence of tensors along a new axis.
57
+
58
+ The `axis` parameter specifies the index of the new axis in the dimensions
59
+ of the result. For example, if ``axis=0`` it will be the first dimension
60
+ and if ``axis=-1`` it will be the last dimension.
61
+
62
+ Parameters
63
+ ----------
64
+ tensors : sequence of array_like
65
+ Each tensor must have the same shape.
66
+ axis : int, optional
67
+ The axis in the result tensor along which the input tensors are stacked.
68
+ out : Tensor, optional
69
+ If provided, the destination to place the result. The shape must be
70
+ correct, matching that of what stack would have returned if no
71
+ out argument were specified.
72
+
73
+ Returns
74
+ -------
75
+ stacked : Tensor
76
+ The stacked tensor has one more dimension than the input tensors.
77
+
78
+ See Also
79
+ --------
80
+ concatenate : Join a sequence of tensors along an existing axis.
81
+ split : Split tensor into a list of multiple sub-tensors of equal size.
82
+ block : Assemble tensors from blocks.
83
+
84
+ Examples
85
+ --------
86
+ >>> import maxframe.tensor as mt
87
+
88
+ >>> arrays = [mt.random.randn(3, 4) for _ in range(10)]
89
+ >>> mt.stack(arrays, axis=0).shape
90
+ (10, 3, 4)
91
+
92
+ >>> mt.stack(arrays, axis=1).shape
93
+ (3, 10, 4)
94
+
95
+ >>> mt.stack(arrays, axis=2).shape
96
+ (3, 4, 10)
97
+
98
+ >>> a = mt.array([1, 2, 3])
99
+ >>> b = mt.array([2, 3, 4])
100
+ >>> mt.stack((a, b)).execute()
101
+ array([[1, 2, 3],
102
+ [2, 3, 4]])
103
+
104
+ >>> mt.stack((a, b), axis=-1).execute()
105
+ array([[1, 2],
106
+ [2, 3],
107
+ [3, 4]])
108
+
109
+ """
110
+ tensors = [astensor(t) for t in tensors]
111
+
112
+ to_check_shapes = []
113
+ for t in tensors:
114
+ if not any(np.isnan(s) for s in t.shape):
115
+ to_check_shapes.append(t.shape)
116
+ if to_check_shapes and len(set(to_check_shapes)) != 1:
117
+ raise ValueError("all input tensors must have the same shape")
118
+
119
+ ndim = len(tensors[0].shape)
120
+ raw_axis = axis
121
+ if axis < 0:
122
+ axis = ndim + axis + 1
123
+ if axis > ndim or axis < 0:
124
+ raise np.AxisError(
125
+ f"axis {raw_axis} is out of bounds for tensor of dimension {ndim}"
126
+ )
127
+
128
+ dtype = np.result_type(*[t.dtype for t in tensors])
129
+ sparse = all(t.issparse() for t in tensors)
130
+
131
+ op = TensorStack(axis=axis, dtype=dtype, sparse=sparse)
132
+ return op(tensors, out=out)
@@ -0,0 +1,13 @@
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.
@@ -0,0 +1,52 @@
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
+ import numpy as np
18
+ import pytest
19
+
20
+ from ...datasource import empty, ones
21
+ from .. import stack
22
+
23
+
24
+ def test_stack():
25
+ raw_arrs = [ones((3, 4), chunk_size=2) for _ in range(10)]
26
+ arr2 = stack(raw_arrs, axis=0)
27
+
28
+ assert arr2.shape == (10, 3, 4)
29
+
30
+ arr3 = stack(raw_arrs, axis=1)
31
+
32
+ assert arr3.shape == (3, 10, 4)
33
+
34
+ arr4 = stack(raw_arrs, axis=2)
35
+
36
+ assert arr4.shape == (3, 4, 10)
37
+
38
+ with pytest.raises(ValueError):
39
+ raw_arrs2 = [ones((3, 4), chunk_size=2), ones((4, 3), chunk_size=2)]
40
+ stack(raw_arrs2)
41
+
42
+ with pytest.raises(np.AxisError):
43
+ stack(raw_arrs, axis=3)
44
+
45
+ with pytest.raises(np.AxisError):
46
+ stack(raw_arrs, axis=-4)
47
+
48
+ with pytest.raises(TypeError):
49
+ stack(raw_arrs, out=1)
50
+
51
+ with pytest.raises(ValueError):
52
+ stack(raw_arrs, empty((1, 10, 3, 4)))