maxframe 0.1.0b5__cp310-cp310-macosx_11_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of maxframe might be problematic. Click here for more details.
- maxframe/__init__.py +32 -0
- maxframe/_utils.cpython-310-darwin.so +0 -0
- maxframe/_utils.pxd +33 -0
- maxframe/_utils.pyx +547 -0
- maxframe/codegen.py +528 -0
- maxframe/config/__init__.py +15 -0
- maxframe/config/config.py +443 -0
- maxframe/config/tests/__init__.py +13 -0
- maxframe/config/tests/test_config.py +103 -0
- maxframe/config/tests/test_validators.py +34 -0
- maxframe/config/validators.py +57 -0
- maxframe/conftest.py +139 -0
- maxframe/core/__init__.py +65 -0
- maxframe/core/base.py +156 -0
- maxframe/core/entity/__init__.py +44 -0
- maxframe/core/entity/chunks.py +68 -0
- maxframe/core/entity/core.py +152 -0
- maxframe/core/entity/executable.py +337 -0
- maxframe/core/entity/fuse.py +73 -0
- maxframe/core/entity/objects.py +100 -0
- maxframe/core/entity/output_types.py +90 -0
- maxframe/core/entity/tileables.py +438 -0
- maxframe/core/entity/utils.py +24 -0
- maxframe/core/graph/__init__.py +17 -0
- maxframe/core/graph/builder/__init__.py +16 -0
- maxframe/core/graph/builder/base.py +86 -0
- maxframe/core/graph/builder/chunk.py +430 -0
- maxframe/core/graph/builder/tileable.py +34 -0
- maxframe/core/graph/builder/utils.py +41 -0
- maxframe/core/graph/core.cpython-310-darwin.so +0 -0
- maxframe/core/graph/core.pyx +467 -0
- maxframe/core/graph/entity.py +171 -0
- maxframe/core/graph/tests/__init__.py +13 -0
- maxframe/core/graph/tests/test_graph.py +205 -0
- maxframe/core/mode.py +96 -0
- maxframe/core/operator/__init__.py +34 -0
- maxframe/core/operator/base.py +450 -0
- maxframe/core/operator/core.py +276 -0
- maxframe/core/operator/fetch.py +53 -0
- maxframe/core/operator/fuse.py +29 -0
- maxframe/core/operator/objects.py +72 -0
- maxframe/core/operator/shuffle.py +111 -0
- maxframe/core/operator/tests/__init__.py +13 -0
- maxframe/core/operator/tests/test_core.py +64 -0
- maxframe/core/tests/__init__.py +13 -0
- maxframe/core/tests/test_mode.py +75 -0
- maxframe/dataframe/__init__.py +81 -0
- maxframe/dataframe/arithmetic/__init__.py +359 -0
- maxframe/dataframe/arithmetic/abs.py +33 -0
- maxframe/dataframe/arithmetic/add.py +60 -0
- maxframe/dataframe/arithmetic/arccos.py +28 -0
- maxframe/dataframe/arithmetic/arccosh.py +28 -0
- maxframe/dataframe/arithmetic/arcsin.py +28 -0
- maxframe/dataframe/arithmetic/arcsinh.py +28 -0
- maxframe/dataframe/arithmetic/arctan.py +28 -0
- maxframe/dataframe/arithmetic/arctanh.py +28 -0
- maxframe/dataframe/arithmetic/around.py +152 -0
- maxframe/dataframe/arithmetic/bitwise_and.py +46 -0
- maxframe/dataframe/arithmetic/bitwise_or.py +50 -0
- maxframe/dataframe/arithmetic/bitwise_xor.py +46 -0
- maxframe/dataframe/arithmetic/ceil.py +28 -0
- maxframe/dataframe/arithmetic/core.py +342 -0
- maxframe/dataframe/arithmetic/cos.py +28 -0
- maxframe/dataframe/arithmetic/cosh.py +28 -0
- maxframe/dataframe/arithmetic/degrees.py +28 -0
- maxframe/dataframe/arithmetic/docstring.py +442 -0
- maxframe/dataframe/arithmetic/equal.py +56 -0
- maxframe/dataframe/arithmetic/exp.py +28 -0
- maxframe/dataframe/arithmetic/exp2.py +28 -0
- maxframe/dataframe/arithmetic/expm1.py +28 -0
- maxframe/dataframe/arithmetic/floor.py +28 -0
- maxframe/dataframe/arithmetic/floordiv.py +64 -0
- maxframe/dataframe/arithmetic/greater.py +57 -0
- maxframe/dataframe/arithmetic/greater_equal.py +57 -0
- maxframe/dataframe/arithmetic/invert.py +33 -0
- maxframe/dataframe/arithmetic/is_ufuncs.py +62 -0
- maxframe/dataframe/arithmetic/less.py +57 -0
- maxframe/dataframe/arithmetic/less_equal.py +57 -0
- maxframe/dataframe/arithmetic/log.py +28 -0
- maxframe/dataframe/arithmetic/log10.py +28 -0
- maxframe/dataframe/arithmetic/log2.py +28 -0
- maxframe/dataframe/arithmetic/mod.py +60 -0
- maxframe/dataframe/arithmetic/multiply.py +60 -0
- maxframe/dataframe/arithmetic/negative.py +33 -0
- maxframe/dataframe/arithmetic/not_equal.py +56 -0
- maxframe/dataframe/arithmetic/power.py +68 -0
- maxframe/dataframe/arithmetic/radians.py +28 -0
- maxframe/dataframe/arithmetic/sin.py +28 -0
- maxframe/dataframe/arithmetic/sinh.py +28 -0
- maxframe/dataframe/arithmetic/sqrt.py +28 -0
- maxframe/dataframe/arithmetic/subtract.py +64 -0
- maxframe/dataframe/arithmetic/tan.py +28 -0
- maxframe/dataframe/arithmetic/tanh.py +28 -0
- maxframe/dataframe/arithmetic/tests/__init__.py +13 -0
- maxframe/dataframe/arithmetic/tests/test_arithmetic.py +695 -0
- maxframe/dataframe/arithmetic/truediv.py +64 -0
- maxframe/dataframe/arithmetic/trunc.py +28 -0
- maxframe/dataframe/arrays.py +864 -0
- maxframe/dataframe/core.py +2417 -0
- maxframe/dataframe/datasource/__init__.py +15 -0
- maxframe/dataframe/datasource/core.py +81 -0
- maxframe/dataframe/datasource/dataframe.py +59 -0
- maxframe/dataframe/datasource/date_range.py +504 -0
- maxframe/dataframe/datasource/from_index.py +54 -0
- maxframe/dataframe/datasource/from_records.py +107 -0
- maxframe/dataframe/datasource/from_tensor.py +419 -0
- maxframe/dataframe/datasource/index.py +117 -0
- maxframe/dataframe/datasource/read_csv.py +528 -0
- maxframe/dataframe/datasource/read_odps_query.py +299 -0
- maxframe/dataframe/datasource/read_odps_table.py +253 -0
- maxframe/dataframe/datasource/read_parquet.py +421 -0
- maxframe/dataframe/datasource/series.py +55 -0
- maxframe/dataframe/datasource/tests/__init__.py +13 -0
- maxframe/dataframe/datasource/tests/test_datasource.py +401 -0
- maxframe/dataframe/datastore/__init__.py +26 -0
- maxframe/dataframe/datastore/core.py +19 -0
- maxframe/dataframe/datastore/to_csv.py +227 -0
- maxframe/dataframe/datastore/to_odps.py +162 -0
- maxframe/dataframe/extensions/__init__.py +41 -0
- maxframe/dataframe/extensions/accessor.py +50 -0
- maxframe/dataframe/extensions/reshuffle.py +83 -0
- maxframe/dataframe/extensions/tests/__init__.py +13 -0
- maxframe/dataframe/extensions/tests/test_extensions.py +38 -0
- maxframe/dataframe/fetch/__init__.py +15 -0
- maxframe/dataframe/fetch/core.py +86 -0
- maxframe/dataframe/groupby/__init__.py +82 -0
- maxframe/dataframe/groupby/aggregation.py +350 -0
- maxframe/dataframe/groupby/apply.py +251 -0
- maxframe/dataframe/groupby/core.py +179 -0
- maxframe/dataframe/groupby/cum.py +124 -0
- maxframe/dataframe/groupby/fill.py +141 -0
- maxframe/dataframe/groupby/getitem.py +92 -0
- maxframe/dataframe/groupby/head.py +105 -0
- maxframe/dataframe/groupby/sample.py +214 -0
- maxframe/dataframe/groupby/tests/__init__.py +13 -0
- maxframe/dataframe/groupby/tests/test_groupby.py +374 -0
- maxframe/dataframe/groupby/transform.py +255 -0
- maxframe/dataframe/indexing/__init__.py +84 -0
- maxframe/dataframe/indexing/add_prefix_suffix.py +110 -0
- maxframe/dataframe/indexing/align.py +349 -0
- maxframe/dataframe/indexing/at.py +83 -0
- maxframe/dataframe/indexing/getitem.py +204 -0
- maxframe/dataframe/indexing/iat.py +37 -0
- maxframe/dataframe/indexing/iloc.py +566 -0
- maxframe/dataframe/indexing/insert.py +86 -0
- maxframe/dataframe/indexing/loc.py +411 -0
- maxframe/dataframe/indexing/reindex.py +526 -0
- maxframe/dataframe/indexing/rename.py +462 -0
- maxframe/dataframe/indexing/rename_axis.py +209 -0
- maxframe/dataframe/indexing/reset_index.py +402 -0
- maxframe/dataframe/indexing/sample.py +221 -0
- maxframe/dataframe/indexing/set_axis.py +194 -0
- maxframe/dataframe/indexing/set_index.py +61 -0
- maxframe/dataframe/indexing/setitem.py +130 -0
- maxframe/dataframe/indexing/tests/__init__.py +13 -0
- maxframe/dataframe/indexing/tests/test_indexing.py +488 -0
- maxframe/dataframe/indexing/where.py +308 -0
- maxframe/dataframe/initializer.py +288 -0
- maxframe/dataframe/merge/__init__.py +32 -0
- maxframe/dataframe/merge/append.py +121 -0
- maxframe/dataframe/merge/concat.py +325 -0
- maxframe/dataframe/merge/merge.py +593 -0
- maxframe/dataframe/merge/tests/__init__.py +13 -0
- maxframe/dataframe/merge/tests/test_merge.py +215 -0
- maxframe/dataframe/misc/__init__.py +134 -0
- maxframe/dataframe/misc/_duplicate.py +46 -0
- maxframe/dataframe/misc/accessor.py +276 -0
- maxframe/dataframe/misc/apply.py +692 -0
- maxframe/dataframe/misc/astype.py +236 -0
- maxframe/dataframe/misc/case_when.py +141 -0
- maxframe/dataframe/misc/check_monotonic.py +84 -0
- maxframe/dataframe/misc/cut.py +383 -0
- maxframe/dataframe/misc/datetimes.py +79 -0
- maxframe/dataframe/misc/describe.py +108 -0
- maxframe/dataframe/misc/diff.py +210 -0
- maxframe/dataframe/misc/drop.py +440 -0
- maxframe/dataframe/misc/drop_duplicates.py +248 -0
- maxframe/dataframe/misc/duplicated.py +292 -0
- maxframe/dataframe/misc/eval.py +728 -0
- maxframe/dataframe/misc/explode.py +171 -0
- maxframe/dataframe/misc/get_dummies.py +208 -0
- maxframe/dataframe/misc/isin.py +217 -0
- maxframe/dataframe/misc/map.py +236 -0
- maxframe/dataframe/misc/melt.py +162 -0
- maxframe/dataframe/misc/memory_usage.py +248 -0
- maxframe/dataframe/misc/pct_change.py +150 -0
- maxframe/dataframe/misc/pivot_table.py +262 -0
- maxframe/dataframe/misc/qcut.py +104 -0
- maxframe/dataframe/misc/select_dtypes.py +104 -0
- maxframe/dataframe/misc/shift.py +256 -0
- maxframe/dataframe/misc/stack.py +238 -0
- maxframe/dataframe/misc/string_.py +221 -0
- maxframe/dataframe/misc/tests/__init__.py +13 -0
- maxframe/dataframe/misc/tests/test_misc.py +468 -0
- maxframe/dataframe/misc/to_numeric.py +178 -0
- maxframe/dataframe/misc/transform.py +361 -0
- maxframe/dataframe/misc/transpose.py +136 -0
- maxframe/dataframe/misc/value_counts.py +182 -0
- maxframe/dataframe/missing/__init__.py +53 -0
- maxframe/dataframe/missing/checkna.py +223 -0
- maxframe/dataframe/missing/dropna.py +280 -0
- maxframe/dataframe/missing/fillna.py +275 -0
- maxframe/dataframe/missing/replace.py +439 -0
- maxframe/dataframe/missing/tests/__init__.py +13 -0
- maxframe/dataframe/missing/tests/test_missing.py +89 -0
- maxframe/dataframe/operators.py +273 -0
- maxframe/dataframe/plotting/__init__.py +40 -0
- maxframe/dataframe/plotting/core.py +78 -0
- maxframe/dataframe/plotting/tests/__init__.py +13 -0
- maxframe/dataframe/plotting/tests/test_plotting.py +136 -0
- maxframe/dataframe/reduction/__init__.py +107 -0
- maxframe/dataframe/reduction/aggregation.py +344 -0
- maxframe/dataframe/reduction/all.py +78 -0
- maxframe/dataframe/reduction/any.py +78 -0
- maxframe/dataframe/reduction/core.py +837 -0
- maxframe/dataframe/reduction/count.py +59 -0
- maxframe/dataframe/reduction/cummax.py +30 -0
- maxframe/dataframe/reduction/cummin.py +30 -0
- maxframe/dataframe/reduction/cumprod.py +30 -0
- maxframe/dataframe/reduction/cumsum.py +30 -0
- maxframe/dataframe/reduction/custom_reduction.py +42 -0
- maxframe/dataframe/reduction/kurtosis.py +104 -0
- maxframe/dataframe/reduction/max.py +65 -0
- maxframe/dataframe/reduction/mean.py +61 -0
- maxframe/dataframe/reduction/min.py +65 -0
- maxframe/dataframe/reduction/nunique.py +141 -0
- maxframe/dataframe/reduction/prod.py +76 -0
- maxframe/dataframe/reduction/reduction_size.py +36 -0
- maxframe/dataframe/reduction/sem.py +69 -0
- maxframe/dataframe/reduction/skew.py +89 -0
- maxframe/dataframe/reduction/std.py +53 -0
- maxframe/dataframe/reduction/str_concat.py +48 -0
- maxframe/dataframe/reduction/sum.py +77 -0
- maxframe/dataframe/reduction/tests/__init__.py +13 -0
- maxframe/dataframe/reduction/tests/test_reduction.py +486 -0
- maxframe/dataframe/reduction/unique.py +90 -0
- maxframe/dataframe/reduction/var.py +72 -0
- maxframe/dataframe/sort/__init__.py +34 -0
- maxframe/dataframe/sort/core.py +36 -0
- maxframe/dataframe/sort/sort_index.py +153 -0
- maxframe/dataframe/sort/sort_values.py +311 -0
- maxframe/dataframe/sort/tests/__init__.py +13 -0
- maxframe/dataframe/sort/tests/test_sort.py +81 -0
- maxframe/dataframe/statistics/__init__.py +33 -0
- maxframe/dataframe/statistics/corr.py +280 -0
- maxframe/dataframe/statistics/quantile.py +341 -0
- maxframe/dataframe/statistics/tests/__init__.py +13 -0
- maxframe/dataframe/statistics/tests/test_statistics.py +82 -0
- maxframe/dataframe/tests/__init__.py +13 -0
- maxframe/dataframe/tests/test_initializer.py +29 -0
- maxframe/dataframe/tseries/__init__.py +13 -0
- maxframe/dataframe/tseries/tests/__init__.py +13 -0
- maxframe/dataframe/tseries/tests/test_tseries.py +30 -0
- maxframe/dataframe/tseries/to_datetime.py +297 -0
- maxframe/dataframe/ufunc/__init__.py +27 -0
- maxframe/dataframe/ufunc/tensor.py +54 -0
- maxframe/dataframe/ufunc/ufunc.py +52 -0
- maxframe/dataframe/utils.py +1267 -0
- maxframe/dataframe/window/__init__.py +29 -0
- maxframe/dataframe/window/aggregation.py +96 -0
- maxframe/dataframe/window/core.py +69 -0
- maxframe/dataframe/window/ewm.py +249 -0
- maxframe/dataframe/window/expanding.py +147 -0
- maxframe/dataframe/window/rolling.py +376 -0
- maxframe/dataframe/window/tests/__init__.py +13 -0
- maxframe/dataframe/window/tests/test_ewm.py +70 -0
- maxframe/dataframe/window/tests/test_expanding.py +66 -0
- maxframe/dataframe/window/tests/test_rolling.py +57 -0
- maxframe/env.py +33 -0
- maxframe/errors.py +21 -0
- maxframe/extension.py +81 -0
- maxframe/learn/__init__.py +17 -0
- maxframe/learn/contrib/__init__.py +17 -0
- maxframe/learn/contrib/pytorch/__init__.py +16 -0
- maxframe/learn/contrib/pytorch/run_function.py +110 -0
- maxframe/learn/contrib/pytorch/run_script.py +102 -0
- maxframe/learn/contrib/pytorch/tests/__init__.py +13 -0
- maxframe/learn/contrib/pytorch/tests/test_pytorch.py +42 -0
- maxframe/learn/contrib/utils.py +52 -0
- maxframe/learn/contrib/xgboost/__init__.py +26 -0
- maxframe/learn/contrib/xgboost/classifier.py +86 -0
- maxframe/learn/contrib/xgboost/core.py +156 -0
- maxframe/learn/contrib/xgboost/dmatrix.py +150 -0
- maxframe/learn/contrib/xgboost/predict.py +138 -0
- maxframe/learn/contrib/xgboost/regressor.py +78 -0
- maxframe/learn/contrib/xgboost/tests/__init__.py +13 -0
- maxframe/learn/contrib/xgboost/tests/test_core.py +43 -0
- maxframe/learn/contrib/xgboost/train.py +121 -0
- maxframe/learn/utils/__init__.py +15 -0
- maxframe/learn/utils/core.py +29 -0
- maxframe/lib/__init__.py +15 -0
- maxframe/lib/aio/__init__.py +27 -0
- maxframe/lib/aio/_runners.py +162 -0
- maxframe/lib/aio/_threads.py +35 -0
- maxframe/lib/aio/base.py +82 -0
- maxframe/lib/aio/file.py +85 -0
- maxframe/lib/aio/isolation.py +100 -0
- maxframe/lib/aio/lru.py +242 -0
- maxframe/lib/aio/parallelism.py +37 -0
- maxframe/lib/aio/tests/__init__.py +13 -0
- maxframe/lib/aio/tests/test_aio_file.py +55 -0
- maxframe/lib/compression.py +55 -0
- maxframe/lib/cython/__init__.py +13 -0
- maxframe/lib/cython/libcpp.pxd +30 -0
- maxframe/lib/filesystem/__init__.py +21 -0
- maxframe/lib/filesystem/_glob.py +173 -0
- maxframe/lib/filesystem/_oss_lib/__init__.py +13 -0
- maxframe/lib/filesystem/_oss_lib/common.py +198 -0
- maxframe/lib/filesystem/_oss_lib/glob.py +147 -0
- maxframe/lib/filesystem/_oss_lib/handle.py +156 -0
- maxframe/lib/filesystem/arrow.py +236 -0
- maxframe/lib/filesystem/base.py +263 -0
- maxframe/lib/filesystem/core.py +95 -0
- maxframe/lib/filesystem/fsmap.py +164 -0
- maxframe/lib/filesystem/hdfs.py +31 -0
- maxframe/lib/filesystem/local.py +112 -0
- maxframe/lib/filesystem/oss.py +157 -0
- maxframe/lib/filesystem/tests/__init__.py +13 -0
- maxframe/lib/filesystem/tests/test_filesystem.py +223 -0
- maxframe/lib/filesystem/tests/test_oss.py +182 -0
- maxframe/lib/functools_compat.py +81 -0
- maxframe/lib/mmh3.cpython-310-darwin.so +0 -0
- maxframe/lib/mmh3_src/MurmurHash3.cpp +339 -0
- maxframe/lib/mmh3_src/MurmurHash3.h +43 -0
- maxframe/lib/mmh3_src/mmh3module.cpp +387 -0
- maxframe/lib/sparse/__init__.py +861 -0
- maxframe/lib/sparse/array.py +1604 -0
- maxframe/lib/sparse/core.py +92 -0
- maxframe/lib/sparse/matrix.py +241 -0
- maxframe/lib/sparse/tests/__init__.py +15 -0
- maxframe/lib/sparse/tests/test_sparse.py +476 -0
- maxframe/lib/sparse/vector.py +150 -0
- maxframe/lib/tblib/LICENSE +20 -0
- maxframe/lib/tblib/__init__.py +327 -0
- maxframe/lib/tblib/cpython.py +83 -0
- maxframe/lib/tblib/decorators.py +44 -0
- maxframe/lib/tblib/pickling_support.py +90 -0
- maxframe/lib/tests/__init__.py +13 -0
- maxframe/lib/tests/test_wrapped_pickle.py +51 -0
- maxframe/lib/version.py +620 -0
- maxframe/lib/wrapped_pickle.py +139 -0
- maxframe/mixin.py +100 -0
- maxframe/odpsio/__init__.py +21 -0
- maxframe/odpsio/arrow.py +91 -0
- maxframe/odpsio/schema.py +364 -0
- maxframe/odpsio/tableio.py +322 -0
- maxframe/odpsio/tests/__init__.py +13 -0
- maxframe/odpsio/tests/test_arrow.py +88 -0
- maxframe/odpsio/tests/test_schema.py +297 -0
- maxframe/odpsio/tests/test_tableio.py +136 -0
- maxframe/odpsio/tests/test_volumeio.py +90 -0
- maxframe/odpsio/volumeio.py +95 -0
- maxframe/opcodes.py +590 -0
- maxframe/protocol.py +415 -0
- maxframe/remote/__init__.py +18 -0
- maxframe/remote/core.py +210 -0
- maxframe/remote/run_script.py +121 -0
- maxframe/serialization/__init__.py +26 -0
- maxframe/serialization/arrow.py +95 -0
- maxframe/serialization/core.cpython-310-darwin.so +0 -0
- maxframe/serialization/core.pxd +44 -0
- maxframe/serialization/core.pyi +61 -0
- maxframe/serialization/core.pyx +1094 -0
- maxframe/serialization/exception.py +86 -0
- maxframe/serialization/maxframe_objects.py +39 -0
- maxframe/serialization/numpy.py +91 -0
- maxframe/serialization/pandas.py +202 -0
- maxframe/serialization/scipy.py +71 -0
- maxframe/serialization/serializables/__init__.py +55 -0
- maxframe/serialization/serializables/core.py +262 -0
- maxframe/serialization/serializables/field.py +624 -0
- maxframe/serialization/serializables/field_type.py +589 -0
- maxframe/serialization/serializables/tests/__init__.py +13 -0
- maxframe/serialization/serializables/tests/test_field_type.py +121 -0
- maxframe/serialization/serializables/tests/test_serializable.py +250 -0
- maxframe/serialization/tests/__init__.py +13 -0
- maxframe/serialization/tests/test_serial.py +412 -0
- maxframe/session.py +1310 -0
- maxframe/tensor/__init__.py +183 -0
- maxframe/tensor/arithmetic/__init__.py +315 -0
- maxframe/tensor/arithmetic/abs.py +68 -0
- maxframe/tensor/arithmetic/absolute.py +68 -0
- maxframe/tensor/arithmetic/add.py +82 -0
- maxframe/tensor/arithmetic/angle.py +72 -0
- maxframe/tensor/arithmetic/arccos.py +104 -0
- maxframe/tensor/arithmetic/arccosh.py +91 -0
- maxframe/tensor/arithmetic/arcsin.py +94 -0
- maxframe/tensor/arithmetic/arcsinh.py +86 -0
- maxframe/tensor/arithmetic/arctan.py +106 -0
- maxframe/tensor/arithmetic/arctan2.py +128 -0
- maxframe/tensor/arithmetic/arctanh.py +86 -0
- maxframe/tensor/arithmetic/around.py +114 -0
- maxframe/tensor/arithmetic/bitand.py +95 -0
- maxframe/tensor/arithmetic/bitor.py +102 -0
- maxframe/tensor/arithmetic/bitxor.py +95 -0
- maxframe/tensor/arithmetic/cbrt.py +66 -0
- maxframe/tensor/arithmetic/ceil.py +71 -0
- maxframe/tensor/arithmetic/clip.py +165 -0
- maxframe/tensor/arithmetic/conj.py +74 -0
- maxframe/tensor/arithmetic/copysign.py +78 -0
- maxframe/tensor/arithmetic/core.py +544 -0
- maxframe/tensor/arithmetic/cos.py +85 -0
- maxframe/tensor/arithmetic/cosh.py +72 -0
- maxframe/tensor/arithmetic/deg2rad.py +72 -0
- maxframe/tensor/arithmetic/degrees.py +77 -0
- maxframe/tensor/arithmetic/divide.py +114 -0
- maxframe/tensor/arithmetic/equal.py +76 -0
- maxframe/tensor/arithmetic/exp.py +106 -0
- maxframe/tensor/arithmetic/exp2.py +67 -0
- maxframe/tensor/arithmetic/expm1.py +79 -0
- maxframe/tensor/arithmetic/fabs.py +74 -0
- maxframe/tensor/arithmetic/fix.py +69 -0
- maxframe/tensor/arithmetic/float_power.py +103 -0
- maxframe/tensor/arithmetic/floor.py +77 -0
- maxframe/tensor/arithmetic/floordiv.py +94 -0
- maxframe/tensor/arithmetic/fmax.py +105 -0
- maxframe/tensor/arithmetic/fmin.py +106 -0
- maxframe/tensor/arithmetic/fmod.py +99 -0
- maxframe/tensor/arithmetic/frexp.py +92 -0
- maxframe/tensor/arithmetic/greater.py +77 -0
- maxframe/tensor/arithmetic/greater_equal.py +69 -0
- maxframe/tensor/arithmetic/hypot.py +77 -0
- maxframe/tensor/arithmetic/i0.py +89 -0
- maxframe/tensor/arithmetic/imag.py +67 -0
- maxframe/tensor/arithmetic/invert.py +110 -0
- maxframe/tensor/arithmetic/isclose.py +115 -0
- maxframe/tensor/arithmetic/iscomplex.py +64 -0
- maxframe/tensor/arithmetic/isfinite.py +106 -0
- maxframe/tensor/arithmetic/isinf.py +103 -0
- maxframe/tensor/arithmetic/isnan.py +82 -0
- maxframe/tensor/arithmetic/isreal.py +63 -0
- maxframe/tensor/arithmetic/ldexp.py +99 -0
- maxframe/tensor/arithmetic/less.py +69 -0
- maxframe/tensor/arithmetic/less_equal.py +69 -0
- maxframe/tensor/arithmetic/log.py +92 -0
- maxframe/tensor/arithmetic/log10.py +85 -0
- maxframe/tensor/arithmetic/log1p.py +95 -0
- maxframe/tensor/arithmetic/log2.py +85 -0
- maxframe/tensor/arithmetic/logaddexp.py +80 -0
- maxframe/tensor/arithmetic/logaddexp2.py +78 -0
- maxframe/tensor/arithmetic/logical_and.py +81 -0
- maxframe/tensor/arithmetic/logical_not.py +74 -0
- maxframe/tensor/arithmetic/logical_or.py +82 -0
- maxframe/tensor/arithmetic/logical_xor.py +88 -0
- maxframe/tensor/arithmetic/lshift.py +82 -0
- maxframe/tensor/arithmetic/maximum.py +108 -0
- maxframe/tensor/arithmetic/minimum.py +108 -0
- maxframe/tensor/arithmetic/mod.py +104 -0
- maxframe/tensor/arithmetic/modf.py +83 -0
- maxframe/tensor/arithmetic/multiply.py +81 -0
- maxframe/tensor/arithmetic/nan_to_num.py +99 -0
- maxframe/tensor/arithmetic/negative.py +65 -0
- maxframe/tensor/arithmetic/nextafter.py +68 -0
- maxframe/tensor/arithmetic/not_equal.py +72 -0
- maxframe/tensor/arithmetic/positive.py +47 -0
- maxframe/tensor/arithmetic/power.py +106 -0
- maxframe/tensor/arithmetic/rad2deg.py +71 -0
- maxframe/tensor/arithmetic/radians.py +77 -0
- maxframe/tensor/arithmetic/real.py +70 -0
- maxframe/tensor/arithmetic/reciprocal.py +76 -0
- maxframe/tensor/arithmetic/rint.py +68 -0
- maxframe/tensor/arithmetic/rshift.py +81 -0
- maxframe/tensor/arithmetic/setimag.py +29 -0
- maxframe/tensor/arithmetic/setreal.py +29 -0
- maxframe/tensor/arithmetic/sign.py +81 -0
- maxframe/tensor/arithmetic/signbit.py +65 -0
- maxframe/tensor/arithmetic/sin.py +98 -0
- maxframe/tensor/arithmetic/sinc.py +102 -0
- maxframe/tensor/arithmetic/sinh.py +93 -0
- maxframe/tensor/arithmetic/spacing.py +72 -0
- maxframe/tensor/arithmetic/sqrt.py +81 -0
- maxframe/tensor/arithmetic/square.py +69 -0
- maxframe/tensor/arithmetic/subtract.py +81 -0
- maxframe/tensor/arithmetic/tan.py +88 -0
- maxframe/tensor/arithmetic/tanh.py +92 -0
- maxframe/tensor/arithmetic/tests/__init__.py +15 -0
- maxframe/tensor/arithmetic/tests/test_arithmetic.py +414 -0
- maxframe/tensor/arithmetic/truediv.py +104 -0
- maxframe/tensor/arithmetic/trunc.py +72 -0
- maxframe/tensor/arithmetic/utils.py +65 -0
- maxframe/tensor/array_utils.py +186 -0
- maxframe/tensor/base/__init__.py +34 -0
- maxframe/tensor/base/astype.py +119 -0
- maxframe/tensor/base/atleast_1d.py +74 -0
- maxframe/tensor/base/broadcast_to.py +89 -0
- maxframe/tensor/base/ravel.py +92 -0
- maxframe/tensor/base/tests/__init__.py +13 -0
- maxframe/tensor/base/tests/test_base.py +114 -0
- maxframe/tensor/base/transpose.py +125 -0
- maxframe/tensor/base/unique.py +205 -0
- maxframe/tensor/base/where.py +127 -0
- maxframe/tensor/core.py +724 -0
- maxframe/tensor/datasource/__init__.py +32 -0
- maxframe/tensor/datasource/arange.py +156 -0
- maxframe/tensor/datasource/array.py +415 -0
- maxframe/tensor/datasource/core.py +109 -0
- maxframe/tensor/datasource/empty.py +169 -0
- maxframe/tensor/datasource/from_dataframe.py +70 -0
- maxframe/tensor/datasource/from_dense.py +54 -0
- maxframe/tensor/datasource/from_sparse.py +47 -0
- maxframe/tensor/datasource/full.py +186 -0
- maxframe/tensor/datasource/ones.py +173 -0
- maxframe/tensor/datasource/scalar.py +40 -0
- maxframe/tensor/datasource/tests/__init__.py +13 -0
- maxframe/tensor/datasource/tests/test_datasource.py +278 -0
- maxframe/tensor/datasource/zeros.py +188 -0
- maxframe/tensor/fetch/__init__.py +15 -0
- maxframe/tensor/fetch/core.py +54 -0
- maxframe/tensor/indexing/__init__.py +47 -0
- maxframe/tensor/indexing/choose.py +196 -0
- maxframe/tensor/indexing/compress.py +124 -0
- maxframe/tensor/indexing/core.py +190 -0
- maxframe/tensor/indexing/extract.py +71 -0
- maxframe/tensor/indexing/fill_diagonal.py +183 -0
- maxframe/tensor/indexing/flatnonzero.py +60 -0
- maxframe/tensor/indexing/getitem.py +175 -0
- maxframe/tensor/indexing/nonzero.py +120 -0
- maxframe/tensor/indexing/setitem.py +132 -0
- maxframe/tensor/indexing/slice.py +29 -0
- maxframe/tensor/indexing/take.py +130 -0
- maxframe/tensor/indexing/tests/__init__.py +15 -0
- maxframe/tensor/indexing/tests/test_indexing.py +234 -0
- maxframe/tensor/indexing/unravel_index.py +103 -0
- maxframe/tensor/merge/__init__.py +15 -0
- maxframe/tensor/merge/stack.py +132 -0
- maxframe/tensor/merge/tests/__init__.py +13 -0
- maxframe/tensor/merge/tests/test_merge.py +52 -0
- maxframe/tensor/operators.py +123 -0
- maxframe/tensor/random/__init__.py +168 -0
- maxframe/tensor/random/beta.py +87 -0
- maxframe/tensor/random/binomial.py +137 -0
- maxframe/tensor/random/bytes.py +39 -0
- maxframe/tensor/random/chisquare.py +110 -0
- maxframe/tensor/random/choice.py +186 -0
- maxframe/tensor/random/core.py +234 -0
- maxframe/tensor/random/dirichlet.py +123 -0
- maxframe/tensor/random/exponential.py +94 -0
- maxframe/tensor/random/f.py +135 -0
- maxframe/tensor/random/gamma.py +128 -0
- maxframe/tensor/random/geometric.py +93 -0
- maxframe/tensor/random/gumbel.py +167 -0
- maxframe/tensor/random/hypergeometric.py +148 -0
- maxframe/tensor/random/laplace.py +133 -0
- maxframe/tensor/random/logistic.py +129 -0
- maxframe/tensor/random/lognormal.py +159 -0
- maxframe/tensor/random/logseries.py +122 -0
- maxframe/tensor/random/multinomial.py +133 -0
- maxframe/tensor/random/multivariate_normal.py +192 -0
- maxframe/tensor/random/negative_binomial.py +125 -0
- maxframe/tensor/random/noncentral_chisquare.py +132 -0
- maxframe/tensor/random/noncentral_f.py +126 -0
- maxframe/tensor/random/normal.py +143 -0
- maxframe/tensor/random/pareto.py +140 -0
- maxframe/tensor/random/permutation.py +104 -0
- maxframe/tensor/random/poisson.py +111 -0
- maxframe/tensor/random/power.py +142 -0
- maxframe/tensor/random/rand.py +82 -0
- maxframe/tensor/random/randint.py +121 -0
- maxframe/tensor/random/randn.py +96 -0
- maxframe/tensor/random/random_integers.py +123 -0
- maxframe/tensor/random/random_sample.py +86 -0
- maxframe/tensor/random/rayleigh.py +110 -0
- maxframe/tensor/random/shuffle.py +61 -0
- maxframe/tensor/random/standard_cauchy.py +105 -0
- maxframe/tensor/random/standard_exponential.py +72 -0
- maxframe/tensor/random/standard_gamma.py +120 -0
- maxframe/tensor/random/standard_normal.py +74 -0
- maxframe/tensor/random/standard_t.py +135 -0
- maxframe/tensor/random/tests/__init__.py +15 -0
- maxframe/tensor/random/tests/test_random.py +167 -0
- maxframe/tensor/random/triangular.py +119 -0
- maxframe/tensor/random/uniform.py +131 -0
- maxframe/tensor/random/vonmises.py +131 -0
- maxframe/tensor/random/wald.py +114 -0
- maxframe/tensor/random/weibull.py +140 -0
- maxframe/tensor/random/zipf.py +122 -0
- maxframe/tensor/rechunk/__init__.py +26 -0
- maxframe/tensor/rechunk/rechunk.py +43 -0
- maxframe/tensor/reduction/__init__.py +66 -0
- maxframe/tensor/reduction/all.py +103 -0
- maxframe/tensor/reduction/allclose.py +88 -0
- maxframe/tensor/reduction/any.py +105 -0
- maxframe/tensor/reduction/argmax.py +103 -0
- maxframe/tensor/reduction/argmin.py +103 -0
- maxframe/tensor/reduction/array_equal.py +64 -0
- maxframe/tensor/reduction/core.py +168 -0
- maxframe/tensor/reduction/count_nonzero.py +81 -0
- maxframe/tensor/reduction/cumprod.py +97 -0
- maxframe/tensor/reduction/cumsum.py +101 -0
- maxframe/tensor/reduction/max.py +120 -0
- maxframe/tensor/reduction/mean.py +123 -0
- maxframe/tensor/reduction/min.py +120 -0
- maxframe/tensor/reduction/nanargmax.py +82 -0
- maxframe/tensor/reduction/nanargmin.py +76 -0
- maxframe/tensor/reduction/nancumprod.py +91 -0
- maxframe/tensor/reduction/nancumsum.py +94 -0
- maxframe/tensor/reduction/nanmax.py +111 -0
- maxframe/tensor/reduction/nanmean.py +106 -0
- maxframe/tensor/reduction/nanmin.py +111 -0
- maxframe/tensor/reduction/nanprod.py +94 -0
- maxframe/tensor/reduction/nanstd.py +126 -0
- maxframe/tensor/reduction/nansum.py +115 -0
- maxframe/tensor/reduction/nanvar.py +149 -0
- maxframe/tensor/reduction/prod.py +130 -0
- maxframe/tensor/reduction/std.py +134 -0
- maxframe/tensor/reduction/sum.py +125 -0
- maxframe/tensor/reduction/tests/__init__.py +13 -0
- maxframe/tensor/reduction/tests/test_reduction.py +181 -0
- maxframe/tensor/reduction/var.py +176 -0
- maxframe/tensor/reshape/__init__.py +17 -0
- maxframe/tensor/reshape/reshape.py +188 -0
- maxframe/tensor/reshape/tests/__init__.py +15 -0
- maxframe/tensor/reshape/tests/test_reshape.py +37 -0
- maxframe/tensor/statistics/__init__.py +13 -0
- maxframe/tensor/statistics/percentile.py +175 -0
- maxframe/tensor/statistics/quantile.py +288 -0
- maxframe/tensor/ufunc/__init__.py +26 -0
- maxframe/tensor/ufunc/ufunc.py +200 -0
- maxframe/tensor/utils.py +718 -0
- maxframe/tests/__init__.py +13 -0
- maxframe/tests/test_codegen.py +69 -0
- maxframe/tests/test_protocol.py +144 -0
- maxframe/tests/test_utils.py +376 -0
- maxframe/tests/utils.py +164 -0
- maxframe/typing_.py +37 -0
- maxframe/udf.py +134 -0
- maxframe/utils.py +1114 -0
- maxframe-0.1.0b5.dist-info/METADATA +104 -0
- maxframe-0.1.0b5.dist-info/RECORD +647 -0
- maxframe-0.1.0b5.dist-info/WHEEL +5 -0
- maxframe-0.1.0b5.dist-info/top_level.txt +3 -0
- maxframe_client/__init__.py +17 -0
- maxframe_client/clients/__init__.py +13 -0
- maxframe_client/clients/framedriver.py +118 -0
- maxframe_client/clients/spe.py +104 -0
- maxframe_client/conftest.py +15 -0
- maxframe_client/fetcher.py +264 -0
- maxframe_client/session/__init__.py +22 -0
- maxframe_client/session/consts.py +36 -0
- maxframe_client/session/graph.py +119 -0
- maxframe_client/session/odps.py +482 -0
- maxframe_client/session/task.py +280 -0
- maxframe_client/session/tests/__init__.py +13 -0
- maxframe_client/session/tests/test_task.py +85 -0
- maxframe_client/tests/__init__.py +13 -0
- maxframe_client/tests/test_fetcher.py +89 -0
- maxframe_client/tests/test_session.py +255 -0
|
@@ -0,0 +1,29 @@
|
|
|
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
|
+
|
|
16
|
+
def _install():
|
|
17
|
+
from ..core import DATAFRAME_TYPE, SERIES_TYPE
|
|
18
|
+
from .ewm import ewm
|
|
19
|
+
from .expanding import expanding
|
|
20
|
+
from .rolling import rolling
|
|
21
|
+
|
|
22
|
+
for t in DATAFRAME_TYPE + SERIES_TYPE:
|
|
23
|
+
t.rolling = rolling
|
|
24
|
+
t.expanding = expanding
|
|
25
|
+
t.ewm = ewm
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
_install()
|
|
29
|
+
del _install
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from collections import OrderedDict
|
|
16
|
+
from collections.abc import Iterable
|
|
17
|
+
|
|
18
|
+
import numpy as np
|
|
19
|
+
import pandas as pd
|
|
20
|
+
|
|
21
|
+
from ...serialization.serializables import AnyField, BoolField, Int32Field, Int64Field
|
|
22
|
+
from ..core import DATAFRAME_TYPE
|
|
23
|
+
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
24
|
+
from ..utils import build_df, build_empty_series, parse_index
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class BaseDataFrameExpandingAgg(DataFrameOperator, DataFrameOperatorMixin):
|
|
28
|
+
min_periods = Int64Field("min_periods", default=None)
|
|
29
|
+
axis = Int32Field("axis", default=None)
|
|
30
|
+
func = AnyField("func", default=None)
|
|
31
|
+
|
|
32
|
+
# always treat count as valid. this behavior is cancelled in pandas 1.0
|
|
33
|
+
count_always_valid = BoolField("count_always_valid", default=None)
|
|
34
|
+
# True if function name is treated as new index
|
|
35
|
+
append_index = BoolField("append_index", default=None)
|
|
36
|
+
|
|
37
|
+
def __call__(self, expanding):
|
|
38
|
+
inp = expanding.input
|
|
39
|
+
raw_func = self.func
|
|
40
|
+
self._normalize_funcs()
|
|
41
|
+
|
|
42
|
+
if isinstance(inp, DATAFRAME_TYPE):
|
|
43
|
+
empty_df = build_df(inp)
|
|
44
|
+
for c, t in empty_df.dtypes.items():
|
|
45
|
+
if t == np.dtype("O"):
|
|
46
|
+
empty_df[c] = "O"
|
|
47
|
+
|
|
48
|
+
test_df = expanding(empty_df).agg(raw_func)
|
|
49
|
+
if self.axis == 0:
|
|
50
|
+
index_value = inp.index_value
|
|
51
|
+
else:
|
|
52
|
+
index_value = parse_index(
|
|
53
|
+
test_df.index, expanding.params, inp, store_data=False
|
|
54
|
+
)
|
|
55
|
+
self._append_index = test_df.columns.nlevels != empty_df.columns.nlevels
|
|
56
|
+
return self.new_dataframe(
|
|
57
|
+
[inp],
|
|
58
|
+
shape=(inp.shape[0], test_df.shape[1]),
|
|
59
|
+
dtypes=test_df.dtypes,
|
|
60
|
+
index_value=index_value,
|
|
61
|
+
columns_value=parse_index(test_df.columns, store_data=True),
|
|
62
|
+
)
|
|
63
|
+
else:
|
|
64
|
+
pd_index = inp.index_value.to_pandas()
|
|
65
|
+
empty_series = build_empty_series(
|
|
66
|
+
inp.dtype, index=pd_index[:0], name=inp.name
|
|
67
|
+
)
|
|
68
|
+
test_obj = expanding(empty_series).agg(raw_func)
|
|
69
|
+
if isinstance(test_obj, pd.DataFrame):
|
|
70
|
+
return self.new_dataframe(
|
|
71
|
+
[inp],
|
|
72
|
+
shape=(inp.shape[0], test_obj.shape[1]),
|
|
73
|
+
dtypes=test_obj.dtypes,
|
|
74
|
+
index_value=inp.index_value,
|
|
75
|
+
columns_value=parse_index(test_obj.dtypes.index, store_data=True),
|
|
76
|
+
)
|
|
77
|
+
else:
|
|
78
|
+
return self.new_series(
|
|
79
|
+
[inp],
|
|
80
|
+
shape=inp.shape,
|
|
81
|
+
dtype=test_obj.dtype,
|
|
82
|
+
index_value=inp.index_value,
|
|
83
|
+
name=test_obj.name,
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
def _normalize_funcs(self):
|
|
87
|
+
if isinstance(self.func, dict):
|
|
88
|
+
new_func = OrderedDict()
|
|
89
|
+
for k, v in self.func.items():
|
|
90
|
+
if isinstance(v, str) or callable(v):
|
|
91
|
+
new_func[k] = [v]
|
|
92
|
+
else:
|
|
93
|
+
new_func[k] = v
|
|
94
|
+
self.func = new_func
|
|
95
|
+
elif isinstance(self.func, Iterable) and not isinstance(self.func, str):
|
|
96
|
+
self.func = list(self.func)
|
|
@@ -0,0 +1,69 @@
|
|
|
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 ...serialization.serializables import KeyField, Serializable
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class Window(Serializable):
|
|
19
|
+
input = KeyField("input", default=None)
|
|
20
|
+
|
|
21
|
+
@property
|
|
22
|
+
def params(self):
|
|
23
|
+
raise NotImplementedError
|
|
24
|
+
|
|
25
|
+
def _repr(self, params):
|
|
26
|
+
kvs = [f"{k}={v}" for k, v in params.items() if v is not None]
|
|
27
|
+
return "{} [{}]".format(self._repr_name(), ",".join(kvs))
|
|
28
|
+
|
|
29
|
+
def _repr_name(self):
|
|
30
|
+
return type(self).__name__
|
|
31
|
+
|
|
32
|
+
def __repr__(self):
|
|
33
|
+
return self._repr(self.params)
|
|
34
|
+
|
|
35
|
+
def __getitem__(self, item):
|
|
36
|
+
columns = self.input.dtypes.index
|
|
37
|
+
if isinstance(item, (list, tuple)):
|
|
38
|
+
item = list(item)
|
|
39
|
+
for col in item:
|
|
40
|
+
if col not in columns:
|
|
41
|
+
raise KeyError(f"Column not found: {col}")
|
|
42
|
+
else:
|
|
43
|
+
if item not in columns:
|
|
44
|
+
raise KeyError(f"Column not found: {item}")
|
|
45
|
+
|
|
46
|
+
return type(self)(input=self.input[item], **self.params)
|
|
47
|
+
|
|
48
|
+
def __getattr__(self, item):
|
|
49
|
+
try:
|
|
50
|
+
return super().__getattribute__(item)
|
|
51
|
+
except AttributeError:
|
|
52
|
+
if self.input.ndim == 2 and item in self.input.dtypes:
|
|
53
|
+
return self[item]
|
|
54
|
+
else:
|
|
55
|
+
raise
|
|
56
|
+
|
|
57
|
+
def __dir__(self):
|
|
58
|
+
result = list(super().__dir__())
|
|
59
|
+
if self.input.ndim == 1:
|
|
60
|
+
return result
|
|
61
|
+
else:
|
|
62
|
+
return sorted(
|
|
63
|
+
result
|
|
64
|
+
+ [
|
|
65
|
+
k
|
|
66
|
+
for k in self.input.dtypes.index
|
|
67
|
+
if isinstance(k, str) and k.isidentifier()
|
|
68
|
+
]
|
|
69
|
+
)
|
|
@@ -0,0 +1,249 @@
|
|
|
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 math
|
|
16
|
+
from collections import OrderedDict
|
|
17
|
+
|
|
18
|
+
from ... import opcodes
|
|
19
|
+
from ...serialization.serializables import (
|
|
20
|
+
BoolField,
|
|
21
|
+
Float64Field,
|
|
22
|
+
Int32Field,
|
|
23
|
+
Int64Field,
|
|
24
|
+
StringField,
|
|
25
|
+
)
|
|
26
|
+
from ...utils import pd_release_version
|
|
27
|
+
from ..utils import validate_axis
|
|
28
|
+
from .aggregation import BaseDataFrameExpandingAgg
|
|
29
|
+
from .core import Window
|
|
30
|
+
|
|
31
|
+
_default_min_period_1 = pd_release_version >= (1, 1, 0)
|
|
32
|
+
_pd_1_3_repr = pd_release_version >= (1, 3, 0)
|
|
33
|
+
_window_has_method = pd_release_version >= (1, 4, 0)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class DataFrameEwmAgg(BaseDataFrameExpandingAgg):
|
|
37
|
+
_op_type_ = opcodes.EWM_AGG
|
|
38
|
+
|
|
39
|
+
_exec_cache = dict()
|
|
40
|
+
|
|
41
|
+
alpha = Float64Field("alpha")
|
|
42
|
+
adjust = BoolField("adjust")
|
|
43
|
+
alpha_ignore_na = BoolField("alpha_ignore_na")
|
|
44
|
+
|
|
45
|
+
validate_columns = BoolField("_validate_columns")
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class EWM(Window):
|
|
49
|
+
alpha = Float64Field("alpha", default=None)
|
|
50
|
+
min_periods = Int64Field("min_periods", default=None)
|
|
51
|
+
adjust = BoolField("adjust", default=None)
|
|
52
|
+
ignore_na = BoolField("ignore_na", default=None)
|
|
53
|
+
axis = Int32Field("axis", default=None)
|
|
54
|
+
method = StringField("method", default="single")
|
|
55
|
+
|
|
56
|
+
@property
|
|
57
|
+
def params(self):
|
|
58
|
+
p = OrderedDict()
|
|
59
|
+
|
|
60
|
+
if not _window_has_method: # pragma: no cover
|
|
61
|
+
args = ["alpha", "min_periods", "adjust", "ignore_na", "axis"]
|
|
62
|
+
else:
|
|
63
|
+
args = ["alpha", "min_periods", "adjust", "ignore_na", "axis", "method"]
|
|
64
|
+
|
|
65
|
+
for k in args:
|
|
66
|
+
p[k] = getattr(self, k)
|
|
67
|
+
return p
|
|
68
|
+
|
|
69
|
+
def __call__(self, df):
|
|
70
|
+
return df.ewm(**self.params)
|
|
71
|
+
|
|
72
|
+
def _repr(self, params):
|
|
73
|
+
com = 1.0 / params.pop("alpha") - 1
|
|
74
|
+
params["com"] = int(com) if _pd_1_3_repr and com == math.floor(com) else com
|
|
75
|
+
try:
|
|
76
|
+
params.move_to_end("com", last=False)
|
|
77
|
+
except AttributeError: # pragma: no cover
|
|
78
|
+
pass
|
|
79
|
+
return super()._repr(params)
|
|
80
|
+
|
|
81
|
+
def _repr_name(self):
|
|
82
|
+
try:
|
|
83
|
+
from pandas.core.window import ExponentialMovingWindow # noqa: F401
|
|
84
|
+
|
|
85
|
+
return "ExponentialMovingWindow"
|
|
86
|
+
except ImportError: # pragma: no cover
|
|
87
|
+
return "EWM"
|
|
88
|
+
|
|
89
|
+
def aggregate(self, func):
|
|
90
|
+
params = self.params
|
|
91
|
+
params["alpha_ignore_na"] = params.pop("ignore_na", False)
|
|
92
|
+
params["validate_columns"] = False
|
|
93
|
+
op = DataFrameEwmAgg(func=func, **params)
|
|
94
|
+
return op(self)
|
|
95
|
+
|
|
96
|
+
agg = aggregate
|
|
97
|
+
|
|
98
|
+
def mean(self):
|
|
99
|
+
return self.aggregate("mean")
|
|
100
|
+
|
|
101
|
+
def var(self):
|
|
102
|
+
return self.aggregate("var")
|
|
103
|
+
|
|
104
|
+
def std(self):
|
|
105
|
+
return self.aggregate("std")
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def ewm(
|
|
109
|
+
obj,
|
|
110
|
+
com=None,
|
|
111
|
+
span=None,
|
|
112
|
+
halflife=None,
|
|
113
|
+
alpha=None,
|
|
114
|
+
min_periods=0,
|
|
115
|
+
adjust=True,
|
|
116
|
+
ignore_na=False,
|
|
117
|
+
axis=0,
|
|
118
|
+
):
|
|
119
|
+
r"""
|
|
120
|
+
Provide exponential weighted functions.
|
|
121
|
+
|
|
122
|
+
Parameters
|
|
123
|
+
----------
|
|
124
|
+
com : float, optional
|
|
125
|
+
Specify decay in terms of center of mass,
|
|
126
|
+
:math:`\alpha = 1 / (1 + com),\text{ for } com \geq 0`.
|
|
127
|
+
span : float, optional
|
|
128
|
+
Specify decay in terms of span,
|
|
129
|
+
:math:`\alpha = 2 / (span + 1),\text{ for } span \geq 1`.
|
|
130
|
+
halflife : float, optional
|
|
131
|
+
Specify decay in terms of half-life,
|
|
132
|
+
:math:`\alpha = 1 - exp(log(0.5) / halflife),\text{for} halflife > 0`.
|
|
133
|
+
alpha : float, optional
|
|
134
|
+
Specify smoothing factor :math:`\alpha` directly,
|
|
135
|
+
:math:`0 < \alpha \leq 1`.
|
|
136
|
+
min_periods : int, default 0
|
|
137
|
+
Minimum number of observations in window required to have a value
|
|
138
|
+
(otherwise result is NA).
|
|
139
|
+
adjust : bool, default True
|
|
140
|
+
Divide by decaying adjustment factor in beginning periods to account
|
|
141
|
+
for imbalance in relative weightings
|
|
142
|
+
(viewing EWMA as a moving average).
|
|
143
|
+
ignore_na : bool, default False
|
|
144
|
+
Ignore missing values when calculating weights;
|
|
145
|
+
specify True to reproduce pre-0.15.0 behavior.
|
|
146
|
+
axis : {0 or 'index', 1 or 'columns'}, default 0
|
|
147
|
+
The axis to use. The value 0 identifies the rows, and 1
|
|
148
|
+
identifies the columns.
|
|
149
|
+
|
|
150
|
+
Returns
|
|
151
|
+
-------
|
|
152
|
+
DataFrame
|
|
153
|
+
A Window sub-classed for the particular operation.
|
|
154
|
+
|
|
155
|
+
See Also
|
|
156
|
+
--------
|
|
157
|
+
rolling : Provides rolling window calculations.
|
|
158
|
+
expanding : Provides expanding transformations.
|
|
159
|
+
|
|
160
|
+
Notes
|
|
161
|
+
-----
|
|
162
|
+
Exactly one of center of mass, span, half-life, and alpha must be provided.
|
|
163
|
+
|
|
164
|
+
Allowed values and relationship between the parameters are specified in the
|
|
165
|
+
parameter descriptions above; see the link at the end of this section for
|
|
166
|
+
a detailed explanation.
|
|
167
|
+
|
|
168
|
+
When adjust is True (default), weighted averages are calculated using
|
|
169
|
+
weights (1-alpha)**(n-1), (1-alpha)**(n-2), ..., 1-alpha, 1.
|
|
170
|
+
|
|
171
|
+
When adjust is False, weighted averages are calculated recursively as:
|
|
172
|
+
|
|
173
|
+
weighted_average[0] = arg[0];
|
|
174
|
+
weighted_average[i] = (1-alpha)*weighted_average[i-1] + alpha*arg[i].
|
|
175
|
+
|
|
176
|
+
When ignore_na is False (default), weights are based on absolute positions.
|
|
177
|
+
For example, the weights of x and y used in calculating the final weighted
|
|
178
|
+
average of [x, None, y] are (1-alpha)**2 and 1 (if adjust is True), and
|
|
179
|
+
(1-alpha)**2 and alpha (if adjust is False).
|
|
180
|
+
|
|
181
|
+
When ignore_na is True (reproducing pre-0.15.0 behavior), weights are based
|
|
182
|
+
on relative positions. For example, the weights of x and y used in
|
|
183
|
+
calculating the final weighted average of [x, None, y] are 1-alpha and 1
|
|
184
|
+
(if adjust is True), and 1-alpha and alpha (if adjust is False).
|
|
185
|
+
|
|
186
|
+
More details can be found at
|
|
187
|
+
https://pandas.pydata.org/pandas-docs/stable/user_guide/computation.html#exponentially-weighted-windows
|
|
188
|
+
|
|
189
|
+
Examples
|
|
190
|
+
--------
|
|
191
|
+
>>> import numpy as np
|
|
192
|
+
>>> import maxframe.dataframe as md
|
|
193
|
+
>>> df = md.DataFrame({'B': [0, 1, 2, np.nan, 4]})
|
|
194
|
+
>>> df.execute()
|
|
195
|
+
B
|
|
196
|
+
0 0.0
|
|
197
|
+
1 1.0
|
|
198
|
+
2 2.0
|
|
199
|
+
3 NaN
|
|
200
|
+
4 4.0
|
|
201
|
+
>>> df.ewm(com=0.5).mean().execute()
|
|
202
|
+
B
|
|
203
|
+
0 0.000000
|
|
204
|
+
1 0.750000
|
|
205
|
+
2 1.615385
|
|
206
|
+
3 1.615385
|
|
207
|
+
4 3.670213
|
|
208
|
+
"""
|
|
209
|
+
axis = validate_axis(axis, obj)
|
|
210
|
+
|
|
211
|
+
decay_count = 0
|
|
212
|
+
for arg in (com, span, halflife, alpha):
|
|
213
|
+
if arg is not None:
|
|
214
|
+
decay_count += 1
|
|
215
|
+
|
|
216
|
+
if decay_count == 0:
|
|
217
|
+
raise ValueError("Must pass one of comass, span, halflife, or alpha")
|
|
218
|
+
if decay_count > 1:
|
|
219
|
+
raise ValueError("comass, span, halflife, and alpha are mutually exclusive")
|
|
220
|
+
|
|
221
|
+
if com is not None:
|
|
222
|
+
if com < 0:
|
|
223
|
+
raise ValueError("comass must satisfy: comass >= 0")
|
|
224
|
+
alpha = 1.0 / (1 + com)
|
|
225
|
+
elif span is not None:
|
|
226
|
+
if span < 1:
|
|
227
|
+
raise ValueError("span must satisfy: span >= 1")
|
|
228
|
+
alpha = 2.0 / (1 + span)
|
|
229
|
+
elif halflife is not None:
|
|
230
|
+
if halflife <= 0:
|
|
231
|
+
raise ValueError("halflife must satisfy: halflife > 0")
|
|
232
|
+
alpha = 1.0 - math.exp(math.log(0.5) / halflife)
|
|
233
|
+
if alpha <= 0 or alpha > 1:
|
|
234
|
+
raise ValueError("alpha must satisfy: 0 < alpha <= 1")
|
|
235
|
+
|
|
236
|
+
if alpha == 1:
|
|
237
|
+
return obj.expanding(min_periods=min_periods, axis=axis)
|
|
238
|
+
|
|
239
|
+
if _default_min_period_1:
|
|
240
|
+
min_periods = min_periods or 1
|
|
241
|
+
|
|
242
|
+
return EWM(
|
|
243
|
+
input=obj,
|
|
244
|
+
alpha=alpha,
|
|
245
|
+
min_periods=min_periods,
|
|
246
|
+
adjust=adjust,
|
|
247
|
+
ignore_na=ignore_na,
|
|
248
|
+
axis=axis,
|
|
249
|
+
)
|
|
@@ -0,0 +1,147 @@
|
|
|
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
|
+
|
|
16
|
+
from collections import OrderedDict
|
|
17
|
+
|
|
18
|
+
from ... import opcodes
|
|
19
|
+
from ...serialization.serializables import (
|
|
20
|
+
BoolField,
|
|
21
|
+
Int32Field,
|
|
22
|
+
Int64Field,
|
|
23
|
+
StringField,
|
|
24
|
+
)
|
|
25
|
+
from ...utils import pd_release_version
|
|
26
|
+
from ..utils import validate_axis
|
|
27
|
+
from .aggregation import BaseDataFrameExpandingAgg
|
|
28
|
+
from .core import Window
|
|
29
|
+
|
|
30
|
+
_window_has_method = pd_release_version >= (1, 3, 0)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class DataFrameExpandingAgg(BaseDataFrameExpandingAgg):
|
|
34
|
+
_op_type_ = opcodes.EXPANDING_AGG
|
|
35
|
+
|
|
36
|
+
center = BoolField("center", default=None)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class Expanding(Window):
|
|
40
|
+
min_periods = Int64Field("min_periods")
|
|
41
|
+
axis = Int32Field("axis")
|
|
42
|
+
center = BoolField("center")
|
|
43
|
+
method = StringField("method", default="single")
|
|
44
|
+
|
|
45
|
+
def __call__(self, df):
|
|
46
|
+
return df.expanding(**self.params)
|
|
47
|
+
|
|
48
|
+
@property
|
|
49
|
+
def params(self):
|
|
50
|
+
p = OrderedDict()
|
|
51
|
+
|
|
52
|
+
if not _window_has_method: # pragma: no cover
|
|
53
|
+
args = ["min_periods", "center", "axis"]
|
|
54
|
+
else:
|
|
55
|
+
args = ["min_periods", "center", "axis", "method"]
|
|
56
|
+
|
|
57
|
+
for k in args:
|
|
58
|
+
p[k] = getattr(self, k)
|
|
59
|
+
return p
|
|
60
|
+
|
|
61
|
+
def aggregate(self, func, **kwargs):
|
|
62
|
+
count_always_valid = kwargs.pop("_count_always_valid", False)
|
|
63
|
+
|
|
64
|
+
op = DataFrameExpandingAgg(
|
|
65
|
+
func=func, count_always_valid=count_always_valid, **self.params
|
|
66
|
+
)
|
|
67
|
+
return op(self)
|
|
68
|
+
|
|
69
|
+
agg = aggregate
|
|
70
|
+
|
|
71
|
+
def sum(self):
|
|
72
|
+
return self.aggregate("sum")
|
|
73
|
+
|
|
74
|
+
def count(self):
|
|
75
|
+
return self.aggregate("count")
|
|
76
|
+
|
|
77
|
+
def min(self):
|
|
78
|
+
return self.aggregate("min")
|
|
79
|
+
|
|
80
|
+
def max(self):
|
|
81
|
+
return self.aggregate("max")
|
|
82
|
+
|
|
83
|
+
def mean(self):
|
|
84
|
+
return self.aggregate("mean")
|
|
85
|
+
|
|
86
|
+
def var(self):
|
|
87
|
+
return self.aggregate("var")
|
|
88
|
+
|
|
89
|
+
def std(self):
|
|
90
|
+
return self.aggregate("std")
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def expanding(obj, min_periods=1, center=False, axis=0):
|
|
94
|
+
"""
|
|
95
|
+
Provide expanding transformations.
|
|
96
|
+
|
|
97
|
+
Parameters
|
|
98
|
+
----------
|
|
99
|
+
min_periods : int, default 1
|
|
100
|
+
Minimum number of observations in window required to have a value
|
|
101
|
+
(otherwise result is NA).
|
|
102
|
+
center : bool, default False
|
|
103
|
+
Set the labels at the center of the window.
|
|
104
|
+
axis : int or str, default 0
|
|
105
|
+
|
|
106
|
+
Returns
|
|
107
|
+
-------
|
|
108
|
+
a Window sub-classed for the particular operation
|
|
109
|
+
|
|
110
|
+
See Also
|
|
111
|
+
--------
|
|
112
|
+
rolling : Provides rolling window calculations.
|
|
113
|
+
ewm : Provides exponential weighted functions.
|
|
114
|
+
|
|
115
|
+
Notes
|
|
116
|
+
-----
|
|
117
|
+
By default, the result is set to the right edge of the window. This can be
|
|
118
|
+
changed to the center of the window by setting ``center=True``.
|
|
119
|
+
|
|
120
|
+
Examples
|
|
121
|
+
--------
|
|
122
|
+
>>> import numpy as np
|
|
123
|
+
>>> import maxframe.dataframe as md
|
|
124
|
+
>>> df = md.DataFrame({'B': [0, 1, 2, np.nan, 4]})
|
|
125
|
+
>>> df.execute()
|
|
126
|
+
B
|
|
127
|
+
0 0.0
|
|
128
|
+
1 1.0
|
|
129
|
+
2 2.0
|
|
130
|
+
3 NaN
|
|
131
|
+
4 4.0
|
|
132
|
+
>>> df.expanding(2).sum().execute()
|
|
133
|
+
B
|
|
134
|
+
0 NaN
|
|
135
|
+
1 1.0
|
|
136
|
+
2 3.0
|
|
137
|
+
3 3.0
|
|
138
|
+
4 7.0
|
|
139
|
+
"""
|
|
140
|
+
axis = validate_axis(axis, obj)
|
|
141
|
+
|
|
142
|
+
if center:
|
|
143
|
+
raise NotImplementedError("center == True is not supported")
|
|
144
|
+
if axis == 1:
|
|
145
|
+
raise NotImplementedError("axis other than 0 is not supported")
|
|
146
|
+
|
|
147
|
+
return Expanding(input=obj, min_periods=min_periods, center=center, axis=axis)
|