maxframe 0.1.0b5__cp38-cp38-macosx_11_0_arm64.whl

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

Potentially problematic release.


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

Files changed (647) hide show
  1. maxframe/__init__.py +32 -0
  2. maxframe/_utils.cpython-38-darwin.so +0 -0
  3. maxframe/_utils.pxd +33 -0
  4. maxframe/_utils.pyx +547 -0
  5. maxframe/codegen.py +528 -0
  6. maxframe/config/__init__.py +15 -0
  7. maxframe/config/config.py +443 -0
  8. maxframe/config/tests/__init__.py +13 -0
  9. maxframe/config/tests/test_config.py +103 -0
  10. maxframe/config/tests/test_validators.py +34 -0
  11. maxframe/config/validators.py +57 -0
  12. maxframe/conftest.py +139 -0
  13. maxframe/core/__init__.py +65 -0
  14. maxframe/core/base.py +156 -0
  15. maxframe/core/entity/__init__.py +44 -0
  16. maxframe/core/entity/chunks.py +68 -0
  17. maxframe/core/entity/core.py +152 -0
  18. maxframe/core/entity/executable.py +337 -0
  19. maxframe/core/entity/fuse.py +73 -0
  20. maxframe/core/entity/objects.py +100 -0
  21. maxframe/core/entity/output_types.py +90 -0
  22. maxframe/core/entity/tileables.py +438 -0
  23. maxframe/core/entity/utils.py +24 -0
  24. maxframe/core/graph/__init__.py +17 -0
  25. maxframe/core/graph/builder/__init__.py +16 -0
  26. maxframe/core/graph/builder/base.py +86 -0
  27. maxframe/core/graph/builder/chunk.py +430 -0
  28. maxframe/core/graph/builder/tileable.py +34 -0
  29. maxframe/core/graph/builder/utils.py +41 -0
  30. maxframe/core/graph/core.cpython-38-darwin.so +0 -0
  31. maxframe/core/graph/core.pyx +467 -0
  32. maxframe/core/graph/entity.py +171 -0
  33. maxframe/core/graph/tests/__init__.py +13 -0
  34. maxframe/core/graph/tests/test_graph.py +205 -0
  35. maxframe/core/mode.py +96 -0
  36. maxframe/core/operator/__init__.py +34 -0
  37. maxframe/core/operator/base.py +450 -0
  38. maxframe/core/operator/core.py +276 -0
  39. maxframe/core/operator/fetch.py +53 -0
  40. maxframe/core/operator/fuse.py +29 -0
  41. maxframe/core/operator/objects.py +72 -0
  42. maxframe/core/operator/shuffle.py +111 -0
  43. maxframe/core/operator/tests/__init__.py +13 -0
  44. maxframe/core/operator/tests/test_core.py +64 -0
  45. maxframe/core/tests/__init__.py +13 -0
  46. maxframe/core/tests/test_mode.py +75 -0
  47. maxframe/dataframe/__init__.py +81 -0
  48. maxframe/dataframe/arithmetic/__init__.py +359 -0
  49. maxframe/dataframe/arithmetic/abs.py +33 -0
  50. maxframe/dataframe/arithmetic/add.py +60 -0
  51. maxframe/dataframe/arithmetic/arccos.py +28 -0
  52. maxframe/dataframe/arithmetic/arccosh.py +28 -0
  53. maxframe/dataframe/arithmetic/arcsin.py +28 -0
  54. maxframe/dataframe/arithmetic/arcsinh.py +28 -0
  55. maxframe/dataframe/arithmetic/arctan.py +28 -0
  56. maxframe/dataframe/arithmetic/arctanh.py +28 -0
  57. maxframe/dataframe/arithmetic/around.py +152 -0
  58. maxframe/dataframe/arithmetic/bitwise_and.py +46 -0
  59. maxframe/dataframe/arithmetic/bitwise_or.py +50 -0
  60. maxframe/dataframe/arithmetic/bitwise_xor.py +46 -0
  61. maxframe/dataframe/arithmetic/ceil.py +28 -0
  62. maxframe/dataframe/arithmetic/core.py +342 -0
  63. maxframe/dataframe/arithmetic/cos.py +28 -0
  64. maxframe/dataframe/arithmetic/cosh.py +28 -0
  65. maxframe/dataframe/arithmetic/degrees.py +28 -0
  66. maxframe/dataframe/arithmetic/docstring.py +442 -0
  67. maxframe/dataframe/arithmetic/equal.py +56 -0
  68. maxframe/dataframe/arithmetic/exp.py +28 -0
  69. maxframe/dataframe/arithmetic/exp2.py +28 -0
  70. maxframe/dataframe/arithmetic/expm1.py +28 -0
  71. maxframe/dataframe/arithmetic/floor.py +28 -0
  72. maxframe/dataframe/arithmetic/floordiv.py +64 -0
  73. maxframe/dataframe/arithmetic/greater.py +57 -0
  74. maxframe/dataframe/arithmetic/greater_equal.py +57 -0
  75. maxframe/dataframe/arithmetic/invert.py +33 -0
  76. maxframe/dataframe/arithmetic/is_ufuncs.py +62 -0
  77. maxframe/dataframe/arithmetic/less.py +57 -0
  78. maxframe/dataframe/arithmetic/less_equal.py +57 -0
  79. maxframe/dataframe/arithmetic/log.py +28 -0
  80. maxframe/dataframe/arithmetic/log10.py +28 -0
  81. maxframe/dataframe/arithmetic/log2.py +28 -0
  82. maxframe/dataframe/arithmetic/mod.py +60 -0
  83. maxframe/dataframe/arithmetic/multiply.py +60 -0
  84. maxframe/dataframe/arithmetic/negative.py +33 -0
  85. maxframe/dataframe/arithmetic/not_equal.py +56 -0
  86. maxframe/dataframe/arithmetic/power.py +68 -0
  87. maxframe/dataframe/arithmetic/radians.py +28 -0
  88. maxframe/dataframe/arithmetic/sin.py +28 -0
  89. maxframe/dataframe/arithmetic/sinh.py +28 -0
  90. maxframe/dataframe/arithmetic/sqrt.py +28 -0
  91. maxframe/dataframe/arithmetic/subtract.py +64 -0
  92. maxframe/dataframe/arithmetic/tan.py +28 -0
  93. maxframe/dataframe/arithmetic/tanh.py +28 -0
  94. maxframe/dataframe/arithmetic/tests/__init__.py +13 -0
  95. maxframe/dataframe/arithmetic/tests/test_arithmetic.py +695 -0
  96. maxframe/dataframe/arithmetic/truediv.py +64 -0
  97. maxframe/dataframe/arithmetic/trunc.py +28 -0
  98. maxframe/dataframe/arrays.py +864 -0
  99. maxframe/dataframe/core.py +2417 -0
  100. maxframe/dataframe/datasource/__init__.py +15 -0
  101. maxframe/dataframe/datasource/core.py +81 -0
  102. maxframe/dataframe/datasource/dataframe.py +59 -0
  103. maxframe/dataframe/datasource/date_range.py +504 -0
  104. maxframe/dataframe/datasource/from_index.py +54 -0
  105. maxframe/dataframe/datasource/from_records.py +107 -0
  106. maxframe/dataframe/datasource/from_tensor.py +419 -0
  107. maxframe/dataframe/datasource/index.py +117 -0
  108. maxframe/dataframe/datasource/read_csv.py +528 -0
  109. maxframe/dataframe/datasource/read_odps_query.py +299 -0
  110. maxframe/dataframe/datasource/read_odps_table.py +253 -0
  111. maxframe/dataframe/datasource/read_parquet.py +421 -0
  112. maxframe/dataframe/datasource/series.py +55 -0
  113. maxframe/dataframe/datasource/tests/__init__.py +13 -0
  114. maxframe/dataframe/datasource/tests/test_datasource.py +401 -0
  115. maxframe/dataframe/datastore/__init__.py +26 -0
  116. maxframe/dataframe/datastore/core.py +19 -0
  117. maxframe/dataframe/datastore/to_csv.py +227 -0
  118. maxframe/dataframe/datastore/to_odps.py +162 -0
  119. maxframe/dataframe/extensions/__init__.py +41 -0
  120. maxframe/dataframe/extensions/accessor.py +50 -0
  121. maxframe/dataframe/extensions/reshuffle.py +83 -0
  122. maxframe/dataframe/extensions/tests/__init__.py +13 -0
  123. maxframe/dataframe/extensions/tests/test_extensions.py +38 -0
  124. maxframe/dataframe/fetch/__init__.py +15 -0
  125. maxframe/dataframe/fetch/core.py +86 -0
  126. maxframe/dataframe/groupby/__init__.py +82 -0
  127. maxframe/dataframe/groupby/aggregation.py +350 -0
  128. maxframe/dataframe/groupby/apply.py +251 -0
  129. maxframe/dataframe/groupby/core.py +179 -0
  130. maxframe/dataframe/groupby/cum.py +124 -0
  131. maxframe/dataframe/groupby/fill.py +141 -0
  132. maxframe/dataframe/groupby/getitem.py +92 -0
  133. maxframe/dataframe/groupby/head.py +105 -0
  134. maxframe/dataframe/groupby/sample.py +214 -0
  135. maxframe/dataframe/groupby/tests/__init__.py +13 -0
  136. maxframe/dataframe/groupby/tests/test_groupby.py +374 -0
  137. maxframe/dataframe/groupby/transform.py +255 -0
  138. maxframe/dataframe/indexing/__init__.py +84 -0
  139. maxframe/dataframe/indexing/add_prefix_suffix.py +110 -0
  140. maxframe/dataframe/indexing/align.py +349 -0
  141. maxframe/dataframe/indexing/at.py +83 -0
  142. maxframe/dataframe/indexing/getitem.py +204 -0
  143. maxframe/dataframe/indexing/iat.py +37 -0
  144. maxframe/dataframe/indexing/iloc.py +566 -0
  145. maxframe/dataframe/indexing/insert.py +86 -0
  146. maxframe/dataframe/indexing/loc.py +411 -0
  147. maxframe/dataframe/indexing/reindex.py +526 -0
  148. maxframe/dataframe/indexing/rename.py +462 -0
  149. maxframe/dataframe/indexing/rename_axis.py +209 -0
  150. maxframe/dataframe/indexing/reset_index.py +402 -0
  151. maxframe/dataframe/indexing/sample.py +221 -0
  152. maxframe/dataframe/indexing/set_axis.py +194 -0
  153. maxframe/dataframe/indexing/set_index.py +61 -0
  154. maxframe/dataframe/indexing/setitem.py +130 -0
  155. maxframe/dataframe/indexing/tests/__init__.py +13 -0
  156. maxframe/dataframe/indexing/tests/test_indexing.py +488 -0
  157. maxframe/dataframe/indexing/where.py +308 -0
  158. maxframe/dataframe/initializer.py +288 -0
  159. maxframe/dataframe/merge/__init__.py +32 -0
  160. maxframe/dataframe/merge/append.py +121 -0
  161. maxframe/dataframe/merge/concat.py +325 -0
  162. maxframe/dataframe/merge/merge.py +593 -0
  163. maxframe/dataframe/merge/tests/__init__.py +13 -0
  164. maxframe/dataframe/merge/tests/test_merge.py +215 -0
  165. maxframe/dataframe/misc/__init__.py +134 -0
  166. maxframe/dataframe/misc/_duplicate.py +46 -0
  167. maxframe/dataframe/misc/accessor.py +276 -0
  168. maxframe/dataframe/misc/apply.py +692 -0
  169. maxframe/dataframe/misc/astype.py +236 -0
  170. maxframe/dataframe/misc/case_when.py +141 -0
  171. maxframe/dataframe/misc/check_monotonic.py +84 -0
  172. maxframe/dataframe/misc/cut.py +383 -0
  173. maxframe/dataframe/misc/datetimes.py +79 -0
  174. maxframe/dataframe/misc/describe.py +108 -0
  175. maxframe/dataframe/misc/diff.py +210 -0
  176. maxframe/dataframe/misc/drop.py +440 -0
  177. maxframe/dataframe/misc/drop_duplicates.py +248 -0
  178. maxframe/dataframe/misc/duplicated.py +292 -0
  179. maxframe/dataframe/misc/eval.py +728 -0
  180. maxframe/dataframe/misc/explode.py +171 -0
  181. maxframe/dataframe/misc/get_dummies.py +208 -0
  182. maxframe/dataframe/misc/isin.py +217 -0
  183. maxframe/dataframe/misc/map.py +236 -0
  184. maxframe/dataframe/misc/melt.py +162 -0
  185. maxframe/dataframe/misc/memory_usage.py +248 -0
  186. maxframe/dataframe/misc/pct_change.py +150 -0
  187. maxframe/dataframe/misc/pivot_table.py +262 -0
  188. maxframe/dataframe/misc/qcut.py +104 -0
  189. maxframe/dataframe/misc/select_dtypes.py +104 -0
  190. maxframe/dataframe/misc/shift.py +256 -0
  191. maxframe/dataframe/misc/stack.py +238 -0
  192. maxframe/dataframe/misc/string_.py +221 -0
  193. maxframe/dataframe/misc/tests/__init__.py +13 -0
  194. maxframe/dataframe/misc/tests/test_misc.py +468 -0
  195. maxframe/dataframe/misc/to_numeric.py +178 -0
  196. maxframe/dataframe/misc/transform.py +361 -0
  197. maxframe/dataframe/misc/transpose.py +136 -0
  198. maxframe/dataframe/misc/value_counts.py +182 -0
  199. maxframe/dataframe/missing/__init__.py +53 -0
  200. maxframe/dataframe/missing/checkna.py +223 -0
  201. maxframe/dataframe/missing/dropna.py +280 -0
  202. maxframe/dataframe/missing/fillna.py +275 -0
  203. maxframe/dataframe/missing/replace.py +439 -0
  204. maxframe/dataframe/missing/tests/__init__.py +13 -0
  205. maxframe/dataframe/missing/tests/test_missing.py +89 -0
  206. maxframe/dataframe/operators.py +273 -0
  207. maxframe/dataframe/plotting/__init__.py +40 -0
  208. maxframe/dataframe/plotting/core.py +78 -0
  209. maxframe/dataframe/plotting/tests/__init__.py +13 -0
  210. maxframe/dataframe/plotting/tests/test_plotting.py +136 -0
  211. maxframe/dataframe/reduction/__init__.py +107 -0
  212. maxframe/dataframe/reduction/aggregation.py +344 -0
  213. maxframe/dataframe/reduction/all.py +78 -0
  214. maxframe/dataframe/reduction/any.py +78 -0
  215. maxframe/dataframe/reduction/core.py +837 -0
  216. maxframe/dataframe/reduction/count.py +59 -0
  217. maxframe/dataframe/reduction/cummax.py +30 -0
  218. maxframe/dataframe/reduction/cummin.py +30 -0
  219. maxframe/dataframe/reduction/cumprod.py +30 -0
  220. maxframe/dataframe/reduction/cumsum.py +30 -0
  221. maxframe/dataframe/reduction/custom_reduction.py +42 -0
  222. maxframe/dataframe/reduction/kurtosis.py +104 -0
  223. maxframe/dataframe/reduction/max.py +65 -0
  224. maxframe/dataframe/reduction/mean.py +61 -0
  225. maxframe/dataframe/reduction/min.py +65 -0
  226. maxframe/dataframe/reduction/nunique.py +141 -0
  227. maxframe/dataframe/reduction/prod.py +76 -0
  228. maxframe/dataframe/reduction/reduction_size.py +36 -0
  229. maxframe/dataframe/reduction/sem.py +69 -0
  230. maxframe/dataframe/reduction/skew.py +89 -0
  231. maxframe/dataframe/reduction/std.py +53 -0
  232. maxframe/dataframe/reduction/str_concat.py +48 -0
  233. maxframe/dataframe/reduction/sum.py +77 -0
  234. maxframe/dataframe/reduction/tests/__init__.py +13 -0
  235. maxframe/dataframe/reduction/tests/test_reduction.py +486 -0
  236. maxframe/dataframe/reduction/unique.py +90 -0
  237. maxframe/dataframe/reduction/var.py +72 -0
  238. maxframe/dataframe/sort/__init__.py +34 -0
  239. maxframe/dataframe/sort/core.py +36 -0
  240. maxframe/dataframe/sort/sort_index.py +153 -0
  241. maxframe/dataframe/sort/sort_values.py +311 -0
  242. maxframe/dataframe/sort/tests/__init__.py +13 -0
  243. maxframe/dataframe/sort/tests/test_sort.py +81 -0
  244. maxframe/dataframe/statistics/__init__.py +33 -0
  245. maxframe/dataframe/statistics/corr.py +280 -0
  246. maxframe/dataframe/statistics/quantile.py +341 -0
  247. maxframe/dataframe/statistics/tests/__init__.py +13 -0
  248. maxframe/dataframe/statistics/tests/test_statistics.py +82 -0
  249. maxframe/dataframe/tests/__init__.py +13 -0
  250. maxframe/dataframe/tests/test_initializer.py +29 -0
  251. maxframe/dataframe/tseries/__init__.py +13 -0
  252. maxframe/dataframe/tseries/tests/__init__.py +13 -0
  253. maxframe/dataframe/tseries/tests/test_tseries.py +30 -0
  254. maxframe/dataframe/tseries/to_datetime.py +297 -0
  255. maxframe/dataframe/ufunc/__init__.py +27 -0
  256. maxframe/dataframe/ufunc/tensor.py +54 -0
  257. maxframe/dataframe/ufunc/ufunc.py +52 -0
  258. maxframe/dataframe/utils.py +1267 -0
  259. maxframe/dataframe/window/__init__.py +29 -0
  260. maxframe/dataframe/window/aggregation.py +96 -0
  261. maxframe/dataframe/window/core.py +69 -0
  262. maxframe/dataframe/window/ewm.py +249 -0
  263. maxframe/dataframe/window/expanding.py +147 -0
  264. maxframe/dataframe/window/rolling.py +376 -0
  265. maxframe/dataframe/window/tests/__init__.py +13 -0
  266. maxframe/dataframe/window/tests/test_ewm.py +70 -0
  267. maxframe/dataframe/window/tests/test_expanding.py +66 -0
  268. maxframe/dataframe/window/tests/test_rolling.py +57 -0
  269. maxframe/env.py +33 -0
  270. maxframe/errors.py +21 -0
  271. maxframe/extension.py +81 -0
  272. maxframe/learn/__init__.py +17 -0
  273. maxframe/learn/contrib/__init__.py +17 -0
  274. maxframe/learn/contrib/pytorch/__init__.py +16 -0
  275. maxframe/learn/contrib/pytorch/run_function.py +110 -0
  276. maxframe/learn/contrib/pytorch/run_script.py +102 -0
  277. maxframe/learn/contrib/pytorch/tests/__init__.py +13 -0
  278. maxframe/learn/contrib/pytorch/tests/test_pytorch.py +42 -0
  279. maxframe/learn/contrib/utils.py +52 -0
  280. maxframe/learn/contrib/xgboost/__init__.py +26 -0
  281. maxframe/learn/contrib/xgboost/classifier.py +86 -0
  282. maxframe/learn/contrib/xgboost/core.py +156 -0
  283. maxframe/learn/contrib/xgboost/dmatrix.py +150 -0
  284. maxframe/learn/contrib/xgboost/predict.py +138 -0
  285. maxframe/learn/contrib/xgboost/regressor.py +78 -0
  286. maxframe/learn/contrib/xgboost/tests/__init__.py +13 -0
  287. maxframe/learn/contrib/xgboost/tests/test_core.py +43 -0
  288. maxframe/learn/contrib/xgboost/train.py +121 -0
  289. maxframe/learn/utils/__init__.py +15 -0
  290. maxframe/learn/utils/core.py +29 -0
  291. maxframe/lib/__init__.py +15 -0
  292. maxframe/lib/aio/__init__.py +27 -0
  293. maxframe/lib/aio/_runners.py +162 -0
  294. maxframe/lib/aio/_threads.py +35 -0
  295. maxframe/lib/aio/base.py +82 -0
  296. maxframe/lib/aio/file.py +85 -0
  297. maxframe/lib/aio/isolation.py +100 -0
  298. maxframe/lib/aio/lru.py +242 -0
  299. maxframe/lib/aio/parallelism.py +37 -0
  300. maxframe/lib/aio/tests/__init__.py +13 -0
  301. maxframe/lib/aio/tests/test_aio_file.py +55 -0
  302. maxframe/lib/compression.py +55 -0
  303. maxframe/lib/cython/__init__.py +13 -0
  304. maxframe/lib/cython/libcpp.pxd +30 -0
  305. maxframe/lib/filesystem/__init__.py +21 -0
  306. maxframe/lib/filesystem/_glob.py +173 -0
  307. maxframe/lib/filesystem/_oss_lib/__init__.py +13 -0
  308. maxframe/lib/filesystem/_oss_lib/common.py +198 -0
  309. maxframe/lib/filesystem/_oss_lib/glob.py +147 -0
  310. maxframe/lib/filesystem/_oss_lib/handle.py +156 -0
  311. maxframe/lib/filesystem/arrow.py +236 -0
  312. maxframe/lib/filesystem/base.py +263 -0
  313. maxframe/lib/filesystem/core.py +95 -0
  314. maxframe/lib/filesystem/fsmap.py +164 -0
  315. maxframe/lib/filesystem/hdfs.py +31 -0
  316. maxframe/lib/filesystem/local.py +112 -0
  317. maxframe/lib/filesystem/oss.py +157 -0
  318. maxframe/lib/filesystem/tests/__init__.py +13 -0
  319. maxframe/lib/filesystem/tests/test_filesystem.py +223 -0
  320. maxframe/lib/filesystem/tests/test_oss.py +182 -0
  321. maxframe/lib/functools_compat.py +81 -0
  322. maxframe/lib/mmh3.cpython-38-darwin.so +0 -0
  323. maxframe/lib/mmh3_src/MurmurHash3.cpp +339 -0
  324. maxframe/lib/mmh3_src/MurmurHash3.h +43 -0
  325. maxframe/lib/mmh3_src/mmh3module.cpp +387 -0
  326. maxframe/lib/sparse/__init__.py +861 -0
  327. maxframe/lib/sparse/array.py +1604 -0
  328. maxframe/lib/sparse/core.py +92 -0
  329. maxframe/lib/sparse/matrix.py +241 -0
  330. maxframe/lib/sparse/tests/__init__.py +15 -0
  331. maxframe/lib/sparse/tests/test_sparse.py +476 -0
  332. maxframe/lib/sparse/vector.py +150 -0
  333. maxframe/lib/tblib/LICENSE +20 -0
  334. maxframe/lib/tblib/__init__.py +327 -0
  335. maxframe/lib/tblib/cpython.py +83 -0
  336. maxframe/lib/tblib/decorators.py +44 -0
  337. maxframe/lib/tblib/pickling_support.py +90 -0
  338. maxframe/lib/tests/__init__.py +13 -0
  339. maxframe/lib/tests/test_wrapped_pickle.py +51 -0
  340. maxframe/lib/version.py +620 -0
  341. maxframe/lib/wrapped_pickle.py +139 -0
  342. maxframe/mixin.py +100 -0
  343. maxframe/odpsio/__init__.py +21 -0
  344. maxframe/odpsio/arrow.py +91 -0
  345. maxframe/odpsio/schema.py +364 -0
  346. maxframe/odpsio/tableio.py +322 -0
  347. maxframe/odpsio/tests/__init__.py +13 -0
  348. maxframe/odpsio/tests/test_arrow.py +88 -0
  349. maxframe/odpsio/tests/test_schema.py +297 -0
  350. maxframe/odpsio/tests/test_tableio.py +136 -0
  351. maxframe/odpsio/tests/test_volumeio.py +90 -0
  352. maxframe/odpsio/volumeio.py +95 -0
  353. maxframe/opcodes.py +590 -0
  354. maxframe/protocol.py +415 -0
  355. maxframe/remote/__init__.py +18 -0
  356. maxframe/remote/core.py +210 -0
  357. maxframe/remote/run_script.py +121 -0
  358. maxframe/serialization/__init__.py +26 -0
  359. maxframe/serialization/arrow.py +95 -0
  360. maxframe/serialization/core.cpython-38-darwin.so +0 -0
  361. maxframe/serialization/core.pxd +44 -0
  362. maxframe/serialization/core.pyi +61 -0
  363. maxframe/serialization/core.pyx +1094 -0
  364. maxframe/serialization/exception.py +86 -0
  365. maxframe/serialization/maxframe_objects.py +39 -0
  366. maxframe/serialization/numpy.py +91 -0
  367. maxframe/serialization/pandas.py +202 -0
  368. maxframe/serialization/scipy.py +71 -0
  369. maxframe/serialization/serializables/__init__.py +55 -0
  370. maxframe/serialization/serializables/core.py +262 -0
  371. maxframe/serialization/serializables/field.py +624 -0
  372. maxframe/serialization/serializables/field_type.py +589 -0
  373. maxframe/serialization/serializables/tests/__init__.py +13 -0
  374. maxframe/serialization/serializables/tests/test_field_type.py +121 -0
  375. maxframe/serialization/serializables/tests/test_serializable.py +250 -0
  376. maxframe/serialization/tests/__init__.py +13 -0
  377. maxframe/serialization/tests/test_serial.py +412 -0
  378. maxframe/session.py +1310 -0
  379. maxframe/tensor/__init__.py +183 -0
  380. maxframe/tensor/arithmetic/__init__.py +315 -0
  381. maxframe/tensor/arithmetic/abs.py +68 -0
  382. maxframe/tensor/arithmetic/absolute.py +68 -0
  383. maxframe/tensor/arithmetic/add.py +82 -0
  384. maxframe/tensor/arithmetic/angle.py +72 -0
  385. maxframe/tensor/arithmetic/arccos.py +104 -0
  386. maxframe/tensor/arithmetic/arccosh.py +91 -0
  387. maxframe/tensor/arithmetic/arcsin.py +94 -0
  388. maxframe/tensor/arithmetic/arcsinh.py +86 -0
  389. maxframe/tensor/arithmetic/arctan.py +106 -0
  390. maxframe/tensor/arithmetic/arctan2.py +128 -0
  391. maxframe/tensor/arithmetic/arctanh.py +86 -0
  392. maxframe/tensor/arithmetic/around.py +114 -0
  393. maxframe/tensor/arithmetic/bitand.py +95 -0
  394. maxframe/tensor/arithmetic/bitor.py +102 -0
  395. maxframe/tensor/arithmetic/bitxor.py +95 -0
  396. maxframe/tensor/arithmetic/cbrt.py +66 -0
  397. maxframe/tensor/arithmetic/ceil.py +71 -0
  398. maxframe/tensor/arithmetic/clip.py +165 -0
  399. maxframe/tensor/arithmetic/conj.py +74 -0
  400. maxframe/tensor/arithmetic/copysign.py +78 -0
  401. maxframe/tensor/arithmetic/core.py +544 -0
  402. maxframe/tensor/arithmetic/cos.py +85 -0
  403. maxframe/tensor/arithmetic/cosh.py +72 -0
  404. maxframe/tensor/arithmetic/deg2rad.py +72 -0
  405. maxframe/tensor/arithmetic/degrees.py +77 -0
  406. maxframe/tensor/arithmetic/divide.py +114 -0
  407. maxframe/tensor/arithmetic/equal.py +76 -0
  408. maxframe/tensor/arithmetic/exp.py +106 -0
  409. maxframe/tensor/arithmetic/exp2.py +67 -0
  410. maxframe/tensor/arithmetic/expm1.py +79 -0
  411. maxframe/tensor/arithmetic/fabs.py +74 -0
  412. maxframe/tensor/arithmetic/fix.py +69 -0
  413. maxframe/tensor/arithmetic/float_power.py +103 -0
  414. maxframe/tensor/arithmetic/floor.py +77 -0
  415. maxframe/tensor/arithmetic/floordiv.py +94 -0
  416. maxframe/tensor/arithmetic/fmax.py +105 -0
  417. maxframe/tensor/arithmetic/fmin.py +106 -0
  418. maxframe/tensor/arithmetic/fmod.py +99 -0
  419. maxframe/tensor/arithmetic/frexp.py +92 -0
  420. maxframe/tensor/arithmetic/greater.py +77 -0
  421. maxframe/tensor/arithmetic/greater_equal.py +69 -0
  422. maxframe/tensor/arithmetic/hypot.py +77 -0
  423. maxframe/tensor/arithmetic/i0.py +89 -0
  424. maxframe/tensor/arithmetic/imag.py +67 -0
  425. maxframe/tensor/arithmetic/invert.py +110 -0
  426. maxframe/tensor/arithmetic/isclose.py +115 -0
  427. maxframe/tensor/arithmetic/iscomplex.py +64 -0
  428. maxframe/tensor/arithmetic/isfinite.py +106 -0
  429. maxframe/tensor/arithmetic/isinf.py +103 -0
  430. maxframe/tensor/arithmetic/isnan.py +82 -0
  431. maxframe/tensor/arithmetic/isreal.py +63 -0
  432. maxframe/tensor/arithmetic/ldexp.py +99 -0
  433. maxframe/tensor/arithmetic/less.py +69 -0
  434. maxframe/tensor/arithmetic/less_equal.py +69 -0
  435. maxframe/tensor/arithmetic/log.py +92 -0
  436. maxframe/tensor/arithmetic/log10.py +85 -0
  437. maxframe/tensor/arithmetic/log1p.py +95 -0
  438. maxframe/tensor/arithmetic/log2.py +85 -0
  439. maxframe/tensor/arithmetic/logaddexp.py +80 -0
  440. maxframe/tensor/arithmetic/logaddexp2.py +78 -0
  441. maxframe/tensor/arithmetic/logical_and.py +81 -0
  442. maxframe/tensor/arithmetic/logical_not.py +74 -0
  443. maxframe/tensor/arithmetic/logical_or.py +82 -0
  444. maxframe/tensor/arithmetic/logical_xor.py +88 -0
  445. maxframe/tensor/arithmetic/lshift.py +82 -0
  446. maxframe/tensor/arithmetic/maximum.py +108 -0
  447. maxframe/tensor/arithmetic/minimum.py +108 -0
  448. maxframe/tensor/arithmetic/mod.py +104 -0
  449. maxframe/tensor/arithmetic/modf.py +83 -0
  450. maxframe/tensor/arithmetic/multiply.py +81 -0
  451. maxframe/tensor/arithmetic/nan_to_num.py +99 -0
  452. maxframe/tensor/arithmetic/negative.py +65 -0
  453. maxframe/tensor/arithmetic/nextafter.py +68 -0
  454. maxframe/tensor/arithmetic/not_equal.py +72 -0
  455. maxframe/tensor/arithmetic/positive.py +47 -0
  456. maxframe/tensor/arithmetic/power.py +106 -0
  457. maxframe/tensor/arithmetic/rad2deg.py +71 -0
  458. maxframe/tensor/arithmetic/radians.py +77 -0
  459. maxframe/tensor/arithmetic/real.py +70 -0
  460. maxframe/tensor/arithmetic/reciprocal.py +76 -0
  461. maxframe/tensor/arithmetic/rint.py +68 -0
  462. maxframe/tensor/arithmetic/rshift.py +81 -0
  463. maxframe/tensor/arithmetic/setimag.py +29 -0
  464. maxframe/tensor/arithmetic/setreal.py +29 -0
  465. maxframe/tensor/arithmetic/sign.py +81 -0
  466. maxframe/tensor/arithmetic/signbit.py +65 -0
  467. maxframe/tensor/arithmetic/sin.py +98 -0
  468. maxframe/tensor/arithmetic/sinc.py +102 -0
  469. maxframe/tensor/arithmetic/sinh.py +93 -0
  470. maxframe/tensor/arithmetic/spacing.py +72 -0
  471. maxframe/tensor/arithmetic/sqrt.py +81 -0
  472. maxframe/tensor/arithmetic/square.py +69 -0
  473. maxframe/tensor/arithmetic/subtract.py +81 -0
  474. maxframe/tensor/arithmetic/tan.py +88 -0
  475. maxframe/tensor/arithmetic/tanh.py +92 -0
  476. maxframe/tensor/arithmetic/tests/__init__.py +15 -0
  477. maxframe/tensor/arithmetic/tests/test_arithmetic.py +414 -0
  478. maxframe/tensor/arithmetic/truediv.py +104 -0
  479. maxframe/tensor/arithmetic/trunc.py +72 -0
  480. maxframe/tensor/arithmetic/utils.py +65 -0
  481. maxframe/tensor/array_utils.py +186 -0
  482. maxframe/tensor/base/__init__.py +34 -0
  483. maxframe/tensor/base/astype.py +119 -0
  484. maxframe/tensor/base/atleast_1d.py +74 -0
  485. maxframe/tensor/base/broadcast_to.py +89 -0
  486. maxframe/tensor/base/ravel.py +92 -0
  487. maxframe/tensor/base/tests/__init__.py +13 -0
  488. maxframe/tensor/base/tests/test_base.py +114 -0
  489. maxframe/tensor/base/transpose.py +125 -0
  490. maxframe/tensor/base/unique.py +205 -0
  491. maxframe/tensor/base/where.py +127 -0
  492. maxframe/tensor/core.py +724 -0
  493. maxframe/tensor/datasource/__init__.py +32 -0
  494. maxframe/tensor/datasource/arange.py +156 -0
  495. maxframe/tensor/datasource/array.py +415 -0
  496. maxframe/tensor/datasource/core.py +109 -0
  497. maxframe/tensor/datasource/empty.py +169 -0
  498. maxframe/tensor/datasource/from_dataframe.py +70 -0
  499. maxframe/tensor/datasource/from_dense.py +54 -0
  500. maxframe/tensor/datasource/from_sparse.py +47 -0
  501. maxframe/tensor/datasource/full.py +186 -0
  502. maxframe/tensor/datasource/ones.py +173 -0
  503. maxframe/tensor/datasource/scalar.py +40 -0
  504. maxframe/tensor/datasource/tests/__init__.py +13 -0
  505. maxframe/tensor/datasource/tests/test_datasource.py +278 -0
  506. maxframe/tensor/datasource/zeros.py +188 -0
  507. maxframe/tensor/fetch/__init__.py +15 -0
  508. maxframe/tensor/fetch/core.py +54 -0
  509. maxframe/tensor/indexing/__init__.py +47 -0
  510. maxframe/tensor/indexing/choose.py +196 -0
  511. maxframe/tensor/indexing/compress.py +124 -0
  512. maxframe/tensor/indexing/core.py +190 -0
  513. maxframe/tensor/indexing/extract.py +71 -0
  514. maxframe/tensor/indexing/fill_diagonal.py +183 -0
  515. maxframe/tensor/indexing/flatnonzero.py +60 -0
  516. maxframe/tensor/indexing/getitem.py +175 -0
  517. maxframe/tensor/indexing/nonzero.py +120 -0
  518. maxframe/tensor/indexing/setitem.py +132 -0
  519. maxframe/tensor/indexing/slice.py +29 -0
  520. maxframe/tensor/indexing/take.py +130 -0
  521. maxframe/tensor/indexing/tests/__init__.py +15 -0
  522. maxframe/tensor/indexing/tests/test_indexing.py +234 -0
  523. maxframe/tensor/indexing/unravel_index.py +103 -0
  524. maxframe/tensor/merge/__init__.py +15 -0
  525. maxframe/tensor/merge/stack.py +132 -0
  526. maxframe/tensor/merge/tests/__init__.py +13 -0
  527. maxframe/tensor/merge/tests/test_merge.py +52 -0
  528. maxframe/tensor/operators.py +123 -0
  529. maxframe/tensor/random/__init__.py +168 -0
  530. maxframe/tensor/random/beta.py +87 -0
  531. maxframe/tensor/random/binomial.py +137 -0
  532. maxframe/tensor/random/bytes.py +39 -0
  533. maxframe/tensor/random/chisquare.py +110 -0
  534. maxframe/tensor/random/choice.py +186 -0
  535. maxframe/tensor/random/core.py +234 -0
  536. maxframe/tensor/random/dirichlet.py +123 -0
  537. maxframe/tensor/random/exponential.py +94 -0
  538. maxframe/tensor/random/f.py +135 -0
  539. maxframe/tensor/random/gamma.py +128 -0
  540. maxframe/tensor/random/geometric.py +93 -0
  541. maxframe/tensor/random/gumbel.py +167 -0
  542. maxframe/tensor/random/hypergeometric.py +148 -0
  543. maxframe/tensor/random/laplace.py +133 -0
  544. maxframe/tensor/random/logistic.py +129 -0
  545. maxframe/tensor/random/lognormal.py +159 -0
  546. maxframe/tensor/random/logseries.py +122 -0
  547. maxframe/tensor/random/multinomial.py +133 -0
  548. maxframe/tensor/random/multivariate_normal.py +192 -0
  549. maxframe/tensor/random/negative_binomial.py +125 -0
  550. maxframe/tensor/random/noncentral_chisquare.py +132 -0
  551. maxframe/tensor/random/noncentral_f.py +126 -0
  552. maxframe/tensor/random/normal.py +143 -0
  553. maxframe/tensor/random/pareto.py +140 -0
  554. maxframe/tensor/random/permutation.py +104 -0
  555. maxframe/tensor/random/poisson.py +111 -0
  556. maxframe/tensor/random/power.py +142 -0
  557. maxframe/tensor/random/rand.py +82 -0
  558. maxframe/tensor/random/randint.py +121 -0
  559. maxframe/tensor/random/randn.py +96 -0
  560. maxframe/tensor/random/random_integers.py +123 -0
  561. maxframe/tensor/random/random_sample.py +86 -0
  562. maxframe/tensor/random/rayleigh.py +110 -0
  563. maxframe/tensor/random/shuffle.py +61 -0
  564. maxframe/tensor/random/standard_cauchy.py +105 -0
  565. maxframe/tensor/random/standard_exponential.py +72 -0
  566. maxframe/tensor/random/standard_gamma.py +120 -0
  567. maxframe/tensor/random/standard_normal.py +74 -0
  568. maxframe/tensor/random/standard_t.py +135 -0
  569. maxframe/tensor/random/tests/__init__.py +15 -0
  570. maxframe/tensor/random/tests/test_random.py +167 -0
  571. maxframe/tensor/random/triangular.py +119 -0
  572. maxframe/tensor/random/uniform.py +131 -0
  573. maxframe/tensor/random/vonmises.py +131 -0
  574. maxframe/tensor/random/wald.py +114 -0
  575. maxframe/tensor/random/weibull.py +140 -0
  576. maxframe/tensor/random/zipf.py +122 -0
  577. maxframe/tensor/rechunk/__init__.py +26 -0
  578. maxframe/tensor/rechunk/rechunk.py +43 -0
  579. maxframe/tensor/reduction/__init__.py +66 -0
  580. maxframe/tensor/reduction/all.py +103 -0
  581. maxframe/tensor/reduction/allclose.py +88 -0
  582. maxframe/tensor/reduction/any.py +105 -0
  583. maxframe/tensor/reduction/argmax.py +103 -0
  584. maxframe/tensor/reduction/argmin.py +103 -0
  585. maxframe/tensor/reduction/array_equal.py +64 -0
  586. maxframe/tensor/reduction/core.py +168 -0
  587. maxframe/tensor/reduction/count_nonzero.py +81 -0
  588. maxframe/tensor/reduction/cumprod.py +97 -0
  589. maxframe/tensor/reduction/cumsum.py +101 -0
  590. maxframe/tensor/reduction/max.py +120 -0
  591. maxframe/tensor/reduction/mean.py +123 -0
  592. maxframe/tensor/reduction/min.py +120 -0
  593. maxframe/tensor/reduction/nanargmax.py +82 -0
  594. maxframe/tensor/reduction/nanargmin.py +76 -0
  595. maxframe/tensor/reduction/nancumprod.py +91 -0
  596. maxframe/tensor/reduction/nancumsum.py +94 -0
  597. maxframe/tensor/reduction/nanmax.py +111 -0
  598. maxframe/tensor/reduction/nanmean.py +106 -0
  599. maxframe/tensor/reduction/nanmin.py +111 -0
  600. maxframe/tensor/reduction/nanprod.py +94 -0
  601. maxframe/tensor/reduction/nanstd.py +126 -0
  602. maxframe/tensor/reduction/nansum.py +115 -0
  603. maxframe/tensor/reduction/nanvar.py +149 -0
  604. maxframe/tensor/reduction/prod.py +130 -0
  605. maxframe/tensor/reduction/std.py +134 -0
  606. maxframe/tensor/reduction/sum.py +125 -0
  607. maxframe/tensor/reduction/tests/__init__.py +13 -0
  608. maxframe/tensor/reduction/tests/test_reduction.py +181 -0
  609. maxframe/tensor/reduction/var.py +176 -0
  610. maxframe/tensor/reshape/__init__.py +17 -0
  611. maxframe/tensor/reshape/reshape.py +188 -0
  612. maxframe/tensor/reshape/tests/__init__.py +15 -0
  613. maxframe/tensor/reshape/tests/test_reshape.py +37 -0
  614. maxframe/tensor/statistics/__init__.py +13 -0
  615. maxframe/tensor/statistics/percentile.py +175 -0
  616. maxframe/tensor/statistics/quantile.py +288 -0
  617. maxframe/tensor/ufunc/__init__.py +26 -0
  618. maxframe/tensor/ufunc/ufunc.py +200 -0
  619. maxframe/tensor/utils.py +718 -0
  620. maxframe/tests/__init__.py +13 -0
  621. maxframe/tests/test_codegen.py +69 -0
  622. maxframe/tests/test_protocol.py +144 -0
  623. maxframe/tests/test_utils.py +376 -0
  624. maxframe/tests/utils.py +164 -0
  625. maxframe/typing_.py +37 -0
  626. maxframe/udf.py +134 -0
  627. maxframe/utils.py +1114 -0
  628. maxframe-0.1.0b5.dist-info/METADATA +104 -0
  629. maxframe-0.1.0b5.dist-info/RECORD +647 -0
  630. maxframe-0.1.0b5.dist-info/WHEEL +5 -0
  631. maxframe-0.1.0b5.dist-info/top_level.txt +2 -0
  632. maxframe_client/__init__.py +17 -0
  633. maxframe_client/clients/__init__.py +13 -0
  634. maxframe_client/clients/framedriver.py +118 -0
  635. maxframe_client/clients/spe.py +104 -0
  636. maxframe_client/conftest.py +15 -0
  637. maxframe_client/fetcher.py +264 -0
  638. maxframe_client/session/__init__.py +22 -0
  639. maxframe_client/session/consts.py +36 -0
  640. maxframe_client/session/graph.py +119 -0
  641. maxframe_client/session/odps.py +482 -0
  642. maxframe_client/session/task.py +280 -0
  643. maxframe_client/session/tests/__init__.py +13 -0
  644. maxframe_client/session/tests/test_task.py +85 -0
  645. maxframe_client/tests/__init__.py +13 -0
  646. maxframe_client/tests/test_fetcher.py +89 -0
  647. maxframe_client/tests/test_session.py +255 -0
@@ -0,0 +1,589 @@
1
+ # Copyright 1999-2024 Alibaba Group Holding Ltd.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from abc import ABC, ABCMeta, abstractmethod
16
+ from datetime import datetime, timedelta, tzinfo
17
+ from enum import Enum
18
+ from typing import Tuple, Type
19
+
20
+ import numpy as np
21
+ import pandas as pd
22
+
23
+ from ...utils import lazy_import
24
+ from ..core import PickleContainer
25
+
26
+ cupy = lazy_import("cupy")
27
+ cudf = lazy_import("cudf")
28
+
29
+
30
+ class PrimitiveType(Enum):
31
+ bool = 1
32
+ int8 = 2
33
+ int16 = 3
34
+ int32 = 4
35
+ int64 = 5
36
+ uint8 = 6
37
+ uint16 = 7
38
+ uint32 = 8
39
+ uint64 = 9
40
+ float16 = 10
41
+ float32 = 11
42
+ float64 = 12
43
+ bytes = 13
44
+ string = 14
45
+ complex64 = 24
46
+ complex128 = 25
47
+
48
+
49
+ _primitive_type_to_valid_types = {
50
+ PrimitiveType.bool: (bool, np.bool_),
51
+ PrimitiveType.int8: (int, np.int8),
52
+ PrimitiveType.int16: (int, np.int16),
53
+ PrimitiveType.int32: (int, np.int32),
54
+ PrimitiveType.int64: (int, np.int64),
55
+ PrimitiveType.uint8: (int, np.uint8),
56
+ PrimitiveType.uint16: (int, np.uint16),
57
+ PrimitiveType.uint32: (int, np.uint32),
58
+ PrimitiveType.uint64: (int, np.uint64),
59
+ PrimitiveType.float16: (float, np.float16),
60
+ PrimitiveType.float32: (float, np.float32),
61
+ PrimitiveType.float64: (float, np.float64),
62
+ PrimitiveType.bytes: (bytes, np.bytes_),
63
+ PrimitiveType.string: (str, np.unicode_),
64
+ PrimitiveType.complex64: (complex, np.complex64),
65
+ PrimitiveType.complex128: (complex, np.complex128),
66
+ }
67
+
68
+
69
+ class AbstractFieldType(ABC):
70
+ __slots__ = ()
71
+
72
+ @property
73
+ @abstractmethod
74
+ def type_name(self) -> str:
75
+ """
76
+ Type name.
77
+
78
+ Returns
79
+ -------
80
+ type_name : str
81
+ """
82
+
83
+ @property
84
+ def name(self) -> str:
85
+ """
86
+ Name of field type instance.
87
+
88
+ Returns
89
+ -------
90
+ name : str
91
+ """
92
+ return self.type_name.capitalize()
93
+
94
+ @property
95
+ @abstractmethod
96
+ def valid_types(self) -> Tuple[Type, ...]:
97
+ """
98
+ Valid types.
99
+
100
+ Returns
101
+ -------
102
+ valid_types: tuple
103
+ Valid types.
104
+ """
105
+
106
+ def validate(self, value):
107
+ if value is not None and not isinstance(value, self.valid_types):
108
+ raise TypeError(
109
+ f"value needs to be instance "
110
+ f"of {self.valid_types}, got {type(value)}"
111
+ )
112
+
113
+ def __call__(self, *args, **kwargs):
114
+ return type(self)(*args, **kwargs)
115
+
116
+
117
+ class SingletonFieldType(AbstractFieldType, metaclass=ABCMeta):
118
+ __slots__ = ()
119
+
120
+ _instance = None
121
+
122
+ def __new__(cls, *args, **kw):
123
+ if cls._instance is None:
124
+ inst = super().__new__(cls, *args, **kw)
125
+ cls._instance = inst
126
+ return cls._instance
127
+
128
+
129
+ class PrimitiveFieldType(AbstractFieldType):
130
+ __slots__ = ("type",)
131
+
132
+ _type_to_instances = dict()
133
+
134
+ def __new__(cls, *args, **kwargs):
135
+ primitive_type = args[0]
136
+ try:
137
+ return cls._type_to_instances[primitive_type]
138
+ except KeyError:
139
+ inst = cls._type_to_instances[primitive_type] = super().__new__(cls)
140
+ return inst
141
+
142
+ def __init__(self, primitive_type: PrimitiveType):
143
+ self.type = primitive_type
144
+
145
+ @property
146
+ def type_name(self) -> str:
147
+ return self.type.name
148
+
149
+ @property
150
+ def valid_types(self) -> Tuple[Type, ...]:
151
+ return _primitive_type_to_valid_types[self.type]
152
+
153
+
154
+ class SliceType(SingletonFieldType):
155
+ __slots__ = ()
156
+
157
+ @property
158
+ def type_name(self) -> str:
159
+ return "slice"
160
+
161
+ @property
162
+ def valid_types(self) -> Tuple[Type, ...]:
163
+ return (slice,)
164
+
165
+
166
+ class Complex64Type(SingletonFieldType):
167
+ __slots__ = ()
168
+
169
+ @property
170
+ def type_name(self) -> str:
171
+ return "complex64"
172
+
173
+ @property
174
+ def valid_types(self) -> Tuple[Type, ...]:
175
+ return complex, np.complex64
176
+
177
+
178
+ class Complex128Type(SingletonFieldType):
179
+ __slots__ = ()
180
+
181
+ @property
182
+ def type_name(self) -> str:
183
+ return "complex128"
184
+
185
+ @property
186
+ def valid_types(self) -> Tuple[Type, ...]:
187
+ return complex, np.complex128
188
+
189
+
190
+ class NDArrayType(SingletonFieldType):
191
+ __slots__ = ()
192
+
193
+ @property
194
+ def type_name(self) -> str:
195
+ return "ndarray"
196
+
197
+ @property
198
+ def valid_types(self) -> Tuple[Type, ...]:
199
+ if cupy is None:
200
+ return (np.ndarray,)
201
+ else:
202
+ return np.ndarray, cupy.ndarray
203
+
204
+
205
+ class DtypeType(SingletonFieldType):
206
+ __slots__ = ()
207
+
208
+ @property
209
+ def type_name(self) -> str:
210
+ return "dtype"
211
+
212
+ @property
213
+ def valid_types(self) -> Tuple[Type, ...]:
214
+ return np.dtype, pd.api.extensions.ExtensionDtype
215
+
216
+
217
+ class KeyType(SingletonFieldType):
218
+ __slots__ = ()
219
+
220
+ @property
221
+ def type_name(self) -> str:
222
+ return "dtype"
223
+
224
+ @property
225
+ def valid_types(self) -> Tuple[Type, ...]:
226
+ from ...core.entity import ENTITY_TYPE
227
+
228
+ return ENTITY_TYPE
229
+
230
+
231
+ class DatetimeType(SingletonFieldType):
232
+ __slots__ = ()
233
+
234
+ @property
235
+ def type_name(self) -> str:
236
+ return "datetime"
237
+
238
+ @property
239
+ def valid_types(self) -> Tuple[Type, ...]:
240
+ return datetime, pd.Timestamp
241
+
242
+
243
+ class TimedeltaType(SingletonFieldType):
244
+ __slots__ = ()
245
+
246
+ @property
247
+ def type_name(self) -> str:
248
+ return "timedelta"
249
+
250
+ @property
251
+ def valid_types(self) -> Tuple[Type, ...]:
252
+ return timedelta, pd.Timedelta
253
+
254
+
255
+ class IndexType(SingletonFieldType):
256
+ __slots__ = ()
257
+
258
+ @property
259
+ def type_name(self) -> str:
260
+ return "index"
261
+
262
+ @property
263
+ def valid_types(self) -> Tuple[Type, ...]:
264
+ if cudf is None:
265
+ return (pd.Index,)
266
+ else:
267
+ return pd.Index, cudf.Index
268
+
269
+
270
+ class SeriesType(SingletonFieldType):
271
+ __slots__ = ()
272
+
273
+ @property
274
+ def type_name(self) -> str:
275
+ return "series"
276
+
277
+ @property
278
+ def valid_types(self) -> Tuple[Type, ...]:
279
+ if cudf is None:
280
+ return (pd.Series,)
281
+ else:
282
+ return pd.Series, cudf.Series
283
+
284
+
285
+ class DataFrameType(SingletonFieldType):
286
+ __slots__ = ()
287
+
288
+ @property
289
+ def type_name(self) -> str:
290
+ return "dataframe"
291
+
292
+ @property
293
+ def valid_types(self) -> Tuple[Type, ...]:
294
+ if cudf is None:
295
+ return (pd.DataFrame,)
296
+ else:
297
+ return pd.DataFrame, cudf.DataFrame
298
+
299
+
300
+ class FunctionType(SingletonFieldType):
301
+ __slots__ = ()
302
+
303
+ @property
304
+ def type_name(self) -> str:
305
+ return "function"
306
+
307
+ @property
308
+ def valid_types(self) -> Tuple[Type, ...]: # pragma: no cover
309
+ return ()
310
+
311
+ def validate(self, value):
312
+ if (
313
+ value is not None
314
+ and not callable(value)
315
+ and not isinstance(value, PickleContainer)
316
+ ):
317
+ raise TypeError(f"value should be a function, got {type(value)}")
318
+
319
+
320
+ class NamedtupleType(SingletonFieldType):
321
+ __slots__ = ()
322
+
323
+ @property
324
+ def type_name(self) -> str:
325
+ return "namedtuple"
326
+
327
+ @property
328
+ def valid_types(self) -> Tuple[Type, ...]:
329
+ return (tuple,)
330
+
331
+ def validate(self, value):
332
+ if not (isinstance(value, self.valid_types) and hasattr(value, "_fields")):
333
+ raise TypeError(
334
+ f"value should be instance of namedtuple, got {type(value)}"
335
+ )
336
+
337
+
338
+ class TZInfoType(SingletonFieldType):
339
+ __slots__ = ()
340
+
341
+ @property
342
+ def type_name(self) -> str:
343
+ return "tzinfo"
344
+
345
+ @property
346
+ def valid_types(self) -> Tuple[Type, ...]:
347
+ return (tzinfo,)
348
+
349
+
350
+ class IntervalArrayType(SingletonFieldType):
351
+ __slots__ = ()
352
+
353
+ @property
354
+ def type_name(self) -> str:
355
+ return "interval_array"
356
+
357
+ @property
358
+ def valid_types(self) -> Tuple[Type, ...]:
359
+ return (pd.arrays.IntervalArray,)
360
+
361
+
362
+ class AnyType(SingletonFieldType):
363
+ __slots__ = ()
364
+
365
+ @property
366
+ def type_name(self) -> str:
367
+ return "any"
368
+
369
+ @property
370
+ def valid_types(self) -> Tuple[Type, ...]: # pragma: no cover
371
+ return ()
372
+
373
+ def validate(self, value):
374
+ # any type is valid
375
+ return
376
+
377
+
378
+ class _CollectionType(AbstractFieldType, metaclass=ABCMeta):
379
+ __slots__ = ("_field_types",)
380
+
381
+ def __init__(self, *field_types):
382
+ self._field_types = field_types
383
+ if len(field_types) == 0:
384
+ self._field_types = (AnyType(), Ellipsis)
385
+
386
+ @property
387
+ def name(self) -> str:
388
+ base_name = super().name
389
+ if self.is_homogeneous():
390
+ if isinstance(self._field_types[0], AnyType):
391
+ return base_name
392
+ else:
393
+ return f"{base_name}[{self._field_types[0].name}, ...]"
394
+ else:
395
+ field_type_names = ", ".join([ft.name for ft in self._field_types])
396
+ return f"{base_name}[{field_type_names}]"
397
+
398
+ def is_homogeneous(self):
399
+ return len(self._field_types) == 1 or (
400
+ len(self._field_types) == 2 and self._field_types[1] is Ellipsis
401
+ )
402
+
403
+ def validate(self, value):
404
+ if value is None:
405
+ return
406
+ if not isinstance(value, self.valid_types):
407
+ raise TypeError(
408
+ f"value should be instance of {self.valid_types}, got {type(value)}"
409
+ )
410
+ if self.is_homogeneous():
411
+ field_type: AbstractFieldType = self._field_types[0]
412
+ if not isinstance(field_type, AnyType):
413
+ for item in value:
414
+ try:
415
+ field_type.validate(item)
416
+ except TypeError:
417
+ raise TypeError(
418
+ f"item should be instance of "
419
+ f"{field_type.valid_types}, "
420
+ f"got {type(item)}"
421
+ )
422
+ else:
423
+ if len(value) != len(self._field_types):
424
+ raise ValueError(
425
+ f"value should own {len(self._field_types)} items, "
426
+ f"got {len(value)} items"
427
+ )
428
+ for expect_field_type, item in zip(self._field_types, value):
429
+ try:
430
+ expect_field_type.validate(item)
431
+ except TypeError:
432
+ raise TypeError(
433
+ f"item should be instance of "
434
+ f"{expect_field_type.valid_types}, "
435
+ f"got {type(item)}"
436
+ )
437
+
438
+
439
+ class ListType(_CollectionType):
440
+ __slots__ = ()
441
+
442
+ @property
443
+ def type_name(self) -> str:
444
+ return "list"
445
+
446
+ @property
447
+ def valid_types(self) -> Tuple[Type, ...]:
448
+ return (list,)
449
+
450
+
451
+ class TupleType(_CollectionType):
452
+ __slots__ = ()
453
+
454
+ @property
455
+ def type_name(self) -> str:
456
+ return "tuple"
457
+
458
+ @property
459
+ def valid_types(self) -> Tuple[Type, ...]:
460
+ return (tuple,)
461
+
462
+
463
+ class DictType(AbstractFieldType):
464
+ __slots__ = "key_type", "value_type"
465
+
466
+ key_type: AbstractFieldType
467
+ value_type: AbstractFieldType
468
+
469
+ def __init__(
470
+ self, key_type: AbstractFieldType = None, value_type: AbstractFieldType = None
471
+ ):
472
+ if key_type is None:
473
+ key_type = AnyType()
474
+ if value_type is None:
475
+ value_type = AnyType()
476
+ self.key_type = key_type
477
+ self.value_type = value_type
478
+
479
+ @property
480
+ def type_name(self) -> str:
481
+ return "dict"
482
+
483
+ @property
484
+ def name(self) -> str:
485
+ if isinstance(self.key_type, AnyType) and isinstance(self.value_type, AnyType):
486
+ return "Dict"
487
+ else:
488
+ return f"Dict[{self.key_type.name}, {self.value_type.name}]"
489
+
490
+ @property
491
+ def valid_types(self) -> Tuple[Type, ...]:
492
+ return (dict,)
493
+
494
+ def validate(self, value):
495
+ super().validate(value)
496
+ if value is None:
497
+ return
498
+ for k, v in value.items():
499
+ try:
500
+ self.key_type.validate(k)
501
+ except TypeError:
502
+ raise TypeError(
503
+ f"key should be instance of "
504
+ f"{self.key_type.valid_types}, got {type(k)}"
505
+ )
506
+ try:
507
+ self.value_type.validate(v)
508
+ except TypeError:
509
+ raise TypeError(
510
+ f"value should be instance of "
511
+ f"{self.value_type.valid_types}, got {type(v)}"
512
+ )
513
+
514
+
515
+ class ReferenceType(AbstractFieldType):
516
+ __slots__ = ("reference_type",)
517
+
518
+ reference_type: Type
519
+
520
+ def __init__(self, reference_type: Type = None):
521
+ if reference_type is None:
522
+ reference_type = object
523
+ self.reference_type = reference_type
524
+
525
+ @property
526
+ def type_name(self) -> str:
527
+ return "reference"
528
+
529
+ @property
530
+ def valid_types(self) -> Tuple[Type, ...]:
531
+ return (self.reference_type,)
532
+
533
+
534
+ class FieldTypes:
535
+ # primitive type
536
+ bool = PrimitiveFieldType(PrimitiveType.bool)
537
+ int8 = PrimitiveFieldType(PrimitiveType.int8)
538
+ int16 = PrimitiveFieldType(PrimitiveType.int16)
539
+ int32 = PrimitiveFieldType(PrimitiveType.int32)
540
+ int64 = PrimitiveFieldType(PrimitiveType.int64)
541
+ uint8 = PrimitiveFieldType(PrimitiveType.uint8)
542
+ uint16 = PrimitiveFieldType(PrimitiveType.uint16)
543
+ uint32 = PrimitiveFieldType(PrimitiveType.uint32)
544
+ uint64 = PrimitiveFieldType(PrimitiveType.uint64)
545
+ float16 = PrimitiveFieldType(PrimitiveType.float16)
546
+ float32 = PrimitiveFieldType(PrimitiveType.float32)
547
+ float64 = PrimitiveFieldType(PrimitiveType.float64)
548
+ bytes = PrimitiveFieldType(PrimitiveType.bytes)
549
+ string = PrimitiveFieldType(PrimitiveType.string)
550
+
551
+ complex64 = Complex64Type()
552
+ complex128 = Complex128Type()
553
+
554
+ key = KeyType()
555
+
556
+ # Python types
557
+ slice = SliceType()
558
+ datetime = DatetimeType()
559
+ # alias of datetime
560
+ datatime64 = DatetimeType()
561
+ timedelta = TimedeltaType()
562
+ # alias of timedelta
563
+ timedelta64 = TimedeltaType()
564
+ tzinfo = TZInfoType()
565
+ function = FunctionType()
566
+ namedtuple = NamedtupleType()
567
+ reference = ReferenceType()
568
+ any = AnyType()
569
+ # equivalent to any
570
+ serialized = AnyType()
571
+
572
+ # collection
573
+ list = ListType()
574
+ tuple = TupleType()
575
+ dict = DictType()
576
+
577
+ # numpy
578
+ ndarray = NDArrayType()
579
+ # alias of ndarray
580
+ arr = NDArrayType()
581
+ dtype = DtypeType()
582
+
583
+ # pandas
584
+ index = IndexType()
585
+ series = SeriesType()
586
+ dataframe = DataFrameType()
587
+ interval_array = IntervalArrayType()
588
+ # alias of interval_array
589
+ interval_arr = IntervalArrayType()
@@ -0,0 +1,13 @@
1
+ # Copyright 1999-2024 Alibaba Group Holding Ltd.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
@@ -0,0 +1,121 @@
1
+ # Copyright 1999-2024 Alibaba Group Holding Ltd.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from collections import namedtuple
16
+ from datetime import datetime, timedelta, timezone
17
+
18
+ import numpy as np
19
+ import pandas as pd
20
+ import pytest
21
+
22
+ from ....core import EntityData
23
+ from .. import FieldTypes
24
+
25
+
26
+ class MyClass(EntityData):
27
+ __slots__ = ()
28
+
29
+ @staticmethod
30
+ def my_func():
31
+ """
32
+ Test function
33
+ """
34
+
35
+
36
+ my_named_tuple = namedtuple("my_named_tuple", "a b")
37
+
38
+
39
+ fields_values = [
40
+ # field_type, valid values, invalid values
41
+ [FieldTypes.bool, [True, np.bool_(False)], [1]],
42
+ [FieldTypes.int8, [8, np.int8(8)], [8.0]],
43
+ [FieldTypes.int16, [16, np.int16(16)], [16.0]],
44
+ [FieldTypes.int32, [32, np.int32(32)], [64.0]],
45
+ [FieldTypes.uint8, [8, np.uint8(8)], [8.0]],
46
+ [FieldTypes.uint16, [16, np.uint16(16)], [16.0]],
47
+ [FieldTypes.uint32, [32, np.uint32(32)], [32.0]],
48
+ [FieldTypes.uint64, [64, np.uint64(64)], [64.0]],
49
+ [FieldTypes.float16, [16.0, np.float16(16)], [16]],
50
+ [FieldTypes.float32, [32.0, np.float32(32)], [32]],
51
+ [FieldTypes.float64, [64.0, np.float64(64)], [64]],
52
+ [FieldTypes.complex64, [1 + 2j, np.complex64(1 + 2j)], [64]],
53
+ [FieldTypes.complex128, [1 + 2j, np.complex128(1 + 2j)], [128]],
54
+ [FieldTypes.bytes, [b"abc", np.bytes_("abc")], ["abc"]],
55
+ [FieldTypes.string, ["abc", np.str_("abc")], [b"abc"]],
56
+ [FieldTypes.ndarray, [np.array([1, 2, 3])], [object()]],
57
+ [FieldTypes.dtype, [np.dtype(np.int32), pd.StringDtype()], [object()]],
58
+ [FieldTypes.key, [MyClass()], [object()]],
59
+ [FieldTypes.slice, [slice(1, 10), slice("a", "b")], [object()]],
60
+ [FieldTypes.datetime, [datetime.now(), pd.Timestamp(0)], [object()]],
61
+ [FieldTypes.timedelta, [timedelta(days=1), pd.Timedelta(days=1)], [object()]],
62
+ [FieldTypes.tzinfo, [timezone.utc], [object()]],
63
+ [FieldTypes.index, [pd.RangeIndex(10), pd.Index([1, 2])], [object()]],
64
+ [FieldTypes.series, [pd.Series([1, 2, 3])], [object()]],
65
+ [FieldTypes.dataframe, [pd.DataFrame({"a": [1, 2]})], [object()]],
66
+ [FieldTypes.interval_array, [pd.arrays.IntervalArray([])], [object()]],
67
+ [FieldTypes.function, [MyClass.my_func], [object()]],
68
+ [FieldTypes.namedtuple, [my_named_tuple(a=1, b=2)], [tuple()]],
69
+ [FieldTypes.reference(MyClass), [MyClass()], [object()]],
70
+ [
71
+ FieldTypes.tuple(FieldTypes.int64, ...),
72
+ [tuple(), tuple([1, 2])],
73
+ [list(), tuple([1, 2.0])],
74
+ ],
75
+ [
76
+ FieldTypes.list(FieldTypes.int64, FieldTypes.float64),
77
+ [[1, 1.0]],
78
+ [tuple(), [1, 1]],
79
+ ],
80
+ [
81
+ FieldTypes.dict(FieldTypes.string, FieldTypes.int64),
82
+ [{"a": 1}],
83
+ [{1: "a"}, {"a": 1.0}],
84
+ ],
85
+ [FieldTypes.any, [object()], []],
86
+ ]
87
+
88
+
89
+ @pytest.mark.parametrize("field_type, valid_values, invalid_values", fields_values)
90
+ def test_field_type(field_type, valid_values, invalid_values):
91
+ assert isinstance(field_type.type_name, str)
92
+ assert isinstance(field_type.name, str)
93
+
94
+ for valid_value in valid_values:
95
+ field_type.validate(valid_value)
96
+
97
+ for invalid_value in invalid_values:
98
+ with pytest.raises(TypeError):
99
+ field_type.validate(invalid_value)
100
+
101
+
102
+ def test_collction_field_error():
103
+ with pytest.raises(ValueError):
104
+ FieldTypes.tuple(FieldTypes.int64, FieldTypes.float32).validate(
105
+ tuple([1, 3.0, 3.0])
106
+ )
107
+
108
+
109
+ def test_field_name():
110
+ assert FieldTypes.list().name == "List"
111
+ assert (
112
+ FieldTypes.list(FieldTypes.int64, FieldTypes.float32).name
113
+ == "List[Int64, Float32]"
114
+ )
115
+ assert FieldTypes.tuple(FieldTypes.int8, ...).name == "Tuple[Int8, ...]"
116
+ assert FieldTypes.tuple(FieldTypes.int8).name == "Tuple[Int8, ...]"
117
+ assert FieldTypes.dict().name == "Dict"
118
+ assert (
119
+ FieldTypes.dict(FieldTypes.int8, FieldTypes.float64).name
120
+ == "Dict[Int8, Float64]"
121
+ )