maxframe 0.1.0b5__cp39-cp39-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-39-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-39-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-39-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-39-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,349 @@
|
|
|
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 Any, Optional, Union
|
|
16
|
+
|
|
17
|
+
import numpy as np
|
|
18
|
+
|
|
19
|
+
from ... import opcodes
|
|
20
|
+
from ...core import OutputType, get_output_types
|
|
21
|
+
from ...serialization.serializables import (
|
|
22
|
+
AnyField,
|
|
23
|
+
Int16Field,
|
|
24
|
+
Int64Field,
|
|
25
|
+
KeyField,
|
|
26
|
+
StringField,
|
|
27
|
+
)
|
|
28
|
+
from ...typing_ import TileableType
|
|
29
|
+
from ..core import IndexValue
|
|
30
|
+
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
31
|
+
from ..utils import build_empty_df, parse_index, validate_axis
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class _NoNeedToAlign(Exception):
|
|
35
|
+
pass
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class DataFrameAlign(DataFrameOperator, DataFrameOperatorMixin):
|
|
39
|
+
_op_type_ = opcodes.ALIGN
|
|
40
|
+
|
|
41
|
+
lhs = KeyField("lhs")
|
|
42
|
+
rhs = KeyField("rhs")
|
|
43
|
+
join = StringField("join", default=None)
|
|
44
|
+
axis = Int16Field("axis", default=None)
|
|
45
|
+
level = AnyField("level", default=None)
|
|
46
|
+
fill_value = AnyField("fill_value", default=None)
|
|
47
|
+
method = StringField("method", default=None)
|
|
48
|
+
limit = Int64Field("limit", default=None)
|
|
49
|
+
fill_axis = Int16Field("fill_axis", default=None)
|
|
50
|
+
broadcast_axis = Int16Field("broadcast_axis", default=None)
|
|
51
|
+
|
|
52
|
+
@property
|
|
53
|
+
def output_limit(self) -> int:
|
|
54
|
+
return 2
|
|
55
|
+
|
|
56
|
+
def _set_inputs(self, inputs):
|
|
57
|
+
super()._set_inputs(inputs)
|
|
58
|
+
self.lhs = inputs[0]
|
|
59
|
+
self.rhs = inputs[1]
|
|
60
|
+
|
|
61
|
+
def __call__(self, lhs: TileableType, rhs: TileableType):
|
|
62
|
+
if self.broadcast_axis != 1 or lhs.ndim == rhs.ndim:
|
|
63
|
+
self._output_types = get_output_types(lhs, rhs)
|
|
64
|
+
else:
|
|
65
|
+
self._output_types = [OutputType.dataframe, OutputType.dataframe]
|
|
66
|
+
|
|
67
|
+
if lhs.ndim == rhs.ndim:
|
|
68
|
+
if lhs.ndim == 1:
|
|
69
|
+
return self._call_series_series(lhs, rhs)
|
|
70
|
+
else:
|
|
71
|
+
return self._call_dataframe_dataframe(lhs, rhs)
|
|
72
|
+
else:
|
|
73
|
+
if lhs.ndim == 1:
|
|
74
|
+
# join order need to be reversed if not symmetric
|
|
75
|
+
asym_joins = {"left", "right"} - {self.join}
|
|
76
|
+
if len(asym_joins) == 1: # self.join in {"left", "right"}
|
|
77
|
+
self.join = asym_joins.pop()
|
|
78
|
+
# need to put dataframe first
|
|
79
|
+
self._output_types = get_output_types(rhs, lhs)
|
|
80
|
+
return self._call_dataframe_series(rhs, lhs)[::-1]
|
|
81
|
+
else:
|
|
82
|
+
return self._call_dataframe_series(lhs, rhs)
|
|
83
|
+
|
|
84
|
+
def _call_dataframe_dataframe(self, lhs: TileableType, rhs: TileableType):
|
|
85
|
+
l_shape = list(lhs.shape)
|
|
86
|
+
r_shape = list(rhs.shape)
|
|
87
|
+
if self.axis is None or self.axis == 0:
|
|
88
|
+
l_idx_val = r_idx_val = self._merge_index(
|
|
89
|
+
lhs.index_value, rhs.index_value, how=self.join
|
|
90
|
+
)
|
|
91
|
+
l_shape[0] = r_shape[0] = np.nan
|
|
92
|
+
else:
|
|
93
|
+
l_idx_val, r_idx_val = lhs.index_value, rhs.index_value
|
|
94
|
+
|
|
95
|
+
if self.axis is None or self.axis == 1:
|
|
96
|
+
l_empty = build_empty_df(lhs.dtypes)
|
|
97
|
+
r_empty = build_empty_df(rhs.dtypes)
|
|
98
|
+
aligned, _ = l_empty.align(r_empty, axis=1)
|
|
99
|
+
l_dtypes = r_dtypes = aligned.dtypes
|
|
100
|
+
l_col_val = r_col_val = parse_index(aligned.columns, store_data=True)
|
|
101
|
+
l_shape[1] = r_shape[1] = len(l_dtypes)
|
|
102
|
+
else:
|
|
103
|
+
l_dtypes, r_dtypes = lhs.dtypes, rhs.dtypes
|
|
104
|
+
l_col_val, r_col_val = lhs.columns_value, rhs.columns_value
|
|
105
|
+
|
|
106
|
+
l_kws = {
|
|
107
|
+
"index_value": l_idx_val,
|
|
108
|
+
"dtypes": l_dtypes,
|
|
109
|
+
"shape": tuple(l_shape),
|
|
110
|
+
"columns_value": l_col_val,
|
|
111
|
+
}
|
|
112
|
+
r_kws = {
|
|
113
|
+
"index_value": r_idx_val,
|
|
114
|
+
"dtypes": r_dtypes,
|
|
115
|
+
"shape": tuple(r_shape),
|
|
116
|
+
"columns_value": r_col_val,
|
|
117
|
+
}
|
|
118
|
+
return self.new_tileables([lhs, rhs], kws=[l_kws, r_kws])
|
|
119
|
+
|
|
120
|
+
def _call_dataframe_series(self, lhs: TileableType, rhs: TileableType):
|
|
121
|
+
l_shape = list(lhs.shape)
|
|
122
|
+
if self.axis == 0 or self.broadcast_axis == 1:
|
|
123
|
+
dtypes = lhs.dtypes
|
|
124
|
+
col_val = lhs.columns_value
|
|
125
|
+
l_idx_val = r_idx_val = self._merge_index(
|
|
126
|
+
lhs.index_value, rhs.index_value, how=self.join
|
|
127
|
+
)
|
|
128
|
+
l_shape[0] = r_size = np.nan
|
|
129
|
+
else:
|
|
130
|
+
l_idx_val = lhs.index_value
|
|
131
|
+
if not rhs.index_value.has_value():
|
|
132
|
+
dtypes = None
|
|
133
|
+
l_shape[1] = r_size = np.nan
|
|
134
|
+
col_val = r_idx_val = self._merge_index(
|
|
135
|
+
lhs.columns_value, rhs.index_value, how=self.join
|
|
136
|
+
)
|
|
137
|
+
else:
|
|
138
|
+
series_index = rhs.index_value.to_pandas()
|
|
139
|
+
dtypes = lhs.dtypes.reindex(
|
|
140
|
+
lhs.dtypes.index.join(series_index, how=self.join)
|
|
141
|
+
).fillna(np.dtype(np.float_))
|
|
142
|
+
l_shape[1] = r_size = len(dtypes)
|
|
143
|
+
col_val = r_idx_val = parse_index(dtypes.index, store_data=True)
|
|
144
|
+
|
|
145
|
+
l_kws = {
|
|
146
|
+
"index_value": l_idx_val,
|
|
147
|
+
"dtypes": dtypes,
|
|
148
|
+
"shape": tuple(l_shape),
|
|
149
|
+
"columns_value": col_val,
|
|
150
|
+
}
|
|
151
|
+
if self.broadcast_axis == 1:
|
|
152
|
+
r_kws = {
|
|
153
|
+
"index_value": r_idx_val,
|
|
154
|
+
"dtypes": dtypes,
|
|
155
|
+
"shape": tuple(l_shape),
|
|
156
|
+
"columns_value": col_val,
|
|
157
|
+
}
|
|
158
|
+
else:
|
|
159
|
+
r_kws = {
|
|
160
|
+
"index_value": r_idx_val,
|
|
161
|
+
"shape": (r_size,),
|
|
162
|
+
"dtype": rhs.dtype,
|
|
163
|
+
}
|
|
164
|
+
return self.new_tileables([lhs, rhs], kws=[l_kws, r_kws])
|
|
165
|
+
|
|
166
|
+
def _call_series_series(self, lhs: TileableType, rhs: TileableType):
|
|
167
|
+
idx = self._merge_index(lhs.index_value, rhs.index_value, how=self.join)
|
|
168
|
+
kws = [
|
|
169
|
+
{"index_value": idx, "shape": (np.nan,), "dtype": lhs.dtype},
|
|
170
|
+
{"index_value": idx, "shape": (np.nan,), "dtype": rhs.dtype},
|
|
171
|
+
]
|
|
172
|
+
return self.new_tileables([lhs, rhs], kws=kws)
|
|
173
|
+
|
|
174
|
+
@staticmethod
|
|
175
|
+
def _merge_index(
|
|
176
|
+
left_index_value: IndexValue, right_index_value: IndexValue, how: str = "outer"
|
|
177
|
+
):
|
|
178
|
+
left_pd = left_index_value.to_pandas()
|
|
179
|
+
right_pd = right_index_value.to_pandas()
|
|
180
|
+
|
|
181
|
+
if not left_index_value.has_value() or not right_index_value.has_value():
|
|
182
|
+
left_pd = left_pd[:0]
|
|
183
|
+
right_pd = right_pd[:0]
|
|
184
|
+
store_data = False
|
|
185
|
+
else:
|
|
186
|
+
store_data = True
|
|
187
|
+
|
|
188
|
+
joined = left_pd.join(right_pd, how=how)
|
|
189
|
+
if store_data:
|
|
190
|
+
return parse_index(joined, store_data=store_data)
|
|
191
|
+
else:
|
|
192
|
+
return parse_index(
|
|
193
|
+
joined,
|
|
194
|
+
{left_index_value.key, right_index_value.key},
|
|
195
|
+
store_data=store_data,
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
def align(
|
|
200
|
+
df,
|
|
201
|
+
other,
|
|
202
|
+
join: str = "outer",
|
|
203
|
+
axis: Union[int, str, None] = None,
|
|
204
|
+
level: Union[int, str, None] = None,
|
|
205
|
+
copy: bool = True,
|
|
206
|
+
fill_value: Any = None,
|
|
207
|
+
method: str = None,
|
|
208
|
+
limit: Optional[int] = None,
|
|
209
|
+
fill_axis: Union[int, str] = 0,
|
|
210
|
+
broadcast_axis: Union[int, str] = None,
|
|
211
|
+
):
|
|
212
|
+
"""
|
|
213
|
+
Align two objects on their axes with the specified join method.
|
|
214
|
+
|
|
215
|
+
Join method is specified for each axis Index.
|
|
216
|
+
|
|
217
|
+
Parameters
|
|
218
|
+
----------
|
|
219
|
+
other : DataFrame or Series
|
|
220
|
+
join : {'outer', 'inner', 'left', 'right'}, default 'outer'
|
|
221
|
+
axis : allowed axis of the other object, default None
|
|
222
|
+
Align on index (0), columns (1), or both (None).
|
|
223
|
+
level : int or level name, default None
|
|
224
|
+
Broadcast across a level, matching Index values on the
|
|
225
|
+
passed MultiIndex level.
|
|
226
|
+
copy : bool, default True
|
|
227
|
+
Always returns new objects. If copy=False and no reindexing is
|
|
228
|
+
required then original objects are returned.
|
|
229
|
+
fill_value : scalar, default np.NaN
|
|
230
|
+
Value to use for missing values. Defaults to NaN, but can be any
|
|
231
|
+
"compatible" value.
|
|
232
|
+
method : {'backfill', 'bfill', 'pad', 'ffill', None}, default None
|
|
233
|
+
Method to use for filling holes in reindexed Series:
|
|
234
|
+
|
|
235
|
+
- pad / ffill: propagate last valid observation forward to next valid.
|
|
236
|
+
- backfill / bfill: use NEXT valid observation to fill gap.
|
|
237
|
+
|
|
238
|
+
limit : int, default None
|
|
239
|
+
If method is specified, this is the maximum number of consecutive
|
|
240
|
+
NaN values to forward/backward fill. In other words, if there is
|
|
241
|
+
a gap with more than this number of consecutive NaNs, it will only
|
|
242
|
+
be partially filled. If method is not specified, this is the
|
|
243
|
+
maximum number of entries along the entire axis where NaNs will be
|
|
244
|
+
filled. Must be greater than 0 if not None.
|
|
245
|
+
fill_axis : {0 or 'index', 1 or 'columns'}, default 0
|
|
246
|
+
Filling axis, method and limit.
|
|
247
|
+
broadcast_axis : {0 or 'index', 1 or 'columns'}, default None
|
|
248
|
+
Broadcast values along this axis, if aligning two objects of
|
|
249
|
+
different dimensions.
|
|
250
|
+
|
|
251
|
+
Notes
|
|
252
|
+
-----
|
|
253
|
+
Currently argument `level` is not supported.
|
|
254
|
+
|
|
255
|
+
Returns
|
|
256
|
+
-------
|
|
257
|
+
(left, right) : (DataFrame, type of other)
|
|
258
|
+
Aligned objects.
|
|
259
|
+
|
|
260
|
+
Examples
|
|
261
|
+
--------
|
|
262
|
+
>>> import maxframe.tensor as mt
|
|
263
|
+
>>> import maxframe.dataframe as md
|
|
264
|
+
>>> df = md.DataFrame(
|
|
265
|
+
... [[1, 2, 3, 4], [6, 7, 8, 9]], columns=["D", "B", "E", "A"], index=[1, 2]
|
|
266
|
+
... )
|
|
267
|
+
>>> other = md.DataFrame(
|
|
268
|
+
... [[10, 20, 30, 40], [60, 70, 80, 90], [600, 700, 800, 900]],
|
|
269
|
+
... columns=["A", "B", "C", "D"],
|
|
270
|
+
... index=[2, 3, 4],
|
|
271
|
+
... )
|
|
272
|
+
>>> df.execute()
|
|
273
|
+
D B E A
|
|
274
|
+
1 1 2 3 4
|
|
275
|
+
2 6 7 8 9
|
|
276
|
+
>>> other.execute()
|
|
277
|
+
A B C D
|
|
278
|
+
2 10 20 30 40
|
|
279
|
+
3 60 70 80 90
|
|
280
|
+
4 600 700 800 900
|
|
281
|
+
|
|
282
|
+
Align on columns:
|
|
283
|
+
|
|
284
|
+
>>> left, right = df.align(other, join="outer", axis=1)
|
|
285
|
+
>>> left.execute()
|
|
286
|
+
A B C D E
|
|
287
|
+
1 4 2 NaN 1 3
|
|
288
|
+
2 9 7 NaN 6 8
|
|
289
|
+
>>> right.execute()
|
|
290
|
+
A B C D E
|
|
291
|
+
2 10 20 30 40 NaN
|
|
292
|
+
3 60 70 80 90 NaN
|
|
293
|
+
4 600 700 800 900 NaN
|
|
294
|
+
|
|
295
|
+
We can also align on the index:
|
|
296
|
+
|
|
297
|
+
>>> left, right = df.align(other, join="outer", axis=0)
|
|
298
|
+
>>> left.execute()
|
|
299
|
+
D B E A
|
|
300
|
+
1 1.0 2.0 3.0 4.0
|
|
301
|
+
2 6.0 7.0 8.0 9.0
|
|
302
|
+
3 NaN NaN NaN NaN
|
|
303
|
+
4 NaN NaN NaN NaN
|
|
304
|
+
>>> right.execute()
|
|
305
|
+
A B C D
|
|
306
|
+
1 NaN NaN NaN NaN
|
|
307
|
+
2 10.0 20.0 30.0 40.0
|
|
308
|
+
3 60.0 70.0 80.0 90.0
|
|
309
|
+
4 600.0 700.0 800.0 900.0
|
|
310
|
+
|
|
311
|
+
Finally, the default `axis=None` will align on both index and columns:
|
|
312
|
+
|
|
313
|
+
>>> left, right = df.align(other, join="outer", axis=None)
|
|
314
|
+
>>> left.execute()
|
|
315
|
+
A B C D E
|
|
316
|
+
1 4.0 2.0 NaN 1.0 3.0
|
|
317
|
+
2 9.0 7.0 NaN 6.0 8.0
|
|
318
|
+
3 NaN NaN NaN NaN NaN
|
|
319
|
+
4 NaN NaN NaN NaN NaN
|
|
320
|
+
>>> right.execute()
|
|
321
|
+
A B C D E
|
|
322
|
+
1 NaN NaN NaN NaN NaN
|
|
323
|
+
2 10.0 20.0 30.0 40.0 NaN
|
|
324
|
+
3 60.0 70.0 80.0 90.0 NaN
|
|
325
|
+
4 600.0 700.0 800.0 900.0 NaN
|
|
326
|
+
"""
|
|
327
|
+
axis = validate_axis(axis) if axis is not None else None
|
|
328
|
+
fill_axis = validate_axis(fill_axis) if fill_axis is not None else None
|
|
329
|
+
broadcast_axis = (
|
|
330
|
+
validate_axis(broadcast_axis) if broadcast_axis is not None else None
|
|
331
|
+
)
|
|
332
|
+
|
|
333
|
+
if level is not None:
|
|
334
|
+
raise NotImplementedError(f"Argument `level` not supported")
|
|
335
|
+
if df.ndim != other.ndim and axis is None:
|
|
336
|
+
raise ValueError("Must specify axis=0 or 1")
|
|
337
|
+
|
|
338
|
+
op = DataFrameAlign(
|
|
339
|
+
join=join,
|
|
340
|
+
axis=axis,
|
|
341
|
+
level=level,
|
|
342
|
+
copy=copy,
|
|
343
|
+
fill_value=fill_value,
|
|
344
|
+
method=method,
|
|
345
|
+
limit=limit,
|
|
346
|
+
fill_axis=fill_axis,
|
|
347
|
+
broadcast_axis=broadcast_axis,
|
|
348
|
+
)
|
|
349
|
+
return op(df, other)
|
|
@@ -0,0 +1,83 @@
|
|
|
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
|
+
|
|
17
|
+
from .loc import DataFrameLoc
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class DataFrameAt:
|
|
21
|
+
def __init__(self, obj):
|
|
22
|
+
self._obj = obj
|
|
23
|
+
self._loc = DataFrameLoc(self._obj)
|
|
24
|
+
|
|
25
|
+
def __getitem__(self, indexes):
|
|
26
|
+
if not isinstance(indexes, tuple):
|
|
27
|
+
indexes = (indexes,)
|
|
28
|
+
|
|
29
|
+
for index in indexes:
|
|
30
|
+
if not np.isscalar(index):
|
|
31
|
+
raise ValueError("Invalid call for scalar access (getting)!")
|
|
32
|
+
|
|
33
|
+
return self._loc[indexes]
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def at(a):
|
|
37
|
+
"""
|
|
38
|
+
Access a single value for a row/column label pair.
|
|
39
|
+
|
|
40
|
+
Similar to ``loc``, in that both provide label-based lookups. Use
|
|
41
|
+
``at`` if you only need to get or set a single value in a DataFrame
|
|
42
|
+
or Series.
|
|
43
|
+
|
|
44
|
+
Raises
|
|
45
|
+
------
|
|
46
|
+
KeyError
|
|
47
|
+
If 'label' does not exist in DataFrame.
|
|
48
|
+
|
|
49
|
+
See Also
|
|
50
|
+
--------
|
|
51
|
+
DataFrame.iat : Access a single value for a row/column pair by integer
|
|
52
|
+
position.
|
|
53
|
+
DataFrame.loc : Access a group of rows and columns by label(s).
|
|
54
|
+
Series.at : Access a single value using a label.
|
|
55
|
+
|
|
56
|
+
Examples
|
|
57
|
+
--------
|
|
58
|
+
>>> import maxframe.dataframe as md
|
|
59
|
+
>>> df = md.DataFrame([[0, 2, 3], [0, 4, 1], [10, 20, 30]],
|
|
60
|
+
... index=[4, 5, 6], columns=['A', 'B', 'C'])
|
|
61
|
+
>>> df.execute()
|
|
62
|
+
A B C
|
|
63
|
+
4 0 2 3
|
|
64
|
+
5 0 4 1
|
|
65
|
+
6 10 20 30
|
|
66
|
+
|
|
67
|
+
Get value at specified row/column pair
|
|
68
|
+
|
|
69
|
+
>>> df.at[4, 'B'].execute()
|
|
70
|
+
2
|
|
71
|
+
|
|
72
|
+
# Set value at specified row/column pair
|
|
73
|
+
#
|
|
74
|
+
# >>> df.at[4, 'B'] = 10
|
|
75
|
+
# >>> df.at[4, 'B']
|
|
76
|
+
# 10
|
|
77
|
+
|
|
78
|
+
Get value within a Series
|
|
79
|
+
|
|
80
|
+
>>> df.loc[5].at['B'].execute()
|
|
81
|
+
4
|
|
82
|
+
"""
|
|
83
|
+
return DataFrameAt(a)
|
|
@@ -0,0 +1,204 @@
|
|
|
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
|
+
|
|
20
|
+
from ... import opcodes
|
|
21
|
+
from ...core import ENTITY_TYPE, OutputType
|
|
22
|
+
from ...serialization.serializables import AnyField, BoolField
|
|
23
|
+
from ...tensor.core import TENSOR_TYPE
|
|
24
|
+
from ...tensor.datasource import tensor as astensor
|
|
25
|
+
from ..core import DATAFRAME_TYPE, SERIES_TYPE
|
|
26
|
+
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
27
|
+
from ..utils import parse_index
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class SeriesIndex(DataFrameOperator, DataFrameOperatorMixin):
|
|
31
|
+
_op_module_ = "series"
|
|
32
|
+
_op_type_ = opcodes.INDEX
|
|
33
|
+
|
|
34
|
+
labels = AnyField("labels", default=None)
|
|
35
|
+
|
|
36
|
+
is_intermediate = BoolField("is_intermediate", default=None)
|
|
37
|
+
|
|
38
|
+
def __init__(self, output_types=None, **kw):
|
|
39
|
+
super().__init__(_output_types=output_types, **kw)
|
|
40
|
+
|
|
41
|
+
def __call__(self, series, name=None):
|
|
42
|
+
return self.new_tileable([series], dtype=series.dtype, name=name)
|
|
43
|
+
|
|
44
|
+
def _new_tileables(self, inputs, kws=None, **kw):
|
|
45
|
+
# Override this method to automatically decide the output type,
|
|
46
|
+
# when `labels` is a list, we will set `output_types` as series,
|
|
47
|
+
# otherwise it will be a scalar.
|
|
48
|
+
output_types = getattr(self, "_output_types", None)
|
|
49
|
+
shape = kw.pop("shape", None)
|
|
50
|
+
is_scalar = not isinstance(self.labels, list)
|
|
51
|
+
if not output_types:
|
|
52
|
+
output_types = [OutputType.scalar] if is_scalar else [OutputType.series]
|
|
53
|
+
self.output_types = output_types
|
|
54
|
+
if shape is None:
|
|
55
|
+
shape = () if is_scalar else ((len(self.labels)),)
|
|
56
|
+
kw["shape"] = shape
|
|
57
|
+
if not is_scalar:
|
|
58
|
+
index_value = kw.pop("index_value", None) or parse_index(
|
|
59
|
+
pd.Index(self.labels)
|
|
60
|
+
)
|
|
61
|
+
kw["index_value"] = index_value
|
|
62
|
+
return super()._new_tileables(inputs, kws=kws, **kw)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class DataFrameIndex(DataFrameOperator, DataFrameOperatorMixin):
|
|
66
|
+
_op_type_ = opcodes.INDEX
|
|
67
|
+
|
|
68
|
+
col_names = AnyField("col_names", default=None)
|
|
69
|
+
|
|
70
|
+
# for bool index
|
|
71
|
+
mask = AnyField("mask", default=None)
|
|
72
|
+
identical_index = BoolField("identical_index")
|
|
73
|
+
|
|
74
|
+
def __init__(self, output_types=None, **kw):
|
|
75
|
+
output_types = output_types or [OutputType.series]
|
|
76
|
+
super().__init__(_output_types=output_types, **kw)
|
|
77
|
+
|
|
78
|
+
def _set_inputs(self, inputs):
|
|
79
|
+
super()._set_inputs(inputs)
|
|
80
|
+
if isinstance(self.col_names, ENTITY_TYPE):
|
|
81
|
+
self.col_names = self._inputs[0]
|
|
82
|
+
if isinstance(self.mask, ENTITY_TYPE):
|
|
83
|
+
self.mask = self._inputs[-1]
|
|
84
|
+
|
|
85
|
+
def __call__(self, df):
|
|
86
|
+
if self.col_names is not None:
|
|
87
|
+
# if col_names is a list, return a DataFrame, else return a Series
|
|
88
|
+
col_names = self.col_names
|
|
89
|
+
if not isinstance(col_names, list):
|
|
90
|
+
col_names = [col_names]
|
|
91
|
+
is_list = False
|
|
92
|
+
else:
|
|
93
|
+
is_list = True
|
|
94
|
+
|
|
95
|
+
dtypes_list = df._get_dtypes_by_columns(col_names)
|
|
96
|
+
if is_list or len(dtypes_list) > 1:
|
|
97
|
+
if len(col_names) != len(dtypes_list):
|
|
98
|
+
col_names = df._get_columns_by_columns(col_names)
|
|
99
|
+
columns = parse_index(pd.Index(col_names), store_data=True)
|
|
100
|
+
return self.new_dataframe(
|
|
101
|
+
[df],
|
|
102
|
+
shape=(df.shape[0], len(col_names)),
|
|
103
|
+
dtypes=pd.Series(dtypes_list, index=col_names, dtype=np.dtype("O")),
|
|
104
|
+
index_value=df.index_value,
|
|
105
|
+
columns_value=columns,
|
|
106
|
+
)
|
|
107
|
+
else:
|
|
108
|
+
dtype = dtypes_list[0]
|
|
109
|
+
return self.new_series(
|
|
110
|
+
[df],
|
|
111
|
+
shape=(df.shape[0],),
|
|
112
|
+
dtype=dtype,
|
|
113
|
+
index_value=df.index_value,
|
|
114
|
+
name=self.col_names,
|
|
115
|
+
)
|
|
116
|
+
else:
|
|
117
|
+
if isinstance(self.mask, (SERIES_TYPE, DATAFRAME_TYPE, TENSOR_TYPE)):
|
|
118
|
+
index_value = parse_index(
|
|
119
|
+
pd.Index(
|
|
120
|
+
[],
|
|
121
|
+
dtype=df.index_value.to_pandas().dtype,
|
|
122
|
+
name=df.index_value.name,
|
|
123
|
+
),
|
|
124
|
+
df,
|
|
125
|
+
self.mask,
|
|
126
|
+
)
|
|
127
|
+
return self.new_dataframe(
|
|
128
|
+
[df, self.mask],
|
|
129
|
+
shape=(np.nan, df.shape[1]),
|
|
130
|
+
dtypes=df.dtypes,
|
|
131
|
+
index_value=index_value,
|
|
132
|
+
columns_value=df.columns_value,
|
|
133
|
+
)
|
|
134
|
+
else:
|
|
135
|
+
index_value = parse_index(
|
|
136
|
+
pd.Index(
|
|
137
|
+
[],
|
|
138
|
+
dtype=df.index_value.to_pandas().dtype,
|
|
139
|
+
name=df.index_value.name,
|
|
140
|
+
),
|
|
141
|
+
df,
|
|
142
|
+
self.mask,
|
|
143
|
+
)
|
|
144
|
+
return self.new_dataframe(
|
|
145
|
+
[df],
|
|
146
|
+
shape=(np.nan, df.shape[1]),
|
|
147
|
+
dtypes=df.dtypes,
|
|
148
|
+
index_value=index_value,
|
|
149
|
+
columns_value=df.columns_value,
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
_list_like_types = (list, np.ndarray, SERIES_TYPE, pd.Series, TENSOR_TYPE)
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def dataframe_getitem(df, item):
|
|
157
|
+
columns_set = set(df.dtypes.keys())
|
|
158
|
+
|
|
159
|
+
if isinstance(item, (np.ndarray, pd.Series)) and item.dtype != np.bool_:
|
|
160
|
+
item = item.tolist()
|
|
161
|
+
|
|
162
|
+
if isinstance(item, slice):
|
|
163
|
+
edge = item.start if item.start is not None else item.stop
|
|
164
|
+
if isinstance(edge, Integral):
|
|
165
|
+
return df.iloc[item]
|
|
166
|
+
else:
|
|
167
|
+
return df.loc[item]
|
|
168
|
+
elif isinstance(item, list):
|
|
169
|
+
for col_name in item:
|
|
170
|
+
if col_name not in columns_set:
|
|
171
|
+
raise KeyError(f"{col_name} not in columns")
|
|
172
|
+
op = DataFrameIndex(col_names=item, output_types=[OutputType.dataframe])
|
|
173
|
+
elif isinstance(item, _list_like_types) or hasattr(item, "dtypes"):
|
|
174
|
+
# NB: don't enforce the dtype of `item` to be `bool` since it may be unknown
|
|
175
|
+
if isinstance(item, DATAFRAME_TYPE + SERIES_TYPE):
|
|
176
|
+
identical_index = df.index_value.key == item.index_value.key
|
|
177
|
+
else:
|
|
178
|
+
identical_index = False
|
|
179
|
+
op = DataFrameIndex(
|
|
180
|
+
mask=item,
|
|
181
|
+
identical_index=identical_index,
|
|
182
|
+
output_types=[OutputType.dataframe],
|
|
183
|
+
)
|
|
184
|
+
else:
|
|
185
|
+
if item not in columns_set:
|
|
186
|
+
raise KeyError(f"{item} not in columns {columns_set}")
|
|
187
|
+
op = DataFrameIndex(col_names=item)
|
|
188
|
+
return op(df)
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def series_getitem(series, labels):
|
|
192
|
+
if isinstance(labels, list) or isinstance(labels, tuple) or np.isscalar(labels):
|
|
193
|
+
op = SeriesIndex(labels=labels)
|
|
194
|
+
return op(series, name=series.name)
|
|
195
|
+
elif isinstance(labels, _list_like_types) and astensor(labels).dtype == np.bool_:
|
|
196
|
+
return series.loc[labels]
|
|
197
|
+
elif isinstance(labels, slice):
|
|
198
|
+
edge = labels.start if labels.start is not None else labels.stop
|
|
199
|
+
if isinstance(edge, Integral):
|
|
200
|
+
return series.iloc[labels]
|
|
201
|
+
else:
|
|
202
|
+
return series.loc[labels]
|
|
203
|
+
else:
|
|
204
|
+
raise NotImplementedError(f"type {type(labels)} is not support for getitem")
|
|
@@ -0,0 +1,37 @@
|
|
|
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
|
+
from .iloc import DataFrameIloc
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class DataFrameIat:
|
|
21
|
+
def __init__(self, obj):
|
|
22
|
+
self._obj = obj
|
|
23
|
+
self._iloc = DataFrameIloc(self._obj)
|
|
24
|
+
|
|
25
|
+
def __getitem__(self, indexes):
|
|
26
|
+
if not isinstance(indexes, tuple):
|
|
27
|
+
indexes = (indexes,)
|
|
28
|
+
|
|
29
|
+
for index in indexes:
|
|
30
|
+
if not isinstance(index, Integral):
|
|
31
|
+
raise ValueError("Invalid call for scalar access (getting)!")
|
|
32
|
+
|
|
33
|
+
return self._iloc[indexes]
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def iat(a):
|
|
37
|
+
return DataFrameIat(a)
|