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,256 @@
|
|
|
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 pandas as pd
|
|
16
|
+
|
|
17
|
+
from ... import opcodes
|
|
18
|
+
from ...core import OutputType
|
|
19
|
+
from ...serialization.serializables import AnyField, Int8Field, Int64Field, KeyField
|
|
20
|
+
from ...utils import no_default, pd_release_version
|
|
21
|
+
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
22
|
+
from ..utils import build_df, build_series, parse_index, validate_axis
|
|
23
|
+
|
|
24
|
+
_need_consolidate = pd.__version__ in ("1.1.0", "1.3.0", "1.3.1")
|
|
25
|
+
_enable_no_default = pd_release_version[:2] > (1, 1)
|
|
26
|
+
_with_column_freq_bug = (1, 2, 0) <= pd_release_version < (1, 4, 3)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class DataFrameShift(DataFrameOperator, DataFrameOperatorMixin):
|
|
30
|
+
_op_type_ = opcodes.SHIFT
|
|
31
|
+
|
|
32
|
+
_input = KeyField("input")
|
|
33
|
+
periods = Int64Field("periods", default=None)
|
|
34
|
+
freq = AnyField("freq", default=None)
|
|
35
|
+
axis = Int8Field("axis", default=None)
|
|
36
|
+
fill_value = AnyField("fill_value", default=None)
|
|
37
|
+
|
|
38
|
+
@property
|
|
39
|
+
def input(self):
|
|
40
|
+
return self._input
|
|
41
|
+
|
|
42
|
+
def _set_inputs(self, inputs):
|
|
43
|
+
super()._set_inputs(inputs)
|
|
44
|
+
self._input = self._inputs[0]
|
|
45
|
+
|
|
46
|
+
def _call_dataframe(self, df):
|
|
47
|
+
test_df = build_df(df)
|
|
48
|
+
result_df = test_df.shift(
|
|
49
|
+
periods=self.periods,
|
|
50
|
+
freq=self.freq,
|
|
51
|
+
axis=self.axis,
|
|
52
|
+
fill_value=self.fill_value,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
if self.freq is None:
|
|
56
|
+
# shift data
|
|
57
|
+
index_value = df.index_value
|
|
58
|
+
columns_value = df.columns_value
|
|
59
|
+
else:
|
|
60
|
+
# shift index
|
|
61
|
+
if self.axis == 0:
|
|
62
|
+
index_value = self._get_index_value(
|
|
63
|
+
df.index_value, self.periods, self.freq
|
|
64
|
+
)
|
|
65
|
+
columns_value = df.columns_value
|
|
66
|
+
else:
|
|
67
|
+
columns_value = parse_index(result_df.dtypes.index, store_data=True)
|
|
68
|
+
index_value = df.index_value
|
|
69
|
+
|
|
70
|
+
return self.new_dataframe(
|
|
71
|
+
[df],
|
|
72
|
+
shape=df.shape,
|
|
73
|
+
dtypes=result_df.dtypes,
|
|
74
|
+
index_value=index_value,
|
|
75
|
+
columns_value=columns_value,
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
def _call_series(self, series):
|
|
79
|
+
test_series = build_series(series)
|
|
80
|
+
result_series = test_series.shift(
|
|
81
|
+
periods=self.periods,
|
|
82
|
+
freq=self.freq,
|
|
83
|
+
axis=self.axis,
|
|
84
|
+
fill_value=self.fill_value,
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
index_value = series.index_value
|
|
88
|
+
if self.freq is not None:
|
|
89
|
+
# shift index
|
|
90
|
+
index_value = self._get_index_value(index_value, self.periods, self.freq)
|
|
91
|
+
|
|
92
|
+
return self.new_series(
|
|
93
|
+
[series],
|
|
94
|
+
shape=series.shape,
|
|
95
|
+
index_value=index_value,
|
|
96
|
+
dtype=result_series.dtype,
|
|
97
|
+
name=series.name,
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
def __call__(self, df_or_series):
|
|
101
|
+
if df_or_series.op.output_types[0] == OutputType.dataframe:
|
|
102
|
+
self.output_types = [OutputType.dataframe]
|
|
103
|
+
return self._call_dataframe(df_or_series)
|
|
104
|
+
else:
|
|
105
|
+
assert df_or_series.op.output_types[0] == OutputType.series
|
|
106
|
+
self.output_types = [OutputType.series]
|
|
107
|
+
return self._call_series(df_or_series)
|
|
108
|
+
|
|
109
|
+
@staticmethod
|
|
110
|
+
def _get_index_value(input_index_value, periods, freq):
|
|
111
|
+
if (
|
|
112
|
+
not input_index_value.has_value()
|
|
113
|
+
and input_index_value.min_val is not None
|
|
114
|
+
and input_index_value.max_val is not None
|
|
115
|
+
and freq is not None
|
|
116
|
+
and input_index_value.is_monotonic_increasing_or_decreasing
|
|
117
|
+
):
|
|
118
|
+
pd_index = pd.Index(
|
|
119
|
+
[input_index_value.min_val, input_index_value.max_val]
|
|
120
|
+
).shift(periods=periods, freq=freq)
|
|
121
|
+
index_value = parse_index(pd_index)
|
|
122
|
+
index_value.value._min_val_close = input_index_value.min_val_close
|
|
123
|
+
index_value.value._max_val_close = input_index_value.max_val_close
|
|
124
|
+
return index_value
|
|
125
|
+
else:
|
|
126
|
+
pd_index = input_index_value.to_pandas()
|
|
127
|
+
return parse_index(pd_index, periods, freq)
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def shift(df_or_series, periods=1, freq=None, axis=0, fill_value=None):
|
|
131
|
+
"""
|
|
132
|
+
Shift index by desired number of periods with an optional time `freq`.
|
|
133
|
+
|
|
134
|
+
When `freq` is not passed, shift the index without realigning the data.
|
|
135
|
+
If `freq` is passed (in this case, the index must be date or datetime,
|
|
136
|
+
or it will raise a `NotImplementedError`), the index will be
|
|
137
|
+
increased using the periods and the `freq`.
|
|
138
|
+
|
|
139
|
+
Parameters
|
|
140
|
+
----------
|
|
141
|
+
periods : int
|
|
142
|
+
Number of periods to shift. Can be positive or negative.
|
|
143
|
+
freq : DateOffset, tseries.offsets, timedelta, or str, optional
|
|
144
|
+
Offset to use from the tseries module or time rule (e.g. 'EOM').
|
|
145
|
+
If `freq` is specified then the index values are shifted but the
|
|
146
|
+
data is not realigned. That is, use `freq` if you would like to
|
|
147
|
+
extend the index when shifting and preserve the original data.
|
|
148
|
+
axis : {0 or 'index', 1 or 'columns', None}, default None
|
|
149
|
+
Shift direction.
|
|
150
|
+
fill_value : object, optional
|
|
151
|
+
The scalar value to use for newly introduced missing values.
|
|
152
|
+
the default depends on the dtype of `self`.
|
|
153
|
+
For numeric data, ``np.nan`` is used.
|
|
154
|
+
For datetime, timedelta, or period data, etc. :attr:`NaT` is used.
|
|
155
|
+
For extension dtypes, ``self.dtype.na_value`` is used.
|
|
156
|
+
|
|
157
|
+
Returns
|
|
158
|
+
-------
|
|
159
|
+
DataFrame or Series
|
|
160
|
+
Copy of input object, shifted.
|
|
161
|
+
|
|
162
|
+
See Also
|
|
163
|
+
--------
|
|
164
|
+
Index.shift : Shift values of Index.
|
|
165
|
+
DatetimeIndex.shift : Shift values of DatetimeIndex.
|
|
166
|
+
PeriodIndex.shift : Shift values of PeriodIndex.
|
|
167
|
+
tshift : Shift the time index, using the index's frequency if
|
|
168
|
+
available.
|
|
169
|
+
|
|
170
|
+
Examples
|
|
171
|
+
--------
|
|
172
|
+
>>> import maxframe.dataframe as md
|
|
173
|
+
|
|
174
|
+
>>> df = md.DataFrame({'Col1': [10, 20, 15, 30, 45],
|
|
175
|
+
... 'Col2': [13, 23, 18, 33, 48],
|
|
176
|
+
... 'Col3': [17, 27, 22, 37, 52]})
|
|
177
|
+
|
|
178
|
+
>>> df.shift(periods=3).execute()
|
|
179
|
+
Col1 Col2 Col3
|
|
180
|
+
0 NaN NaN NaN
|
|
181
|
+
1 NaN NaN NaN
|
|
182
|
+
2 NaN NaN NaN
|
|
183
|
+
3 10.0 13.0 17.0
|
|
184
|
+
4 20.0 23.0 27.0
|
|
185
|
+
|
|
186
|
+
>>> df.shift(periods=1, axis='columns').execute()
|
|
187
|
+
Col1 Col2 Col3
|
|
188
|
+
0 NaN 10.0 13.0
|
|
189
|
+
1 NaN 20.0 23.0
|
|
190
|
+
2 NaN 15.0 18.0
|
|
191
|
+
3 NaN 30.0 33.0
|
|
192
|
+
4 NaN 45.0 48.0
|
|
193
|
+
|
|
194
|
+
>>> df.shift(periods=3, fill_value=0).execute()
|
|
195
|
+
Col1 Col2 Col3
|
|
196
|
+
0 0 0 0
|
|
197
|
+
1 0 0 0
|
|
198
|
+
2 0 0 0
|
|
199
|
+
3 10 13 17
|
|
200
|
+
4 20 23 27
|
|
201
|
+
"""
|
|
202
|
+
axis = validate_axis(axis, df_or_series)
|
|
203
|
+
if periods == 0:
|
|
204
|
+
return df_or_series.copy()
|
|
205
|
+
if fill_value is no_default: # pragma: no cover
|
|
206
|
+
if not _enable_no_default or (
|
|
207
|
+
_with_column_freq_bug and axis == 1 and freq is not None
|
|
208
|
+
):
|
|
209
|
+
# pandas shift shows different behavior for axis=1 when freq is specified,
|
|
210
|
+
# see https://github.com/pandas-dev/pandas/issues/47039 for details.
|
|
211
|
+
fill_value = None
|
|
212
|
+
op = DataFrameShift(periods=periods, freq=freq, axis=axis, fill_value=fill_value)
|
|
213
|
+
return op(df_or_series)
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
def tshift(df_or_series, periods: int = 1, freq=None, axis=0):
|
|
217
|
+
"""
|
|
218
|
+
Shift the time index, using the index's frequency if available.
|
|
219
|
+
|
|
220
|
+
Parameters
|
|
221
|
+
----------
|
|
222
|
+
periods : int
|
|
223
|
+
Number of periods to move, can be positive or negative.
|
|
224
|
+
freq : DateOffset, timedelta, or str, default None
|
|
225
|
+
Increment to use from the tseries module
|
|
226
|
+
or time rule expressed as a string (e.g. 'EOM').
|
|
227
|
+
axis : {0 or ‘index’, 1 or ‘columns’, None}, default 0
|
|
228
|
+
Corresponds to the axis that contains the Index.
|
|
229
|
+
|
|
230
|
+
Returns
|
|
231
|
+
-------
|
|
232
|
+
shifted : Series/DataFrame
|
|
233
|
+
|
|
234
|
+
Notes
|
|
235
|
+
-----
|
|
236
|
+
If freq is not specified then tries to use the freq or inferred_freq
|
|
237
|
+
attributes of the index. If neither of those attributes exist, a
|
|
238
|
+
ValueError is thrown
|
|
239
|
+
"""
|
|
240
|
+
axis = validate_axis(axis, df_or_series)
|
|
241
|
+
index = (
|
|
242
|
+
df_or_series.index_value.to_pandas()
|
|
243
|
+
if axis == 0
|
|
244
|
+
else df_or_series.columns_value.to_pandas()
|
|
245
|
+
)
|
|
246
|
+
|
|
247
|
+
if freq is None:
|
|
248
|
+
freq = getattr(index, "freq", None)
|
|
249
|
+
|
|
250
|
+
if freq is None: # pragma: no cover
|
|
251
|
+
freq = getattr(index, "inferred_freq", None)
|
|
252
|
+
|
|
253
|
+
if freq is None:
|
|
254
|
+
raise ValueError("Freq was not given and was not set in the index")
|
|
255
|
+
|
|
256
|
+
return shift(df_or_series, periods=periods, freq=freq, axis=axis)
|
|
@@ -0,0 +1,238 @@
|
|
|
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 List, Union
|
|
16
|
+
|
|
17
|
+
import numpy as np
|
|
18
|
+
import pandas as pd
|
|
19
|
+
|
|
20
|
+
from ... import opcodes
|
|
21
|
+
from ...serialization.serializables import AnyField, BoolField, KeyField
|
|
22
|
+
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
23
|
+
from ..utils import build_df, parse_index
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class DataFrameStack(DataFrameOperator, DataFrameOperatorMixin):
|
|
27
|
+
_op_type_ = opcodes.STACK
|
|
28
|
+
|
|
29
|
+
input_df = KeyField("input_df", default=None)
|
|
30
|
+
level = AnyField("level", default=None)
|
|
31
|
+
dropna = BoolField("dropna", default=None)
|
|
32
|
+
|
|
33
|
+
def _set_inputs(self, inputs):
|
|
34
|
+
super()._set_inputs(inputs)
|
|
35
|
+
self._input_df = self._inputs[0]
|
|
36
|
+
|
|
37
|
+
@classmethod
|
|
38
|
+
def _calc_size(cls, size: int, level: Union[List, int], dtypes: pd.Series):
|
|
39
|
+
index = dtypes.index
|
|
40
|
+
|
|
41
|
+
if not isinstance(index, pd.MultiIndex):
|
|
42
|
+
return size * len(index)
|
|
43
|
+
|
|
44
|
+
if isinstance(level, int):
|
|
45
|
+
level = [level]
|
|
46
|
+
return size * np.prod([index.levshape[lev] for lev in level]).item()
|
|
47
|
+
|
|
48
|
+
def __call__(self, input_df):
|
|
49
|
+
test_df = build_df(input_df)
|
|
50
|
+
test_df = test_df.stack(level=self.level, dropna=self.dropna)
|
|
51
|
+
if self.dropna:
|
|
52
|
+
size = np.nan
|
|
53
|
+
else:
|
|
54
|
+
size = self._calc_size(input_df.shape[0], self.level, input_df.dtypes)
|
|
55
|
+
if test_df.ndim == 1:
|
|
56
|
+
shape = (size,)
|
|
57
|
+
return self.new_series(
|
|
58
|
+
[input_df],
|
|
59
|
+
shape=shape,
|
|
60
|
+
dtype=test_df.dtype,
|
|
61
|
+
index_value=parse_index(test_df.index, input_df),
|
|
62
|
+
name=test_df.name,
|
|
63
|
+
)
|
|
64
|
+
else:
|
|
65
|
+
shape = (size, test_df.shape[1])
|
|
66
|
+
return self.new_dataframe(
|
|
67
|
+
[input_df],
|
|
68
|
+
shape=shape,
|
|
69
|
+
dtypes=test_df.dtypes,
|
|
70
|
+
index_value=parse_index(test_df.index, input_df),
|
|
71
|
+
columns_value=parse_index(test_df.columns, store_data=True),
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def stack(df, level=-1, dropna=True):
|
|
76
|
+
"""
|
|
77
|
+
Stack the prescribed level(s) from columns to index.
|
|
78
|
+
|
|
79
|
+
Return a reshaped DataFrame or Series having a multi-level
|
|
80
|
+
index with one or more new inner-most levels compared to the current
|
|
81
|
+
DataFrame. The new inner-most levels are created by pivoting the
|
|
82
|
+
columns of the current dataframe:
|
|
83
|
+
|
|
84
|
+
- if the columns have a single level, the output is a Series;
|
|
85
|
+
- if the columns have multiple levels, the new index
|
|
86
|
+
level(s) is (are) taken from the prescribed level(s) and
|
|
87
|
+
the output is a DataFrame.
|
|
88
|
+
|
|
89
|
+
Parameters
|
|
90
|
+
----------
|
|
91
|
+
level : int, str, list, default -1
|
|
92
|
+
Level(s) to stack from the column axis onto the index
|
|
93
|
+
axis, defined as one index or label, or a list of indices
|
|
94
|
+
or labels.
|
|
95
|
+
dropna : bool, default True
|
|
96
|
+
Whether to drop rows in the resulting Frame/Series with
|
|
97
|
+
missing values. Stacking a column level onto the index
|
|
98
|
+
axis can create combinations of index and column values
|
|
99
|
+
that are missing from the original dataframe. See Examples
|
|
100
|
+
section.
|
|
101
|
+
|
|
102
|
+
Returns
|
|
103
|
+
-------
|
|
104
|
+
DataFrame or Series
|
|
105
|
+
Stacked dataframe or series.
|
|
106
|
+
|
|
107
|
+
See Also
|
|
108
|
+
--------
|
|
109
|
+
DataFrame.unstack : Unstack prescribed level(s) from index axis
|
|
110
|
+
onto column axis.
|
|
111
|
+
DataFrame.pivot : Reshape dataframe from long format to wide
|
|
112
|
+
format.
|
|
113
|
+
DataFrame.pivot_table : Create a spreadsheet-style pivot table
|
|
114
|
+
as a DataFrame.
|
|
115
|
+
|
|
116
|
+
Notes
|
|
117
|
+
-----
|
|
118
|
+
The function is named by analogy with a collection of books
|
|
119
|
+
being reorganized from being side by side on a horizontal
|
|
120
|
+
position (the columns of the dataframe) to being stacked
|
|
121
|
+
vertically on top of each other (in the index of the
|
|
122
|
+
dataframe).
|
|
123
|
+
|
|
124
|
+
Examples
|
|
125
|
+
--------
|
|
126
|
+
**Single level columns**
|
|
127
|
+
|
|
128
|
+
>>> import maxframe.dataframe as md
|
|
129
|
+
>>> df_single_level_cols = md.DataFrame([[0, 1], [2, 3]],
|
|
130
|
+
... index=['cat', 'dog'],
|
|
131
|
+
... columns=['weight', 'height'])
|
|
132
|
+
|
|
133
|
+
Stacking a dataframe with a single level column axis returns a Series:
|
|
134
|
+
|
|
135
|
+
>>> df_single_level_cols.execute()
|
|
136
|
+
weight height
|
|
137
|
+
cat 0 1
|
|
138
|
+
dog 2 3
|
|
139
|
+
>>> df_single_level_cols.stack().execute()
|
|
140
|
+
cat weight 0
|
|
141
|
+
height 1
|
|
142
|
+
dog weight 2
|
|
143
|
+
height 3
|
|
144
|
+
dtype: int64
|
|
145
|
+
|
|
146
|
+
**Multi level columns: simple case**
|
|
147
|
+
|
|
148
|
+
>>> multicol1 = pd.MultiIndex.from_tuples([('weight', 'kg'),
|
|
149
|
+
... ('weight', 'pounds')])
|
|
150
|
+
>>> df_multi_level_cols1 = md.DataFrame([[1, 2], [2, 4]],
|
|
151
|
+
... index=['cat', 'dog'],
|
|
152
|
+
... columns=multicol1)
|
|
153
|
+
|
|
154
|
+
Stacking a dataframe with a multi-level column axis:
|
|
155
|
+
|
|
156
|
+
>>> df_multi_level_cols1.execute()
|
|
157
|
+
weight
|
|
158
|
+
kg pounds
|
|
159
|
+
cat 1 2
|
|
160
|
+
dog 2 4
|
|
161
|
+
>>> df_multi_level_cols1.stack().execute()
|
|
162
|
+
weight
|
|
163
|
+
cat kg 1
|
|
164
|
+
pounds 2
|
|
165
|
+
dog kg 2
|
|
166
|
+
pounds 4
|
|
167
|
+
|
|
168
|
+
**Missing values**
|
|
169
|
+
|
|
170
|
+
>>> multicol2 = pd.MultiIndex.from_tuples([('weight', 'kg'),
|
|
171
|
+
... ('height', 'm')])
|
|
172
|
+
>>> df_multi_level_cols2 = md.DataFrame([[1.0, 2.0], [3.0, 4.0]],
|
|
173
|
+
... index=['cat', 'dog'],
|
|
174
|
+
... columns=multicol2)
|
|
175
|
+
|
|
176
|
+
It is common to have missing values when stacking a dataframe
|
|
177
|
+
with multi-level columns, as the stacked dataframe typically
|
|
178
|
+
has more values than the original dataframe. Missing values
|
|
179
|
+
are filled with NaNs:
|
|
180
|
+
|
|
181
|
+
>>> df_multi_level_cols2.execute()
|
|
182
|
+
weight height
|
|
183
|
+
kg m
|
|
184
|
+
cat 1.0 2.0
|
|
185
|
+
dog 3.0 4.0
|
|
186
|
+
>>> df_multi_level_cols2.stack().execute()
|
|
187
|
+
height weight
|
|
188
|
+
cat kg NaN 1.0
|
|
189
|
+
m 2.0 NaN
|
|
190
|
+
dog kg NaN 3.0
|
|
191
|
+
m 4.0 NaN
|
|
192
|
+
|
|
193
|
+
**Prescribing the level(s) to be stacked**
|
|
194
|
+
|
|
195
|
+
The first parameter controls which level or levels are stacked:
|
|
196
|
+
|
|
197
|
+
>>> df_multi_level_cols2.stack(0).execute()
|
|
198
|
+
kg m
|
|
199
|
+
cat height NaN 2.0
|
|
200
|
+
weight 1.0 NaN
|
|
201
|
+
dog height NaN 4.0
|
|
202
|
+
weight 3.0 NaN
|
|
203
|
+
>>> df_multi_level_cols2.stack([0, 1]).execute()
|
|
204
|
+
cat height m 2.0
|
|
205
|
+
weight kg 1.0
|
|
206
|
+
dog height m 4.0
|
|
207
|
+
weight kg 3.0
|
|
208
|
+
dtype: float64
|
|
209
|
+
|
|
210
|
+
**Dropping missing values**
|
|
211
|
+
|
|
212
|
+
>>> df_multi_level_cols3 = md.DataFrame([[None, 1.0], [2.0, 3.0]],
|
|
213
|
+
... index=['cat', 'dog'],
|
|
214
|
+
... columns=multicol2)
|
|
215
|
+
|
|
216
|
+
Note that rows where all values are missing are dropped by
|
|
217
|
+
default but this behaviour can be controlled via the dropna
|
|
218
|
+
keyword parameter:
|
|
219
|
+
|
|
220
|
+
>>> df_multi_level_cols3.execute()
|
|
221
|
+
weight height
|
|
222
|
+
kg m
|
|
223
|
+
cat NaN 1.0
|
|
224
|
+
dog 2.0 3.0
|
|
225
|
+
>>> df_multi_level_cols3.stack(dropna=False).execute()
|
|
226
|
+
height weight
|
|
227
|
+
cat kg NaN NaN
|
|
228
|
+
m 1.0 NaN
|
|
229
|
+
dog kg NaN 2.0
|
|
230
|
+
m 3.0 NaN
|
|
231
|
+
>>> df_multi_level_cols3.stack(dropna=True).execute()
|
|
232
|
+
height weight
|
|
233
|
+
cat m 1.0 NaN
|
|
234
|
+
dog kg NaN 2.0
|
|
235
|
+
m 3.0 NaN
|
|
236
|
+
"""
|
|
237
|
+
op = DataFrameStack(input_df=df, level=level, dropna=dropna)
|
|
238
|
+
return op(df)
|