maxframe 0.1.0b5__cp38-cp38-macosx_11_0_arm64.whl

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

Potentially problematic release.


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

Files changed (647) hide show
  1. maxframe/__init__.py +32 -0
  2. maxframe/_utils.cpython-38-darwin.so +0 -0
  3. maxframe/_utils.pxd +33 -0
  4. maxframe/_utils.pyx +547 -0
  5. maxframe/codegen.py +528 -0
  6. maxframe/config/__init__.py +15 -0
  7. maxframe/config/config.py +443 -0
  8. maxframe/config/tests/__init__.py +13 -0
  9. maxframe/config/tests/test_config.py +103 -0
  10. maxframe/config/tests/test_validators.py +34 -0
  11. maxframe/config/validators.py +57 -0
  12. maxframe/conftest.py +139 -0
  13. maxframe/core/__init__.py +65 -0
  14. maxframe/core/base.py +156 -0
  15. maxframe/core/entity/__init__.py +44 -0
  16. maxframe/core/entity/chunks.py +68 -0
  17. maxframe/core/entity/core.py +152 -0
  18. maxframe/core/entity/executable.py +337 -0
  19. maxframe/core/entity/fuse.py +73 -0
  20. maxframe/core/entity/objects.py +100 -0
  21. maxframe/core/entity/output_types.py +90 -0
  22. maxframe/core/entity/tileables.py +438 -0
  23. maxframe/core/entity/utils.py +24 -0
  24. maxframe/core/graph/__init__.py +17 -0
  25. maxframe/core/graph/builder/__init__.py +16 -0
  26. maxframe/core/graph/builder/base.py +86 -0
  27. maxframe/core/graph/builder/chunk.py +430 -0
  28. maxframe/core/graph/builder/tileable.py +34 -0
  29. maxframe/core/graph/builder/utils.py +41 -0
  30. maxframe/core/graph/core.cpython-38-darwin.so +0 -0
  31. maxframe/core/graph/core.pyx +467 -0
  32. maxframe/core/graph/entity.py +171 -0
  33. maxframe/core/graph/tests/__init__.py +13 -0
  34. maxframe/core/graph/tests/test_graph.py +205 -0
  35. maxframe/core/mode.py +96 -0
  36. maxframe/core/operator/__init__.py +34 -0
  37. maxframe/core/operator/base.py +450 -0
  38. maxframe/core/operator/core.py +276 -0
  39. maxframe/core/operator/fetch.py +53 -0
  40. maxframe/core/operator/fuse.py +29 -0
  41. maxframe/core/operator/objects.py +72 -0
  42. maxframe/core/operator/shuffle.py +111 -0
  43. maxframe/core/operator/tests/__init__.py +13 -0
  44. maxframe/core/operator/tests/test_core.py +64 -0
  45. maxframe/core/tests/__init__.py +13 -0
  46. maxframe/core/tests/test_mode.py +75 -0
  47. maxframe/dataframe/__init__.py +81 -0
  48. maxframe/dataframe/arithmetic/__init__.py +359 -0
  49. maxframe/dataframe/arithmetic/abs.py +33 -0
  50. maxframe/dataframe/arithmetic/add.py +60 -0
  51. maxframe/dataframe/arithmetic/arccos.py +28 -0
  52. maxframe/dataframe/arithmetic/arccosh.py +28 -0
  53. maxframe/dataframe/arithmetic/arcsin.py +28 -0
  54. maxframe/dataframe/arithmetic/arcsinh.py +28 -0
  55. maxframe/dataframe/arithmetic/arctan.py +28 -0
  56. maxframe/dataframe/arithmetic/arctanh.py +28 -0
  57. maxframe/dataframe/arithmetic/around.py +152 -0
  58. maxframe/dataframe/arithmetic/bitwise_and.py +46 -0
  59. maxframe/dataframe/arithmetic/bitwise_or.py +50 -0
  60. maxframe/dataframe/arithmetic/bitwise_xor.py +46 -0
  61. maxframe/dataframe/arithmetic/ceil.py +28 -0
  62. maxframe/dataframe/arithmetic/core.py +342 -0
  63. maxframe/dataframe/arithmetic/cos.py +28 -0
  64. maxframe/dataframe/arithmetic/cosh.py +28 -0
  65. maxframe/dataframe/arithmetic/degrees.py +28 -0
  66. maxframe/dataframe/arithmetic/docstring.py +442 -0
  67. maxframe/dataframe/arithmetic/equal.py +56 -0
  68. maxframe/dataframe/arithmetic/exp.py +28 -0
  69. maxframe/dataframe/arithmetic/exp2.py +28 -0
  70. maxframe/dataframe/arithmetic/expm1.py +28 -0
  71. maxframe/dataframe/arithmetic/floor.py +28 -0
  72. maxframe/dataframe/arithmetic/floordiv.py +64 -0
  73. maxframe/dataframe/arithmetic/greater.py +57 -0
  74. maxframe/dataframe/arithmetic/greater_equal.py +57 -0
  75. maxframe/dataframe/arithmetic/invert.py +33 -0
  76. maxframe/dataframe/arithmetic/is_ufuncs.py +62 -0
  77. maxframe/dataframe/arithmetic/less.py +57 -0
  78. maxframe/dataframe/arithmetic/less_equal.py +57 -0
  79. maxframe/dataframe/arithmetic/log.py +28 -0
  80. maxframe/dataframe/arithmetic/log10.py +28 -0
  81. maxframe/dataframe/arithmetic/log2.py +28 -0
  82. maxframe/dataframe/arithmetic/mod.py +60 -0
  83. maxframe/dataframe/arithmetic/multiply.py +60 -0
  84. maxframe/dataframe/arithmetic/negative.py +33 -0
  85. maxframe/dataframe/arithmetic/not_equal.py +56 -0
  86. maxframe/dataframe/arithmetic/power.py +68 -0
  87. maxframe/dataframe/arithmetic/radians.py +28 -0
  88. maxframe/dataframe/arithmetic/sin.py +28 -0
  89. maxframe/dataframe/arithmetic/sinh.py +28 -0
  90. maxframe/dataframe/arithmetic/sqrt.py +28 -0
  91. maxframe/dataframe/arithmetic/subtract.py +64 -0
  92. maxframe/dataframe/arithmetic/tan.py +28 -0
  93. maxframe/dataframe/arithmetic/tanh.py +28 -0
  94. maxframe/dataframe/arithmetic/tests/__init__.py +13 -0
  95. maxframe/dataframe/arithmetic/tests/test_arithmetic.py +695 -0
  96. maxframe/dataframe/arithmetic/truediv.py +64 -0
  97. maxframe/dataframe/arithmetic/trunc.py +28 -0
  98. maxframe/dataframe/arrays.py +864 -0
  99. maxframe/dataframe/core.py +2417 -0
  100. maxframe/dataframe/datasource/__init__.py +15 -0
  101. maxframe/dataframe/datasource/core.py +81 -0
  102. maxframe/dataframe/datasource/dataframe.py +59 -0
  103. maxframe/dataframe/datasource/date_range.py +504 -0
  104. maxframe/dataframe/datasource/from_index.py +54 -0
  105. maxframe/dataframe/datasource/from_records.py +107 -0
  106. maxframe/dataframe/datasource/from_tensor.py +419 -0
  107. maxframe/dataframe/datasource/index.py +117 -0
  108. maxframe/dataframe/datasource/read_csv.py +528 -0
  109. maxframe/dataframe/datasource/read_odps_query.py +299 -0
  110. maxframe/dataframe/datasource/read_odps_table.py +253 -0
  111. maxframe/dataframe/datasource/read_parquet.py +421 -0
  112. maxframe/dataframe/datasource/series.py +55 -0
  113. maxframe/dataframe/datasource/tests/__init__.py +13 -0
  114. maxframe/dataframe/datasource/tests/test_datasource.py +401 -0
  115. maxframe/dataframe/datastore/__init__.py +26 -0
  116. maxframe/dataframe/datastore/core.py +19 -0
  117. maxframe/dataframe/datastore/to_csv.py +227 -0
  118. maxframe/dataframe/datastore/to_odps.py +162 -0
  119. maxframe/dataframe/extensions/__init__.py +41 -0
  120. maxframe/dataframe/extensions/accessor.py +50 -0
  121. maxframe/dataframe/extensions/reshuffle.py +83 -0
  122. maxframe/dataframe/extensions/tests/__init__.py +13 -0
  123. maxframe/dataframe/extensions/tests/test_extensions.py +38 -0
  124. maxframe/dataframe/fetch/__init__.py +15 -0
  125. maxframe/dataframe/fetch/core.py +86 -0
  126. maxframe/dataframe/groupby/__init__.py +82 -0
  127. maxframe/dataframe/groupby/aggregation.py +350 -0
  128. maxframe/dataframe/groupby/apply.py +251 -0
  129. maxframe/dataframe/groupby/core.py +179 -0
  130. maxframe/dataframe/groupby/cum.py +124 -0
  131. maxframe/dataframe/groupby/fill.py +141 -0
  132. maxframe/dataframe/groupby/getitem.py +92 -0
  133. maxframe/dataframe/groupby/head.py +105 -0
  134. maxframe/dataframe/groupby/sample.py +214 -0
  135. maxframe/dataframe/groupby/tests/__init__.py +13 -0
  136. maxframe/dataframe/groupby/tests/test_groupby.py +374 -0
  137. maxframe/dataframe/groupby/transform.py +255 -0
  138. maxframe/dataframe/indexing/__init__.py +84 -0
  139. maxframe/dataframe/indexing/add_prefix_suffix.py +110 -0
  140. maxframe/dataframe/indexing/align.py +349 -0
  141. maxframe/dataframe/indexing/at.py +83 -0
  142. maxframe/dataframe/indexing/getitem.py +204 -0
  143. maxframe/dataframe/indexing/iat.py +37 -0
  144. maxframe/dataframe/indexing/iloc.py +566 -0
  145. maxframe/dataframe/indexing/insert.py +86 -0
  146. maxframe/dataframe/indexing/loc.py +411 -0
  147. maxframe/dataframe/indexing/reindex.py +526 -0
  148. maxframe/dataframe/indexing/rename.py +462 -0
  149. maxframe/dataframe/indexing/rename_axis.py +209 -0
  150. maxframe/dataframe/indexing/reset_index.py +402 -0
  151. maxframe/dataframe/indexing/sample.py +221 -0
  152. maxframe/dataframe/indexing/set_axis.py +194 -0
  153. maxframe/dataframe/indexing/set_index.py +61 -0
  154. maxframe/dataframe/indexing/setitem.py +130 -0
  155. maxframe/dataframe/indexing/tests/__init__.py +13 -0
  156. maxframe/dataframe/indexing/tests/test_indexing.py +488 -0
  157. maxframe/dataframe/indexing/where.py +308 -0
  158. maxframe/dataframe/initializer.py +288 -0
  159. maxframe/dataframe/merge/__init__.py +32 -0
  160. maxframe/dataframe/merge/append.py +121 -0
  161. maxframe/dataframe/merge/concat.py +325 -0
  162. maxframe/dataframe/merge/merge.py +593 -0
  163. maxframe/dataframe/merge/tests/__init__.py +13 -0
  164. maxframe/dataframe/merge/tests/test_merge.py +215 -0
  165. maxframe/dataframe/misc/__init__.py +134 -0
  166. maxframe/dataframe/misc/_duplicate.py +46 -0
  167. maxframe/dataframe/misc/accessor.py +276 -0
  168. maxframe/dataframe/misc/apply.py +692 -0
  169. maxframe/dataframe/misc/astype.py +236 -0
  170. maxframe/dataframe/misc/case_when.py +141 -0
  171. maxframe/dataframe/misc/check_monotonic.py +84 -0
  172. maxframe/dataframe/misc/cut.py +383 -0
  173. maxframe/dataframe/misc/datetimes.py +79 -0
  174. maxframe/dataframe/misc/describe.py +108 -0
  175. maxframe/dataframe/misc/diff.py +210 -0
  176. maxframe/dataframe/misc/drop.py +440 -0
  177. maxframe/dataframe/misc/drop_duplicates.py +248 -0
  178. maxframe/dataframe/misc/duplicated.py +292 -0
  179. maxframe/dataframe/misc/eval.py +728 -0
  180. maxframe/dataframe/misc/explode.py +171 -0
  181. maxframe/dataframe/misc/get_dummies.py +208 -0
  182. maxframe/dataframe/misc/isin.py +217 -0
  183. maxframe/dataframe/misc/map.py +236 -0
  184. maxframe/dataframe/misc/melt.py +162 -0
  185. maxframe/dataframe/misc/memory_usage.py +248 -0
  186. maxframe/dataframe/misc/pct_change.py +150 -0
  187. maxframe/dataframe/misc/pivot_table.py +262 -0
  188. maxframe/dataframe/misc/qcut.py +104 -0
  189. maxframe/dataframe/misc/select_dtypes.py +104 -0
  190. maxframe/dataframe/misc/shift.py +256 -0
  191. maxframe/dataframe/misc/stack.py +238 -0
  192. maxframe/dataframe/misc/string_.py +221 -0
  193. maxframe/dataframe/misc/tests/__init__.py +13 -0
  194. maxframe/dataframe/misc/tests/test_misc.py +468 -0
  195. maxframe/dataframe/misc/to_numeric.py +178 -0
  196. maxframe/dataframe/misc/transform.py +361 -0
  197. maxframe/dataframe/misc/transpose.py +136 -0
  198. maxframe/dataframe/misc/value_counts.py +182 -0
  199. maxframe/dataframe/missing/__init__.py +53 -0
  200. maxframe/dataframe/missing/checkna.py +223 -0
  201. maxframe/dataframe/missing/dropna.py +280 -0
  202. maxframe/dataframe/missing/fillna.py +275 -0
  203. maxframe/dataframe/missing/replace.py +439 -0
  204. maxframe/dataframe/missing/tests/__init__.py +13 -0
  205. maxframe/dataframe/missing/tests/test_missing.py +89 -0
  206. maxframe/dataframe/operators.py +273 -0
  207. maxframe/dataframe/plotting/__init__.py +40 -0
  208. maxframe/dataframe/plotting/core.py +78 -0
  209. maxframe/dataframe/plotting/tests/__init__.py +13 -0
  210. maxframe/dataframe/plotting/tests/test_plotting.py +136 -0
  211. maxframe/dataframe/reduction/__init__.py +107 -0
  212. maxframe/dataframe/reduction/aggregation.py +344 -0
  213. maxframe/dataframe/reduction/all.py +78 -0
  214. maxframe/dataframe/reduction/any.py +78 -0
  215. maxframe/dataframe/reduction/core.py +837 -0
  216. maxframe/dataframe/reduction/count.py +59 -0
  217. maxframe/dataframe/reduction/cummax.py +30 -0
  218. maxframe/dataframe/reduction/cummin.py +30 -0
  219. maxframe/dataframe/reduction/cumprod.py +30 -0
  220. maxframe/dataframe/reduction/cumsum.py +30 -0
  221. maxframe/dataframe/reduction/custom_reduction.py +42 -0
  222. maxframe/dataframe/reduction/kurtosis.py +104 -0
  223. maxframe/dataframe/reduction/max.py +65 -0
  224. maxframe/dataframe/reduction/mean.py +61 -0
  225. maxframe/dataframe/reduction/min.py +65 -0
  226. maxframe/dataframe/reduction/nunique.py +141 -0
  227. maxframe/dataframe/reduction/prod.py +76 -0
  228. maxframe/dataframe/reduction/reduction_size.py +36 -0
  229. maxframe/dataframe/reduction/sem.py +69 -0
  230. maxframe/dataframe/reduction/skew.py +89 -0
  231. maxframe/dataframe/reduction/std.py +53 -0
  232. maxframe/dataframe/reduction/str_concat.py +48 -0
  233. maxframe/dataframe/reduction/sum.py +77 -0
  234. maxframe/dataframe/reduction/tests/__init__.py +13 -0
  235. maxframe/dataframe/reduction/tests/test_reduction.py +486 -0
  236. maxframe/dataframe/reduction/unique.py +90 -0
  237. maxframe/dataframe/reduction/var.py +72 -0
  238. maxframe/dataframe/sort/__init__.py +34 -0
  239. maxframe/dataframe/sort/core.py +36 -0
  240. maxframe/dataframe/sort/sort_index.py +153 -0
  241. maxframe/dataframe/sort/sort_values.py +311 -0
  242. maxframe/dataframe/sort/tests/__init__.py +13 -0
  243. maxframe/dataframe/sort/tests/test_sort.py +81 -0
  244. maxframe/dataframe/statistics/__init__.py +33 -0
  245. maxframe/dataframe/statistics/corr.py +280 -0
  246. maxframe/dataframe/statistics/quantile.py +341 -0
  247. maxframe/dataframe/statistics/tests/__init__.py +13 -0
  248. maxframe/dataframe/statistics/tests/test_statistics.py +82 -0
  249. maxframe/dataframe/tests/__init__.py +13 -0
  250. maxframe/dataframe/tests/test_initializer.py +29 -0
  251. maxframe/dataframe/tseries/__init__.py +13 -0
  252. maxframe/dataframe/tseries/tests/__init__.py +13 -0
  253. maxframe/dataframe/tseries/tests/test_tseries.py +30 -0
  254. maxframe/dataframe/tseries/to_datetime.py +297 -0
  255. maxframe/dataframe/ufunc/__init__.py +27 -0
  256. maxframe/dataframe/ufunc/tensor.py +54 -0
  257. maxframe/dataframe/ufunc/ufunc.py +52 -0
  258. maxframe/dataframe/utils.py +1267 -0
  259. maxframe/dataframe/window/__init__.py +29 -0
  260. maxframe/dataframe/window/aggregation.py +96 -0
  261. maxframe/dataframe/window/core.py +69 -0
  262. maxframe/dataframe/window/ewm.py +249 -0
  263. maxframe/dataframe/window/expanding.py +147 -0
  264. maxframe/dataframe/window/rolling.py +376 -0
  265. maxframe/dataframe/window/tests/__init__.py +13 -0
  266. maxframe/dataframe/window/tests/test_ewm.py +70 -0
  267. maxframe/dataframe/window/tests/test_expanding.py +66 -0
  268. maxframe/dataframe/window/tests/test_rolling.py +57 -0
  269. maxframe/env.py +33 -0
  270. maxframe/errors.py +21 -0
  271. maxframe/extension.py +81 -0
  272. maxframe/learn/__init__.py +17 -0
  273. maxframe/learn/contrib/__init__.py +17 -0
  274. maxframe/learn/contrib/pytorch/__init__.py +16 -0
  275. maxframe/learn/contrib/pytorch/run_function.py +110 -0
  276. maxframe/learn/contrib/pytorch/run_script.py +102 -0
  277. maxframe/learn/contrib/pytorch/tests/__init__.py +13 -0
  278. maxframe/learn/contrib/pytorch/tests/test_pytorch.py +42 -0
  279. maxframe/learn/contrib/utils.py +52 -0
  280. maxframe/learn/contrib/xgboost/__init__.py +26 -0
  281. maxframe/learn/contrib/xgboost/classifier.py +86 -0
  282. maxframe/learn/contrib/xgboost/core.py +156 -0
  283. maxframe/learn/contrib/xgboost/dmatrix.py +150 -0
  284. maxframe/learn/contrib/xgboost/predict.py +138 -0
  285. maxframe/learn/contrib/xgboost/regressor.py +78 -0
  286. maxframe/learn/contrib/xgboost/tests/__init__.py +13 -0
  287. maxframe/learn/contrib/xgboost/tests/test_core.py +43 -0
  288. maxframe/learn/contrib/xgboost/train.py +121 -0
  289. maxframe/learn/utils/__init__.py +15 -0
  290. maxframe/learn/utils/core.py +29 -0
  291. maxframe/lib/__init__.py +15 -0
  292. maxframe/lib/aio/__init__.py +27 -0
  293. maxframe/lib/aio/_runners.py +162 -0
  294. maxframe/lib/aio/_threads.py +35 -0
  295. maxframe/lib/aio/base.py +82 -0
  296. maxframe/lib/aio/file.py +85 -0
  297. maxframe/lib/aio/isolation.py +100 -0
  298. maxframe/lib/aio/lru.py +242 -0
  299. maxframe/lib/aio/parallelism.py +37 -0
  300. maxframe/lib/aio/tests/__init__.py +13 -0
  301. maxframe/lib/aio/tests/test_aio_file.py +55 -0
  302. maxframe/lib/compression.py +55 -0
  303. maxframe/lib/cython/__init__.py +13 -0
  304. maxframe/lib/cython/libcpp.pxd +30 -0
  305. maxframe/lib/filesystem/__init__.py +21 -0
  306. maxframe/lib/filesystem/_glob.py +173 -0
  307. maxframe/lib/filesystem/_oss_lib/__init__.py +13 -0
  308. maxframe/lib/filesystem/_oss_lib/common.py +198 -0
  309. maxframe/lib/filesystem/_oss_lib/glob.py +147 -0
  310. maxframe/lib/filesystem/_oss_lib/handle.py +156 -0
  311. maxframe/lib/filesystem/arrow.py +236 -0
  312. maxframe/lib/filesystem/base.py +263 -0
  313. maxframe/lib/filesystem/core.py +95 -0
  314. maxframe/lib/filesystem/fsmap.py +164 -0
  315. maxframe/lib/filesystem/hdfs.py +31 -0
  316. maxframe/lib/filesystem/local.py +112 -0
  317. maxframe/lib/filesystem/oss.py +157 -0
  318. maxframe/lib/filesystem/tests/__init__.py +13 -0
  319. maxframe/lib/filesystem/tests/test_filesystem.py +223 -0
  320. maxframe/lib/filesystem/tests/test_oss.py +182 -0
  321. maxframe/lib/functools_compat.py +81 -0
  322. maxframe/lib/mmh3.cpython-38-darwin.so +0 -0
  323. maxframe/lib/mmh3_src/MurmurHash3.cpp +339 -0
  324. maxframe/lib/mmh3_src/MurmurHash3.h +43 -0
  325. maxframe/lib/mmh3_src/mmh3module.cpp +387 -0
  326. maxframe/lib/sparse/__init__.py +861 -0
  327. maxframe/lib/sparse/array.py +1604 -0
  328. maxframe/lib/sparse/core.py +92 -0
  329. maxframe/lib/sparse/matrix.py +241 -0
  330. maxframe/lib/sparse/tests/__init__.py +15 -0
  331. maxframe/lib/sparse/tests/test_sparse.py +476 -0
  332. maxframe/lib/sparse/vector.py +150 -0
  333. maxframe/lib/tblib/LICENSE +20 -0
  334. maxframe/lib/tblib/__init__.py +327 -0
  335. maxframe/lib/tblib/cpython.py +83 -0
  336. maxframe/lib/tblib/decorators.py +44 -0
  337. maxframe/lib/tblib/pickling_support.py +90 -0
  338. maxframe/lib/tests/__init__.py +13 -0
  339. maxframe/lib/tests/test_wrapped_pickle.py +51 -0
  340. maxframe/lib/version.py +620 -0
  341. maxframe/lib/wrapped_pickle.py +139 -0
  342. maxframe/mixin.py +100 -0
  343. maxframe/odpsio/__init__.py +21 -0
  344. maxframe/odpsio/arrow.py +91 -0
  345. maxframe/odpsio/schema.py +364 -0
  346. maxframe/odpsio/tableio.py +322 -0
  347. maxframe/odpsio/tests/__init__.py +13 -0
  348. maxframe/odpsio/tests/test_arrow.py +88 -0
  349. maxframe/odpsio/tests/test_schema.py +297 -0
  350. maxframe/odpsio/tests/test_tableio.py +136 -0
  351. maxframe/odpsio/tests/test_volumeio.py +90 -0
  352. maxframe/odpsio/volumeio.py +95 -0
  353. maxframe/opcodes.py +590 -0
  354. maxframe/protocol.py +415 -0
  355. maxframe/remote/__init__.py +18 -0
  356. maxframe/remote/core.py +210 -0
  357. maxframe/remote/run_script.py +121 -0
  358. maxframe/serialization/__init__.py +26 -0
  359. maxframe/serialization/arrow.py +95 -0
  360. maxframe/serialization/core.cpython-38-darwin.so +0 -0
  361. maxframe/serialization/core.pxd +44 -0
  362. maxframe/serialization/core.pyi +61 -0
  363. maxframe/serialization/core.pyx +1094 -0
  364. maxframe/serialization/exception.py +86 -0
  365. maxframe/serialization/maxframe_objects.py +39 -0
  366. maxframe/serialization/numpy.py +91 -0
  367. maxframe/serialization/pandas.py +202 -0
  368. maxframe/serialization/scipy.py +71 -0
  369. maxframe/serialization/serializables/__init__.py +55 -0
  370. maxframe/serialization/serializables/core.py +262 -0
  371. maxframe/serialization/serializables/field.py +624 -0
  372. maxframe/serialization/serializables/field_type.py +589 -0
  373. maxframe/serialization/serializables/tests/__init__.py +13 -0
  374. maxframe/serialization/serializables/tests/test_field_type.py +121 -0
  375. maxframe/serialization/serializables/tests/test_serializable.py +250 -0
  376. maxframe/serialization/tests/__init__.py +13 -0
  377. maxframe/serialization/tests/test_serial.py +412 -0
  378. maxframe/session.py +1310 -0
  379. maxframe/tensor/__init__.py +183 -0
  380. maxframe/tensor/arithmetic/__init__.py +315 -0
  381. maxframe/tensor/arithmetic/abs.py +68 -0
  382. maxframe/tensor/arithmetic/absolute.py +68 -0
  383. maxframe/tensor/arithmetic/add.py +82 -0
  384. maxframe/tensor/arithmetic/angle.py +72 -0
  385. maxframe/tensor/arithmetic/arccos.py +104 -0
  386. maxframe/tensor/arithmetic/arccosh.py +91 -0
  387. maxframe/tensor/arithmetic/arcsin.py +94 -0
  388. maxframe/tensor/arithmetic/arcsinh.py +86 -0
  389. maxframe/tensor/arithmetic/arctan.py +106 -0
  390. maxframe/tensor/arithmetic/arctan2.py +128 -0
  391. maxframe/tensor/arithmetic/arctanh.py +86 -0
  392. maxframe/tensor/arithmetic/around.py +114 -0
  393. maxframe/tensor/arithmetic/bitand.py +95 -0
  394. maxframe/tensor/arithmetic/bitor.py +102 -0
  395. maxframe/tensor/arithmetic/bitxor.py +95 -0
  396. maxframe/tensor/arithmetic/cbrt.py +66 -0
  397. maxframe/tensor/arithmetic/ceil.py +71 -0
  398. maxframe/tensor/arithmetic/clip.py +165 -0
  399. maxframe/tensor/arithmetic/conj.py +74 -0
  400. maxframe/tensor/arithmetic/copysign.py +78 -0
  401. maxframe/tensor/arithmetic/core.py +544 -0
  402. maxframe/tensor/arithmetic/cos.py +85 -0
  403. maxframe/tensor/arithmetic/cosh.py +72 -0
  404. maxframe/tensor/arithmetic/deg2rad.py +72 -0
  405. maxframe/tensor/arithmetic/degrees.py +77 -0
  406. maxframe/tensor/arithmetic/divide.py +114 -0
  407. maxframe/tensor/arithmetic/equal.py +76 -0
  408. maxframe/tensor/arithmetic/exp.py +106 -0
  409. maxframe/tensor/arithmetic/exp2.py +67 -0
  410. maxframe/tensor/arithmetic/expm1.py +79 -0
  411. maxframe/tensor/arithmetic/fabs.py +74 -0
  412. maxframe/tensor/arithmetic/fix.py +69 -0
  413. maxframe/tensor/arithmetic/float_power.py +103 -0
  414. maxframe/tensor/arithmetic/floor.py +77 -0
  415. maxframe/tensor/arithmetic/floordiv.py +94 -0
  416. maxframe/tensor/arithmetic/fmax.py +105 -0
  417. maxframe/tensor/arithmetic/fmin.py +106 -0
  418. maxframe/tensor/arithmetic/fmod.py +99 -0
  419. maxframe/tensor/arithmetic/frexp.py +92 -0
  420. maxframe/tensor/arithmetic/greater.py +77 -0
  421. maxframe/tensor/arithmetic/greater_equal.py +69 -0
  422. maxframe/tensor/arithmetic/hypot.py +77 -0
  423. maxframe/tensor/arithmetic/i0.py +89 -0
  424. maxframe/tensor/arithmetic/imag.py +67 -0
  425. maxframe/tensor/arithmetic/invert.py +110 -0
  426. maxframe/tensor/arithmetic/isclose.py +115 -0
  427. maxframe/tensor/arithmetic/iscomplex.py +64 -0
  428. maxframe/tensor/arithmetic/isfinite.py +106 -0
  429. maxframe/tensor/arithmetic/isinf.py +103 -0
  430. maxframe/tensor/arithmetic/isnan.py +82 -0
  431. maxframe/tensor/arithmetic/isreal.py +63 -0
  432. maxframe/tensor/arithmetic/ldexp.py +99 -0
  433. maxframe/tensor/arithmetic/less.py +69 -0
  434. maxframe/tensor/arithmetic/less_equal.py +69 -0
  435. maxframe/tensor/arithmetic/log.py +92 -0
  436. maxframe/tensor/arithmetic/log10.py +85 -0
  437. maxframe/tensor/arithmetic/log1p.py +95 -0
  438. maxframe/tensor/arithmetic/log2.py +85 -0
  439. maxframe/tensor/arithmetic/logaddexp.py +80 -0
  440. maxframe/tensor/arithmetic/logaddexp2.py +78 -0
  441. maxframe/tensor/arithmetic/logical_and.py +81 -0
  442. maxframe/tensor/arithmetic/logical_not.py +74 -0
  443. maxframe/tensor/arithmetic/logical_or.py +82 -0
  444. maxframe/tensor/arithmetic/logical_xor.py +88 -0
  445. maxframe/tensor/arithmetic/lshift.py +82 -0
  446. maxframe/tensor/arithmetic/maximum.py +108 -0
  447. maxframe/tensor/arithmetic/minimum.py +108 -0
  448. maxframe/tensor/arithmetic/mod.py +104 -0
  449. maxframe/tensor/arithmetic/modf.py +83 -0
  450. maxframe/tensor/arithmetic/multiply.py +81 -0
  451. maxframe/tensor/arithmetic/nan_to_num.py +99 -0
  452. maxframe/tensor/arithmetic/negative.py +65 -0
  453. maxframe/tensor/arithmetic/nextafter.py +68 -0
  454. maxframe/tensor/arithmetic/not_equal.py +72 -0
  455. maxframe/tensor/arithmetic/positive.py +47 -0
  456. maxframe/tensor/arithmetic/power.py +106 -0
  457. maxframe/tensor/arithmetic/rad2deg.py +71 -0
  458. maxframe/tensor/arithmetic/radians.py +77 -0
  459. maxframe/tensor/arithmetic/real.py +70 -0
  460. maxframe/tensor/arithmetic/reciprocal.py +76 -0
  461. maxframe/tensor/arithmetic/rint.py +68 -0
  462. maxframe/tensor/arithmetic/rshift.py +81 -0
  463. maxframe/tensor/arithmetic/setimag.py +29 -0
  464. maxframe/tensor/arithmetic/setreal.py +29 -0
  465. maxframe/tensor/arithmetic/sign.py +81 -0
  466. maxframe/tensor/arithmetic/signbit.py +65 -0
  467. maxframe/tensor/arithmetic/sin.py +98 -0
  468. maxframe/tensor/arithmetic/sinc.py +102 -0
  469. maxframe/tensor/arithmetic/sinh.py +93 -0
  470. maxframe/tensor/arithmetic/spacing.py +72 -0
  471. maxframe/tensor/arithmetic/sqrt.py +81 -0
  472. maxframe/tensor/arithmetic/square.py +69 -0
  473. maxframe/tensor/arithmetic/subtract.py +81 -0
  474. maxframe/tensor/arithmetic/tan.py +88 -0
  475. maxframe/tensor/arithmetic/tanh.py +92 -0
  476. maxframe/tensor/arithmetic/tests/__init__.py +15 -0
  477. maxframe/tensor/arithmetic/tests/test_arithmetic.py +414 -0
  478. maxframe/tensor/arithmetic/truediv.py +104 -0
  479. maxframe/tensor/arithmetic/trunc.py +72 -0
  480. maxframe/tensor/arithmetic/utils.py +65 -0
  481. maxframe/tensor/array_utils.py +186 -0
  482. maxframe/tensor/base/__init__.py +34 -0
  483. maxframe/tensor/base/astype.py +119 -0
  484. maxframe/tensor/base/atleast_1d.py +74 -0
  485. maxframe/tensor/base/broadcast_to.py +89 -0
  486. maxframe/tensor/base/ravel.py +92 -0
  487. maxframe/tensor/base/tests/__init__.py +13 -0
  488. maxframe/tensor/base/tests/test_base.py +114 -0
  489. maxframe/tensor/base/transpose.py +125 -0
  490. maxframe/tensor/base/unique.py +205 -0
  491. maxframe/tensor/base/where.py +127 -0
  492. maxframe/tensor/core.py +724 -0
  493. maxframe/tensor/datasource/__init__.py +32 -0
  494. maxframe/tensor/datasource/arange.py +156 -0
  495. maxframe/tensor/datasource/array.py +415 -0
  496. maxframe/tensor/datasource/core.py +109 -0
  497. maxframe/tensor/datasource/empty.py +169 -0
  498. maxframe/tensor/datasource/from_dataframe.py +70 -0
  499. maxframe/tensor/datasource/from_dense.py +54 -0
  500. maxframe/tensor/datasource/from_sparse.py +47 -0
  501. maxframe/tensor/datasource/full.py +186 -0
  502. maxframe/tensor/datasource/ones.py +173 -0
  503. maxframe/tensor/datasource/scalar.py +40 -0
  504. maxframe/tensor/datasource/tests/__init__.py +13 -0
  505. maxframe/tensor/datasource/tests/test_datasource.py +278 -0
  506. maxframe/tensor/datasource/zeros.py +188 -0
  507. maxframe/tensor/fetch/__init__.py +15 -0
  508. maxframe/tensor/fetch/core.py +54 -0
  509. maxframe/tensor/indexing/__init__.py +47 -0
  510. maxframe/tensor/indexing/choose.py +196 -0
  511. maxframe/tensor/indexing/compress.py +124 -0
  512. maxframe/tensor/indexing/core.py +190 -0
  513. maxframe/tensor/indexing/extract.py +71 -0
  514. maxframe/tensor/indexing/fill_diagonal.py +183 -0
  515. maxframe/tensor/indexing/flatnonzero.py +60 -0
  516. maxframe/tensor/indexing/getitem.py +175 -0
  517. maxframe/tensor/indexing/nonzero.py +120 -0
  518. maxframe/tensor/indexing/setitem.py +132 -0
  519. maxframe/tensor/indexing/slice.py +29 -0
  520. maxframe/tensor/indexing/take.py +130 -0
  521. maxframe/tensor/indexing/tests/__init__.py +15 -0
  522. maxframe/tensor/indexing/tests/test_indexing.py +234 -0
  523. maxframe/tensor/indexing/unravel_index.py +103 -0
  524. maxframe/tensor/merge/__init__.py +15 -0
  525. maxframe/tensor/merge/stack.py +132 -0
  526. maxframe/tensor/merge/tests/__init__.py +13 -0
  527. maxframe/tensor/merge/tests/test_merge.py +52 -0
  528. maxframe/tensor/operators.py +123 -0
  529. maxframe/tensor/random/__init__.py +168 -0
  530. maxframe/tensor/random/beta.py +87 -0
  531. maxframe/tensor/random/binomial.py +137 -0
  532. maxframe/tensor/random/bytes.py +39 -0
  533. maxframe/tensor/random/chisquare.py +110 -0
  534. maxframe/tensor/random/choice.py +186 -0
  535. maxframe/tensor/random/core.py +234 -0
  536. maxframe/tensor/random/dirichlet.py +123 -0
  537. maxframe/tensor/random/exponential.py +94 -0
  538. maxframe/tensor/random/f.py +135 -0
  539. maxframe/tensor/random/gamma.py +128 -0
  540. maxframe/tensor/random/geometric.py +93 -0
  541. maxframe/tensor/random/gumbel.py +167 -0
  542. maxframe/tensor/random/hypergeometric.py +148 -0
  543. maxframe/tensor/random/laplace.py +133 -0
  544. maxframe/tensor/random/logistic.py +129 -0
  545. maxframe/tensor/random/lognormal.py +159 -0
  546. maxframe/tensor/random/logseries.py +122 -0
  547. maxframe/tensor/random/multinomial.py +133 -0
  548. maxframe/tensor/random/multivariate_normal.py +192 -0
  549. maxframe/tensor/random/negative_binomial.py +125 -0
  550. maxframe/tensor/random/noncentral_chisquare.py +132 -0
  551. maxframe/tensor/random/noncentral_f.py +126 -0
  552. maxframe/tensor/random/normal.py +143 -0
  553. maxframe/tensor/random/pareto.py +140 -0
  554. maxframe/tensor/random/permutation.py +104 -0
  555. maxframe/tensor/random/poisson.py +111 -0
  556. maxframe/tensor/random/power.py +142 -0
  557. maxframe/tensor/random/rand.py +82 -0
  558. maxframe/tensor/random/randint.py +121 -0
  559. maxframe/tensor/random/randn.py +96 -0
  560. maxframe/tensor/random/random_integers.py +123 -0
  561. maxframe/tensor/random/random_sample.py +86 -0
  562. maxframe/tensor/random/rayleigh.py +110 -0
  563. maxframe/tensor/random/shuffle.py +61 -0
  564. maxframe/tensor/random/standard_cauchy.py +105 -0
  565. maxframe/tensor/random/standard_exponential.py +72 -0
  566. maxframe/tensor/random/standard_gamma.py +120 -0
  567. maxframe/tensor/random/standard_normal.py +74 -0
  568. maxframe/tensor/random/standard_t.py +135 -0
  569. maxframe/tensor/random/tests/__init__.py +15 -0
  570. maxframe/tensor/random/tests/test_random.py +167 -0
  571. maxframe/tensor/random/triangular.py +119 -0
  572. maxframe/tensor/random/uniform.py +131 -0
  573. maxframe/tensor/random/vonmises.py +131 -0
  574. maxframe/tensor/random/wald.py +114 -0
  575. maxframe/tensor/random/weibull.py +140 -0
  576. maxframe/tensor/random/zipf.py +122 -0
  577. maxframe/tensor/rechunk/__init__.py +26 -0
  578. maxframe/tensor/rechunk/rechunk.py +43 -0
  579. maxframe/tensor/reduction/__init__.py +66 -0
  580. maxframe/tensor/reduction/all.py +103 -0
  581. maxframe/tensor/reduction/allclose.py +88 -0
  582. maxframe/tensor/reduction/any.py +105 -0
  583. maxframe/tensor/reduction/argmax.py +103 -0
  584. maxframe/tensor/reduction/argmin.py +103 -0
  585. maxframe/tensor/reduction/array_equal.py +64 -0
  586. maxframe/tensor/reduction/core.py +168 -0
  587. maxframe/tensor/reduction/count_nonzero.py +81 -0
  588. maxframe/tensor/reduction/cumprod.py +97 -0
  589. maxframe/tensor/reduction/cumsum.py +101 -0
  590. maxframe/tensor/reduction/max.py +120 -0
  591. maxframe/tensor/reduction/mean.py +123 -0
  592. maxframe/tensor/reduction/min.py +120 -0
  593. maxframe/tensor/reduction/nanargmax.py +82 -0
  594. maxframe/tensor/reduction/nanargmin.py +76 -0
  595. maxframe/tensor/reduction/nancumprod.py +91 -0
  596. maxframe/tensor/reduction/nancumsum.py +94 -0
  597. maxframe/tensor/reduction/nanmax.py +111 -0
  598. maxframe/tensor/reduction/nanmean.py +106 -0
  599. maxframe/tensor/reduction/nanmin.py +111 -0
  600. maxframe/tensor/reduction/nanprod.py +94 -0
  601. maxframe/tensor/reduction/nanstd.py +126 -0
  602. maxframe/tensor/reduction/nansum.py +115 -0
  603. maxframe/tensor/reduction/nanvar.py +149 -0
  604. maxframe/tensor/reduction/prod.py +130 -0
  605. maxframe/tensor/reduction/std.py +134 -0
  606. maxframe/tensor/reduction/sum.py +125 -0
  607. maxframe/tensor/reduction/tests/__init__.py +13 -0
  608. maxframe/tensor/reduction/tests/test_reduction.py +181 -0
  609. maxframe/tensor/reduction/var.py +176 -0
  610. maxframe/tensor/reshape/__init__.py +17 -0
  611. maxframe/tensor/reshape/reshape.py +188 -0
  612. maxframe/tensor/reshape/tests/__init__.py +15 -0
  613. maxframe/tensor/reshape/tests/test_reshape.py +37 -0
  614. maxframe/tensor/statistics/__init__.py +13 -0
  615. maxframe/tensor/statistics/percentile.py +175 -0
  616. maxframe/tensor/statistics/quantile.py +288 -0
  617. maxframe/tensor/ufunc/__init__.py +26 -0
  618. maxframe/tensor/ufunc/ufunc.py +200 -0
  619. maxframe/tensor/utils.py +718 -0
  620. maxframe/tests/__init__.py +13 -0
  621. maxframe/tests/test_codegen.py +69 -0
  622. maxframe/tests/test_protocol.py +144 -0
  623. maxframe/tests/test_utils.py +376 -0
  624. maxframe/tests/utils.py +164 -0
  625. maxframe/typing_.py +37 -0
  626. maxframe/udf.py +134 -0
  627. maxframe/utils.py +1114 -0
  628. maxframe-0.1.0b5.dist-info/METADATA +104 -0
  629. maxframe-0.1.0b5.dist-info/RECORD +647 -0
  630. maxframe-0.1.0b5.dist-info/WHEEL +5 -0
  631. maxframe-0.1.0b5.dist-info/top_level.txt +2 -0
  632. maxframe_client/__init__.py +17 -0
  633. maxframe_client/clients/__init__.py +13 -0
  634. maxframe_client/clients/framedriver.py +118 -0
  635. maxframe_client/clients/spe.py +104 -0
  636. maxframe_client/conftest.py +15 -0
  637. maxframe_client/fetcher.py +264 -0
  638. maxframe_client/session/__init__.py +22 -0
  639. maxframe_client/session/consts.py +36 -0
  640. maxframe_client/session/graph.py +119 -0
  641. maxframe_client/session/odps.py +482 -0
  642. maxframe_client/session/task.py +280 -0
  643. maxframe_client/session/tests/__init__.py +13 -0
  644. maxframe_client/session/tests/test_task.py +85 -0
  645. maxframe_client/tests/__init__.py +13 -0
  646. maxframe_client/tests/test_fetcher.py +89 -0
  647. maxframe_client/tests/test_session.py +255 -0
@@ -0,0 +1,414 @@
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 ....core import enter_mode
21
+ from ...core import SparseTensor, Tensor
22
+ from ...datasource import array, empty, ones, tensor
23
+ from .. import (
24
+ TensorAdd,
25
+ TensorGreaterThan,
26
+ TensorIsclose,
27
+ TensorLog,
28
+ TensorSubtract,
29
+ add,
30
+ around,
31
+ cos,
32
+ frexp,
33
+ isclose,
34
+ isfinite,
35
+ log,
36
+ negative,
37
+ subtract,
38
+ truediv,
39
+ )
40
+
41
+
42
+ def test_add():
43
+ t1 = ones((3, 4), chunk_size=2)
44
+ t2 = ones(4, chunk_size=2)
45
+ t3 = t1 + t2
46
+ assert t3.op.gpu is None
47
+ assert t3.shape == (3, 4)
48
+ assert t3.op.dtype == np.dtype("f8")
49
+
50
+ t1 = ones((3, 4), chunk_size=2)
51
+ t4 = t1 + 1
52
+ assert t4.shape == (3, 4)
53
+
54
+ t2 = ones(4, chunk_size=2)
55
+ t6 = ones((3, 4), chunk_size=2, gpu=True)
56
+ t7 = ones(4, chunk_size=2, gpu=True)
57
+ t8 = t6 + t7
58
+ t9 = t6 + t2
59
+ assert t8.op.gpu is True
60
+ assert t9.op.gpu is None
61
+
62
+ # sparse tests
63
+ t1 = tensor([[0, 1, 0], [1, 0, 0]], chunk_size=2).tosparse()
64
+
65
+ t = t1 + 1
66
+ assert t.op.gpu is None
67
+ assert t.issparse() is True
68
+ assert type(t) is SparseTensor
69
+
70
+ t = t1 + 0
71
+ assert t.issparse() is True
72
+ assert type(t) is SparseTensor
73
+
74
+ t2 = tensor([[1, 0, 0]], chunk_size=2).tosparse()
75
+
76
+ t = t1 + t2
77
+ assert t.issparse() is True
78
+ assert type(t) is SparseTensor
79
+
80
+ t3 = tensor([1, 1, 1], chunk_size=2)
81
+ t = t1 + t3
82
+ assert t.issparse() is False
83
+ assert type(t) is Tensor
84
+
85
+
86
+ def test_add_order():
87
+ raw_a = np.random.rand(4, 2)
88
+ raw_b = np.asfortranarray(np.random.rand(4, 2))
89
+ t1 = tensor(raw_a)
90
+ t2 = tensor(raw_b)
91
+ out = tensor(raw_b)
92
+
93
+ # C + scalar
94
+ assert (t1 + 1).flags["C_CONTIGUOUS"] == (raw_a + 1).flags["C_CONTIGUOUS"]
95
+ assert (t1 + 1).flags["F_CONTIGUOUS"] == (raw_a + 1).flags["F_CONTIGUOUS"]
96
+ # C + C
97
+ assert (t1 + t1).flags["C_CONTIGUOUS"] == (raw_a + raw_a).flags["C_CONTIGUOUS"]
98
+ assert (t1 + t1).flags["F_CONTIGUOUS"] == (raw_a + raw_a).flags["F_CONTIGUOUS"]
99
+ # F + scalar
100
+ assert (t2 + 1).flags["C_CONTIGUOUS"] == (raw_b + 1).flags["C_CONTIGUOUS"]
101
+ assert (t2 + 1).flags["F_CONTIGUOUS"] == (raw_b + 1).flags["F_CONTIGUOUS"]
102
+ # F + F
103
+ assert (t2 + t2).flags["C_CONTIGUOUS"] == (raw_b + raw_b).flags["C_CONTIGUOUS"]
104
+ assert (t2 + t2).flags["F_CONTIGUOUS"] == (raw_b + raw_b).flags["F_CONTIGUOUS"]
105
+ # C + F
106
+ assert (t1 + t2).flags["C_CONTIGUOUS"] == (raw_a + raw_b).flags["C_CONTIGUOUS"]
107
+ assert (t1 + t2).flags["F_CONTIGUOUS"] == (raw_a + raw_b).flags["F_CONTIGUOUS"]
108
+ # C + C + out
109
+ assert (
110
+ add(t1, t1, out=out).flags["C_CONTIGUOUS"]
111
+ == np.add(raw_a, raw_a, out=np.empty((4, 2), order="F")).flags["C_CONTIGUOUS"]
112
+ )
113
+ assert (
114
+ add(t1, t1, out=out).flags["F_CONTIGUOUS"]
115
+ == np.add(raw_a, raw_a, out=np.empty((4, 2), order="F")).flags["F_CONTIGUOUS"]
116
+ )
117
+
118
+ with pytest.raises(TypeError):
119
+ add(t1, 1, order="B")
120
+
121
+
122
+ def test_multiply():
123
+ t1 = tensor([[0, 1, 0], [1, 0, 0]], chunk_size=2).tosparse()
124
+
125
+ t = t1 * 10
126
+ assert t.issparse() is True
127
+ assert type(t) is SparseTensor
128
+
129
+ t2 = tensor([[1, 0, 0]], chunk_size=2).tosparse()
130
+
131
+ t = t1 * t2
132
+ assert t.issparse() is True
133
+ assert type(t) is SparseTensor
134
+
135
+ t3 = tensor([1, 1, 1], chunk_size=2)
136
+ t = t1 * t3
137
+ assert t.issparse() is True
138
+ assert type(t) is SparseTensor
139
+
140
+
141
+ def test_divide():
142
+ t1 = tensor([[0, 1, 0], [1, 0, 0]], chunk_size=2).tosparse()
143
+
144
+ t = t1 / 10
145
+ assert t.issparse() is True
146
+ assert type(t) is SparseTensor
147
+
148
+ t2 = tensor([[1, 0, 0]], chunk_size=2).tosparse()
149
+
150
+ t = t1 / t2
151
+ assert t.issparse() is False
152
+ assert type(t) is Tensor
153
+
154
+ t3 = tensor([1, 1, 1], chunk_size=2)
155
+ t = t1 / t3
156
+ assert t.issparse() is False
157
+ assert type(t) is Tensor
158
+
159
+ t = t3 / t1
160
+ assert t.issparse() is False
161
+ assert type(t) is Tensor
162
+
163
+
164
+ def test_datatime_arith():
165
+ t1 = array([np.datetime64("2005-02-02"), np.datetime64("2005-02-03")])
166
+ t2 = t1 + np.timedelta64(1)
167
+
168
+ assert isinstance(t2.op, TensorAdd)
169
+
170
+ t3 = t1 - np.datetime64("2005-02-02")
171
+
172
+ assert isinstance(t3.op, TensorSubtract)
173
+ assert (
174
+ t3.dtype
175
+ == (
176
+ np.array(["2005-02-02", "2005-02-03"], dtype=np.datetime64)
177
+ - np.datetime64("2005-02-02")
178
+ ).dtype
179
+ )
180
+
181
+ t1 = array([np.datetime64("2005-02-02"), np.datetime64("2005-02-03")])
182
+ subtract(t1, np.datetime64("2005-02-02"), out=empty(t1.shape, dtype=t3.dtype))
183
+
184
+ t1 = array([np.datetime64("2005-02-02"), np.datetime64("2005-02-03")])
185
+ add(t1, np.timedelta64(1, "D"), out=t1)
186
+
187
+
188
+ def test_add_with_out():
189
+ t1 = ones((3, 4), chunk_size=2)
190
+ t2 = ones(4, chunk_size=2)
191
+
192
+ t3 = add(t1, t2, out=t1)
193
+
194
+ assert isinstance(t1.op, TensorAdd)
195
+ assert t1.op.out.key == t1.op.lhs.key
196
+ assert t3 is t1
197
+ assert t3.shape == (3, 4)
198
+ assert t3.op.lhs.extra_params.raw_chunk_size == 2
199
+ assert t3.op.rhs is t2.data
200
+ assert t3.key != t3.op.lhs.key
201
+
202
+ with pytest.raises(TypeError):
203
+ add(t1, t2, out=1)
204
+
205
+ with pytest.raises(ValueError):
206
+ add(t1, t2, out=t2)
207
+
208
+ with pytest.raises(TypeError):
209
+ truediv(t1, t2, out=t1.astype("i8"))
210
+
211
+ t1 = ones((3, 4), chunk_size=2, dtype=float)
212
+ t2 = ones(4, chunk_size=2, dtype=int)
213
+
214
+ t3 = add(t2, 1, out=t1)
215
+ assert t3.shape == (3, 4)
216
+ assert t3.dtype == np.float64
217
+
218
+
219
+ def test_dtype_from_out():
220
+ x = array([-np.inf, 0.0, np.inf])
221
+ y = array([2, 2, 2])
222
+
223
+ t3 = isfinite(x, y)
224
+ assert t3.dtype == y.dtype
225
+
226
+
227
+ def test_log_without_where():
228
+ t1 = ones((3, 4), chunk_size=2)
229
+
230
+ t2 = log(t1, out=t1)
231
+
232
+ assert isinstance(t2.op, TensorLog)
233
+ assert t1.op.out.key == t1.op.input.key
234
+ assert t2 is t1
235
+ assert t2.op.input.extra_params.raw_chunk_size == 2
236
+ assert t2.key != t2.op.input.key
237
+
238
+ t3 = empty((3, 4), chunk_size=2)
239
+ t4 = log(t1, out=t3, where=t1 > 0)
240
+ assert isinstance(t4.op, TensorLog)
241
+ assert t4 is t3
242
+ assert t2.op.input.extra_params.raw_chunk_size == 2
243
+ assert t2.key != t2.op.input.key
244
+
245
+
246
+ def test_compare():
247
+ t1 = ones(4, chunk_size=2) * 2
248
+ t2 = ones(4, chunk_size=2)
249
+ t3 = t1 > t2
250
+ assert isinstance(t3.op, TensorGreaterThan)
251
+
252
+
253
+ def test_frexp():
254
+ t1 = ones((3, 4, 5), chunk_size=2)
255
+ t2 = empty((3, 4, 5), dtype=np.float_, chunk_size=2)
256
+ op_type = type(t1.op)
257
+
258
+ o1, o2 = frexp(t1)
259
+
260
+ assert o1.op is o2.op
261
+ assert o1.dtype != o2.dtype
262
+
263
+ o1, o2 = frexp(t1, t1)
264
+
265
+ assert o1 is t1
266
+ assert o1.inputs[0] is not t1
267
+ assert isinstance(o1.inputs[0].op, op_type)
268
+ assert o2.inputs[0] is not t1
269
+
270
+ o1, o2 = frexp(t1, t2, where=t1 > 0)
271
+
272
+ op_type = type(t2.op)
273
+ assert o1 is t2
274
+ assert o1.inputs[0] is not t1
275
+ assert isinstance(o1.inputs[0].op, op_type)
276
+ assert o2.inputs[0] is not t1
277
+
278
+
279
+ def test_frexp_order():
280
+ raw1 = np.asfortranarray(np.random.rand(2, 4))
281
+ t = tensor(raw1)
282
+ o1 = tensor(np.random.rand(2, 4))
283
+
284
+ o1, o2 = frexp(t, out1=o1)
285
+
286
+ assert (
287
+ o1.flags["C_CONTIGUOUS"]
288
+ == np.frexp(raw1, np.empty((2, 4)))[0].flags["C_CONTIGUOUS"]
289
+ )
290
+ assert (
291
+ o1.flags["F_CONTIGUOUS"]
292
+ == np.frexp(raw1, np.empty((2, 4)))[0].flags["F_CONTIGUOUS"]
293
+ )
294
+ assert o2.flags["C_CONTIGUOUS"] == np.frexp(raw1)[1].flags["C_CONTIGUOUS"]
295
+ assert o2.flags["F_CONTIGUOUS"] == np.frexp(raw1)[1].flags["F_CONTIGUOUS"]
296
+
297
+
298
+ def test_dtype():
299
+ t1 = ones((2, 3), dtype="f4", chunk_size=2)
300
+
301
+ t = truediv(t1, 2, dtype="f8")
302
+
303
+ assert t.dtype == np.float64
304
+
305
+ with pytest.raises(TypeError):
306
+ truediv(t1, 2, dtype="i4")
307
+
308
+
309
+ def test_negative():
310
+ t1 = tensor([[0, 1, 0], [1, 0, 0]], chunk_size=2).tosparse()
311
+
312
+ t = negative(t1)
313
+ assert t.op.gpu is None
314
+ assert t.issparse() is True
315
+ assert type(t) is SparseTensor
316
+
317
+
318
+ def test_negative_order():
319
+ raw1 = np.random.rand(4, 2)
320
+ raw2 = np.asfortranarray(np.random.rand(4, 2))
321
+ t1 = tensor(raw1)
322
+ t2 = tensor(raw2)
323
+ t3 = tensor(raw1)
324
+ t4 = tensor(raw2)
325
+
326
+ # C
327
+ assert negative(t1).flags["C_CONTIGUOUS"] == np.negative(raw1).flags["C_CONTIGUOUS"]
328
+ assert negative(t1).flags["F_CONTIGUOUS"] == np.negative(raw1).flags["F_CONTIGUOUS"]
329
+ # F
330
+ assert negative(t2).flags["C_CONTIGUOUS"] == np.negative(raw2).flags["C_CONTIGUOUS"]
331
+ assert negative(t2).flags["F_CONTIGUOUS"] == np.negative(raw2).flags["F_CONTIGUOUS"]
332
+ # C + out
333
+ assert (
334
+ negative(t1, out=t4).flags["C_CONTIGUOUS"]
335
+ == np.negative(raw1, out=np.empty((4, 2), order="F")).flags["C_CONTIGUOUS"]
336
+ )
337
+ assert (
338
+ negative(t1, out=t4).flags["F_CONTIGUOUS"]
339
+ == np.negative(raw1, out=np.empty((4, 2), order="F")).flags["F_CONTIGUOUS"]
340
+ )
341
+ # F + out
342
+ assert (
343
+ negative(t2, out=t3).flags["C_CONTIGUOUS"]
344
+ == np.negative(raw1, out=np.empty((4, 2), order="C")).flags["C_CONTIGUOUS"]
345
+ )
346
+ assert (
347
+ negative(t2, out=t3).flags["F_CONTIGUOUS"]
348
+ == np.negative(raw1, out=np.empty((4, 2), order="C")).flags["F_CONTIGUOUS"]
349
+ )
350
+
351
+ with pytest.raises(TypeError):
352
+ negative(t1, order="B")
353
+
354
+
355
+ def test_cos():
356
+ t1 = tensor([[0, 1, 0], [1, 0, 0]], chunk_size=2).tosparse()
357
+
358
+ t = cos(t1)
359
+ assert t.issparse() is True
360
+ assert type(t) is SparseTensor
361
+
362
+
363
+ def test_around():
364
+ t1 = ones((2, 3), dtype="f4", chunk_size=2)
365
+
366
+ t = around(t1, decimals=3)
367
+
368
+ assert t.issparse() is False
369
+ assert t.op.decimals == 3
370
+
371
+
372
+ def test_isclose():
373
+ t1 = ones((2, 3), dtype="f4", chunk_size=2)
374
+
375
+ atol = 1e-4
376
+ rtol = 1e-5
377
+ equal_nan = True
378
+
379
+ t = isclose(t1, 2, atol=atol, rtol=rtol, equal_nan=equal_nan)
380
+
381
+ assert isinstance(t.op, TensorIsclose)
382
+ assert t.op.atol == atol
383
+ assert t.op.rtol == rtol
384
+ assert t.op.equal_nan == equal_nan
385
+
386
+ t1 = ones((2, 3), dtype="f4", chunk_size=2)
387
+ t2 = ones((2, 3), dtype="f4", chunk_size=2)
388
+
389
+ atol = 1e-4
390
+ rtol = 1e-5
391
+ equal_nan = True
392
+
393
+ t = isclose(t1, t2, atol=atol, rtol=rtol, equal_nan=equal_nan)
394
+
395
+ assert isinstance(t.op, TensorIsclose)
396
+ assert t.op.atol == atol
397
+ assert t.op.rtol == rtol
398
+ assert t.op.equal_nan == equal_nan
399
+
400
+
401
+ def test_get_set_real():
402
+ a_data = np.array([1 + 2j, 3 + 4j, 5 + 6j])
403
+ a = tensor(a_data, chunk_size=2)
404
+
405
+ with pytest.raises(ValueError):
406
+ a.real = [2, 4]
407
+
408
+
409
+ def test_build_mode():
410
+ t1 = ones((2, 3), chunk_size=2)
411
+ assert t1 == 2
412
+
413
+ with enter_mode(build=True):
414
+ assert t1 != 2
@@ -0,0 +1,104 @@
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 ..utils import infer_dtype
21
+ from .core import TensorBinOp
22
+ from .utils import arithmetic_operator
23
+
24
+
25
+ @arithmetic_operator
26
+ class TensorTrueDiv(TensorBinOp):
27
+ _op_type_ = opcodes.TRUEDIV
28
+ _func_name = "true_divide"
29
+
30
+ @classmethod
31
+ def _is_sparse(cls, x1, x2):
32
+ if not np.isscalar(x1) and not np.isscalar(x2):
33
+ return False
34
+ if hasattr(x1, "issparse") and x1.issparse():
35
+ if x2 != 0:
36
+ return True
37
+ else:
38
+ raise ZeroDivisionError("float division by zero")
39
+ return False
40
+
41
+
42
+ @infer_dtype(np.true_divide)
43
+ def truediv(x1, x2, out=None, where=None, **kwargs):
44
+ """
45
+ Returns a true division of the inputs, element-wise.
46
+
47
+ Instead of the Python traditional 'floor division', this returns a true
48
+ division. True division adjusts the output type to present the best
49
+ answer, regardless of input types.
50
+
51
+ Parameters
52
+ ----------
53
+ x1 : array_like
54
+ Dividend tensor.
55
+ x2 : array_like
56
+ Divisor tensor.
57
+ out : Tensor, None, or tuple of Tensor and None, optional
58
+ A location into which the result is stored. If provided, it must have
59
+ a shape that the inputs broadcast to. If not provided or `None`,
60
+ a freshly-allocated tensor is returned. A tuple (possible only as a
61
+ keyword argument) must have length equal to the number of outputs.
62
+ where : array_like, optional
63
+ Values of True indicate to calculate the ufunc at that position, values
64
+ of False indicate to leave the value in the output alone.
65
+ **kwargs
66
+
67
+ Returns
68
+ -------
69
+ out : Tensor
70
+ Result is scalar if both inputs are scalar, tensor otherwise.
71
+
72
+ Notes
73
+ -----
74
+ The floor division operator ``//`` was added in Python 2.2 making
75
+ ``//`` and ``/`` equivalent operators. The default floor division
76
+ operation of ``/`` can be replaced by true division with ``from
77
+ __future__ import division``.
78
+
79
+ In Python 3.0, ``//`` is the floor division operator and ``/`` the
80
+ true division operator. The ``true_divide(x1, x2)`` function is
81
+ equivalent to true division in Python.
82
+
83
+ Examples
84
+ --------
85
+ >>> import maxframe.tensor as mt
86
+
87
+ >>> x = mt.arange(5)
88
+ >>> mt.true_divide(x, 4).execute()
89
+ array([ 0. , 0.25, 0.5 , 0.75, 1. ])
90
+
91
+ # for python 2
92
+ >>> (x/4).execute()
93
+ array([0, 0, 0, 0, 1])
94
+ >>> (x//4).execute()
95
+ array([0, 0, 0, 0, 1])
96
+ """
97
+ op = TensorTrueDiv(**kwargs)
98
+ return op(x1, x2, out=out, where=where)
99
+
100
+
101
+ @infer_dtype(np.true_divide, reverse=True)
102
+ def rtruediv(x1, x2, **kwargs):
103
+ op = TensorTrueDiv(**kwargs)
104
+ return op.rcall(x1, x2)
@@ -0,0 +1,72 @@
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 ..utils import infer_dtype
21
+ from .core import TensorUnaryOp
22
+ from .utils import arithmetic_operator
23
+
24
+
25
+ @arithmetic_operator(sparse_mode="unary")
26
+ class TensorTrunc(TensorUnaryOp):
27
+ _op_type_ = opcodes.TRUNC
28
+ _func_name = "trunc"
29
+
30
+
31
+ @infer_dtype(np.trunc)
32
+ def trunc(x, out=None, where=None, **kwargs):
33
+ """
34
+ Return the truncated value of the input, element-wise.
35
+
36
+ The truncated value of the scalar `x` is the nearest integer `i` which
37
+ is closer to zero than `x` is. In short, the fractional part of the
38
+ signed number `x` is discarded.
39
+
40
+ Parameters
41
+ ----------
42
+ x : array_like
43
+ Input data.
44
+ out : Tensor, None, or tuple of Tensor and None, optional
45
+ A location into which the result is stored. If provided, it must have
46
+ a shape that the inputs broadcast to. If not provided or `None`,
47
+ a freshly-allocated tensor is returned. A tuple (possible only as a
48
+ keyword argument) must have length equal to the number of outputs.
49
+ where : array_like, optional
50
+ Values of True indicate to calculate the ufunc at that position, values
51
+ of False indicate to leave the value in the output alone.
52
+ **kwargs
53
+
54
+ Returns
55
+ -------
56
+ y : Tensor or scalar
57
+ The truncated value of each element in `x`.
58
+
59
+ See Also
60
+ --------
61
+ ceil, floor, rint
62
+
63
+ Examples
64
+ --------
65
+ >>> import maxframe.tensor as mt
66
+
67
+ >>> a = mt.array([-1.7, -1.5, -0.2, 0.2, 1.5, 1.7, 2.0])
68
+ >>> mt.trunc(a).execute()
69
+ array([-1., -1., -0., 0., 1., 1., 2.])
70
+ """
71
+ op = TensorTrunc(**kwargs)
72
+ return op(x, out=out, where=where)
@@ -0,0 +1,65 @@
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
+
20
+ def arithmetic_operator(cls=None, init=True, sparse_mode=None):
21
+ def _decorator(cls):
22
+ def __init__(self, casting="same_kind", err=None, **kw):
23
+ err = err if err is not None else np.geterr()
24
+ super(cls, self).__init__(casting=casting, err=err, **kw)
25
+
26
+ def _is_sparse_binary_and_const(x1, x2):
27
+ if all(np.isscalar(x) for x in [x1, x2]):
28
+ return False
29
+ if all(
30
+ np.isscalar(x) or (hasattr(x, "issparse") and x.issparse())
31
+ for x in [x1, x2]
32
+ ):
33
+ return True
34
+ return False
35
+
36
+ def _is_sparse_binary_or_const(x1, x2):
37
+ if (hasattr(x1, "issparse") and x1.issparse()) or (
38
+ hasattr(x2, "issparse") and x2.issparse()
39
+ ):
40
+ return True
41
+ return False
42
+
43
+ _is_sparse_dict = dict(
44
+ always_false=lambda *_: False,
45
+ unary=lambda x: x.issparse(),
46
+ binary_and=_is_sparse_binary_and_const,
47
+ binary_or=_is_sparse_binary_or_const,
48
+ )
49
+ for v in _is_sparse_dict.values():
50
+ v.__name__ = "_is_sparse"
51
+
52
+ if init:
53
+ cls.__init__ = __init__
54
+
55
+ if sparse_mode in _is_sparse_dict:
56
+ cls._is_sparse = staticmethod(_is_sparse_dict[sparse_mode])
57
+ elif sparse_mode is not None: # pragma: no cover
58
+ raise ValueError(f"Unsupported sparse mode: {sparse_mode}")
59
+
60
+ return cls
61
+
62
+ if cls is not None:
63
+ return _decorator(cls)
64
+ else:
65
+ return _decorator