maxframe 0.1.0b5__cp310-cp310-macosx_11_0_arm64.whl

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

Potentially problematic release.


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

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