maxframe 0.1.0b5__cp310-cp310-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-310-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-310-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-310-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-310-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,135 @@
|
|
|
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 TensorF(TensorDistribution, TensorRandomOperatorMixin):
|
|
26
|
+
_input_fields_ = ["dfnum", "dfden"]
|
|
27
|
+
_op_type_ = opcodes.RAND_F
|
|
28
|
+
|
|
29
|
+
_fields_ = "dfnum", "dfden", "size"
|
|
30
|
+
dfnum = AnyField("dfnum")
|
|
31
|
+
dfden = AnyField("dfden")
|
|
32
|
+
_func_name = "f"
|
|
33
|
+
|
|
34
|
+
def __call__(self, dfnum, dfden, chunk_size=None):
|
|
35
|
+
return self.new_tensor([dfnum, dfden], None, raw_chunk_size=chunk_size)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def f(random_state, dfnum, dfden, size=None, chunk_size=None, gpu=None, dtype=None):
|
|
39
|
+
"""
|
|
40
|
+
Draw samples from an F distribution.
|
|
41
|
+
|
|
42
|
+
Samples are drawn from an F distribution with specified parameters,
|
|
43
|
+
`dfnum` (degrees of freedom in numerator) and `dfden` (degrees of
|
|
44
|
+
freedom in denominator), where both parameters should be greater than
|
|
45
|
+
zero.
|
|
46
|
+
|
|
47
|
+
The random variate of the F distribution (also known as the
|
|
48
|
+
Fisher distribution) is a continuous probability distribution
|
|
49
|
+
that arises in ANOVA tests, and is the ratio of two chi-square
|
|
50
|
+
variates.
|
|
51
|
+
|
|
52
|
+
Parameters
|
|
53
|
+
----------
|
|
54
|
+
dfnum : float or array_like of floats
|
|
55
|
+
Degrees of freedom in numerator, should be > 0.
|
|
56
|
+
dfden : float or array_like of float
|
|
57
|
+
Degrees of freedom in denominator, should be > 0.
|
|
58
|
+
size : int or tuple of ints, optional
|
|
59
|
+
Output shape. If the given shape is, e.g., ``(m, n, k)``, then
|
|
60
|
+
``m * n * k`` samples are drawn. If size is ``None`` (default),
|
|
61
|
+
a single value is returned if ``dfnum`` and ``dfden`` are both scalars.
|
|
62
|
+
Otherwise, ``np.broadcast(dfnum, dfden).size`` samples are drawn.
|
|
63
|
+
chunk_size : int or tuple of int or tuple of ints, optional
|
|
64
|
+
Desired chunk size on each dimension
|
|
65
|
+
gpu : bool, optional
|
|
66
|
+
Allocate the tensor on GPU if True, False as default
|
|
67
|
+
dtype : data-type, optional
|
|
68
|
+
Data-type of the returned tensor.
|
|
69
|
+
|
|
70
|
+
Returns
|
|
71
|
+
-------
|
|
72
|
+
out : Tensor or scalar
|
|
73
|
+
Drawn samples from the parameterized Fisher distribution.
|
|
74
|
+
|
|
75
|
+
See Also
|
|
76
|
+
--------
|
|
77
|
+
scipy.stats.f : probability density function, distribution or
|
|
78
|
+
cumulative density function, etc.
|
|
79
|
+
|
|
80
|
+
Notes
|
|
81
|
+
-----
|
|
82
|
+
The F statistic is used to compare in-group variances to between-group
|
|
83
|
+
variances. Calculating the distribution depends on the sampling, and
|
|
84
|
+
so it is a function of the respective degrees of freedom in the
|
|
85
|
+
problem. The variable `dfnum` is the number of samples minus one, the
|
|
86
|
+
between-groups degrees of freedom, while `dfden` is the within-groups
|
|
87
|
+
degrees of freedom, the sum of the number of samples in each group
|
|
88
|
+
minus the number of groups.
|
|
89
|
+
|
|
90
|
+
References
|
|
91
|
+
----------
|
|
92
|
+
.. [1] Glantz, Stanton A. "Primer of Biostatistics.", McGraw-Hill,
|
|
93
|
+
Fifth Edition, 2002.
|
|
94
|
+
.. [2] Wikipedia, "F-distribution",
|
|
95
|
+
http://en.wikipedia.org/wiki/F-distribution
|
|
96
|
+
|
|
97
|
+
Examples
|
|
98
|
+
--------
|
|
99
|
+
An example from Glantz[1], pp 47-40:
|
|
100
|
+
|
|
101
|
+
Two groups, children of diabetics (25 people) and children from people
|
|
102
|
+
without diabetes (25 controls). Fasting blood glucose was measured,
|
|
103
|
+
case group had a mean value of 86.1, controls had a mean value of
|
|
104
|
+
82.2. Standard deviations were 2.09 and 2.49 respectively. Are these
|
|
105
|
+
data consistent with the null hypothesis that the parents diabetic
|
|
106
|
+
status does not affect their children's blood glucose levels?
|
|
107
|
+
Calculating the F statistic from the data gives a value of 36.01.
|
|
108
|
+
|
|
109
|
+
Draw samples from the distribution:
|
|
110
|
+
|
|
111
|
+
>>> import maxframe.tensor as mt
|
|
112
|
+
|
|
113
|
+
>>> dfnum = 1. # between group degrees of freedom
|
|
114
|
+
>>> dfden = 48. # within groups degrees of freedom
|
|
115
|
+
>>> s = mt.random.f(dfnum, dfden, 1000).execute()
|
|
116
|
+
|
|
117
|
+
The lower bound for the top 1% of the samples is :
|
|
118
|
+
|
|
119
|
+
>>> sorted(s)[-10]
|
|
120
|
+
7.61988120985
|
|
121
|
+
|
|
122
|
+
So there is about a 1% chance that the F statistic will exceed 7.62,
|
|
123
|
+
the measured value is 36, so the null hypothesis is rejected at the 1%
|
|
124
|
+
level.
|
|
125
|
+
"""
|
|
126
|
+
if dtype is None:
|
|
127
|
+
dtype = (
|
|
128
|
+
np.random.RandomState()
|
|
129
|
+
.f(handle_array(dfnum), handle_array(dfden), size=(0,))
|
|
130
|
+
.dtype
|
|
131
|
+
)
|
|
132
|
+
size = random_state._handle_size(size)
|
|
133
|
+
seed = gen_random_seeds(1, random_state.to_numpy())[0]
|
|
134
|
+
op = TensorF(seed=seed, size=size, gpu=gpu, dtype=dtype)
|
|
135
|
+
return op(dfnum, dfden, chunk_size=chunk_size)
|
|
@@ -0,0 +1,128 @@
|
|
|
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 TensorRandGamma(TensorDistribution, TensorRandomOperatorMixin):
|
|
26
|
+
_input_fields_ = ["shape", "scale"]
|
|
27
|
+
_op_type_ = opcodes.RAND_GAMMA
|
|
28
|
+
|
|
29
|
+
_fields_ = "shape", "scale", "size"
|
|
30
|
+
shape = AnyField("shape")
|
|
31
|
+
scale = AnyField("scale")
|
|
32
|
+
_func_name = "gamma"
|
|
33
|
+
|
|
34
|
+
def __call__(self, shape, scale, chunk_size=None):
|
|
35
|
+
return self.new_tensor([shape, scale], None, raw_chunk_size=chunk_size)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def gamma(
|
|
39
|
+
random_state, shape, scale=1.0, size=None, chunk_size=None, gpu=None, dtype=None
|
|
40
|
+
):
|
|
41
|
+
r"""
|
|
42
|
+
Draw samples from a Gamma distribution.
|
|
43
|
+
|
|
44
|
+
Samples are drawn from a Gamma distribution with specified parameters,
|
|
45
|
+
`shape` (sometimes designated "k") and `scale` (sometimes designated
|
|
46
|
+
"theta"), where both parameters are > 0.
|
|
47
|
+
|
|
48
|
+
Parameters
|
|
49
|
+
----------
|
|
50
|
+
shape : float or array_like of floats
|
|
51
|
+
The shape of the gamma distribution. Should be greater than zero.
|
|
52
|
+
scale : float or array_like of floats, optional
|
|
53
|
+
The scale of the gamma distribution. Should be greater than zero.
|
|
54
|
+
Default is equal to 1.
|
|
55
|
+
size : int or tuple of ints, optional
|
|
56
|
+
Output shape. If the given shape is, e.g., ``(m, n, k)``, then
|
|
57
|
+
``m * n * k`` samples are drawn. If size is ``None`` (default),
|
|
58
|
+
a single value is returned if ``shape`` and ``scale`` are both scalars.
|
|
59
|
+
Otherwise, ``np.broadcast(shape, scale).size`` samples are drawn.
|
|
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
|
+
out : Tensor or scalar
|
|
70
|
+
Drawn samples from the parameterized gamma distribution.
|
|
71
|
+
|
|
72
|
+
See Also
|
|
73
|
+
--------
|
|
74
|
+
scipy.stats.gamma : probability density function, distribution or
|
|
75
|
+
cumulative density function, etc.
|
|
76
|
+
|
|
77
|
+
Notes
|
|
78
|
+
-----
|
|
79
|
+
The probability density for the Gamma distribution is
|
|
80
|
+
|
|
81
|
+
.. math:: p(x) = x^{k-1}\frac{e^{-x/\theta}}{\theta^k\Gamma(k)},
|
|
82
|
+
|
|
83
|
+
where :math:`k` is the shape and :math:`\theta` the scale,
|
|
84
|
+
and :math:`\Gamma` is the Gamma function.
|
|
85
|
+
|
|
86
|
+
The Gamma distribution is often used to model the times to failure of
|
|
87
|
+
electronic components, and arises naturally in processes for which the
|
|
88
|
+
waiting times between Poisson distributed events are relevant.
|
|
89
|
+
|
|
90
|
+
References
|
|
91
|
+
----------
|
|
92
|
+
.. [1] Weisstein, Eric W. "Gamma Distribution." From MathWorld--A
|
|
93
|
+
Wolfram Web Resource.
|
|
94
|
+
http://mathworld.wolfram.com/GammaDistribution.html
|
|
95
|
+
.. [2] Wikipedia, "Gamma distribution",
|
|
96
|
+
http://en.wikipedia.org/wiki/Gamma_distribution
|
|
97
|
+
|
|
98
|
+
Examples
|
|
99
|
+
--------
|
|
100
|
+
Draw samples from the distribution:
|
|
101
|
+
|
|
102
|
+
>>> import maxframe.tensor as mt
|
|
103
|
+
|
|
104
|
+
>>> shape, scale = 2., 2. # mean=4, std=2*sqrt(2)
|
|
105
|
+
>>> s = mt.random.gamma(shape, scale, 1000).execute()
|
|
106
|
+
|
|
107
|
+
Display the histogram of the samples, along with
|
|
108
|
+
the probability density function:
|
|
109
|
+
|
|
110
|
+
>>> import matplotlib.pyplot as plt
|
|
111
|
+
>>> import scipy.special as sps
|
|
112
|
+
>>> import numpy as np
|
|
113
|
+
>>> count, bins, ignored = plt.hist(s, 50, normed=True)
|
|
114
|
+
>>> y = bins**(shape-1)*(np.exp(-bins/scale) /
|
|
115
|
+
... (sps.gamma(shape)*scale**shape))
|
|
116
|
+
>>> plt.plot(bins, y, linewidth=2, color='r')
|
|
117
|
+
>>> plt.show()
|
|
118
|
+
"""
|
|
119
|
+
if dtype is None:
|
|
120
|
+
dtype = (
|
|
121
|
+
np.random.RandomState()
|
|
122
|
+
.gamma(handle_array(shape), handle_array(scale), size=(0,))
|
|
123
|
+
.dtype
|
|
124
|
+
)
|
|
125
|
+
size = random_state._handle_size(size)
|
|
126
|
+
seed = gen_random_seeds(1, random_state.to_numpy())[0]
|
|
127
|
+
op = TensorRandGamma(seed=seed, size=size, gpu=gpu, dtype=dtype)
|
|
128
|
+
return op(shape, scale, chunk_size=chunk_size)
|
|
@@ -0,0 +1,93 @@
|
|
|
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 TensorGeometric(TensorDistribution, TensorRandomOperatorMixin):
|
|
26
|
+
_input_fields_ = ["p"]
|
|
27
|
+
_op_type_ = opcodes.RAND_GEOMETRIC
|
|
28
|
+
|
|
29
|
+
_fields_ = "p", "size"
|
|
30
|
+
p = AnyField("p")
|
|
31
|
+
_func_name = "geometric"
|
|
32
|
+
|
|
33
|
+
def __call__(self, p, chunk_size=None):
|
|
34
|
+
return self.new_tensor([p], None, raw_chunk_size=chunk_size)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def geometric(random_state, p, size=None, chunk_size=None, gpu=None, dtype=None):
|
|
38
|
+
"""
|
|
39
|
+
Draw samples from the geometric distribution.
|
|
40
|
+
|
|
41
|
+
Bernoulli trials are experiments with one of two outcomes:
|
|
42
|
+
success or failure (an example of such an experiment is flipping
|
|
43
|
+
a coin). The geometric distribution models the number of trials
|
|
44
|
+
that must be run in order to achieve success. It is therefore
|
|
45
|
+
supported on the positive integers, ``k = 1, 2, ...``.
|
|
46
|
+
|
|
47
|
+
The probability mass function of the geometric distribution is
|
|
48
|
+
|
|
49
|
+
.. math:: f(k) = (1 - p)^{k - 1} p
|
|
50
|
+
|
|
51
|
+
where `p` is the probability of success of an individual trial.
|
|
52
|
+
|
|
53
|
+
Parameters
|
|
54
|
+
----------
|
|
55
|
+
p : float or array_like of floats
|
|
56
|
+
The probability of success of an individual trial.
|
|
57
|
+
size : int or tuple of ints, optional
|
|
58
|
+
Output shape. If the given shape is, e.g., ``(m, n, k)``, then
|
|
59
|
+
``m * n * k`` samples are drawn. If size is ``None`` (default),
|
|
60
|
+
a single value is returned if ``p`` is a scalar. Otherwise,
|
|
61
|
+
``mt.array(p).size`` samples are drawn.
|
|
62
|
+
chunk_size : int or tuple of int or tuple of ints, optional
|
|
63
|
+
Desired chunk size on each dimension
|
|
64
|
+
gpu : bool, optional
|
|
65
|
+
Allocate the tensor on GPU if True, False as default
|
|
66
|
+
dtype : data-type, optional
|
|
67
|
+
Data-type of the returned tensor.
|
|
68
|
+
|
|
69
|
+
Returns
|
|
70
|
+
-------
|
|
71
|
+
out : Tensor or scalar
|
|
72
|
+
Drawn samples from the parameterized geometric distribution.
|
|
73
|
+
|
|
74
|
+
Examples
|
|
75
|
+
--------
|
|
76
|
+
Draw ten thousand values from the geometric distribution,
|
|
77
|
+
with the probability of an individual success equal to 0.35:
|
|
78
|
+
|
|
79
|
+
>>> import maxframe.tensor as mt
|
|
80
|
+
|
|
81
|
+
>>> z = mt.random.geometric(p=0.35, size=10000)
|
|
82
|
+
|
|
83
|
+
How many trials succeeded after a single run?
|
|
84
|
+
|
|
85
|
+
>>> ((z == 1).sum() / 10000.).execute()
|
|
86
|
+
0.34889999999999999 #random
|
|
87
|
+
"""
|
|
88
|
+
if dtype is None:
|
|
89
|
+
dtype = np.random.RandomState().geometric(handle_array(p), size=(0,)).dtype
|
|
90
|
+
size = random_state._handle_size(size)
|
|
91
|
+
seed = gen_random_seeds(1, random_state.to_numpy())[0]
|
|
92
|
+
op = TensorGeometric(seed=seed, size=size, gpu=gpu, dtype=dtype)
|
|
93
|
+
return op(p, chunk_size=chunk_size)
|
|
@@ -0,0 +1,167 @@
|
|
|
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 TensorGumbel(TensorDistribution, TensorRandomOperatorMixin):
|
|
26
|
+
_input_fields_ = ["loc", "scale"]
|
|
27
|
+
_op_type_ = opcodes.RAND_GUMBEL
|
|
28
|
+
|
|
29
|
+
_fields_ = "loc", "scale", "size"
|
|
30
|
+
loc = AnyField("loc")
|
|
31
|
+
scale = AnyField("scale")
|
|
32
|
+
_func_name = "gumbel"
|
|
33
|
+
|
|
34
|
+
def __call__(self, loc, scale, chunk_size=None):
|
|
35
|
+
return self.new_tensor([loc, scale], None, raw_chunk_size=chunk_size)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def gumbel(
|
|
39
|
+
random_state, loc=0.0, scale=1.0, size=None, chunk_size=None, gpu=None, dtype=None
|
|
40
|
+
):
|
|
41
|
+
r"""
|
|
42
|
+
Draw samples from a Gumbel distribution.
|
|
43
|
+
|
|
44
|
+
Draw samples from a Gumbel distribution with specified location and
|
|
45
|
+
scale. For more information on the Gumbel distribution, see
|
|
46
|
+
Notes and References below.
|
|
47
|
+
|
|
48
|
+
Parameters
|
|
49
|
+
----------
|
|
50
|
+
loc : float or array_like of floats, optional
|
|
51
|
+
The location of the mode of the distribution. Default is 0.
|
|
52
|
+
scale : float or array_like of floats, optional
|
|
53
|
+
The scale parameter of the distribution. Default is 1.
|
|
54
|
+
size : int or tuple of ints, optional
|
|
55
|
+
Output shape. If the given shape is, e.g., ``(m, n, k)``, then
|
|
56
|
+
``m * n * k`` samples are drawn. If size is ``None`` (default),
|
|
57
|
+
a single value is returned if ``loc`` and ``scale`` are both scalars.
|
|
58
|
+
Otherwise, ``np.broadcast(loc, scale).size`` samples are drawn.
|
|
59
|
+
chunk_size : int or tuple of int or tuple of ints, optional
|
|
60
|
+
Desired chunk size on each dimension
|
|
61
|
+
gpu : bool, optional
|
|
62
|
+
Allocate the tensor on GPU if True, False as default
|
|
63
|
+
dtype : data-type, optional
|
|
64
|
+
Data-type of the returned tensor.
|
|
65
|
+
|
|
66
|
+
Returns
|
|
67
|
+
-------
|
|
68
|
+
out : Tensor or scalar
|
|
69
|
+
Drawn samples from the parameterized Gumbel distribution.
|
|
70
|
+
|
|
71
|
+
See Also
|
|
72
|
+
--------
|
|
73
|
+
scipy.stats.gumbel_l
|
|
74
|
+
scipy.stats.gumbel_r
|
|
75
|
+
scipy.stats.genextreme
|
|
76
|
+
weibull
|
|
77
|
+
|
|
78
|
+
Notes
|
|
79
|
+
-----
|
|
80
|
+
The Gumbel (or Smallest Extreme Value (SEV) or the Smallest Extreme
|
|
81
|
+
Value Type I) distribution is one of a class of Generalized Extreme
|
|
82
|
+
Value (GEV) distributions used in modeling extreme value problems.
|
|
83
|
+
The Gumbel is a special case of the Extreme Value Type I distribution
|
|
84
|
+
for maximums from distributions with "exponential-like" tails.
|
|
85
|
+
|
|
86
|
+
The probability density for the Gumbel distribution is
|
|
87
|
+
|
|
88
|
+
.. math:: p(x) = \frac{e^{-(x - \mu)/ \beta}}{\beta} e^{ -e^{-(x - \mu)/
|
|
89
|
+
\beta}},
|
|
90
|
+
|
|
91
|
+
where :math:`\mu` is the mode, a location parameter, and
|
|
92
|
+
:math:`\beta` is the scale parameter.
|
|
93
|
+
|
|
94
|
+
The Gumbel (named for German mathematician Emil Julius Gumbel) was used
|
|
95
|
+
very early in the hydrology literature, for modeling the occurrence of
|
|
96
|
+
flood events. It is also used for modeling maximum wind speed and
|
|
97
|
+
rainfall rates. It is a "fat-tailed" distribution - the probability of
|
|
98
|
+
an event in the tail of the distribution is larger than if one used a
|
|
99
|
+
Gaussian, hence the surprisingly frequent occurrence of 100-year
|
|
100
|
+
floods. Floods were initially modeled as a Gaussian process, which
|
|
101
|
+
underestimated the frequency of extreme events.
|
|
102
|
+
|
|
103
|
+
It is one of a class of extreme value distributions, the Generalized
|
|
104
|
+
Extreme Value (GEV) distributions, which also includes the Weibull and
|
|
105
|
+
Frechet.
|
|
106
|
+
|
|
107
|
+
The function has a mean of :math:`\mu + 0.57721\beta` and a variance
|
|
108
|
+
of :math:`\frac{\pi^2}{6}\beta^2`.
|
|
109
|
+
|
|
110
|
+
References
|
|
111
|
+
----------
|
|
112
|
+
.. [1] Gumbel, E. J., "Statistics of Extremes,"
|
|
113
|
+
New York: Columbia University Press, 1958.
|
|
114
|
+
.. [2] Reiss, R.-D. and Thomas, M., "Statistical Analysis of Extreme
|
|
115
|
+
Values from Insurance, Finance, Hydrology and Other Fields,"
|
|
116
|
+
Basel: Birkhauser Verlag, 2001.
|
|
117
|
+
|
|
118
|
+
Examples
|
|
119
|
+
--------
|
|
120
|
+
Draw samples from the distribution:
|
|
121
|
+
|
|
122
|
+
>>> import maxframe.tensor as mt
|
|
123
|
+
|
|
124
|
+
>>> mu, beta = 0, 0.1 # location and scale
|
|
125
|
+
>>> s = mt.random.gumbel(mu, beta, 1000).execute()
|
|
126
|
+
|
|
127
|
+
Display the histogram of the samples, along with
|
|
128
|
+
the probability density function:
|
|
129
|
+
|
|
130
|
+
>>> import matplotlib.pyplot as plt
|
|
131
|
+
>>> import numpy as np
|
|
132
|
+
>>> count, bins, ignored = plt.hist(s, 30, normed=True)
|
|
133
|
+
>>> plt.plot(bins, (1/beta)*np.exp(-(bins - mu)/beta)
|
|
134
|
+
... * np.exp( -np.exp( -(bins - mu) /beta) ),
|
|
135
|
+
... linewidth=2, color='r')
|
|
136
|
+
>>> plt.show()
|
|
137
|
+
|
|
138
|
+
Show how an extreme value distribution can arise from a Gaussian process
|
|
139
|
+
and compare to a Gaussian:
|
|
140
|
+
|
|
141
|
+
>>> means = []
|
|
142
|
+
>>> maxima = []
|
|
143
|
+
>>> for i in range(0,1000) :
|
|
144
|
+
... a = mt.random.normal(mu, beta, 1000)
|
|
145
|
+
... means.append(a.mean().execute())
|
|
146
|
+
... maxima.append(a.max().execute())
|
|
147
|
+
>>> count, bins, ignored = plt.hist(maxima, 30, normed=True)
|
|
148
|
+
>>> beta = mt.std(maxima) * mt.sqrt(6) / mt.pi
|
|
149
|
+
>>> mu = mt.mean(maxima) - 0.57721*beta
|
|
150
|
+
>>> plt.plot(bins, ((1/beta)*mt.exp(-(bins - mu)/beta)
|
|
151
|
+
... * mt.exp(-mt.exp(-(bins - mu)/beta))).execute(),
|
|
152
|
+
... linewidth=2, color='r')
|
|
153
|
+
>>> plt.plot(bins, (1/(beta * mt.sqrt(2 * mt.pi))
|
|
154
|
+
... * mt.exp(-(bins - mu)**2 / (2 * beta**2))).execute(),
|
|
155
|
+
... linewidth=2, color='g')
|
|
156
|
+
>>> plt.show()
|
|
157
|
+
"""
|
|
158
|
+
if dtype is None:
|
|
159
|
+
dtype = (
|
|
160
|
+
np.random.RandomState()
|
|
161
|
+
.gumbel(handle_array(loc), handle_array(scale), size=(0,))
|
|
162
|
+
.dtype
|
|
163
|
+
)
|
|
164
|
+
size = random_state._handle_size(size)
|
|
165
|
+
seed = gen_random_seeds(1, random_state.to_numpy())[0]
|
|
166
|
+
op = TensorGumbel(seed=seed, size=size, gpu=gpu, dtype=dtype)
|
|
167
|
+
return op(loc, scale, chunk_size=chunk_size)
|
|
@@ -0,0 +1,148 @@
|
|
|
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 TensorHypergeometric(TensorDistribution, TensorRandomOperatorMixin):
|
|
26
|
+
_input_fields_ = ["ngood", "nbad", "nsample"]
|
|
27
|
+
_op_type_ = opcodes.RAND_HYPERGEOMETRIC
|
|
28
|
+
|
|
29
|
+
_fields_ = "ngood", "nbad", "nsample", "size"
|
|
30
|
+
ngood = AnyField("ngood")
|
|
31
|
+
nbad = AnyField("nbad")
|
|
32
|
+
nsample = AnyField("nsample")
|
|
33
|
+
_func_name = "hypergeometric"
|
|
34
|
+
|
|
35
|
+
def __call__(self, ngood, nbad, nsample, chunk_size=None):
|
|
36
|
+
return self.new_tensor([ngood, nbad, nsample], None, raw_chunk_size=chunk_size)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def hypergeometric(
|
|
40
|
+
random_state, ngood, nbad, nsample, size=None, chunk_size=None, gpu=None, dtype=None
|
|
41
|
+
):
|
|
42
|
+
r"""
|
|
43
|
+
Draw samples from a Hypergeometric distribution.
|
|
44
|
+
|
|
45
|
+
Samples are drawn from a hypergeometric distribution with specified
|
|
46
|
+
parameters, ngood (ways to make a good selection), nbad (ways to make
|
|
47
|
+
a bad selection), and nsample = number of items sampled, which is less
|
|
48
|
+
than or equal to the sum ngood + nbad.
|
|
49
|
+
|
|
50
|
+
Parameters
|
|
51
|
+
----------
|
|
52
|
+
ngood : int or array_like of ints
|
|
53
|
+
Number of ways to make a good selection. Must be nonnegative.
|
|
54
|
+
nbad : int or array_like of ints
|
|
55
|
+
Number of ways to make a bad selection. Must be nonnegative.
|
|
56
|
+
nsample : int or array_like of ints
|
|
57
|
+
Number of items sampled. Must be at least 1 and at most
|
|
58
|
+
``ngood + nbad``.
|
|
59
|
+
size : int or tuple of ints, optional
|
|
60
|
+
Output shape. If the given shape is, e.g., ``(m, n, k)``, then
|
|
61
|
+
``m * n * k`` samples are drawn. If size is ``None`` (default),
|
|
62
|
+
a single value is returned if ``ngood``, ``nbad``, and ``nsample``
|
|
63
|
+
are all scalars. Otherwise, ``np.broadcast(ngood, nbad, nsample).size``
|
|
64
|
+
samples are drawn.
|
|
65
|
+
chunk_size : int or tuple of int or tuple of ints, optional
|
|
66
|
+
Desired chunk size on each dimension
|
|
67
|
+
gpu : bool, optional
|
|
68
|
+
Allocate the tensor on GPU if True, False as default
|
|
69
|
+
dtype : data-type, optional
|
|
70
|
+
Data-type of the returned tensor.
|
|
71
|
+
|
|
72
|
+
Returns
|
|
73
|
+
-------
|
|
74
|
+
out : Tensor or scalar
|
|
75
|
+
Drawn samples from the parameterized hypergeometric distribution.
|
|
76
|
+
|
|
77
|
+
See Also
|
|
78
|
+
--------
|
|
79
|
+
scipy.stats.hypergeom : probability density function, distribution or
|
|
80
|
+
cumulative density function, etc.
|
|
81
|
+
|
|
82
|
+
Notes
|
|
83
|
+
-----
|
|
84
|
+
The probability density for the Hypergeometric distribution is
|
|
85
|
+
|
|
86
|
+
.. math:: P(x) = \frac{\binom{m}{n}\binom{N-m}{n-x}}{\binom{N}{n}},
|
|
87
|
+
|
|
88
|
+
where :math:`0 \le x \le m` and :math:`n+m-N \le x \le n`
|
|
89
|
+
|
|
90
|
+
for P(x) the probability of x successes, n = ngood, m = nbad, and
|
|
91
|
+
N = number of samples.
|
|
92
|
+
|
|
93
|
+
Consider an urn with black and white marbles in it, ngood of them
|
|
94
|
+
black and nbad are white. If you draw nsample balls without
|
|
95
|
+
replacement, then the hypergeometric distribution describes the
|
|
96
|
+
distribution of black balls in the drawn sample.
|
|
97
|
+
|
|
98
|
+
Note that this distribution is very similar to the binomial
|
|
99
|
+
distribution, except that in this case, samples are drawn without
|
|
100
|
+
replacement, whereas in the Binomial case samples are drawn with
|
|
101
|
+
replacement (or the sample space is infinite). As the sample space
|
|
102
|
+
becomes large, this distribution approaches the binomial.
|
|
103
|
+
|
|
104
|
+
References
|
|
105
|
+
----------
|
|
106
|
+
.. [1] Lentner, Marvin, "Elementary Applied Statistics", Bogden
|
|
107
|
+
and Quigley, 1972.
|
|
108
|
+
.. [2] Weisstein, Eric W. "Hypergeometric Distribution." From
|
|
109
|
+
MathWorld--A Wolfram Web Resource.
|
|
110
|
+
http://mathworld.wolfram.com/HypergeometricDistribution.html
|
|
111
|
+
.. [3] Wikipedia, "Hypergeometric distribution",
|
|
112
|
+
http://en.wikipedia.org/wiki/Hypergeometric_distribution
|
|
113
|
+
|
|
114
|
+
Examples
|
|
115
|
+
--------
|
|
116
|
+
Draw samples from the distribution:
|
|
117
|
+
|
|
118
|
+
>>> import maxframe.tensor as mt
|
|
119
|
+
|
|
120
|
+
>>> ngood, nbad, nsamp = 100, 2, 10
|
|
121
|
+
# number of good, number of bad, and number of samples
|
|
122
|
+
>>> s = mt.random.hypergeometric(ngood, nbad, nsamp, 1000)
|
|
123
|
+
>>> hist(s)
|
|
124
|
+
# note that it is very unlikely to grab both bad items
|
|
125
|
+
|
|
126
|
+
Suppose you have an urn with 15 white and 15 black marbles.
|
|
127
|
+
If you pull 15 marbles at random, how likely is it that
|
|
128
|
+
12 or more of them are one color?
|
|
129
|
+
|
|
130
|
+
>>> s = mt.random.hypergeometric(15, 15, 15, 100000)
|
|
131
|
+
>>> (mt.sum(s>=12)/100000. + mt.sum(s<=3)/100000.).execute()
|
|
132
|
+
# answer = 0.003 ... pretty unlikely!
|
|
133
|
+
"""
|
|
134
|
+
if dtype is None:
|
|
135
|
+
dtype = (
|
|
136
|
+
np.random.RandomState()
|
|
137
|
+
.hypergeometric(
|
|
138
|
+
handle_array(ngood),
|
|
139
|
+
handle_array(nbad),
|
|
140
|
+
handle_array(nsample),
|
|
141
|
+
size=(0,),
|
|
142
|
+
)
|
|
143
|
+
.dtype
|
|
144
|
+
)
|
|
145
|
+
size = random_state._handle_size(size)
|
|
146
|
+
seed = gen_random_seeds(1, random_state.to_numpy())[0]
|
|
147
|
+
op = TensorHypergeometric(seed=seed, size=size, gpu=gpu, dtype=dtype)
|
|
148
|
+
return op(ngood, nbad, nsample, chunk_size=chunk_size)
|