maxframe 0.1.0b5__cp38-cp38-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-38-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-38-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-38-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-38-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 +2 -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
maxframe/tensor/core.py
ADDED
|
@@ -0,0 +1,724 @@
|
|
|
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 logging
|
|
18
|
+
from collections.abc import Iterable
|
|
19
|
+
from enum import Enum
|
|
20
|
+
from operator import attrgetter
|
|
21
|
+
from typing import Any, Dict
|
|
22
|
+
|
|
23
|
+
import numpy as np
|
|
24
|
+
|
|
25
|
+
from ..core import (
|
|
26
|
+
Chunk,
|
|
27
|
+
ChunkData,
|
|
28
|
+
HasShapeTileable,
|
|
29
|
+
HasShapeTileableData,
|
|
30
|
+
OutputType,
|
|
31
|
+
_ExecuteAndFetchMixin,
|
|
32
|
+
is_build_mode,
|
|
33
|
+
register_output_types,
|
|
34
|
+
)
|
|
35
|
+
from ..core.entity.utils import refresh_tileable_shape
|
|
36
|
+
from ..serialization.serializables import (
|
|
37
|
+
AnyField,
|
|
38
|
+
DataTypeField,
|
|
39
|
+
EnumField,
|
|
40
|
+
FieldTypes,
|
|
41
|
+
ListField,
|
|
42
|
+
Serializable,
|
|
43
|
+
StringField,
|
|
44
|
+
TupleField,
|
|
45
|
+
)
|
|
46
|
+
from ..utils import on_deserialize_shape, on_serialize_shape, skip_na_call
|
|
47
|
+
from .utils import fetch_corner_data, get_chunk_slices
|
|
48
|
+
|
|
49
|
+
logger = logging.getLogger(__name__)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class TensorOrder(Enum):
|
|
53
|
+
# C order
|
|
54
|
+
C_ORDER = "C"
|
|
55
|
+
# Fortran order
|
|
56
|
+
F_ORDER = "F"
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class TensorChunkData(ChunkData):
|
|
60
|
+
__slots__ = ()
|
|
61
|
+
_no_copy_attrs_ = ChunkData._no_copy_attrs_ | {"dtype"}
|
|
62
|
+
type_name = "Tensor"
|
|
63
|
+
|
|
64
|
+
# required fields
|
|
65
|
+
_shape = TupleField(
|
|
66
|
+
"shape",
|
|
67
|
+
FieldTypes.int64,
|
|
68
|
+
on_serialize=on_serialize_shape,
|
|
69
|
+
on_deserialize=on_deserialize_shape,
|
|
70
|
+
)
|
|
71
|
+
_order = EnumField("order", TensorOrder, FieldTypes.string)
|
|
72
|
+
# optional fields
|
|
73
|
+
_dtype = DataTypeField("dtype")
|
|
74
|
+
|
|
75
|
+
def __init__(self, op=None, index=None, shape=None, dtype=None, order=None, **kw):
|
|
76
|
+
if isinstance(order, str):
|
|
77
|
+
order = getattr(TensorOrder, order)
|
|
78
|
+
super().__init__(
|
|
79
|
+
_op=op, _index=index, _shape=shape, _dtype=dtype, _order=order, **kw
|
|
80
|
+
)
|
|
81
|
+
if self.order is None and self.op is not None:
|
|
82
|
+
if len(self.inputs) == 0:
|
|
83
|
+
self._order = TensorOrder.C_ORDER
|
|
84
|
+
elif all(
|
|
85
|
+
hasattr(inp, "order") and inp.order == TensorOrder.F_ORDER
|
|
86
|
+
for inp in self.inputs
|
|
87
|
+
):
|
|
88
|
+
self._order = TensorOrder.F_ORDER
|
|
89
|
+
else:
|
|
90
|
+
self._order = TensorOrder.C_ORDER
|
|
91
|
+
|
|
92
|
+
@property
|
|
93
|
+
def params(self) -> Dict[str, Any]:
|
|
94
|
+
# params return the properties which useful to rebuild a new chunk
|
|
95
|
+
return {
|
|
96
|
+
"shape": self.shape,
|
|
97
|
+
"dtype": self.dtype,
|
|
98
|
+
"order": self.order,
|
|
99
|
+
"index": self.index,
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
@params.setter
|
|
103
|
+
def params(self, new_params: Dict[str, Any]):
|
|
104
|
+
params = new_params.copy()
|
|
105
|
+
params.pop("index", None) # index not needed to update
|
|
106
|
+
new_shape = params.pop("shape", None)
|
|
107
|
+
if new_shape is not None:
|
|
108
|
+
self._shape = new_shape
|
|
109
|
+
dtype = params.pop("dtype", None)
|
|
110
|
+
if dtype is not None:
|
|
111
|
+
self._dtype = dtype
|
|
112
|
+
order = params.pop("order", None)
|
|
113
|
+
if order is not None:
|
|
114
|
+
self._order = order
|
|
115
|
+
if params: # pragma: no cover
|
|
116
|
+
raise TypeError(f"Unknown params: {list(params)}")
|
|
117
|
+
|
|
118
|
+
@classmethod
|
|
119
|
+
def get_params_from_data(cls, data: np.ndarray) -> Dict[str, Any]:
|
|
120
|
+
from .array_utils import is_cupy
|
|
121
|
+
|
|
122
|
+
if not is_cupy(data):
|
|
123
|
+
data = np.asarray(data)
|
|
124
|
+
order = (
|
|
125
|
+
TensorOrder.C_ORDER if data.flags["C_CONTIGUOUS"] else TensorOrder.F_ORDER
|
|
126
|
+
)
|
|
127
|
+
return {"shape": data.shape, "dtype": data.dtype, "order": order}
|
|
128
|
+
|
|
129
|
+
def __len__(self):
|
|
130
|
+
try:
|
|
131
|
+
return self.shape[0]
|
|
132
|
+
except IndexError:
|
|
133
|
+
if is_build_mode():
|
|
134
|
+
return 0
|
|
135
|
+
raise TypeError("len() of unsized object")
|
|
136
|
+
|
|
137
|
+
@property
|
|
138
|
+
def shape(self):
|
|
139
|
+
return getattr(self, "_shape", None)
|
|
140
|
+
|
|
141
|
+
@property
|
|
142
|
+
def ndim(self):
|
|
143
|
+
return len(self.shape)
|
|
144
|
+
|
|
145
|
+
@property
|
|
146
|
+
def size(self):
|
|
147
|
+
return np.prod(self.shape).item()
|
|
148
|
+
|
|
149
|
+
@property
|
|
150
|
+
def dtype(self):
|
|
151
|
+
return getattr(self, "_dtype", None) or self.op.dtype
|
|
152
|
+
|
|
153
|
+
@property
|
|
154
|
+
def order(self):
|
|
155
|
+
return getattr(self, "_order", None)
|
|
156
|
+
|
|
157
|
+
@property
|
|
158
|
+
def nbytes(self):
|
|
159
|
+
return np.prod(self.shape) * self.dtype.itemsize
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
class TensorChunk(Chunk):
|
|
163
|
+
__slots__ = ()
|
|
164
|
+
_allow_data_type_ = (TensorChunkData,)
|
|
165
|
+
type_name = "Tensor"
|
|
166
|
+
|
|
167
|
+
def __len__(self):
|
|
168
|
+
return len(self._data)
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
class TensorData(HasShapeTileableData, _ExecuteAndFetchMixin):
|
|
172
|
+
__slots__ = ()
|
|
173
|
+
type_name = "Tensor"
|
|
174
|
+
|
|
175
|
+
# required fields
|
|
176
|
+
_order = StringField(
|
|
177
|
+
"order", on_serialize=attrgetter("value"), on_deserialize=TensorOrder
|
|
178
|
+
)
|
|
179
|
+
# optional fields
|
|
180
|
+
_dtype = DataTypeField("dtype")
|
|
181
|
+
_chunks = ListField(
|
|
182
|
+
"chunks",
|
|
183
|
+
FieldTypes.reference(TensorChunkData),
|
|
184
|
+
on_serialize=skip_na_call(lambda x: [it.data for it in x]),
|
|
185
|
+
on_deserialize=skip_na_call(lambda x: [TensorChunk(it) for it in x]),
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
def __init__(
|
|
189
|
+
self,
|
|
190
|
+
op=None,
|
|
191
|
+
shape=None,
|
|
192
|
+
dtype=None,
|
|
193
|
+
order=None,
|
|
194
|
+
**kw,
|
|
195
|
+
):
|
|
196
|
+
if isinstance(order, str):
|
|
197
|
+
order = getattr(TensorOrder, order)
|
|
198
|
+
super().__init__(
|
|
199
|
+
_op=op,
|
|
200
|
+
_shape=shape,
|
|
201
|
+
_dtype=dtype,
|
|
202
|
+
_order=order,
|
|
203
|
+
**kw,
|
|
204
|
+
)
|
|
205
|
+
if self.order is None and self.op is not None:
|
|
206
|
+
if len(self.inputs) == 0:
|
|
207
|
+
self._order = TensorOrder.C_ORDER
|
|
208
|
+
elif all(
|
|
209
|
+
hasattr(inp, "order") and inp.order == TensorOrder.F_ORDER
|
|
210
|
+
for inp in self.inputs
|
|
211
|
+
):
|
|
212
|
+
self._order = TensorOrder.F_ORDER
|
|
213
|
+
else:
|
|
214
|
+
self._order = TensorOrder.C_ORDER
|
|
215
|
+
|
|
216
|
+
def _to_str(self, representation=False):
|
|
217
|
+
if is_build_mode() or len(self._executed_sessions) == 0:
|
|
218
|
+
# in build mode, or not executed, just return representation
|
|
219
|
+
if representation:
|
|
220
|
+
return f"Tensor <op={type(self._op).__name__}, shape={self._shape}, key={self._key}>"
|
|
221
|
+
else:
|
|
222
|
+
return f"Tensor(op={type(self._op).__name__}, shape={self._shape})"
|
|
223
|
+
else:
|
|
224
|
+
print_options = np.get_printoptions()
|
|
225
|
+
threshold = print_options["threshold"]
|
|
226
|
+
|
|
227
|
+
corner_data = fetch_corner_data(self, session=self._executed_sessions[-1])
|
|
228
|
+
# if less than default threshold, just set it as default,
|
|
229
|
+
# if not, set to corner_data.size - 1 make sure ... exists in repr
|
|
230
|
+
threshold = threshold if self.size <= threshold else corner_data.size - 1
|
|
231
|
+
with np.printoptions(threshold=threshold):
|
|
232
|
+
corner_str = repr(corner_data) if representation else str(corner_data)
|
|
233
|
+
return corner_str
|
|
234
|
+
|
|
235
|
+
def __str__(self):
|
|
236
|
+
return self._to_str(representation=False)
|
|
237
|
+
|
|
238
|
+
def __repr__(self):
|
|
239
|
+
return self._to_str(representation=True)
|
|
240
|
+
|
|
241
|
+
@property
|
|
242
|
+
def params(self):
|
|
243
|
+
# params return the properties which useful to rebuild a new tileable object
|
|
244
|
+
return {"shape": self.shape, "dtype": self.dtype, "order": self.order}
|
|
245
|
+
|
|
246
|
+
@params.setter
|
|
247
|
+
def params(self, new_params: Dict[str, Any]):
|
|
248
|
+
params = new_params.copy()
|
|
249
|
+
shape = params.pop("shape", None)
|
|
250
|
+
if shape is not None:
|
|
251
|
+
self._shape = shape
|
|
252
|
+
dtype = params.pop("dtype", None)
|
|
253
|
+
if dtype is not None:
|
|
254
|
+
self._dtype = dtype
|
|
255
|
+
order = params.pop("order", None)
|
|
256
|
+
if order is not None:
|
|
257
|
+
self._order = order
|
|
258
|
+
if params: # pragma: no cover
|
|
259
|
+
raise TypeError(f"Unknown params: {list(params)}")
|
|
260
|
+
|
|
261
|
+
def refresh_params(self):
|
|
262
|
+
refresh_tileable_shape(self)
|
|
263
|
+
if self._dtype is None:
|
|
264
|
+
self._dtype = self.chunks[0].dtype
|
|
265
|
+
|
|
266
|
+
@property
|
|
267
|
+
def flags(self):
|
|
268
|
+
c_order = True if self.ndim <= 1 else self.order == TensorOrder.C_ORDER
|
|
269
|
+
f_order = True if self.ndim <= 1 else self.order == TensorOrder.F_ORDER
|
|
270
|
+
return {"C_CONTIGUOUS": c_order, "F_CONTIGUOUS": f_order}
|
|
271
|
+
|
|
272
|
+
@property
|
|
273
|
+
def real(self):
|
|
274
|
+
from .arithmetic import real
|
|
275
|
+
|
|
276
|
+
return real(self)
|
|
277
|
+
|
|
278
|
+
@property
|
|
279
|
+
def imag(self):
|
|
280
|
+
from .arithmetic import imag
|
|
281
|
+
|
|
282
|
+
return imag(self)
|
|
283
|
+
|
|
284
|
+
@property
|
|
285
|
+
def dtype(self):
|
|
286
|
+
return getattr(self, "_dtype", None) or self.op.dtype
|
|
287
|
+
|
|
288
|
+
@property
|
|
289
|
+
def order(self):
|
|
290
|
+
return getattr(self, "_order", None)
|
|
291
|
+
|
|
292
|
+
@property
|
|
293
|
+
def nbytes(self):
|
|
294
|
+
return np.prod(self.shape) * self.dtype.itemsize
|
|
295
|
+
|
|
296
|
+
def get_chunk_slices(self, idx):
|
|
297
|
+
return get_chunk_slices(self.nsplits, idx)
|
|
298
|
+
|
|
299
|
+
def is_scalar(self):
|
|
300
|
+
return self.ndim == 0
|
|
301
|
+
|
|
302
|
+
isscalar = is_scalar
|
|
303
|
+
|
|
304
|
+
def tosparse(self, missing=None):
|
|
305
|
+
if self.issparse():
|
|
306
|
+
return self
|
|
307
|
+
|
|
308
|
+
from .datasource import fromdense
|
|
309
|
+
|
|
310
|
+
return fromdense(self, missing=missing)
|
|
311
|
+
|
|
312
|
+
def todense(self, fill_value=None):
|
|
313
|
+
if not self.issparse():
|
|
314
|
+
return self
|
|
315
|
+
|
|
316
|
+
from .datasource import fromsparse
|
|
317
|
+
|
|
318
|
+
return fromsparse(self, fill_value=fill_value)
|
|
319
|
+
|
|
320
|
+
def transpose(self, *axes):
|
|
321
|
+
from .base import transpose
|
|
322
|
+
|
|
323
|
+
if len(axes) == 1 and isinstance(axes[0], Iterable):
|
|
324
|
+
axes = axes[0]
|
|
325
|
+
|
|
326
|
+
return transpose(self, axes)
|
|
327
|
+
|
|
328
|
+
@property
|
|
329
|
+
def T(self):
|
|
330
|
+
return self.transpose()
|
|
331
|
+
|
|
332
|
+
def reshape(self, shape, *shapes, **kw):
|
|
333
|
+
from .reshape import reshape
|
|
334
|
+
|
|
335
|
+
order = kw.pop("order", "C")
|
|
336
|
+
if kw:
|
|
337
|
+
raise TypeError(
|
|
338
|
+
f"'{next(iter(kw))}' is an invalid keyword argument for this function"
|
|
339
|
+
)
|
|
340
|
+
|
|
341
|
+
if isinstance(shape, Iterable):
|
|
342
|
+
shape = tuple(shape)
|
|
343
|
+
else:
|
|
344
|
+
shape = (shape,)
|
|
345
|
+
shape += shapes
|
|
346
|
+
|
|
347
|
+
return reshape(self, shape, order=order)
|
|
348
|
+
|
|
349
|
+
def totiledb(self, uri, ctx=None, key=None, timestamp=None):
|
|
350
|
+
from .datastore import totiledb
|
|
351
|
+
|
|
352
|
+
return totiledb(uri, self, ctx=ctx, key=key, timestamp=timestamp)
|
|
353
|
+
|
|
354
|
+
@staticmethod
|
|
355
|
+
def from_dataframe(in_df):
|
|
356
|
+
from .datasource import from_dataframe
|
|
357
|
+
|
|
358
|
+
return from_dataframe(in_df)
|
|
359
|
+
|
|
360
|
+
def to_dataframe(self, *args, **kwargs):
|
|
361
|
+
from ..dataframe.datasource.from_tensor import dataframe_from_tensor
|
|
362
|
+
|
|
363
|
+
return dataframe_from_tensor(self, *args, **kwargs)
|
|
364
|
+
|
|
365
|
+
@property
|
|
366
|
+
def flat(self):
|
|
367
|
+
return flatiter(self)
|
|
368
|
+
|
|
369
|
+
def to_numpy(self, session=None, **kw):
|
|
370
|
+
return self._execute_and_fetch(session=session, **kw)
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
class Tensor(HasShapeTileable):
|
|
374
|
+
__slots__ = ()
|
|
375
|
+
_allow_data_type_ = (TensorData,)
|
|
376
|
+
type_name = "Tensor"
|
|
377
|
+
|
|
378
|
+
def __len__(self):
|
|
379
|
+
return len(self._data)
|
|
380
|
+
|
|
381
|
+
@property
|
|
382
|
+
def shape(self):
|
|
383
|
+
return self._data.shape
|
|
384
|
+
|
|
385
|
+
@shape.setter
|
|
386
|
+
def shape(self, new_shape):
|
|
387
|
+
self._data = self._data.reshape(new_shape).data
|
|
388
|
+
|
|
389
|
+
def _update_shape(self, new_shape):
|
|
390
|
+
self._data._update_shape(new_shape)
|
|
391
|
+
|
|
392
|
+
@property
|
|
393
|
+
def real(self):
|
|
394
|
+
return self.data.real
|
|
395
|
+
|
|
396
|
+
@real.setter
|
|
397
|
+
def real(self, new_real):
|
|
398
|
+
from .arithmetic.setreal import set_real
|
|
399
|
+
|
|
400
|
+
self._data = set_real(self._data, new_real).data
|
|
401
|
+
|
|
402
|
+
@property
|
|
403
|
+
def imag(self):
|
|
404
|
+
return self.data.imag
|
|
405
|
+
|
|
406
|
+
@imag.setter
|
|
407
|
+
def imag(self, new_imag):
|
|
408
|
+
from .arithmetic.setimag import set_imag
|
|
409
|
+
|
|
410
|
+
self._data = set_imag(self._data, new_imag).data
|
|
411
|
+
|
|
412
|
+
def __array__(self, dtype=None):
|
|
413
|
+
return np.asarray(self.to_numpy(), dtype=dtype)
|
|
414
|
+
|
|
415
|
+
def __array_function__(self, func, types, args, kwargs):
|
|
416
|
+
from .. import tensor as module
|
|
417
|
+
|
|
418
|
+
for submodule in func.__module__.split(".")[1:]:
|
|
419
|
+
try:
|
|
420
|
+
module = getattr(module, submodule)
|
|
421
|
+
except AttributeError:
|
|
422
|
+
return NotImplemented
|
|
423
|
+
if not hasattr(module, func.__name__):
|
|
424
|
+
return NotImplemented
|
|
425
|
+
maxframe_func = getattr(module, func.__name__)
|
|
426
|
+
if maxframe_func is func:
|
|
427
|
+
# avoid Numpy func
|
|
428
|
+
return NotImplemented
|
|
429
|
+
return maxframe_func(*args, **kwargs)
|
|
430
|
+
|
|
431
|
+
def view(self):
|
|
432
|
+
return self._view()
|
|
433
|
+
|
|
434
|
+
@property
|
|
435
|
+
def ndim(self):
|
|
436
|
+
"""
|
|
437
|
+
Number of array dimensions.
|
|
438
|
+
|
|
439
|
+
Examples
|
|
440
|
+
--------
|
|
441
|
+
>>> import maxframe.tensor as mt
|
|
442
|
+
>>> x = mt.array([1, 2, 3])
|
|
443
|
+
>>> x.ndim
|
|
444
|
+
1
|
|
445
|
+
>>> y = mt.zeros((2, 3, 4))
|
|
446
|
+
>>> y.ndim
|
|
447
|
+
3
|
|
448
|
+
"""
|
|
449
|
+
return super().ndim
|
|
450
|
+
|
|
451
|
+
def transpose(self, *axes):
|
|
452
|
+
"""
|
|
453
|
+
Returns a view of the tensor with axes transposed.
|
|
454
|
+
|
|
455
|
+
For a 1-D tensor, this has no effect. (To change between column and
|
|
456
|
+
row vectors, first cast the 1-D tensor into a matrix object.)
|
|
457
|
+
For a 2-D tensor, this is the usual matrix transpose.
|
|
458
|
+
For an n-D tensor, if axes are given, their order indicates how the
|
|
459
|
+
axes are permuted (see Examples). If axes are not provided and
|
|
460
|
+
``a.shape = (i[0], i[1], ... i[n-2], i[n-1])``, then
|
|
461
|
+
``a.transpose().shape = (i[n-1], i[n-2], ... i[1], i[0])``.
|
|
462
|
+
|
|
463
|
+
Parameters
|
|
464
|
+
----------
|
|
465
|
+
axes : None, tuple of ints, or `n` ints
|
|
466
|
+
|
|
467
|
+
* None or no argument: reverses the order of the axes.
|
|
468
|
+
|
|
469
|
+
* tuple of ints: `i` in the `j`-th place in the tuple means `a`'s
|
|
470
|
+
`i`-th axis becomes `a.transpose()`'s `j`-th axis.
|
|
471
|
+
|
|
472
|
+
* `n` ints: same as an n-tuple of the same ints (this form is
|
|
473
|
+
intended simply as a "convenience" alternative to the tuple form)
|
|
474
|
+
|
|
475
|
+
Returns
|
|
476
|
+
-------
|
|
477
|
+
out : Tensor
|
|
478
|
+
View of `a`, with axes suitably permuted.
|
|
479
|
+
|
|
480
|
+
See Also
|
|
481
|
+
--------
|
|
482
|
+
Tensor.T : Tensor property returning the tensor transposed.
|
|
483
|
+
|
|
484
|
+
Examples
|
|
485
|
+
--------
|
|
486
|
+
>>> import maxframe.tensor as mt
|
|
487
|
+
|
|
488
|
+
>>> a = mt.array([[1, 2], [3, 4]])
|
|
489
|
+
>>> a.execute()
|
|
490
|
+
array([[1, 2],
|
|
491
|
+
[3, 4]])
|
|
492
|
+
>>> a.transpose().execute()
|
|
493
|
+
array([[1, 3],
|
|
494
|
+
[2, 4]])
|
|
495
|
+
>>> a.transpose((1, 0))
|
|
496
|
+
array([[1, 3],
|
|
497
|
+
[2, 4]])
|
|
498
|
+
>>> a.transpose(1, 0).execute()
|
|
499
|
+
array([[1, 3],
|
|
500
|
+
[2, 4]])
|
|
501
|
+
"""
|
|
502
|
+
return self._data.transpose(*axes)
|
|
503
|
+
|
|
504
|
+
@property
|
|
505
|
+
def T(self):
|
|
506
|
+
"""
|
|
507
|
+
Same as self.transpose(), except that self is returned if
|
|
508
|
+
self.ndim < 2.
|
|
509
|
+
|
|
510
|
+
Examples
|
|
511
|
+
--------
|
|
512
|
+
>>> import maxframe.tensor as mt
|
|
513
|
+
|
|
514
|
+
>>> x = mt.array([[1.,2.],[3.,4.]])
|
|
515
|
+
>>> x.execute()
|
|
516
|
+
array([[ 1., 2.],
|
|
517
|
+
[ 3., 4.]])
|
|
518
|
+
>>> x.T.execute()
|
|
519
|
+
array([[ 1., 3.],
|
|
520
|
+
[ 2., 4.]])
|
|
521
|
+
>>> x = mt.array([1.,2.,3.,4.])
|
|
522
|
+
>>> x.execute()
|
|
523
|
+
array([ 1., 2., 3., 4.])
|
|
524
|
+
>>> x.T.execute()
|
|
525
|
+
array([ 1., 2., 3., 4.])
|
|
526
|
+
"""
|
|
527
|
+
return self._data.T
|
|
528
|
+
|
|
529
|
+
def totiledb(self, uri, ctx=None, key=None, timestamp=None):
|
|
530
|
+
return self._data.totiledb(uri, ctx=ctx, key=key, timestamp=timestamp)
|
|
531
|
+
|
|
532
|
+
def copy(self, order="C"):
|
|
533
|
+
return super().copy().astype(self.dtype, order=order, copy=False)
|
|
534
|
+
|
|
535
|
+
def sort(self, axis=-1, kind=None, parallel_kind=None, psrs_kinds=None, order=None):
|
|
536
|
+
"""
|
|
537
|
+
Sort a tensor, in-place.
|
|
538
|
+
|
|
539
|
+
Parameters
|
|
540
|
+
----------
|
|
541
|
+
axis : int, optional
|
|
542
|
+
Axis along which to sort. Default is -1, which means sort along the
|
|
543
|
+
last axis.
|
|
544
|
+
kind : {'quicksort', 'mergesort', 'heapsort', 'stable'}, optional
|
|
545
|
+
Sorting algorithm. Default is 'quicksort'.
|
|
546
|
+
parallel_kind: {'PSRS'}, optional
|
|
547
|
+
Parallel sorting algorithm, for the details, refer to:
|
|
548
|
+
http://csweb.cs.wfu.edu/bigiron/LittleFE-PSRS/build/html/PSRSalgorithm.html
|
|
549
|
+
psrs_kinds: list with 3 elements, optional
|
|
550
|
+
Sorting algorithms during PSRS algorithm.
|
|
551
|
+
order : str or list of str, optional
|
|
552
|
+
When `a` is a tensor with fields defined, this argument specifies
|
|
553
|
+
which fields to compare first, second, etc. A single field can
|
|
554
|
+
be specified as a string, and not all fields need be specified,
|
|
555
|
+
but unspecified fields will still be used, in the order in which
|
|
556
|
+
they come up in the dtype, to break ties.
|
|
557
|
+
|
|
558
|
+
See Also
|
|
559
|
+
--------
|
|
560
|
+
numpy.sort : Return a sorted copy of a tensor.
|
|
561
|
+
argsort : Indirect sort.
|
|
562
|
+
lexsort : Indirect stable sort on multiple keys.
|
|
563
|
+
searchsorted : Find elements in sorted tensor.
|
|
564
|
+
partition: Partial sort.
|
|
565
|
+
|
|
566
|
+
Notes
|
|
567
|
+
-----
|
|
568
|
+
See ``sort`` for notes on the different sorting algorithms.
|
|
569
|
+
|
|
570
|
+
Examples
|
|
571
|
+
--------
|
|
572
|
+
>>> import maxframe.tensor as mt
|
|
573
|
+
>>> a = mt.array([[1,4], [3,1]])
|
|
574
|
+
>>> a.sort(axis=1)
|
|
575
|
+
>>> a.execute()
|
|
576
|
+
array([[1, 4],
|
|
577
|
+
[1, 3]])
|
|
578
|
+
>>> a.sort(axis=0)
|
|
579
|
+
>>> a.execute()
|
|
580
|
+
array([[1, 3],
|
|
581
|
+
[1, 4]])
|
|
582
|
+
|
|
583
|
+
Use the `order` keyword to specify a field to use when sorting a
|
|
584
|
+
structured tensor:
|
|
585
|
+
|
|
586
|
+
>>> a = mt.array([('a', 2), ('c', 1)], dtype=[('x', 'S1'), ('y', int)])
|
|
587
|
+
>>> a.sort(order='y')
|
|
588
|
+
>>> a.execute()
|
|
589
|
+
array([('c', 1), ('a', 2)],
|
|
590
|
+
dtype=[('x', '|S1'), ('y', '<i4')])
|
|
591
|
+
"""
|
|
592
|
+
from .base import sort
|
|
593
|
+
|
|
594
|
+
self._data = sort(
|
|
595
|
+
self,
|
|
596
|
+
axis=axis,
|
|
597
|
+
kind=kind,
|
|
598
|
+
parallel_kind=parallel_kind,
|
|
599
|
+
psrs_kinds=psrs_kinds,
|
|
600
|
+
order=order,
|
|
601
|
+
).data
|
|
602
|
+
|
|
603
|
+
def partition(self, kth, axis=-1, kind="introselect", order=None, **kw):
|
|
604
|
+
"""
|
|
605
|
+
Rearranges the elements in the tensor in such a way that the value of the
|
|
606
|
+
element in kth position is in the position it would be in a sorted tensor.
|
|
607
|
+
All elements smaller than the kth element are moved before this element and
|
|
608
|
+
all equal or greater are moved behind it. The ordering of the elements in
|
|
609
|
+
the two partitions is undefined.
|
|
610
|
+
|
|
611
|
+
Parameters
|
|
612
|
+
----------
|
|
613
|
+
kth : int or sequence of ints
|
|
614
|
+
Element index to partition by. The kth element value will be in its
|
|
615
|
+
final sorted position and all smaller elements will be moved before it
|
|
616
|
+
and all equal or greater elements behind it.
|
|
617
|
+
The order of all elements in the partitions is undefined.
|
|
618
|
+
If provided with a sequence of kth it will partition all elements
|
|
619
|
+
indexed by kth of them into their sorted position at once.
|
|
620
|
+
axis : int, optional
|
|
621
|
+
Axis along which to sort. Default is -1, which means sort along the
|
|
622
|
+
last axis.
|
|
623
|
+
kind : {'introselect'}, optional
|
|
624
|
+
Selection algorithm. Default is 'introselect'.
|
|
625
|
+
order : str or list of str, optional
|
|
626
|
+
When `a` is a tensor with fields defined, this argument specifies
|
|
627
|
+
which fields to compare first, second, etc. A single field can
|
|
628
|
+
be specified as a string, and not all fields need to be specified,
|
|
629
|
+
but unspecified fields will still be used, in the order in which
|
|
630
|
+
they come up in the dtype, to break ties.
|
|
631
|
+
|
|
632
|
+
See Also
|
|
633
|
+
--------
|
|
634
|
+
mt.partition : Return a partitioned copy of an tensor.
|
|
635
|
+
argpartition : Indirect partition.
|
|
636
|
+
sort : Full sort.
|
|
637
|
+
|
|
638
|
+
Notes
|
|
639
|
+
-----
|
|
640
|
+
See ``mt.partition`` for notes on the different algorithms.
|
|
641
|
+
|
|
642
|
+
Examples
|
|
643
|
+
--------
|
|
644
|
+
>>> import maxframe.tensor as mt
|
|
645
|
+
>>> a = mt.array([3, 4, 2, 1])
|
|
646
|
+
>>> a.partition(3)
|
|
647
|
+
>>> a.execute()
|
|
648
|
+
array([2, 1, 3, 4])
|
|
649
|
+
|
|
650
|
+
>>> a.partition((1, 3))
|
|
651
|
+
>>> a.execute()
|
|
652
|
+
array([1, 2, 3, 4])
|
|
653
|
+
"""
|
|
654
|
+
from .base import partition
|
|
655
|
+
|
|
656
|
+
self._data = partition(self, kth, axis=axis, kind=kind, order=order, **kw).data
|
|
657
|
+
|
|
658
|
+
@property
|
|
659
|
+
def flat(self):
|
|
660
|
+
"""
|
|
661
|
+
Flat iterator object to iterate over arrays.
|
|
662
|
+
|
|
663
|
+
A `flatiter` iterator is returned by ``x.flat`` for any tensor `x`.
|
|
664
|
+
It allows iterating over the tensor as if it were a 1-D array,
|
|
665
|
+
either in a for-loop or by calling its `next` method.
|
|
666
|
+
|
|
667
|
+
Iteration is done in row-major, C-style order (the last
|
|
668
|
+
index varying the fastest). The iterator can also be indexed using
|
|
669
|
+
basic slicing or advanced indexing.
|
|
670
|
+
|
|
671
|
+
See Also
|
|
672
|
+
--------
|
|
673
|
+
Tensor.flat : Return a flat iterator over a tensor.
|
|
674
|
+
Tensor.flatten : Returns a flattened copy of a tensor.
|
|
675
|
+
|
|
676
|
+
Examples
|
|
677
|
+
--------
|
|
678
|
+
>>> import maxframe.tensor as mt
|
|
679
|
+
|
|
680
|
+
>>> x = mt.arange(6).reshape(2, 3)
|
|
681
|
+
>>> fl = x.flat
|
|
682
|
+
|
|
683
|
+
>>> fl[2:4].execute()
|
|
684
|
+
array([2, 3])
|
|
685
|
+
"""
|
|
686
|
+
return self._data.flat
|
|
687
|
+
|
|
688
|
+
def from_dataframe(self, in_df):
|
|
689
|
+
return self._data.from_dataframe(in_df)
|
|
690
|
+
|
|
691
|
+
def to_dataframe(self, *args, **kwargs):
|
|
692
|
+
return self._data.to_dataframe(*args, **kwargs)
|
|
693
|
+
|
|
694
|
+
def to_numpy(self, session=None, **kw):
|
|
695
|
+
return self._data.to_numpy(session, **kw)
|
|
696
|
+
|
|
697
|
+
|
|
698
|
+
SparseTensor = Tensor
|
|
699
|
+
|
|
700
|
+
|
|
701
|
+
class flatiter(object):
|
|
702
|
+
def __init__(self, tensor):
|
|
703
|
+
# flatten creates a copy
|
|
704
|
+
self._flatten_tensor = tensor.flatten()
|
|
705
|
+
# ravel creates a view
|
|
706
|
+
self._ravel_tensor = tensor.ravel()
|
|
707
|
+
|
|
708
|
+
def __getitem__(self, item):
|
|
709
|
+
# a.flat[item] create a copy
|
|
710
|
+
return self._flatten_tensor[item]
|
|
711
|
+
|
|
712
|
+
def __setitem__(self, key, value):
|
|
713
|
+
# a.flat[item] = value will apply changes to original tensor
|
|
714
|
+
self._ravel_tensor[key] = value
|
|
715
|
+
|
|
716
|
+
|
|
717
|
+
class Indexes(Serializable):
|
|
718
|
+
indexes = AnyField("indexes")
|
|
719
|
+
|
|
720
|
+
|
|
721
|
+
TENSOR_TYPE = (Tensor, TensorData)
|
|
722
|
+
|
|
723
|
+
register_output_types(OutputType.tensor, TENSOR_TYPE)
|
|
724
|
+
register_output_types(OutputType.scalar, TENSOR_TYPE)
|