maxframe 0.1.0b5__cp311-cp311-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-311-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-311-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-311-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-311-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,86 @@
|
|
|
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 logging
|
|
16
|
+
import traceback
|
|
17
|
+
from typing import Dict, List
|
|
18
|
+
|
|
19
|
+
from ..errors import MaxFrameError
|
|
20
|
+
from ..lib import wrapped_pickle as pickle
|
|
21
|
+
from .core import Serializer, buffered, pickle_buffers, unpickle_buffers
|
|
22
|
+
|
|
23
|
+
logger = logging.getLogger(__name__)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class RemoteException(MaxFrameError):
|
|
27
|
+
def __init__(
|
|
28
|
+
self, messages: List[str], tracebacks: List[List[str]], buffers: List[bytes]
|
|
29
|
+
):
|
|
30
|
+
self.messages = messages
|
|
31
|
+
self.tracebacks = tracebacks
|
|
32
|
+
self.buffers = buffers
|
|
33
|
+
|
|
34
|
+
@classmethod
|
|
35
|
+
def from_exception(cls, exc: Exception):
|
|
36
|
+
try:
|
|
37
|
+
buffers = pickle_buffers(exc)
|
|
38
|
+
except (TypeError, pickle.PicklingError):
|
|
39
|
+
logger.exception("Cannot pickle exception %s", exc)
|
|
40
|
+
buffers = []
|
|
41
|
+
|
|
42
|
+
messages, tracebacks = [], []
|
|
43
|
+
while exc is not None:
|
|
44
|
+
messages.append(str(exc))
|
|
45
|
+
tracebacks.append(traceback.format_tb(exc.__traceback__))
|
|
46
|
+
exc = exc.__cause__
|
|
47
|
+
return RemoteException(messages, tracebacks, buffers)
|
|
48
|
+
|
|
49
|
+
def get_buffers(self) -> List[bytes]:
|
|
50
|
+
return self.buffers
|
|
51
|
+
|
|
52
|
+
def get(self) -> Exception:
|
|
53
|
+
return unpickle_buffers(self.buffers) if self.buffers else self
|
|
54
|
+
|
|
55
|
+
def __str__(self):
|
|
56
|
+
tbs = []
|
|
57
|
+
for msg, tb in zip(self.messages, self.tracebacks):
|
|
58
|
+
tbs.append("".join([msg + "\n"] + tb))
|
|
59
|
+
return "\nCaused by:\n".join(tbs)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class ExceptionSerializer(Serializer):
|
|
63
|
+
@buffered
|
|
64
|
+
def serial(self, obj: Exception, context: Dict):
|
|
65
|
+
if isinstance(obj, RemoteException):
|
|
66
|
+
messages, tracebacks, buffers = obj.messages, obj.tracebacks, obj.buffers
|
|
67
|
+
else:
|
|
68
|
+
remote_exc = RemoteException.from_exception(obj)
|
|
69
|
+
messages, tracebacks = remote_exc.messages, remote_exc.tracebacks
|
|
70
|
+
buffers = remote_exc.get_buffers()
|
|
71
|
+
return [messages, tracebacks], buffers, True
|
|
72
|
+
|
|
73
|
+
def deserial(self, serialized: List, context: Dict, subs: List):
|
|
74
|
+
messages, tracebacks = serialized[:2]
|
|
75
|
+
if subs and not pickle.is_unpickle_forbidden():
|
|
76
|
+
try:
|
|
77
|
+
return unpickle_buffers(subs)
|
|
78
|
+
except ImportError as ex:
|
|
79
|
+
logger.info(
|
|
80
|
+
"Failed to load error from module %s, will raise a normal error",
|
|
81
|
+
ex.name,
|
|
82
|
+
)
|
|
83
|
+
return RemoteException(messages, tracebacks, subs)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
ExceptionSerializer.register(Exception)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from typing import Any, Dict, List
|
|
16
|
+
|
|
17
|
+
try:
|
|
18
|
+
import scipy.sparse as sps
|
|
19
|
+
except ImportError: # pragma: no cover
|
|
20
|
+
sps = None
|
|
21
|
+
|
|
22
|
+
from ..lib.sparse.array import SparseNDArray
|
|
23
|
+
from .core import Serializer, buffered, deserialize, serialize
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class SparseNDArraySerializer(Serializer):
|
|
27
|
+
@buffered
|
|
28
|
+
def serial(self, obj: Any, context: Dict):
|
|
29
|
+
raw_header, raw_buffers = serialize(obj.raw, context)
|
|
30
|
+
return [raw_header, obj.shape], raw_buffers, True
|
|
31
|
+
|
|
32
|
+
def deserial(self, serialized: Dict, context: Dict, subs: List):
|
|
33
|
+
raw_header, obj_shape = serialized
|
|
34
|
+
raw_csr = deserialize(raw_header, subs)
|
|
35
|
+
return SparseNDArray(raw_csr, shape=tuple(obj_shape))
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
if sps: # pragma: no branch
|
|
39
|
+
SparseNDArraySerializer.register(SparseNDArray)
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from typing import Any, Dict, List
|
|
16
|
+
|
|
17
|
+
import numpy as np
|
|
18
|
+
|
|
19
|
+
from .core import Serializer, buffered
|
|
20
|
+
|
|
21
|
+
_TYPE_CHAR_NP_GENERIC = "G"
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class NDArraySerializer(Serializer):
|
|
25
|
+
@buffered
|
|
26
|
+
def serial(self, obj: np.generic, context: Dict):
|
|
27
|
+
order = "C"
|
|
28
|
+
if obj.flags.f_contiguous:
|
|
29
|
+
order = "F"
|
|
30
|
+
elif not obj.flags.c_contiguous:
|
|
31
|
+
obj = np.ascontiguousarray(obj)
|
|
32
|
+
try:
|
|
33
|
+
desc = np.lib.format.dtype_to_descr(obj.dtype)
|
|
34
|
+
dtype_new_order = None
|
|
35
|
+
except ValueError:
|
|
36
|
+
# for structured dtype, array[[field2, field1]] will create a view,
|
|
37
|
+
# and dtype_to_desc will fail due to the order
|
|
38
|
+
fields = obj.dtype.fields
|
|
39
|
+
new_fields = sorted(fields, key=lambda k: fields[k][1])
|
|
40
|
+
desc = np.lib.format.dtype_to_descr(obj.dtype[new_fields])
|
|
41
|
+
dtype_new_order = list(fields)
|
|
42
|
+
type_char = _TYPE_CHAR_NP_GENERIC if not isinstance(obj, np.ndarray) else None
|
|
43
|
+
|
|
44
|
+
header = dict(
|
|
45
|
+
type=type_char,
|
|
46
|
+
descr=desc,
|
|
47
|
+
dtype_new_order=dtype_new_order,
|
|
48
|
+
shape=list(obj.shape),
|
|
49
|
+
strides=list(obj.strides),
|
|
50
|
+
order=order,
|
|
51
|
+
)
|
|
52
|
+
flattened = obj.ravel(order=order)
|
|
53
|
+
if obj.dtype.hasobject:
|
|
54
|
+
is_leaf = False
|
|
55
|
+
data = flattened.tolist()
|
|
56
|
+
else:
|
|
57
|
+
is_leaf = True
|
|
58
|
+
data = memoryview(flattened.view("uint8").data)
|
|
59
|
+
return [header], [data], is_leaf
|
|
60
|
+
|
|
61
|
+
def deserial(self, serialized: List, context: Dict, subs: List[Any]):
|
|
62
|
+
header = serialized[0]
|
|
63
|
+
try:
|
|
64
|
+
dtype = np.lib.format.descr_to_dtype(header["descr"])
|
|
65
|
+
except AttributeError: # pragma: no cover
|
|
66
|
+
# for older numpy versions, descr_to_dtype is not implemented
|
|
67
|
+
dtype = np.dtype(header["descr"])
|
|
68
|
+
|
|
69
|
+
dtype_new_order = header["dtype_new_order"]
|
|
70
|
+
if dtype_new_order:
|
|
71
|
+
dtype = dtype[dtype_new_order]
|
|
72
|
+
if dtype.hasobject:
|
|
73
|
+
shape = header["shape"]
|
|
74
|
+
# fill empty object array
|
|
75
|
+
val = np.empty(shape, dtype=dtype)
|
|
76
|
+
val[(slice(None),) * len(shape)] = subs[0]
|
|
77
|
+
else:
|
|
78
|
+
val = np.ndarray(
|
|
79
|
+
shape=tuple(header["shape"]),
|
|
80
|
+
dtype=dtype,
|
|
81
|
+
buffer=subs[0],
|
|
82
|
+
strides=tuple(header["strides"]),
|
|
83
|
+
order=header["order"],
|
|
84
|
+
)
|
|
85
|
+
if header.get("type") == _TYPE_CHAR_NP_GENERIC:
|
|
86
|
+
return np.take(val, 0)
|
|
87
|
+
return val
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
NDArraySerializer.register(np.generic)
|
|
91
|
+
NDArraySerializer.register(np.ndarray)
|
|
@@ -0,0 +1,202 @@
|
|
|
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 datetime
|
|
16
|
+
import enum
|
|
17
|
+
from typing import Any, Dict, List
|
|
18
|
+
|
|
19
|
+
import pandas as pd
|
|
20
|
+
from pandas.api.extensions import ExtensionArray
|
|
21
|
+
from pandas.arrays import IntervalArray
|
|
22
|
+
|
|
23
|
+
from ..utils import no_default
|
|
24
|
+
from .core import Serializer, buffered
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class DataFrameSerializer(Serializer):
|
|
28
|
+
@buffered
|
|
29
|
+
def serial(self, obj: pd.DataFrame, context: Dict):
|
|
30
|
+
col_data = []
|
|
31
|
+
for _, col in obj.items():
|
|
32
|
+
if getattr(col.dtype, "hasobject", False):
|
|
33
|
+
col_data.append(col.tolist())
|
|
34
|
+
else:
|
|
35
|
+
col_data.append(col.values)
|
|
36
|
+
return [], [obj.dtypes, obj.index] + col_data, False
|
|
37
|
+
|
|
38
|
+
def deserial(
|
|
39
|
+
self, serialized: List, context: Dict, subs: List[Any]
|
|
40
|
+
) -> pd.DataFrame:
|
|
41
|
+
dtypes, idx = subs[:2]
|
|
42
|
+
df = pd.concat([pd.Series(d, index=idx) for d in subs[2:]], axis=1)
|
|
43
|
+
df.columns = dtypes.index
|
|
44
|
+
df.index = idx
|
|
45
|
+
return df.astype(dtypes)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class SeriesSerializer(Serializer):
|
|
49
|
+
@buffered
|
|
50
|
+
def serial(self, obj: pd.Series, context: Dict):
|
|
51
|
+
if getattr(obj.dtype, "hasobject", False):
|
|
52
|
+
data = obj.tolist()
|
|
53
|
+
else:
|
|
54
|
+
data = obj.values
|
|
55
|
+
return [], [obj.index, obj.name, obj.dtype, data], False
|
|
56
|
+
|
|
57
|
+
def deserial(self, serialized: List, context: Dict, subs: List[Any]) -> pd.Series:
|
|
58
|
+
idx, name, dtype, data = subs
|
|
59
|
+
return pd.Series(data, index=idx, name=name).astype(dtype)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
_TYPE_CHAR_MULTI_INDEX = "M"
|
|
63
|
+
_TYPE_CHAR_RANGE_INDEX = "R"
|
|
64
|
+
_TYPE_CHAR_CATEGORICAL_INDEX = "C"
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class IndexSerializer(Serializer):
|
|
68
|
+
@buffered
|
|
69
|
+
def serial(self, obj: pd.Index, context: Dict):
|
|
70
|
+
if isinstance(obj, pd.MultiIndex):
|
|
71
|
+
data = [obj.get_level_values(idx) for idx in range(obj.nlevels)]
|
|
72
|
+
header = [_TYPE_CHAR_MULTI_INDEX]
|
|
73
|
+
elif isinstance(obj, pd.RangeIndex):
|
|
74
|
+
data = [obj.name, obj.dtype]
|
|
75
|
+
header = [_TYPE_CHAR_RANGE_INDEX, obj.start, obj.stop, obj.step]
|
|
76
|
+
elif isinstance(obj, pd.CategoricalIndex):
|
|
77
|
+
data = [obj.name, obj.values]
|
|
78
|
+
header = [_TYPE_CHAR_CATEGORICAL_INDEX]
|
|
79
|
+
else:
|
|
80
|
+
if getattr(obj.dtype, "hasobject", False):
|
|
81
|
+
values = obj.tolist()
|
|
82
|
+
else:
|
|
83
|
+
values = obj.values
|
|
84
|
+
data = [obj.dtype, obj.name, values]
|
|
85
|
+
header = [None]
|
|
86
|
+
return header, data, len(data) == 0
|
|
87
|
+
|
|
88
|
+
def deserial(self, serialized: List, context: Dict, subs: List[Any]) -> pd.Index:
|
|
89
|
+
header = serialized
|
|
90
|
+
if header[0] == _TYPE_CHAR_MULTI_INDEX:
|
|
91
|
+
return pd.MultiIndex.from_arrays(subs)
|
|
92
|
+
elif header[0] == _TYPE_CHAR_RANGE_INDEX:
|
|
93
|
+
name, dtype = subs[:2]
|
|
94
|
+
start, stop, step = header[1:]
|
|
95
|
+
return pd.RangeIndex(start, stop, step, dtype=dtype, name=name)
|
|
96
|
+
elif header[0] == _TYPE_CHAR_CATEGORICAL_INDEX:
|
|
97
|
+
name, data = subs[:2]
|
|
98
|
+
return pd.CategoricalIndex(data, name=name)
|
|
99
|
+
elif header[0] is None: # Normal index
|
|
100
|
+
dtype, name, values = subs
|
|
101
|
+
return pd.Index(values, dtype=dtype, name=name)
|
|
102
|
+
else: # pragma: no cover
|
|
103
|
+
raise NotImplementedError(
|
|
104
|
+
f"Deserialization for index header label {header[0]} not implemented"
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
class CategoricalSerializer(Serializer):
|
|
109
|
+
@buffered
|
|
110
|
+
def serial(self, obj: pd.Categorical, context: Dict):
|
|
111
|
+
return [obj.ordered], [obj.codes, obj.dtype, obj.categories], False
|
|
112
|
+
|
|
113
|
+
def deserial(
|
|
114
|
+
self, serialized: List, context: Dict, subs: List[Any]
|
|
115
|
+
) -> pd.Categorical:
|
|
116
|
+
codes, dtype, categories = subs
|
|
117
|
+
ordered = serialized[0]
|
|
118
|
+
return pd.Categorical.from_codes(codes, categories, ordered=ordered)
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
_TYPE_CHAR_INTERVAL_ARRAY = "I"
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
class ArraySerializer(Serializer):
|
|
125
|
+
@buffered
|
|
126
|
+
def serial(self, obj: ExtensionArray, context: Dict):
|
|
127
|
+
ser_type = None
|
|
128
|
+
dtype = obj.dtype
|
|
129
|
+
if isinstance(obj.dtype, pd.IntervalDtype):
|
|
130
|
+
ser_type = _TYPE_CHAR_INTERVAL_ARRAY
|
|
131
|
+
data_parts = [obj.left, obj.right]
|
|
132
|
+
elif isinstance(obj.dtype, pd.StringDtype):
|
|
133
|
+
if hasattr(obj, "tolist"):
|
|
134
|
+
data_parts = [obj.tolist()]
|
|
135
|
+
else:
|
|
136
|
+
data_parts = [obj.to_numpy().tolist()]
|
|
137
|
+
else:
|
|
138
|
+
data_parts = [getattr(obj, "_data")]
|
|
139
|
+
return [ser_type], [dtype] + data_parts, False
|
|
140
|
+
|
|
141
|
+
def deserial(self, serialized: List, context: Dict, subs: List):
|
|
142
|
+
if serialized[0] == _TYPE_CHAR_INTERVAL_ARRAY:
|
|
143
|
+
dtype, left, right = subs
|
|
144
|
+
return IntervalArray.from_arrays(left, right, dtype=dtype)
|
|
145
|
+
else:
|
|
146
|
+
dtype, data = subs
|
|
147
|
+
return pd.array(data, dtype)
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
class PdTimestampSerializer(Serializer):
|
|
151
|
+
def serial(self, obj: pd.Timestamp, context: Dict):
|
|
152
|
+
if obj.tz:
|
|
153
|
+
zone_info = [obj.tz]
|
|
154
|
+
ts = obj.timestamp()
|
|
155
|
+
else:
|
|
156
|
+
zone_info = []
|
|
157
|
+
ts = obj.to_pydatetime().timestamp()
|
|
158
|
+
return (
|
|
159
|
+
[int(ts), obj.microsecond, obj.nanosecond],
|
|
160
|
+
zone_info,
|
|
161
|
+
bool(zone_info),
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
def deserial(self, serialized: List, context: Dict, subs: List):
|
|
165
|
+
if subs:
|
|
166
|
+
val = pd.Timestamp.utcfromtimestamp(serialized[0]).replace(
|
|
167
|
+
microsecond=serialized[1], nanosecond=serialized[2]
|
|
168
|
+
)
|
|
169
|
+
val = val.replace(tzinfo=datetime.timezone.utc).tz_convert(subs[0])
|
|
170
|
+
else:
|
|
171
|
+
val = pd.Timestamp.fromtimestamp(serialized[0]).replace(
|
|
172
|
+
microsecond=serialized[1], nanosecond=serialized[2]
|
|
173
|
+
)
|
|
174
|
+
return val
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
class PdTimedeltaSerializer(Serializer):
|
|
178
|
+
def serial(self, obj: pd.Timedelta, context: Dict):
|
|
179
|
+
return [int(obj.seconds), obj.microseconds, obj.nanoseconds], [], True
|
|
180
|
+
|
|
181
|
+
def deserial(self, serialized: List, context: Dict, subs: List):
|
|
182
|
+
return pd.Timedelta(
|
|
183
|
+
seconds=serialized[0], microseconds=serialized[1], nanoseconds=serialized[2]
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
class NoDefaultSerializer(Serializer):
|
|
188
|
+
def serial(self, obj: enum.Enum, context: Dict):
|
|
189
|
+
return [], [], True
|
|
190
|
+
|
|
191
|
+
def deserial(self, serialized: List, context: Dict, subs: List):
|
|
192
|
+
return no_default
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
DataFrameSerializer.register(pd.DataFrame)
|
|
196
|
+
SeriesSerializer.register(pd.Series)
|
|
197
|
+
IndexSerializer.register(pd.Index)
|
|
198
|
+
CategoricalSerializer.register(pd.Categorical)
|
|
199
|
+
ArraySerializer.register(ExtensionArray)
|
|
200
|
+
PdTimestampSerializer.register(pd.Timestamp)
|
|
201
|
+
PdTimedeltaSerializer.register(pd.Timedelta)
|
|
202
|
+
NoDefaultSerializer.register(type(no_default))
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from typing import Any, Dict, List
|
|
16
|
+
|
|
17
|
+
import numpy as np
|
|
18
|
+
|
|
19
|
+
try:
|
|
20
|
+
import scipy.sparse as sps
|
|
21
|
+
except ImportError: # pragma: no cover
|
|
22
|
+
sps = None
|
|
23
|
+
|
|
24
|
+
from .core import Serializer, buffered, deserialize, serialize
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class CsrMatrixSerializer(Serializer):
|
|
28
|
+
@buffered
|
|
29
|
+
def serial(self, obj: Any, context: Dict):
|
|
30
|
+
data_header, data_buffers = serialize(obj.data)
|
|
31
|
+
idx_header, idx_buffers = serialize(obj.indices)
|
|
32
|
+
indptr_header, indptr_buffers = serialize(obj.indptr)
|
|
33
|
+
header = [
|
|
34
|
+
data_header, # data_header
|
|
35
|
+
len(data_buffers), # data_buf_num
|
|
36
|
+
idx_header, # idx_header
|
|
37
|
+
len(idx_buffers), # idx_buf_num
|
|
38
|
+
indptr_header, # indptr_header
|
|
39
|
+
obj.shape, # shape
|
|
40
|
+
]
|
|
41
|
+
return header, data_buffers + idx_buffers + indptr_buffers, True
|
|
42
|
+
|
|
43
|
+
def deserial(self, serialized: List, context: Dict, subs: List):
|
|
44
|
+
(
|
|
45
|
+
data_header,
|
|
46
|
+
data_buf_num,
|
|
47
|
+
idx_header,
|
|
48
|
+
idx_buf_num,
|
|
49
|
+
indptr_header,
|
|
50
|
+
shape,
|
|
51
|
+
) = serialized
|
|
52
|
+
data_buffers = subs[:data_buf_num]
|
|
53
|
+
idx_buffers = subs[data_buf_num : data_buf_num + idx_buf_num]
|
|
54
|
+
indptr_buffers = subs[data_buf_num + idx_buf_num :]
|
|
55
|
+
|
|
56
|
+
data = deserialize(data_header, data_buffers)
|
|
57
|
+
indices = deserialize(idx_header, idx_buffers)
|
|
58
|
+
indptr = deserialize(indptr_header, indptr_buffers)
|
|
59
|
+
shape = tuple(shape)
|
|
60
|
+
|
|
61
|
+
empty_arr = np.zeros(0, dtype=data.dtype)
|
|
62
|
+
|
|
63
|
+
target_csr = sps.coo_matrix(
|
|
64
|
+
(empty_arr, (empty_arr,) * 2), dtype=data.dtype, shape=shape
|
|
65
|
+
).tocsr()
|
|
66
|
+
target_csr.data, target_csr.indices, target_csr.indptr = data, indices, indptr
|
|
67
|
+
return target_csr
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
if sps: # pragma: no branch
|
|
71
|
+
CsrMatrixSerializer.register(sps.csr_matrix)
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from .core import Serializable, SerializableMeta
|
|
16
|
+
from .field import (
|
|
17
|
+
AnyField,
|
|
18
|
+
BoolField,
|
|
19
|
+
BytesField,
|
|
20
|
+
Complex64Field,
|
|
21
|
+
Complex128Field,
|
|
22
|
+
DataFrameField,
|
|
23
|
+
DataTypeField,
|
|
24
|
+
Datetime64Field,
|
|
25
|
+
DictField,
|
|
26
|
+
EnumField,
|
|
27
|
+
Float16Field,
|
|
28
|
+
Float32Field,
|
|
29
|
+
Float64Field,
|
|
30
|
+
FunctionField,
|
|
31
|
+
IdentityField,
|
|
32
|
+
IndexField,
|
|
33
|
+
Int8Field,
|
|
34
|
+
Int16Field,
|
|
35
|
+
Int32Field,
|
|
36
|
+
Int64Field,
|
|
37
|
+
IntervalArrayField,
|
|
38
|
+
KeyField,
|
|
39
|
+
ListField,
|
|
40
|
+
NamedTupleField,
|
|
41
|
+
NDArrayField,
|
|
42
|
+
OneOfField,
|
|
43
|
+
ReferenceField,
|
|
44
|
+
SeriesField,
|
|
45
|
+
SliceField,
|
|
46
|
+
StringField,
|
|
47
|
+
Timedelta64Field,
|
|
48
|
+
TupleField,
|
|
49
|
+
TZInfoField,
|
|
50
|
+
UInt8Field,
|
|
51
|
+
UInt16Field,
|
|
52
|
+
UInt32Field,
|
|
53
|
+
UInt64Field,
|
|
54
|
+
)
|
|
55
|
+
from .field_type import FieldTypes
|