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,566 @@
|
|
|
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 numbers import Integral
|
|
16
|
+
|
|
17
|
+
import numpy as np
|
|
18
|
+
import pandas as pd
|
|
19
|
+
from pandas.core.dtypes.cast import find_common_type
|
|
20
|
+
from pandas.core.indexing import IndexingError
|
|
21
|
+
|
|
22
|
+
from ... import opcodes
|
|
23
|
+
from ...config import options
|
|
24
|
+
from ...core import ENTITY_TYPE, OutputType
|
|
25
|
+
from ...serialization.serializables import AnyField, KeyField, ListField
|
|
26
|
+
from ...tensor import asarray
|
|
27
|
+
from ...tensor.indexing.core import calc_shape
|
|
28
|
+
from ..operators import DATAFRAME_TYPE, DataFrameOperator, DataFrameOperatorMixin
|
|
29
|
+
from ..utils import indexing_index_value
|
|
30
|
+
|
|
31
|
+
_ILOC_ERROR_MSG = (
|
|
32
|
+
"Location based indexing can only have [integer, "
|
|
33
|
+
"integer slice (START point is INCLUDED, END point is EXCLUDED), "
|
|
34
|
+
"listlike of integers, boolean array] types"
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def process_iloc_indexes(inp, indexes):
|
|
39
|
+
ndim = inp.ndim
|
|
40
|
+
|
|
41
|
+
if not isinstance(indexes, tuple):
|
|
42
|
+
indexes = (indexes,)
|
|
43
|
+
if len(indexes) < ndim:
|
|
44
|
+
indexes += (slice(None),) * (ndim - len(indexes))
|
|
45
|
+
if len(indexes) > ndim:
|
|
46
|
+
raise IndexingError("Too many indexers")
|
|
47
|
+
|
|
48
|
+
new_indexes = []
|
|
49
|
+
# check each index
|
|
50
|
+
for ax, index in enumerate(indexes):
|
|
51
|
+
if isinstance(index, tuple):
|
|
52
|
+
# a tuple should already have been caught by this point
|
|
53
|
+
# so don't treat a tuple as a valid indexer
|
|
54
|
+
raise IndexingError("Too many indexers")
|
|
55
|
+
elif isinstance(index, slice):
|
|
56
|
+
if any(v is not None for v in [index.start, index.stop, index.step]):
|
|
57
|
+
pd_index = (
|
|
58
|
+
inp.index_value if ax == 0 else inp.columns_value
|
|
59
|
+
).to_pandas()
|
|
60
|
+
for val in [index.start, index.stop, index.step]:
|
|
61
|
+
if val is not None:
|
|
62
|
+
try:
|
|
63
|
+
pd_index[val] # check on the pandas
|
|
64
|
+
except IndexError:
|
|
65
|
+
pass
|
|
66
|
+
except TypeError:
|
|
67
|
+
raise TypeError(
|
|
68
|
+
f"cannot do slice indexing on {type(pd_index)} "
|
|
69
|
+
f"with these indexers [{val}] of {type(val)}"
|
|
70
|
+
)
|
|
71
|
+
new_indexes.append(index)
|
|
72
|
+
elif isinstance(index, (list, np.ndarray, pd.Series, ENTITY_TYPE)):
|
|
73
|
+
if not isinstance(index, ENTITY_TYPE):
|
|
74
|
+
index = np.asarray(index)
|
|
75
|
+
else:
|
|
76
|
+
index = asarray(index)
|
|
77
|
+
if ax == 1:
|
|
78
|
+
# do not support tensor index on axis 1
|
|
79
|
+
# because if so, the dtypes and columns_value would be unknown
|
|
80
|
+
try:
|
|
81
|
+
index = index.fetch()
|
|
82
|
+
except (RuntimeError, ValueError):
|
|
83
|
+
raise NotImplementedError(
|
|
84
|
+
"indexer on axis columns cannot be non-executed tensor"
|
|
85
|
+
)
|
|
86
|
+
if index.dtype != np.bool_:
|
|
87
|
+
index = index.astype(np.int64)
|
|
88
|
+
if index.ndim != 1:
|
|
89
|
+
raise ValueError(
|
|
90
|
+
"Buffer has wrong number of dimensions "
|
|
91
|
+
f"(expected 1, got {index.ndim})"
|
|
92
|
+
)
|
|
93
|
+
new_indexes.append(index)
|
|
94
|
+
elif isinstance(index, Integral):
|
|
95
|
+
shape = inp.shape[ax]
|
|
96
|
+
if not np.isnan(shape):
|
|
97
|
+
if index < -shape or index >= shape:
|
|
98
|
+
raise IndexError("single positional indexer is out-of-bounds")
|
|
99
|
+
new_indexes.append(index)
|
|
100
|
+
else:
|
|
101
|
+
raise ValueError(_ILOC_ERROR_MSG)
|
|
102
|
+
|
|
103
|
+
return new_indexes
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
class DataFrameIloc:
|
|
107
|
+
def __init__(self, obj):
|
|
108
|
+
self._obj = obj
|
|
109
|
+
|
|
110
|
+
def __getitem__(self, indexes):
|
|
111
|
+
if isinstance(self._obj, DATAFRAME_TYPE):
|
|
112
|
+
op = DataFrameIlocGetItem(indexes=process_iloc_indexes(self._obj, indexes))
|
|
113
|
+
else:
|
|
114
|
+
op = SeriesIlocGetItem(indexes=process_iloc_indexes(self._obj, indexes))
|
|
115
|
+
return op(self._obj)
|
|
116
|
+
|
|
117
|
+
def __setitem__(self, indexes, value):
|
|
118
|
+
if not np.isscalar(value):
|
|
119
|
+
raise NotImplementedError("Only scalar value is supported to set by iloc")
|
|
120
|
+
|
|
121
|
+
if isinstance(self._obj, DATAFRAME_TYPE):
|
|
122
|
+
op = DataFrameIlocSetItem(
|
|
123
|
+
indexes=process_iloc_indexes(self._obj, indexes), value=value
|
|
124
|
+
)
|
|
125
|
+
else:
|
|
126
|
+
op = SeriesIlocSetItem(
|
|
127
|
+
indexes=process_iloc_indexes(self._obj, indexes), value=value
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
ret = op(self._obj)
|
|
131
|
+
self._obj.data = ret.data
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
class HeadTailOptimizedOperatorMixin(DataFrameOperatorMixin):
|
|
135
|
+
__slots__ = ()
|
|
136
|
+
|
|
137
|
+
@classmethod
|
|
138
|
+
def _is_head(cls, index0):
|
|
139
|
+
return (
|
|
140
|
+
(index0.start is None or index0.start == 0)
|
|
141
|
+
and index0.stop is not None
|
|
142
|
+
and index0.stop > 0
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
@classmethod
|
|
146
|
+
def _is_tail(cls, index0):
|
|
147
|
+
return index0.start is not None and index0.start < 0 and index0.stop is None
|
|
148
|
+
|
|
149
|
+
@classmethod
|
|
150
|
+
def _is_indexes_head_or_tail(cls, indexes):
|
|
151
|
+
index0 = indexes[0]
|
|
152
|
+
if not isinstance(index0, slice):
|
|
153
|
+
# have to be slice
|
|
154
|
+
return False
|
|
155
|
+
if index0.step is not None and index0.step != 1:
|
|
156
|
+
return False
|
|
157
|
+
if len(indexes) == 2:
|
|
158
|
+
if not isinstance(indexes[1], slice):
|
|
159
|
+
return False
|
|
160
|
+
if indexes[1] != slice(None):
|
|
161
|
+
return False
|
|
162
|
+
if cls._is_tail(index0):
|
|
163
|
+
# tail
|
|
164
|
+
return True
|
|
165
|
+
if cls._is_head(index0):
|
|
166
|
+
# head
|
|
167
|
+
return True
|
|
168
|
+
return False
|
|
169
|
+
|
|
170
|
+
def can_be_optimized(self):
|
|
171
|
+
return (
|
|
172
|
+
self._is_indexes_head_or_tail(self.indexes)
|
|
173
|
+
and self._is_head(self.indexes[0])
|
|
174
|
+
and self.indexes[0].stop <= options.optimize.head_optimize_threshold
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
class DataFrameIlocGetItem(DataFrameOperator, HeadTailOptimizedOperatorMixin):
|
|
179
|
+
_op_type_ = opcodes.DATAFRAME_ILOC_GETITEM
|
|
180
|
+
|
|
181
|
+
_input = KeyField("input")
|
|
182
|
+
indexes = ListField("indexes", default=None)
|
|
183
|
+
|
|
184
|
+
def __init__(self, gpu=None, sparse=False, output_types=None, **kw):
|
|
185
|
+
super().__init__(gpu=gpu, sparse=sparse, _output_types=output_types, **kw)
|
|
186
|
+
if not self.output_types:
|
|
187
|
+
self.output_types = [OutputType.dataframe]
|
|
188
|
+
|
|
189
|
+
@property
|
|
190
|
+
def input(self):
|
|
191
|
+
return self._input
|
|
192
|
+
|
|
193
|
+
def _set_inputs(self, inputs):
|
|
194
|
+
super()._set_inputs(inputs)
|
|
195
|
+
inputs_iter = iter(self._inputs)
|
|
196
|
+
self._input = next(inputs_iter)
|
|
197
|
+
indexes = []
|
|
198
|
+
for index in self.indexes:
|
|
199
|
+
if isinstance(index, ENTITY_TYPE):
|
|
200
|
+
indexes.append(next(inputs_iter))
|
|
201
|
+
else:
|
|
202
|
+
indexes.append(index)
|
|
203
|
+
self.indexes = indexes
|
|
204
|
+
|
|
205
|
+
def __call__(self, df):
|
|
206
|
+
# Note [Fancy Index of Numpy and Pandas]
|
|
207
|
+
#
|
|
208
|
+
# The numpy and pandas.iloc have different semantic when processing fancy index:
|
|
209
|
+
#
|
|
210
|
+
# >>> np.ones((3,3))[[1,2],[1,2]]
|
|
211
|
+
# array([1., 1.])
|
|
212
|
+
#
|
|
213
|
+
# >>> pd.DataFrame(np.ones((3,3))).iloc[[1,2],[1,2]]
|
|
214
|
+
# 1 2
|
|
215
|
+
# 1 1.0 1.0
|
|
216
|
+
# 2 1.0 1.0
|
|
217
|
+
#
|
|
218
|
+
# Thus, we processing the index along two axis of DataFrame separately.
|
|
219
|
+
shape0 = tuple(calc_shape((df.shape[0],), (self.indexes[0],)))
|
|
220
|
+
shape1 = tuple(calc_shape((df.shape[1],), (self.indexes[1],)))
|
|
221
|
+
|
|
222
|
+
inputs = [df] + [
|
|
223
|
+
index for index in self.indexes if isinstance(index, ENTITY_TYPE)
|
|
224
|
+
]
|
|
225
|
+
|
|
226
|
+
# NB: pandas only compresses the result to series when index on one of axis is integral
|
|
227
|
+
if isinstance(self.indexes[1], Integral):
|
|
228
|
+
shape = shape0
|
|
229
|
+
dtype = df.dtypes.iloc[self.indexes[1]]
|
|
230
|
+
index_value = indexing_index_value(df.index_value, self.indexes[0])
|
|
231
|
+
if isinstance(self.indexes[0], Integral):
|
|
232
|
+
# scalar
|
|
233
|
+
return self.new_scalar(inputs, dtype=dtype)
|
|
234
|
+
else:
|
|
235
|
+
return self.new_series(
|
|
236
|
+
inputs,
|
|
237
|
+
shape=shape,
|
|
238
|
+
dtype=dtype,
|
|
239
|
+
index_value=index_value,
|
|
240
|
+
name=df.dtypes.index[self.indexes[1]],
|
|
241
|
+
)
|
|
242
|
+
elif isinstance(self.indexes[0], Integral):
|
|
243
|
+
shape = shape1
|
|
244
|
+
dtype = find_common_type(list(df.dtypes.iloc[self.indexes[1]].values))
|
|
245
|
+
index_value = indexing_index_value(df.columns_value, self.indexes[1])
|
|
246
|
+
return self.new_series(
|
|
247
|
+
inputs, shape=shape, dtype=dtype, index_value=index_value
|
|
248
|
+
)
|
|
249
|
+
else:
|
|
250
|
+
return self.new_dataframe(
|
|
251
|
+
inputs,
|
|
252
|
+
shape=shape0 + shape1,
|
|
253
|
+
dtypes=df.dtypes.iloc[self.indexes[1]],
|
|
254
|
+
index_value=indexing_index_value(df.index_value, self.indexes[0]),
|
|
255
|
+
columns_value=indexing_index_value(
|
|
256
|
+
df.columns_value, self.indexes[1], store_data=True
|
|
257
|
+
),
|
|
258
|
+
)
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
class SeriesIlocGetItem(DataFrameOperator, HeadTailOptimizedOperatorMixin):
|
|
262
|
+
_op_module_ = "series"
|
|
263
|
+
_op_type_ = opcodes.DATAFRAME_ILOC_GETITEM
|
|
264
|
+
|
|
265
|
+
_input = KeyField("input")
|
|
266
|
+
indexes = ListField("indexes", default=None)
|
|
267
|
+
|
|
268
|
+
def __init__(self, gpu=None, sparse=False, output_types=None, **kw):
|
|
269
|
+
super().__init__(gpu=gpu, sparse=sparse, _output_types=output_types, **kw)
|
|
270
|
+
if not self.output_types:
|
|
271
|
+
self.output_types = [OutputType.series]
|
|
272
|
+
|
|
273
|
+
@property
|
|
274
|
+
def input(self):
|
|
275
|
+
return self._input
|
|
276
|
+
|
|
277
|
+
def _set_inputs(self, inputs):
|
|
278
|
+
super()._set_inputs(inputs)
|
|
279
|
+
|
|
280
|
+
inputs_iter = iter(self._inputs)
|
|
281
|
+
self._input = next(inputs_iter)
|
|
282
|
+
|
|
283
|
+
indexes = []
|
|
284
|
+
for index in self.indexes:
|
|
285
|
+
if isinstance(index, ENTITY_TYPE):
|
|
286
|
+
indexes.append(next(inputs_iter))
|
|
287
|
+
else:
|
|
288
|
+
indexes.append(index)
|
|
289
|
+
self.indexes = indexes
|
|
290
|
+
|
|
291
|
+
def __call__(self, series):
|
|
292
|
+
if isinstance(self.indexes[0], Integral):
|
|
293
|
+
return self.new_scalar([series], dtype=series.dtype)
|
|
294
|
+
else:
|
|
295
|
+
shape = tuple(calc_shape(series.shape, self.indexes))
|
|
296
|
+
index_value = indexing_index_value(series.index_value, self.indexes[0])
|
|
297
|
+
inputs = [series] + [
|
|
298
|
+
index for index in self.indexes if isinstance(index, ENTITY_TYPE)
|
|
299
|
+
]
|
|
300
|
+
return self.new_series(
|
|
301
|
+
inputs,
|
|
302
|
+
shape=shape,
|
|
303
|
+
dtype=series.dtype,
|
|
304
|
+
index_value=index_value,
|
|
305
|
+
name=series.name,
|
|
306
|
+
)
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
class IndexIlocGetItem(DataFrameOperator, DataFrameOperatorMixin):
|
|
310
|
+
_op_module_ = "index"
|
|
311
|
+
_op_type_ = opcodes.DATAFRAME_ILOC_GETITEM
|
|
312
|
+
|
|
313
|
+
_input = KeyField("input")
|
|
314
|
+
indexes = ListField("indexes", default=None)
|
|
315
|
+
|
|
316
|
+
def __init__(self, gpu=None, sparse=False, output_types=None, **kw):
|
|
317
|
+
super().__init__(gpu=gpu, sparse=sparse, _output_types=output_types, **kw)
|
|
318
|
+
if not self.output_types:
|
|
319
|
+
self.output_types = [OutputType.index]
|
|
320
|
+
|
|
321
|
+
@property
|
|
322
|
+
def input(self):
|
|
323
|
+
return self._input
|
|
324
|
+
|
|
325
|
+
def _set_inputs(self, inputs):
|
|
326
|
+
super()._set_inputs(inputs)
|
|
327
|
+
|
|
328
|
+
inputs_iter = iter(self._inputs)
|
|
329
|
+
self._input = next(inputs_iter)
|
|
330
|
+
|
|
331
|
+
indexes = []
|
|
332
|
+
for index in self.indexes:
|
|
333
|
+
if isinstance(index, ENTITY_TYPE):
|
|
334
|
+
indexes.append(next(inputs_iter))
|
|
335
|
+
else:
|
|
336
|
+
indexes.append(index)
|
|
337
|
+
self.indexes = indexes
|
|
338
|
+
|
|
339
|
+
def __call__(self, idx):
|
|
340
|
+
if isinstance(self.indexes[0], Integral):
|
|
341
|
+
return self.new_scalar([idx], dtype=idx.dtype)
|
|
342
|
+
else:
|
|
343
|
+
shape = tuple(calc_shape(idx.shape, self.indexes))
|
|
344
|
+
index_value = indexing_index_value(idx.index_value, self.indexes[0])
|
|
345
|
+
inputs = [idx] + [
|
|
346
|
+
index for index in self.indexes if isinstance(index, ENTITY_TYPE)
|
|
347
|
+
]
|
|
348
|
+
return self.new_index(
|
|
349
|
+
inputs,
|
|
350
|
+
shape=shape,
|
|
351
|
+
dtype=idx.dtype,
|
|
352
|
+
index_value=index_value,
|
|
353
|
+
name=idx.name,
|
|
354
|
+
)
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
class DataFrameIlocSetItem(DataFrameOperator, DataFrameOperatorMixin):
|
|
358
|
+
_op_type_ = opcodes.DATAFRAME_ILOC_SETITEM
|
|
359
|
+
|
|
360
|
+
indexes = ListField("indexes", default=None)
|
|
361
|
+
value = AnyField("value", default=None)
|
|
362
|
+
|
|
363
|
+
def __init__(self, gpu=None, sparse=False, output_types=None, **kw):
|
|
364
|
+
super().__init__(
|
|
365
|
+
gpu=gpu,
|
|
366
|
+
sparse=sparse,
|
|
367
|
+
_output_types=output_types,
|
|
368
|
+
**kw,
|
|
369
|
+
)
|
|
370
|
+
if not self.output_types:
|
|
371
|
+
self.output_types = [OutputType.dataframe]
|
|
372
|
+
|
|
373
|
+
def __call__(self, df):
|
|
374
|
+
return self.new_dataframe(
|
|
375
|
+
[df],
|
|
376
|
+
shape=df.shape,
|
|
377
|
+
dtypes=df.dtypes,
|
|
378
|
+
index_value=df.index_value,
|
|
379
|
+
columns_value=df.columns_value,
|
|
380
|
+
)
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
class SeriesIlocSetItem(DataFrameOperator, DataFrameOperatorMixin):
|
|
384
|
+
_op_module_ = "series"
|
|
385
|
+
_op_type_ = opcodes.DATAFRAME_ILOC_SETITEM
|
|
386
|
+
|
|
387
|
+
indexes = ListField("indexes", default=None)
|
|
388
|
+
value = AnyField("value", default=None)
|
|
389
|
+
|
|
390
|
+
def __init__(self, gpu=None, sparse=False, **kw):
|
|
391
|
+
super().__init__(
|
|
392
|
+
gpu=gpu,
|
|
393
|
+
sparse=sparse,
|
|
394
|
+
_output_types=[OutputType.series],
|
|
395
|
+
**kw,
|
|
396
|
+
)
|
|
397
|
+
|
|
398
|
+
def __call__(self, series):
|
|
399
|
+
return self.new_series(
|
|
400
|
+
[series],
|
|
401
|
+
shape=series.shape,
|
|
402
|
+
dtype=series.dtype,
|
|
403
|
+
index_value=series.index_value,
|
|
404
|
+
name=series.name,
|
|
405
|
+
)
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
def index_getitem(idx, indexes):
|
|
409
|
+
op = IndexIlocGetItem(indexes=process_iloc_indexes(idx, indexes))
|
|
410
|
+
return op(idx)
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
def index_setitem(_idx, *_):
|
|
414
|
+
raise TypeError("Index does not support mutable operations")
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
def iloc(a):
|
|
418
|
+
return DataFrameIloc(a)
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
def head(a, n=5):
|
|
422
|
+
"""
|
|
423
|
+
Return the first `n` rows.
|
|
424
|
+
|
|
425
|
+
This function returns the first `n` rows for the object based
|
|
426
|
+
on position. It is useful for quickly testing if your object
|
|
427
|
+
has the right type of data in it.
|
|
428
|
+
|
|
429
|
+
For negative values of `n`, this function returns all rows except
|
|
430
|
+
the last `n` rows, equivalent to ``df[:-n]``.
|
|
431
|
+
|
|
432
|
+
Parameters
|
|
433
|
+
----------
|
|
434
|
+
n : int, default 5
|
|
435
|
+
Number of rows to select.
|
|
436
|
+
|
|
437
|
+
Returns
|
|
438
|
+
-------
|
|
439
|
+
same type as caller
|
|
440
|
+
The first `n` rows of the caller object.
|
|
441
|
+
|
|
442
|
+
See Also
|
|
443
|
+
--------
|
|
444
|
+
DataFrame.tail: Returns the last `n` rows.
|
|
445
|
+
|
|
446
|
+
Examples
|
|
447
|
+
--------
|
|
448
|
+
>>> import maxframe.dataframe as md
|
|
449
|
+
>>> df = md.DataFrame({'animal': ['alligator', 'bee', 'falcon', 'lion',
|
|
450
|
+
... 'monkey', 'parrot', 'shark', 'whale', 'zebra']})
|
|
451
|
+
>>> df.execute()
|
|
452
|
+
animal
|
|
453
|
+
0 alligator
|
|
454
|
+
1 bee
|
|
455
|
+
2 falcon
|
|
456
|
+
3 lion
|
|
457
|
+
4 monkey
|
|
458
|
+
5 parrot
|
|
459
|
+
6 shark
|
|
460
|
+
7 whale
|
|
461
|
+
8 zebra
|
|
462
|
+
|
|
463
|
+
Viewing the first 5 lines
|
|
464
|
+
|
|
465
|
+
>>> df.head().execute()
|
|
466
|
+
animal
|
|
467
|
+
0 alligator
|
|
468
|
+
1 bee
|
|
469
|
+
2 falcon
|
|
470
|
+
3 lion
|
|
471
|
+
4 monkey
|
|
472
|
+
|
|
473
|
+
Viewing the first `n` lines (three in this case)
|
|
474
|
+
|
|
475
|
+
>>> df.head(3).execute()
|
|
476
|
+
animal
|
|
477
|
+
0 alligator
|
|
478
|
+
1 bee
|
|
479
|
+
2 falcon
|
|
480
|
+
|
|
481
|
+
For negative values of `n`
|
|
482
|
+
|
|
483
|
+
>>> df.head(-3).execute()
|
|
484
|
+
animal
|
|
485
|
+
0 alligator
|
|
486
|
+
1 bee
|
|
487
|
+
2 falcon
|
|
488
|
+
3 lion
|
|
489
|
+
4 monkey
|
|
490
|
+
5 parrot
|
|
491
|
+
"""
|
|
492
|
+
return DataFrameIloc(a)[0:n]
|
|
493
|
+
|
|
494
|
+
|
|
495
|
+
def tail(a, n=5):
|
|
496
|
+
"""
|
|
497
|
+
Return the last `n` rows.
|
|
498
|
+
|
|
499
|
+
This function returns last `n` rows from the object based on
|
|
500
|
+
position. It is useful for quickly verifying data, for example,
|
|
501
|
+
after sorting or appending rows.
|
|
502
|
+
|
|
503
|
+
For negative values of `n`, this function returns all rows except
|
|
504
|
+
the first `n` rows, equivalent to ``df[n:]``.
|
|
505
|
+
|
|
506
|
+
Parameters
|
|
507
|
+
----------
|
|
508
|
+
n : int, default 5
|
|
509
|
+
Number of rows to select.
|
|
510
|
+
|
|
511
|
+
Returns
|
|
512
|
+
-------
|
|
513
|
+
type of caller
|
|
514
|
+
The last `n` rows of the caller object.
|
|
515
|
+
|
|
516
|
+
See Also
|
|
517
|
+
--------
|
|
518
|
+
DataFrame.head : The first `n` rows of the caller object.
|
|
519
|
+
|
|
520
|
+
Examples
|
|
521
|
+
--------
|
|
522
|
+
>>> import maxframe.dataframe as md
|
|
523
|
+
>>> df = md.DataFrame({'animal': ['alligator', 'bee', 'falcon', 'lion',
|
|
524
|
+
... 'monkey', 'parrot', 'shark', 'whale', 'zebra']})
|
|
525
|
+
>>> df.execute()
|
|
526
|
+
animal
|
|
527
|
+
0 alligator
|
|
528
|
+
1 bee
|
|
529
|
+
2 falcon
|
|
530
|
+
3 lion
|
|
531
|
+
4 monkey
|
|
532
|
+
5 parrot
|
|
533
|
+
6 shark
|
|
534
|
+
7 whale
|
|
535
|
+
8 zebra
|
|
536
|
+
|
|
537
|
+
Viewing the last 5 lines
|
|
538
|
+
|
|
539
|
+
>>> df.tail().execute()
|
|
540
|
+
animal
|
|
541
|
+
4 monkey
|
|
542
|
+
5 parrot
|
|
543
|
+
6 shark
|
|
544
|
+
7 whale
|
|
545
|
+
8 zebra
|
|
546
|
+
|
|
547
|
+
Viewing the last `n` lines (three in this case)
|
|
548
|
+
|
|
549
|
+
>>> df.tail(3).execute()
|
|
550
|
+
animal
|
|
551
|
+
6 shark
|
|
552
|
+
7 whale
|
|
553
|
+
8 zebra
|
|
554
|
+
|
|
555
|
+
For negative values of `n`
|
|
556
|
+
|
|
557
|
+
>>> df.tail(-3).execute()
|
|
558
|
+
animal
|
|
559
|
+
3 lion
|
|
560
|
+
4 monkey
|
|
561
|
+
5 parrot
|
|
562
|
+
6 shark
|
|
563
|
+
7 whale
|
|
564
|
+
8 zebra
|
|
565
|
+
"""
|
|
566
|
+
return DataFrameIloc(a)[-n:]
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import pandas as pd
|
|
16
|
+
|
|
17
|
+
from ... import opcodes
|
|
18
|
+
from ...serialization.serializables import AnyField, BoolField, Int64Field
|
|
19
|
+
from ...tensor.core import TENSOR_TYPE
|
|
20
|
+
from ..core import SERIES_TYPE
|
|
21
|
+
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
22
|
+
from ..utils import build_empty_df, parse_index
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class DataFrameInsert(DataFrameOperator, DataFrameOperatorMixin):
|
|
26
|
+
_op_type_ = opcodes.INSERT
|
|
27
|
+
|
|
28
|
+
loc = Int64Field("loc")
|
|
29
|
+
column = AnyField("column")
|
|
30
|
+
value = AnyField("value")
|
|
31
|
+
allow_duplicates = BoolField("allow_duplicates")
|
|
32
|
+
|
|
33
|
+
def _set_inputs(self, inputs):
|
|
34
|
+
super()._set_inputs(inputs)
|
|
35
|
+
if len(inputs) > 1:
|
|
36
|
+
self._value = self._inputs[-1]
|
|
37
|
+
|
|
38
|
+
def __call__(self, df):
|
|
39
|
+
inputs = [df]
|
|
40
|
+
if isinstance(self.value, (SERIES_TYPE, TENSOR_TYPE)):
|
|
41
|
+
value_dtype = self.value.dtype
|
|
42
|
+
inputs.append(self.value)
|
|
43
|
+
else:
|
|
44
|
+
value_dtype = pd.Series(self.value).dtype
|
|
45
|
+
|
|
46
|
+
empty_df = build_empty_df(df.dtypes)
|
|
47
|
+
empty_df.insert(
|
|
48
|
+
loc=self.loc,
|
|
49
|
+
column=self.column,
|
|
50
|
+
allow_duplicates=self.allow_duplicates,
|
|
51
|
+
value=pd.Series([], dtype=value_dtype),
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
params = df.params
|
|
55
|
+
params["columns_value"] = parse_index(empty_df.columns, store_data=True)
|
|
56
|
+
params["dtypes"] = empty_df.dtypes
|
|
57
|
+
params["shape"] = (df.shape[0], df.shape[1] + 1)
|
|
58
|
+
return self.new_dataframe(inputs, **params)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def df_insert(df, loc, column, value, allow_duplicates=False):
|
|
62
|
+
"""
|
|
63
|
+
Insert column into DataFrame at specified location.
|
|
64
|
+
|
|
65
|
+
Raises a ValueError if `column` is already contained in the DataFrame,
|
|
66
|
+
unless `allow_duplicates` is set to True.
|
|
67
|
+
|
|
68
|
+
Parameters
|
|
69
|
+
----------
|
|
70
|
+
loc : int
|
|
71
|
+
Insertion index. Must verify 0 <= loc <= len(columns).
|
|
72
|
+
column : str, number, or hashable object
|
|
73
|
+
Label of the inserted column.
|
|
74
|
+
value : int, Series, or array-like
|
|
75
|
+
allow_duplicates : bool, optional
|
|
76
|
+
"""
|
|
77
|
+
if isinstance(value, TENSOR_TYPE) and value.ndim > 1:
|
|
78
|
+
raise ValueError(
|
|
79
|
+
f"Wrong number of items passed {value.ndim}, placement implies 1"
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
op = DataFrameInsert(
|
|
83
|
+
loc=loc, column=column, value=value, allow_duplicates=allow_duplicates
|
|
84
|
+
)
|
|
85
|
+
out_df = op(df)
|
|
86
|
+
df.data = out_df.data
|