maxframe 0.1.0b5__cp39-cp39-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-39-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-39-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-39-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-39-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,196 @@
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 FieldTypes, KeyField, ListField, StringField
21
+ from ..core import Tensor, TensorOrder
22
+ from ..datasource import tensor as astensor
23
+ from ..operators import TensorOperator, TensorOperatorMixin
24
+ from ..utils import broadcast_shape, check_out_param
25
+
26
+
27
+ class TensorChoose(TensorOperator, TensorOperatorMixin):
28
+ _op_type_ = opcodes.CHOOSE
29
+
30
+ a = KeyField("a", default=None)
31
+ choices = ListField("choices", FieldTypes.key, default=None)
32
+ mode = StringField("mode", default=None)
33
+
34
+ def __init__(self, mode=None, **kw):
35
+ super().__init__(mode=mode, **kw)
36
+
37
+ def __setattr__(self, key, value):
38
+ if key == "mode" and value not in ("raise", "wrap", "clip"):
39
+ raise ValueError(f"mode should be raise, wrap or clip, not {value}")
40
+
41
+ super().__setattr__(key, value)
42
+
43
+ def _set_inputs(self, inputs):
44
+ super()._set_inputs(inputs)
45
+ self.a = self._inputs[0]
46
+ self.choices = self._inputs[1:]
47
+
48
+ def __call__(self, a, choices, out=None):
49
+ if out is not None and not isinstance(out, Tensor):
50
+ raise TypeError(f"out should be Tensor object, got {type(out)} instead")
51
+
52
+ inputs = [a] + choices
53
+ shape = broadcast_shape(a.shape, *[c.shape for c in choices])
54
+ order = TensorOrder.C_ORDER if out is None else out.order
55
+ t = self.new_tensor(inputs, shape, order=order)
56
+
57
+ if out is None:
58
+ return t
59
+
60
+ check_out_param(out, t, "unsafe")
61
+ out_shape, out_dtype = out.shape, out.dtype
62
+ # if `out` is specified, use out's dtype and shape
63
+ if out_shape != t.shape:
64
+ raise ValueError(f"output shape should be {t.shape}, got {out_shape}")
65
+ setattr(self, "dtype", out_dtype)
66
+ out.data = t.data
67
+ return out
68
+
69
+
70
+ def choose(a, choices, out=None, mode="raise"):
71
+ """
72
+ Construct a tensor from an index tensor and a set of tensors to choose from.
73
+
74
+ First of all, if confused or uncertain, definitely look at the Examples -
75
+ in its full generality, this function is less simple than it might
76
+ seem from the following code description (below ndi =
77
+ `mt.lib.index_tricks`):
78
+
79
+ ``mt.choose(a,c) == mt.array([c[a[I]][I] for I in ndi.ndindex(a.shape)])``.
80
+
81
+ But this omits some subtleties. Here is a fully general summary:
82
+
83
+ Given an "index" tensor (`a`) of integers and a sequence of `n` tensors
84
+ (`choices`), `a` and each choice tensor are first broadcast, as necessary,
85
+ to tensors of a common shape; calling these *Ba* and *Bchoices[i], i =
86
+ 0,...,n-1* we have that, necessarily, ``Ba.shape == Bchoices[i].shape``
87
+ for each `i`. Then, a new array with shape ``Ba.shape`` is created as
88
+ follows:
89
+
90
+ * if ``mode=raise`` (the default), then, first of all, each element of
91
+ `a` (and thus `Ba`) must be in the range `[0, n-1]`; now, suppose that
92
+ `i` (in that range) is the value at the `(j0, j1, ..., jm)` position
93
+ in `Ba` - then the value at the same position in the new array is the
94
+ value in `Bchoices[i]` at that same position;
95
+
96
+ * if ``mode=wrap``, values in `a` (and thus `Ba`) may be any (signed)
97
+ integer; modular arithmetic is used to map integers outside the range
98
+ `[0, n-1]` back into that range; and then the new array is constructed
99
+ as above;
100
+
101
+ * if ``mode=clip``, values in `a` (and thus `Ba`) may be any (signed)
102
+ integer; negative integers are mapped to 0; values greater than `n-1`
103
+ are mapped to `n-1`; and then the new tensor is constructed as above.
104
+
105
+ Parameters
106
+ ----------
107
+ a : int tensor
108
+ This tensor must contain integers in `[0, n-1]`, where `n` is the number
109
+ of choices, unless ``mode=wrap`` or ``mode=clip``, in which cases any
110
+ integers are permissible.
111
+ choices : sequence of tensors
112
+ Choice tensors. `a` and all of the choices must be broadcastable to the
113
+ same shape. If `choices` is itself a tensor (not recommended), then
114
+ its outermost dimension (i.e., the one corresponding to
115
+ ``choices.shape[0]``) is taken as defining the "sequence".
116
+ out : tensor, optional
117
+ If provided, the result will be inserted into this tensor. It should
118
+ be of the appropriate shape and dtype.
119
+ mode : {'raise' (default), 'wrap', 'clip'}, optional
120
+ Specifies how indices outside `[0, n-1]` will be treated:
121
+
122
+ * 'raise' : an exception is raised
123
+ * 'wrap' : value becomes value mod `n`
124
+ * 'clip' : values < 0 are mapped to 0, values > n-1 are mapped to n-1
125
+
126
+ Returns
127
+ -------
128
+ merged_array : Tensor
129
+ The merged result.
130
+
131
+ Raises
132
+ ------
133
+ ValueError: shape mismatch
134
+ If `a` and each choice tensor are not all broadcastable to the same
135
+ shape.
136
+
137
+ See Also
138
+ --------
139
+ Tensor.choose : equivalent method
140
+
141
+ Notes
142
+ -----
143
+ To reduce the chance of misinterpretation, even though the following
144
+ "abuse" is nominally supported, `choices` should neither be, nor be
145
+ thought of as, a single tensor, i.e., the outermost sequence-like container
146
+ should be either a list or a tuple.
147
+
148
+ Examples
149
+ --------
150
+
151
+ >>> import maxframe.tensor as mt
152
+
153
+ >>> choices = [[0, 1, 2, 3], [10, 11, 12, 13],
154
+ ... [20, 21, 22, 23], [30, 31, 32, 33]]
155
+ >>> mt.choose([2, 3, 1, 0], choices
156
+ ... # the first element of the result will be the first element of the
157
+ ... # third (2+1) "array" in choices, namely, 20; the second element
158
+ ... # will be the second element of the fourth (3+1) choice array, i.e.,
159
+ ... # 31, etc.
160
+ ... ).execute()
161
+ array([20, 31, 12, 3])
162
+ >>> mt.choose([2, 4, 1, 0], choices, mode='clip').execute() # 4 goes to 3 (4-1)
163
+ array([20, 31, 12, 3])
164
+ >>> # because there are 4 choice arrays
165
+ >>> mt.choose([2, 4, 1, 0], choices, mode='wrap').execute() # 4 goes to (4 mod 4)
166
+ array([20, 1, 12, 3])
167
+ >>> # i.e., 0
168
+
169
+ A couple examples illustrating how choose broadcasts:
170
+
171
+ >>> a = [[1, 0, 1], [0, 1, 0], [1, 0, 1]]
172
+ >>> choices = [-10, 10]
173
+ >>> mt.choose(a, choices).execute()
174
+ array([[ 10, -10, 10],
175
+ [-10, 10, -10],
176
+ [ 10, -10, 10]])
177
+
178
+ >>> # With thanks to Anne Archibald
179
+ >>> a = mt.array([0, 1]).reshape((2,1,1))
180
+ >>> c1 = mt.array([1, 2, 3]).reshape((1,3,1))
181
+ >>> c2 = mt.array([-1, -2, -3, -4, -5]).reshape((1,1,5))
182
+ >>> mt.choose(a, (c1, c2)).execute() # result is 2x3x5, res[0,:,:]=c1, res[1,:,:]=c2
183
+ array([[[ 1, 1, 1, 1, 1],
184
+ [ 2, 2, 2, 2, 2],
185
+ [ 3, 3, 3, 3, 3]],
186
+ [[-1, -2, -3, -4, -5],
187
+ [-1, -2, -3, -4, -5],
188
+ [-1, -2, -3, -4, -5]]])
189
+
190
+ """
191
+ a = astensor(a, dtype="i8")
192
+ choices = [astensor(c) for c in choices]
193
+
194
+ dtype = np.result_type(*[c.dtype for c in choices])
195
+ op = TensorChoose(mode=mode, dtype=dtype)
196
+ return op(a, choices, out=out)
@@ -0,0 +1,124 @@
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 ..core import Tensor
20
+ from ..datasource import tensor as astensor
21
+ from ..utils import validate_axis
22
+
23
+
24
+ def compress(condition, a, axis=None, out=None):
25
+ """
26
+ Return selected slices of a tensor along given axis.
27
+
28
+ When working along a given axis, a slice along that axis is returned in
29
+ `output` for each index where `condition` evaluates to True. When
30
+ working on a 1-D array, `compress` is equivalent to `extract`.
31
+
32
+ Parameters
33
+ ----------
34
+ condition : 1-D tensor of bools
35
+ Tensor that selects which entries to return. If len(condition)
36
+ is less than the size of `a` along the given axis, then output is
37
+ truncated to the length of the condition tensor.
38
+ a : array_like
39
+ Tensor from which to extract a part.
40
+ axis : int, optional
41
+ Axis along which to take slices. If None (default), work on the
42
+ flattened tensor.
43
+ out : Tensor, optional
44
+ Output tensor. Its type is preserved and it must be of the right
45
+ shape to hold the output.
46
+
47
+ Returns
48
+ -------
49
+ compressed_array : Tensor
50
+ A copy of `a` without the slices along axis for which `condition`
51
+ is false.
52
+
53
+ See Also
54
+ --------
55
+ take, choose, diag, diagonal, select
56
+ Tensor.compress : Equivalent method in ndarray
57
+ mt.extract: Equivalent method when working on 1-D arrays
58
+
59
+ Examples
60
+ --------
61
+ >>> import maxframe.tensor as mt
62
+
63
+ >>> a = mt.array([[1, 2], [3, 4], [5, 6]])
64
+ >>> a.execute()
65
+ array([[1, 2],
66
+ [3, 4],
67
+ [5, 6]])
68
+ >>> mt.compress([0, 1], a, axis=0).execute()
69
+ array([[3, 4]])
70
+ >>> mt.compress([False, True, True], a, axis=0).execute()
71
+ array([[3, 4],
72
+ [5, 6]])
73
+ >>> mt.compress([False, True], a, axis=1).execute()
74
+ array([[2],
75
+ [4],
76
+ [6]])
77
+
78
+ Working on the flattened tensor does not return slices along an axis but
79
+ selects elements.
80
+
81
+ >>> mt.compress([False, True], a).execute()
82
+ array([2])
83
+
84
+ """
85
+ a = astensor(a)
86
+ condition = astensor(condition, dtype=bool)
87
+
88
+ if condition.ndim != 1:
89
+ raise ValueError("condition must be an 1-d tensor")
90
+
91
+ if axis is None:
92
+ a = a.ravel()
93
+ if len(condition) < a.size:
94
+ a = a[: len(condition)]
95
+ return a[condition]
96
+
97
+ try:
98
+ axis = validate_axis(a.ndim, axis)
99
+ except ValueError:
100
+ raise np.AxisError(
101
+ f"axis {axis} is out of bounds for tensor of dimension {a.ndim}"
102
+ )
103
+
104
+ try:
105
+ if len(condition) < a.shape[axis]:
106
+ a = a[(slice(None),) * axis + (slice(len(condition)),)]
107
+ t = a[(slice(None),) * axis + (condition,)]
108
+ if out is None:
109
+ return t
110
+
111
+ if out is not None and not isinstance(out, Tensor):
112
+ raise TypeError(f"out should be Tensor object, got {type(out)} instead")
113
+ if not np.can_cast(out.dtype, t.dtype, "safe"):
114
+ raise TypeError(
115
+ f"Cannot cast array data from dtype('{out.dtype}') to dtype('{t.dtype}') "
116
+ "according to the rule 'safe'"
117
+ )
118
+ # skip shape check because out shape is unknown
119
+ out.data = t.astype(out.dtype, order=out.order.value).data
120
+ return out
121
+ except IndexError:
122
+ raise np.AxisError(
123
+ f"axis {len(condition)} is out of bounds for tensor of dimension 1"
124
+ )
@@ -0,0 +1,190 @@
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
+
16
+ import itertools
17
+ from numbers import Integral
18
+
19
+ import numpy as np
20
+
21
+ from ..core import TENSOR_TYPE
22
+ from ..datasource import tensor as astensor
23
+ from ..utils import broadcast_shape, calc_sliced_size, index_ndim, replace_ellipsis
24
+
25
+ _INDEX_ERROR_MSG = (
26
+ "only integers, slices (`:`), ellipsis (`...`), "
27
+ "numpy.newaxis (`None`) and integer or boolean arrays are valid indices"
28
+ )
29
+
30
+
31
+ def calc_shape(tensor_shape, index):
32
+ shape = []
33
+ in_axis = 0
34
+ out_axis = 0
35
+ fancy_index = None
36
+ fancy_index_shapes = []
37
+ for ind in index:
38
+ if isinstance(ind, TENSOR_TYPE + (np.ndarray,)) and ind.dtype == np.bool_:
39
+ # bool
40
+ shape.append(np.nan if not isinstance(ind, np.ndarray) else int(ind.sum()))
41
+ for i, t_size, size in zip(
42
+ itertools.count(0),
43
+ ind.shape,
44
+ tensor_shape[in_axis : ind.ndim + in_axis],
45
+ ):
46
+ if not np.isnan(t_size) and not np.isnan(size) and t_size != size:
47
+ raise IndexError(
48
+ f"boolean index did not match indexed array along dimension {in_axis + i}; "
49
+ f"dimension is {size} but corresponding boolean dimension is {t_size}"
50
+ )
51
+ in_axis += ind.ndim
52
+ out_axis += 1
53
+ elif isinstance(ind, TENSOR_TYPE + (np.ndarray,)):
54
+ first_fancy_index = False
55
+ if fancy_index is None:
56
+ first_fancy_index = True
57
+ fancy_index = out_axis
58
+ if isinstance(ind, np.ndarray) and np.any(ind >= tensor_shape[in_axis]):
59
+ out_of_range_index = next(
60
+ i for i in ind.flat if i >= tensor_shape[in_axis]
61
+ )
62
+ raise IndexError(
63
+ f"IndexError: index {out_of_range_index} is out of "
64
+ f"bounds with size {tensor_shape[in_axis]}"
65
+ )
66
+ fancy_index_shapes.append(ind.shape)
67
+ in_axis += 1
68
+ if first_fancy_index:
69
+ out_axis += ind.ndim
70
+ elif isinstance(ind, slice):
71
+ if np.isnan(tensor_shape[in_axis]):
72
+ shape.append(np.nan)
73
+ else:
74
+ shape.append(calc_sliced_size(tensor_shape[in_axis], ind))
75
+ in_axis += 1
76
+ out_axis += 1
77
+ elif isinstance(ind, Integral):
78
+ size = tensor_shape[in_axis]
79
+ if not np.isnan(size) and ind >= size:
80
+ raise IndexError(
81
+ f"index {ind} is out of bounds for axis {in_axis} with size {size}"
82
+ )
83
+ in_axis += 1
84
+ else:
85
+ assert ind is None
86
+ shape.append(1)
87
+
88
+ if fancy_index is not None:
89
+ try:
90
+ if any(np.isnan(np.prod(s)) for s in fancy_index_shapes):
91
+ fancy_index_shape = (np.nan,) * len(fancy_index_shapes[0])
92
+ else:
93
+ fancy_index_shape = broadcast_shape(*fancy_index_shapes)
94
+ shape = shape[:fancy_index] + list(fancy_index_shape) + shape[fancy_index:]
95
+ except ValueError:
96
+ raise IndexError(
97
+ "shape mismatch: indexing arrays could not be broadcast together "
98
+ "with shapes {0}".format(" ".join(str(s) for s in fancy_index_shapes))
99
+ )
100
+
101
+ return shape
102
+
103
+
104
+ def preprocess_index(index, convert_bool_to_fancy=None):
105
+ from .nonzero import nonzero
106
+
107
+ inds = []
108
+ fancy_indexes = []
109
+ bool_indexes = []
110
+ all_fancy_index_ndarray = True
111
+ all_bool_index_ndarray = True
112
+ for j, ind in enumerate(index):
113
+ if isinstance(ind, (list, np.ndarray) + TENSOR_TYPE):
114
+ if not isinstance(ind, TENSOR_TYPE):
115
+ ind = np.array(ind)
116
+ if ind.dtype.kind not in "biu":
117
+ raise IndexError(_INDEX_ERROR_MSG)
118
+ if ind.dtype.kind == "b":
119
+ # bool indexing
120
+ bool_indexes.append(j)
121
+ if not isinstance(ind, np.ndarray):
122
+ all_bool_index_ndarray = False
123
+ else:
124
+ # fancy indexing
125
+ fancy_indexes.append(j)
126
+ if not isinstance(ind, np.ndarray):
127
+ all_fancy_index_ndarray = False
128
+ elif (
129
+ not isinstance(ind, (slice, Integral))
130
+ and ind is not None
131
+ and ind is not Ellipsis
132
+ ):
133
+ raise IndexError(_INDEX_ERROR_MSG)
134
+ inds.append(ind)
135
+
136
+ if convert_bool_to_fancy is None:
137
+ convert_bool_to_fancy = (fancy_indexes and len(bool_indexes) > 0) or len(
138
+ bool_indexes
139
+ ) > 1
140
+
141
+ if not all_fancy_index_ndarray or (
142
+ convert_bool_to_fancy and not all_bool_index_ndarray
143
+ ):
144
+ # if not all fancy indexes are ndarray,
145
+ # or bool indexes need to be converted to fancy indexes,
146
+ # and not all bool indexes are ndarray,
147
+ # we will convert all of them to Tensor
148
+ for fancy_index in fancy_indexes:
149
+ inds[fancy_index] = astensor(inds[fancy_index])
150
+
151
+ # convert bool index to fancy index when any situation below meets:
152
+ # 1. fancy indexes and bool indexes both exists
153
+ # 2. bool indexes more than 2
154
+ if convert_bool_to_fancy:
155
+ default_m = None
156
+ if len(fancy_indexes) > 0:
157
+ default_m = (
158
+ np.nonzero
159
+ if isinstance(inds[fancy_indexes[0]], np.ndarray)
160
+ else nonzero
161
+ )
162
+ for bool_index in bool_indexes:
163
+ ind = inds[bool_index]
164
+ m = default_m
165
+ if m is None:
166
+ m = np.nonzero if isinstance(ind, np.ndarray) else nonzero
167
+ ind = m(ind)[0]
168
+ inds[bool_index] = ind
169
+
170
+ return tuple(inds)
171
+
172
+
173
+ def process_index(tensor_ndim, item, convert_bool_to_fancy=None):
174
+ if isinstance(item, list):
175
+ arr = np.array(item)
176
+ if arr.dtype == object:
177
+ item = tuple(item)
178
+ elif arr.dtype.kind == "f":
179
+ raise IndexError(_INDEX_ERROR_MSG)
180
+ else:
181
+ item = (arr,)
182
+ elif not isinstance(item, tuple):
183
+ item = (item,)
184
+
185
+ index = preprocess_index(item, convert_bool_to_fancy=convert_bool_to_fancy)
186
+ index = replace_ellipsis(index, tensor_ndim)
187
+ missing = tensor_ndim - sum(index_ndim(i) for i in index)
188
+ if missing < 0:
189
+ raise IndexError("too many indices for tensor")
190
+ return index + (slice(None),) * missing
@@ -0,0 +1,71 @@
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
+
19
+
20
+ def extract(condition, a):
21
+ """
22
+ Return the elements of a tensor that satisfy some condition.
23
+
24
+ This is equivalent to ``mt.compress(ravel(condition), ravel(arr))``. If
25
+ `condition` is boolean ``mt.extract`` is equivalent to ``arr[condition]``.
26
+
27
+ Note that `place` does the exact opposite of `extract`.
28
+
29
+ Parameters
30
+ ----------
31
+ condition : array_like
32
+ An array whose nonzero or True entries indicate the elements of `arr`
33
+ to extract.
34
+ a : array_like
35
+ Input tensor of the same size as `condition`.
36
+
37
+ Returns
38
+ -------
39
+ extract : Tensor
40
+ Rank 1 tensor of values from `arr` where `condition` is True.
41
+
42
+ See Also
43
+ --------
44
+ take, put, copyto, compress, place
45
+
46
+ Examples
47
+ --------
48
+ >>> import maxframe.tensor as mt
49
+
50
+ >>> arr = mt.arange(12).reshape((3, 4))
51
+ >>> arr.execute()
52
+ array([[ 0, 1, 2, 3],
53
+ [ 4, 5, 6, 7],
54
+ [ 8, 9, 10, 11]])
55
+ >>> condition = mt.mod(arr, 3)==0
56
+ >>> condition.execute()
57
+ array([[ True, False, False, True],
58
+ [False, False, True, False],
59
+ [False, True, False, False]])
60
+ >>> mt.extract(condition, arr).execute()
61
+ array([0, 3, 6, 9])
62
+
63
+
64
+ If `condition` is boolean:
65
+
66
+ >>> arr[condition].execute()
67
+ array([0, 3, 6, 9])
68
+
69
+ """
70
+ condition = astensor(condition, dtype=bool)
71
+ return a[condition]