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
|
@@ -0,0 +1,280 @@
|
|
|
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 base64
|
|
16
|
+
import json
|
|
17
|
+
import logging
|
|
18
|
+
import time
|
|
19
|
+
from typing import Dict, List, Optional, Type, Union
|
|
20
|
+
|
|
21
|
+
import msgpack
|
|
22
|
+
from odps import ODPS
|
|
23
|
+
from odps import options as odps_options
|
|
24
|
+
from odps.errors import parse_instance_error
|
|
25
|
+
from odps.models import Instance, MaxFrameTask
|
|
26
|
+
|
|
27
|
+
from maxframe.config import options
|
|
28
|
+
from maxframe.core import TileableGraph
|
|
29
|
+
from maxframe.protocol import DagInfo, JsonSerializable, ResultInfo, SessionInfo
|
|
30
|
+
from maxframe.utils import deserialize_serializable, serialize_serializable, to_str
|
|
31
|
+
|
|
32
|
+
try:
|
|
33
|
+
from maxframe import __version__ as mf_version
|
|
34
|
+
except ImportError:
|
|
35
|
+
mf_version = None
|
|
36
|
+
|
|
37
|
+
from .consts import (
|
|
38
|
+
MAXFRAME_DEFAULT_PROTOCOL,
|
|
39
|
+
MAXFRAME_OUTPUT_JSON_FORMAT,
|
|
40
|
+
MAXFRAME_OUTPUT_MAXFRAME_FORMAT,
|
|
41
|
+
MAXFRAME_OUTPUT_MSGPACK_FORMAT,
|
|
42
|
+
MAXFRAME_TASK_CANCEL_DAG_METHOD,
|
|
43
|
+
MAXFRAME_TASK_CREATE_SESSION_METHOD,
|
|
44
|
+
MAXFRAME_TASK_DECREF_METHOD,
|
|
45
|
+
MAXFRAME_TASK_DELETE_SESSION_METHOD,
|
|
46
|
+
MAXFRAME_TASK_GET_DAG_INFO_METHOD,
|
|
47
|
+
MAXFRAME_TASK_GET_SESSION_METHOD,
|
|
48
|
+
MAXFRAME_TASK_SUBMIT_DAG_METHOD,
|
|
49
|
+
ODPS_SESSION_INSECURE_SCHEME,
|
|
50
|
+
ODPS_SESSION_SECURE_SCHEME,
|
|
51
|
+
)
|
|
52
|
+
from .odps import MaxFrameServiceCaller, MaxFrameSession
|
|
53
|
+
|
|
54
|
+
logger = logging.getLogger(__name__)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class MaxFrameInstanceCaller(MaxFrameServiceCaller):
|
|
58
|
+
_instance: Optional[Instance]
|
|
59
|
+
|
|
60
|
+
def __init__(
|
|
61
|
+
self,
|
|
62
|
+
odps_entry: ODPS,
|
|
63
|
+
task_name: Optional[str] = None,
|
|
64
|
+
project: Optional[str] = None,
|
|
65
|
+
priority: Optional[int] = None,
|
|
66
|
+
running_cluster: Optional[str] = None,
|
|
67
|
+
nested_instance_id: Optional[str] = None,
|
|
68
|
+
major_version: Optional[str] = None,
|
|
69
|
+
output_format: Optional[str] = None,
|
|
70
|
+
**kwargs,
|
|
71
|
+
):
|
|
72
|
+
if callable(odps_options.get_priority):
|
|
73
|
+
default_priority = odps_options.get_priority(odps_entry)
|
|
74
|
+
else:
|
|
75
|
+
default_priority = odps_options.priority
|
|
76
|
+
priority = priority if priority is not None else default_priority
|
|
77
|
+
|
|
78
|
+
self._odps_entry = odps_entry
|
|
79
|
+
self._task_name = task_name
|
|
80
|
+
self._project = project
|
|
81
|
+
self._priority = priority
|
|
82
|
+
self._running_cluster = running_cluster
|
|
83
|
+
self._major_version = major_version
|
|
84
|
+
self._output_format = output_format or MAXFRAME_OUTPUT_MSGPACK_FORMAT
|
|
85
|
+
|
|
86
|
+
if nested_instance_id is None:
|
|
87
|
+
self._nested = False
|
|
88
|
+
self._instance = None
|
|
89
|
+
else:
|
|
90
|
+
self._nested = True
|
|
91
|
+
self._instance = odps_entry.get_instance(nested_instance_id)
|
|
92
|
+
|
|
93
|
+
def _deserial_task_info_result(
|
|
94
|
+
self, content: Union[bytes, str, dict], target_cls: Type[JsonSerializable]
|
|
95
|
+
):
|
|
96
|
+
if isinstance(content, (str, bytes)):
|
|
97
|
+
json_data = json.loads(to_str(content))
|
|
98
|
+
else:
|
|
99
|
+
json_data = content
|
|
100
|
+
result_data = base64.b64decode(json_data["result"])
|
|
101
|
+
if self._output_format == MAXFRAME_OUTPUT_MAXFRAME_FORMAT:
|
|
102
|
+
return deserialize_serializable(result_data)
|
|
103
|
+
elif self._output_format == MAXFRAME_OUTPUT_JSON_FORMAT:
|
|
104
|
+
return target_cls.from_json(json.loads(result_data))
|
|
105
|
+
elif self._output_format == MAXFRAME_OUTPUT_MSGPACK_FORMAT:
|
|
106
|
+
return target_cls.from_json(msgpack.loads(result_data))
|
|
107
|
+
else:
|
|
108
|
+
raise ValueError(
|
|
109
|
+
f"Serialization format {self._output_format} not supported"
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
def _create_maxframe_task(self) -> MaxFrameTask:
|
|
113
|
+
task = MaxFrameTask(
|
|
114
|
+
name=self._task_name,
|
|
115
|
+
major_version=self._major_version,
|
|
116
|
+
service_endpoint=self._odps_entry.endpoint,
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
# merge sql options
|
|
120
|
+
sql_settings = (odps_options.sql.settings or {}).copy()
|
|
121
|
+
sql_settings.update(options.sql.settings or {})
|
|
122
|
+
|
|
123
|
+
mf_settings = dict(options.to_dict(remote_only=True).items())
|
|
124
|
+
mf_settings["sql.settings"] = sql_settings
|
|
125
|
+
|
|
126
|
+
mf_opts = {
|
|
127
|
+
"odps.maxframe.settings": json.dumps(mf_settings),
|
|
128
|
+
"odps.maxframe.output_format": self._output_format,
|
|
129
|
+
}
|
|
130
|
+
if mf_version:
|
|
131
|
+
mf_opts["odps.maxframe.client_version"] = mf_version
|
|
132
|
+
task.update_settings(mf_opts)
|
|
133
|
+
return task
|
|
134
|
+
|
|
135
|
+
def create_session(self) -> SessionInfo:
|
|
136
|
+
task = self._create_maxframe_task()
|
|
137
|
+
if not self._nested:
|
|
138
|
+
self._task_name = task.name
|
|
139
|
+
project = self._odps_entry.get_project(self._project)
|
|
140
|
+
self._instance = project.instances.create(
|
|
141
|
+
task=task,
|
|
142
|
+
priority=self._priority,
|
|
143
|
+
running_cluster=self._running_cluster,
|
|
144
|
+
)
|
|
145
|
+
self._wait_instance_task_ready()
|
|
146
|
+
return self.get_session()
|
|
147
|
+
else:
|
|
148
|
+
result = self._instance.put_task_info(
|
|
149
|
+
self._task_name,
|
|
150
|
+
MAXFRAME_TASK_CREATE_SESSION_METHOD,
|
|
151
|
+
task.properties["settings"],
|
|
152
|
+
)
|
|
153
|
+
return self._deserial_task_info_result(result, SessionInfo)
|
|
154
|
+
|
|
155
|
+
def _parse_instance_result_error(self):
|
|
156
|
+
result_data = self._instance.get_task_result(self._task_name)
|
|
157
|
+
try:
|
|
158
|
+
info = self._deserial_task_info_result({"result": result_data}, SessionInfo)
|
|
159
|
+
except:
|
|
160
|
+
raise parse_instance_error(result_data)
|
|
161
|
+
info.error_info.reraise()
|
|
162
|
+
|
|
163
|
+
def _wait_instance_task_ready(
|
|
164
|
+
self, interval: float = 0.1, max_interval: float = 5.0, timeout: int = None
|
|
165
|
+
):
|
|
166
|
+
check_time = time.time()
|
|
167
|
+
timeout = timeout or options.client.task_start_timeout
|
|
168
|
+
while True:
|
|
169
|
+
if self._instance.is_terminated(retry=True):
|
|
170
|
+
self._parse_instance_result_error()
|
|
171
|
+
status_json = json.loads(
|
|
172
|
+
self._instance.get_task_info(self._task_name, "status") or "{}"
|
|
173
|
+
)
|
|
174
|
+
if status_json.get("status") == "Running":
|
|
175
|
+
break
|
|
176
|
+
if time.time() - check_time > timeout:
|
|
177
|
+
raise TimeoutError("Check session startup time out")
|
|
178
|
+
time.sleep(interval)
|
|
179
|
+
interval = min(max_interval, interval * 2)
|
|
180
|
+
|
|
181
|
+
def get_session(self) -> SessionInfo:
|
|
182
|
+
req_data = {"output_format": self._output_format}
|
|
183
|
+
serialized = self._instance.put_task_info(
|
|
184
|
+
self._task_name, MAXFRAME_TASK_GET_SESSION_METHOD, json.dumps(req_data)
|
|
185
|
+
)
|
|
186
|
+
info: SessionInfo = self._deserial_task_info_result(serialized, SessionInfo)
|
|
187
|
+
info.session_id = self._instance.id
|
|
188
|
+
return info
|
|
189
|
+
|
|
190
|
+
def delete_session(self) -> None:
|
|
191
|
+
if not self._nested:
|
|
192
|
+
self._instance.stop()
|
|
193
|
+
else:
|
|
194
|
+
req_data = {"output_format": self._output_format}
|
|
195
|
+
self._instance.put_task_info(
|
|
196
|
+
self._task_name,
|
|
197
|
+
MAXFRAME_TASK_DELETE_SESSION_METHOD,
|
|
198
|
+
json.dumps(req_data),
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
def submit_dag(
|
|
202
|
+
self,
|
|
203
|
+
dag: TileableGraph,
|
|
204
|
+
managed_input_infos: Optional[Dict[str, ResultInfo]] = None,
|
|
205
|
+
) -> DagInfo:
|
|
206
|
+
req_data = {
|
|
207
|
+
"protocol": MAXFRAME_DEFAULT_PROTOCOL,
|
|
208
|
+
"dag": base64.b64encode(serialize_serializable(dag)).decode(),
|
|
209
|
+
"managed_input_infos": base64.b64encode(
|
|
210
|
+
serialize_serializable(managed_input_infos)
|
|
211
|
+
).decode(),
|
|
212
|
+
"output_format": self._output_format,
|
|
213
|
+
}
|
|
214
|
+
res = self._instance.put_task_info(
|
|
215
|
+
self._task_name, MAXFRAME_TASK_SUBMIT_DAG_METHOD, json.dumps(req_data)
|
|
216
|
+
)
|
|
217
|
+
return self._deserial_task_info_result(res, DagInfo)
|
|
218
|
+
|
|
219
|
+
def get_dag_info(self, dag_id: str) -> DagInfo:
|
|
220
|
+
req_data = {
|
|
221
|
+
"protocol": MAXFRAME_DEFAULT_PROTOCOL,
|
|
222
|
+
"dag_id": dag_id,
|
|
223
|
+
"output_format": self._output_format,
|
|
224
|
+
}
|
|
225
|
+
res = self._instance.put_task_info(
|
|
226
|
+
self._task_name, MAXFRAME_TASK_GET_DAG_INFO_METHOD, json.dumps(req_data)
|
|
227
|
+
)
|
|
228
|
+
return self._deserial_task_info_result(res, DagInfo)
|
|
229
|
+
|
|
230
|
+
def cancel_dag(self, dag_id: str) -> DagInfo:
|
|
231
|
+
req_data = {
|
|
232
|
+
"protocol": MAXFRAME_DEFAULT_PROTOCOL,
|
|
233
|
+
"dag_id": dag_id,
|
|
234
|
+
"output_format": self._output_format,
|
|
235
|
+
}
|
|
236
|
+
res = self._instance.put_task_info(
|
|
237
|
+
self._task_name, MAXFRAME_TASK_CANCEL_DAG_METHOD, json.dumps(req_data)
|
|
238
|
+
)
|
|
239
|
+
return self._deserial_task_info_result(res, DagInfo)
|
|
240
|
+
|
|
241
|
+
def decref(self, tileable_keys: List[str]) -> None:
|
|
242
|
+
req_data = {
|
|
243
|
+
"tileable_keys": ",".join(tileable_keys),
|
|
244
|
+
}
|
|
245
|
+
self._instance.put_task_info(
|
|
246
|
+
self._task_name, MAXFRAME_TASK_DECREF_METHOD, json.dumps(req_data)
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
def get_logview_address(self, dag_id=None, hours=None) -> Optional[str]:
|
|
250
|
+
hours = hours or options.session.logview_hours
|
|
251
|
+
subquery_suffix = f"&subQuery={dag_id}" if dag_id else ""
|
|
252
|
+
return self._instance.get_logview_address(hours) + subquery_suffix
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
class MaxFrameTaskSession(MaxFrameSession):
|
|
256
|
+
schemes = [ODPS_SESSION_INSECURE_SCHEME, ODPS_SESSION_SECURE_SCHEME]
|
|
257
|
+
|
|
258
|
+
_instance: Instance
|
|
259
|
+
|
|
260
|
+
@classmethod
|
|
261
|
+
def _create_caller(
|
|
262
|
+
cls,
|
|
263
|
+
odps_entry: ODPS,
|
|
264
|
+
address: str,
|
|
265
|
+
priority: Optional[int] = None,
|
|
266
|
+
project: Optional[str] = None,
|
|
267
|
+
running_cluster: Optional[str] = None,
|
|
268
|
+
**kwargs,
|
|
269
|
+
) -> MaxFrameServiceCaller:
|
|
270
|
+
return MaxFrameInstanceCaller(
|
|
271
|
+
odps_entry,
|
|
272
|
+
priority=priority,
|
|
273
|
+
running_cluster=running_cluster,
|
|
274
|
+
project=project,
|
|
275
|
+
**kwargs,
|
|
276
|
+
)
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
def register_session_schemes(overwrite: bool = False):
|
|
280
|
+
MaxFrameTaskSession.register_schemes(overwrite=overwrite)
|
|
@@ -0,0 +1,13 @@
|
|
|
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.
|
|
@@ -0,0 +1,85 @@
|
|
|
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 json
|
|
16
|
+
import os
|
|
17
|
+
|
|
18
|
+
import mock
|
|
19
|
+
from defusedxml import ElementTree
|
|
20
|
+
from odps import ODPS
|
|
21
|
+
from odps import options as odps_options
|
|
22
|
+
|
|
23
|
+
from ...session.consts import MAXFRAME_OUTPUT_JSON_FORMAT
|
|
24
|
+
from ...session.task import MaxFrameInstanceCaller, MaxFrameTask
|
|
25
|
+
|
|
26
|
+
expected_file_dir = os.path.join(os.path.dirname(__file__), "expected-data")
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def test_maxframe_instance_caller_creating_session():
|
|
30
|
+
o = ODPS.from_environments()
|
|
31
|
+
|
|
32
|
+
def create_caller(**kwargs):
|
|
33
|
+
kw = dict(
|
|
34
|
+
odps_entry=o,
|
|
35
|
+
task_name="task_test",
|
|
36
|
+
major_version="test_version",
|
|
37
|
+
output_format=MAXFRAME_OUTPUT_JSON_FORMAT,
|
|
38
|
+
running_cluster="test_cluster",
|
|
39
|
+
)
|
|
40
|
+
kw.update(**kwargs)
|
|
41
|
+
return MaxFrameInstanceCaller(**kw)
|
|
42
|
+
|
|
43
|
+
def mock_create(self, task: MaxFrameTask, priority=None, running_cluster=None):
|
|
44
|
+
assert priority == 100
|
|
45
|
+
assert running_cluster == "test_cluster"
|
|
46
|
+
root = ElementTree.parse(
|
|
47
|
+
os.path.join(expected_file_dir, "create_session.xml")
|
|
48
|
+
).getroot()
|
|
49
|
+
assert root.tag == "MaxFrame"
|
|
50
|
+
assert root.find("Name").text == "task_test"
|
|
51
|
+
assert root.find("Command").text == "CREATE_SESSION"
|
|
52
|
+
property_node = root.find("Config").find("Property")
|
|
53
|
+
assert property_node.find("Name").text == "settings"
|
|
54
|
+
setting_dict = json.loads(property_node.find("Value").text)
|
|
55
|
+
assert setting_dict["odps.task.major.version"] == "test_version"
|
|
56
|
+
assert (
|
|
57
|
+
setting_dict["odps.service.endpoint"]
|
|
58
|
+
== "http://100.69.248.78:8002/odps_dailyrunnew"
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
assert setting_dict["odps.maxframe.output_format"] == "json"
|
|
62
|
+
maxframe_setting_dict = json.loads(setting_dict["odps.maxframe.settings"])
|
|
63
|
+
assert maxframe_setting_dict["session.max_alive_seconds"] == 259200
|
|
64
|
+
|
|
65
|
+
with mock.patch.multiple(
|
|
66
|
+
target="maxframe_client.session.task.MaxFrameInstanceCaller",
|
|
67
|
+
_wait_instance_task_ready=mock.DEFAULT,
|
|
68
|
+
get_session=mock.DEFAULT,
|
|
69
|
+
), mock.patch("odps.models.instances.BaseInstances.create", mock_create):
|
|
70
|
+
task_caller = create_caller(priority=100)
|
|
71
|
+
task_caller.create_session()
|
|
72
|
+
|
|
73
|
+
old_priority = odps_options.priority
|
|
74
|
+
old_get_priority = odps_options.get_priority
|
|
75
|
+
try:
|
|
76
|
+
task_caller = create_caller(priority=100)
|
|
77
|
+
odps_options.priority = 100
|
|
78
|
+
task_caller.create_session()
|
|
79
|
+
|
|
80
|
+
odps_options.priority = None
|
|
81
|
+
odps_options.get_priority = lambda _: 100
|
|
82
|
+
task_caller.create_session()
|
|
83
|
+
finally:
|
|
84
|
+
odps_options.priority = old_priority
|
|
85
|
+
odps_options.get_priority = old_get_priority
|
|
@@ -0,0 +1,13 @@
|
|
|
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.
|
|
@@ -0,0 +1,89 @@
|
|
|
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 uuid
|
|
16
|
+
|
|
17
|
+
import numpy as np
|
|
18
|
+
import pandas as pd
|
|
19
|
+
import pyarrow as pa
|
|
20
|
+
from odps import ODPS
|
|
21
|
+
|
|
22
|
+
import maxframe.dataframe as md
|
|
23
|
+
from maxframe.odpsio import HaloTableIO
|
|
24
|
+
from maxframe.protocol import ODPSTableResultInfo, ResultType
|
|
25
|
+
from maxframe.tests.utils import tn
|
|
26
|
+
|
|
27
|
+
from ..fetcher import ODPSTableFetcher
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
async def test_table_fetcher():
|
|
31
|
+
odps_entry = ODPS.from_environments()
|
|
32
|
+
halo_table_io = HaloTableIO(odps_entry)
|
|
33
|
+
fetcher = ODPSTableFetcher(odps_entry)
|
|
34
|
+
|
|
35
|
+
data = pd.DataFrame(
|
|
36
|
+
{
|
|
37
|
+
"_idx_0": np.arange(1000),
|
|
38
|
+
"a": np.random.rand(1000),
|
|
39
|
+
"b": np.random.randint(0, 10, 1000),
|
|
40
|
+
"c": np.random.choice(list("ABC"), 1000),
|
|
41
|
+
}
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
table_name = tn("mf_test_groupby_table_" + str(uuid.uuid4().hex))
|
|
45
|
+
odps_entry.delete_table(table_name, if_exists=True)
|
|
46
|
+
|
|
47
|
+
odps_entry.create_table(
|
|
48
|
+
table_name, "_idx_0 bigint, a double, b bigint, c string", lifecycle=1
|
|
49
|
+
)
|
|
50
|
+
with halo_table_io.open_writer(table_name) as writer:
|
|
51
|
+
writer.write(pa.Table.from_pandas(data, preserve_index=False))
|
|
52
|
+
|
|
53
|
+
raw_data = data[list("abc")]
|
|
54
|
+
|
|
55
|
+
tileable = md.read_pandas(data[list("abc")])
|
|
56
|
+
result_info = ODPSTableResultInfo(ResultType.ODPS_TABLE, full_table_name=table_name)
|
|
57
|
+
fetched = await fetcher.fetch(tileable, result_info, [None, None])
|
|
58
|
+
assert len(fetched) == 1000
|
|
59
|
+
pd.testing.assert_frame_equal(raw_data, fetched)
|
|
60
|
+
|
|
61
|
+
result_info = ODPSTableResultInfo(ResultType.ODPS_TABLE, full_table_name=table_name)
|
|
62
|
+
fetched = await fetcher.fetch(tileable, result_info, [2, None])
|
|
63
|
+
assert len(fetched) == 1
|
|
64
|
+
pd.testing.assert_frame_equal(raw_data.iloc[2:3], fetched)
|
|
65
|
+
|
|
66
|
+
result_info = ODPSTableResultInfo(ResultType.ODPS_TABLE, full_table_name=table_name)
|
|
67
|
+
fetched = await fetcher.fetch(tileable, result_info, [slice(None, 10), None])
|
|
68
|
+
assert len(fetched) == 10
|
|
69
|
+
pd.testing.assert_frame_equal(raw_data.iloc[:10], fetched)
|
|
70
|
+
|
|
71
|
+
result_info = ODPSTableResultInfo(ResultType.ODPS_TABLE, full_table_name=table_name)
|
|
72
|
+
fetched = await fetcher.fetch(tileable, result_info, [slice(None, 10, 3), None])
|
|
73
|
+
assert len(fetched) == 4
|
|
74
|
+
pd.testing.assert_frame_equal(raw_data.iloc[:10:3], fetched)
|
|
75
|
+
|
|
76
|
+
tileable = md.read_pandas(data[list("ab")])
|
|
77
|
+
result_info = ODPSTableResultInfo(ResultType.ODPS_TABLE, full_table_name=table_name)
|
|
78
|
+
fetched = await fetcher.fetch(tileable, result_info, [slice(-5, None), slice(2)])
|
|
79
|
+
assert len(fetched) == 5
|
|
80
|
+
pd.testing.assert_frame_equal(raw_data.iloc[-5:, :2], fetched)
|
|
81
|
+
|
|
82
|
+
tileable = md.read_pandas(data[list("a")])
|
|
83
|
+
result_info = ODPSTableResultInfo(ResultType.ODPS_TABLE, full_table_name=table_name)
|
|
84
|
+
fetched = await fetcher.fetch(tileable, result_info, [slice(-1, -6, -1), 0])
|
|
85
|
+
assert len(fetched) == 5
|
|
86
|
+
assert len(fetched.columns) == 1
|
|
87
|
+
pd.testing.assert_frame_equal(raw_data.iloc[-1:-6:-1, :1], fetched)
|
|
88
|
+
|
|
89
|
+
odps_entry.delete_table(table_name, if_exists=True)
|