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,255 @@
|
|
|
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 numpy as np
|
|
16
|
+
import pandas as pd
|
|
17
|
+
|
|
18
|
+
from ... import opcodes
|
|
19
|
+
from ...core import OutputType
|
|
20
|
+
from ...serialization.serializables import AnyField, BoolField, DictField, TupleField
|
|
21
|
+
from ...utils import quiet_stdio
|
|
22
|
+
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
23
|
+
from ..utils import parse_index
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class GroupByTransform(DataFrameOperator, DataFrameOperatorMixin):
|
|
27
|
+
_op_type_ = opcodes.TRANSFORM
|
|
28
|
+
_op_module_ = "dataframe.groupby"
|
|
29
|
+
|
|
30
|
+
func = AnyField("func", default=None)
|
|
31
|
+
args = TupleField("args", default=())
|
|
32
|
+
kwds = DictField("kwds", default_factory=dict)
|
|
33
|
+
|
|
34
|
+
call_agg = BoolField("call_agg", default=None)
|
|
35
|
+
|
|
36
|
+
def __init__(self, output_types=None, **kw):
|
|
37
|
+
super().__init__(_output_types=output_types, **kw)
|
|
38
|
+
|
|
39
|
+
def _infer_df_func_returns(self, in_groupby, dtypes, index):
|
|
40
|
+
index_value, output_types, new_dtypes = None, None, None
|
|
41
|
+
|
|
42
|
+
output_types = (
|
|
43
|
+
[OutputType.dataframe]
|
|
44
|
+
if in_groupby.op.output_types[0] == OutputType.dataframe_groupby
|
|
45
|
+
else [OutputType.series]
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
try:
|
|
49
|
+
mock_groupby = in_groupby.op.build_mock_groupby()
|
|
50
|
+
with np.errstate(all="ignore"), quiet_stdio():
|
|
51
|
+
if self.call_agg:
|
|
52
|
+
infer_df = mock_groupby.agg(self.func, *self.args, **self.kwds)
|
|
53
|
+
else:
|
|
54
|
+
infer_df = mock_groupby.transform(
|
|
55
|
+
self.func, *self.args, **self.kwds
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
# todo return proper index when sort=True is implemented
|
|
59
|
+
index_value = parse_index(None, in_groupby.key, self.func)
|
|
60
|
+
|
|
61
|
+
if isinstance(infer_df, pd.DataFrame):
|
|
62
|
+
output_types = [OutputType.dataframe]
|
|
63
|
+
new_dtypes = new_dtypes or infer_df.dtypes
|
|
64
|
+
else:
|
|
65
|
+
output_types = [OutputType.series]
|
|
66
|
+
new_dtypes = new_dtypes or (infer_df.name, infer_df.dtype)
|
|
67
|
+
except: # noqa: E722 # nosec
|
|
68
|
+
pass
|
|
69
|
+
|
|
70
|
+
self.output_types = output_types if not self.output_types else self.output_types
|
|
71
|
+
dtypes = new_dtypes if dtypes is None else dtypes
|
|
72
|
+
index_value = index_value if index is None else parse_index(index)
|
|
73
|
+
return dtypes, index_value
|
|
74
|
+
|
|
75
|
+
def __call__(
|
|
76
|
+
self, groupby, dtypes=None, dtype=None, name=None, index=None, skip_infer=None
|
|
77
|
+
):
|
|
78
|
+
in_df = groupby.inputs[0]
|
|
79
|
+
|
|
80
|
+
if dtypes is None and dtype is not None:
|
|
81
|
+
dtypes = (name, dtype)
|
|
82
|
+
if skip_infer:
|
|
83
|
+
dtypes, index_value = None, None
|
|
84
|
+
self.output_types = (
|
|
85
|
+
[OutputType.dataframe]
|
|
86
|
+
if groupby.op.output_types[0] == OutputType.dataframe_groupby
|
|
87
|
+
else [OutputType.series]
|
|
88
|
+
)
|
|
89
|
+
else:
|
|
90
|
+
dtypes, index_value = self._infer_df_func_returns(groupby, dtypes, index)
|
|
91
|
+
for arg, desc in zip(
|
|
92
|
+
(self.output_types, dtypes), ("output_types", "dtypes")
|
|
93
|
+
):
|
|
94
|
+
if arg is None:
|
|
95
|
+
raise TypeError(
|
|
96
|
+
f"Cannot determine {desc} by calculating with enumerate data, "
|
|
97
|
+
"please specify it as arguments"
|
|
98
|
+
)
|
|
99
|
+
if index_value is None:
|
|
100
|
+
index_value = parse_index(None, (in_df.key, in_df.index_value.key))
|
|
101
|
+
|
|
102
|
+
if self.output_types[0] == OutputType.dataframe:
|
|
103
|
+
new_shape = (
|
|
104
|
+
np.nan if self.call_agg else in_df.shape[0],
|
|
105
|
+
len(dtypes) if dtypes is not None else np.nan,
|
|
106
|
+
)
|
|
107
|
+
columns_value = (
|
|
108
|
+
parse_index(dtypes.index, store_data=True)
|
|
109
|
+
if dtypes is not None
|
|
110
|
+
else None
|
|
111
|
+
)
|
|
112
|
+
return self.new_dataframe(
|
|
113
|
+
[groupby],
|
|
114
|
+
shape=new_shape,
|
|
115
|
+
dtypes=dtypes,
|
|
116
|
+
index_value=index_value,
|
|
117
|
+
columns_value=columns_value,
|
|
118
|
+
)
|
|
119
|
+
else:
|
|
120
|
+
name, dtype = dtypes
|
|
121
|
+
new_shape = (np.nan,) if self.call_agg else groupby.shape
|
|
122
|
+
return self.new_series(
|
|
123
|
+
[groupby],
|
|
124
|
+
name=name,
|
|
125
|
+
shape=new_shape,
|
|
126
|
+
dtype=dtype,
|
|
127
|
+
index_value=index_value,
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def groupby_transform(
|
|
132
|
+
groupby,
|
|
133
|
+
f,
|
|
134
|
+
*args,
|
|
135
|
+
dtypes=None,
|
|
136
|
+
dtype=None,
|
|
137
|
+
name=None,
|
|
138
|
+
index=None,
|
|
139
|
+
output_types=None,
|
|
140
|
+
skip_infer=False,
|
|
141
|
+
**kwargs,
|
|
142
|
+
):
|
|
143
|
+
"""
|
|
144
|
+
Call function producing a like-indexed DataFrame on each group and
|
|
145
|
+
return a DataFrame having the same indexes as the original object
|
|
146
|
+
filled with the transformed values
|
|
147
|
+
|
|
148
|
+
Parameters
|
|
149
|
+
----------
|
|
150
|
+
f : function
|
|
151
|
+
Function to apply to each group.
|
|
152
|
+
|
|
153
|
+
dtypes : Series, default None
|
|
154
|
+
Specify dtypes of returned DataFrames. See `Notes` for more details.
|
|
155
|
+
|
|
156
|
+
dtype : numpy.dtype, default None
|
|
157
|
+
Specify dtype of returned Series. See `Notes` for more details.
|
|
158
|
+
|
|
159
|
+
name : str, default None
|
|
160
|
+
Specify name of returned Series. See `Notes` for more details.
|
|
161
|
+
|
|
162
|
+
skip_infer: bool, default False
|
|
163
|
+
Whether infer dtypes when dtypes or output_type is not specified.
|
|
164
|
+
|
|
165
|
+
*args
|
|
166
|
+
Positional arguments to pass to func
|
|
167
|
+
|
|
168
|
+
**kwargs
|
|
169
|
+
Keyword arguments to be passed into func.
|
|
170
|
+
|
|
171
|
+
Returns
|
|
172
|
+
-------
|
|
173
|
+
DataFrame
|
|
174
|
+
|
|
175
|
+
See Also
|
|
176
|
+
--------
|
|
177
|
+
DataFrame.groupby.apply
|
|
178
|
+
DataFrame.groupby.aggregate
|
|
179
|
+
DataFrame.transform
|
|
180
|
+
|
|
181
|
+
Notes
|
|
182
|
+
-----
|
|
183
|
+
Each group is endowed the attribute 'name' in case you need to know
|
|
184
|
+
which group you are working on.
|
|
185
|
+
|
|
186
|
+
The current implementation imposes three requirements on f:
|
|
187
|
+
|
|
188
|
+
* f must return a value that either has the same shape as the input
|
|
189
|
+
subframe or can be broadcast to the shape of the input subframe.
|
|
190
|
+
For example, if `f` returns a scalar it will be broadcast to have the
|
|
191
|
+
same shape as the input subframe.
|
|
192
|
+
* if this is a DataFrame, f must support application column-by-column
|
|
193
|
+
in the subframe. If f also supports application to the entire subframe,
|
|
194
|
+
then a fast path is used starting from the second chunk.
|
|
195
|
+
* f must not mutate groups. Mutation is not supported and may
|
|
196
|
+
produce unexpected results.
|
|
197
|
+
|
|
198
|
+
Notes
|
|
199
|
+
-----
|
|
200
|
+
When deciding output dtypes and shape of the return value, MaxFrame will
|
|
201
|
+
try applying ``func`` onto a mock grouped object, and the transform call
|
|
202
|
+
may fail.
|
|
203
|
+
|
|
204
|
+
* For DataFrame output, you need to specify a list or a pandas Series
|
|
205
|
+
as ``dtypes`` of output DataFrame. ``index`` of output can also be
|
|
206
|
+
specified.
|
|
207
|
+
* For Series output, you need to specify ``dtype`` and ``name`` of
|
|
208
|
+
output Series.
|
|
209
|
+
|
|
210
|
+
Examples
|
|
211
|
+
--------
|
|
212
|
+
|
|
213
|
+
>>> import maxframe.dataframe as md
|
|
214
|
+
>>> df = md.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',
|
|
215
|
+
... 'foo', 'bar'],
|
|
216
|
+
... 'B' : ['one', 'one', 'two', 'three',
|
|
217
|
+
... 'two', 'two'],
|
|
218
|
+
... 'C' : [1, 5, 5, 2, 5, 5],
|
|
219
|
+
... 'D' : [2.0, 5., 8., 1., 2., 9.]})
|
|
220
|
+
>>> grouped = df.groupby('A')
|
|
221
|
+
>>> grouped.transform(lambda x: (x - x.mean()) / x.std()).execute()
|
|
222
|
+
C D
|
|
223
|
+
0 -1.154701 -0.577350
|
|
224
|
+
1 0.577350 0.000000
|
|
225
|
+
2 0.577350 1.154701
|
|
226
|
+
3 -1.154701 -1.000000
|
|
227
|
+
4 0.577350 -0.577350
|
|
228
|
+
5 0.577350 1.000000
|
|
229
|
+
|
|
230
|
+
Broadcast result of the transformation
|
|
231
|
+
|
|
232
|
+
>>> grouped.transform(lambda x: x.max() - x.min()).execute()
|
|
233
|
+
C D
|
|
234
|
+
0 4 6.0
|
|
235
|
+
1 3 8.0
|
|
236
|
+
2 4 6.0
|
|
237
|
+
3 3 8.0
|
|
238
|
+
4 4 6.0
|
|
239
|
+
5 3 8.0
|
|
240
|
+
"""
|
|
241
|
+
call_agg = kwargs.pop("_call_agg", False)
|
|
242
|
+
if not call_agg and isinstance(f, (dict, list)):
|
|
243
|
+
raise TypeError(f"Does not support transform with {type(f)}")
|
|
244
|
+
|
|
245
|
+
op = GroupByTransform(
|
|
246
|
+
func=f, args=args, kwds=kwargs, output_types=output_types, call_agg=call_agg
|
|
247
|
+
)
|
|
248
|
+
return op(
|
|
249
|
+
groupby,
|
|
250
|
+
dtypes=dtypes,
|
|
251
|
+
dtype=dtype,
|
|
252
|
+
name=name,
|
|
253
|
+
index=index,
|
|
254
|
+
skip_infer=skip_infer,
|
|
255
|
+
)
|
|
@@ -0,0 +1,84 @@
|
|
|
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, INDEX_TYPE, SERIES_TYPE
|
|
18
|
+
from .add_prefix_suffix import (
|
|
19
|
+
df_add_prefix,
|
|
20
|
+
df_add_suffix,
|
|
21
|
+
series_add_prefix,
|
|
22
|
+
series_add_suffix,
|
|
23
|
+
)
|
|
24
|
+
from .align import align
|
|
25
|
+
from .at import at
|
|
26
|
+
from .getitem import dataframe_getitem, series_getitem
|
|
27
|
+
from .iat import iat
|
|
28
|
+
from .iloc import head, iloc, index_getitem, index_setitem, tail
|
|
29
|
+
from .insert import df_insert
|
|
30
|
+
from .loc import loc
|
|
31
|
+
from .reindex import reindex, reindex_like
|
|
32
|
+
from .rename import df_rename, index_rename, index_set_names, series_rename
|
|
33
|
+
from .rename_axis import rename_axis
|
|
34
|
+
from .reset_index import df_reset_index, series_reset_index
|
|
35
|
+
from .sample import sample
|
|
36
|
+
from .set_axis import df_set_axis, series_set_axis
|
|
37
|
+
from .set_index import set_index
|
|
38
|
+
from .setitem import dataframe_setitem
|
|
39
|
+
from .where import mask, where
|
|
40
|
+
|
|
41
|
+
for cls in DATAFRAME_TYPE + SERIES_TYPE:
|
|
42
|
+
setattr(cls, "at", property(fget=at))
|
|
43
|
+
setattr(cls, "head", head)
|
|
44
|
+
setattr(cls, "iat", property(fget=iat))
|
|
45
|
+
setattr(cls, "iloc", property(fget=iloc))
|
|
46
|
+
setattr(cls, "loc", property(fget=loc))
|
|
47
|
+
setattr(cls, "mask", mask)
|
|
48
|
+
setattr(cls, "reindex", reindex)
|
|
49
|
+
setattr(cls, "reindex_like", reindex_like)
|
|
50
|
+
setattr(cls, "rename_axis", rename_axis)
|
|
51
|
+
setattr(cls, "sample", sample)
|
|
52
|
+
setattr(cls, "tail", tail)
|
|
53
|
+
setattr(cls, "where", where)
|
|
54
|
+
|
|
55
|
+
for cls in DATAFRAME_TYPE:
|
|
56
|
+
setattr(cls, "add_prefix", df_add_prefix)
|
|
57
|
+
setattr(cls, "add_suffix", df_add_suffix)
|
|
58
|
+
setattr(cls, "align", align)
|
|
59
|
+
setattr(cls, "__getitem__", dataframe_getitem)
|
|
60
|
+
setattr(cls, "insert", df_insert)
|
|
61
|
+
setattr(cls, "rename", df_rename)
|
|
62
|
+
setattr(cls, "reset_index", df_reset_index)
|
|
63
|
+
setattr(cls, "set_axis", df_set_axis)
|
|
64
|
+
setattr(cls, "set_index", set_index)
|
|
65
|
+
setattr(cls, "__setitem__", dataframe_setitem)
|
|
66
|
+
|
|
67
|
+
for cls in SERIES_TYPE:
|
|
68
|
+
setattr(cls, "add_prefix", series_add_prefix)
|
|
69
|
+
setattr(cls, "add_suffix", series_add_suffix)
|
|
70
|
+
setattr(cls, "align", align)
|
|
71
|
+
setattr(cls, "__getitem__", series_getitem)
|
|
72
|
+
setattr(cls, "rename", series_rename)
|
|
73
|
+
setattr(cls, "reset_index", series_reset_index)
|
|
74
|
+
setattr(cls, "set_axis", series_set_axis)
|
|
75
|
+
|
|
76
|
+
for cls in INDEX_TYPE:
|
|
77
|
+
setattr(cls, "__getitem__", index_getitem)
|
|
78
|
+
setattr(cls, "__setitem__", index_setitem)
|
|
79
|
+
setattr(cls, "rename", index_rename)
|
|
80
|
+
setattr(cls, "set_names", index_set_names)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
_install()
|
|
84
|
+
del _install
|
|
@@ -0,0 +1,110 @@
|
|
|
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 textwrap
|
|
16
|
+
from functools import partial
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _get_prefix_suffix_docs(is_prefix: bool):
|
|
20
|
+
if is_prefix:
|
|
21
|
+
action, pos = "prefix", "before"
|
|
22
|
+
r_action = "suffix"
|
|
23
|
+
else:
|
|
24
|
+
action, pos = "suffix", "after"
|
|
25
|
+
r_action = "prefix"
|
|
26
|
+
|
|
27
|
+
def mk_col(ch: str, s: str):
|
|
28
|
+
return f"{ch}_{s}" if is_prefix else f"{s}_{ch}"
|
|
29
|
+
|
|
30
|
+
doc = f"""
|
|
31
|
+
{action.capitalize()} labels with string `{action}`.
|
|
32
|
+
|
|
33
|
+
For Series, the row labels are {action}ed.
|
|
34
|
+
For DataFrame, the column labels are {action}ed.
|
|
35
|
+
|
|
36
|
+
Parameters
|
|
37
|
+
----------
|
|
38
|
+
{action} : str
|
|
39
|
+
The string to add {pos} each label.
|
|
40
|
+
|
|
41
|
+
Returns
|
|
42
|
+
-------
|
|
43
|
+
Series or DataFrame
|
|
44
|
+
New Series or DataFrame with updated labels.
|
|
45
|
+
|
|
46
|
+
See Also
|
|
47
|
+
--------
|
|
48
|
+
Series.add_{r_action}: Suffix row labels with string `{r_action}`.
|
|
49
|
+
DataFrame.add_{r_action}: Suffix column labels with string `{r_action}`.
|
|
50
|
+
|
|
51
|
+
Examples
|
|
52
|
+
--------
|
|
53
|
+
>>> import maxframe.dataframe as md
|
|
54
|
+
>>> s = md.Series([1, 2, 3, 4])
|
|
55
|
+
>>> s.execute()
|
|
56
|
+
0 1
|
|
57
|
+
1 2
|
|
58
|
+
2 3
|
|
59
|
+
3 4
|
|
60
|
+
dtype: int64
|
|
61
|
+
|
|
62
|
+
>>> s.add_prefix({mk_col('item', '')!r}).execute()
|
|
63
|
+
{mk_col('item', '0')} 1
|
|
64
|
+
{mk_col('item', '1')} 2
|
|
65
|
+
{mk_col('item', '2')} 3
|
|
66
|
+
{mk_col('item', '3')} 4
|
|
67
|
+
dtype: int64
|
|
68
|
+
|
|
69
|
+
>>> df = md.DataFrame({{'A': [1, 2, 3, 4], 'B': [3, 4, 5, 6]}})
|
|
70
|
+
>>> df.execute()
|
|
71
|
+
A B
|
|
72
|
+
0 1 3
|
|
73
|
+
1 2 4
|
|
74
|
+
2 3 5
|
|
75
|
+
3 4 6
|
|
76
|
+
|
|
77
|
+
>>> df.add_prefix({mk_col('col', '')!r}).execute()
|
|
78
|
+
{mk_col('col', 'A')} {mk_col('col', 'B')}
|
|
79
|
+
0 1 3
|
|
80
|
+
1 2 4
|
|
81
|
+
2 3 5
|
|
82
|
+
3 4 6
|
|
83
|
+
"""
|
|
84
|
+
return textwrap.dedent(doc).strip()
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def df_add_prefix(df, prefix):
|
|
88
|
+
f = partial("{prefix}{}".format, prefix=prefix)
|
|
89
|
+
return df.rename(columns=f)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def series_add_prefix(series, prefix):
|
|
93
|
+
f = partial("{prefix}{}".format, prefix=prefix)
|
|
94
|
+
return series.rename(index=f)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def df_add_suffix(df, suffix):
|
|
98
|
+
f = partial("{}{suffix}".format, suffix=suffix)
|
|
99
|
+
return df.rename(columns=f)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def series_add_suffix(series, suffix):
|
|
103
|
+
f = partial("{}{suffix}".format, suffix=suffix)
|
|
104
|
+
return series.rename(index=f)
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
df_add_prefix.__doc__ = _get_prefix_suffix_docs(True)
|
|
108
|
+
series_add_prefix.__doc__ = df_add_prefix.__doc__
|
|
109
|
+
df_add_suffix.__doc__ = _get_prefix_suffix_docs(False)
|
|
110
|
+
series_add_suffix.__doc__ = df_add_suffix.__doc__
|