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,114 @@
|
|
|
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 pytest
|
|
19
|
+
|
|
20
|
+
from ...datasource import arange, ones, tensor
|
|
21
|
+
from .. import broadcast_to, ravel, transpose, where
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def test_dir():
|
|
25
|
+
a = tensor([0, 1, 2], chunk_size=2)
|
|
26
|
+
tensor_dir = dir(a)
|
|
27
|
+
for attr in dir(a.data):
|
|
28
|
+
assert attr in tensor_dir
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def test_astype():
|
|
32
|
+
arr = ones((10, 20, 30), chunk_size=3)
|
|
33
|
+
|
|
34
|
+
arr2 = arr.astype(np.int32)
|
|
35
|
+
|
|
36
|
+
assert arr2.shape == (10, 20, 30)
|
|
37
|
+
assert np.issubdtype(arr2.dtype, np.int32) is True
|
|
38
|
+
assert arr2.op.casting == "unsafe"
|
|
39
|
+
|
|
40
|
+
with pytest.raises(TypeError):
|
|
41
|
+
arr.astype(np.int32, casting="safe")
|
|
42
|
+
|
|
43
|
+
arr3 = arr.astype(arr.dtype, order="F")
|
|
44
|
+
assert arr3.flags["F_CONTIGUOUS"] is True
|
|
45
|
+
assert arr3.flags["C_CONTIGUOUS"] is False
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def test_transpose():
|
|
49
|
+
arr = ones((10, 20, 30), chunk_size=[4, 3, 5])
|
|
50
|
+
|
|
51
|
+
arr2 = transpose(arr)
|
|
52
|
+
|
|
53
|
+
assert arr2.shape == (30, 20, 10)
|
|
54
|
+
|
|
55
|
+
with pytest.raises(ValueError):
|
|
56
|
+
transpose(arr, axes=(1, 0))
|
|
57
|
+
|
|
58
|
+
arr3 = transpose(arr, (-2, 2, 0))
|
|
59
|
+
|
|
60
|
+
assert arr3.shape == (20, 30, 10)
|
|
61
|
+
|
|
62
|
+
arr4 = arr.transpose(-2, 2, 0)
|
|
63
|
+
|
|
64
|
+
assert arr4.shape == (20, 30, 10)
|
|
65
|
+
|
|
66
|
+
arr5 = arr.T
|
|
67
|
+
|
|
68
|
+
assert arr5.shape == (30, 20, 10)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def test_broadcast_to():
|
|
72
|
+
arr = ones((10, 5), chunk_size=2)
|
|
73
|
+
arr2 = broadcast_to(arr, (20, 10, 5))
|
|
74
|
+
|
|
75
|
+
assert arr2.shape == (20, 10, 5)
|
|
76
|
+
|
|
77
|
+
arr = ones((10, 5, 1), chunk_size=2)
|
|
78
|
+
arr3 = broadcast_to(arr, (5, 10, 5, 6))
|
|
79
|
+
|
|
80
|
+
assert arr3.shape == (5, 10, 5, 6)
|
|
81
|
+
|
|
82
|
+
arr = ones((10, 1), chunk_size=2)
|
|
83
|
+
arr4 = broadcast_to(arr, (20, 10, 5))
|
|
84
|
+
|
|
85
|
+
assert arr4.shape == (20, 10, 5)
|
|
86
|
+
|
|
87
|
+
with pytest.raises(ValueError):
|
|
88
|
+
broadcast_to(arr, (10,))
|
|
89
|
+
|
|
90
|
+
with pytest.raises(ValueError):
|
|
91
|
+
broadcast_to(arr, (5, 1))
|
|
92
|
+
|
|
93
|
+
arr = ones((4, 5), chunk_size=2)
|
|
94
|
+
with pytest.raises((ValueError)):
|
|
95
|
+
broadcast_to(arr[arr < 2], (3, 20))
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def test_where():
|
|
99
|
+
cond = tensor([[True, False], [False, True]], chunk_size=1)
|
|
100
|
+
x = tensor([1, 2], chunk_size=1)
|
|
101
|
+
|
|
102
|
+
with pytest.raises(ValueError):
|
|
103
|
+
where(cond, x)
|
|
104
|
+
|
|
105
|
+
x = arange(9.0).reshape(3, 3)
|
|
106
|
+
y = where(x < 5, x, -1)
|
|
107
|
+
|
|
108
|
+
assert y.dtype == np.float64
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def test_ravel():
|
|
112
|
+
arr = ones((10, 5), chunk_size=2)
|
|
113
|
+
flat_arr = ravel(arr)
|
|
114
|
+
assert flat_arr.shape == (50,)
|
|
@@ -0,0 +1,125 @@
|
|
|
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
|
+
|
|
19
|
+
from ... import opcodes
|
|
20
|
+
from ...serialization.serializables import FieldTypes, KeyField, ListField
|
|
21
|
+
from ..core import TensorOrder
|
|
22
|
+
from ..datasource import tensor as astensor
|
|
23
|
+
from ..operators import TensorHasInput, TensorOperatorMixin
|
|
24
|
+
from ..utils import reverse_order
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _reorder(x, axes):
|
|
28
|
+
if x is None:
|
|
29
|
+
return
|
|
30
|
+
return type(x)(x[ax] for ax in axes)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class TensorTranspose(TensorHasInput, TensorOperatorMixin):
|
|
34
|
+
_op_type_ = opcodes.TRANSPOSE
|
|
35
|
+
|
|
36
|
+
_input = KeyField("input")
|
|
37
|
+
axes = ListField("axes", FieldTypes.int32, default=None)
|
|
38
|
+
|
|
39
|
+
def __init__(self, axes=None, **kw):
|
|
40
|
+
# transpose will create a view
|
|
41
|
+
super().__init__(axes=axes, create_view=True, **kw)
|
|
42
|
+
|
|
43
|
+
def __call__(self, a):
|
|
44
|
+
shape = tuple(
|
|
45
|
+
s if np.isnan(s) else int(s) for s in _reorder(a.shape, self.axes)
|
|
46
|
+
)
|
|
47
|
+
if self.axes == list(reversed(range(a.ndim))):
|
|
48
|
+
# order reversed
|
|
49
|
+
tensor_order = reverse_order(a.order)
|
|
50
|
+
else:
|
|
51
|
+
tensor_order = TensorOrder.C_ORDER
|
|
52
|
+
return self.new_tensor([a], shape, order=tensor_order)
|
|
53
|
+
|
|
54
|
+
def _set_inputs(self, inputs):
|
|
55
|
+
super()._set_inputs(inputs)
|
|
56
|
+
self._input = self._inputs[0]
|
|
57
|
+
|
|
58
|
+
def on_output_modify(self, new_output):
|
|
59
|
+
op = self.copy().reset_key()
|
|
60
|
+
return op(new_output)
|
|
61
|
+
|
|
62
|
+
def on_input_modify(self, new_input):
|
|
63
|
+
op = self.copy().reset_key()
|
|
64
|
+
return op(new_input)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def transpose(a, axes=None):
|
|
68
|
+
"""
|
|
69
|
+
Permute the dimensions of a tensor.
|
|
70
|
+
|
|
71
|
+
Parameters
|
|
72
|
+
----------
|
|
73
|
+
a : array_like
|
|
74
|
+
Input tensor.
|
|
75
|
+
axes : list of ints, optional
|
|
76
|
+
By default, reverse the dimensions, otherwise permute the axes
|
|
77
|
+
according to the values given.
|
|
78
|
+
|
|
79
|
+
Returns
|
|
80
|
+
-------
|
|
81
|
+
p : Tensor
|
|
82
|
+
`a` with its axes permuted. A view is returned whenever
|
|
83
|
+
possible.
|
|
84
|
+
|
|
85
|
+
See Also
|
|
86
|
+
--------
|
|
87
|
+
moveaxis
|
|
88
|
+
argsort
|
|
89
|
+
|
|
90
|
+
Notes
|
|
91
|
+
-----
|
|
92
|
+
Use `transpose(a, argsort(axes))` to invert the transposition of tensors
|
|
93
|
+
when using the `axes` keyword argument.
|
|
94
|
+
|
|
95
|
+
Transposing a 1-D array returns an unchanged view of the original tensor.
|
|
96
|
+
|
|
97
|
+
Examples
|
|
98
|
+
--------
|
|
99
|
+
>>> import maxframe.tensor as mt
|
|
100
|
+
|
|
101
|
+
>>> x = mt.arange(4).reshape((2,2))
|
|
102
|
+
>>> x.execute()
|
|
103
|
+
array([[0, 1],
|
|
104
|
+
[2, 3]])
|
|
105
|
+
|
|
106
|
+
>>> mt.transpose(x).execute()
|
|
107
|
+
array([[0, 2],
|
|
108
|
+
[1, 3]])
|
|
109
|
+
|
|
110
|
+
>>> x = mt.ones((1, 2, 3))
|
|
111
|
+
>>> mt.transpose(x, (1, 0, 2)).shape
|
|
112
|
+
(2, 1, 3)
|
|
113
|
+
|
|
114
|
+
"""
|
|
115
|
+
a = astensor(a)
|
|
116
|
+
if axes:
|
|
117
|
+
if len(axes) != a.ndim:
|
|
118
|
+
raise ValueError("axes don't match tensor")
|
|
119
|
+
|
|
120
|
+
if not axes:
|
|
121
|
+
axes = list(range(a.ndim))[::-1]
|
|
122
|
+
else:
|
|
123
|
+
axes = list(axes)
|
|
124
|
+
op = TensorTranspose(axes, dtype=a.dtype, sparse=a.issparse())
|
|
125
|
+
return op(a)
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
import numpy as np
|
|
17
|
+
|
|
18
|
+
from ... import opcodes as OperandDef
|
|
19
|
+
from ...serialization.serializables import BoolField, Int32Field
|
|
20
|
+
from ..core import TensorOrder
|
|
21
|
+
from ..operators import TensorHasInput, TensorOperatorMixin
|
|
22
|
+
from ..utils import validate_axis
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class TensorUnique(TensorHasInput, TensorOperatorMixin):
|
|
26
|
+
_op_type_ = OperandDef.UNIQUE
|
|
27
|
+
|
|
28
|
+
return_index = BoolField("return_index", default=False)
|
|
29
|
+
return_inverse = BoolField("return_inverse", default=False)
|
|
30
|
+
return_counts = BoolField("return_counts", default=False)
|
|
31
|
+
axis = Int32Field("axis", default=None)
|
|
32
|
+
|
|
33
|
+
@property
|
|
34
|
+
def output_limit(self):
|
|
35
|
+
return 1
|
|
36
|
+
|
|
37
|
+
def _gen_kws(self, input_obj, chunk=False, chunk_index=None):
|
|
38
|
+
kws = []
|
|
39
|
+
|
|
40
|
+
# unique tensor
|
|
41
|
+
shape = list(input_obj.shape)
|
|
42
|
+
shape[self.axis] = np.nan
|
|
43
|
+
kw = {"shape": tuple(shape), "dtype": input_obj.dtype, "gpu": input_obj.op.gpu}
|
|
44
|
+
if chunk:
|
|
45
|
+
idx = [0] * len(shape)
|
|
46
|
+
idx[self.axis] = chunk_index or 0
|
|
47
|
+
kw["index"] = tuple(idx)
|
|
48
|
+
kws.append(kw)
|
|
49
|
+
|
|
50
|
+
# unique indices tensor
|
|
51
|
+
if self.return_index:
|
|
52
|
+
kw = {
|
|
53
|
+
"shape": (np.nan,),
|
|
54
|
+
"dtype": np.dtype(np.intp),
|
|
55
|
+
"gpu": input_obj.op.gpu,
|
|
56
|
+
"type": "indices",
|
|
57
|
+
}
|
|
58
|
+
if chunk:
|
|
59
|
+
kw["index"] = (chunk_index or 0,)
|
|
60
|
+
kws.append(kw)
|
|
61
|
+
|
|
62
|
+
# unique inverse tensor
|
|
63
|
+
if self.return_inverse:
|
|
64
|
+
kw = {
|
|
65
|
+
"shape": (input_obj.shape[self.axis],),
|
|
66
|
+
"dtype": np.dtype(np.intp),
|
|
67
|
+
"gpu": input_obj.op.gpu,
|
|
68
|
+
"type": "inverse",
|
|
69
|
+
}
|
|
70
|
+
if chunk:
|
|
71
|
+
kw["index"] = (chunk_index or 0,)
|
|
72
|
+
kws.append(kw)
|
|
73
|
+
|
|
74
|
+
# unique counts tensor
|
|
75
|
+
if self.return_counts:
|
|
76
|
+
kw = {
|
|
77
|
+
"shape": (np.nan,),
|
|
78
|
+
"dtype": np.dtype(np.int_),
|
|
79
|
+
"gpu": input_obj.op.gpu,
|
|
80
|
+
"type": "counts",
|
|
81
|
+
}
|
|
82
|
+
if chunk:
|
|
83
|
+
kw["index"] = (chunk_index or 0,)
|
|
84
|
+
kws.append(kw)
|
|
85
|
+
|
|
86
|
+
return kws
|
|
87
|
+
|
|
88
|
+
def __call__(self, ar):
|
|
89
|
+
from .atleast_1d import atleast_1d
|
|
90
|
+
|
|
91
|
+
ar = atleast_1d(ar)
|
|
92
|
+
if self.axis is None:
|
|
93
|
+
if ar.ndim > 1:
|
|
94
|
+
ar = ar.flatten()
|
|
95
|
+
self._axis = 0
|
|
96
|
+
else:
|
|
97
|
+
self._axis = validate_axis(ar.ndim, self._axis)
|
|
98
|
+
|
|
99
|
+
kws = self._gen_kws(self, ar)
|
|
100
|
+
tensors = self.new_tensors([ar], kws=kws, order=TensorOrder.C_ORDER)
|
|
101
|
+
if len(tensors) == 1:
|
|
102
|
+
return tensors[0]
|
|
103
|
+
return tensors
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def unique(
|
|
107
|
+
ar,
|
|
108
|
+
return_index=False,
|
|
109
|
+
return_inverse=False,
|
|
110
|
+
return_counts=False,
|
|
111
|
+
axis=None,
|
|
112
|
+
):
|
|
113
|
+
"""
|
|
114
|
+
Find the unique elements of a tensor.
|
|
115
|
+
|
|
116
|
+
Returns the sorted unique elements of a tensor. There are three optional
|
|
117
|
+
outputs in addition to the unique elements:
|
|
118
|
+
|
|
119
|
+
* the indices of the input tensor that give the unique values
|
|
120
|
+
* the indices of the unique tensor that reconstruct the input tensor
|
|
121
|
+
* the number of times each unique value comes up in the input tensor
|
|
122
|
+
|
|
123
|
+
Parameters
|
|
124
|
+
----------
|
|
125
|
+
ar : array_like
|
|
126
|
+
Input tensor. Unless `axis` is specified, this will be flattened if it
|
|
127
|
+
is not already 1-D.
|
|
128
|
+
return_index : bool, optional
|
|
129
|
+
If True, also return the indices of `ar` (along the specified axis,
|
|
130
|
+
if provided, or in the flattened tensor) that result in the unique tensor.
|
|
131
|
+
return_inverse : bool, optional
|
|
132
|
+
If True, also return the indices of the unique tensor (for the specified
|
|
133
|
+
axis, if provided) that can be used to reconstruct `ar`.
|
|
134
|
+
return_counts : bool, optional
|
|
135
|
+
If True, also return the number of times each unique item appears
|
|
136
|
+
in `ar`.
|
|
137
|
+
axis : int or None, optional
|
|
138
|
+
The axis to operate on. If None, `ar` will be flattened. If an integer,
|
|
139
|
+
the subarrays indexed by the given axis will be flattened and treated
|
|
140
|
+
as the elements of a 1-D tensor with the dimension of the given axis,
|
|
141
|
+
see the notes for more details. Object tensors or structured tensors
|
|
142
|
+
that contain objects are not supported if the `axis` kwarg is used. The
|
|
143
|
+
default is None.
|
|
144
|
+
|
|
145
|
+
Returns
|
|
146
|
+
-------
|
|
147
|
+
unique : Tensor
|
|
148
|
+
The sorted unique values.
|
|
149
|
+
unique_indices : Tensor, optional
|
|
150
|
+
The indices of the first occurrences of the unique values in the
|
|
151
|
+
original tensor. Only provided if `return_index` is True.
|
|
152
|
+
unique_inverse : Tensor, optional
|
|
153
|
+
The indices to reconstruct the original tensor from the
|
|
154
|
+
unique tensor. Only provided if `return_inverse` is True.
|
|
155
|
+
unique_counts : Tensor, optional
|
|
156
|
+
The number of times each of the unique values comes up in the
|
|
157
|
+
original tensor. Only provided if `return_counts` is True.
|
|
158
|
+
|
|
159
|
+
Examples
|
|
160
|
+
--------
|
|
161
|
+
>>> import maxframe.tensor as mt
|
|
162
|
+
|
|
163
|
+
>>> mt.unique([1, 1, 2, 2, 3, 3]).execute()
|
|
164
|
+
array([1, 2, 3])
|
|
165
|
+
>>> a = mt.array([[1, 1], [2, 3]])
|
|
166
|
+
>>> mt.unique(a).execute()
|
|
167
|
+
array([1, 2, 3])
|
|
168
|
+
|
|
169
|
+
Return the unique rows of a 2D tensor
|
|
170
|
+
|
|
171
|
+
>>> a = mt.array([[1, 0, 0], [1, 0, 0], [2, 3, 4]])
|
|
172
|
+
>>> mt.unique(a, axis=0).execute()
|
|
173
|
+
array([[1, 0, 0], [2, 3, 4]])
|
|
174
|
+
|
|
175
|
+
Return the indices of the original tensor that give the unique values:
|
|
176
|
+
|
|
177
|
+
>>> a = mt.array(['a', 'b', 'b', 'c', 'a'])
|
|
178
|
+
>>> u, indices = mt.unique(a, return_index=True)
|
|
179
|
+
>>> u.execute()
|
|
180
|
+
array(['a', 'b', 'c'],
|
|
181
|
+
dtype='|S1')
|
|
182
|
+
>>> indices.execute()
|
|
183
|
+
array([0, 1, 3])
|
|
184
|
+
>>> a[indices].execute()
|
|
185
|
+
array(['a', 'b', 'c'],
|
|
186
|
+
dtype='|S1')
|
|
187
|
+
|
|
188
|
+
Reconstruct the input array from the unique values:
|
|
189
|
+
|
|
190
|
+
>>> a = mt.array([1, 2, 6, 4, 2, 3, 2])
|
|
191
|
+
>>> u, indices = mt.unique(a, return_inverse=True)
|
|
192
|
+
>>> u.execute()
|
|
193
|
+
array([1, 2, 3, 4, 6])
|
|
194
|
+
>>> indices.execute()
|
|
195
|
+
array([0, 1, 4, 3, 1, 2, 1])
|
|
196
|
+
>>> u[indices].execute()
|
|
197
|
+
array([1, 2, 6, 4, 2, 3, 2])
|
|
198
|
+
"""
|
|
199
|
+
op = TensorUnique(
|
|
200
|
+
return_index=return_index,
|
|
201
|
+
return_inverse=return_inverse,
|
|
202
|
+
return_counts=return_counts,
|
|
203
|
+
axis=axis,
|
|
204
|
+
)
|
|
205
|
+
return op(ar)
|
|
@@ -0,0 +1,127 @@
|
|
|
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
|
+
|
|
19
|
+
from ... import opcodes
|
|
20
|
+
from ...serialization.serializables import KeyField
|
|
21
|
+
from ..datasource import tensor as astensor
|
|
22
|
+
from ..operators import TensorOperator, TensorOperatorMixin
|
|
23
|
+
from ..utils import broadcast_shape
|
|
24
|
+
from .broadcast_to import broadcast_to
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class TensorWhere(TensorOperator, TensorOperatorMixin):
|
|
28
|
+
_op_type_ = opcodes.WHERE
|
|
29
|
+
|
|
30
|
+
condition = KeyField("condition", default=None)
|
|
31
|
+
x = KeyField("x", default=None)
|
|
32
|
+
y = KeyField("y", default=None)
|
|
33
|
+
|
|
34
|
+
def _set_inputs(self, inputs):
|
|
35
|
+
super()._set_inputs(inputs)
|
|
36
|
+
self.condition = self._inputs[0]
|
|
37
|
+
self.x = self._inputs[1]
|
|
38
|
+
self.y = self._inputs[2]
|
|
39
|
+
|
|
40
|
+
def __call__(self, condition, x, y, shape=None):
|
|
41
|
+
shape = shape or broadcast_shape(condition.shape, x.shape, y.shape)
|
|
42
|
+
return self.new_tensor([condition, x, y], shape)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def where(condition, x=None, y=None):
|
|
46
|
+
"""
|
|
47
|
+
Return elements, either from `x` or `y`, depending on `condition`.
|
|
48
|
+
|
|
49
|
+
If only `condition` is given, return ``condition.nonzero()``.
|
|
50
|
+
|
|
51
|
+
Parameters
|
|
52
|
+
----------
|
|
53
|
+
condition : array_like, bool
|
|
54
|
+
When True, yield `x`, otherwise yield `y`.
|
|
55
|
+
x, y : array_like, optional
|
|
56
|
+
Values from which to choose. `x`, `y` and `condition` need to be
|
|
57
|
+
broadcastable to some shape.
|
|
58
|
+
|
|
59
|
+
Returns
|
|
60
|
+
-------
|
|
61
|
+
out : Tensor or tuple of Tensors
|
|
62
|
+
If both `x` and `y` are specified, the output tensor contains
|
|
63
|
+
elements of `x` where `condition` is True, and elements from
|
|
64
|
+
`y` elsewhere.
|
|
65
|
+
|
|
66
|
+
If only `condition` is given, return the tuple
|
|
67
|
+
``condition.nonzero()``, the indices where `condition` is True.
|
|
68
|
+
|
|
69
|
+
See Also
|
|
70
|
+
--------
|
|
71
|
+
nonzero, choose
|
|
72
|
+
|
|
73
|
+
Notes
|
|
74
|
+
-----
|
|
75
|
+
If `x` and `y` are given and input arrays are 1-D, `where` is
|
|
76
|
+
equivalent to::
|
|
77
|
+
|
|
78
|
+
[xv if c else yv for (c,xv,yv) in zip(condition,x,y)]
|
|
79
|
+
|
|
80
|
+
Examples
|
|
81
|
+
--------
|
|
82
|
+
>>> import maxframe.tensor as mt
|
|
83
|
+
|
|
84
|
+
>>> mt.where([[True, False], [True, True]],
|
|
85
|
+
... [[1, 2], [3, 4]],
|
|
86
|
+
... [[9, 8], [7, 6]]).execute()
|
|
87
|
+
array([[1, 8],
|
|
88
|
+
[3, 4]])
|
|
89
|
+
|
|
90
|
+
>>> mt.where([[0, 1], [1, 0]]).execute()
|
|
91
|
+
(array([0, 1]), array([1, 0]))
|
|
92
|
+
|
|
93
|
+
>>> x = mt.arange(9.).reshape(3, 3)
|
|
94
|
+
>>> mt.where( x > 5 ).execute()
|
|
95
|
+
(array([2, 2, 2]), array([0, 1, 2]))
|
|
96
|
+
>>> mt.where(x < 5, x, -1).execute() # Note: broadcasting.
|
|
97
|
+
array([[ 0., 1., 2.],
|
|
98
|
+
[ 3., 4., -1.],
|
|
99
|
+
[-1., -1., -1.]])
|
|
100
|
+
|
|
101
|
+
Find the indices of elements of `x` that are in `goodvalues`.
|
|
102
|
+
|
|
103
|
+
>>> goodvalues = [3, 4, 7]
|
|
104
|
+
>>> ix = mt.isin(x, goodvalues)
|
|
105
|
+
>>> ix.execute()
|
|
106
|
+
array([[False, False, False],
|
|
107
|
+
[ True, True, False],
|
|
108
|
+
[False, True, False]])
|
|
109
|
+
>>> mt.where(ix).execute()
|
|
110
|
+
(array([1, 1, 2]), array([0, 1, 1]))
|
|
111
|
+
"""
|
|
112
|
+
if (x is None) != (y is None):
|
|
113
|
+
raise ValueError("either both or neither of x and y should be given")
|
|
114
|
+
|
|
115
|
+
if x is None and y is None:
|
|
116
|
+
return astensor(condition).nonzero()
|
|
117
|
+
|
|
118
|
+
x, y = astensor(x), astensor(y)
|
|
119
|
+
dtype = np.result_type(x.dtype, y.dtype)
|
|
120
|
+
shape = broadcast_shape(x.shape, y.shape)
|
|
121
|
+
|
|
122
|
+
if np.isscalar(condition):
|
|
123
|
+
return broadcast_to(x if condition else y, shape).astype(dtype)
|
|
124
|
+
else:
|
|
125
|
+
condition = astensor(condition)
|
|
126
|
+
op = TensorWhere(dtype=dtype)
|
|
127
|
+
return op(condition, x, y, shape=shape)
|