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,308 @@
|
|
|
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 ENTITY_TYPE
|
|
20
|
+
from ...serialization.serializables import AnyField, BoolField, Int32Field, StringField
|
|
21
|
+
from ...tensor.utils import filter_inputs
|
|
22
|
+
from ..core import DATAFRAME_TYPE, SERIES_TYPE
|
|
23
|
+
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
24
|
+
from ..utils import build_df, build_series, validate_axis
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class DataFrameWhere(DataFrameOperator, DataFrameOperatorMixin):
|
|
28
|
+
_op_type_ = opcodes.WHERE
|
|
29
|
+
|
|
30
|
+
_input = AnyField("input")
|
|
31
|
+
cond = AnyField("cond", default=None)
|
|
32
|
+
other = AnyField("other", default=None)
|
|
33
|
+
axis = Int32Field("axis", default=None)
|
|
34
|
+
level = AnyField("level", default=None)
|
|
35
|
+
errors = StringField("errors", default=None)
|
|
36
|
+
try_cast = BoolField("try_cast", default=None)
|
|
37
|
+
replace_true = BoolField("replace_true", default=None)
|
|
38
|
+
|
|
39
|
+
def __init__(self, input=None, **kw):
|
|
40
|
+
super().__init__(_input=input, **kw)
|
|
41
|
+
|
|
42
|
+
@property
|
|
43
|
+
def input(self):
|
|
44
|
+
return self._input
|
|
45
|
+
|
|
46
|
+
def __call__(self, df_or_series):
|
|
47
|
+
def _check_input_index(obj, axis=None):
|
|
48
|
+
axis = axis if axis is not None else self.axis
|
|
49
|
+
if isinstance(obj, DATAFRAME_TYPE) and (
|
|
50
|
+
df_or_series.columns_value.key != obj.columns_value.key
|
|
51
|
+
or df_or_series.index_value.key != obj.index_value.key
|
|
52
|
+
):
|
|
53
|
+
raise NotImplementedError("Aligning different indices not supported")
|
|
54
|
+
elif (
|
|
55
|
+
isinstance(obj, SERIES_TYPE)
|
|
56
|
+
and df_or_series.axes[axis].index_value.key != obj.index_value.key
|
|
57
|
+
):
|
|
58
|
+
raise NotImplementedError("Aligning different indices not supported")
|
|
59
|
+
|
|
60
|
+
_check_input_index(self.cond, axis=0)
|
|
61
|
+
_check_input_index(self.other)
|
|
62
|
+
|
|
63
|
+
if isinstance(df_or_series, DATAFRAME_TYPE):
|
|
64
|
+
mock_obj = build_df(df_or_series)
|
|
65
|
+
else:
|
|
66
|
+
mock_obj = build_series(df_or_series)
|
|
67
|
+
|
|
68
|
+
if isinstance(self.other, (pd.DataFrame, DATAFRAME_TYPE)):
|
|
69
|
+
mock_other = build_df(self.other)
|
|
70
|
+
elif isinstance(self.other, (pd.Series, SERIES_TYPE)):
|
|
71
|
+
mock_other = build_series(self.other)
|
|
72
|
+
else:
|
|
73
|
+
mock_other = self.other
|
|
74
|
+
|
|
75
|
+
result_df = mock_obj.where(
|
|
76
|
+
np.zeros(mock_obj.shape).astype(bool),
|
|
77
|
+
other=mock_other,
|
|
78
|
+
axis=self.axis,
|
|
79
|
+
level=self.level,
|
|
80
|
+
errors=self.errors,
|
|
81
|
+
try_cast=self.try_cast,
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
inputs = filter_inputs([df_or_series, self.cond, self.other])
|
|
85
|
+
if isinstance(df_or_series, DATAFRAME_TYPE):
|
|
86
|
+
return self.new_dataframe(
|
|
87
|
+
inputs,
|
|
88
|
+
shape=df_or_series.shape,
|
|
89
|
+
dtypes=result_df.dtypes,
|
|
90
|
+
index_value=df_or_series.index_value,
|
|
91
|
+
columns_value=df_or_series.columns_value,
|
|
92
|
+
)
|
|
93
|
+
else:
|
|
94
|
+
return self.new_series(
|
|
95
|
+
inputs,
|
|
96
|
+
shape=df_or_series.shape,
|
|
97
|
+
name=df_or_series.name,
|
|
98
|
+
dtype=result_df.dtype,
|
|
99
|
+
index_value=df_or_series.index_value,
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
def _set_inputs(self, inputs):
|
|
103
|
+
super()._set_inputs(inputs)
|
|
104
|
+
inputs_iter = iter(self._inputs)
|
|
105
|
+
self._input = next(inputs_iter)
|
|
106
|
+
if isinstance(self.cond, ENTITY_TYPE):
|
|
107
|
+
self.cond = next(inputs_iter)
|
|
108
|
+
if isinstance(self.other, ENTITY_TYPE):
|
|
109
|
+
self.other = next(inputs_iter)
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
_doc_template = """
|
|
113
|
+
Replace values where the condition is {replace_true}.
|
|
114
|
+
|
|
115
|
+
Parameters
|
|
116
|
+
----------
|
|
117
|
+
cond : bool Series/DataFrame, array-like, or callable
|
|
118
|
+
Where `cond` is False, keep the original value. Where
|
|
119
|
+
True, replace with corresponding value from `other`.
|
|
120
|
+
If `cond` is callable, it is computed on the Series/DataFrame and
|
|
121
|
+
should return boolean Series/DataFrame or array. The callable must
|
|
122
|
+
not change input Series/DataFrame (though pandas doesn't check it).
|
|
123
|
+
other : scalar, Series/DataFrame, or callable
|
|
124
|
+
Entries where `cond` is True are replaced with
|
|
125
|
+
corresponding value from `other`.
|
|
126
|
+
If other is callable, it is computed on the Series/DataFrame and
|
|
127
|
+
should return scalar or Series/DataFrame. The callable must not
|
|
128
|
+
change input Series/DataFrame (though pandas doesn't check it).
|
|
129
|
+
inplace : bool, default False
|
|
130
|
+
Whether to perform the operation in place on the data.
|
|
131
|
+
axis : int, default None
|
|
132
|
+
Alignment axis if needed.
|
|
133
|
+
level : int, default None
|
|
134
|
+
Alignment level if needed.
|
|
135
|
+
errors : str, {{'raise', 'ignore'}}, default 'raise'
|
|
136
|
+
Note that currently this parameter won't affect
|
|
137
|
+
the results and will always coerce to a suitable dtype.
|
|
138
|
+
|
|
139
|
+
- 'raise' : allow exceptions to be raised.
|
|
140
|
+
- 'ignore' : suppress exceptions. On error return original object.
|
|
141
|
+
|
|
142
|
+
try_cast : bool, default False
|
|
143
|
+
Try to cast the result back to the input type (if possible).
|
|
144
|
+
|
|
145
|
+
Returns
|
|
146
|
+
-------
|
|
147
|
+
Same type as caller
|
|
148
|
+
|
|
149
|
+
See Also
|
|
150
|
+
--------
|
|
151
|
+
:func:`DataFrame.{opposite}` : Return an object of same shape as
|
|
152
|
+
self.
|
|
153
|
+
|
|
154
|
+
Notes
|
|
155
|
+
-----
|
|
156
|
+
The mask method is an application of the if-then idiom. For each
|
|
157
|
+
element in the calling DataFrame, if ``cond`` is ``False`` the
|
|
158
|
+
element is used; otherwise the corresponding element from the DataFrame
|
|
159
|
+
``other`` is used.
|
|
160
|
+
|
|
161
|
+
The signature for :func:`DataFrame.where` differs from
|
|
162
|
+
:func:`numpy.where`. Roughly ``df1.where(m, df2)`` is equivalent to
|
|
163
|
+
``np.where(m, df1, df2)``.
|
|
164
|
+
|
|
165
|
+
For further details and examples see the ``mask`` documentation in
|
|
166
|
+
:ref:`indexing <indexing.where_mask>`.
|
|
167
|
+
|
|
168
|
+
Examples
|
|
169
|
+
--------
|
|
170
|
+
>>> import maxframe.tensor as mt
|
|
171
|
+
>>> import maxframe.dataframe as md
|
|
172
|
+
>>> s = md.Series(range(5))
|
|
173
|
+
>>> s.where(s > 0).execute()
|
|
174
|
+
0 NaN
|
|
175
|
+
1 1.0
|
|
176
|
+
2 2.0
|
|
177
|
+
3 3.0
|
|
178
|
+
4 4.0
|
|
179
|
+
dtype: float64
|
|
180
|
+
|
|
181
|
+
>>> s.mask(s > 0).execute()
|
|
182
|
+
0 0.0
|
|
183
|
+
1 NaN
|
|
184
|
+
2 NaN
|
|
185
|
+
3 NaN
|
|
186
|
+
4 NaN
|
|
187
|
+
dtype: float64
|
|
188
|
+
|
|
189
|
+
>>> s.where(s > 1, 10).execute()
|
|
190
|
+
0 10
|
|
191
|
+
1 10
|
|
192
|
+
2 2
|
|
193
|
+
3 3
|
|
194
|
+
4 4
|
|
195
|
+
dtype: int64
|
|
196
|
+
|
|
197
|
+
>>> df = md.DataFrame(mt.arange(10).reshape(-1, 2), columns=['A', 'B'])
|
|
198
|
+
>>> df.execute()
|
|
199
|
+
A B
|
|
200
|
+
0 0 1
|
|
201
|
+
1 2 3
|
|
202
|
+
2 4 5
|
|
203
|
+
3 6 7
|
|
204
|
+
4 8 9
|
|
205
|
+
>>> m = df % 3 == 0
|
|
206
|
+
>>> df.where(m, -df).execute()
|
|
207
|
+
A B
|
|
208
|
+
0 0 -1
|
|
209
|
+
1 -2 3
|
|
210
|
+
2 -4 -5
|
|
211
|
+
3 6 -7
|
|
212
|
+
4 -8 9
|
|
213
|
+
>>> df.where(m, -df) == mt.where(m, df, -df).execute()
|
|
214
|
+
A B
|
|
215
|
+
0 True True
|
|
216
|
+
1 True True
|
|
217
|
+
2 True True
|
|
218
|
+
3 True True
|
|
219
|
+
4 True True
|
|
220
|
+
>>> df.where(m, -df) == df.mask(~m, -df).execute()
|
|
221
|
+
A B
|
|
222
|
+
0 True True
|
|
223
|
+
1 True True
|
|
224
|
+
2 True True
|
|
225
|
+
3 True True
|
|
226
|
+
4 True True
|
|
227
|
+
"""
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
def _where(
|
|
231
|
+
df_or_series,
|
|
232
|
+
cond,
|
|
233
|
+
other=np.nan,
|
|
234
|
+
inplace=False,
|
|
235
|
+
axis=None,
|
|
236
|
+
level=None,
|
|
237
|
+
errors="raise",
|
|
238
|
+
try_cast=False,
|
|
239
|
+
replace_true=False,
|
|
240
|
+
):
|
|
241
|
+
if df_or_series.ndim == 2 and getattr(other, "ndim", 2) == 1 and axis is None:
|
|
242
|
+
raise ValueError("Must specify axis=0 or 1")
|
|
243
|
+
|
|
244
|
+
axis = validate_axis(axis or 0, df_or_series)
|
|
245
|
+
op = DataFrameWhere(
|
|
246
|
+
cond=cond,
|
|
247
|
+
other=other,
|
|
248
|
+
axis=axis,
|
|
249
|
+
level=level,
|
|
250
|
+
errors=errors,
|
|
251
|
+
try_cast=try_cast,
|
|
252
|
+
replace_true=replace_true,
|
|
253
|
+
)
|
|
254
|
+
result = op(df_or_series)
|
|
255
|
+
if inplace:
|
|
256
|
+
df_or_series.data = result.data
|
|
257
|
+
else:
|
|
258
|
+
return result
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
def where(
|
|
262
|
+
df_or_series,
|
|
263
|
+
cond,
|
|
264
|
+
other=np.nan,
|
|
265
|
+
inplace=False,
|
|
266
|
+
axis=None,
|
|
267
|
+
level=None,
|
|
268
|
+
errors="raise",
|
|
269
|
+
try_cast=False,
|
|
270
|
+
):
|
|
271
|
+
return _where(
|
|
272
|
+
df_or_series,
|
|
273
|
+
cond,
|
|
274
|
+
other=other,
|
|
275
|
+
inplace=inplace,
|
|
276
|
+
axis=axis,
|
|
277
|
+
level=level,
|
|
278
|
+
errors=errors,
|
|
279
|
+
try_cast=try_cast,
|
|
280
|
+
replace_true=False,
|
|
281
|
+
)
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
def mask(
|
|
285
|
+
df_or_series,
|
|
286
|
+
cond,
|
|
287
|
+
other=np.nan,
|
|
288
|
+
inplace=False,
|
|
289
|
+
axis=None,
|
|
290
|
+
level=None,
|
|
291
|
+
errors="raise",
|
|
292
|
+
try_cast=False,
|
|
293
|
+
):
|
|
294
|
+
return _where(
|
|
295
|
+
df_or_series,
|
|
296
|
+
cond,
|
|
297
|
+
other=other,
|
|
298
|
+
inplace=inplace,
|
|
299
|
+
axis=axis,
|
|
300
|
+
level=level,
|
|
301
|
+
errors=errors,
|
|
302
|
+
try_cast=try_cast,
|
|
303
|
+
replace_true=True,
|
|
304
|
+
)
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
mask.__doc__ = _doc_template.format(replace_true=True, opposite="where")
|
|
308
|
+
where.__doc__ = _doc_template.format(replace_true=False, opposite="mask")
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from typing import Union
|
|
16
|
+
|
|
17
|
+
import pandas as pd
|
|
18
|
+
from pandas.core.dtypes.common import pandas_dtype
|
|
19
|
+
|
|
20
|
+
from ..core import ENTITY_TYPE
|
|
21
|
+
from ..serialization.serializables import SerializableMeta
|
|
22
|
+
from ..tensor import stack
|
|
23
|
+
from ..tensor import tensor as astensor
|
|
24
|
+
from ..tensor.array_utils import is_cupy
|
|
25
|
+
from ..tensor.core import TENSOR_TYPE
|
|
26
|
+
from ..utils import ceildiv, lazy_import
|
|
27
|
+
from .core import DATAFRAME_TYPE, INDEX_TYPE, SERIES_TYPE
|
|
28
|
+
from .core import DataFrame as _Frame
|
|
29
|
+
from .core import Index as _Index
|
|
30
|
+
from .core import Series as _Series
|
|
31
|
+
from .datasource.dataframe import from_pandas as from_pandas_df
|
|
32
|
+
from .datasource.from_tensor import (
|
|
33
|
+
dataframe_from_1d_tileables,
|
|
34
|
+
dataframe_from_tensor,
|
|
35
|
+
series_from_tensor,
|
|
36
|
+
)
|
|
37
|
+
from .datasource.index import from_pandas as from_pandas_index
|
|
38
|
+
from .datasource.index import from_tileable as from_tileable_index
|
|
39
|
+
from .datasource.series import from_pandas as from_pandas_series
|
|
40
|
+
from .utils import is_cudf, is_index
|
|
41
|
+
|
|
42
|
+
cudf = lazy_import("cudf")
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class InitializerMeta(SerializableMeta):
|
|
46
|
+
def __instancecheck__(cls, instance):
|
|
47
|
+
return isinstance(instance, (cls.__base__,) + getattr(cls, "_allow_data_type_"))
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class DataFrame(_Frame, metaclass=InitializerMeta):
|
|
51
|
+
def __init__(
|
|
52
|
+
self,
|
|
53
|
+
data=None,
|
|
54
|
+
index=None,
|
|
55
|
+
columns=None,
|
|
56
|
+
dtype=None,
|
|
57
|
+
copy=False,
|
|
58
|
+
chunk_size=None,
|
|
59
|
+
gpu=None,
|
|
60
|
+
sparse=None,
|
|
61
|
+
num_partitions=None,
|
|
62
|
+
):
|
|
63
|
+
need_repart = False
|
|
64
|
+
if isinstance(data, TENSOR_TYPE):
|
|
65
|
+
if chunk_size is not None:
|
|
66
|
+
data = data.rechunk(chunk_size)
|
|
67
|
+
df = dataframe_from_tensor(
|
|
68
|
+
data, index=index, columns=columns, gpu=gpu, sparse=sparse
|
|
69
|
+
)
|
|
70
|
+
need_repart = num_partitions is not None
|
|
71
|
+
elif isinstance(data, SERIES_TYPE):
|
|
72
|
+
df = data.to_frame()
|
|
73
|
+
need_repart = num_partitions is not None
|
|
74
|
+
elif isinstance(data, DATAFRAME_TYPE):
|
|
75
|
+
if not hasattr(data, "data"):
|
|
76
|
+
# DataFrameData
|
|
77
|
+
df = _Frame(data)
|
|
78
|
+
else:
|
|
79
|
+
df = data
|
|
80
|
+
need_repart = num_partitions is not None
|
|
81
|
+
elif isinstance(data, dict) and self._can_process_by_1d_tileables(data):
|
|
82
|
+
# data is a dict and some value is tensor
|
|
83
|
+
df = dataframe_from_1d_tileables(
|
|
84
|
+
data, index=index, columns=columns, gpu=gpu, sparse=sparse
|
|
85
|
+
)
|
|
86
|
+
need_repart = num_partitions is not None
|
|
87
|
+
elif isinstance(data, list) and any(isinstance(v, ENTITY_TYPE) for v in data):
|
|
88
|
+
# stack data together
|
|
89
|
+
data = stack(data)
|
|
90
|
+
df = dataframe_from_tensor(
|
|
91
|
+
data, index=index, columns=columns, gpu=gpu, sparse=sparse
|
|
92
|
+
)
|
|
93
|
+
need_repart = num_partitions is not None
|
|
94
|
+
elif isinstance(index, (INDEX_TYPE, SERIES_TYPE)):
|
|
95
|
+
if isinstance(data, dict):
|
|
96
|
+
data = {k: astensor(v, chunk_size=chunk_size) for k, v in data.items()}
|
|
97
|
+
df = dataframe_from_1d_tileables(
|
|
98
|
+
data, index=index, columns=columns, gpu=gpu, sparse=sparse
|
|
99
|
+
)
|
|
100
|
+
else:
|
|
101
|
+
if data is not None:
|
|
102
|
+
data = astensor(data, chunk_size=chunk_size)
|
|
103
|
+
df = dataframe_from_tensor(
|
|
104
|
+
data, index=index, columns=columns, gpu=gpu, sparse=sparse
|
|
105
|
+
)
|
|
106
|
+
need_repart = num_partitions is not None
|
|
107
|
+
else:
|
|
108
|
+
if is_cudf(data) or is_cupy(data): # pragma: no cover
|
|
109
|
+
pdf = cudf.DataFrame(data, index=index, columns=columns, dtype=dtype)
|
|
110
|
+
if copy:
|
|
111
|
+
pdf = pdf.copy()
|
|
112
|
+
else:
|
|
113
|
+
pdf = pd.DataFrame(
|
|
114
|
+
data, index=index, columns=columns, dtype=dtype, copy=copy
|
|
115
|
+
)
|
|
116
|
+
if num_partitions is not None:
|
|
117
|
+
chunk_size = ceildiv(len(pdf), num_partitions)
|
|
118
|
+
df = from_pandas_df(pdf, chunk_size=chunk_size, gpu=gpu, sparse=sparse)
|
|
119
|
+
|
|
120
|
+
if need_repart:
|
|
121
|
+
df = df.rebalance(num_partitions=num_partitions)
|
|
122
|
+
super().__init__(df.data)
|
|
123
|
+
|
|
124
|
+
@classmethod
|
|
125
|
+
def _can_process_by_1d_tileables(cls, data: dict):
|
|
126
|
+
for value in data.values():
|
|
127
|
+
if isinstance(value, ENTITY_TYPE):
|
|
128
|
+
return True
|
|
129
|
+
elif isinstance(value, (list, tuple)) and any(
|
|
130
|
+
isinstance(v, ENTITY_TYPE) for v in value
|
|
131
|
+
):
|
|
132
|
+
return True
|
|
133
|
+
return False
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
class Series(_Series, metaclass=InitializerMeta):
|
|
137
|
+
def __init__(
|
|
138
|
+
self,
|
|
139
|
+
data=None,
|
|
140
|
+
index=None,
|
|
141
|
+
dtype=None,
|
|
142
|
+
name=None,
|
|
143
|
+
copy=False,
|
|
144
|
+
chunk_size=None,
|
|
145
|
+
gpu=None,
|
|
146
|
+
sparse=None,
|
|
147
|
+
num_partitions=None,
|
|
148
|
+
):
|
|
149
|
+
if dtype is not None:
|
|
150
|
+
dtype = pandas_dtype(dtype)
|
|
151
|
+
need_repart = False
|
|
152
|
+
if isinstance(data, (TENSOR_TYPE, INDEX_TYPE)):
|
|
153
|
+
if chunk_size is not None:
|
|
154
|
+
data = data.rechunk(chunk_size)
|
|
155
|
+
name = name or getattr(data, "name", None)
|
|
156
|
+
series = series_from_tensor(
|
|
157
|
+
data, index=index, name=name, gpu=gpu, sparse=sparse
|
|
158
|
+
)
|
|
159
|
+
need_repart = num_partitions is not None
|
|
160
|
+
elif isinstance(index, INDEX_TYPE):
|
|
161
|
+
if data is not None:
|
|
162
|
+
data = astensor(data, chunk_size=chunk_size)
|
|
163
|
+
series = series_from_tensor(
|
|
164
|
+
data, index=index, name=name, dtype=dtype, gpu=gpu, sparse=sparse
|
|
165
|
+
)
|
|
166
|
+
need_repart = num_partitions is not None
|
|
167
|
+
elif isinstance(data, SERIES_TYPE):
|
|
168
|
+
if not hasattr(data, "data"):
|
|
169
|
+
# SeriesData
|
|
170
|
+
series = _Series(data)
|
|
171
|
+
else:
|
|
172
|
+
series = data
|
|
173
|
+
need_repart = num_partitions is not None
|
|
174
|
+
else:
|
|
175
|
+
if is_cudf(data) or is_cupy(data): # pragma: no cover
|
|
176
|
+
pd_series = cudf.Series(data, index=index, dtype=dtype, name=name)
|
|
177
|
+
if copy:
|
|
178
|
+
pd_series = pd_series.copy()
|
|
179
|
+
else:
|
|
180
|
+
pd_series = pd.Series(
|
|
181
|
+
data, index=index, dtype=dtype, name=name, copy=copy
|
|
182
|
+
)
|
|
183
|
+
if num_partitions is not None:
|
|
184
|
+
chunk_size = ceildiv(len(pd_series), num_partitions)
|
|
185
|
+
series = from_pandas_series(
|
|
186
|
+
pd_series, chunk_size=chunk_size, gpu=gpu, sparse=sparse
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
if need_repart:
|
|
190
|
+
series = series.rebalance(num_partitions=num_partitions)
|
|
191
|
+
super().__init__(series.data)
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
class Index(_Index, metaclass=InitializerMeta):
|
|
195
|
+
def __new__(cls, data, **_):
|
|
196
|
+
# just return cls always until we support other Index's initializers
|
|
197
|
+
return object.__new__(cls)
|
|
198
|
+
|
|
199
|
+
def __init__(
|
|
200
|
+
self,
|
|
201
|
+
data=None,
|
|
202
|
+
dtype=None,
|
|
203
|
+
copy=False,
|
|
204
|
+
name=None,
|
|
205
|
+
tupleize_cols=True,
|
|
206
|
+
chunk_size=None,
|
|
207
|
+
gpu=None,
|
|
208
|
+
sparse=None,
|
|
209
|
+
names=None,
|
|
210
|
+
num_partitions=None,
|
|
211
|
+
store_data=False,
|
|
212
|
+
):
|
|
213
|
+
need_repart = False
|
|
214
|
+
if isinstance(data, INDEX_TYPE):
|
|
215
|
+
if not hasattr(data, "data"):
|
|
216
|
+
# IndexData
|
|
217
|
+
index = _Index(data)
|
|
218
|
+
else:
|
|
219
|
+
index = data
|
|
220
|
+
need_repart = num_partitions is not None
|
|
221
|
+
else:
|
|
222
|
+
if isinstance(data, ENTITY_TYPE):
|
|
223
|
+
name = name if name is not None else getattr(data, "name", None)
|
|
224
|
+
index = from_tileable_index(data, dtype=dtype, name=name, names=names)
|
|
225
|
+
need_repart = num_partitions is not None
|
|
226
|
+
else:
|
|
227
|
+
if not is_index(data):
|
|
228
|
+
name = name if name is not None else getattr(data, "name", None)
|
|
229
|
+
xdf = cudf if is_cudf(data) or is_cupy(data) else pd
|
|
230
|
+
try:
|
|
231
|
+
pd_index = xdf.Index(
|
|
232
|
+
data=data,
|
|
233
|
+
dtype=dtype,
|
|
234
|
+
copy=copy,
|
|
235
|
+
name=name,
|
|
236
|
+
tupleize_cols=tupleize_cols,
|
|
237
|
+
)
|
|
238
|
+
except TypeError: # pragma: no cover
|
|
239
|
+
pd_index = xdf.Index(
|
|
240
|
+
data=data, dtype=dtype, copy=copy, name=name
|
|
241
|
+
)
|
|
242
|
+
else:
|
|
243
|
+
pd_index = data
|
|
244
|
+
|
|
245
|
+
if num_partitions is not None:
|
|
246
|
+
chunk_size = ceildiv(len(pd_index), num_partitions)
|
|
247
|
+
index = from_pandas_index(
|
|
248
|
+
pd_index,
|
|
249
|
+
chunk_size=chunk_size,
|
|
250
|
+
gpu=gpu,
|
|
251
|
+
sparse=sparse,
|
|
252
|
+
store_data=store_data,
|
|
253
|
+
)
|
|
254
|
+
|
|
255
|
+
if need_repart:
|
|
256
|
+
index = index.rebalance(num_partitions=num_partitions)
|
|
257
|
+
super().__init__(index.data)
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
_pd_type_mapping = {
|
|
261
|
+
pd.DataFrame: DataFrame,
|
|
262
|
+
pd.Series: Series,
|
|
263
|
+
pd.Index: Index,
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
def read_pandas(
|
|
268
|
+
data: Union[pd.DataFrame, pd.Series, pd.Index], **kwargs
|
|
269
|
+
) -> Union[DataFrame, Series, Index]:
|
|
270
|
+
"""
|
|
271
|
+
Create MaxFrame objects from pandas.
|
|
272
|
+
|
|
273
|
+
Parameters
|
|
274
|
+
----------
|
|
275
|
+
data: Union[pd.DataFrame, pd.Series, pd.Index]
|
|
276
|
+
pandas data
|
|
277
|
+
kwargs: dict
|
|
278
|
+
arguments to be passed to initializers.
|
|
279
|
+
|
|
280
|
+
Returns
|
|
281
|
+
-------
|
|
282
|
+
result: Union[DataFrame, Series, Index]
|
|
283
|
+
result MaxFrame object
|
|
284
|
+
"""
|
|
285
|
+
for pd_cls, cls in _pd_type_mapping.items():
|
|
286
|
+
if isinstance(data, pd_cls):
|
|
287
|
+
return cls(data, **kwargs)
|
|
288
|
+
raise ValueError(f"Type {type(data)} not supported")
|
|
@@ -0,0 +1,32 @@
|
|
|
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 .append import DataFrameAppend, append
|
|
16
|
+
from .concat import DataFrameConcat, concat
|
|
17
|
+
from .merge import DataFrameMerge, DataFrameMergeAlign, join, merge
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _install():
|
|
21
|
+
from ..core import DATAFRAME_TYPE, SERIES_TYPE
|
|
22
|
+
|
|
23
|
+
for cls in DATAFRAME_TYPE:
|
|
24
|
+
setattr(cls, "join", join)
|
|
25
|
+
setattr(cls, "merge", merge)
|
|
26
|
+
|
|
27
|
+
for cls in DATAFRAME_TYPE + SERIES_TYPE:
|
|
28
|
+
setattr(cls, "append", append)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
_install()
|
|
32
|
+
del _install
|