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,327 @@
1
+ import re
2
+ import sys
3
+ from types import CodeType, FrameType, TracebackType
4
+
5
+ try:
6
+ from __pypy__ import tproxy
7
+ except ImportError:
8
+ tproxy = None
9
+ try:
10
+ from .cpython import tb_set_next
11
+ except ImportError:
12
+ tb_set_next = None
13
+
14
+ if not tb_set_next and not tproxy:
15
+ raise ImportError("Cannot use tblib. Runtime not supported.")
16
+
17
+ __version__ = "1.7.0"
18
+ __all__ = "Traceback", "TracebackParseError", "Frame", "Code"
19
+
20
+ PY3 = sys.version_info[0] == 3
21
+ FRAME_RE = re.compile(
22
+ r'^\s*File "(?P<co_filename>.+)", line (?P<tb_lineno>\d+)(, in (?P<co_name>.+))?$'
23
+ )
24
+
25
+
26
+ class _AttrDict(dict):
27
+ __slots__ = ()
28
+
29
+ def __getattr__(self, name):
30
+ try:
31
+ return self[name]
32
+ except KeyError:
33
+ raise AttributeError(name)
34
+
35
+
36
+ # noinspection PyPep8Naming
37
+ class __traceback_maker(Exception):
38
+ pass
39
+
40
+
41
+ class TracebackParseError(Exception):
42
+ pass
43
+
44
+
45
+ class Code(object):
46
+ """
47
+ Class that replicates just enough of the builtin Code object to enable serialization and traceback rendering.
48
+ """
49
+
50
+ co_code = None
51
+
52
+ def __init__(self, code):
53
+ self.co_filename = code.co_filename
54
+ self.co_name = code.co_name
55
+ self.co_argcount = 0
56
+ self.co_kwonlyargcount = 0
57
+ self.co_varnames = ()
58
+ self.co_nlocals = 0
59
+ self.co_stacksize = 0
60
+ self.co_flags = 64
61
+ self.co_firstlineno = 0
62
+
63
+ # noinspection SpellCheckingInspection
64
+ def __tproxy__(self, operation, *args, **kwargs):
65
+ """
66
+ Necessary for PyPy's tproxy.
67
+ """
68
+ if operation in ("__getattribute__", "__getattr__"):
69
+ return getattr(self, args[0])
70
+ else:
71
+ return getattr(self, operation)(*args, **kwargs)
72
+
73
+
74
+ class Frame(object):
75
+ """
76
+ Class that replicates just enough of the builtin Frame object to enable serialization and traceback rendering.
77
+ """
78
+
79
+ def __init__(self, frame):
80
+ self.f_locals = {}
81
+ self.f_globals = {
82
+ k: v for k, v in frame.f_globals.items() if k in ("__file__", "__name__")
83
+ }
84
+ self.f_code = Code(frame.f_code)
85
+ self.f_lineno = frame.f_lineno
86
+
87
+ def clear(self):
88
+ """
89
+ For compatibility with PyPy 3.5;
90
+ clear() was added to frame in Python 3.4
91
+ and is called by traceback.clear_frames(), which
92
+ in turn is called by unittest.TestCase.assertRaises
93
+ """
94
+
95
+ # noinspection SpellCheckingInspection
96
+ def __tproxy__(self, operation, *args, **kwargs):
97
+ """
98
+ Necessary for PyPy's tproxy.
99
+ """
100
+ if operation in ("__getattribute__", "__getattr__"):
101
+ if args[0] == "f_code":
102
+ return tproxy(CodeType, self.f_code.__tproxy__)
103
+ else:
104
+ return getattr(self, args[0])
105
+ else:
106
+ return getattr(self, operation)(*args, **kwargs)
107
+
108
+
109
+ class Traceback(object):
110
+ """
111
+ Class that wraps builtin Traceback objects.
112
+ """
113
+
114
+ tb_next = None
115
+
116
+ def __init__(self, tb):
117
+ self.tb_frame = Frame(tb.tb_frame)
118
+ # noinspection SpellCheckingInspection
119
+ self.tb_lineno = int(tb.tb_lineno)
120
+
121
+ # Build in place to avoid exceeding the recursion limit
122
+ tb = tb.tb_next
123
+ prev_traceback = self
124
+ cls = type(self)
125
+ while tb is not None:
126
+ traceback = object.__new__(cls)
127
+ traceback.tb_frame = Frame(tb.tb_frame)
128
+ traceback.tb_lineno = int(tb.tb_lineno)
129
+ prev_traceback.tb_next = traceback
130
+ prev_traceback = traceback
131
+ tb = tb.tb_next
132
+
133
+ def as_traceback(self):
134
+ """
135
+ Convert to a builtin Traceback object that is usable for raising or rendering a stacktrace.
136
+ """
137
+ if tproxy:
138
+ return tproxy(TracebackType, self.__tproxy__)
139
+ if not tb_set_next:
140
+ raise RuntimeError("Unsupported Python interpreter!")
141
+
142
+ current = self
143
+ top_tb = None
144
+ tb = None
145
+ while current:
146
+ f_code = current.tb_frame.f_code
147
+ code = compile(
148
+ "\n" * (current.tb_lineno - 1) + "raise __traceback_maker",
149
+ current.tb_frame.f_code.co_filename,
150
+ "exec",
151
+ )
152
+ if hasattr(code, "replace"):
153
+ # Python 3.8 and newer
154
+ code = code.replace(
155
+ co_argcount=0,
156
+ co_filename=f_code.co_filename,
157
+ co_name=f_code.co_name,
158
+ co_freevars=(),
159
+ co_cellvars=(),
160
+ )
161
+ elif PY3:
162
+ code = CodeType(
163
+ 0,
164
+ code.co_kwonlyargcount,
165
+ code.co_nlocals,
166
+ code.co_stacksize,
167
+ code.co_flags,
168
+ code.co_code,
169
+ code.co_consts,
170
+ code.co_names,
171
+ code.co_varnames,
172
+ f_code.co_filename,
173
+ f_code.co_name,
174
+ code.co_firstlineno,
175
+ code.co_lnotab,
176
+ (),
177
+ (),
178
+ )
179
+ else:
180
+ code = CodeType(
181
+ 0,
182
+ code.co_nlocals,
183
+ code.co_stacksize,
184
+ code.co_flags,
185
+ code.co_code,
186
+ code.co_consts,
187
+ code.co_names,
188
+ code.co_varnames,
189
+ f_code.co_filename.encode(),
190
+ f_code.co_name.encode(),
191
+ code.co_firstlineno,
192
+ code.co_lnotab,
193
+ (),
194
+ (),
195
+ )
196
+
197
+ # noinspection PyBroadException
198
+ try:
199
+ exec(code, dict(current.tb_frame.f_globals), {})
200
+ except Exception:
201
+ next_tb = sys.exc_info()[2].tb_next
202
+ if top_tb is None:
203
+ top_tb = next_tb
204
+ if tb is not None:
205
+ tb_set_next(tb, next_tb)
206
+ tb = next_tb
207
+ del next_tb
208
+
209
+ current = current.tb_next
210
+ try:
211
+ return top_tb
212
+ finally:
213
+ del top_tb
214
+ del tb
215
+
216
+ to_traceback = as_traceback
217
+
218
+ # noinspection SpellCheckingInspection
219
+ def __tproxy__(self, operation, *args, **kwargs):
220
+ """
221
+ Necessary for PyPy's tproxy.
222
+ """
223
+ if operation in ("__getattribute__", "__getattr__"):
224
+ if args[0] == "tb_next":
225
+ return self.tb_next and self.tb_next.as_traceback()
226
+ elif args[0] == "tb_frame":
227
+ return tproxy(FrameType, self.tb_frame.__tproxy__)
228
+ else:
229
+ return getattr(self, args[0])
230
+ else:
231
+ return getattr(self, operation)(*args, **kwargs)
232
+
233
+ def as_dict(self):
234
+ """
235
+ Converts to a dictionary representation. You can serialize the result to JSON as it only has
236
+ builtin objects like dicts, lists, ints or strings.
237
+ """
238
+ if self.tb_next is None:
239
+ tb_next = None
240
+ else:
241
+ tb_next = self.tb_next.to_dict()
242
+
243
+ code = {
244
+ "co_filename": self.tb_frame.f_code.co_filename,
245
+ "co_name": self.tb_frame.f_code.co_name,
246
+ }
247
+ frame = {
248
+ "f_globals": self.tb_frame.f_globals,
249
+ "f_code": code,
250
+ "f_lineno": self.tb_frame.f_lineno,
251
+ }
252
+ return {
253
+ "tb_frame": frame,
254
+ "tb_lineno": self.tb_lineno,
255
+ "tb_next": tb_next,
256
+ }
257
+
258
+ to_dict = as_dict
259
+
260
+ @classmethod
261
+ def from_dict(cls, dct):
262
+ """
263
+ Creates an instance from a dictionary with the same structure as ``.as_dict()`` returns.
264
+ """
265
+ if dct["tb_next"]:
266
+ tb_next = cls.from_dict(dct["tb_next"])
267
+ else:
268
+ tb_next = None
269
+
270
+ code = _AttrDict(
271
+ co_filename=dct["tb_frame"]["f_code"]["co_filename"],
272
+ co_name=dct["tb_frame"]["f_code"]["co_name"],
273
+ )
274
+ frame = _AttrDict(
275
+ f_globals=dct["tb_frame"]["f_globals"],
276
+ f_code=code,
277
+ f_lineno=dct["tb_frame"]["f_lineno"],
278
+ )
279
+ tb = _AttrDict(
280
+ tb_frame=frame,
281
+ tb_lineno=dct["tb_lineno"],
282
+ tb_next=tb_next,
283
+ )
284
+ return cls(tb)
285
+
286
+ @classmethod
287
+ def from_string(cls, string, strict=True):
288
+ """
289
+ Creates an instance by parsing a stacktrace. Strict means that parsing stops when lines are not indented by at least two spaces
290
+ anymore.
291
+ """
292
+ frames = []
293
+ header = strict
294
+
295
+ for line in string.splitlines():
296
+ line = line.rstrip()
297
+ if header:
298
+ if line == "Traceback (most recent call last):":
299
+ header = False
300
+ continue
301
+ frame_match = FRAME_RE.match(line)
302
+ if frame_match:
303
+ frames.append(frame_match.groupdict())
304
+ elif line.startswith(" "):
305
+ pass
306
+ elif strict:
307
+ break # traceback ended
308
+
309
+ if frames:
310
+ previous = None
311
+ for frame in reversed(frames):
312
+ previous = _AttrDict(
313
+ frame,
314
+ tb_frame=_AttrDict(
315
+ frame,
316
+ f_globals=_AttrDict(
317
+ __file__=frame["co_filename"],
318
+ __name__="?",
319
+ ),
320
+ f_code=_AttrDict(frame),
321
+ f_lineno=int(frame["tb_lineno"]),
322
+ ),
323
+ tb_next=previous,
324
+ )
325
+ return cls(previous)
326
+ else:
327
+ raise TracebackParseError("Could not find any frames in %r." % string)
@@ -0,0 +1,83 @@
1
+ """
2
+ Taken verbatim from Jinja2.
3
+ https://github.com/mitsuhiko/jinja2/blob/master/jinja2/debug.py#L267
4
+ """
5
+ import platform
6
+ import sys
7
+
8
+
9
+ def _init_ugly_crap():
10
+ """This function implements a few ugly things so that we can patch the
11
+ traceback objects. The function returned allows resetting `tb_next` on
12
+ any python traceback object. Do not attempt to use this on non cpython
13
+ interpreters
14
+ """
15
+ import ctypes
16
+ from types import TracebackType
17
+
18
+ # figure out side of _Py_ssize_t
19
+ if hasattr(ctypes.pythonapi, "Py_InitModule4_64"):
20
+ _Py_ssize_t = ctypes.c_int64
21
+ else:
22
+ _Py_ssize_t = ctypes.c_int
23
+
24
+ # regular python
25
+ class _PyObject(ctypes.Structure):
26
+ pass
27
+
28
+ _PyObject._fields_ = [
29
+ ("ob_refcnt", _Py_ssize_t),
30
+ ("ob_type", ctypes.POINTER(_PyObject)),
31
+ ]
32
+
33
+ # python with trace
34
+ if hasattr(sys, "getobjects"):
35
+
36
+ class _PyObject(ctypes.Structure):
37
+ pass
38
+
39
+ _PyObject._fields_ = [
40
+ ("_ob_next", ctypes.POINTER(_PyObject)),
41
+ ("_ob_prev", ctypes.POINTER(_PyObject)),
42
+ ("ob_refcnt", _Py_ssize_t),
43
+ ("ob_type", ctypes.POINTER(_PyObject)),
44
+ ]
45
+
46
+ class _Traceback(_PyObject):
47
+ pass
48
+
49
+ _Traceback._fields_ = [
50
+ ("tb_next", ctypes.POINTER(_Traceback)),
51
+ ("tb_frame", ctypes.POINTER(_PyObject)),
52
+ ("tb_lasti", ctypes.c_int),
53
+ ("tb_lineno", ctypes.c_int),
54
+ ]
55
+
56
+ def tb_set_next(tb, next):
57
+ """Set the tb_next attribute of a traceback object."""
58
+ if not (
59
+ isinstance(tb, TracebackType)
60
+ and (next is None or isinstance(next, TracebackType))
61
+ ):
62
+ raise TypeError("tb_set_next arguments must be traceback objects")
63
+ obj = _Traceback.from_address(id(tb))
64
+ if tb.tb_next is not None:
65
+ old = _Traceback.from_address(id(tb.tb_next))
66
+ old.ob_refcnt -= 1
67
+ if next is None:
68
+ obj.tb_next = ctypes.POINTER(_Traceback)()
69
+ else:
70
+ next = _Traceback.from_address(id(next))
71
+ next.ob_refcnt += 1
72
+ obj.tb_next = ctypes.pointer(next)
73
+
74
+ return tb_set_next
75
+
76
+
77
+ tb_set_next = None
78
+ try:
79
+ if platform.python_implementation() == "CPython":
80
+ tb_set_next = _init_ugly_crap()
81
+ except Exception as exc:
82
+ sys.stderr.write("Failed to initialize cpython support: {!r}".format(exc))
83
+ del _init_ugly_crap
@@ -0,0 +1,44 @@
1
+ import sys
2
+ from functools import wraps
3
+
4
+ from . import Traceback
5
+
6
+
7
+ class Error(object):
8
+ def __init__(self, exc_type, exc_value, traceback):
9
+ self.exc_type = exc_type
10
+ self.exc_value = exc_value
11
+ self.__traceback = Traceback(traceback)
12
+
13
+ @property
14
+ def traceback(self):
15
+ return self.__traceback.as_traceback()
16
+
17
+ def reraise(self):
18
+ raise self.exc_value.with_traceback(self.traceback) from None
19
+
20
+
21
+ def return_error(func, exc_type=Exception):
22
+ @wraps(func)
23
+ def return_exceptions_wrapper(*args, **kwargs):
24
+ try:
25
+ return func(*args, **kwargs)
26
+ except exc_type:
27
+ return Error(*sys.exc_info())
28
+
29
+ return return_exceptions_wrapper
30
+
31
+
32
+ returns_error = (
33
+ return_errors
34
+ ) = returns_errors = return_error # cause I make too many typos
35
+
36
+
37
+ @return_error
38
+ def apply_with_return_error(args):
39
+ """
40
+ args is a tuple where the first argument is a callable.
41
+ eg::
42
+ apply_with_return_error((func, 1, 2, 3)) - this will call func(1, 2, 3)
43
+ """
44
+ return args[0](*args[1:])
@@ -0,0 +1,90 @@
1
+ import sys
2
+ from types import TracebackType
3
+
4
+ from . import Frame, Traceback
5
+
6
+ if sys.version_info.major >= 3:
7
+ import copyreg
8
+ else:
9
+ import copy_reg as copyreg
10
+
11
+
12
+ def unpickle_traceback(tb_frame, tb_lineno, tb_next):
13
+ ret = object.__new__(Traceback)
14
+ ret.tb_frame = tb_frame
15
+ ret.tb_lineno = tb_lineno
16
+ ret.tb_next = tb_next
17
+ return ret.as_traceback()
18
+
19
+
20
+ def pickle_traceback(tb):
21
+ return unpickle_traceback, (
22
+ Frame(tb.tb_frame),
23
+ tb.tb_lineno,
24
+ tb.tb_next and Traceback(tb.tb_next),
25
+ )
26
+
27
+
28
+ def unpickle_exception(func, args, cause, tb):
29
+ inst = func(*args)
30
+ inst.__cause__ = cause
31
+ inst.__traceback__ = tb
32
+ return inst
33
+
34
+
35
+ def pickle_exception(obj):
36
+ # All exceptions, unlike generic Python objects, define __reduce_ex__
37
+ # __reduce_ex__(4) should be no different from __reduce_ex__(3).
38
+ # __reduce_ex__(5) could bring benefits in the unlikely case the exception
39
+ # directly contains buffers, but PickleBuffer objects will cause a crash when
40
+ # running on protocol=4, and there's no clean way to figure out the current
41
+ # protocol from here. Note that any object returned by __reduce_ex__(3) will
42
+ # still be pickled with protocol 5 if pickle.dump() is running with it.
43
+ rv = obj.__reduce_ex__(3)
44
+ if isinstance(rv, str):
45
+ raise TypeError("str __reduce__ output is not supported")
46
+ assert isinstance(rv, tuple) and len(rv) >= 2
47
+
48
+ return (unpickle_exception, rv[:2] + (obj.__cause__, obj.__traceback__)) + rv[2:]
49
+
50
+
51
+ def _get_subclasses(cls):
52
+ # Depth-first traversal of all direct and indirect subclasses of cls
53
+ to_visit = [cls]
54
+ while to_visit:
55
+ this = to_visit.pop()
56
+ yield this
57
+ to_visit += list(this.__subclasses__())
58
+
59
+
60
+ def install(*exc_classes_or_instances):
61
+ copyreg.pickle(TracebackType, pickle_traceback)
62
+
63
+ if sys.version_info.major < 3:
64
+ # Dummy decorator?
65
+ if len(exc_classes_or_instances) == 1:
66
+ exc = exc_classes_or_instances[0]
67
+ if isinstance(exc, type) and issubclass(exc, BaseException):
68
+ return exc
69
+ return
70
+
71
+ if not exc_classes_or_instances:
72
+ for exception_cls in _get_subclasses(BaseException):
73
+ copyreg.pickle(exception_cls, pickle_exception)
74
+ return
75
+
76
+ for exc in exc_classes_or_instances:
77
+ if isinstance(exc, BaseException):
78
+ while exc is not None:
79
+ copyreg.pickle(type(exc), pickle_exception)
80
+ exc = exc.__cause__
81
+ elif isinstance(exc, type) and issubclass(exc, BaseException):
82
+ copyreg.pickle(exc, pickle_exception)
83
+ # Allow using @install as a decorator for Exception classes
84
+ if len(exc_classes_or_instances) == 1:
85
+ return exc
86
+ else:
87
+ raise TypeError(
88
+ "Expected subclasses or instances of BaseException, got %s"
89
+ % (type(exc))
90
+ )
@@ -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,51 @@
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
+ import io
16
+ import pickle
17
+
18
+ import pytest
19
+
20
+ from ..wrapped_pickle import switch_unpickle
21
+
22
+
23
+ @pytest.mark.asyncio
24
+ async def test_wrapped_pickle():
25
+ data = ["abcd", ["efgh"], {"ijk": "lm"}]
26
+ pickled = pickle.dumps(data)
27
+ assert pickle.loads(pickled) == data
28
+
29
+ # patched pickle can be used normally
30
+ assert pickle.load(io.BytesIO(pickled)) == data
31
+
32
+ # when pickle prohibition is enabled, errors will be raised
33
+ with pytest.raises(ValueError), switch_unpickle():
34
+ pickle.loads(pickled)
35
+
36
+ @switch_unpickle
37
+ def limited_func():
38
+ pickle.loads(pickled)
39
+
40
+ with pytest.raises(ValueError):
41
+ limited_func()
42
+
43
+ @switch_unpickle
44
+ async def limited_async_func():
45
+ pickle.loads(pickled)
46
+
47
+ with pytest.raises(ValueError):
48
+ await limited_async_func()
49
+
50
+ # patched pickle can be used normally when prohibition is eliminated
51
+ assert pickle.load(io.BytesIO(pickled)) == data