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
maxframe/conftest.py
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
import faulthandler
|
|
16
|
+
import os
|
|
17
|
+
from configparser import ConfigParser, NoOptionError
|
|
18
|
+
|
|
19
|
+
import pytest
|
|
20
|
+
from odps import ODPS
|
|
21
|
+
|
|
22
|
+
faulthandler.enable(all_threads=True)
|
|
23
|
+
_test_conf_file_name = os.path.join(
|
|
24
|
+
os.path.dirname(os.path.abspath(__file__)), "tests", "test.conf"
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@pytest.fixture(scope="session")
|
|
29
|
+
def test_config():
|
|
30
|
+
config = ConfigParser()
|
|
31
|
+
config.read(_test_conf_file_name)
|
|
32
|
+
return config
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@pytest.fixture(scope="session", autouse=True)
|
|
36
|
+
def odps_envs(test_config):
|
|
37
|
+
access_id = test_config.get("odps", "access_id")
|
|
38
|
+
secret_access_key = test_config.get("odps", "secret_access_key")
|
|
39
|
+
project = test_config.get("odps", "project")
|
|
40
|
+
endpoint = test_config.get("odps", "endpoint")
|
|
41
|
+
try:
|
|
42
|
+
tunnel_endpoint = test_config.get("odps", "tunnel_endpoint")
|
|
43
|
+
except NoOptionError:
|
|
44
|
+
tunnel_endpoint = None
|
|
45
|
+
|
|
46
|
+
entry = ODPS(
|
|
47
|
+
access_id, secret_access_key, project, endpoint, overwrite_global=False
|
|
48
|
+
)
|
|
49
|
+
policy = {
|
|
50
|
+
"Version": "1",
|
|
51
|
+
"Statement": [
|
|
52
|
+
{"Action": ["odps:*"], "Resource": "acs:odps:*:*", "Effect": "Allow"}
|
|
53
|
+
],
|
|
54
|
+
}
|
|
55
|
+
token = entry.get_project().generate_auth_token(policy, "bearer", 5)
|
|
56
|
+
|
|
57
|
+
os.environ["ODPS_BEARER_TOKEN"] = token
|
|
58
|
+
os.environ["ODPS_PROJECT_NAME"] = project
|
|
59
|
+
os.environ["ODPS_ENDPOINT"] = endpoint
|
|
60
|
+
if tunnel_endpoint:
|
|
61
|
+
os.environ["ODPS_TUNNEL_ENDPOINT"] = tunnel_endpoint
|
|
62
|
+
|
|
63
|
+
try:
|
|
64
|
+
yield
|
|
65
|
+
finally:
|
|
66
|
+
os.environ.pop("ODPS_BEARER_TOKEN", None)
|
|
67
|
+
os.environ.pop("ODPS_PROJECT_NAME", None)
|
|
68
|
+
os.environ.pop("ODPS_ENDPOINT", None)
|
|
69
|
+
os.environ.pop("ODPS_TUNNEL_ENDPOINT", None)
|
|
70
|
+
|
|
71
|
+
from .tests.utils import _test_tables_to_drop
|
|
72
|
+
|
|
73
|
+
for table_name in _test_tables_to_drop:
|
|
74
|
+
try:
|
|
75
|
+
entry.delete_table(table_name, wait=False)
|
|
76
|
+
except:
|
|
77
|
+
pass
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
@pytest.fixture
|
|
81
|
+
def oss_config():
|
|
82
|
+
config = ConfigParser()
|
|
83
|
+
config.read(_test_conf_file_name)
|
|
84
|
+
|
|
85
|
+
try:
|
|
86
|
+
oss_access_id = config.get("oss", "access_id")
|
|
87
|
+
oss_secret_access_key = config.get("oss", "secret_access_key")
|
|
88
|
+
oss_bucket_name = config.get("oss", "bucket_name")
|
|
89
|
+
oss_endpoint = config.get("oss", "endpoint")
|
|
90
|
+
|
|
91
|
+
config.oss_config = (
|
|
92
|
+
oss_access_id,
|
|
93
|
+
oss_secret_access_key,
|
|
94
|
+
oss_bucket_name,
|
|
95
|
+
oss_endpoint,
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
import oss2
|
|
99
|
+
|
|
100
|
+
auth = oss2.Auth(oss_access_id, oss_secret_access_key)
|
|
101
|
+
config.oss_bucket = oss2.Bucket(auth, oss_endpoint, oss_bucket_name)
|
|
102
|
+
return config
|
|
103
|
+
except (ConfigParser.NoSectionError, ConfigParser.NoOptionError, ImportError):
|
|
104
|
+
return None
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
@pytest.fixture(autouse=True)
|
|
108
|
+
def apply_engine_selection(request):
|
|
109
|
+
try:
|
|
110
|
+
from maxframe_framedriver.services.analyzer import DagAnalyzer
|
|
111
|
+
except ImportError:
|
|
112
|
+
DagAnalyzer = None
|
|
113
|
+
try:
|
|
114
|
+
marks = list(request.node.iter_markers())
|
|
115
|
+
if request.node.parent:
|
|
116
|
+
marks.extend(request.node.parent.iter_markers())
|
|
117
|
+
marks = [m for m in marks if m.name == "maxframe_engine"]
|
|
118
|
+
|
|
119
|
+
if DagAnalyzer:
|
|
120
|
+
engines = set()
|
|
121
|
+
for mark in marks:
|
|
122
|
+
engines.update(mark.args[0])
|
|
123
|
+
DagAnalyzer._enabled_engines = set(engines)
|
|
124
|
+
yield
|
|
125
|
+
finally:
|
|
126
|
+
if DagAnalyzer:
|
|
127
|
+
DagAnalyzer._enabled_engines = set()
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
@pytest.fixture
|
|
131
|
+
def local_test_envs():
|
|
132
|
+
spe_launcher_env = "MAXFRAME_SPE_LAUNCHER"
|
|
133
|
+
old_value = os.getenv(spe_launcher_env)
|
|
134
|
+
os.environ[spe_launcher_env] = "local"
|
|
135
|
+
yield
|
|
136
|
+
if old_value is not None:
|
|
137
|
+
os.environ[spe_launcher_env] = old_value
|
|
138
|
+
else:
|
|
139
|
+
del os.environ[spe_launcher_env]
|
|
@@ -0,0 +1,65 @@
|
|
|
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
|
+
# noinspection PyUnresolvedReferences
|
|
16
|
+
from ..typing_ import ChunkType, EntityType, OperatorType, TileableType
|
|
17
|
+
from .base import ExecutionError
|
|
18
|
+
from .entity import (
|
|
19
|
+
CHUNK_TYPE,
|
|
20
|
+
ENTITY_TYPE,
|
|
21
|
+
FUSE_CHUNK_TYPE,
|
|
22
|
+
OBJECT_CHUNK_TYPE,
|
|
23
|
+
OBJECT_TYPE,
|
|
24
|
+
TILEABLE_TYPE,
|
|
25
|
+
Chunk,
|
|
26
|
+
ChunkData,
|
|
27
|
+
Entity,
|
|
28
|
+
EntityData,
|
|
29
|
+
ExecutableTuple,
|
|
30
|
+
FuseChunk,
|
|
31
|
+
FuseChunkData,
|
|
32
|
+
HasShapeTileable,
|
|
33
|
+
HasShapeTileableData,
|
|
34
|
+
NotSupportTile,
|
|
35
|
+
Object,
|
|
36
|
+
ObjectChunk,
|
|
37
|
+
ObjectChunkData,
|
|
38
|
+
ObjectData,
|
|
39
|
+
OutputType,
|
|
40
|
+
Tileable,
|
|
41
|
+
TileableData,
|
|
42
|
+
_ExecuteAndFetchMixin,
|
|
43
|
+
get_fetch_class,
|
|
44
|
+
get_output_types,
|
|
45
|
+
get_tileable_types,
|
|
46
|
+
register,
|
|
47
|
+
register_fetch_class,
|
|
48
|
+
register_output_types,
|
|
49
|
+
unregister,
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
# noinspection PyUnresolvedReferences
|
|
53
|
+
from .graph import (
|
|
54
|
+
DAG,
|
|
55
|
+
ChunkGraph,
|
|
56
|
+
ChunkGraphBuilder,
|
|
57
|
+
DirectedGraph,
|
|
58
|
+
GraphContainsCycleError,
|
|
59
|
+
GraphSerializer,
|
|
60
|
+
TileableGraph,
|
|
61
|
+
TileableGraphBuilder,
|
|
62
|
+
TileContext,
|
|
63
|
+
TileStatus,
|
|
64
|
+
)
|
|
65
|
+
from .mode import enter_mode, is_build_mode, is_eager_mode, is_kernel_mode
|
maxframe/core/base.py
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from typing import Dict, Optional, Tuple, Type
|
|
16
|
+
|
|
17
|
+
from odps.errors import ODPSError
|
|
18
|
+
|
|
19
|
+
from ..serialization.serializables import Serializable, StringField
|
|
20
|
+
from ..serialization.serializables.core import SerializableSerializer
|
|
21
|
+
from ..utils import tokenize
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class Base(Serializable):
|
|
25
|
+
_no_copy_attrs_ = {"_id"}
|
|
26
|
+
_init_update_key_ = True
|
|
27
|
+
|
|
28
|
+
_key = StringField("key", default=None)
|
|
29
|
+
_id = StringField("id")
|
|
30
|
+
|
|
31
|
+
def __init__(self, *args, **kwargs):
|
|
32
|
+
super().__init__(*args, **kwargs)
|
|
33
|
+
|
|
34
|
+
if self._init_update_key_ and (not hasattr(self, "_key") or not self._key):
|
|
35
|
+
self._update_key()
|
|
36
|
+
if not hasattr(self, "_id") or not self._id:
|
|
37
|
+
self._id = str(id(self))
|
|
38
|
+
|
|
39
|
+
@property
|
|
40
|
+
def _keys_(self):
|
|
41
|
+
cls = type(self)
|
|
42
|
+
member = "__keys_" + cls.__name__
|
|
43
|
+
try:
|
|
44
|
+
return getattr(cls, member)
|
|
45
|
+
except AttributeError:
|
|
46
|
+
slots = sorted(self._FIELDS)
|
|
47
|
+
setattr(cls, member, slots)
|
|
48
|
+
return slots
|
|
49
|
+
|
|
50
|
+
@property
|
|
51
|
+
def _copy_tags_(self):
|
|
52
|
+
cls = type(self)
|
|
53
|
+
member = f"__copy_tags_{cls.__name__}"
|
|
54
|
+
try:
|
|
55
|
+
return getattr(cls, member)
|
|
56
|
+
except AttributeError:
|
|
57
|
+
slots = sorted(
|
|
58
|
+
f.name for k, f in self._FIELDS.items() if k not in self._no_copy_attrs_
|
|
59
|
+
)
|
|
60
|
+
setattr(cls, member, slots)
|
|
61
|
+
return slots
|
|
62
|
+
|
|
63
|
+
@property
|
|
64
|
+
def _values_(self):
|
|
65
|
+
values = []
|
|
66
|
+
fields = self._FIELDS
|
|
67
|
+
for k in self._copy_tags_:
|
|
68
|
+
try:
|
|
69
|
+
values.append(fields[k].get(self))
|
|
70
|
+
except AttributeError:
|
|
71
|
+
values.append(None)
|
|
72
|
+
return values
|
|
73
|
+
|
|
74
|
+
def __maxframe_tokenize__(self):
|
|
75
|
+
try:
|
|
76
|
+
return self._key
|
|
77
|
+
except AttributeError: # pragma: no cover
|
|
78
|
+
self._update_key()
|
|
79
|
+
return self._key
|
|
80
|
+
|
|
81
|
+
def _obj_set(self, k, v):
|
|
82
|
+
object.__setattr__(self, k, v)
|
|
83
|
+
|
|
84
|
+
def _update_key(self):
|
|
85
|
+
self._obj_set("_key", tokenize(type(self).__name__, *self._values_))
|
|
86
|
+
return self
|
|
87
|
+
|
|
88
|
+
def reset_key(self):
|
|
89
|
+
self._obj_set("_key", None)
|
|
90
|
+
return self
|
|
91
|
+
|
|
92
|
+
def __copy__(self):
|
|
93
|
+
return self.copy()
|
|
94
|
+
|
|
95
|
+
def copy(self):
|
|
96
|
+
return self.copy_to(type(self)(_key=self.key))
|
|
97
|
+
|
|
98
|
+
def copy_to(self, target: "Base"):
|
|
99
|
+
target_fields = target._FIELDS
|
|
100
|
+
no_copy_attrs = self._no_copy_attrs_
|
|
101
|
+
for k, field in self._FIELDS.items():
|
|
102
|
+
if k in no_copy_attrs:
|
|
103
|
+
continue
|
|
104
|
+
try:
|
|
105
|
+
# Slightly faster than getattr.
|
|
106
|
+
value = field.__get__(self, k)
|
|
107
|
+
try:
|
|
108
|
+
target_fields[k].set(target, value)
|
|
109
|
+
except KeyError:
|
|
110
|
+
target_fields["_" + k].set(target, value)
|
|
111
|
+
except AttributeError:
|
|
112
|
+
continue
|
|
113
|
+
|
|
114
|
+
return target
|
|
115
|
+
|
|
116
|
+
def copy_from(self, obj):
|
|
117
|
+
obj.copy_to(self)
|
|
118
|
+
|
|
119
|
+
@property
|
|
120
|
+
def key(self):
|
|
121
|
+
return self._key
|
|
122
|
+
|
|
123
|
+
@property
|
|
124
|
+
def id(self):
|
|
125
|
+
return self._id
|
|
126
|
+
|
|
127
|
+
def to_kv(
|
|
128
|
+
self,
|
|
129
|
+
exclude_fields: Tuple[str],
|
|
130
|
+
accept_value_types: Optional[Tuple[Type]] = None,
|
|
131
|
+
):
|
|
132
|
+
fields = self._FIELDS
|
|
133
|
+
kv = {}
|
|
134
|
+
no_value = object()
|
|
135
|
+
for name, field in fields.items():
|
|
136
|
+
if name not in exclude_fields:
|
|
137
|
+
value = getattr(self, name, no_value)
|
|
138
|
+
if value is not no_value and (
|
|
139
|
+
accept_value_types is None or isinstance(value, accept_value_types)
|
|
140
|
+
):
|
|
141
|
+
kv[field.tag] = value
|
|
142
|
+
return kv
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
class BaseSerializer(SerializableSerializer):
|
|
146
|
+
def serial(self, obj: Base, context: Dict):
|
|
147
|
+
return super().serial(obj, context)
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
BaseSerializer.register(Base)
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
class ExecutionError(ODPSError):
|
|
154
|
+
def __init__(self, nested_error: BaseException):
|
|
155
|
+
super().__init__(nested_error)
|
|
156
|
+
self.nested_error = nested_error
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from .chunks import CHUNK_TYPE, Chunk, ChunkData
|
|
16
|
+
from .core import ENTITY_TYPE, Entity, EntityData
|
|
17
|
+
from .executable import ExecutableTuple, _ExecuteAndFetchMixin
|
|
18
|
+
from .fuse import FUSE_CHUNK_TYPE, FuseChunk, FuseChunkData
|
|
19
|
+
from .objects import (
|
|
20
|
+
OBJECT_CHUNK_TYPE,
|
|
21
|
+
OBJECT_TYPE,
|
|
22
|
+
Object,
|
|
23
|
+
ObjectChunk,
|
|
24
|
+
ObjectChunkData,
|
|
25
|
+
ObjectData,
|
|
26
|
+
)
|
|
27
|
+
from .output_types import (
|
|
28
|
+
OutputType,
|
|
29
|
+
get_fetch_class,
|
|
30
|
+
get_output_types,
|
|
31
|
+
get_tileable_types,
|
|
32
|
+
register_fetch_class,
|
|
33
|
+
register_output_types,
|
|
34
|
+
)
|
|
35
|
+
from .tileables import (
|
|
36
|
+
TILEABLE_TYPE,
|
|
37
|
+
HasShapeTileable,
|
|
38
|
+
HasShapeTileableData,
|
|
39
|
+
NotSupportTile,
|
|
40
|
+
Tileable,
|
|
41
|
+
TileableData,
|
|
42
|
+
register,
|
|
43
|
+
unregister,
|
|
44
|
+
)
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from ...serialization.serializables import BoolField, FieldTypes, TupleField
|
|
16
|
+
from ...utils import tokenize
|
|
17
|
+
from .core import Entity, EntityData
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class ChunkData(EntityData):
|
|
21
|
+
__slots__ = ()
|
|
22
|
+
|
|
23
|
+
is_broadcaster = BoolField("is_broadcaster", default=False)
|
|
24
|
+
# If the operator is a shuffle mapper, this flag indicates whether the current chunk is mapper chunk when
|
|
25
|
+
# the operator produce multiple chunks such as TensorUnique.
|
|
26
|
+
is_mapper = BoolField("is_mapper", default=None)
|
|
27
|
+
# optional fields
|
|
28
|
+
_index = TupleField("index", FieldTypes.uint32)
|
|
29
|
+
|
|
30
|
+
def __repr__(self):
|
|
31
|
+
if self.op.stage is None:
|
|
32
|
+
return (
|
|
33
|
+
f"{type(self).__name__} <op={type(self.op).__name__}, "
|
|
34
|
+
f"key={self.key}>"
|
|
35
|
+
)
|
|
36
|
+
else:
|
|
37
|
+
return (
|
|
38
|
+
f"{type(self).__name__} <op={type(self.op).__name__}, "
|
|
39
|
+
f"stage={self.op.stage.name}, key={self.key}>"
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
@property
|
|
43
|
+
def index(self):
|
|
44
|
+
return getattr(self, "_index", None)
|
|
45
|
+
|
|
46
|
+
@property
|
|
47
|
+
def device(self):
|
|
48
|
+
return self.op.device
|
|
49
|
+
|
|
50
|
+
def _update_key(self):
|
|
51
|
+
object.__setattr__(
|
|
52
|
+
self,
|
|
53
|
+
"_key",
|
|
54
|
+
tokenize(
|
|
55
|
+
type(self).__name__,
|
|
56
|
+
*(getattr(self, k, None) for k in self._keys_ if k != "_index"),
|
|
57
|
+
),
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class Chunk(Entity):
|
|
62
|
+
_allow_data_type_ = (ChunkData,)
|
|
63
|
+
|
|
64
|
+
def __repr__(self):
|
|
65
|
+
return f"{type(self).__name__}({self._data.__repr__()})"
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
CHUNK_TYPE = (Chunk, ChunkData)
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from ...serialization.serializables import (
|
|
16
|
+
DictField,
|
|
17
|
+
FieldTypes,
|
|
18
|
+
ReferenceField,
|
|
19
|
+
Serializable,
|
|
20
|
+
)
|
|
21
|
+
from ...utils import AttributeDict
|
|
22
|
+
from ..base import Base
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class EntityData(Base):
|
|
26
|
+
__slots__ = ("_siblings",)
|
|
27
|
+
type_name = None
|
|
28
|
+
|
|
29
|
+
# required fields
|
|
30
|
+
_op = ReferenceField("op", "maxframe.core.operator.base.Operator")
|
|
31
|
+
# optional fields
|
|
32
|
+
_extra_params = DictField("extra_params", key_type=FieldTypes.string)
|
|
33
|
+
|
|
34
|
+
def __init__(self, *args, **kwargs):
|
|
35
|
+
extras = AttributeDict(
|
|
36
|
+
(k, kwargs.pop(k)) for k in set(kwargs) - set(self._FIELDS)
|
|
37
|
+
)
|
|
38
|
+
kwargs["_extra_params"] = kwargs.pop("_extra_params", extras)
|
|
39
|
+
super().__init__(*args, **kwargs)
|
|
40
|
+
|
|
41
|
+
@property
|
|
42
|
+
def op(self):
|
|
43
|
+
return self._op
|
|
44
|
+
|
|
45
|
+
@property
|
|
46
|
+
def inputs(self):
|
|
47
|
+
return self.op.inputs
|
|
48
|
+
|
|
49
|
+
@inputs.setter
|
|
50
|
+
def inputs(self, new_inputs):
|
|
51
|
+
self.op.inputs = new_inputs
|
|
52
|
+
|
|
53
|
+
def is_sparse(self):
|
|
54
|
+
return self.op.is_sparse()
|
|
55
|
+
|
|
56
|
+
issparse = is_sparse
|
|
57
|
+
|
|
58
|
+
@property
|
|
59
|
+
def extra_params(self):
|
|
60
|
+
return self._extra_params
|
|
61
|
+
|
|
62
|
+
def build_graph(self, **kw):
|
|
63
|
+
from ..graph.builder.utils import build_graph
|
|
64
|
+
|
|
65
|
+
return build_graph([self], **kw)
|
|
66
|
+
|
|
67
|
+
def visualize(self, graph_attrs=None, node_attrs=None, **kw):
|
|
68
|
+
from graphviz import Source
|
|
69
|
+
|
|
70
|
+
g = self.build_graph(**kw)
|
|
71
|
+
dot = g.to_dot(
|
|
72
|
+
graph_attrs=graph_attrs,
|
|
73
|
+
node_attrs=node_attrs,
|
|
74
|
+
result_chunk_keys={c.key for c in self.chunks},
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
return Source(dot)
|
|
78
|
+
|
|
79
|
+
def _need_execution(self): # pylint: disable=no-self-use
|
|
80
|
+
# some tileable may generate unknown meta,
|
|
81
|
+
# they need to be executed first
|
|
82
|
+
return False
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
class Entity(Serializable):
|
|
86
|
+
_allow_data_type_ = ()
|
|
87
|
+
type_name = None
|
|
88
|
+
|
|
89
|
+
_data = ReferenceField("data", EntityData)
|
|
90
|
+
|
|
91
|
+
def __init__(self, data=None, **kw):
|
|
92
|
+
super().__init__(_data=data, **kw)
|
|
93
|
+
|
|
94
|
+
def __dir__(self):
|
|
95
|
+
obj_dir = object.__dir__(self)
|
|
96
|
+
if self._data is not None:
|
|
97
|
+
obj_dir = sorted(set(dir(self._data) + obj_dir))
|
|
98
|
+
return obj_dir
|
|
99
|
+
|
|
100
|
+
def __str__(self):
|
|
101
|
+
return self._data.__str__()
|
|
102
|
+
|
|
103
|
+
def __repr__(self):
|
|
104
|
+
return self._data.__repr__()
|
|
105
|
+
|
|
106
|
+
def _check_data(self, data):
|
|
107
|
+
if data is not None and not isinstance(data, self._allow_data_type_):
|
|
108
|
+
raise TypeError(f"Expect {self._allow_data_type_}, got {type(data)}")
|
|
109
|
+
|
|
110
|
+
@property
|
|
111
|
+
def data(self):
|
|
112
|
+
return self._data
|
|
113
|
+
|
|
114
|
+
@data.setter
|
|
115
|
+
def data(self, new_data):
|
|
116
|
+
self._check_data(new_data)
|
|
117
|
+
self._data = new_data
|
|
118
|
+
|
|
119
|
+
def __copy__(self):
|
|
120
|
+
return self.copy()
|
|
121
|
+
|
|
122
|
+
def copy(self):
|
|
123
|
+
return self.copy_to(type(self)(None))
|
|
124
|
+
|
|
125
|
+
def copy_to(self, target):
|
|
126
|
+
target.data = self._data
|
|
127
|
+
return target
|
|
128
|
+
|
|
129
|
+
def copy_from(self, obj):
|
|
130
|
+
self.data = obj.data
|
|
131
|
+
|
|
132
|
+
def tiles(self):
|
|
133
|
+
from .tileables import handler
|
|
134
|
+
|
|
135
|
+
new_entity = self.copy()
|
|
136
|
+
new_entity.data = handler.tiles(self.data)
|
|
137
|
+
return new_entity
|
|
138
|
+
|
|
139
|
+
def __getattr__(self, attr):
|
|
140
|
+
return getattr(self._data, attr)
|
|
141
|
+
|
|
142
|
+
def __setattr__(self, key, value):
|
|
143
|
+
try:
|
|
144
|
+
object.__setattr__(self, key, value)
|
|
145
|
+
except AttributeError:
|
|
146
|
+
return setattr(self._data, key, value)
|
|
147
|
+
|
|
148
|
+
def _need_execution(self):
|
|
149
|
+
return self._data._need_execution()
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
ENTITY_TYPE = (Entity, EntityData)
|