maxframe 0.1.0b5__cp39-cp39-macosx_11_0_arm64.whl

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

Potentially problematic release.


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

Files changed (647) hide show
  1. maxframe/__init__.py +32 -0
  2. maxframe/_utils.cpython-39-darwin.so +0 -0
  3. maxframe/_utils.pxd +33 -0
  4. maxframe/_utils.pyx +547 -0
  5. maxframe/codegen.py +528 -0
  6. maxframe/config/__init__.py +15 -0
  7. maxframe/config/config.py +443 -0
  8. maxframe/config/tests/__init__.py +13 -0
  9. maxframe/config/tests/test_config.py +103 -0
  10. maxframe/config/tests/test_validators.py +34 -0
  11. maxframe/config/validators.py +57 -0
  12. maxframe/conftest.py +139 -0
  13. maxframe/core/__init__.py +65 -0
  14. maxframe/core/base.py +156 -0
  15. maxframe/core/entity/__init__.py +44 -0
  16. maxframe/core/entity/chunks.py +68 -0
  17. maxframe/core/entity/core.py +152 -0
  18. maxframe/core/entity/executable.py +337 -0
  19. maxframe/core/entity/fuse.py +73 -0
  20. maxframe/core/entity/objects.py +100 -0
  21. maxframe/core/entity/output_types.py +90 -0
  22. maxframe/core/entity/tileables.py +438 -0
  23. maxframe/core/entity/utils.py +24 -0
  24. maxframe/core/graph/__init__.py +17 -0
  25. maxframe/core/graph/builder/__init__.py +16 -0
  26. maxframe/core/graph/builder/base.py +86 -0
  27. maxframe/core/graph/builder/chunk.py +430 -0
  28. maxframe/core/graph/builder/tileable.py +34 -0
  29. maxframe/core/graph/builder/utils.py +41 -0
  30. maxframe/core/graph/core.cpython-39-darwin.so +0 -0
  31. maxframe/core/graph/core.pyx +467 -0
  32. maxframe/core/graph/entity.py +171 -0
  33. maxframe/core/graph/tests/__init__.py +13 -0
  34. maxframe/core/graph/tests/test_graph.py +205 -0
  35. maxframe/core/mode.py +96 -0
  36. maxframe/core/operator/__init__.py +34 -0
  37. maxframe/core/operator/base.py +450 -0
  38. maxframe/core/operator/core.py +276 -0
  39. maxframe/core/operator/fetch.py +53 -0
  40. maxframe/core/operator/fuse.py +29 -0
  41. maxframe/core/operator/objects.py +72 -0
  42. maxframe/core/operator/shuffle.py +111 -0
  43. maxframe/core/operator/tests/__init__.py +13 -0
  44. maxframe/core/operator/tests/test_core.py +64 -0
  45. maxframe/core/tests/__init__.py +13 -0
  46. maxframe/core/tests/test_mode.py +75 -0
  47. maxframe/dataframe/__init__.py +81 -0
  48. maxframe/dataframe/arithmetic/__init__.py +359 -0
  49. maxframe/dataframe/arithmetic/abs.py +33 -0
  50. maxframe/dataframe/arithmetic/add.py +60 -0
  51. maxframe/dataframe/arithmetic/arccos.py +28 -0
  52. maxframe/dataframe/arithmetic/arccosh.py +28 -0
  53. maxframe/dataframe/arithmetic/arcsin.py +28 -0
  54. maxframe/dataframe/arithmetic/arcsinh.py +28 -0
  55. maxframe/dataframe/arithmetic/arctan.py +28 -0
  56. maxframe/dataframe/arithmetic/arctanh.py +28 -0
  57. maxframe/dataframe/arithmetic/around.py +152 -0
  58. maxframe/dataframe/arithmetic/bitwise_and.py +46 -0
  59. maxframe/dataframe/arithmetic/bitwise_or.py +50 -0
  60. maxframe/dataframe/arithmetic/bitwise_xor.py +46 -0
  61. maxframe/dataframe/arithmetic/ceil.py +28 -0
  62. maxframe/dataframe/arithmetic/core.py +342 -0
  63. maxframe/dataframe/arithmetic/cos.py +28 -0
  64. maxframe/dataframe/arithmetic/cosh.py +28 -0
  65. maxframe/dataframe/arithmetic/degrees.py +28 -0
  66. maxframe/dataframe/arithmetic/docstring.py +442 -0
  67. maxframe/dataframe/arithmetic/equal.py +56 -0
  68. maxframe/dataframe/arithmetic/exp.py +28 -0
  69. maxframe/dataframe/arithmetic/exp2.py +28 -0
  70. maxframe/dataframe/arithmetic/expm1.py +28 -0
  71. maxframe/dataframe/arithmetic/floor.py +28 -0
  72. maxframe/dataframe/arithmetic/floordiv.py +64 -0
  73. maxframe/dataframe/arithmetic/greater.py +57 -0
  74. maxframe/dataframe/arithmetic/greater_equal.py +57 -0
  75. maxframe/dataframe/arithmetic/invert.py +33 -0
  76. maxframe/dataframe/arithmetic/is_ufuncs.py +62 -0
  77. maxframe/dataframe/arithmetic/less.py +57 -0
  78. maxframe/dataframe/arithmetic/less_equal.py +57 -0
  79. maxframe/dataframe/arithmetic/log.py +28 -0
  80. maxframe/dataframe/arithmetic/log10.py +28 -0
  81. maxframe/dataframe/arithmetic/log2.py +28 -0
  82. maxframe/dataframe/arithmetic/mod.py +60 -0
  83. maxframe/dataframe/arithmetic/multiply.py +60 -0
  84. maxframe/dataframe/arithmetic/negative.py +33 -0
  85. maxframe/dataframe/arithmetic/not_equal.py +56 -0
  86. maxframe/dataframe/arithmetic/power.py +68 -0
  87. maxframe/dataframe/arithmetic/radians.py +28 -0
  88. maxframe/dataframe/arithmetic/sin.py +28 -0
  89. maxframe/dataframe/arithmetic/sinh.py +28 -0
  90. maxframe/dataframe/arithmetic/sqrt.py +28 -0
  91. maxframe/dataframe/arithmetic/subtract.py +64 -0
  92. maxframe/dataframe/arithmetic/tan.py +28 -0
  93. maxframe/dataframe/arithmetic/tanh.py +28 -0
  94. maxframe/dataframe/arithmetic/tests/__init__.py +13 -0
  95. maxframe/dataframe/arithmetic/tests/test_arithmetic.py +695 -0
  96. maxframe/dataframe/arithmetic/truediv.py +64 -0
  97. maxframe/dataframe/arithmetic/trunc.py +28 -0
  98. maxframe/dataframe/arrays.py +864 -0
  99. maxframe/dataframe/core.py +2417 -0
  100. maxframe/dataframe/datasource/__init__.py +15 -0
  101. maxframe/dataframe/datasource/core.py +81 -0
  102. maxframe/dataframe/datasource/dataframe.py +59 -0
  103. maxframe/dataframe/datasource/date_range.py +504 -0
  104. maxframe/dataframe/datasource/from_index.py +54 -0
  105. maxframe/dataframe/datasource/from_records.py +107 -0
  106. maxframe/dataframe/datasource/from_tensor.py +419 -0
  107. maxframe/dataframe/datasource/index.py +117 -0
  108. maxframe/dataframe/datasource/read_csv.py +528 -0
  109. maxframe/dataframe/datasource/read_odps_query.py +299 -0
  110. maxframe/dataframe/datasource/read_odps_table.py +253 -0
  111. maxframe/dataframe/datasource/read_parquet.py +421 -0
  112. maxframe/dataframe/datasource/series.py +55 -0
  113. maxframe/dataframe/datasource/tests/__init__.py +13 -0
  114. maxframe/dataframe/datasource/tests/test_datasource.py +401 -0
  115. maxframe/dataframe/datastore/__init__.py +26 -0
  116. maxframe/dataframe/datastore/core.py +19 -0
  117. maxframe/dataframe/datastore/to_csv.py +227 -0
  118. maxframe/dataframe/datastore/to_odps.py +162 -0
  119. maxframe/dataframe/extensions/__init__.py +41 -0
  120. maxframe/dataframe/extensions/accessor.py +50 -0
  121. maxframe/dataframe/extensions/reshuffle.py +83 -0
  122. maxframe/dataframe/extensions/tests/__init__.py +13 -0
  123. maxframe/dataframe/extensions/tests/test_extensions.py +38 -0
  124. maxframe/dataframe/fetch/__init__.py +15 -0
  125. maxframe/dataframe/fetch/core.py +86 -0
  126. maxframe/dataframe/groupby/__init__.py +82 -0
  127. maxframe/dataframe/groupby/aggregation.py +350 -0
  128. maxframe/dataframe/groupby/apply.py +251 -0
  129. maxframe/dataframe/groupby/core.py +179 -0
  130. maxframe/dataframe/groupby/cum.py +124 -0
  131. maxframe/dataframe/groupby/fill.py +141 -0
  132. maxframe/dataframe/groupby/getitem.py +92 -0
  133. maxframe/dataframe/groupby/head.py +105 -0
  134. maxframe/dataframe/groupby/sample.py +214 -0
  135. maxframe/dataframe/groupby/tests/__init__.py +13 -0
  136. maxframe/dataframe/groupby/tests/test_groupby.py +374 -0
  137. maxframe/dataframe/groupby/transform.py +255 -0
  138. maxframe/dataframe/indexing/__init__.py +84 -0
  139. maxframe/dataframe/indexing/add_prefix_suffix.py +110 -0
  140. maxframe/dataframe/indexing/align.py +349 -0
  141. maxframe/dataframe/indexing/at.py +83 -0
  142. maxframe/dataframe/indexing/getitem.py +204 -0
  143. maxframe/dataframe/indexing/iat.py +37 -0
  144. maxframe/dataframe/indexing/iloc.py +566 -0
  145. maxframe/dataframe/indexing/insert.py +86 -0
  146. maxframe/dataframe/indexing/loc.py +411 -0
  147. maxframe/dataframe/indexing/reindex.py +526 -0
  148. maxframe/dataframe/indexing/rename.py +462 -0
  149. maxframe/dataframe/indexing/rename_axis.py +209 -0
  150. maxframe/dataframe/indexing/reset_index.py +402 -0
  151. maxframe/dataframe/indexing/sample.py +221 -0
  152. maxframe/dataframe/indexing/set_axis.py +194 -0
  153. maxframe/dataframe/indexing/set_index.py +61 -0
  154. maxframe/dataframe/indexing/setitem.py +130 -0
  155. maxframe/dataframe/indexing/tests/__init__.py +13 -0
  156. maxframe/dataframe/indexing/tests/test_indexing.py +488 -0
  157. maxframe/dataframe/indexing/where.py +308 -0
  158. maxframe/dataframe/initializer.py +288 -0
  159. maxframe/dataframe/merge/__init__.py +32 -0
  160. maxframe/dataframe/merge/append.py +121 -0
  161. maxframe/dataframe/merge/concat.py +325 -0
  162. maxframe/dataframe/merge/merge.py +593 -0
  163. maxframe/dataframe/merge/tests/__init__.py +13 -0
  164. maxframe/dataframe/merge/tests/test_merge.py +215 -0
  165. maxframe/dataframe/misc/__init__.py +134 -0
  166. maxframe/dataframe/misc/_duplicate.py +46 -0
  167. maxframe/dataframe/misc/accessor.py +276 -0
  168. maxframe/dataframe/misc/apply.py +692 -0
  169. maxframe/dataframe/misc/astype.py +236 -0
  170. maxframe/dataframe/misc/case_when.py +141 -0
  171. maxframe/dataframe/misc/check_monotonic.py +84 -0
  172. maxframe/dataframe/misc/cut.py +383 -0
  173. maxframe/dataframe/misc/datetimes.py +79 -0
  174. maxframe/dataframe/misc/describe.py +108 -0
  175. maxframe/dataframe/misc/diff.py +210 -0
  176. maxframe/dataframe/misc/drop.py +440 -0
  177. maxframe/dataframe/misc/drop_duplicates.py +248 -0
  178. maxframe/dataframe/misc/duplicated.py +292 -0
  179. maxframe/dataframe/misc/eval.py +728 -0
  180. maxframe/dataframe/misc/explode.py +171 -0
  181. maxframe/dataframe/misc/get_dummies.py +208 -0
  182. maxframe/dataframe/misc/isin.py +217 -0
  183. maxframe/dataframe/misc/map.py +236 -0
  184. maxframe/dataframe/misc/melt.py +162 -0
  185. maxframe/dataframe/misc/memory_usage.py +248 -0
  186. maxframe/dataframe/misc/pct_change.py +150 -0
  187. maxframe/dataframe/misc/pivot_table.py +262 -0
  188. maxframe/dataframe/misc/qcut.py +104 -0
  189. maxframe/dataframe/misc/select_dtypes.py +104 -0
  190. maxframe/dataframe/misc/shift.py +256 -0
  191. maxframe/dataframe/misc/stack.py +238 -0
  192. maxframe/dataframe/misc/string_.py +221 -0
  193. maxframe/dataframe/misc/tests/__init__.py +13 -0
  194. maxframe/dataframe/misc/tests/test_misc.py +468 -0
  195. maxframe/dataframe/misc/to_numeric.py +178 -0
  196. maxframe/dataframe/misc/transform.py +361 -0
  197. maxframe/dataframe/misc/transpose.py +136 -0
  198. maxframe/dataframe/misc/value_counts.py +182 -0
  199. maxframe/dataframe/missing/__init__.py +53 -0
  200. maxframe/dataframe/missing/checkna.py +223 -0
  201. maxframe/dataframe/missing/dropna.py +280 -0
  202. maxframe/dataframe/missing/fillna.py +275 -0
  203. maxframe/dataframe/missing/replace.py +439 -0
  204. maxframe/dataframe/missing/tests/__init__.py +13 -0
  205. maxframe/dataframe/missing/tests/test_missing.py +89 -0
  206. maxframe/dataframe/operators.py +273 -0
  207. maxframe/dataframe/plotting/__init__.py +40 -0
  208. maxframe/dataframe/plotting/core.py +78 -0
  209. maxframe/dataframe/plotting/tests/__init__.py +13 -0
  210. maxframe/dataframe/plotting/tests/test_plotting.py +136 -0
  211. maxframe/dataframe/reduction/__init__.py +107 -0
  212. maxframe/dataframe/reduction/aggregation.py +344 -0
  213. maxframe/dataframe/reduction/all.py +78 -0
  214. maxframe/dataframe/reduction/any.py +78 -0
  215. maxframe/dataframe/reduction/core.py +837 -0
  216. maxframe/dataframe/reduction/count.py +59 -0
  217. maxframe/dataframe/reduction/cummax.py +30 -0
  218. maxframe/dataframe/reduction/cummin.py +30 -0
  219. maxframe/dataframe/reduction/cumprod.py +30 -0
  220. maxframe/dataframe/reduction/cumsum.py +30 -0
  221. maxframe/dataframe/reduction/custom_reduction.py +42 -0
  222. maxframe/dataframe/reduction/kurtosis.py +104 -0
  223. maxframe/dataframe/reduction/max.py +65 -0
  224. maxframe/dataframe/reduction/mean.py +61 -0
  225. maxframe/dataframe/reduction/min.py +65 -0
  226. maxframe/dataframe/reduction/nunique.py +141 -0
  227. maxframe/dataframe/reduction/prod.py +76 -0
  228. maxframe/dataframe/reduction/reduction_size.py +36 -0
  229. maxframe/dataframe/reduction/sem.py +69 -0
  230. maxframe/dataframe/reduction/skew.py +89 -0
  231. maxframe/dataframe/reduction/std.py +53 -0
  232. maxframe/dataframe/reduction/str_concat.py +48 -0
  233. maxframe/dataframe/reduction/sum.py +77 -0
  234. maxframe/dataframe/reduction/tests/__init__.py +13 -0
  235. maxframe/dataframe/reduction/tests/test_reduction.py +486 -0
  236. maxframe/dataframe/reduction/unique.py +90 -0
  237. maxframe/dataframe/reduction/var.py +72 -0
  238. maxframe/dataframe/sort/__init__.py +34 -0
  239. maxframe/dataframe/sort/core.py +36 -0
  240. maxframe/dataframe/sort/sort_index.py +153 -0
  241. maxframe/dataframe/sort/sort_values.py +311 -0
  242. maxframe/dataframe/sort/tests/__init__.py +13 -0
  243. maxframe/dataframe/sort/tests/test_sort.py +81 -0
  244. maxframe/dataframe/statistics/__init__.py +33 -0
  245. maxframe/dataframe/statistics/corr.py +280 -0
  246. maxframe/dataframe/statistics/quantile.py +341 -0
  247. maxframe/dataframe/statistics/tests/__init__.py +13 -0
  248. maxframe/dataframe/statistics/tests/test_statistics.py +82 -0
  249. maxframe/dataframe/tests/__init__.py +13 -0
  250. maxframe/dataframe/tests/test_initializer.py +29 -0
  251. maxframe/dataframe/tseries/__init__.py +13 -0
  252. maxframe/dataframe/tseries/tests/__init__.py +13 -0
  253. maxframe/dataframe/tseries/tests/test_tseries.py +30 -0
  254. maxframe/dataframe/tseries/to_datetime.py +297 -0
  255. maxframe/dataframe/ufunc/__init__.py +27 -0
  256. maxframe/dataframe/ufunc/tensor.py +54 -0
  257. maxframe/dataframe/ufunc/ufunc.py +52 -0
  258. maxframe/dataframe/utils.py +1267 -0
  259. maxframe/dataframe/window/__init__.py +29 -0
  260. maxframe/dataframe/window/aggregation.py +96 -0
  261. maxframe/dataframe/window/core.py +69 -0
  262. maxframe/dataframe/window/ewm.py +249 -0
  263. maxframe/dataframe/window/expanding.py +147 -0
  264. maxframe/dataframe/window/rolling.py +376 -0
  265. maxframe/dataframe/window/tests/__init__.py +13 -0
  266. maxframe/dataframe/window/tests/test_ewm.py +70 -0
  267. maxframe/dataframe/window/tests/test_expanding.py +66 -0
  268. maxframe/dataframe/window/tests/test_rolling.py +57 -0
  269. maxframe/env.py +33 -0
  270. maxframe/errors.py +21 -0
  271. maxframe/extension.py +81 -0
  272. maxframe/learn/__init__.py +17 -0
  273. maxframe/learn/contrib/__init__.py +17 -0
  274. maxframe/learn/contrib/pytorch/__init__.py +16 -0
  275. maxframe/learn/contrib/pytorch/run_function.py +110 -0
  276. maxframe/learn/contrib/pytorch/run_script.py +102 -0
  277. maxframe/learn/contrib/pytorch/tests/__init__.py +13 -0
  278. maxframe/learn/contrib/pytorch/tests/test_pytorch.py +42 -0
  279. maxframe/learn/contrib/utils.py +52 -0
  280. maxframe/learn/contrib/xgboost/__init__.py +26 -0
  281. maxframe/learn/contrib/xgboost/classifier.py +86 -0
  282. maxframe/learn/contrib/xgboost/core.py +156 -0
  283. maxframe/learn/contrib/xgboost/dmatrix.py +150 -0
  284. maxframe/learn/contrib/xgboost/predict.py +138 -0
  285. maxframe/learn/contrib/xgboost/regressor.py +78 -0
  286. maxframe/learn/contrib/xgboost/tests/__init__.py +13 -0
  287. maxframe/learn/contrib/xgboost/tests/test_core.py +43 -0
  288. maxframe/learn/contrib/xgboost/train.py +121 -0
  289. maxframe/learn/utils/__init__.py +15 -0
  290. maxframe/learn/utils/core.py +29 -0
  291. maxframe/lib/__init__.py +15 -0
  292. maxframe/lib/aio/__init__.py +27 -0
  293. maxframe/lib/aio/_runners.py +162 -0
  294. maxframe/lib/aio/_threads.py +35 -0
  295. maxframe/lib/aio/base.py +82 -0
  296. maxframe/lib/aio/file.py +85 -0
  297. maxframe/lib/aio/isolation.py +100 -0
  298. maxframe/lib/aio/lru.py +242 -0
  299. maxframe/lib/aio/parallelism.py +37 -0
  300. maxframe/lib/aio/tests/__init__.py +13 -0
  301. maxframe/lib/aio/tests/test_aio_file.py +55 -0
  302. maxframe/lib/compression.py +55 -0
  303. maxframe/lib/cython/__init__.py +13 -0
  304. maxframe/lib/cython/libcpp.pxd +30 -0
  305. maxframe/lib/filesystem/__init__.py +21 -0
  306. maxframe/lib/filesystem/_glob.py +173 -0
  307. maxframe/lib/filesystem/_oss_lib/__init__.py +13 -0
  308. maxframe/lib/filesystem/_oss_lib/common.py +198 -0
  309. maxframe/lib/filesystem/_oss_lib/glob.py +147 -0
  310. maxframe/lib/filesystem/_oss_lib/handle.py +156 -0
  311. maxframe/lib/filesystem/arrow.py +236 -0
  312. maxframe/lib/filesystem/base.py +263 -0
  313. maxframe/lib/filesystem/core.py +95 -0
  314. maxframe/lib/filesystem/fsmap.py +164 -0
  315. maxframe/lib/filesystem/hdfs.py +31 -0
  316. maxframe/lib/filesystem/local.py +112 -0
  317. maxframe/lib/filesystem/oss.py +157 -0
  318. maxframe/lib/filesystem/tests/__init__.py +13 -0
  319. maxframe/lib/filesystem/tests/test_filesystem.py +223 -0
  320. maxframe/lib/filesystem/tests/test_oss.py +182 -0
  321. maxframe/lib/functools_compat.py +81 -0
  322. maxframe/lib/mmh3.cpython-39-darwin.so +0 -0
  323. maxframe/lib/mmh3_src/MurmurHash3.cpp +339 -0
  324. maxframe/lib/mmh3_src/MurmurHash3.h +43 -0
  325. maxframe/lib/mmh3_src/mmh3module.cpp +387 -0
  326. maxframe/lib/sparse/__init__.py +861 -0
  327. maxframe/lib/sparse/array.py +1604 -0
  328. maxframe/lib/sparse/core.py +92 -0
  329. maxframe/lib/sparse/matrix.py +241 -0
  330. maxframe/lib/sparse/tests/__init__.py +15 -0
  331. maxframe/lib/sparse/tests/test_sparse.py +476 -0
  332. maxframe/lib/sparse/vector.py +150 -0
  333. maxframe/lib/tblib/LICENSE +20 -0
  334. maxframe/lib/tblib/__init__.py +327 -0
  335. maxframe/lib/tblib/cpython.py +83 -0
  336. maxframe/lib/tblib/decorators.py +44 -0
  337. maxframe/lib/tblib/pickling_support.py +90 -0
  338. maxframe/lib/tests/__init__.py +13 -0
  339. maxframe/lib/tests/test_wrapped_pickle.py +51 -0
  340. maxframe/lib/version.py +620 -0
  341. maxframe/lib/wrapped_pickle.py +139 -0
  342. maxframe/mixin.py +100 -0
  343. maxframe/odpsio/__init__.py +21 -0
  344. maxframe/odpsio/arrow.py +91 -0
  345. maxframe/odpsio/schema.py +364 -0
  346. maxframe/odpsio/tableio.py +322 -0
  347. maxframe/odpsio/tests/__init__.py +13 -0
  348. maxframe/odpsio/tests/test_arrow.py +88 -0
  349. maxframe/odpsio/tests/test_schema.py +297 -0
  350. maxframe/odpsio/tests/test_tableio.py +136 -0
  351. maxframe/odpsio/tests/test_volumeio.py +90 -0
  352. maxframe/odpsio/volumeio.py +95 -0
  353. maxframe/opcodes.py +590 -0
  354. maxframe/protocol.py +415 -0
  355. maxframe/remote/__init__.py +18 -0
  356. maxframe/remote/core.py +210 -0
  357. maxframe/remote/run_script.py +121 -0
  358. maxframe/serialization/__init__.py +26 -0
  359. maxframe/serialization/arrow.py +95 -0
  360. maxframe/serialization/core.cpython-39-darwin.so +0 -0
  361. maxframe/serialization/core.pxd +44 -0
  362. maxframe/serialization/core.pyi +61 -0
  363. maxframe/serialization/core.pyx +1094 -0
  364. maxframe/serialization/exception.py +86 -0
  365. maxframe/serialization/maxframe_objects.py +39 -0
  366. maxframe/serialization/numpy.py +91 -0
  367. maxframe/serialization/pandas.py +202 -0
  368. maxframe/serialization/scipy.py +71 -0
  369. maxframe/serialization/serializables/__init__.py +55 -0
  370. maxframe/serialization/serializables/core.py +262 -0
  371. maxframe/serialization/serializables/field.py +624 -0
  372. maxframe/serialization/serializables/field_type.py +589 -0
  373. maxframe/serialization/serializables/tests/__init__.py +13 -0
  374. maxframe/serialization/serializables/tests/test_field_type.py +121 -0
  375. maxframe/serialization/serializables/tests/test_serializable.py +250 -0
  376. maxframe/serialization/tests/__init__.py +13 -0
  377. maxframe/serialization/tests/test_serial.py +412 -0
  378. maxframe/session.py +1310 -0
  379. maxframe/tensor/__init__.py +183 -0
  380. maxframe/tensor/arithmetic/__init__.py +315 -0
  381. maxframe/tensor/arithmetic/abs.py +68 -0
  382. maxframe/tensor/arithmetic/absolute.py +68 -0
  383. maxframe/tensor/arithmetic/add.py +82 -0
  384. maxframe/tensor/arithmetic/angle.py +72 -0
  385. maxframe/tensor/arithmetic/arccos.py +104 -0
  386. maxframe/tensor/arithmetic/arccosh.py +91 -0
  387. maxframe/tensor/arithmetic/arcsin.py +94 -0
  388. maxframe/tensor/arithmetic/arcsinh.py +86 -0
  389. maxframe/tensor/arithmetic/arctan.py +106 -0
  390. maxframe/tensor/arithmetic/arctan2.py +128 -0
  391. maxframe/tensor/arithmetic/arctanh.py +86 -0
  392. maxframe/tensor/arithmetic/around.py +114 -0
  393. maxframe/tensor/arithmetic/bitand.py +95 -0
  394. maxframe/tensor/arithmetic/bitor.py +102 -0
  395. maxframe/tensor/arithmetic/bitxor.py +95 -0
  396. maxframe/tensor/arithmetic/cbrt.py +66 -0
  397. maxframe/tensor/arithmetic/ceil.py +71 -0
  398. maxframe/tensor/arithmetic/clip.py +165 -0
  399. maxframe/tensor/arithmetic/conj.py +74 -0
  400. maxframe/tensor/arithmetic/copysign.py +78 -0
  401. maxframe/tensor/arithmetic/core.py +544 -0
  402. maxframe/tensor/arithmetic/cos.py +85 -0
  403. maxframe/tensor/arithmetic/cosh.py +72 -0
  404. maxframe/tensor/arithmetic/deg2rad.py +72 -0
  405. maxframe/tensor/arithmetic/degrees.py +77 -0
  406. maxframe/tensor/arithmetic/divide.py +114 -0
  407. maxframe/tensor/arithmetic/equal.py +76 -0
  408. maxframe/tensor/arithmetic/exp.py +106 -0
  409. maxframe/tensor/arithmetic/exp2.py +67 -0
  410. maxframe/tensor/arithmetic/expm1.py +79 -0
  411. maxframe/tensor/arithmetic/fabs.py +74 -0
  412. maxframe/tensor/arithmetic/fix.py +69 -0
  413. maxframe/tensor/arithmetic/float_power.py +103 -0
  414. maxframe/tensor/arithmetic/floor.py +77 -0
  415. maxframe/tensor/arithmetic/floordiv.py +94 -0
  416. maxframe/tensor/arithmetic/fmax.py +105 -0
  417. maxframe/tensor/arithmetic/fmin.py +106 -0
  418. maxframe/tensor/arithmetic/fmod.py +99 -0
  419. maxframe/tensor/arithmetic/frexp.py +92 -0
  420. maxframe/tensor/arithmetic/greater.py +77 -0
  421. maxframe/tensor/arithmetic/greater_equal.py +69 -0
  422. maxframe/tensor/arithmetic/hypot.py +77 -0
  423. maxframe/tensor/arithmetic/i0.py +89 -0
  424. maxframe/tensor/arithmetic/imag.py +67 -0
  425. maxframe/tensor/arithmetic/invert.py +110 -0
  426. maxframe/tensor/arithmetic/isclose.py +115 -0
  427. maxframe/tensor/arithmetic/iscomplex.py +64 -0
  428. maxframe/tensor/arithmetic/isfinite.py +106 -0
  429. maxframe/tensor/arithmetic/isinf.py +103 -0
  430. maxframe/tensor/arithmetic/isnan.py +82 -0
  431. maxframe/tensor/arithmetic/isreal.py +63 -0
  432. maxframe/tensor/arithmetic/ldexp.py +99 -0
  433. maxframe/tensor/arithmetic/less.py +69 -0
  434. maxframe/tensor/arithmetic/less_equal.py +69 -0
  435. maxframe/tensor/arithmetic/log.py +92 -0
  436. maxframe/tensor/arithmetic/log10.py +85 -0
  437. maxframe/tensor/arithmetic/log1p.py +95 -0
  438. maxframe/tensor/arithmetic/log2.py +85 -0
  439. maxframe/tensor/arithmetic/logaddexp.py +80 -0
  440. maxframe/tensor/arithmetic/logaddexp2.py +78 -0
  441. maxframe/tensor/arithmetic/logical_and.py +81 -0
  442. maxframe/tensor/arithmetic/logical_not.py +74 -0
  443. maxframe/tensor/arithmetic/logical_or.py +82 -0
  444. maxframe/tensor/arithmetic/logical_xor.py +88 -0
  445. maxframe/tensor/arithmetic/lshift.py +82 -0
  446. maxframe/tensor/arithmetic/maximum.py +108 -0
  447. maxframe/tensor/arithmetic/minimum.py +108 -0
  448. maxframe/tensor/arithmetic/mod.py +104 -0
  449. maxframe/tensor/arithmetic/modf.py +83 -0
  450. maxframe/tensor/arithmetic/multiply.py +81 -0
  451. maxframe/tensor/arithmetic/nan_to_num.py +99 -0
  452. maxframe/tensor/arithmetic/negative.py +65 -0
  453. maxframe/tensor/arithmetic/nextafter.py +68 -0
  454. maxframe/tensor/arithmetic/not_equal.py +72 -0
  455. maxframe/tensor/arithmetic/positive.py +47 -0
  456. maxframe/tensor/arithmetic/power.py +106 -0
  457. maxframe/tensor/arithmetic/rad2deg.py +71 -0
  458. maxframe/tensor/arithmetic/radians.py +77 -0
  459. maxframe/tensor/arithmetic/real.py +70 -0
  460. maxframe/tensor/arithmetic/reciprocal.py +76 -0
  461. maxframe/tensor/arithmetic/rint.py +68 -0
  462. maxframe/tensor/arithmetic/rshift.py +81 -0
  463. maxframe/tensor/arithmetic/setimag.py +29 -0
  464. maxframe/tensor/arithmetic/setreal.py +29 -0
  465. maxframe/tensor/arithmetic/sign.py +81 -0
  466. maxframe/tensor/arithmetic/signbit.py +65 -0
  467. maxframe/tensor/arithmetic/sin.py +98 -0
  468. maxframe/tensor/arithmetic/sinc.py +102 -0
  469. maxframe/tensor/arithmetic/sinh.py +93 -0
  470. maxframe/tensor/arithmetic/spacing.py +72 -0
  471. maxframe/tensor/arithmetic/sqrt.py +81 -0
  472. maxframe/tensor/arithmetic/square.py +69 -0
  473. maxframe/tensor/arithmetic/subtract.py +81 -0
  474. maxframe/tensor/arithmetic/tan.py +88 -0
  475. maxframe/tensor/arithmetic/tanh.py +92 -0
  476. maxframe/tensor/arithmetic/tests/__init__.py +15 -0
  477. maxframe/tensor/arithmetic/tests/test_arithmetic.py +414 -0
  478. maxframe/tensor/arithmetic/truediv.py +104 -0
  479. maxframe/tensor/arithmetic/trunc.py +72 -0
  480. maxframe/tensor/arithmetic/utils.py +65 -0
  481. maxframe/tensor/array_utils.py +186 -0
  482. maxframe/tensor/base/__init__.py +34 -0
  483. maxframe/tensor/base/astype.py +119 -0
  484. maxframe/tensor/base/atleast_1d.py +74 -0
  485. maxframe/tensor/base/broadcast_to.py +89 -0
  486. maxframe/tensor/base/ravel.py +92 -0
  487. maxframe/tensor/base/tests/__init__.py +13 -0
  488. maxframe/tensor/base/tests/test_base.py +114 -0
  489. maxframe/tensor/base/transpose.py +125 -0
  490. maxframe/tensor/base/unique.py +205 -0
  491. maxframe/tensor/base/where.py +127 -0
  492. maxframe/tensor/core.py +724 -0
  493. maxframe/tensor/datasource/__init__.py +32 -0
  494. maxframe/tensor/datasource/arange.py +156 -0
  495. maxframe/tensor/datasource/array.py +415 -0
  496. maxframe/tensor/datasource/core.py +109 -0
  497. maxframe/tensor/datasource/empty.py +169 -0
  498. maxframe/tensor/datasource/from_dataframe.py +70 -0
  499. maxframe/tensor/datasource/from_dense.py +54 -0
  500. maxframe/tensor/datasource/from_sparse.py +47 -0
  501. maxframe/tensor/datasource/full.py +186 -0
  502. maxframe/tensor/datasource/ones.py +173 -0
  503. maxframe/tensor/datasource/scalar.py +40 -0
  504. maxframe/tensor/datasource/tests/__init__.py +13 -0
  505. maxframe/tensor/datasource/tests/test_datasource.py +278 -0
  506. maxframe/tensor/datasource/zeros.py +188 -0
  507. maxframe/tensor/fetch/__init__.py +15 -0
  508. maxframe/tensor/fetch/core.py +54 -0
  509. maxframe/tensor/indexing/__init__.py +47 -0
  510. maxframe/tensor/indexing/choose.py +196 -0
  511. maxframe/tensor/indexing/compress.py +124 -0
  512. maxframe/tensor/indexing/core.py +190 -0
  513. maxframe/tensor/indexing/extract.py +71 -0
  514. maxframe/tensor/indexing/fill_diagonal.py +183 -0
  515. maxframe/tensor/indexing/flatnonzero.py +60 -0
  516. maxframe/tensor/indexing/getitem.py +175 -0
  517. maxframe/tensor/indexing/nonzero.py +120 -0
  518. maxframe/tensor/indexing/setitem.py +132 -0
  519. maxframe/tensor/indexing/slice.py +29 -0
  520. maxframe/tensor/indexing/take.py +130 -0
  521. maxframe/tensor/indexing/tests/__init__.py +15 -0
  522. maxframe/tensor/indexing/tests/test_indexing.py +234 -0
  523. maxframe/tensor/indexing/unravel_index.py +103 -0
  524. maxframe/tensor/merge/__init__.py +15 -0
  525. maxframe/tensor/merge/stack.py +132 -0
  526. maxframe/tensor/merge/tests/__init__.py +13 -0
  527. maxframe/tensor/merge/tests/test_merge.py +52 -0
  528. maxframe/tensor/operators.py +123 -0
  529. maxframe/tensor/random/__init__.py +168 -0
  530. maxframe/tensor/random/beta.py +87 -0
  531. maxframe/tensor/random/binomial.py +137 -0
  532. maxframe/tensor/random/bytes.py +39 -0
  533. maxframe/tensor/random/chisquare.py +110 -0
  534. maxframe/tensor/random/choice.py +186 -0
  535. maxframe/tensor/random/core.py +234 -0
  536. maxframe/tensor/random/dirichlet.py +123 -0
  537. maxframe/tensor/random/exponential.py +94 -0
  538. maxframe/tensor/random/f.py +135 -0
  539. maxframe/tensor/random/gamma.py +128 -0
  540. maxframe/tensor/random/geometric.py +93 -0
  541. maxframe/tensor/random/gumbel.py +167 -0
  542. maxframe/tensor/random/hypergeometric.py +148 -0
  543. maxframe/tensor/random/laplace.py +133 -0
  544. maxframe/tensor/random/logistic.py +129 -0
  545. maxframe/tensor/random/lognormal.py +159 -0
  546. maxframe/tensor/random/logseries.py +122 -0
  547. maxframe/tensor/random/multinomial.py +133 -0
  548. maxframe/tensor/random/multivariate_normal.py +192 -0
  549. maxframe/tensor/random/negative_binomial.py +125 -0
  550. maxframe/tensor/random/noncentral_chisquare.py +132 -0
  551. maxframe/tensor/random/noncentral_f.py +126 -0
  552. maxframe/tensor/random/normal.py +143 -0
  553. maxframe/tensor/random/pareto.py +140 -0
  554. maxframe/tensor/random/permutation.py +104 -0
  555. maxframe/tensor/random/poisson.py +111 -0
  556. maxframe/tensor/random/power.py +142 -0
  557. maxframe/tensor/random/rand.py +82 -0
  558. maxframe/tensor/random/randint.py +121 -0
  559. maxframe/tensor/random/randn.py +96 -0
  560. maxframe/tensor/random/random_integers.py +123 -0
  561. maxframe/tensor/random/random_sample.py +86 -0
  562. maxframe/tensor/random/rayleigh.py +110 -0
  563. maxframe/tensor/random/shuffle.py +61 -0
  564. maxframe/tensor/random/standard_cauchy.py +105 -0
  565. maxframe/tensor/random/standard_exponential.py +72 -0
  566. maxframe/tensor/random/standard_gamma.py +120 -0
  567. maxframe/tensor/random/standard_normal.py +74 -0
  568. maxframe/tensor/random/standard_t.py +135 -0
  569. maxframe/tensor/random/tests/__init__.py +15 -0
  570. maxframe/tensor/random/tests/test_random.py +167 -0
  571. maxframe/tensor/random/triangular.py +119 -0
  572. maxframe/tensor/random/uniform.py +131 -0
  573. maxframe/tensor/random/vonmises.py +131 -0
  574. maxframe/tensor/random/wald.py +114 -0
  575. maxframe/tensor/random/weibull.py +140 -0
  576. maxframe/tensor/random/zipf.py +122 -0
  577. maxframe/tensor/rechunk/__init__.py +26 -0
  578. maxframe/tensor/rechunk/rechunk.py +43 -0
  579. maxframe/tensor/reduction/__init__.py +66 -0
  580. maxframe/tensor/reduction/all.py +103 -0
  581. maxframe/tensor/reduction/allclose.py +88 -0
  582. maxframe/tensor/reduction/any.py +105 -0
  583. maxframe/tensor/reduction/argmax.py +103 -0
  584. maxframe/tensor/reduction/argmin.py +103 -0
  585. maxframe/tensor/reduction/array_equal.py +64 -0
  586. maxframe/tensor/reduction/core.py +168 -0
  587. maxframe/tensor/reduction/count_nonzero.py +81 -0
  588. maxframe/tensor/reduction/cumprod.py +97 -0
  589. maxframe/tensor/reduction/cumsum.py +101 -0
  590. maxframe/tensor/reduction/max.py +120 -0
  591. maxframe/tensor/reduction/mean.py +123 -0
  592. maxframe/tensor/reduction/min.py +120 -0
  593. maxframe/tensor/reduction/nanargmax.py +82 -0
  594. maxframe/tensor/reduction/nanargmin.py +76 -0
  595. maxframe/tensor/reduction/nancumprod.py +91 -0
  596. maxframe/tensor/reduction/nancumsum.py +94 -0
  597. maxframe/tensor/reduction/nanmax.py +111 -0
  598. maxframe/tensor/reduction/nanmean.py +106 -0
  599. maxframe/tensor/reduction/nanmin.py +111 -0
  600. maxframe/tensor/reduction/nanprod.py +94 -0
  601. maxframe/tensor/reduction/nanstd.py +126 -0
  602. maxframe/tensor/reduction/nansum.py +115 -0
  603. maxframe/tensor/reduction/nanvar.py +149 -0
  604. maxframe/tensor/reduction/prod.py +130 -0
  605. maxframe/tensor/reduction/std.py +134 -0
  606. maxframe/tensor/reduction/sum.py +125 -0
  607. maxframe/tensor/reduction/tests/__init__.py +13 -0
  608. maxframe/tensor/reduction/tests/test_reduction.py +181 -0
  609. maxframe/tensor/reduction/var.py +176 -0
  610. maxframe/tensor/reshape/__init__.py +17 -0
  611. maxframe/tensor/reshape/reshape.py +188 -0
  612. maxframe/tensor/reshape/tests/__init__.py +15 -0
  613. maxframe/tensor/reshape/tests/test_reshape.py +37 -0
  614. maxframe/tensor/statistics/__init__.py +13 -0
  615. maxframe/tensor/statistics/percentile.py +175 -0
  616. maxframe/tensor/statistics/quantile.py +288 -0
  617. maxframe/tensor/ufunc/__init__.py +26 -0
  618. maxframe/tensor/ufunc/ufunc.py +200 -0
  619. maxframe/tensor/utils.py +718 -0
  620. maxframe/tests/__init__.py +13 -0
  621. maxframe/tests/test_codegen.py +69 -0
  622. maxframe/tests/test_protocol.py +144 -0
  623. maxframe/tests/test_utils.py +376 -0
  624. maxframe/tests/utils.py +164 -0
  625. maxframe/typing_.py +37 -0
  626. maxframe/udf.py +134 -0
  627. maxframe/utils.py +1114 -0
  628. maxframe-0.1.0b5.dist-info/METADATA +104 -0
  629. maxframe-0.1.0b5.dist-info/RECORD +647 -0
  630. maxframe-0.1.0b5.dist-info/WHEEL +5 -0
  631. maxframe-0.1.0b5.dist-info/top_level.txt +3 -0
  632. maxframe_client/__init__.py +17 -0
  633. maxframe_client/clients/__init__.py +13 -0
  634. maxframe_client/clients/framedriver.py +118 -0
  635. maxframe_client/clients/spe.py +104 -0
  636. maxframe_client/conftest.py +15 -0
  637. maxframe_client/fetcher.py +264 -0
  638. maxframe_client/session/__init__.py +22 -0
  639. maxframe_client/session/consts.py +36 -0
  640. maxframe_client/session/graph.py +119 -0
  641. maxframe_client/session/odps.py +482 -0
  642. maxframe_client/session/task.py +280 -0
  643. maxframe_client/session/tests/__init__.py +13 -0
  644. maxframe_client/session/tests/test_task.py +85 -0
  645. maxframe_client/tests/__init__.py +13 -0
  646. maxframe_client/tests/test_fetcher.py +89 -0
  647. maxframe_client/tests/test_session.py +255 -0
@@ -0,0 +1,186 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ # Copyright 1999-2024 Alibaba Group Holding Ltd.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ from numbers import Integral
18
+
19
+ import numpy as np
20
+
21
+ from ... import opcodes
22
+ from ...serialization.serializables import (
23
+ AnyField,
24
+ BoolField,
25
+ FieldTypes,
26
+ KeyField,
27
+ TupleField,
28
+ )
29
+ from ..core import TENSOR_TYPE, TensorOrder
30
+ from ..datasource import array
31
+ from ..operators import TensorOperatorMixin
32
+ from ..utils import gen_random_seeds
33
+ from .core import TensorRandomOperator
34
+
35
+
36
+ class TensorChoice(TensorRandomOperator, TensorOperatorMixin):
37
+ _op_type_ = opcodes.RAND_CHOICE
38
+
39
+ a = AnyField("a")
40
+ size = TupleField("size", FieldTypes.int64)
41
+ replace = BoolField("replace")
42
+ p = KeyField("p")
43
+
44
+ def _set_inputs(self, inputs):
45
+ super()._set_inputs(inputs)
46
+ if isinstance(self.a, TENSOR_TYPE):
47
+ self.a = self._inputs[0]
48
+ if isinstance(self.p, TENSOR_TYPE):
49
+ self.p = self._inputs[-1]
50
+
51
+ def __call__(self, a, p, chunk_size=None):
52
+ inputs = []
53
+ if isinstance(a, TENSOR_TYPE):
54
+ inputs.append(a)
55
+ if isinstance(p, TENSOR_TYPE):
56
+ inputs.append(p)
57
+ return self.new_tensor(
58
+ inputs,
59
+ shape=self.size,
60
+ raw_chunk_size=chunk_size,
61
+ order=TensorOrder.C_ORDER,
62
+ )
63
+
64
+
65
+ def choice(random_state, a, size=None, replace=True, p=None, chunk_size=None, gpu=None):
66
+ """
67
+ Generates a random sample from a given 1-D array
68
+
69
+ Parameters
70
+ -----------
71
+ a : 1-D array-like or int
72
+ If a tensor, a random sample is generated from its elements.
73
+ If an int, the random sample is generated as if a were mt.arange(a)
74
+ size : int or tuple of ints, optional
75
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
76
+ ``m * n * k`` samples are drawn. Default is None, in which case a
77
+ single value is returned.
78
+ replace : boolean, optional
79
+ Whether the sample is with or without replacement
80
+ p : 1-D array-like, optional
81
+ The probabilities associated with each entry in a.
82
+ If not given the sample assumes a uniform distribution over all
83
+ entries in a.
84
+ chunk_size : int or tuple of int or tuple of ints, optional
85
+ Desired chunk size on each dimension
86
+ gpu : bool, optional
87
+ Allocate the tensor on GPU if True, False as default
88
+
89
+ Returns
90
+ --------
91
+ samples : single item or tensor
92
+ The generated random samples
93
+
94
+ Raises
95
+ -------
96
+ ValueError
97
+ If a is an int and less than zero, if a or p are not 1-dimensional,
98
+ if a is an array-like of size 0, if p is not a vector of
99
+ probabilities, if a and p have different lengths, or if
100
+ replace=False and the sample size is greater than the population
101
+ size
102
+
103
+ See Also
104
+ ---------
105
+ randint, shuffle, permutation
106
+
107
+ Examples
108
+ ---------
109
+ Generate a uniform random sample from mt.arange(5) of size 3:
110
+
111
+ >>> import maxframe.tensor as mt
112
+
113
+ >>> mt.random.choice(5, 3).execute()
114
+ array([0, 3, 4])
115
+ >>> #This is equivalent to mt.random.randint(0,5,3)
116
+
117
+ Generate a non-uniform random sample from np.arange(5) of size 3:
118
+
119
+ >>> mt.random.choice(5, 3, p=[0.1, 0, 0.3, 0.6, 0]).execute()
120
+ array([3, 3, 0])
121
+
122
+ Generate a uniform random sample from mt.arange(5) of size 3 without
123
+ replacement:
124
+
125
+ >>> mt.random.choice(5, 3, replace=False).execute()
126
+ array([3,1,0])
127
+ >>> #This is equivalent to np.random.permutation(np.arange(5))[:3]
128
+
129
+ Generate a non-uniform random sample from mt.arange(5) of size
130
+ 3 without replacement:
131
+
132
+ >>> mt.random.choice(5, 3, replace=False, p=[0.1, 0, 0.3, 0.6, 0]).execute()
133
+ array([2, 3, 0])
134
+
135
+ Any of the above can be repeated with an arbitrary array-like
136
+ instead of just integers. For instance:
137
+
138
+ >>> aa_milne_arr = ['pooh', 'rabbit', 'piglet', 'Christopher']
139
+ >>> np.random.choice(aa_milne_arr, 5, p=[0.5, 0.1, 0.1, 0.3])
140
+ array(['pooh', 'pooh', 'pooh', 'Christopher', 'piglet'],
141
+ dtype='|S11')
142
+ """
143
+
144
+ if isinstance(a, Integral):
145
+ if a <= 0:
146
+ raise ValueError("a must be greater than 0")
147
+ a_size = a
148
+ dtype = np.random.choice(
149
+ 1, size=(), p=np.array([1]) if p is not None else p
150
+ ).dtype
151
+ else:
152
+ a = array(a)
153
+ if a.ndim != 1:
154
+ raise ValueError("a must be one dimensional")
155
+ a_size = a.size
156
+ dtype = a.dtype
157
+
158
+ if p is not None:
159
+ if not isinstance(p, TENSOR_TYPE):
160
+ p = np.asarray(p)
161
+ if not np.isclose(p.sum(), 1, rtol=1e-7, atol=0):
162
+ raise ValueError("probabilities do not sum to 1")
163
+ p = array(p, chunk_size=p.size)
164
+ if p.ndim != 1:
165
+ raise ValueError("p must be one dimensional")
166
+
167
+ if size is None:
168
+ size = ()
169
+ length = 1
170
+ else:
171
+ try:
172
+ tuple(size)
173
+ length = np.prod(size)
174
+ except TypeError:
175
+ length = size
176
+ if replace is False and length > a_size:
177
+ raise ValueError(
178
+ "Cannot take a larger sample than population when 'replace=False'"
179
+ )
180
+
181
+ size = random_state._handle_size(size)
182
+ seed = gen_random_seeds(1, random_state.to_numpy())[0]
183
+ op = TensorChoice(
184
+ a=a, p=p, seed=seed, replace=replace, size=size, dtype=dtype, gpu=gpu
185
+ )
186
+ return op(a, p, chunk_size=chunk_size)
@@ -0,0 +1,234 @@
1
+ # Copyright 1999-2024 Alibaba Group Holding Ltd.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+
16
+ from collections.abc import Iterable
17
+ from contextlib import contextmanager
18
+
19
+ import numpy as np
20
+
21
+ from ...serialization.serializables import FieldTypes, Int32Field, TupleField
22
+ from ..base import broadcast_to
23
+ from ..core import TENSOR_TYPE
24
+ from ..datasource import tensor as astensor
25
+ from ..operators import TensorMapReduceOperator, TensorOperator, TensorOperatorMixin
26
+ from ..utils import broadcast_shape
27
+
28
+
29
+ class RandomState:
30
+ def __init__(self, seed=None):
31
+ self._random_state = np.random.RandomState(seed=seed)
32
+
33
+ def seed(self, seed=None):
34
+ """
35
+ Seed the generator.
36
+
37
+ This method is called when `RandomState` is initialized. It can be
38
+ called again to re-seed the generator. For details, see `RandomState`.
39
+
40
+ Parameters
41
+ ----------
42
+ seed : int or 1-d array_like, optional
43
+ Seed for `RandomState`.
44
+ Must be convertible to 32 bit unsigned integers.
45
+
46
+ See Also
47
+ --------
48
+ RandomState
49
+ """
50
+ self._random_state.seed(seed=seed)
51
+
52
+ def to_numpy(self):
53
+ return self._random_state
54
+
55
+ @classmethod
56
+ def from_numpy(cls, np_random_state):
57
+ state = RandomState()
58
+ state._random_state = np_random_state
59
+ return state
60
+
61
+ @classmethod
62
+ def _handle_size(cls, size):
63
+ if size is None:
64
+ return size
65
+ try:
66
+ return tuple(int(s) for s in size)
67
+ except TypeError:
68
+ return (size,)
69
+
70
+
71
+ _random_state = RandomState()
72
+
73
+
74
+ def handle_array(arg):
75
+ if not isinstance(arg, TENSOR_TYPE):
76
+ if not isinstance(arg, Iterable):
77
+ return arg
78
+
79
+ arg = np.asarray(arg)
80
+ return arg[(0,) * max(1, arg.ndim)]
81
+ elif hasattr(arg, "op") and hasattr(arg.op, "data"):
82
+ return arg.op.data[(0,) * max(1, arg.ndim)]
83
+
84
+ return np.empty((0,), dtype=arg.dtype)
85
+
86
+
87
+ class TensorRandomOperatorMixin(TensorOperatorMixin):
88
+ __slots__ = ()
89
+
90
+ def _calc_shape(self, shapes):
91
+ shapes = list(shapes)
92
+ if getattr(self, "size", None) is not None:
93
+ shapes.append(getattr(self, "size"))
94
+ return broadcast_shape(*shapes)
95
+
96
+ @classmethod
97
+ def _handle_arg(cls, arg, chunk_size):
98
+ if isinstance(arg, (list, np.ndarray)):
99
+ arg = astensor(arg, chunk_size=chunk_size)
100
+
101
+ return arg
102
+
103
+ @contextmanager
104
+ def _get_inputs_shape_by_given_fields(
105
+ self, inputs, shape, raw_chunk_size=None, tensor=True
106
+ ):
107
+ fields = getattr(self, "_input_fields_", [])
108
+ to_one_chunk_fields = set(getattr(self, "_into_one_chunk_fields_", list()))
109
+
110
+ field_to_obj = dict()
111
+ to_broadcast_shapes = []
112
+ if fields:
113
+ if getattr(self, fields[0], None) is None:
114
+ # create from beginning
115
+ for field, val in zip(fields, inputs):
116
+ if field not in to_one_chunk_fields:
117
+ if isinstance(val, list):
118
+ val = np.asarray(val)
119
+ if tensor:
120
+ val = self._handle_arg(val, raw_chunk_size)
121
+ if isinstance(val, TENSOR_TYPE):
122
+ field_to_obj[field] = val
123
+ if field not in to_one_chunk_fields:
124
+ to_broadcast_shapes.append(val.shape)
125
+ setattr(self, field, val)
126
+ else:
127
+ inputs_iter = iter(inputs)
128
+ for field in fields:
129
+ if isinstance(getattr(self, field), TENSOR_TYPE):
130
+ field_to_obj[field] = next(inputs_iter)
131
+
132
+ if tensor:
133
+ if shape is None:
134
+ shape = self._calc_shape(to_broadcast_shapes)
135
+
136
+ for field, inp in field_to_obj.items():
137
+ if field not in to_one_chunk_fields:
138
+ field_to_obj[field] = broadcast_to(inp, shape)
139
+
140
+ yield [field_to_obj[f] for f in fields if f in field_to_obj], shape
141
+
142
+ inputs_iter = iter(getattr(self, "_inputs"))
143
+ for field in fields:
144
+ if field in field_to_obj:
145
+ setattr(self, field, next(inputs_iter))
146
+
147
+ @classmethod
148
+ def _get_shape(cls, kws, kw):
149
+ if kw.get("shape") is not None:
150
+ return kw.get("shape")
151
+ elif kws is not None and len(kws) > 0:
152
+ return kws[0].get("shape")
153
+
154
+ def _new_tileables(self, inputs, kws=None, **kw):
155
+ raw_chunk_size = kw.get("chunk_size", None)
156
+ shape = self._get_shape(kws, kw)
157
+ with self._get_inputs_shape_by_given_fields(
158
+ inputs, shape, raw_chunk_size, True
159
+ ) as (inputs, shape):
160
+ kw["shape"] = shape
161
+ return super()._new_tileables(inputs, kws=kws, **kw)
162
+
163
+
164
+ def _on_serialize_random_state(rs):
165
+ return rs.get_state() if rs is not None else None
166
+
167
+
168
+ def _on_deserialize_random_state(tup):
169
+ if tup is None:
170
+ return None
171
+
172
+ rs = np.random.RandomState()
173
+ rs.set_state(tup)
174
+ return rs
175
+
176
+
177
+ def RandomStateField(name, **kwargs):
178
+ kwargs.update(
179
+ dict(
180
+ on_serialize=_on_serialize_random_state,
181
+ on_deserialize=_on_deserialize_random_state,
182
+ )
183
+ )
184
+ return TupleField(name, **kwargs)
185
+
186
+
187
+ class TensorSeedOperatorMixin(object):
188
+ @property
189
+ def seed(self):
190
+ return getattr(self, "seed", None)
191
+
192
+ @property
193
+ def args(self):
194
+ if hasattr(self, "_fields_"):
195
+ return self._fields_
196
+ else:
197
+ return [
198
+ field
199
+ for field in self._FIELDS
200
+ if field not in TensorRandomOperator._FIELDS
201
+ ]
202
+
203
+
204
+ class TensorRandomOperator(TensorSeedOperatorMixin, TensorOperator):
205
+ seed = Int32Field("seed")
206
+
207
+ def __init__(self, dtype=None, **kw):
208
+ dtype = np.dtype(dtype) if dtype is not None else dtype
209
+ if "state" in kw:
210
+ kw["_state"] = kw.pop("state")
211
+ super().__init__(dtype=dtype, **kw)
212
+
213
+
214
+ class TensorRandomMapReduceOperator(TensorSeedOperatorMixin, TensorMapReduceOperator):
215
+ seed = Int32Field("seed")
216
+
217
+ def __init__(self, dtype=None, **kw):
218
+ dtype = np.dtype(dtype) if dtype is not None else dtype
219
+ if "state" in kw:
220
+ kw["_state"] = kw.pop("state")
221
+ super().__init__(dtype=dtype, **kw)
222
+
223
+
224
+ class TensorDistribution(TensorRandomOperator):
225
+ size = TupleField("size", FieldTypes.int64)
226
+
227
+
228
+ class TensorSimpleRandomData(TensorRandomOperator):
229
+ size = TupleField("size", FieldTypes.int64)
230
+
231
+ def __init__(self, size=None, **kw):
232
+ if type(size) is int:
233
+ size = (size,)
234
+ super().__init__(size=size, **kw)
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ # Copyright 1999-2024 Alibaba Group Holding Ltd.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ from collections.abc import Iterable
18
+
19
+ import numpy as np
20
+
21
+ from ... import opcodes
22
+ from ...serialization.serializables import TupleField
23
+ from ..utils import gen_random_seeds
24
+ from .core import TensorDistribution, TensorRandomOperatorMixin
25
+
26
+
27
+ class TensorDirichlet(TensorDistribution, TensorRandomOperatorMixin):
28
+ _op_type_ = opcodes.RAND_DIRICHLET
29
+
30
+ _fields_ = "alpha", "size"
31
+ alpha = TupleField("alpha", default=None)
32
+ _func_name = "dirichlet"
33
+
34
+ def _calc_shape(self, shapes):
35
+ shape = super()._calc_shape(shapes)
36
+ return shape + (len(self.alpha),)
37
+
38
+ def __call__(self, chunk_size=None):
39
+ return self.new_tensor(None, None, raw_chunk_size=chunk_size)
40
+
41
+
42
+ def dirichlet(random_state, alpha, size=None, chunk_size=None, gpu=None, dtype=None):
43
+ r"""
44
+ Draw samples from the Dirichlet distribution.
45
+
46
+ Draw `size` samples of dimension k from a Dirichlet distribution. A
47
+ Dirichlet-distributed random variable can be seen as a multivariate
48
+ generalization of a Beta distribution. Dirichlet pdf is the conjugate
49
+ prior of a multinomial in Bayesian inference.
50
+
51
+ Parameters
52
+ ----------
53
+ alpha : array
54
+ Parameter of the distribution (k dimension for sample of
55
+ dimension k).
56
+ size : int or tuple of ints, optional
57
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
58
+ ``m * n * k`` samples are drawn. Default is None, in which case a
59
+ single value is returned.
60
+ chunk_size : int or tuple of int or tuple of ints, optional
61
+ Desired chunk size on each dimension
62
+ gpu : bool, optional
63
+ Allocate the tensor on GPU if True, False as default
64
+ dtype : data-type, optional
65
+ Data-type of the returned tensor.
66
+
67
+ Returns
68
+ -------
69
+ samples : Tensor
70
+ The drawn samples, of shape (size, alpha.ndim).
71
+
72
+ Raises
73
+ -------
74
+ ValueError
75
+ If any value in alpha is less than or equal to zero
76
+
77
+ Notes
78
+ -----
79
+ .. math:: X \approx \prod_{i=1}^{k}{x^{\alpha_i-1}_i}
80
+
81
+ Uses the following property for computation: for each dimension,
82
+ draw a random sample y_i from a standard gamma generator of shape
83
+ `alpha_i`, then
84
+ :math:`X = \frac{1}{\sum_{i=1}^k{y_i}} (y_1, \ldots, y_n)` is
85
+ Dirichlet distributed.
86
+
87
+ References
88
+ ----------
89
+ .. [1] David McKay, "Information Theory, Inference and Learning
90
+ Algorithms," chapter 23,
91
+ http://www.inference.phy.cam.ac.uk/mackay/
92
+ .. [2] Wikipedia, "Dirichlet distribution",
93
+ http://en.wikipedia.org/wiki/Dirichlet_distribution
94
+
95
+ Examples
96
+ --------
97
+ Taking an example cited in Wikipedia, this distribution can be used if
98
+ one wanted to cut strings (each of initial length 1.0) into K pieces
99
+ with different lengths, where each piece had, on average, a designated
100
+ average length, but allowing some variation in the relative sizes of
101
+ the pieces.
102
+
103
+ >>> import maxframe.tensor as mt
104
+
105
+ >>> s = mt.random.dirichlet((10, 5, 3), 20).transpose()
106
+
107
+ >>> import matplotlib.pyplot as plt
108
+
109
+ >>> plt.barh(range(20), s[0].execute())
110
+ >>> plt.barh(range(20), s[1].execute(), left=s[0].execute(), color='g')
111
+ >>> plt.barh(range(20), s[2].execute(), left=(s[0]+s[1]).execute(), color='r')
112
+ >>> plt.title("Lengths of Strings")
113
+ """
114
+ if isinstance(alpha, Iterable):
115
+ alpha = tuple(alpha)
116
+ else:
117
+ raise TypeError("`alpha` should be an array")
118
+ if dtype is None:
119
+ dtype = np.random.RandomState().dirichlet(alpha, size=(0,)).dtype
120
+ size = random_state._handle_size(size)
121
+ seed = gen_random_seeds(1, random_state.to_numpy())[0]
122
+ op = TensorDirichlet(seed=seed, alpha=alpha, size=size, gpu=gpu, dtype=dtype)
123
+ return op(chunk_size=chunk_size)
@@ -0,0 +1,94 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+ # Copyright 1999-2024 Alibaba Group Holding Ltd.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ import numpy as np
18
+
19
+ from ... import opcodes
20
+ from ...serialization.serializables import AnyField
21
+ from ..utils import gen_random_seeds
22
+ from .core import TensorDistribution, TensorRandomOperatorMixin, handle_array
23
+
24
+
25
+ class TensorExponential(TensorDistribution, TensorRandomOperatorMixin):
26
+ _input_fields_ = ["scale"]
27
+ _op_type_ = opcodes.RAND_EXPONENTIAL
28
+
29
+ _fields_ = "scale", "size"
30
+ scale = AnyField("scale")
31
+ _func_name = "exponential"
32
+
33
+ def __call__(self, scale, chunk_size=None):
34
+ return self.new_tensor([scale], self.size, raw_chunk_size=chunk_size)
35
+
36
+
37
+ def exponential(
38
+ random_state, scale=1.0, size=None, chunk_size=None, gpu=None, dtype=None
39
+ ):
40
+ r"""
41
+ Draw samples from an exponential distribution.
42
+
43
+ Its probability density function is
44
+
45
+ .. math:: f(x; \frac{1}{\beta}) = \frac{1}{\beta} \exp(-\frac{x}{\beta}),
46
+
47
+ for ``x > 0`` and 0 elsewhere. :math:`\beta` is the scale parameter,
48
+ which is the inverse of the rate parameter :math:`\lambda = 1/\beta`.
49
+ The rate parameter is an alternative, widely used parameterization
50
+ of the exponential distribution [3]_.
51
+
52
+ The exponential distribution is a continuous analogue of the
53
+ geometric distribution. It describes many common situations, such as
54
+ the size of raindrops measured over many rainstorms [1]_, or the time
55
+ between page requests to Wikipedia [2]_.
56
+
57
+ Parameters
58
+ ----------
59
+ scale : float or array_like of floats
60
+ The scale parameter, :math:`\beta = 1/\lambda`.
61
+ size : int or tuple of ints, optional
62
+ Output shape. If the given shape is, e.g., ``(m, n, k)``, then
63
+ ``m * n * k`` samples are drawn. If size is ``None`` (default),
64
+ a single value is returned if ``scale`` is a scalar. Otherwise,
65
+ ``np.array(scale).size`` samples are drawn.
66
+ chunk_size : int or tuple of int or tuple of ints, optional
67
+ Desired chunk size on each dimension
68
+ gpu : bool, optional
69
+ Allocate the tensor on GPU if True, False as default
70
+ dtype : data-type, optional
71
+ Data-type of the returned tensor.
72
+
73
+ Returns
74
+ -------
75
+ out : Tensor or scalar
76
+ Drawn samples from the parameterized exponential distribution.
77
+
78
+ References
79
+ ----------
80
+ .. [1] Peyton Z. Peebles Jr., "Probability, Random Variables and
81
+ Random Signal Principles", 4th ed, 2001, p. 57.
82
+ .. [2] Wikipedia, "Poisson process",
83
+ http://en.wikipedia.org/wiki/Poisson_process
84
+ .. [3] Wikipedia, "Exponential distribution",
85
+ http://en.wikipedia.org/wiki/Exponential_distribution
86
+ """
87
+ if dtype is None:
88
+ dtype = (
89
+ np.random.RandomState().exponential(handle_array(scale), size=(0,)).dtype
90
+ )
91
+ size = random_state._handle_size(size)
92
+ seed = gen_random_seeds(1, random_state.to_numpy())[0]
93
+ op = TensorExponential(seed=seed, size=size, gpu=gpu, dtype=dtype)
94
+ return op(scale, chunk_size=chunk_size)