maxframe 0.1.0b5__cp311-cp311-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-311-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-311-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-311-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-311-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,54 @@
|
|
|
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 ... import opcodes
|
|
16
|
+
from ...serialization.serializables import AnyField, KeyField
|
|
17
|
+
from ..initializer import Index
|
|
18
|
+
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class SeriesFromIndex(DataFrameOperator, DataFrameOperatorMixin):
|
|
22
|
+
_op_type_ = opcodes.SERIES_FROM_INDEX
|
|
23
|
+
|
|
24
|
+
input_ = KeyField("input_")
|
|
25
|
+
index = KeyField("index")
|
|
26
|
+
name = AnyField("name", default=None)
|
|
27
|
+
|
|
28
|
+
def _set_inputs(self, inputs):
|
|
29
|
+
super()._set_inputs(inputs)
|
|
30
|
+
self.input_ = self._inputs[0]
|
|
31
|
+
if len(self._inputs) > 1:
|
|
32
|
+
self.index = self._inputs[1]
|
|
33
|
+
|
|
34
|
+
def __call__(self, index, new_index=None, name=None):
|
|
35
|
+
inputs = [index]
|
|
36
|
+
index_value = index.index_value
|
|
37
|
+
if new_index is not None:
|
|
38
|
+
inputs.append(new_index)
|
|
39
|
+
index_value = new_index.index_value
|
|
40
|
+
return self.new_series(
|
|
41
|
+
inputs,
|
|
42
|
+
shape=index.shape,
|
|
43
|
+
dtype=index.dtype,
|
|
44
|
+
index_value=index_value,
|
|
45
|
+
name=name,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def series_from_index(ind, index=None, name=None):
|
|
50
|
+
name = name or ind.name or 0
|
|
51
|
+
if index is not None:
|
|
52
|
+
index = Index(index)
|
|
53
|
+
op = SeriesFromIndex(input_=ind, index=index, name=name)
|
|
54
|
+
return op(ind, new_index=index, name=name)
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
import numpy as np
|
|
18
|
+
import pandas as pd
|
|
19
|
+
|
|
20
|
+
from ... import opcodes
|
|
21
|
+
from ...core import OutputType
|
|
22
|
+
from ...serialization.serializables import BoolField, Int32Field, ListField
|
|
23
|
+
from ...tensor.core import TENSOR_TYPE
|
|
24
|
+
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
25
|
+
from ..utils import parse_index
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class DataFrameFromRecords(DataFrameOperator, DataFrameOperatorMixin):
|
|
29
|
+
_op_type_ = opcodes.DATAFRAME_FROM_RECORDS
|
|
30
|
+
|
|
31
|
+
columns = ListField("columns", default=None)
|
|
32
|
+
exclude = ListField("exclude", default=None)
|
|
33
|
+
coerce_float = BoolField("coerce_float", default=False)
|
|
34
|
+
nrows = Int32Field("nrows", default=None)
|
|
35
|
+
|
|
36
|
+
def __init__(self, index=None, columns=None, **kw):
|
|
37
|
+
if index is not None or columns is not None:
|
|
38
|
+
raise NotImplementedError("Specifying index value is not supported for now")
|
|
39
|
+
super().__init__(columns=columns, _output_types=[OutputType.dataframe], **kw)
|
|
40
|
+
|
|
41
|
+
@property
|
|
42
|
+
def input(self):
|
|
43
|
+
return self._inputs[0]
|
|
44
|
+
|
|
45
|
+
def __call__(self, data):
|
|
46
|
+
if self.nrows is None:
|
|
47
|
+
nrows = data.shape[0]
|
|
48
|
+
else:
|
|
49
|
+
nrows = self.nrows
|
|
50
|
+
index_value = parse_index(pd.RangeIndex(start=0, stop=nrows))
|
|
51
|
+
dtypes = pd.Series(dict((k, np.dtype(v)) for k, v in data.dtype.descr))
|
|
52
|
+
columns_value = parse_index(pd.Index(data.dtype.names), store_data=True)
|
|
53
|
+
return self.new_dataframe(
|
|
54
|
+
[data],
|
|
55
|
+
(data.shape[0], len(data.dtype.names)),
|
|
56
|
+
dtypes=dtypes,
|
|
57
|
+
index_value=index_value,
|
|
58
|
+
columns_value=columns_value,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def from_records(
|
|
63
|
+
data,
|
|
64
|
+
index=None,
|
|
65
|
+
exclude=None,
|
|
66
|
+
columns=None,
|
|
67
|
+
coerce_float=False,
|
|
68
|
+
nrows=None,
|
|
69
|
+
gpu=None,
|
|
70
|
+
sparse=False,
|
|
71
|
+
**kw
|
|
72
|
+
):
|
|
73
|
+
if isinstance(data, np.ndarray):
|
|
74
|
+
from .dataframe import from_pandas
|
|
75
|
+
|
|
76
|
+
return from_pandas(
|
|
77
|
+
pd.DataFrame.from_records(
|
|
78
|
+
data,
|
|
79
|
+
index=index,
|
|
80
|
+
exclude=exclude,
|
|
81
|
+
columns=columns,
|
|
82
|
+
coerce_float=coerce_float,
|
|
83
|
+
nrows=nrows,
|
|
84
|
+
),
|
|
85
|
+
**kw
|
|
86
|
+
)
|
|
87
|
+
elif isinstance(data, TENSOR_TYPE):
|
|
88
|
+
if data.dtype.names is None:
|
|
89
|
+
raise TypeError("Not a tensor with structured dtype {0}", data.dtype)
|
|
90
|
+
if data.ndim != 1:
|
|
91
|
+
raise ValueError(
|
|
92
|
+
"Not a tensor with non 1-D structured dtype {0}", data.shape
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
op = DataFrameFromRecords(
|
|
96
|
+
index=None,
|
|
97
|
+
exclude=exclude,
|
|
98
|
+
columns=columns,
|
|
99
|
+
coerce_float=coerce_float,
|
|
100
|
+
nrows=nrows,
|
|
101
|
+
gpu=gpu,
|
|
102
|
+
sparse=sparse,
|
|
103
|
+
**kw
|
|
104
|
+
)
|
|
105
|
+
return op(data)
|
|
106
|
+
else:
|
|
107
|
+
raise TypeError("Not support create DataFrame from {0}", type(data))
|
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
from collections import OrderedDict
|
|
18
|
+
from typing import Any, Dict, List, Union
|
|
19
|
+
|
|
20
|
+
import numpy as np
|
|
21
|
+
import pandas as pd
|
|
22
|
+
|
|
23
|
+
from ... import opcodes
|
|
24
|
+
from ...core import ENTITY_TYPE, OutputType
|
|
25
|
+
from ...serialization.serializables import AnyField, KeyField
|
|
26
|
+
from ...tensor.core import Tensor
|
|
27
|
+
from ...tensor.datasource import tensor as astensor
|
|
28
|
+
from ...typing_ import EntityType, TileableType
|
|
29
|
+
from ..core import INDEX_TYPE, SERIES_TYPE
|
|
30
|
+
from ..operators import DataFrameOperator, DataFrameOperatorMixin
|
|
31
|
+
from ..utils import parse_index
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class DataFrameFromTensor(DataFrameOperator, DataFrameOperatorMixin):
|
|
35
|
+
"""
|
|
36
|
+
Represents data from maxframe tensor
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
_op_type_ = opcodes.DATAFRAME_FROM_TENSOR
|
|
40
|
+
|
|
41
|
+
input = AnyField("input")
|
|
42
|
+
index = AnyField("index")
|
|
43
|
+
columns = AnyField("columns")
|
|
44
|
+
|
|
45
|
+
def __init__(self, *args, **kwargs):
|
|
46
|
+
kwargs["_output_types"] = [OutputType.dataframe]
|
|
47
|
+
super().__init__(*args, **kwargs)
|
|
48
|
+
|
|
49
|
+
def _set_inputs(self, inputs: List[EntityType]):
|
|
50
|
+
super()._set_inputs(inputs)
|
|
51
|
+
inputs_iter = iter(self._inputs)
|
|
52
|
+
if self.input is not None:
|
|
53
|
+
if not isinstance(self.input, dict):
|
|
54
|
+
self.input = next(inputs_iter)
|
|
55
|
+
else:
|
|
56
|
+
# check each value for input
|
|
57
|
+
new_input = OrderedDict()
|
|
58
|
+
for k, v in self.input.items():
|
|
59
|
+
if isinstance(v, ENTITY_TYPE):
|
|
60
|
+
new_input[k] = next(inputs_iter)
|
|
61
|
+
else:
|
|
62
|
+
new_input[k] = v
|
|
63
|
+
self.input = new_input
|
|
64
|
+
|
|
65
|
+
if isinstance(self.index, ENTITY_TYPE):
|
|
66
|
+
self.index = next(inputs_iter)
|
|
67
|
+
|
|
68
|
+
def __call__(
|
|
69
|
+
self,
|
|
70
|
+
input_tensor: Tensor,
|
|
71
|
+
index: Union[TileableType, pd.Index],
|
|
72
|
+
columns: pd.Index,
|
|
73
|
+
dtypes: pd.Series,
|
|
74
|
+
):
|
|
75
|
+
if isinstance(input_tensor, dict):
|
|
76
|
+
return self._call_input_1d_tileables(input_tensor, index, columns, dtypes)
|
|
77
|
+
elif input_tensor is not None:
|
|
78
|
+
return self._call_input_tensor(input_tensor, index, columns, dtypes)
|
|
79
|
+
else:
|
|
80
|
+
return self._call_tensor_none(index, columns, dtypes)
|
|
81
|
+
|
|
82
|
+
def _process_index(
|
|
83
|
+
self, index: Union[TileableType, pd.Index], inputs: List[EntityType]
|
|
84
|
+
):
|
|
85
|
+
if not isinstance(index, pd.Index):
|
|
86
|
+
if isinstance(index, INDEX_TYPE):
|
|
87
|
+
index_value = index.index_value
|
|
88
|
+
inputs.append(index)
|
|
89
|
+
elif isinstance(index, ENTITY_TYPE):
|
|
90
|
+
index = astensor(index)
|
|
91
|
+
if index.ndim != 1:
|
|
92
|
+
raise ValueError(f"index should be 1-d, got {index.ndim}-d")
|
|
93
|
+
index_value = parse_index(
|
|
94
|
+
pd.Index([], dtype=index.dtype), index, type(self).__name__
|
|
95
|
+
)
|
|
96
|
+
inputs.append(index)
|
|
97
|
+
else:
|
|
98
|
+
index = pd.Index(index)
|
|
99
|
+
index_value = parse_index(index)
|
|
100
|
+
else:
|
|
101
|
+
index_value = parse_index(index)
|
|
102
|
+
return index_value
|
|
103
|
+
|
|
104
|
+
def _call_input_1d_tileables(
|
|
105
|
+
self,
|
|
106
|
+
input_1d_tileables: Dict[Any, TileableType],
|
|
107
|
+
index: Union[TileableType, pd.Index],
|
|
108
|
+
columns: pd.Index,
|
|
109
|
+
dtypes: pd.Series,
|
|
110
|
+
):
|
|
111
|
+
tileables = []
|
|
112
|
+
shape = None
|
|
113
|
+
for tileable in input_1d_tileables.values():
|
|
114
|
+
tileable_shape = astensor(tileable).shape
|
|
115
|
+
if len(tileable_shape) > 0:
|
|
116
|
+
if shape is None:
|
|
117
|
+
shape = tileable_shape
|
|
118
|
+
elif shape != tileable_shape:
|
|
119
|
+
raise ValueError("input 1-d tensors should have same shape")
|
|
120
|
+
|
|
121
|
+
if isinstance(tileable, ENTITY_TYPE):
|
|
122
|
+
tileables.append(tileable)
|
|
123
|
+
|
|
124
|
+
if index is not None:
|
|
125
|
+
tileable_size = tileables[0].shape[0]
|
|
126
|
+
if hasattr(index, "shape"):
|
|
127
|
+
index_size = index.shape[0]
|
|
128
|
+
else:
|
|
129
|
+
index_size = len(index)
|
|
130
|
+
if (
|
|
131
|
+
not pd.isna(tileable_size)
|
|
132
|
+
and not pd.isna(index_size)
|
|
133
|
+
and tileable_size != index_size
|
|
134
|
+
):
|
|
135
|
+
raise ValueError(
|
|
136
|
+
f"index {index} should have the same shape "
|
|
137
|
+
f"with tensor: {tileable_size}"
|
|
138
|
+
)
|
|
139
|
+
index_value = self._process_index(index, tileables)
|
|
140
|
+
else:
|
|
141
|
+
self.index = index = pd.RangeIndex(0, tileables[0].shape[0])
|
|
142
|
+
index_value = parse_index(index)
|
|
143
|
+
|
|
144
|
+
if columns is not None:
|
|
145
|
+
if len(input_1d_tileables) != len(columns):
|
|
146
|
+
raise ValueError(
|
|
147
|
+
f"columns {columns} should have size {len(input_1d_tileables)}"
|
|
148
|
+
)
|
|
149
|
+
if not isinstance(columns, pd.Index):
|
|
150
|
+
if isinstance(columns, ENTITY_TYPE):
|
|
151
|
+
raise NotImplementedError("The columns value cannot be a tileable")
|
|
152
|
+
columns = pd.Index(columns)
|
|
153
|
+
columns_value = parse_index(columns, store_data=True)
|
|
154
|
+
else:
|
|
155
|
+
columns_value = parse_index(
|
|
156
|
+
pd.RangeIndex(0, len(input_1d_tileables)), store_data=True
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
shape = (shape[0], len(input_1d_tileables))
|
|
160
|
+
return self.new_dataframe(
|
|
161
|
+
tileables,
|
|
162
|
+
shape,
|
|
163
|
+
dtypes=dtypes,
|
|
164
|
+
index_value=index_value,
|
|
165
|
+
columns_value=columns_value,
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
def _call_input_tensor(
|
|
169
|
+
self,
|
|
170
|
+
input_tensor: Tensor,
|
|
171
|
+
index: Union[TileableType, pd.Index],
|
|
172
|
+
columns: pd.Index,
|
|
173
|
+
dtypes: pd.Series,
|
|
174
|
+
):
|
|
175
|
+
if input_tensor.ndim not in {1, 2}:
|
|
176
|
+
raise ValueError("Must pass 1-d or 2-d input")
|
|
177
|
+
inputs = [input_tensor]
|
|
178
|
+
|
|
179
|
+
if index is not None:
|
|
180
|
+
if input_tensor.shape[0] != len(index):
|
|
181
|
+
raise ValueError(
|
|
182
|
+
f"index {index} should have the same shape with tensor: {input_tensor.shape[0]}"
|
|
183
|
+
)
|
|
184
|
+
index_value = self._process_index(index, inputs)
|
|
185
|
+
elif isinstance(input_tensor, SERIES_TYPE):
|
|
186
|
+
index_value = input_tensor.index_value
|
|
187
|
+
else:
|
|
188
|
+
stop = input_tensor.shape[0]
|
|
189
|
+
stop = -1 if np.isnan(stop) else stop
|
|
190
|
+
index = self.index = pd.RangeIndex(start=0, stop=stop)
|
|
191
|
+
index_value = parse_index(index)
|
|
192
|
+
|
|
193
|
+
if columns is not None:
|
|
194
|
+
if not (
|
|
195
|
+
input_tensor.ndim == 1
|
|
196
|
+
and len(columns) == 1
|
|
197
|
+
or input_tensor.shape[1] == len(columns)
|
|
198
|
+
):
|
|
199
|
+
raise ValueError(
|
|
200
|
+
f"columns {columns} should have the same shape with tensor: {input_tensor.shape[1]}"
|
|
201
|
+
)
|
|
202
|
+
if not isinstance(columns, pd.Index):
|
|
203
|
+
if isinstance(columns, ENTITY_TYPE):
|
|
204
|
+
raise NotImplementedError("The columns value cannot be a tileable")
|
|
205
|
+
columns = pd.Index(columns)
|
|
206
|
+
columns_value = parse_index(columns, store_data=True)
|
|
207
|
+
else:
|
|
208
|
+
if input_tensor.ndim == 1:
|
|
209
|
+
# convert to 1-d DataFrame
|
|
210
|
+
columns_value = parse_index(
|
|
211
|
+
pd.RangeIndex(start=0, stop=1), store_data=True
|
|
212
|
+
)
|
|
213
|
+
else:
|
|
214
|
+
columns_value = parse_index(
|
|
215
|
+
pd.RangeIndex(start=0, stop=input_tensor.shape[1]), store_data=True
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
if input_tensor.ndim == 1:
|
|
219
|
+
shape = (input_tensor.shape[0], 1)
|
|
220
|
+
else:
|
|
221
|
+
shape = input_tensor.shape
|
|
222
|
+
|
|
223
|
+
return self.new_dataframe(
|
|
224
|
+
inputs,
|
|
225
|
+
shape,
|
|
226
|
+
dtypes=dtypes,
|
|
227
|
+
index_value=index_value,
|
|
228
|
+
columns_value=columns_value,
|
|
229
|
+
)
|
|
230
|
+
|
|
231
|
+
def _call_tensor_none(
|
|
232
|
+
self, index: Union[TileableType, pd.Index], columns: pd.Index, dtypes: pd.Series
|
|
233
|
+
):
|
|
234
|
+
inputs = []
|
|
235
|
+
shape = []
|
|
236
|
+
if index is not None:
|
|
237
|
+
index_value = self._process_index(index, inputs)
|
|
238
|
+
shape.append(index.shape[0])
|
|
239
|
+
else:
|
|
240
|
+
index = self.index = pd.Index([], dtype=object)
|
|
241
|
+
index_value = parse_index(index)
|
|
242
|
+
shape.append(0)
|
|
243
|
+
|
|
244
|
+
if columns is not None:
|
|
245
|
+
if not isinstance(columns, pd.Index):
|
|
246
|
+
if isinstance(columns, ENTITY_TYPE):
|
|
247
|
+
raise NotImplementedError("The columns value cannot be a tileable")
|
|
248
|
+
columns = pd.Index(columns)
|
|
249
|
+
columns_value = parse_index(columns, store_data=True)
|
|
250
|
+
shape.append(columns.shape[0])
|
|
251
|
+
else:
|
|
252
|
+
columns_value = parse_index(pd.Index([], dtype=object), store_data=True)
|
|
253
|
+
shape.append(0)
|
|
254
|
+
|
|
255
|
+
return self.new_dataframe(
|
|
256
|
+
inputs,
|
|
257
|
+
shape=tuple(shape),
|
|
258
|
+
dtypes=dtypes,
|
|
259
|
+
index_value=index_value,
|
|
260
|
+
columns_value=columns_value,
|
|
261
|
+
)
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
def dataframe_from_tensor(
|
|
265
|
+
tensor: Tensor,
|
|
266
|
+
index: Union[TileableType, pd.Index] = None,
|
|
267
|
+
columns: Union[pd.Index, list] = None,
|
|
268
|
+
gpu: bool = None,
|
|
269
|
+
sparse: bool = False,
|
|
270
|
+
):
|
|
271
|
+
if tensor is not None:
|
|
272
|
+
if tensor.ndim > 2 or tensor.ndim <= 0:
|
|
273
|
+
raise TypeError(
|
|
274
|
+
f"Not support create DataFrame from {tensor.ndim} dims tensor"
|
|
275
|
+
)
|
|
276
|
+
try:
|
|
277
|
+
col_num = tensor.shape[1]
|
|
278
|
+
except IndexError:
|
|
279
|
+
col_num = 1
|
|
280
|
+
gpu = tensor.op.gpu if gpu is None else gpu
|
|
281
|
+
dtypes = pd.Series([tensor.dtype] * col_num, index=columns)
|
|
282
|
+
if columns is None:
|
|
283
|
+
columns = dtypes.index
|
|
284
|
+
else:
|
|
285
|
+
gpu = None
|
|
286
|
+
if columns is not None:
|
|
287
|
+
dtypes = pd.Series([], index=columns)
|
|
288
|
+
else:
|
|
289
|
+
dtypes = pd.Series([], index=pd.Index([], dtype=object))
|
|
290
|
+
if index is not None and not isinstance(index, ENTITY_TYPE):
|
|
291
|
+
index = pd.Index(index)
|
|
292
|
+
op = DataFrameFromTensor(
|
|
293
|
+
input=tensor, index=index, columns=columns, gpu=gpu, sparse=sparse
|
|
294
|
+
)
|
|
295
|
+
return op(tensor, index, columns, dtypes)
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
def dataframe_from_1d_tileables(
|
|
299
|
+
d: Dict[Any, TileableType],
|
|
300
|
+
index: Union[TileableType, pd.Index, list] = None,
|
|
301
|
+
columns: Union[pd.Index, list] = None,
|
|
302
|
+
gpu: bool = None,
|
|
303
|
+
sparse: bool = False,
|
|
304
|
+
):
|
|
305
|
+
data = dict()
|
|
306
|
+
for k, v in d.items():
|
|
307
|
+
if isinstance(v, (list, tuple)) and any(
|
|
308
|
+
isinstance(sv, ENTITY_TYPE) for sv in v
|
|
309
|
+
):
|
|
310
|
+
data[k] = astensor(v)
|
|
311
|
+
else:
|
|
312
|
+
data[k] = v
|
|
313
|
+
d = data
|
|
314
|
+
if columns is not None:
|
|
315
|
+
tileables = [d.get(c) for c in columns]
|
|
316
|
+
else:
|
|
317
|
+
columns = list(d.keys())
|
|
318
|
+
tileables = list(d.values())
|
|
319
|
+
|
|
320
|
+
gpu = (
|
|
321
|
+
next((t.op.gpu for t in tileables if hasattr(t, "op")), False)
|
|
322
|
+
if gpu is None
|
|
323
|
+
else gpu
|
|
324
|
+
)
|
|
325
|
+
dtypes = pd.Series(
|
|
326
|
+
[t.dtype if hasattr(t, "dtype") else pd.Series(t).dtype for t in tileables],
|
|
327
|
+
index=columns,
|
|
328
|
+
)
|
|
329
|
+
if index is not None and not isinstance(index, ENTITY_TYPE):
|
|
330
|
+
index = pd.Index(index)
|
|
331
|
+
op = DataFrameFromTensor(
|
|
332
|
+
input=d, index=index, columns=columns, gpu=gpu, sparse=sparse
|
|
333
|
+
)
|
|
334
|
+
return op(d, index, columns, dtypes)
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
class SeriesFromTensor(DataFrameOperator, DataFrameOperatorMixin):
|
|
338
|
+
_op_type_ = opcodes.SERIES_FROM_TENSOR
|
|
339
|
+
|
|
340
|
+
input = KeyField("input")
|
|
341
|
+
index = AnyField("index")
|
|
342
|
+
|
|
343
|
+
def _set_inputs(self, inputs: List[EntityType]):
|
|
344
|
+
super()._set_inputs(inputs)
|
|
345
|
+
if self.input is not None:
|
|
346
|
+
self.input = self.inputs[0]
|
|
347
|
+
if self.index is not None and hasattr(self.index, "key"):
|
|
348
|
+
self.index = self.inputs[-1]
|
|
349
|
+
|
|
350
|
+
def __call__(
|
|
351
|
+
self,
|
|
352
|
+
input_tensor: Tensor,
|
|
353
|
+
index: Union[TileableType, pd.Index],
|
|
354
|
+
dtype: np.dtype,
|
|
355
|
+
name: Any,
|
|
356
|
+
):
|
|
357
|
+
inputs = [input_tensor] if input_tensor is not None else []
|
|
358
|
+
if index is not None:
|
|
359
|
+
if not isinstance(index, pd.Index):
|
|
360
|
+
if isinstance(index, INDEX_TYPE):
|
|
361
|
+
self.index = index
|
|
362
|
+
index_value = index.index_value
|
|
363
|
+
inputs.append(index)
|
|
364
|
+
elif isinstance(index, ENTITY_TYPE):
|
|
365
|
+
self.index = index
|
|
366
|
+
index = astensor(index)
|
|
367
|
+
if index.ndim != 1:
|
|
368
|
+
raise ValueError(f"index should be 1-d, got {index.ndim}-d")
|
|
369
|
+
index_value = parse_index(
|
|
370
|
+
pd.Index([], dtype=index.dtype), index, type(self).__name__
|
|
371
|
+
)
|
|
372
|
+
inputs.append(index)
|
|
373
|
+
else:
|
|
374
|
+
self.index = index = pd.Index(index)
|
|
375
|
+
index_value = parse_index(index)
|
|
376
|
+
else:
|
|
377
|
+
self.index = index
|
|
378
|
+
index_value = parse_index(index)
|
|
379
|
+
elif input_tensor is not None:
|
|
380
|
+
if pd.isna(input_tensor.shape[0]):
|
|
381
|
+
pd_index = pd.RangeIndex(-1)
|
|
382
|
+
else:
|
|
383
|
+
pd_index = pd.RangeIndex(start=0, stop=input_tensor.shape[0])
|
|
384
|
+
index_value = parse_index(pd_index)
|
|
385
|
+
self.index = pd_index
|
|
386
|
+
else:
|
|
387
|
+
self.index = index = pd.Index([], dtype=object)
|
|
388
|
+
index_value = parse_index(index)
|
|
389
|
+
|
|
390
|
+
if input_tensor is not None:
|
|
391
|
+
shape = input_tensor.shape
|
|
392
|
+
elif index is not None:
|
|
393
|
+
shape = index.shape
|
|
394
|
+
else:
|
|
395
|
+
shape = (0,)
|
|
396
|
+
|
|
397
|
+
return self.new_series(
|
|
398
|
+
inputs, shape=shape, dtype=dtype, index_value=index_value, name=name
|
|
399
|
+
)
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
def series_from_tensor(
|
|
403
|
+
tensor: Tensor,
|
|
404
|
+
index: Union[TileableType, pd.Index, list] = None,
|
|
405
|
+
name: Any = None,
|
|
406
|
+
dtype: np.dtype = None,
|
|
407
|
+
gpu: bool = None,
|
|
408
|
+
sparse: bool = False,
|
|
409
|
+
):
|
|
410
|
+
if tensor is not None:
|
|
411
|
+
if tensor.ndim > 1 or tensor.ndim <= 0:
|
|
412
|
+
raise TypeError(f"Not support create Series from {tensor.ndim} dims tensor")
|
|
413
|
+
gpu = tensor.op.gpu if gpu is None else gpu
|
|
414
|
+
dtype = dtype or tensor.dtype
|
|
415
|
+
else:
|
|
416
|
+
gpu = None
|
|
417
|
+
dtype = dtype or np.dtype(float)
|
|
418
|
+
op = SeriesFromTensor(input=tensor, gpu=gpu, sparse=sparse)
|
|
419
|
+
return op(tensor, index, dtype, name)
|
|
@@ -0,0 +1,117 @@
|
|
|
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 ...core import OutputType
|
|
19
|
+
from ...serialization.serializables import BoolField, DataTypeField, IndexField
|
|
20
|
+
from ..operators import DataFrameOperatorMixin
|
|
21
|
+
from ..utils import is_cudf, parse_index
|
|
22
|
+
from .core import PandasDataSourceOperator
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class IndexDataSource(PandasDataSourceOperator, DataFrameOperatorMixin):
|
|
26
|
+
"""
|
|
27
|
+
Represent data from pandas Index
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
_op_type_ = opcodes.INDEX_DATA_SOURCE
|
|
31
|
+
|
|
32
|
+
data = IndexField("data")
|
|
33
|
+
dtype = DataTypeField("dtype")
|
|
34
|
+
store_data = BoolField("store_data")
|
|
35
|
+
|
|
36
|
+
def __init__(self, data=None, dtype=None, gpu=None, store_data=None, **kw):
|
|
37
|
+
if dtype is None and data is not None:
|
|
38
|
+
dtype = data.dtype
|
|
39
|
+
if gpu is None and is_cudf(data): # pragma: no cover
|
|
40
|
+
gpu = True
|
|
41
|
+
super().__init__(
|
|
42
|
+
data=data,
|
|
43
|
+
dtype=dtype,
|
|
44
|
+
gpu=gpu,
|
|
45
|
+
store_data=store_data,
|
|
46
|
+
_output_types=[OutputType.index],
|
|
47
|
+
**kw
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
def __call__(self, shape=None, chunk_size=None, inp=None, name=None, names=None):
|
|
51
|
+
if inp is None:
|
|
52
|
+
# create from pandas Index
|
|
53
|
+
name = name if name is not None else self.data.name
|
|
54
|
+
names = names if names is not None else self.data.names
|
|
55
|
+
return self.new_index(
|
|
56
|
+
None,
|
|
57
|
+
shape=shape,
|
|
58
|
+
dtype=self.dtype,
|
|
59
|
+
index_value=parse_index(self.data, store_data=self.store_data),
|
|
60
|
+
name=name,
|
|
61
|
+
names=names,
|
|
62
|
+
raw_chunk_size=chunk_size,
|
|
63
|
+
)
|
|
64
|
+
elif hasattr(inp, "index_value"):
|
|
65
|
+
# get index from MaxFrame DataFrame, Series or Index
|
|
66
|
+
name = name if name is not None else inp.index_value.name
|
|
67
|
+
names = names if names is not None else inp.index_value.names
|
|
68
|
+
if inp.index_value.has_value():
|
|
69
|
+
self.data = data = inp.index_value.to_pandas()
|
|
70
|
+
return self.new_index(
|
|
71
|
+
None,
|
|
72
|
+
shape=(inp.shape[0],),
|
|
73
|
+
dtype=data.dtype,
|
|
74
|
+
index_value=parse_index(data, store_data=self.store_data),
|
|
75
|
+
name=name,
|
|
76
|
+
names=names,
|
|
77
|
+
raw_chunk_size=chunk_size,
|
|
78
|
+
)
|
|
79
|
+
else:
|
|
80
|
+
if self.dtype is None:
|
|
81
|
+
self.dtype = inp.index_value.to_pandas().dtype
|
|
82
|
+
return self.new_index(
|
|
83
|
+
[inp],
|
|
84
|
+
shape=(inp.shape[0],),
|
|
85
|
+
dtype=self.dtype,
|
|
86
|
+
index_value=inp.index_value,
|
|
87
|
+
name=name,
|
|
88
|
+
names=names,
|
|
89
|
+
)
|
|
90
|
+
else:
|
|
91
|
+
if inp.ndim != 1:
|
|
92
|
+
raise ValueError("Index data must be 1-dimensional")
|
|
93
|
+
# get index from tensor
|
|
94
|
+
dtype = inp.dtype if self.dtype is None else self.dtype
|
|
95
|
+
pd_index = pd.Index([], dtype=dtype)
|
|
96
|
+
if self.dtype is None:
|
|
97
|
+
self.dtype = pd_index.dtype
|
|
98
|
+
return self.new_index(
|
|
99
|
+
[inp],
|
|
100
|
+
shape=inp.shape,
|
|
101
|
+
dtype=self.dtype,
|
|
102
|
+
index_value=parse_index(pd_index, inp, store_data=self.store_data),
|
|
103
|
+
name=name,
|
|
104
|
+
names=names,
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def from_pandas(data, chunk_size=None, gpu=None, sparse=False, store_data=False):
|
|
109
|
+
op = IndexDataSource(
|
|
110
|
+
data=data, gpu=gpu, sparse=sparse, dtype=data.dtype, store_data=store_data
|
|
111
|
+
)
|
|
112
|
+
return op(shape=data.shape, chunk_size=chunk_size)
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def from_tileable(tileable, dtype=None, name=None, names=None):
|
|
116
|
+
op = IndexDataSource(gpu=tileable.op.gpu, sparse=tileable.issparse(), dtype=dtype)
|
|
117
|
+
return op(inp=tileable, name=name, names=names)
|