maxframe 0.1.0b5__cp310-cp310-macosx_11_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of maxframe might be problematic. Click here for more details.
- maxframe/__init__.py +32 -0
- maxframe/_utils.cpython-310-darwin.so +0 -0
- maxframe/_utils.pxd +33 -0
- maxframe/_utils.pyx +547 -0
- maxframe/codegen.py +528 -0
- maxframe/config/__init__.py +15 -0
- maxframe/config/config.py +443 -0
- maxframe/config/tests/__init__.py +13 -0
- maxframe/config/tests/test_config.py +103 -0
- maxframe/config/tests/test_validators.py +34 -0
- maxframe/config/validators.py +57 -0
- maxframe/conftest.py +139 -0
- maxframe/core/__init__.py +65 -0
- maxframe/core/base.py +156 -0
- maxframe/core/entity/__init__.py +44 -0
- maxframe/core/entity/chunks.py +68 -0
- maxframe/core/entity/core.py +152 -0
- maxframe/core/entity/executable.py +337 -0
- maxframe/core/entity/fuse.py +73 -0
- maxframe/core/entity/objects.py +100 -0
- maxframe/core/entity/output_types.py +90 -0
- maxframe/core/entity/tileables.py +438 -0
- maxframe/core/entity/utils.py +24 -0
- maxframe/core/graph/__init__.py +17 -0
- maxframe/core/graph/builder/__init__.py +16 -0
- maxframe/core/graph/builder/base.py +86 -0
- maxframe/core/graph/builder/chunk.py +430 -0
- maxframe/core/graph/builder/tileable.py +34 -0
- maxframe/core/graph/builder/utils.py +41 -0
- maxframe/core/graph/core.cpython-310-darwin.so +0 -0
- maxframe/core/graph/core.pyx +467 -0
- maxframe/core/graph/entity.py +171 -0
- maxframe/core/graph/tests/__init__.py +13 -0
- maxframe/core/graph/tests/test_graph.py +205 -0
- maxframe/core/mode.py +96 -0
- maxframe/core/operator/__init__.py +34 -0
- maxframe/core/operator/base.py +450 -0
- maxframe/core/operator/core.py +276 -0
- maxframe/core/operator/fetch.py +53 -0
- maxframe/core/operator/fuse.py +29 -0
- maxframe/core/operator/objects.py +72 -0
- maxframe/core/operator/shuffle.py +111 -0
- maxframe/core/operator/tests/__init__.py +13 -0
- maxframe/core/operator/tests/test_core.py +64 -0
- maxframe/core/tests/__init__.py +13 -0
- maxframe/core/tests/test_mode.py +75 -0
- maxframe/dataframe/__init__.py +81 -0
- maxframe/dataframe/arithmetic/__init__.py +359 -0
- maxframe/dataframe/arithmetic/abs.py +33 -0
- maxframe/dataframe/arithmetic/add.py +60 -0
- maxframe/dataframe/arithmetic/arccos.py +28 -0
- maxframe/dataframe/arithmetic/arccosh.py +28 -0
- maxframe/dataframe/arithmetic/arcsin.py +28 -0
- maxframe/dataframe/arithmetic/arcsinh.py +28 -0
- maxframe/dataframe/arithmetic/arctan.py +28 -0
- maxframe/dataframe/arithmetic/arctanh.py +28 -0
- maxframe/dataframe/arithmetic/around.py +152 -0
- maxframe/dataframe/arithmetic/bitwise_and.py +46 -0
- maxframe/dataframe/arithmetic/bitwise_or.py +50 -0
- maxframe/dataframe/arithmetic/bitwise_xor.py +46 -0
- maxframe/dataframe/arithmetic/ceil.py +28 -0
- maxframe/dataframe/arithmetic/core.py +342 -0
- maxframe/dataframe/arithmetic/cos.py +28 -0
- maxframe/dataframe/arithmetic/cosh.py +28 -0
- maxframe/dataframe/arithmetic/degrees.py +28 -0
- maxframe/dataframe/arithmetic/docstring.py +442 -0
- maxframe/dataframe/arithmetic/equal.py +56 -0
- maxframe/dataframe/arithmetic/exp.py +28 -0
- maxframe/dataframe/arithmetic/exp2.py +28 -0
- maxframe/dataframe/arithmetic/expm1.py +28 -0
- maxframe/dataframe/arithmetic/floor.py +28 -0
- maxframe/dataframe/arithmetic/floordiv.py +64 -0
- maxframe/dataframe/arithmetic/greater.py +57 -0
- maxframe/dataframe/arithmetic/greater_equal.py +57 -0
- maxframe/dataframe/arithmetic/invert.py +33 -0
- maxframe/dataframe/arithmetic/is_ufuncs.py +62 -0
- maxframe/dataframe/arithmetic/less.py +57 -0
- maxframe/dataframe/arithmetic/less_equal.py +57 -0
- maxframe/dataframe/arithmetic/log.py +28 -0
- maxframe/dataframe/arithmetic/log10.py +28 -0
- maxframe/dataframe/arithmetic/log2.py +28 -0
- maxframe/dataframe/arithmetic/mod.py +60 -0
- maxframe/dataframe/arithmetic/multiply.py +60 -0
- maxframe/dataframe/arithmetic/negative.py +33 -0
- maxframe/dataframe/arithmetic/not_equal.py +56 -0
- maxframe/dataframe/arithmetic/power.py +68 -0
- maxframe/dataframe/arithmetic/radians.py +28 -0
- maxframe/dataframe/arithmetic/sin.py +28 -0
- maxframe/dataframe/arithmetic/sinh.py +28 -0
- maxframe/dataframe/arithmetic/sqrt.py +28 -0
- maxframe/dataframe/arithmetic/subtract.py +64 -0
- maxframe/dataframe/arithmetic/tan.py +28 -0
- maxframe/dataframe/arithmetic/tanh.py +28 -0
- maxframe/dataframe/arithmetic/tests/__init__.py +13 -0
- maxframe/dataframe/arithmetic/tests/test_arithmetic.py +695 -0
- maxframe/dataframe/arithmetic/truediv.py +64 -0
- maxframe/dataframe/arithmetic/trunc.py +28 -0
- maxframe/dataframe/arrays.py +864 -0
- maxframe/dataframe/core.py +2417 -0
- maxframe/dataframe/datasource/__init__.py +15 -0
- maxframe/dataframe/datasource/core.py +81 -0
- maxframe/dataframe/datasource/dataframe.py +59 -0
- maxframe/dataframe/datasource/date_range.py +504 -0
- maxframe/dataframe/datasource/from_index.py +54 -0
- maxframe/dataframe/datasource/from_records.py +107 -0
- maxframe/dataframe/datasource/from_tensor.py +419 -0
- maxframe/dataframe/datasource/index.py +117 -0
- maxframe/dataframe/datasource/read_csv.py +528 -0
- maxframe/dataframe/datasource/read_odps_query.py +299 -0
- maxframe/dataframe/datasource/read_odps_table.py +253 -0
- maxframe/dataframe/datasource/read_parquet.py +421 -0
- maxframe/dataframe/datasource/series.py +55 -0
- maxframe/dataframe/datasource/tests/__init__.py +13 -0
- maxframe/dataframe/datasource/tests/test_datasource.py +401 -0
- maxframe/dataframe/datastore/__init__.py +26 -0
- maxframe/dataframe/datastore/core.py +19 -0
- maxframe/dataframe/datastore/to_csv.py +227 -0
- maxframe/dataframe/datastore/to_odps.py +162 -0
- maxframe/dataframe/extensions/__init__.py +41 -0
- maxframe/dataframe/extensions/accessor.py +50 -0
- maxframe/dataframe/extensions/reshuffle.py +83 -0
- maxframe/dataframe/extensions/tests/__init__.py +13 -0
- maxframe/dataframe/extensions/tests/test_extensions.py +38 -0
- maxframe/dataframe/fetch/__init__.py +15 -0
- maxframe/dataframe/fetch/core.py +86 -0
- maxframe/dataframe/groupby/__init__.py +82 -0
- maxframe/dataframe/groupby/aggregation.py +350 -0
- maxframe/dataframe/groupby/apply.py +251 -0
- maxframe/dataframe/groupby/core.py +179 -0
- maxframe/dataframe/groupby/cum.py +124 -0
- maxframe/dataframe/groupby/fill.py +141 -0
- maxframe/dataframe/groupby/getitem.py +92 -0
- maxframe/dataframe/groupby/head.py +105 -0
- maxframe/dataframe/groupby/sample.py +214 -0
- maxframe/dataframe/groupby/tests/__init__.py +13 -0
- maxframe/dataframe/groupby/tests/test_groupby.py +374 -0
- maxframe/dataframe/groupby/transform.py +255 -0
- maxframe/dataframe/indexing/__init__.py +84 -0
- maxframe/dataframe/indexing/add_prefix_suffix.py +110 -0
- maxframe/dataframe/indexing/align.py +349 -0
- maxframe/dataframe/indexing/at.py +83 -0
- maxframe/dataframe/indexing/getitem.py +204 -0
- maxframe/dataframe/indexing/iat.py +37 -0
- maxframe/dataframe/indexing/iloc.py +566 -0
- maxframe/dataframe/indexing/insert.py +86 -0
- maxframe/dataframe/indexing/loc.py +411 -0
- maxframe/dataframe/indexing/reindex.py +526 -0
- maxframe/dataframe/indexing/rename.py +462 -0
- maxframe/dataframe/indexing/rename_axis.py +209 -0
- maxframe/dataframe/indexing/reset_index.py +402 -0
- maxframe/dataframe/indexing/sample.py +221 -0
- maxframe/dataframe/indexing/set_axis.py +194 -0
- maxframe/dataframe/indexing/set_index.py +61 -0
- maxframe/dataframe/indexing/setitem.py +130 -0
- maxframe/dataframe/indexing/tests/__init__.py +13 -0
- maxframe/dataframe/indexing/tests/test_indexing.py +488 -0
- maxframe/dataframe/indexing/where.py +308 -0
- maxframe/dataframe/initializer.py +288 -0
- maxframe/dataframe/merge/__init__.py +32 -0
- maxframe/dataframe/merge/append.py +121 -0
- maxframe/dataframe/merge/concat.py +325 -0
- maxframe/dataframe/merge/merge.py +593 -0
- maxframe/dataframe/merge/tests/__init__.py +13 -0
- maxframe/dataframe/merge/tests/test_merge.py +215 -0
- maxframe/dataframe/misc/__init__.py +134 -0
- maxframe/dataframe/misc/_duplicate.py +46 -0
- maxframe/dataframe/misc/accessor.py +276 -0
- maxframe/dataframe/misc/apply.py +692 -0
- maxframe/dataframe/misc/astype.py +236 -0
- maxframe/dataframe/misc/case_when.py +141 -0
- maxframe/dataframe/misc/check_monotonic.py +84 -0
- maxframe/dataframe/misc/cut.py +383 -0
- maxframe/dataframe/misc/datetimes.py +79 -0
- maxframe/dataframe/misc/describe.py +108 -0
- maxframe/dataframe/misc/diff.py +210 -0
- maxframe/dataframe/misc/drop.py +440 -0
- maxframe/dataframe/misc/drop_duplicates.py +248 -0
- maxframe/dataframe/misc/duplicated.py +292 -0
- maxframe/dataframe/misc/eval.py +728 -0
- maxframe/dataframe/misc/explode.py +171 -0
- maxframe/dataframe/misc/get_dummies.py +208 -0
- maxframe/dataframe/misc/isin.py +217 -0
- maxframe/dataframe/misc/map.py +236 -0
- maxframe/dataframe/misc/melt.py +162 -0
- maxframe/dataframe/misc/memory_usage.py +248 -0
- maxframe/dataframe/misc/pct_change.py +150 -0
- maxframe/dataframe/misc/pivot_table.py +262 -0
- maxframe/dataframe/misc/qcut.py +104 -0
- maxframe/dataframe/misc/select_dtypes.py +104 -0
- maxframe/dataframe/misc/shift.py +256 -0
- maxframe/dataframe/misc/stack.py +238 -0
- maxframe/dataframe/misc/string_.py +221 -0
- maxframe/dataframe/misc/tests/__init__.py +13 -0
- maxframe/dataframe/misc/tests/test_misc.py +468 -0
- maxframe/dataframe/misc/to_numeric.py +178 -0
- maxframe/dataframe/misc/transform.py +361 -0
- maxframe/dataframe/misc/transpose.py +136 -0
- maxframe/dataframe/misc/value_counts.py +182 -0
- maxframe/dataframe/missing/__init__.py +53 -0
- maxframe/dataframe/missing/checkna.py +223 -0
- maxframe/dataframe/missing/dropna.py +280 -0
- maxframe/dataframe/missing/fillna.py +275 -0
- maxframe/dataframe/missing/replace.py +439 -0
- maxframe/dataframe/missing/tests/__init__.py +13 -0
- maxframe/dataframe/missing/tests/test_missing.py +89 -0
- maxframe/dataframe/operators.py +273 -0
- maxframe/dataframe/plotting/__init__.py +40 -0
- maxframe/dataframe/plotting/core.py +78 -0
- maxframe/dataframe/plotting/tests/__init__.py +13 -0
- maxframe/dataframe/plotting/tests/test_plotting.py +136 -0
- maxframe/dataframe/reduction/__init__.py +107 -0
- maxframe/dataframe/reduction/aggregation.py +344 -0
- maxframe/dataframe/reduction/all.py +78 -0
- maxframe/dataframe/reduction/any.py +78 -0
- maxframe/dataframe/reduction/core.py +837 -0
- maxframe/dataframe/reduction/count.py +59 -0
- maxframe/dataframe/reduction/cummax.py +30 -0
- maxframe/dataframe/reduction/cummin.py +30 -0
- maxframe/dataframe/reduction/cumprod.py +30 -0
- maxframe/dataframe/reduction/cumsum.py +30 -0
- maxframe/dataframe/reduction/custom_reduction.py +42 -0
- maxframe/dataframe/reduction/kurtosis.py +104 -0
- maxframe/dataframe/reduction/max.py +65 -0
- maxframe/dataframe/reduction/mean.py +61 -0
- maxframe/dataframe/reduction/min.py +65 -0
- maxframe/dataframe/reduction/nunique.py +141 -0
- maxframe/dataframe/reduction/prod.py +76 -0
- maxframe/dataframe/reduction/reduction_size.py +36 -0
- maxframe/dataframe/reduction/sem.py +69 -0
- maxframe/dataframe/reduction/skew.py +89 -0
- maxframe/dataframe/reduction/std.py +53 -0
- maxframe/dataframe/reduction/str_concat.py +48 -0
- maxframe/dataframe/reduction/sum.py +77 -0
- maxframe/dataframe/reduction/tests/__init__.py +13 -0
- maxframe/dataframe/reduction/tests/test_reduction.py +486 -0
- maxframe/dataframe/reduction/unique.py +90 -0
- maxframe/dataframe/reduction/var.py +72 -0
- maxframe/dataframe/sort/__init__.py +34 -0
- maxframe/dataframe/sort/core.py +36 -0
- maxframe/dataframe/sort/sort_index.py +153 -0
- maxframe/dataframe/sort/sort_values.py +311 -0
- maxframe/dataframe/sort/tests/__init__.py +13 -0
- maxframe/dataframe/sort/tests/test_sort.py +81 -0
- maxframe/dataframe/statistics/__init__.py +33 -0
- maxframe/dataframe/statistics/corr.py +280 -0
- maxframe/dataframe/statistics/quantile.py +341 -0
- maxframe/dataframe/statistics/tests/__init__.py +13 -0
- maxframe/dataframe/statistics/tests/test_statistics.py +82 -0
- maxframe/dataframe/tests/__init__.py +13 -0
- maxframe/dataframe/tests/test_initializer.py +29 -0
- maxframe/dataframe/tseries/__init__.py +13 -0
- maxframe/dataframe/tseries/tests/__init__.py +13 -0
- maxframe/dataframe/tseries/tests/test_tseries.py +30 -0
- maxframe/dataframe/tseries/to_datetime.py +297 -0
- maxframe/dataframe/ufunc/__init__.py +27 -0
- maxframe/dataframe/ufunc/tensor.py +54 -0
- maxframe/dataframe/ufunc/ufunc.py +52 -0
- maxframe/dataframe/utils.py +1267 -0
- maxframe/dataframe/window/__init__.py +29 -0
- maxframe/dataframe/window/aggregation.py +96 -0
- maxframe/dataframe/window/core.py +69 -0
- maxframe/dataframe/window/ewm.py +249 -0
- maxframe/dataframe/window/expanding.py +147 -0
- maxframe/dataframe/window/rolling.py +376 -0
- maxframe/dataframe/window/tests/__init__.py +13 -0
- maxframe/dataframe/window/tests/test_ewm.py +70 -0
- maxframe/dataframe/window/tests/test_expanding.py +66 -0
- maxframe/dataframe/window/tests/test_rolling.py +57 -0
- maxframe/env.py +33 -0
- maxframe/errors.py +21 -0
- maxframe/extension.py +81 -0
- maxframe/learn/__init__.py +17 -0
- maxframe/learn/contrib/__init__.py +17 -0
- maxframe/learn/contrib/pytorch/__init__.py +16 -0
- maxframe/learn/contrib/pytorch/run_function.py +110 -0
- maxframe/learn/contrib/pytorch/run_script.py +102 -0
- maxframe/learn/contrib/pytorch/tests/__init__.py +13 -0
- maxframe/learn/contrib/pytorch/tests/test_pytorch.py +42 -0
- maxframe/learn/contrib/utils.py +52 -0
- maxframe/learn/contrib/xgboost/__init__.py +26 -0
- maxframe/learn/contrib/xgboost/classifier.py +86 -0
- maxframe/learn/contrib/xgboost/core.py +156 -0
- maxframe/learn/contrib/xgboost/dmatrix.py +150 -0
- maxframe/learn/contrib/xgboost/predict.py +138 -0
- maxframe/learn/contrib/xgboost/regressor.py +78 -0
- maxframe/learn/contrib/xgboost/tests/__init__.py +13 -0
- maxframe/learn/contrib/xgboost/tests/test_core.py +43 -0
- maxframe/learn/contrib/xgboost/train.py +121 -0
- maxframe/learn/utils/__init__.py +15 -0
- maxframe/learn/utils/core.py +29 -0
- maxframe/lib/__init__.py +15 -0
- maxframe/lib/aio/__init__.py +27 -0
- maxframe/lib/aio/_runners.py +162 -0
- maxframe/lib/aio/_threads.py +35 -0
- maxframe/lib/aio/base.py +82 -0
- maxframe/lib/aio/file.py +85 -0
- maxframe/lib/aio/isolation.py +100 -0
- maxframe/lib/aio/lru.py +242 -0
- maxframe/lib/aio/parallelism.py +37 -0
- maxframe/lib/aio/tests/__init__.py +13 -0
- maxframe/lib/aio/tests/test_aio_file.py +55 -0
- maxframe/lib/compression.py +55 -0
- maxframe/lib/cython/__init__.py +13 -0
- maxframe/lib/cython/libcpp.pxd +30 -0
- maxframe/lib/filesystem/__init__.py +21 -0
- maxframe/lib/filesystem/_glob.py +173 -0
- maxframe/lib/filesystem/_oss_lib/__init__.py +13 -0
- maxframe/lib/filesystem/_oss_lib/common.py +198 -0
- maxframe/lib/filesystem/_oss_lib/glob.py +147 -0
- maxframe/lib/filesystem/_oss_lib/handle.py +156 -0
- maxframe/lib/filesystem/arrow.py +236 -0
- maxframe/lib/filesystem/base.py +263 -0
- maxframe/lib/filesystem/core.py +95 -0
- maxframe/lib/filesystem/fsmap.py +164 -0
- maxframe/lib/filesystem/hdfs.py +31 -0
- maxframe/lib/filesystem/local.py +112 -0
- maxframe/lib/filesystem/oss.py +157 -0
- maxframe/lib/filesystem/tests/__init__.py +13 -0
- maxframe/lib/filesystem/tests/test_filesystem.py +223 -0
- maxframe/lib/filesystem/tests/test_oss.py +182 -0
- maxframe/lib/functools_compat.py +81 -0
- maxframe/lib/mmh3.cpython-310-darwin.so +0 -0
- maxframe/lib/mmh3_src/MurmurHash3.cpp +339 -0
- maxframe/lib/mmh3_src/MurmurHash3.h +43 -0
- maxframe/lib/mmh3_src/mmh3module.cpp +387 -0
- maxframe/lib/sparse/__init__.py +861 -0
- maxframe/lib/sparse/array.py +1604 -0
- maxframe/lib/sparse/core.py +92 -0
- maxframe/lib/sparse/matrix.py +241 -0
- maxframe/lib/sparse/tests/__init__.py +15 -0
- maxframe/lib/sparse/tests/test_sparse.py +476 -0
- maxframe/lib/sparse/vector.py +150 -0
- maxframe/lib/tblib/LICENSE +20 -0
- maxframe/lib/tblib/__init__.py +327 -0
- maxframe/lib/tblib/cpython.py +83 -0
- maxframe/lib/tblib/decorators.py +44 -0
- maxframe/lib/tblib/pickling_support.py +90 -0
- maxframe/lib/tests/__init__.py +13 -0
- maxframe/lib/tests/test_wrapped_pickle.py +51 -0
- maxframe/lib/version.py +620 -0
- maxframe/lib/wrapped_pickle.py +139 -0
- maxframe/mixin.py +100 -0
- maxframe/odpsio/__init__.py +21 -0
- maxframe/odpsio/arrow.py +91 -0
- maxframe/odpsio/schema.py +364 -0
- maxframe/odpsio/tableio.py +322 -0
- maxframe/odpsio/tests/__init__.py +13 -0
- maxframe/odpsio/tests/test_arrow.py +88 -0
- maxframe/odpsio/tests/test_schema.py +297 -0
- maxframe/odpsio/tests/test_tableio.py +136 -0
- maxframe/odpsio/tests/test_volumeio.py +90 -0
- maxframe/odpsio/volumeio.py +95 -0
- maxframe/opcodes.py +590 -0
- maxframe/protocol.py +415 -0
- maxframe/remote/__init__.py +18 -0
- maxframe/remote/core.py +210 -0
- maxframe/remote/run_script.py +121 -0
- maxframe/serialization/__init__.py +26 -0
- maxframe/serialization/arrow.py +95 -0
- maxframe/serialization/core.cpython-310-darwin.so +0 -0
- maxframe/serialization/core.pxd +44 -0
- maxframe/serialization/core.pyi +61 -0
- maxframe/serialization/core.pyx +1094 -0
- maxframe/serialization/exception.py +86 -0
- maxframe/serialization/maxframe_objects.py +39 -0
- maxframe/serialization/numpy.py +91 -0
- maxframe/serialization/pandas.py +202 -0
- maxframe/serialization/scipy.py +71 -0
- maxframe/serialization/serializables/__init__.py +55 -0
- maxframe/serialization/serializables/core.py +262 -0
- maxframe/serialization/serializables/field.py +624 -0
- maxframe/serialization/serializables/field_type.py +589 -0
- maxframe/serialization/serializables/tests/__init__.py +13 -0
- maxframe/serialization/serializables/tests/test_field_type.py +121 -0
- maxframe/serialization/serializables/tests/test_serializable.py +250 -0
- maxframe/serialization/tests/__init__.py +13 -0
- maxframe/serialization/tests/test_serial.py +412 -0
- maxframe/session.py +1310 -0
- maxframe/tensor/__init__.py +183 -0
- maxframe/tensor/arithmetic/__init__.py +315 -0
- maxframe/tensor/arithmetic/abs.py +68 -0
- maxframe/tensor/arithmetic/absolute.py +68 -0
- maxframe/tensor/arithmetic/add.py +82 -0
- maxframe/tensor/arithmetic/angle.py +72 -0
- maxframe/tensor/arithmetic/arccos.py +104 -0
- maxframe/tensor/arithmetic/arccosh.py +91 -0
- maxframe/tensor/arithmetic/arcsin.py +94 -0
- maxframe/tensor/arithmetic/arcsinh.py +86 -0
- maxframe/tensor/arithmetic/arctan.py +106 -0
- maxframe/tensor/arithmetic/arctan2.py +128 -0
- maxframe/tensor/arithmetic/arctanh.py +86 -0
- maxframe/tensor/arithmetic/around.py +114 -0
- maxframe/tensor/arithmetic/bitand.py +95 -0
- maxframe/tensor/arithmetic/bitor.py +102 -0
- maxframe/tensor/arithmetic/bitxor.py +95 -0
- maxframe/tensor/arithmetic/cbrt.py +66 -0
- maxframe/tensor/arithmetic/ceil.py +71 -0
- maxframe/tensor/arithmetic/clip.py +165 -0
- maxframe/tensor/arithmetic/conj.py +74 -0
- maxframe/tensor/arithmetic/copysign.py +78 -0
- maxframe/tensor/arithmetic/core.py +544 -0
- maxframe/tensor/arithmetic/cos.py +85 -0
- maxframe/tensor/arithmetic/cosh.py +72 -0
- maxframe/tensor/arithmetic/deg2rad.py +72 -0
- maxframe/tensor/arithmetic/degrees.py +77 -0
- maxframe/tensor/arithmetic/divide.py +114 -0
- maxframe/tensor/arithmetic/equal.py +76 -0
- maxframe/tensor/arithmetic/exp.py +106 -0
- maxframe/tensor/arithmetic/exp2.py +67 -0
- maxframe/tensor/arithmetic/expm1.py +79 -0
- maxframe/tensor/arithmetic/fabs.py +74 -0
- maxframe/tensor/arithmetic/fix.py +69 -0
- maxframe/tensor/arithmetic/float_power.py +103 -0
- maxframe/tensor/arithmetic/floor.py +77 -0
- maxframe/tensor/arithmetic/floordiv.py +94 -0
- maxframe/tensor/arithmetic/fmax.py +105 -0
- maxframe/tensor/arithmetic/fmin.py +106 -0
- maxframe/tensor/arithmetic/fmod.py +99 -0
- maxframe/tensor/arithmetic/frexp.py +92 -0
- maxframe/tensor/arithmetic/greater.py +77 -0
- maxframe/tensor/arithmetic/greater_equal.py +69 -0
- maxframe/tensor/arithmetic/hypot.py +77 -0
- maxframe/tensor/arithmetic/i0.py +89 -0
- maxframe/tensor/arithmetic/imag.py +67 -0
- maxframe/tensor/arithmetic/invert.py +110 -0
- maxframe/tensor/arithmetic/isclose.py +115 -0
- maxframe/tensor/arithmetic/iscomplex.py +64 -0
- maxframe/tensor/arithmetic/isfinite.py +106 -0
- maxframe/tensor/arithmetic/isinf.py +103 -0
- maxframe/tensor/arithmetic/isnan.py +82 -0
- maxframe/tensor/arithmetic/isreal.py +63 -0
- maxframe/tensor/arithmetic/ldexp.py +99 -0
- maxframe/tensor/arithmetic/less.py +69 -0
- maxframe/tensor/arithmetic/less_equal.py +69 -0
- maxframe/tensor/arithmetic/log.py +92 -0
- maxframe/tensor/arithmetic/log10.py +85 -0
- maxframe/tensor/arithmetic/log1p.py +95 -0
- maxframe/tensor/arithmetic/log2.py +85 -0
- maxframe/tensor/arithmetic/logaddexp.py +80 -0
- maxframe/tensor/arithmetic/logaddexp2.py +78 -0
- maxframe/tensor/arithmetic/logical_and.py +81 -0
- maxframe/tensor/arithmetic/logical_not.py +74 -0
- maxframe/tensor/arithmetic/logical_or.py +82 -0
- maxframe/tensor/arithmetic/logical_xor.py +88 -0
- maxframe/tensor/arithmetic/lshift.py +82 -0
- maxframe/tensor/arithmetic/maximum.py +108 -0
- maxframe/tensor/arithmetic/minimum.py +108 -0
- maxframe/tensor/arithmetic/mod.py +104 -0
- maxframe/tensor/arithmetic/modf.py +83 -0
- maxframe/tensor/arithmetic/multiply.py +81 -0
- maxframe/tensor/arithmetic/nan_to_num.py +99 -0
- maxframe/tensor/arithmetic/negative.py +65 -0
- maxframe/tensor/arithmetic/nextafter.py +68 -0
- maxframe/tensor/arithmetic/not_equal.py +72 -0
- maxframe/tensor/arithmetic/positive.py +47 -0
- maxframe/tensor/arithmetic/power.py +106 -0
- maxframe/tensor/arithmetic/rad2deg.py +71 -0
- maxframe/tensor/arithmetic/radians.py +77 -0
- maxframe/tensor/arithmetic/real.py +70 -0
- maxframe/tensor/arithmetic/reciprocal.py +76 -0
- maxframe/tensor/arithmetic/rint.py +68 -0
- maxframe/tensor/arithmetic/rshift.py +81 -0
- maxframe/tensor/arithmetic/setimag.py +29 -0
- maxframe/tensor/arithmetic/setreal.py +29 -0
- maxframe/tensor/arithmetic/sign.py +81 -0
- maxframe/tensor/arithmetic/signbit.py +65 -0
- maxframe/tensor/arithmetic/sin.py +98 -0
- maxframe/tensor/arithmetic/sinc.py +102 -0
- maxframe/tensor/arithmetic/sinh.py +93 -0
- maxframe/tensor/arithmetic/spacing.py +72 -0
- maxframe/tensor/arithmetic/sqrt.py +81 -0
- maxframe/tensor/arithmetic/square.py +69 -0
- maxframe/tensor/arithmetic/subtract.py +81 -0
- maxframe/tensor/arithmetic/tan.py +88 -0
- maxframe/tensor/arithmetic/tanh.py +92 -0
- maxframe/tensor/arithmetic/tests/__init__.py +15 -0
- maxframe/tensor/arithmetic/tests/test_arithmetic.py +414 -0
- maxframe/tensor/arithmetic/truediv.py +104 -0
- maxframe/tensor/arithmetic/trunc.py +72 -0
- maxframe/tensor/arithmetic/utils.py +65 -0
- maxframe/tensor/array_utils.py +186 -0
- maxframe/tensor/base/__init__.py +34 -0
- maxframe/tensor/base/astype.py +119 -0
- maxframe/tensor/base/atleast_1d.py +74 -0
- maxframe/tensor/base/broadcast_to.py +89 -0
- maxframe/tensor/base/ravel.py +92 -0
- maxframe/tensor/base/tests/__init__.py +13 -0
- maxframe/tensor/base/tests/test_base.py +114 -0
- maxframe/tensor/base/transpose.py +125 -0
- maxframe/tensor/base/unique.py +205 -0
- maxframe/tensor/base/where.py +127 -0
- maxframe/tensor/core.py +724 -0
- maxframe/tensor/datasource/__init__.py +32 -0
- maxframe/tensor/datasource/arange.py +156 -0
- maxframe/tensor/datasource/array.py +415 -0
- maxframe/tensor/datasource/core.py +109 -0
- maxframe/tensor/datasource/empty.py +169 -0
- maxframe/tensor/datasource/from_dataframe.py +70 -0
- maxframe/tensor/datasource/from_dense.py +54 -0
- maxframe/tensor/datasource/from_sparse.py +47 -0
- maxframe/tensor/datasource/full.py +186 -0
- maxframe/tensor/datasource/ones.py +173 -0
- maxframe/tensor/datasource/scalar.py +40 -0
- maxframe/tensor/datasource/tests/__init__.py +13 -0
- maxframe/tensor/datasource/tests/test_datasource.py +278 -0
- maxframe/tensor/datasource/zeros.py +188 -0
- maxframe/tensor/fetch/__init__.py +15 -0
- maxframe/tensor/fetch/core.py +54 -0
- maxframe/tensor/indexing/__init__.py +47 -0
- maxframe/tensor/indexing/choose.py +196 -0
- maxframe/tensor/indexing/compress.py +124 -0
- maxframe/tensor/indexing/core.py +190 -0
- maxframe/tensor/indexing/extract.py +71 -0
- maxframe/tensor/indexing/fill_diagonal.py +183 -0
- maxframe/tensor/indexing/flatnonzero.py +60 -0
- maxframe/tensor/indexing/getitem.py +175 -0
- maxframe/tensor/indexing/nonzero.py +120 -0
- maxframe/tensor/indexing/setitem.py +132 -0
- maxframe/tensor/indexing/slice.py +29 -0
- maxframe/tensor/indexing/take.py +130 -0
- maxframe/tensor/indexing/tests/__init__.py +15 -0
- maxframe/tensor/indexing/tests/test_indexing.py +234 -0
- maxframe/tensor/indexing/unravel_index.py +103 -0
- maxframe/tensor/merge/__init__.py +15 -0
- maxframe/tensor/merge/stack.py +132 -0
- maxframe/tensor/merge/tests/__init__.py +13 -0
- maxframe/tensor/merge/tests/test_merge.py +52 -0
- maxframe/tensor/operators.py +123 -0
- maxframe/tensor/random/__init__.py +168 -0
- maxframe/tensor/random/beta.py +87 -0
- maxframe/tensor/random/binomial.py +137 -0
- maxframe/tensor/random/bytes.py +39 -0
- maxframe/tensor/random/chisquare.py +110 -0
- maxframe/tensor/random/choice.py +186 -0
- maxframe/tensor/random/core.py +234 -0
- maxframe/tensor/random/dirichlet.py +123 -0
- maxframe/tensor/random/exponential.py +94 -0
- maxframe/tensor/random/f.py +135 -0
- maxframe/tensor/random/gamma.py +128 -0
- maxframe/tensor/random/geometric.py +93 -0
- maxframe/tensor/random/gumbel.py +167 -0
- maxframe/tensor/random/hypergeometric.py +148 -0
- maxframe/tensor/random/laplace.py +133 -0
- maxframe/tensor/random/logistic.py +129 -0
- maxframe/tensor/random/lognormal.py +159 -0
- maxframe/tensor/random/logseries.py +122 -0
- maxframe/tensor/random/multinomial.py +133 -0
- maxframe/tensor/random/multivariate_normal.py +192 -0
- maxframe/tensor/random/negative_binomial.py +125 -0
- maxframe/tensor/random/noncentral_chisquare.py +132 -0
- maxframe/tensor/random/noncentral_f.py +126 -0
- maxframe/tensor/random/normal.py +143 -0
- maxframe/tensor/random/pareto.py +140 -0
- maxframe/tensor/random/permutation.py +104 -0
- maxframe/tensor/random/poisson.py +111 -0
- maxframe/tensor/random/power.py +142 -0
- maxframe/tensor/random/rand.py +82 -0
- maxframe/tensor/random/randint.py +121 -0
- maxframe/tensor/random/randn.py +96 -0
- maxframe/tensor/random/random_integers.py +123 -0
- maxframe/tensor/random/random_sample.py +86 -0
- maxframe/tensor/random/rayleigh.py +110 -0
- maxframe/tensor/random/shuffle.py +61 -0
- maxframe/tensor/random/standard_cauchy.py +105 -0
- maxframe/tensor/random/standard_exponential.py +72 -0
- maxframe/tensor/random/standard_gamma.py +120 -0
- maxframe/tensor/random/standard_normal.py +74 -0
- maxframe/tensor/random/standard_t.py +135 -0
- maxframe/tensor/random/tests/__init__.py +15 -0
- maxframe/tensor/random/tests/test_random.py +167 -0
- maxframe/tensor/random/triangular.py +119 -0
- maxframe/tensor/random/uniform.py +131 -0
- maxframe/tensor/random/vonmises.py +131 -0
- maxframe/tensor/random/wald.py +114 -0
- maxframe/tensor/random/weibull.py +140 -0
- maxframe/tensor/random/zipf.py +122 -0
- maxframe/tensor/rechunk/__init__.py +26 -0
- maxframe/tensor/rechunk/rechunk.py +43 -0
- maxframe/tensor/reduction/__init__.py +66 -0
- maxframe/tensor/reduction/all.py +103 -0
- maxframe/tensor/reduction/allclose.py +88 -0
- maxframe/tensor/reduction/any.py +105 -0
- maxframe/tensor/reduction/argmax.py +103 -0
- maxframe/tensor/reduction/argmin.py +103 -0
- maxframe/tensor/reduction/array_equal.py +64 -0
- maxframe/tensor/reduction/core.py +168 -0
- maxframe/tensor/reduction/count_nonzero.py +81 -0
- maxframe/tensor/reduction/cumprod.py +97 -0
- maxframe/tensor/reduction/cumsum.py +101 -0
- maxframe/tensor/reduction/max.py +120 -0
- maxframe/tensor/reduction/mean.py +123 -0
- maxframe/tensor/reduction/min.py +120 -0
- maxframe/tensor/reduction/nanargmax.py +82 -0
- maxframe/tensor/reduction/nanargmin.py +76 -0
- maxframe/tensor/reduction/nancumprod.py +91 -0
- maxframe/tensor/reduction/nancumsum.py +94 -0
- maxframe/tensor/reduction/nanmax.py +111 -0
- maxframe/tensor/reduction/nanmean.py +106 -0
- maxframe/tensor/reduction/nanmin.py +111 -0
- maxframe/tensor/reduction/nanprod.py +94 -0
- maxframe/tensor/reduction/nanstd.py +126 -0
- maxframe/tensor/reduction/nansum.py +115 -0
- maxframe/tensor/reduction/nanvar.py +149 -0
- maxframe/tensor/reduction/prod.py +130 -0
- maxframe/tensor/reduction/std.py +134 -0
- maxframe/tensor/reduction/sum.py +125 -0
- maxframe/tensor/reduction/tests/__init__.py +13 -0
- maxframe/tensor/reduction/tests/test_reduction.py +181 -0
- maxframe/tensor/reduction/var.py +176 -0
- maxframe/tensor/reshape/__init__.py +17 -0
- maxframe/tensor/reshape/reshape.py +188 -0
- maxframe/tensor/reshape/tests/__init__.py +15 -0
- maxframe/tensor/reshape/tests/test_reshape.py +37 -0
- maxframe/tensor/statistics/__init__.py +13 -0
- maxframe/tensor/statistics/percentile.py +175 -0
- maxframe/tensor/statistics/quantile.py +288 -0
- maxframe/tensor/ufunc/__init__.py +26 -0
- maxframe/tensor/ufunc/ufunc.py +200 -0
- maxframe/tensor/utils.py +718 -0
- maxframe/tests/__init__.py +13 -0
- maxframe/tests/test_codegen.py +69 -0
- maxframe/tests/test_protocol.py +144 -0
- maxframe/tests/test_utils.py +376 -0
- maxframe/tests/utils.py +164 -0
- maxframe/typing_.py +37 -0
- maxframe/udf.py +134 -0
- maxframe/utils.py +1114 -0
- maxframe-0.1.0b5.dist-info/METADATA +104 -0
- maxframe-0.1.0b5.dist-info/RECORD +647 -0
- maxframe-0.1.0b5.dist-info/WHEEL +5 -0
- maxframe-0.1.0b5.dist-info/top_level.txt +3 -0
- maxframe_client/__init__.py +17 -0
- maxframe_client/clients/__init__.py +13 -0
- maxframe_client/clients/framedriver.py +118 -0
- maxframe_client/clients/spe.py +104 -0
- maxframe_client/conftest.py +15 -0
- maxframe_client/fetcher.py +264 -0
- maxframe_client/session/__init__.py +22 -0
- maxframe_client/session/consts.py +36 -0
- maxframe_client/session/graph.py +119 -0
- maxframe_client/session/odps.py +482 -0
- maxframe_client/session/task.py +280 -0
- maxframe_client/session/tests/__init__.py +13 -0
- maxframe_client/session/tests/test_task.py +85 -0
- maxframe_client/tests/__init__.py +13 -0
- maxframe_client/tests/test_fetcher.py +89 -0
- 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
|