maxframe 0.1.0b5__cp39-cp39-macosx_11_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of maxframe might be problematic. Click here for more details.
- maxframe/__init__.py +32 -0
- maxframe/_utils.cpython-39-darwin.so +0 -0
- maxframe/_utils.pxd +33 -0
- maxframe/_utils.pyx +547 -0
- maxframe/codegen.py +528 -0
- maxframe/config/__init__.py +15 -0
- maxframe/config/config.py +443 -0
- maxframe/config/tests/__init__.py +13 -0
- maxframe/config/tests/test_config.py +103 -0
- maxframe/config/tests/test_validators.py +34 -0
- maxframe/config/validators.py +57 -0
- maxframe/conftest.py +139 -0
- maxframe/core/__init__.py +65 -0
- maxframe/core/base.py +156 -0
- maxframe/core/entity/__init__.py +44 -0
- maxframe/core/entity/chunks.py +68 -0
- maxframe/core/entity/core.py +152 -0
- maxframe/core/entity/executable.py +337 -0
- maxframe/core/entity/fuse.py +73 -0
- maxframe/core/entity/objects.py +100 -0
- maxframe/core/entity/output_types.py +90 -0
- maxframe/core/entity/tileables.py +438 -0
- maxframe/core/entity/utils.py +24 -0
- maxframe/core/graph/__init__.py +17 -0
- maxframe/core/graph/builder/__init__.py +16 -0
- maxframe/core/graph/builder/base.py +86 -0
- maxframe/core/graph/builder/chunk.py +430 -0
- maxframe/core/graph/builder/tileable.py +34 -0
- maxframe/core/graph/builder/utils.py +41 -0
- maxframe/core/graph/core.cpython-39-darwin.so +0 -0
- maxframe/core/graph/core.pyx +467 -0
- maxframe/core/graph/entity.py +171 -0
- maxframe/core/graph/tests/__init__.py +13 -0
- maxframe/core/graph/tests/test_graph.py +205 -0
- maxframe/core/mode.py +96 -0
- maxframe/core/operator/__init__.py +34 -0
- maxframe/core/operator/base.py +450 -0
- maxframe/core/operator/core.py +276 -0
- maxframe/core/operator/fetch.py +53 -0
- maxframe/core/operator/fuse.py +29 -0
- maxframe/core/operator/objects.py +72 -0
- maxframe/core/operator/shuffle.py +111 -0
- maxframe/core/operator/tests/__init__.py +13 -0
- maxframe/core/operator/tests/test_core.py +64 -0
- maxframe/core/tests/__init__.py +13 -0
- maxframe/core/tests/test_mode.py +75 -0
- maxframe/dataframe/__init__.py +81 -0
- maxframe/dataframe/arithmetic/__init__.py +359 -0
- maxframe/dataframe/arithmetic/abs.py +33 -0
- maxframe/dataframe/arithmetic/add.py +60 -0
- maxframe/dataframe/arithmetic/arccos.py +28 -0
- maxframe/dataframe/arithmetic/arccosh.py +28 -0
- maxframe/dataframe/arithmetic/arcsin.py +28 -0
- maxframe/dataframe/arithmetic/arcsinh.py +28 -0
- maxframe/dataframe/arithmetic/arctan.py +28 -0
- maxframe/dataframe/arithmetic/arctanh.py +28 -0
- maxframe/dataframe/arithmetic/around.py +152 -0
- maxframe/dataframe/arithmetic/bitwise_and.py +46 -0
- maxframe/dataframe/arithmetic/bitwise_or.py +50 -0
- maxframe/dataframe/arithmetic/bitwise_xor.py +46 -0
- maxframe/dataframe/arithmetic/ceil.py +28 -0
- maxframe/dataframe/arithmetic/core.py +342 -0
- maxframe/dataframe/arithmetic/cos.py +28 -0
- maxframe/dataframe/arithmetic/cosh.py +28 -0
- maxframe/dataframe/arithmetic/degrees.py +28 -0
- maxframe/dataframe/arithmetic/docstring.py +442 -0
- maxframe/dataframe/arithmetic/equal.py +56 -0
- maxframe/dataframe/arithmetic/exp.py +28 -0
- maxframe/dataframe/arithmetic/exp2.py +28 -0
- maxframe/dataframe/arithmetic/expm1.py +28 -0
- maxframe/dataframe/arithmetic/floor.py +28 -0
- maxframe/dataframe/arithmetic/floordiv.py +64 -0
- maxframe/dataframe/arithmetic/greater.py +57 -0
- maxframe/dataframe/arithmetic/greater_equal.py +57 -0
- maxframe/dataframe/arithmetic/invert.py +33 -0
- maxframe/dataframe/arithmetic/is_ufuncs.py +62 -0
- maxframe/dataframe/arithmetic/less.py +57 -0
- maxframe/dataframe/arithmetic/less_equal.py +57 -0
- maxframe/dataframe/arithmetic/log.py +28 -0
- maxframe/dataframe/arithmetic/log10.py +28 -0
- maxframe/dataframe/arithmetic/log2.py +28 -0
- maxframe/dataframe/arithmetic/mod.py +60 -0
- maxframe/dataframe/arithmetic/multiply.py +60 -0
- maxframe/dataframe/arithmetic/negative.py +33 -0
- maxframe/dataframe/arithmetic/not_equal.py +56 -0
- maxframe/dataframe/arithmetic/power.py +68 -0
- maxframe/dataframe/arithmetic/radians.py +28 -0
- maxframe/dataframe/arithmetic/sin.py +28 -0
- maxframe/dataframe/arithmetic/sinh.py +28 -0
- maxframe/dataframe/arithmetic/sqrt.py +28 -0
- maxframe/dataframe/arithmetic/subtract.py +64 -0
- maxframe/dataframe/arithmetic/tan.py +28 -0
- maxframe/dataframe/arithmetic/tanh.py +28 -0
- maxframe/dataframe/arithmetic/tests/__init__.py +13 -0
- maxframe/dataframe/arithmetic/tests/test_arithmetic.py +695 -0
- maxframe/dataframe/arithmetic/truediv.py +64 -0
- maxframe/dataframe/arithmetic/trunc.py +28 -0
- maxframe/dataframe/arrays.py +864 -0
- maxframe/dataframe/core.py +2417 -0
- maxframe/dataframe/datasource/__init__.py +15 -0
- maxframe/dataframe/datasource/core.py +81 -0
- maxframe/dataframe/datasource/dataframe.py +59 -0
- maxframe/dataframe/datasource/date_range.py +504 -0
- maxframe/dataframe/datasource/from_index.py +54 -0
- maxframe/dataframe/datasource/from_records.py +107 -0
- maxframe/dataframe/datasource/from_tensor.py +419 -0
- maxframe/dataframe/datasource/index.py +117 -0
- maxframe/dataframe/datasource/read_csv.py +528 -0
- maxframe/dataframe/datasource/read_odps_query.py +299 -0
- maxframe/dataframe/datasource/read_odps_table.py +253 -0
- maxframe/dataframe/datasource/read_parquet.py +421 -0
- maxframe/dataframe/datasource/series.py +55 -0
- maxframe/dataframe/datasource/tests/__init__.py +13 -0
- maxframe/dataframe/datasource/tests/test_datasource.py +401 -0
- maxframe/dataframe/datastore/__init__.py +26 -0
- maxframe/dataframe/datastore/core.py +19 -0
- maxframe/dataframe/datastore/to_csv.py +227 -0
- maxframe/dataframe/datastore/to_odps.py +162 -0
- maxframe/dataframe/extensions/__init__.py +41 -0
- maxframe/dataframe/extensions/accessor.py +50 -0
- maxframe/dataframe/extensions/reshuffle.py +83 -0
- maxframe/dataframe/extensions/tests/__init__.py +13 -0
- maxframe/dataframe/extensions/tests/test_extensions.py +38 -0
- maxframe/dataframe/fetch/__init__.py +15 -0
- maxframe/dataframe/fetch/core.py +86 -0
- maxframe/dataframe/groupby/__init__.py +82 -0
- maxframe/dataframe/groupby/aggregation.py +350 -0
- maxframe/dataframe/groupby/apply.py +251 -0
- maxframe/dataframe/groupby/core.py +179 -0
- maxframe/dataframe/groupby/cum.py +124 -0
- maxframe/dataframe/groupby/fill.py +141 -0
- maxframe/dataframe/groupby/getitem.py +92 -0
- maxframe/dataframe/groupby/head.py +105 -0
- maxframe/dataframe/groupby/sample.py +214 -0
- maxframe/dataframe/groupby/tests/__init__.py +13 -0
- maxframe/dataframe/groupby/tests/test_groupby.py +374 -0
- maxframe/dataframe/groupby/transform.py +255 -0
- maxframe/dataframe/indexing/__init__.py +84 -0
- maxframe/dataframe/indexing/add_prefix_suffix.py +110 -0
- maxframe/dataframe/indexing/align.py +349 -0
- maxframe/dataframe/indexing/at.py +83 -0
- maxframe/dataframe/indexing/getitem.py +204 -0
- maxframe/dataframe/indexing/iat.py +37 -0
- maxframe/dataframe/indexing/iloc.py +566 -0
- maxframe/dataframe/indexing/insert.py +86 -0
- maxframe/dataframe/indexing/loc.py +411 -0
- maxframe/dataframe/indexing/reindex.py +526 -0
- maxframe/dataframe/indexing/rename.py +462 -0
- maxframe/dataframe/indexing/rename_axis.py +209 -0
- maxframe/dataframe/indexing/reset_index.py +402 -0
- maxframe/dataframe/indexing/sample.py +221 -0
- maxframe/dataframe/indexing/set_axis.py +194 -0
- maxframe/dataframe/indexing/set_index.py +61 -0
- maxframe/dataframe/indexing/setitem.py +130 -0
- maxframe/dataframe/indexing/tests/__init__.py +13 -0
- maxframe/dataframe/indexing/tests/test_indexing.py +488 -0
- maxframe/dataframe/indexing/where.py +308 -0
- maxframe/dataframe/initializer.py +288 -0
- maxframe/dataframe/merge/__init__.py +32 -0
- maxframe/dataframe/merge/append.py +121 -0
- maxframe/dataframe/merge/concat.py +325 -0
- maxframe/dataframe/merge/merge.py +593 -0
- maxframe/dataframe/merge/tests/__init__.py +13 -0
- maxframe/dataframe/merge/tests/test_merge.py +215 -0
- maxframe/dataframe/misc/__init__.py +134 -0
- maxframe/dataframe/misc/_duplicate.py +46 -0
- maxframe/dataframe/misc/accessor.py +276 -0
- maxframe/dataframe/misc/apply.py +692 -0
- maxframe/dataframe/misc/astype.py +236 -0
- maxframe/dataframe/misc/case_when.py +141 -0
- maxframe/dataframe/misc/check_monotonic.py +84 -0
- maxframe/dataframe/misc/cut.py +383 -0
- maxframe/dataframe/misc/datetimes.py +79 -0
- maxframe/dataframe/misc/describe.py +108 -0
- maxframe/dataframe/misc/diff.py +210 -0
- maxframe/dataframe/misc/drop.py +440 -0
- maxframe/dataframe/misc/drop_duplicates.py +248 -0
- maxframe/dataframe/misc/duplicated.py +292 -0
- maxframe/dataframe/misc/eval.py +728 -0
- maxframe/dataframe/misc/explode.py +171 -0
- maxframe/dataframe/misc/get_dummies.py +208 -0
- maxframe/dataframe/misc/isin.py +217 -0
- maxframe/dataframe/misc/map.py +236 -0
- maxframe/dataframe/misc/melt.py +162 -0
- maxframe/dataframe/misc/memory_usage.py +248 -0
- maxframe/dataframe/misc/pct_change.py +150 -0
- maxframe/dataframe/misc/pivot_table.py +262 -0
- maxframe/dataframe/misc/qcut.py +104 -0
- maxframe/dataframe/misc/select_dtypes.py +104 -0
- maxframe/dataframe/misc/shift.py +256 -0
- maxframe/dataframe/misc/stack.py +238 -0
- maxframe/dataframe/misc/string_.py +221 -0
- maxframe/dataframe/misc/tests/__init__.py +13 -0
- maxframe/dataframe/misc/tests/test_misc.py +468 -0
- maxframe/dataframe/misc/to_numeric.py +178 -0
- maxframe/dataframe/misc/transform.py +361 -0
- maxframe/dataframe/misc/transpose.py +136 -0
- maxframe/dataframe/misc/value_counts.py +182 -0
- maxframe/dataframe/missing/__init__.py +53 -0
- maxframe/dataframe/missing/checkna.py +223 -0
- maxframe/dataframe/missing/dropna.py +280 -0
- maxframe/dataframe/missing/fillna.py +275 -0
- maxframe/dataframe/missing/replace.py +439 -0
- maxframe/dataframe/missing/tests/__init__.py +13 -0
- maxframe/dataframe/missing/tests/test_missing.py +89 -0
- maxframe/dataframe/operators.py +273 -0
- maxframe/dataframe/plotting/__init__.py +40 -0
- maxframe/dataframe/plotting/core.py +78 -0
- maxframe/dataframe/plotting/tests/__init__.py +13 -0
- maxframe/dataframe/plotting/tests/test_plotting.py +136 -0
- maxframe/dataframe/reduction/__init__.py +107 -0
- maxframe/dataframe/reduction/aggregation.py +344 -0
- maxframe/dataframe/reduction/all.py +78 -0
- maxframe/dataframe/reduction/any.py +78 -0
- maxframe/dataframe/reduction/core.py +837 -0
- maxframe/dataframe/reduction/count.py +59 -0
- maxframe/dataframe/reduction/cummax.py +30 -0
- maxframe/dataframe/reduction/cummin.py +30 -0
- maxframe/dataframe/reduction/cumprod.py +30 -0
- maxframe/dataframe/reduction/cumsum.py +30 -0
- maxframe/dataframe/reduction/custom_reduction.py +42 -0
- maxframe/dataframe/reduction/kurtosis.py +104 -0
- maxframe/dataframe/reduction/max.py +65 -0
- maxframe/dataframe/reduction/mean.py +61 -0
- maxframe/dataframe/reduction/min.py +65 -0
- maxframe/dataframe/reduction/nunique.py +141 -0
- maxframe/dataframe/reduction/prod.py +76 -0
- maxframe/dataframe/reduction/reduction_size.py +36 -0
- maxframe/dataframe/reduction/sem.py +69 -0
- maxframe/dataframe/reduction/skew.py +89 -0
- maxframe/dataframe/reduction/std.py +53 -0
- maxframe/dataframe/reduction/str_concat.py +48 -0
- maxframe/dataframe/reduction/sum.py +77 -0
- maxframe/dataframe/reduction/tests/__init__.py +13 -0
- maxframe/dataframe/reduction/tests/test_reduction.py +486 -0
- maxframe/dataframe/reduction/unique.py +90 -0
- maxframe/dataframe/reduction/var.py +72 -0
- maxframe/dataframe/sort/__init__.py +34 -0
- maxframe/dataframe/sort/core.py +36 -0
- maxframe/dataframe/sort/sort_index.py +153 -0
- maxframe/dataframe/sort/sort_values.py +311 -0
- maxframe/dataframe/sort/tests/__init__.py +13 -0
- maxframe/dataframe/sort/tests/test_sort.py +81 -0
- maxframe/dataframe/statistics/__init__.py +33 -0
- maxframe/dataframe/statistics/corr.py +280 -0
- maxframe/dataframe/statistics/quantile.py +341 -0
- maxframe/dataframe/statistics/tests/__init__.py +13 -0
- maxframe/dataframe/statistics/tests/test_statistics.py +82 -0
- maxframe/dataframe/tests/__init__.py +13 -0
- maxframe/dataframe/tests/test_initializer.py +29 -0
- maxframe/dataframe/tseries/__init__.py +13 -0
- maxframe/dataframe/tseries/tests/__init__.py +13 -0
- maxframe/dataframe/tseries/tests/test_tseries.py +30 -0
- maxframe/dataframe/tseries/to_datetime.py +297 -0
- maxframe/dataframe/ufunc/__init__.py +27 -0
- maxframe/dataframe/ufunc/tensor.py +54 -0
- maxframe/dataframe/ufunc/ufunc.py +52 -0
- maxframe/dataframe/utils.py +1267 -0
- maxframe/dataframe/window/__init__.py +29 -0
- maxframe/dataframe/window/aggregation.py +96 -0
- maxframe/dataframe/window/core.py +69 -0
- maxframe/dataframe/window/ewm.py +249 -0
- maxframe/dataframe/window/expanding.py +147 -0
- maxframe/dataframe/window/rolling.py +376 -0
- maxframe/dataframe/window/tests/__init__.py +13 -0
- maxframe/dataframe/window/tests/test_ewm.py +70 -0
- maxframe/dataframe/window/tests/test_expanding.py +66 -0
- maxframe/dataframe/window/tests/test_rolling.py +57 -0
- maxframe/env.py +33 -0
- maxframe/errors.py +21 -0
- maxframe/extension.py +81 -0
- maxframe/learn/__init__.py +17 -0
- maxframe/learn/contrib/__init__.py +17 -0
- maxframe/learn/contrib/pytorch/__init__.py +16 -0
- maxframe/learn/contrib/pytorch/run_function.py +110 -0
- maxframe/learn/contrib/pytorch/run_script.py +102 -0
- maxframe/learn/contrib/pytorch/tests/__init__.py +13 -0
- maxframe/learn/contrib/pytorch/tests/test_pytorch.py +42 -0
- maxframe/learn/contrib/utils.py +52 -0
- maxframe/learn/contrib/xgboost/__init__.py +26 -0
- maxframe/learn/contrib/xgboost/classifier.py +86 -0
- maxframe/learn/contrib/xgboost/core.py +156 -0
- maxframe/learn/contrib/xgboost/dmatrix.py +150 -0
- maxframe/learn/contrib/xgboost/predict.py +138 -0
- maxframe/learn/contrib/xgboost/regressor.py +78 -0
- maxframe/learn/contrib/xgboost/tests/__init__.py +13 -0
- maxframe/learn/contrib/xgboost/tests/test_core.py +43 -0
- maxframe/learn/contrib/xgboost/train.py +121 -0
- maxframe/learn/utils/__init__.py +15 -0
- maxframe/learn/utils/core.py +29 -0
- maxframe/lib/__init__.py +15 -0
- maxframe/lib/aio/__init__.py +27 -0
- maxframe/lib/aio/_runners.py +162 -0
- maxframe/lib/aio/_threads.py +35 -0
- maxframe/lib/aio/base.py +82 -0
- maxframe/lib/aio/file.py +85 -0
- maxframe/lib/aio/isolation.py +100 -0
- maxframe/lib/aio/lru.py +242 -0
- maxframe/lib/aio/parallelism.py +37 -0
- maxframe/lib/aio/tests/__init__.py +13 -0
- maxframe/lib/aio/tests/test_aio_file.py +55 -0
- maxframe/lib/compression.py +55 -0
- maxframe/lib/cython/__init__.py +13 -0
- maxframe/lib/cython/libcpp.pxd +30 -0
- maxframe/lib/filesystem/__init__.py +21 -0
- maxframe/lib/filesystem/_glob.py +173 -0
- maxframe/lib/filesystem/_oss_lib/__init__.py +13 -0
- maxframe/lib/filesystem/_oss_lib/common.py +198 -0
- maxframe/lib/filesystem/_oss_lib/glob.py +147 -0
- maxframe/lib/filesystem/_oss_lib/handle.py +156 -0
- maxframe/lib/filesystem/arrow.py +236 -0
- maxframe/lib/filesystem/base.py +263 -0
- maxframe/lib/filesystem/core.py +95 -0
- maxframe/lib/filesystem/fsmap.py +164 -0
- maxframe/lib/filesystem/hdfs.py +31 -0
- maxframe/lib/filesystem/local.py +112 -0
- maxframe/lib/filesystem/oss.py +157 -0
- maxframe/lib/filesystem/tests/__init__.py +13 -0
- maxframe/lib/filesystem/tests/test_filesystem.py +223 -0
- maxframe/lib/filesystem/tests/test_oss.py +182 -0
- maxframe/lib/functools_compat.py +81 -0
- maxframe/lib/mmh3.cpython-39-darwin.so +0 -0
- maxframe/lib/mmh3_src/MurmurHash3.cpp +339 -0
- maxframe/lib/mmh3_src/MurmurHash3.h +43 -0
- maxframe/lib/mmh3_src/mmh3module.cpp +387 -0
- maxframe/lib/sparse/__init__.py +861 -0
- maxframe/lib/sparse/array.py +1604 -0
- maxframe/lib/sparse/core.py +92 -0
- maxframe/lib/sparse/matrix.py +241 -0
- maxframe/lib/sparse/tests/__init__.py +15 -0
- maxframe/lib/sparse/tests/test_sparse.py +476 -0
- maxframe/lib/sparse/vector.py +150 -0
- maxframe/lib/tblib/LICENSE +20 -0
- maxframe/lib/tblib/__init__.py +327 -0
- maxframe/lib/tblib/cpython.py +83 -0
- maxframe/lib/tblib/decorators.py +44 -0
- maxframe/lib/tblib/pickling_support.py +90 -0
- maxframe/lib/tests/__init__.py +13 -0
- maxframe/lib/tests/test_wrapped_pickle.py +51 -0
- maxframe/lib/version.py +620 -0
- maxframe/lib/wrapped_pickle.py +139 -0
- maxframe/mixin.py +100 -0
- maxframe/odpsio/__init__.py +21 -0
- maxframe/odpsio/arrow.py +91 -0
- maxframe/odpsio/schema.py +364 -0
- maxframe/odpsio/tableio.py +322 -0
- maxframe/odpsio/tests/__init__.py +13 -0
- maxframe/odpsio/tests/test_arrow.py +88 -0
- maxframe/odpsio/tests/test_schema.py +297 -0
- maxframe/odpsio/tests/test_tableio.py +136 -0
- maxframe/odpsio/tests/test_volumeio.py +90 -0
- maxframe/odpsio/volumeio.py +95 -0
- maxframe/opcodes.py +590 -0
- maxframe/protocol.py +415 -0
- maxframe/remote/__init__.py +18 -0
- maxframe/remote/core.py +210 -0
- maxframe/remote/run_script.py +121 -0
- maxframe/serialization/__init__.py +26 -0
- maxframe/serialization/arrow.py +95 -0
- maxframe/serialization/core.cpython-39-darwin.so +0 -0
- maxframe/serialization/core.pxd +44 -0
- maxframe/serialization/core.pyi +61 -0
- maxframe/serialization/core.pyx +1094 -0
- maxframe/serialization/exception.py +86 -0
- maxframe/serialization/maxframe_objects.py +39 -0
- maxframe/serialization/numpy.py +91 -0
- maxframe/serialization/pandas.py +202 -0
- maxframe/serialization/scipy.py +71 -0
- maxframe/serialization/serializables/__init__.py +55 -0
- maxframe/serialization/serializables/core.py +262 -0
- maxframe/serialization/serializables/field.py +624 -0
- maxframe/serialization/serializables/field_type.py +589 -0
- maxframe/serialization/serializables/tests/__init__.py +13 -0
- maxframe/serialization/serializables/tests/test_field_type.py +121 -0
- maxframe/serialization/serializables/tests/test_serializable.py +250 -0
- maxframe/serialization/tests/__init__.py +13 -0
- maxframe/serialization/tests/test_serial.py +412 -0
- maxframe/session.py +1310 -0
- maxframe/tensor/__init__.py +183 -0
- maxframe/tensor/arithmetic/__init__.py +315 -0
- maxframe/tensor/arithmetic/abs.py +68 -0
- maxframe/tensor/arithmetic/absolute.py +68 -0
- maxframe/tensor/arithmetic/add.py +82 -0
- maxframe/tensor/arithmetic/angle.py +72 -0
- maxframe/tensor/arithmetic/arccos.py +104 -0
- maxframe/tensor/arithmetic/arccosh.py +91 -0
- maxframe/tensor/arithmetic/arcsin.py +94 -0
- maxframe/tensor/arithmetic/arcsinh.py +86 -0
- maxframe/tensor/arithmetic/arctan.py +106 -0
- maxframe/tensor/arithmetic/arctan2.py +128 -0
- maxframe/tensor/arithmetic/arctanh.py +86 -0
- maxframe/tensor/arithmetic/around.py +114 -0
- maxframe/tensor/arithmetic/bitand.py +95 -0
- maxframe/tensor/arithmetic/bitor.py +102 -0
- maxframe/tensor/arithmetic/bitxor.py +95 -0
- maxframe/tensor/arithmetic/cbrt.py +66 -0
- maxframe/tensor/arithmetic/ceil.py +71 -0
- maxframe/tensor/arithmetic/clip.py +165 -0
- maxframe/tensor/arithmetic/conj.py +74 -0
- maxframe/tensor/arithmetic/copysign.py +78 -0
- maxframe/tensor/arithmetic/core.py +544 -0
- maxframe/tensor/arithmetic/cos.py +85 -0
- maxframe/tensor/arithmetic/cosh.py +72 -0
- maxframe/tensor/arithmetic/deg2rad.py +72 -0
- maxframe/tensor/arithmetic/degrees.py +77 -0
- maxframe/tensor/arithmetic/divide.py +114 -0
- maxframe/tensor/arithmetic/equal.py +76 -0
- maxframe/tensor/arithmetic/exp.py +106 -0
- maxframe/tensor/arithmetic/exp2.py +67 -0
- maxframe/tensor/arithmetic/expm1.py +79 -0
- maxframe/tensor/arithmetic/fabs.py +74 -0
- maxframe/tensor/arithmetic/fix.py +69 -0
- maxframe/tensor/arithmetic/float_power.py +103 -0
- maxframe/tensor/arithmetic/floor.py +77 -0
- maxframe/tensor/arithmetic/floordiv.py +94 -0
- maxframe/tensor/arithmetic/fmax.py +105 -0
- maxframe/tensor/arithmetic/fmin.py +106 -0
- maxframe/tensor/arithmetic/fmod.py +99 -0
- maxframe/tensor/arithmetic/frexp.py +92 -0
- maxframe/tensor/arithmetic/greater.py +77 -0
- maxframe/tensor/arithmetic/greater_equal.py +69 -0
- maxframe/tensor/arithmetic/hypot.py +77 -0
- maxframe/tensor/arithmetic/i0.py +89 -0
- maxframe/tensor/arithmetic/imag.py +67 -0
- maxframe/tensor/arithmetic/invert.py +110 -0
- maxframe/tensor/arithmetic/isclose.py +115 -0
- maxframe/tensor/arithmetic/iscomplex.py +64 -0
- maxframe/tensor/arithmetic/isfinite.py +106 -0
- maxframe/tensor/arithmetic/isinf.py +103 -0
- maxframe/tensor/arithmetic/isnan.py +82 -0
- maxframe/tensor/arithmetic/isreal.py +63 -0
- maxframe/tensor/arithmetic/ldexp.py +99 -0
- maxframe/tensor/arithmetic/less.py +69 -0
- maxframe/tensor/arithmetic/less_equal.py +69 -0
- maxframe/tensor/arithmetic/log.py +92 -0
- maxframe/tensor/arithmetic/log10.py +85 -0
- maxframe/tensor/arithmetic/log1p.py +95 -0
- maxframe/tensor/arithmetic/log2.py +85 -0
- maxframe/tensor/arithmetic/logaddexp.py +80 -0
- maxframe/tensor/arithmetic/logaddexp2.py +78 -0
- maxframe/tensor/arithmetic/logical_and.py +81 -0
- maxframe/tensor/arithmetic/logical_not.py +74 -0
- maxframe/tensor/arithmetic/logical_or.py +82 -0
- maxframe/tensor/arithmetic/logical_xor.py +88 -0
- maxframe/tensor/arithmetic/lshift.py +82 -0
- maxframe/tensor/arithmetic/maximum.py +108 -0
- maxframe/tensor/arithmetic/minimum.py +108 -0
- maxframe/tensor/arithmetic/mod.py +104 -0
- maxframe/tensor/arithmetic/modf.py +83 -0
- maxframe/tensor/arithmetic/multiply.py +81 -0
- maxframe/tensor/arithmetic/nan_to_num.py +99 -0
- maxframe/tensor/arithmetic/negative.py +65 -0
- maxframe/tensor/arithmetic/nextafter.py +68 -0
- maxframe/tensor/arithmetic/not_equal.py +72 -0
- maxframe/tensor/arithmetic/positive.py +47 -0
- maxframe/tensor/arithmetic/power.py +106 -0
- maxframe/tensor/arithmetic/rad2deg.py +71 -0
- maxframe/tensor/arithmetic/radians.py +77 -0
- maxframe/tensor/arithmetic/real.py +70 -0
- maxframe/tensor/arithmetic/reciprocal.py +76 -0
- maxframe/tensor/arithmetic/rint.py +68 -0
- maxframe/tensor/arithmetic/rshift.py +81 -0
- maxframe/tensor/arithmetic/setimag.py +29 -0
- maxframe/tensor/arithmetic/setreal.py +29 -0
- maxframe/tensor/arithmetic/sign.py +81 -0
- maxframe/tensor/arithmetic/signbit.py +65 -0
- maxframe/tensor/arithmetic/sin.py +98 -0
- maxframe/tensor/arithmetic/sinc.py +102 -0
- maxframe/tensor/arithmetic/sinh.py +93 -0
- maxframe/tensor/arithmetic/spacing.py +72 -0
- maxframe/tensor/arithmetic/sqrt.py +81 -0
- maxframe/tensor/arithmetic/square.py +69 -0
- maxframe/tensor/arithmetic/subtract.py +81 -0
- maxframe/tensor/arithmetic/tan.py +88 -0
- maxframe/tensor/arithmetic/tanh.py +92 -0
- maxframe/tensor/arithmetic/tests/__init__.py +15 -0
- maxframe/tensor/arithmetic/tests/test_arithmetic.py +414 -0
- maxframe/tensor/arithmetic/truediv.py +104 -0
- maxframe/tensor/arithmetic/trunc.py +72 -0
- maxframe/tensor/arithmetic/utils.py +65 -0
- maxframe/tensor/array_utils.py +186 -0
- maxframe/tensor/base/__init__.py +34 -0
- maxframe/tensor/base/astype.py +119 -0
- maxframe/tensor/base/atleast_1d.py +74 -0
- maxframe/tensor/base/broadcast_to.py +89 -0
- maxframe/tensor/base/ravel.py +92 -0
- maxframe/tensor/base/tests/__init__.py +13 -0
- maxframe/tensor/base/tests/test_base.py +114 -0
- maxframe/tensor/base/transpose.py +125 -0
- maxframe/tensor/base/unique.py +205 -0
- maxframe/tensor/base/where.py +127 -0
- maxframe/tensor/core.py +724 -0
- maxframe/tensor/datasource/__init__.py +32 -0
- maxframe/tensor/datasource/arange.py +156 -0
- maxframe/tensor/datasource/array.py +415 -0
- maxframe/tensor/datasource/core.py +109 -0
- maxframe/tensor/datasource/empty.py +169 -0
- maxframe/tensor/datasource/from_dataframe.py +70 -0
- maxframe/tensor/datasource/from_dense.py +54 -0
- maxframe/tensor/datasource/from_sparse.py +47 -0
- maxframe/tensor/datasource/full.py +186 -0
- maxframe/tensor/datasource/ones.py +173 -0
- maxframe/tensor/datasource/scalar.py +40 -0
- maxframe/tensor/datasource/tests/__init__.py +13 -0
- maxframe/tensor/datasource/tests/test_datasource.py +278 -0
- maxframe/tensor/datasource/zeros.py +188 -0
- maxframe/tensor/fetch/__init__.py +15 -0
- maxframe/tensor/fetch/core.py +54 -0
- maxframe/tensor/indexing/__init__.py +47 -0
- maxframe/tensor/indexing/choose.py +196 -0
- maxframe/tensor/indexing/compress.py +124 -0
- maxframe/tensor/indexing/core.py +190 -0
- maxframe/tensor/indexing/extract.py +71 -0
- maxframe/tensor/indexing/fill_diagonal.py +183 -0
- maxframe/tensor/indexing/flatnonzero.py +60 -0
- maxframe/tensor/indexing/getitem.py +175 -0
- maxframe/tensor/indexing/nonzero.py +120 -0
- maxframe/tensor/indexing/setitem.py +132 -0
- maxframe/tensor/indexing/slice.py +29 -0
- maxframe/tensor/indexing/take.py +130 -0
- maxframe/tensor/indexing/tests/__init__.py +15 -0
- maxframe/tensor/indexing/tests/test_indexing.py +234 -0
- maxframe/tensor/indexing/unravel_index.py +103 -0
- maxframe/tensor/merge/__init__.py +15 -0
- maxframe/tensor/merge/stack.py +132 -0
- maxframe/tensor/merge/tests/__init__.py +13 -0
- maxframe/tensor/merge/tests/test_merge.py +52 -0
- maxframe/tensor/operators.py +123 -0
- maxframe/tensor/random/__init__.py +168 -0
- maxframe/tensor/random/beta.py +87 -0
- maxframe/tensor/random/binomial.py +137 -0
- maxframe/tensor/random/bytes.py +39 -0
- maxframe/tensor/random/chisquare.py +110 -0
- maxframe/tensor/random/choice.py +186 -0
- maxframe/tensor/random/core.py +234 -0
- maxframe/tensor/random/dirichlet.py +123 -0
- maxframe/tensor/random/exponential.py +94 -0
- maxframe/tensor/random/f.py +135 -0
- maxframe/tensor/random/gamma.py +128 -0
- maxframe/tensor/random/geometric.py +93 -0
- maxframe/tensor/random/gumbel.py +167 -0
- maxframe/tensor/random/hypergeometric.py +148 -0
- maxframe/tensor/random/laplace.py +133 -0
- maxframe/tensor/random/logistic.py +129 -0
- maxframe/tensor/random/lognormal.py +159 -0
- maxframe/tensor/random/logseries.py +122 -0
- maxframe/tensor/random/multinomial.py +133 -0
- maxframe/tensor/random/multivariate_normal.py +192 -0
- maxframe/tensor/random/negative_binomial.py +125 -0
- maxframe/tensor/random/noncentral_chisquare.py +132 -0
- maxframe/tensor/random/noncentral_f.py +126 -0
- maxframe/tensor/random/normal.py +143 -0
- maxframe/tensor/random/pareto.py +140 -0
- maxframe/tensor/random/permutation.py +104 -0
- maxframe/tensor/random/poisson.py +111 -0
- maxframe/tensor/random/power.py +142 -0
- maxframe/tensor/random/rand.py +82 -0
- maxframe/tensor/random/randint.py +121 -0
- maxframe/tensor/random/randn.py +96 -0
- maxframe/tensor/random/random_integers.py +123 -0
- maxframe/tensor/random/random_sample.py +86 -0
- maxframe/tensor/random/rayleigh.py +110 -0
- maxframe/tensor/random/shuffle.py +61 -0
- maxframe/tensor/random/standard_cauchy.py +105 -0
- maxframe/tensor/random/standard_exponential.py +72 -0
- maxframe/tensor/random/standard_gamma.py +120 -0
- maxframe/tensor/random/standard_normal.py +74 -0
- maxframe/tensor/random/standard_t.py +135 -0
- maxframe/tensor/random/tests/__init__.py +15 -0
- maxframe/tensor/random/tests/test_random.py +167 -0
- maxframe/tensor/random/triangular.py +119 -0
- maxframe/tensor/random/uniform.py +131 -0
- maxframe/tensor/random/vonmises.py +131 -0
- maxframe/tensor/random/wald.py +114 -0
- maxframe/tensor/random/weibull.py +140 -0
- maxframe/tensor/random/zipf.py +122 -0
- maxframe/tensor/rechunk/__init__.py +26 -0
- maxframe/tensor/rechunk/rechunk.py +43 -0
- maxframe/tensor/reduction/__init__.py +66 -0
- maxframe/tensor/reduction/all.py +103 -0
- maxframe/tensor/reduction/allclose.py +88 -0
- maxframe/tensor/reduction/any.py +105 -0
- maxframe/tensor/reduction/argmax.py +103 -0
- maxframe/tensor/reduction/argmin.py +103 -0
- maxframe/tensor/reduction/array_equal.py +64 -0
- maxframe/tensor/reduction/core.py +168 -0
- maxframe/tensor/reduction/count_nonzero.py +81 -0
- maxframe/tensor/reduction/cumprod.py +97 -0
- maxframe/tensor/reduction/cumsum.py +101 -0
- maxframe/tensor/reduction/max.py +120 -0
- maxframe/tensor/reduction/mean.py +123 -0
- maxframe/tensor/reduction/min.py +120 -0
- maxframe/tensor/reduction/nanargmax.py +82 -0
- maxframe/tensor/reduction/nanargmin.py +76 -0
- maxframe/tensor/reduction/nancumprod.py +91 -0
- maxframe/tensor/reduction/nancumsum.py +94 -0
- maxframe/tensor/reduction/nanmax.py +111 -0
- maxframe/tensor/reduction/nanmean.py +106 -0
- maxframe/tensor/reduction/nanmin.py +111 -0
- maxframe/tensor/reduction/nanprod.py +94 -0
- maxframe/tensor/reduction/nanstd.py +126 -0
- maxframe/tensor/reduction/nansum.py +115 -0
- maxframe/tensor/reduction/nanvar.py +149 -0
- maxframe/tensor/reduction/prod.py +130 -0
- maxframe/tensor/reduction/std.py +134 -0
- maxframe/tensor/reduction/sum.py +125 -0
- maxframe/tensor/reduction/tests/__init__.py +13 -0
- maxframe/tensor/reduction/tests/test_reduction.py +181 -0
- maxframe/tensor/reduction/var.py +176 -0
- maxframe/tensor/reshape/__init__.py +17 -0
- maxframe/tensor/reshape/reshape.py +188 -0
- maxframe/tensor/reshape/tests/__init__.py +15 -0
- maxframe/tensor/reshape/tests/test_reshape.py +37 -0
- maxframe/tensor/statistics/__init__.py +13 -0
- maxframe/tensor/statistics/percentile.py +175 -0
- maxframe/tensor/statistics/quantile.py +288 -0
- maxframe/tensor/ufunc/__init__.py +26 -0
- maxframe/tensor/ufunc/ufunc.py +200 -0
- maxframe/tensor/utils.py +718 -0
- maxframe/tests/__init__.py +13 -0
- maxframe/tests/test_codegen.py +69 -0
- maxframe/tests/test_protocol.py +144 -0
- maxframe/tests/test_utils.py +376 -0
- maxframe/tests/utils.py +164 -0
- maxframe/typing_.py +37 -0
- maxframe/udf.py +134 -0
- maxframe/utils.py +1114 -0
- maxframe-0.1.0b5.dist-info/METADATA +104 -0
- maxframe-0.1.0b5.dist-info/RECORD +647 -0
- maxframe-0.1.0b5.dist-info/WHEEL +5 -0
- maxframe-0.1.0b5.dist-info/top_level.txt +3 -0
- maxframe_client/__init__.py +17 -0
- maxframe_client/clients/__init__.py +13 -0
- maxframe_client/clients/framedriver.py +118 -0
- maxframe_client/clients/spe.py +104 -0
- maxframe_client/conftest.py +15 -0
- maxframe_client/fetcher.py +264 -0
- maxframe_client/session/__init__.py +22 -0
- maxframe_client/session/consts.py +36 -0
- maxframe_client/session/graph.py +119 -0
- maxframe_client/session/odps.py +482 -0
- maxframe_client/session/task.py +280 -0
- maxframe_client/session/tests/__init__.py +13 -0
- maxframe_client/session/tests/test_task.py +85 -0
- maxframe_client/tests/__init__.py +13 -0
- maxframe_client/tests/test_fetcher.py +89 -0
- maxframe_client/tests/test_session.py +255 -0
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
from numbers import Integral
|
|
18
|
+
|
|
19
|
+
import numpy as np
|
|
20
|
+
|
|
21
|
+
from ... import opcodes
|
|
22
|
+
from ...serialization.serializables import (
|
|
23
|
+
AnyField,
|
|
24
|
+
BoolField,
|
|
25
|
+
FieldTypes,
|
|
26
|
+
KeyField,
|
|
27
|
+
TupleField,
|
|
28
|
+
)
|
|
29
|
+
from ..core import TENSOR_TYPE, TensorOrder
|
|
30
|
+
from ..datasource import array
|
|
31
|
+
from ..operators import TensorOperatorMixin
|
|
32
|
+
from ..utils import gen_random_seeds
|
|
33
|
+
from .core import TensorRandomOperator
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class TensorChoice(TensorRandomOperator, TensorOperatorMixin):
|
|
37
|
+
_op_type_ = opcodes.RAND_CHOICE
|
|
38
|
+
|
|
39
|
+
a = AnyField("a")
|
|
40
|
+
size = TupleField("size", FieldTypes.int64)
|
|
41
|
+
replace = BoolField("replace")
|
|
42
|
+
p = KeyField("p")
|
|
43
|
+
|
|
44
|
+
def _set_inputs(self, inputs):
|
|
45
|
+
super()._set_inputs(inputs)
|
|
46
|
+
if isinstance(self.a, TENSOR_TYPE):
|
|
47
|
+
self.a = self._inputs[0]
|
|
48
|
+
if isinstance(self.p, TENSOR_TYPE):
|
|
49
|
+
self.p = self._inputs[-1]
|
|
50
|
+
|
|
51
|
+
def __call__(self, a, p, chunk_size=None):
|
|
52
|
+
inputs = []
|
|
53
|
+
if isinstance(a, TENSOR_TYPE):
|
|
54
|
+
inputs.append(a)
|
|
55
|
+
if isinstance(p, TENSOR_TYPE):
|
|
56
|
+
inputs.append(p)
|
|
57
|
+
return self.new_tensor(
|
|
58
|
+
inputs,
|
|
59
|
+
shape=self.size,
|
|
60
|
+
raw_chunk_size=chunk_size,
|
|
61
|
+
order=TensorOrder.C_ORDER,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def choice(random_state, a, size=None, replace=True, p=None, chunk_size=None, gpu=None):
|
|
66
|
+
"""
|
|
67
|
+
Generates a random sample from a given 1-D array
|
|
68
|
+
|
|
69
|
+
Parameters
|
|
70
|
+
-----------
|
|
71
|
+
a : 1-D array-like or int
|
|
72
|
+
If a tensor, a random sample is generated from its elements.
|
|
73
|
+
If an int, the random sample is generated as if a were mt.arange(a)
|
|
74
|
+
size : int or tuple of ints, optional
|
|
75
|
+
Output shape. If the given shape is, e.g., ``(m, n, k)``, then
|
|
76
|
+
``m * n * k`` samples are drawn. Default is None, in which case a
|
|
77
|
+
single value is returned.
|
|
78
|
+
replace : boolean, optional
|
|
79
|
+
Whether the sample is with or without replacement
|
|
80
|
+
p : 1-D array-like, optional
|
|
81
|
+
The probabilities associated with each entry in a.
|
|
82
|
+
If not given the sample assumes a uniform distribution over all
|
|
83
|
+
entries in a.
|
|
84
|
+
chunk_size : int or tuple of int or tuple of ints, optional
|
|
85
|
+
Desired chunk size on each dimension
|
|
86
|
+
gpu : bool, optional
|
|
87
|
+
Allocate the tensor on GPU if True, False as default
|
|
88
|
+
|
|
89
|
+
Returns
|
|
90
|
+
--------
|
|
91
|
+
samples : single item or tensor
|
|
92
|
+
The generated random samples
|
|
93
|
+
|
|
94
|
+
Raises
|
|
95
|
+
-------
|
|
96
|
+
ValueError
|
|
97
|
+
If a is an int and less than zero, if a or p are not 1-dimensional,
|
|
98
|
+
if a is an array-like of size 0, if p is not a vector of
|
|
99
|
+
probabilities, if a and p have different lengths, or if
|
|
100
|
+
replace=False and the sample size is greater than the population
|
|
101
|
+
size
|
|
102
|
+
|
|
103
|
+
See Also
|
|
104
|
+
---------
|
|
105
|
+
randint, shuffle, permutation
|
|
106
|
+
|
|
107
|
+
Examples
|
|
108
|
+
---------
|
|
109
|
+
Generate a uniform random sample from mt.arange(5) of size 3:
|
|
110
|
+
|
|
111
|
+
>>> import maxframe.tensor as mt
|
|
112
|
+
|
|
113
|
+
>>> mt.random.choice(5, 3).execute()
|
|
114
|
+
array([0, 3, 4])
|
|
115
|
+
>>> #This is equivalent to mt.random.randint(0,5,3)
|
|
116
|
+
|
|
117
|
+
Generate a non-uniform random sample from np.arange(5) of size 3:
|
|
118
|
+
|
|
119
|
+
>>> mt.random.choice(5, 3, p=[0.1, 0, 0.3, 0.6, 0]).execute()
|
|
120
|
+
array([3, 3, 0])
|
|
121
|
+
|
|
122
|
+
Generate a uniform random sample from mt.arange(5) of size 3 without
|
|
123
|
+
replacement:
|
|
124
|
+
|
|
125
|
+
>>> mt.random.choice(5, 3, replace=False).execute()
|
|
126
|
+
array([3,1,0])
|
|
127
|
+
>>> #This is equivalent to np.random.permutation(np.arange(5))[:3]
|
|
128
|
+
|
|
129
|
+
Generate a non-uniform random sample from mt.arange(5) of size
|
|
130
|
+
3 without replacement:
|
|
131
|
+
|
|
132
|
+
>>> mt.random.choice(5, 3, replace=False, p=[0.1, 0, 0.3, 0.6, 0]).execute()
|
|
133
|
+
array([2, 3, 0])
|
|
134
|
+
|
|
135
|
+
Any of the above can be repeated with an arbitrary array-like
|
|
136
|
+
instead of just integers. For instance:
|
|
137
|
+
|
|
138
|
+
>>> aa_milne_arr = ['pooh', 'rabbit', 'piglet', 'Christopher']
|
|
139
|
+
>>> np.random.choice(aa_milne_arr, 5, p=[0.5, 0.1, 0.1, 0.3])
|
|
140
|
+
array(['pooh', 'pooh', 'pooh', 'Christopher', 'piglet'],
|
|
141
|
+
dtype='|S11')
|
|
142
|
+
"""
|
|
143
|
+
|
|
144
|
+
if isinstance(a, Integral):
|
|
145
|
+
if a <= 0:
|
|
146
|
+
raise ValueError("a must be greater than 0")
|
|
147
|
+
a_size = a
|
|
148
|
+
dtype = np.random.choice(
|
|
149
|
+
1, size=(), p=np.array([1]) if p is not None else p
|
|
150
|
+
).dtype
|
|
151
|
+
else:
|
|
152
|
+
a = array(a)
|
|
153
|
+
if a.ndim != 1:
|
|
154
|
+
raise ValueError("a must be one dimensional")
|
|
155
|
+
a_size = a.size
|
|
156
|
+
dtype = a.dtype
|
|
157
|
+
|
|
158
|
+
if p is not None:
|
|
159
|
+
if not isinstance(p, TENSOR_TYPE):
|
|
160
|
+
p = np.asarray(p)
|
|
161
|
+
if not np.isclose(p.sum(), 1, rtol=1e-7, atol=0):
|
|
162
|
+
raise ValueError("probabilities do not sum to 1")
|
|
163
|
+
p = array(p, chunk_size=p.size)
|
|
164
|
+
if p.ndim != 1:
|
|
165
|
+
raise ValueError("p must be one dimensional")
|
|
166
|
+
|
|
167
|
+
if size is None:
|
|
168
|
+
size = ()
|
|
169
|
+
length = 1
|
|
170
|
+
else:
|
|
171
|
+
try:
|
|
172
|
+
tuple(size)
|
|
173
|
+
length = np.prod(size)
|
|
174
|
+
except TypeError:
|
|
175
|
+
length = size
|
|
176
|
+
if replace is False and length > a_size:
|
|
177
|
+
raise ValueError(
|
|
178
|
+
"Cannot take a larger sample than population when 'replace=False'"
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
size = random_state._handle_size(size)
|
|
182
|
+
seed = gen_random_seeds(1, random_state.to_numpy())[0]
|
|
183
|
+
op = TensorChoice(
|
|
184
|
+
a=a, p=p, seed=seed, replace=replace, size=size, dtype=dtype, gpu=gpu
|
|
185
|
+
)
|
|
186
|
+
return op(a, p, chunk_size=chunk_size)
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
from collections.abc import Iterable
|
|
17
|
+
from contextlib import contextmanager
|
|
18
|
+
|
|
19
|
+
import numpy as np
|
|
20
|
+
|
|
21
|
+
from ...serialization.serializables import FieldTypes, Int32Field, TupleField
|
|
22
|
+
from ..base import broadcast_to
|
|
23
|
+
from ..core import TENSOR_TYPE
|
|
24
|
+
from ..datasource import tensor as astensor
|
|
25
|
+
from ..operators import TensorMapReduceOperator, TensorOperator, TensorOperatorMixin
|
|
26
|
+
from ..utils import broadcast_shape
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class RandomState:
|
|
30
|
+
def __init__(self, seed=None):
|
|
31
|
+
self._random_state = np.random.RandomState(seed=seed)
|
|
32
|
+
|
|
33
|
+
def seed(self, seed=None):
|
|
34
|
+
"""
|
|
35
|
+
Seed the generator.
|
|
36
|
+
|
|
37
|
+
This method is called when `RandomState` is initialized. It can be
|
|
38
|
+
called again to re-seed the generator. For details, see `RandomState`.
|
|
39
|
+
|
|
40
|
+
Parameters
|
|
41
|
+
----------
|
|
42
|
+
seed : int or 1-d array_like, optional
|
|
43
|
+
Seed for `RandomState`.
|
|
44
|
+
Must be convertible to 32 bit unsigned integers.
|
|
45
|
+
|
|
46
|
+
See Also
|
|
47
|
+
--------
|
|
48
|
+
RandomState
|
|
49
|
+
"""
|
|
50
|
+
self._random_state.seed(seed=seed)
|
|
51
|
+
|
|
52
|
+
def to_numpy(self):
|
|
53
|
+
return self._random_state
|
|
54
|
+
|
|
55
|
+
@classmethod
|
|
56
|
+
def from_numpy(cls, np_random_state):
|
|
57
|
+
state = RandomState()
|
|
58
|
+
state._random_state = np_random_state
|
|
59
|
+
return state
|
|
60
|
+
|
|
61
|
+
@classmethod
|
|
62
|
+
def _handle_size(cls, size):
|
|
63
|
+
if size is None:
|
|
64
|
+
return size
|
|
65
|
+
try:
|
|
66
|
+
return tuple(int(s) for s in size)
|
|
67
|
+
except TypeError:
|
|
68
|
+
return (size,)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
_random_state = RandomState()
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def handle_array(arg):
|
|
75
|
+
if not isinstance(arg, TENSOR_TYPE):
|
|
76
|
+
if not isinstance(arg, Iterable):
|
|
77
|
+
return arg
|
|
78
|
+
|
|
79
|
+
arg = np.asarray(arg)
|
|
80
|
+
return arg[(0,) * max(1, arg.ndim)]
|
|
81
|
+
elif hasattr(arg, "op") and hasattr(arg.op, "data"):
|
|
82
|
+
return arg.op.data[(0,) * max(1, arg.ndim)]
|
|
83
|
+
|
|
84
|
+
return np.empty((0,), dtype=arg.dtype)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
class TensorRandomOperatorMixin(TensorOperatorMixin):
|
|
88
|
+
__slots__ = ()
|
|
89
|
+
|
|
90
|
+
def _calc_shape(self, shapes):
|
|
91
|
+
shapes = list(shapes)
|
|
92
|
+
if getattr(self, "size", None) is not None:
|
|
93
|
+
shapes.append(getattr(self, "size"))
|
|
94
|
+
return broadcast_shape(*shapes)
|
|
95
|
+
|
|
96
|
+
@classmethod
|
|
97
|
+
def _handle_arg(cls, arg, chunk_size):
|
|
98
|
+
if isinstance(arg, (list, np.ndarray)):
|
|
99
|
+
arg = astensor(arg, chunk_size=chunk_size)
|
|
100
|
+
|
|
101
|
+
return arg
|
|
102
|
+
|
|
103
|
+
@contextmanager
|
|
104
|
+
def _get_inputs_shape_by_given_fields(
|
|
105
|
+
self, inputs, shape, raw_chunk_size=None, tensor=True
|
|
106
|
+
):
|
|
107
|
+
fields = getattr(self, "_input_fields_", [])
|
|
108
|
+
to_one_chunk_fields = set(getattr(self, "_into_one_chunk_fields_", list()))
|
|
109
|
+
|
|
110
|
+
field_to_obj = dict()
|
|
111
|
+
to_broadcast_shapes = []
|
|
112
|
+
if fields:
|
|
113
|
+
if getattr(self, fields[0], None) is None:
|
|
114
|
+
# create from beginning
|
|
115
|
+
for field, val in zip(fields, inputs):
|
|
116
|
+
if field not in to_one_chunk_fields:
|
|
117
|
+
if isinstance(val, list):
|
|
118
|
+
val = np.asarray(val)
|
|
119
|
+
if tensor:
|
|
120
|
+
val = self._handle_arg(val, raw_chunk_size)
|
|
121
|
+
if isinstance(val, TENSOR_TYPE):
|
|
122
|
+
field_to_obj[field] = val
|
|
123
|
+
if field not in to_one_chunk_fields:
|
|
124
|
+
to_broadcast_shapes.append(val.shape)
|
|
125
|
+
setattr(self, field, val)
|
|
126
|
+
else:
|
|
127
|
+
inputs_iter = iter(inputs)
|
|
128
|
+
for field in fields:
|
|
129
|
+
if isinstance(getattr(self, field), TENSOR_TYPE):
|
|
130
|
+
field_to_obj[field] = next(inputs_iter)
|
|
131
|
+
|
|
132
|
+
if tensor:
|
|
133
|
+
if shape is None:
|
|
134
|
+
shape = self._calc_shape(to_broadcast_shapes)
|
|
135
|
+
|
|
136
|
+
for field, inp in field_to_obj.items():
|
|
137
|
+
if field not in to_one_chunk_fields:
|
|
138
|
+
field_to_obj[field] = broadcast_to(inp, shape)
|
|
139
|
+
|
|
140
|
+
yield [field_to_obj[f] for f in fields if f in field_to_obj], shape
|
|
141
|
+
|
|
142
|
+
inputs_iter = iter(getattr(self, "_inputs"))
|
|
143
|
+
for field in fields:
|
|
144
|
+
if field in field_to_obj:
|
|
145
|
+
setattr(self, field, next(inputs_iter))
|
|
146
|
+
|
|
147
|
+
@classmethod
|
|
148
|
+
def _get_shape(cls, kws, kw):
|
|
149
|
+
if kw.get("shape") is not None:
|
|
150
|
+
return kw.get("shape")
|
|
151
|
+
elif kws is not None and len(kws) > 0:
|
|
152
|
+
return kws[0].get("shape")
|
|
153
|
+
|
|
154
|
+
def _new_tileables(self, inputs, kws=None, **kw):
|
|
155
|
+
raw_chunk_size = kw.get("chunk_size", None)
|
|
156
|
+
shape = self._get_shape(kws, kw)
|
|
157
|
+
with self._get_inputs_shape_by_given_fields(
|
|
158
|
+
inputs, shape, raw_chunk_size, True
|
|
159
|
+
) as (inputs, shape):
|
|
160
|
+
kw["shape"] = shape
|
|
161
|
+
return super()._new_tileables(inputs, kws=kws, **kw)
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
def _on_serialize_random_state(rs):
|
|
165
|
+
return rs.get_state() if rs is not None else None
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def _on_deserialize_random_state(tup):
|
|
169
|
+
if tup is None:
|
|
170
|
+
return None
|
|
171
|
+
|
|
172
|
+
rs = np.random.RandomState()
|
|
173
|
+
rs.set_state(tup)
|
|
174
|
+
return rs
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def RandomStateField(name, **kwargs):
|
|
178
|
+
kwargs.update(
|
|
179
|
+
dict(
|
|
180
|
+
on_serialize=_on_serialize_random_state,
|
|
181
|
+
on_deserialize=_on_deserialize_random_state,
|
|
182
|
+
)
|
|
183
|
+
)
|
|
184
|
+
return TupleField(name, **kwargs)
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
class TensorSeedOperatorMixin(object):
|
|
188
|
+
@property
|
|
189
|
+
def seed(self):
|
|
190
|
+
return getattr(self, "seed", None)
|
|
191
|
+
|
|
192
|
+
@property
|
|
193
|
+
def args(self):
|
|
194
|
+
if hasattr(self, "_fields_"):
|
|
195
|
+
return self._fields_
|
|
196
|
+
else:
|
|
197
|
+
return [
|
|
198
|
+
field
|
|
199
|
+
for field in self._FIELDS
|
|
200
|
+
if field not in TensorRandomOperator._FIELDS
|
|
201
|
+
]
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
class TensorRandomOperator(TensorSeedOperatorMixin, TensorOperator):
|
|
205
|
+
seed = Int32Field("seed")
|
|
206
|
+
|
|
207
|
+
def __init__(self, dtype=None, **kw):
|
|
208
|
+
dtype = np.dtype(dtype) if dtype is not None else dtype
|
|
209
|
+
if "state" in kw:
|
|
210
|
+
kw["_state"] = kw.pop("state")
|
|
211
|
+
super().__init__(dtype=dtype, **kw)
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
class TensorRandomMapReduceOperator(TensorSeedOperatorMixin, TensorMapReduceOperator):
|
|
215
|
+
seed = Int32Field("seed")
|
|
216
|
+
|
|
217
|
+
def __init__(self, dtype=None, **kw):
|
|
218
|
+
dtype = np.dtype(dtype) if dtype is not None else dtype
|
|
219
|
+
if "state" in kw:
|
|
220
|
+
kw["_state"] = kw.pop("state")
|
|
221
|
+
super().__init__(dtype=dtype, **kw)
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
class TensorDistribution(TensorRandomOperator):
|
|
225
|
+
size = TupleField("size", FieldTypes.int64)
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
class TensorSimpleRandomData(TensorRandomOperator):
|
|
229
|
+
size = TupleField("size", FieldTypes.int64)
|
|
230
|
+
|
|
231
|
+
def __init__(self, size=None, **kw):
|
|
232
|
+
if type(size) is int:
|
|
233
|
+
size = (size,)
|
|
234
|
+
super().__init__(size=size, **kw)
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
from collections.abc import Iterable
|
|
18
|
+
|
|
19
|
+
import numpy as np
|
|
20
|
+
|
|
21
|
+
from ... import opcodes
|
|
22
|
+
from ...serialization.serializables import TupleField
|
|
23
|
+
from ..utils import gen_random_seeds
|
|
24
|
+
from .core import TensorDistribution, TensorRandomOperatorMixin
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class TensorDirichlet(TensorDistribution, TensorRandomOperatorMixin):
|
|
28
|
+
_op_type_ = opcodes.RAND_DIRICHLET
|
|
29
|
+
|
|
30
|
+
_fields_ = "alpha", "size"
|
|
31
|
+
alpha = TupleField("alpha", default=None)
|
|
32
|
+
_func_name = "dirichlet"
|
|
33
|
+
|
|
34
|
+
def _calc_shape(self, shapes):
|
|
35
|
+
shape = super()._calc_shape(shapes)
|
|
36
|
+
return shape + (len(self.alpha),)
|
|
37
|
+
|
|
38
|
+
def __call__(self, chunk_size=None):
|
|
39
|
+
return self.new_tensor(None, None, raw_chunk_size=chunk_size)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def dirichlet(random_state, alpha, size=None, chunk_size=None, gpu=None, dtype=None):
|
|
43
|
+
r"""
|
|
44
|
+
Draw samples from the Dirichlet distribution.
|
|
45
|
+
|
|
46
|
+
Draw `size` samples of dimension k from a Dirichlet distribution. A
|
|
47
|
+
Dirichlet-distributed random variable can be seen as a multivariate
|
|
48
|
+
generalization of a Beta distribution. Dirichlet pdf is the conjugate
|
|
49
|
+
prior of a multinomial in Bayesian inference.
|
|
50
|
+
|
|
51
|
+
Parameters
|
|
52
|
+
----------
|
|
53
|
+
alpha : array
|
|
54
|
+
Parameter of the distribution (k dimension for sample of
|
|
55
|
+
dimension k).
|
|
56
|
+
size : int or tuple of ints, optional
|
|
57
|
+
Output shape. If the given shape is, e.g., ``(m, n, k)``, then
|
|
58
|
+
``m * n * k`` samples are drawn. Default is None, in which case a
|
|
59
|
+
single value is returned.
|
|
60
|
+
chunk_size : int or tuple of int or tuple of ints, optional
|
|
61
|
+
Desired chunk size on each dimension
|
|
62
|
+
gpu : bool, optional
|
|
63
|
+
Allocate the tensor on GPU if True, False as default
|
|
64
|
+
dtype : data-type, optional
|
|
65
|
+
Data-type of the returned tensor.
|
|
66
|
+
|
|
67
|
+
Returns
|
|
68
|
+
-------
|
|
69
|
+
samples : Tensor
|
|
70
|
+
The drawn samples, of shape (size, alpha.ndim).
|
|
71
|
+
|
|
72
|
+
Raises
|
|
73
|
+
-------
|
|
74
|
+
ValueError
|
|
75
|
+
If any value in alpha is less than or equal to zero
|
|
76
|
+
|
|
77
|
+
Notes
|
|
78
|
+
-----
|
|
79
|
+
.. math:: X \approx \prod_{i=1}^{k}{x^{\alpha_i-1}_i}
|
|
80
|
+
|
|
81
|
+
Uses the following property for computation: for each dimension,
|
|
82
|
+
draw a random sample y_i from a standard gamma generator of shape
|
|
83
|
+
`alpha_i`, then
|
|
84
|
+
:math:`X = \frac{1}{\sum_{i=1}^k{y_i}} (y_1, \ldots, y_n)` is
|
|
85
|
+
Dirichlet distributed.
|
|
86
|
+
|
|
87
|
+
References
|
|
88
|
+
----------
|
|
89
|
+
.. [1] David McKay, "Information Theory, Inference and Learning
|
|
90
|
+
Algorithms," chapter 23,
|
|
91
|
+
http://www.inference.phy.cam.ac.uk/mackay/
|
|
92
|
+
.. [2] Wikipedia, "Dirichlet distribution",
|
|
93
|
+
http://en.wikipedia.org/wiki/Dirichlet_distribution
|
|
94
|
+
|
|
95
|
+
Examples
|
|
96
|
+
--------
|
|
97
|
+
Taking an example cited in Wikipedia, this distribution can be used if
|
|
98
|
+
one wanted to cut strings (each of initial length 1.0) into K pieces
|
|
99
|
+
with different lengths, where each piece had, on average, a designated
|
|
100
|
+
average length, but allowing some variation in the relative sizes of
|
|
101
|
+
the pieces.
|
|
102
|
+
|
|
103
|
+
>>> import maxframe.tensor as mt
|
|
104
|
+
|
|
105
|
+
>>> s = mt.random.dirichlet((10, 5, 3), 20).transpose()
|
|
106
|
+
|
|
107
|
+
>>> import matplotlib.pyplot as plt
|
|
108
|
+
|
|
109
|
+
>>> plt.barh(range(20), s[0].execute())
|
|
110
|
+
>>> plt.barh(range(20), s[1].execute(), left=s[0].execute(), color='g')
|
|
111
|
+
>>> plt.barh(range(20), s[2].execute(), left=(s[0]+s[1]).execute(), color='r')
|
|
112
|
+
>>> plt.title("Lengths of Strings")
|
|
113
|
+
"""
|
|
114
|
+
if isinstance(alpha, Iterable):
|
|
115
|
+
alpha = tuple(alpha)
|
|
116
|
+
else:
|
|
117
|
+
raise TypeError("`alpha` should be an array")
|
|
118
|
+
if dtype is None:
|
|
119
|
+
dtype = np.random.RandomState().dirichlet(alpha, size=(0,)).dtype
|
|
120
|
+
size = random_state._handle_size(size)
|
|
121
|
+
seed = gen_random_seeds(1, random_state.to_numpy())[0]
|
|
122
|
+
op = TensorDirichlet(seed=seed, alpha=alpha, size=size, gpu=gpu, dtype=dtype)
|
|
123
|
+
return op(chunk_size=chunk_size)
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
# Copyright 1999-2024 Alibaba Group Holding Ltd.
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
import numpy as np
|
|
18
|
+
|
|
19
|
+
from ... import opcodes
|
|
20
|
+
from ...serialization.serializables import AnyField
|
|
21
|
+
from ..utils import gen_random_seeds
|
|
22
|
+
from .core import TensorDistribution, TensorRandomOperatorMixin, handle_array
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class TensorExponential(TensorDistribution, TensorRandomOperatorMixin):
|
|
26
|
+
_input_fields_ = ["scale"]
|
|
27
|
+
_op_type_ = opcodes.RAND_EXPONENTIAL
|
|
28
|
+
|
|
29
|
+
_fields_ = "scale", "size"
|
|
30
|
+
scale = AnyField("scale")
|
|
31
|
+
_func_name = "exponential"
|
|
32
|
+
|
|
33
|
+
def __call__(self, scale, chunk_size=None):
|
|
34
|
+
return self.new_tensor([scale], self.size, raw_chunk_size=chunk_size)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def exponential(
|
|
38
|
+
random_state, scale=1.0, size=None, chunk_size=None, gpu=None, dtype=None
|
|
39
|
+
):
|
|
40
|
+
r"""
|
|
41
|
+
Draw samples from an exponential distribution.
|
|
42
|
+
|
|
43
|
+
Its probability density function is
|
|
44
|
+
|
|
45
|
+
.. math:: f(x; \frac{1}{\beta}) = \frac{1}{\beta} \exp(-\frac{x}{\beta}),
|
|
46
|
+
|
|
47
|
+
for ``x > 0`` and 0 elsewhere. :math:`\beta` is the scale parameter,
|
|
48
|
+
which is the inverse of the rate parameter :math:`\lambda = 1/\beta`.
|
|
49
|
+
The rate parameter is an alternative, widely used parameterization
|
|
50
|
+
of the exponential distribution [3]_.
|
|
51
|
+
|
|
52
|
+
The exponential distribution is a continuous analogue of the
|
|
53
|
+
geometric distribution. It describes many common situations, such as
|
|
54
|
+
the size of raindrops measured over many rainstorms [1]_, or the time
|
|
55
|
+
between page requests to Wikipedia [2]_.
|
|
56
|
+
|
|
57
|
+
Parameters
|
|
58
|
+
----------
|
|
59
|
+
scale : float or array_like of floats
|
|
60
|
+
The scale parameter, :math:`\beta = 1/\lambda`.
|
|
61
|
+
size : int or tuple of ints, optional
|
|
62
|
+
Output shape. If the given shape is, e.g., ``(m, n, k)``, then
|
|
63
|
+
``m * n * k`` samples are drawn. If size is ``None`` (default),
|
|
64
|
+
a single value is returned if ``scale`` is a scalar. Otherwise,
|
|
65
|
+
``np.array(scale).size`` samples are drawn.
|
|
66
|
+
chunk_size : int or tuple of int or tuple of ints, optional
|
|
67
|
+
Desired chunk size on each dimension
|
|
68
|
+
gpu : bool, optional
|
|
69
|
+
Allocate the tensor on GPU if True, False as default
|
|
70
|
+
dtype : data-type, optional
|
|
71
|
+
Data-type of the returned tensor.
|
|
72
|
+
|
|
73
|
+
Returns
|
|
74
|
+
-------
|
|
75
|
+
out : Tensor or scalar
|
|
76
|
+
Drawn samples from the parameterized exponential distribution.
|
|
77
|
+
|
|
78
|
+
References
|
|
79
|
+
----------
|
|
80
|
+
.. [1] Peyton Z. Peebles Jr., "Probability, Random Variables and
|
|
81
|
+
Random Signal Principles", 4th ed, 2001, p. 57.
|
|
82
|
+
.. [2] Wikipedia, "Poisson process",
|
|
83
|
+
http://en.wikipedia.org/wiki/Poisson_process
|
|
84
|
+
.. [3] Wikipedia, "Exponential distribution",
|
|
85
|
+
http://en.wikipedia.org/wiki/Exponential_distribution
|
|
86
|
+
"""
|
|
87
|
+
if dtype is None:
|
|
88
|
+
dtype = (
|
|
89
|
+
np.random.RandomState().exponential(handle_array(scale), size=(0,)).dtype
|
|
90
|
+
)
|
|
91
|
+
size = random_state._handle_size(size)
|
|
92
|
+
seed = gen_random_seeds(1, random_state.to_numpy())[0]
|
|
93
|
+
op = TensorExponential(seed=seed, size=size, gpu=gpu, dtype=dtype)
|
|
94
|
+
return op(scale, chunk_size=chunk_size)
|