blob: da51f61c0fb2fefe55d7679ccda8cefa32fe9902 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# pylint: skip-file
import itertools
import os
import sys
from os import path
curr_path = os.path.dirname(os.path.abspath(os.path.expanduser(__file__)))
sys.path.append(os.path.join(curr_path, '../python/common/'))
sys.path.append(os.path.join(curr_path, '../python/unittest/'))
sys.path.insert(0, os.path.join(curr_path, '../../../python'))
import unittest
import numpy as _np
import mxnet as mx
from mxnet import np, npx, autograd
from mxnet.gluon import HybridBlock
from mxnet.test_utils import same, assert_almost_equal, rand_shape_nd, rand_ndarray, use_np
from common import retry
from mxnet.test_utils import verify_generator, gen_buckets_probs_with_ppf, assert_exception, is_op_runnable, collapse_sum_like
from mxnet.ndarray.ndarray import py_slice
from mxnet.base import integer_types
import scipy.stats as ss
@retry(5)
@use_np
def test_np_exponential():
samples = 1000000
# Generation test
trials = 8
num_buckets = 5
for scale in [1.0, 5.0]:
buckets, probs = gen_buckets_probs_with_ppf(lambda x: ss.expon.ppf(x, scale=scale), num_buckets)
buckets = np.array(buckets, dtype="float32").tolist()
probs = [(buckets[i][1] - buckets[i][0])/scale for i in range(num_buckets)]
generator_mx_np = lambda x: mx.np.random.exponential(size=x).asnumpy()
verify_generator(generator=generator_mx_np, buckets=buckets, probs=probs, nsamples=samples, nrepeat=trials)
@retry(5)
@use_np
def test_np_uniform():
types = [None, "float32", "float64"]
device = mx.device.current_device()
samples = 1000000
# Generation test
trials = 8
num_buckets = 5
for dtype in types:
for low, high in [(-100.0, -98.0), (99.0, 101.0)]:
scale = high - low
buckets, probs = gen_buckets_probs_with_ppf(lambda x: ss.uniform.ppf(x, loc=low, scale=scale), num_buckets)
buckets = np.array(buckets, dtype=dtype).tolist()
probs = [(buckets[i][1] - buckets[i][0])/scale for i in range(num_buckets)]
generator_mx_np = lambda x: mx.np.random.uniform(low, high, size=x, device=device, dtype=dtype).asnumpy()
verify_generator(generator=generator_mx_np, buckets=buckets, probs=probs, nsamples=samples, nrepeat=trials)
@retry(5)
@use_np
def test_np_logistic():
samples = 1000000
# Generation test
trials = 8
num_buckets = 20
for loc, scale in [(0.0, 1.0), (1.0, 5.0)]:
buckets, probs = gen_buckets_probs_with_ppf(lambda x: ss.logistic.ppf(x, loc=loc, scale=scale), num_buckets)
buckets = np.array(buckets).tolist()
probs = [(ss.logistic.cdf(buckets[i][1], loc, scale) -
ss.logistic.cdf(buckets[i][0], loc, scale)) for i in range(num_buckets)]
generator_mx_np = lambda x: mx.np.random.logistic(loc, scale, size=x).asnumpy()
verify_generator(generator=generator_mx_np, buckets=buckets, probs=probs, nsamples=samples, nrepeat=trials)
@retry(5)
@use_np
def test_np_gumbel():
samples = 1000000
# Generation test
trials = 8
num_buckets = 5
for loc, scale in [(0.0, 1.0), (1.0, 5.0)]:
buckets, probs = gen_buckets_probs_with_ppf(lambda x: ss.gumbel_r.ppf(x, loc=loc, scale=scale), num_buckets)
buckets = np.array(buckets).tolist()
probs = [(buckets[i][1] - buckets[i][0])/scale for i in range(num_buckets)]
generator_mx_np = lambda x: mx.np.random.gumbel(loc, scale, size=x).asnumpy()
verify_generator(generator=generator_mx_np, buckets=buckets, probs=probs, nsamples=samples, nrepeat=trials)
@retry(5)
@use_np
def test_np_normal():
types = [None, "float32", "float64"]
device = mx.device.current_device()
samples = 1000000
# Generation test
trials = 8
num_buckets = 5
for dtype in types:
for loc, scale in [(0.0, 1.0), (1.0, 5.0)]:
buckets, probs = gen_buckets_probs_with_ppf(lambda x: ss.norm.ppf(x, loc=loc, scale=scale), num_buckets)
buckets = np.array(buckets, dtype=dtype).tolist()
probs = [(ss.norm.cdf(buckets[i][1], loc, scale) -
ss.norm.cdf(buckets[i][0], loc, scale)) for i in range(num_buckets)]
generator_mx_np = lambda x: mx.np.random.normal(loc, scale, size=x, device=device, dtype=dtype).asnumpy()
verify_generator(generator=generator_mx_np, buckets=buckets, probs=probs, nsamples=samples, nrepeat=trials)
@retry(5)
@use_np
def test_np_gamma():
types = [None, "float32", "float64"]
device = mx.device.current_device()
samples = 1000000
# Generation test
trials = 8
num_buckets = 5
for _ in types:
for alpha, beta in [(2.0, 3.0), (0.5, 1.0)]:
buckets, probs = gen_buckets_probs_with_ppf(
lambda x: ss.gamma.ppf(x, a=alpha, loc=0, scale=beta), num_buckets)
buckets = np.array(buckets).tolist()
def generator_mx(x): return np.random.gamma(
alpha, beta, size=samples, device=device).asnumpy()
verify_generator(generator=generator_mx, buckets=buckets, probs=probs,
nsamples=samples, nrepeat=trials)
generator_mx_same_seed =\
lambda x: _np.concatenate(
[np.random.gamma(alpha, beta, size=(x // 10), device=device).asnumpy()
for _ in range(10)])
verify_generator(generator=generator_mx_same_seed, buckets=buckets, probs=probs,
nsamples=samples, nrepeat=trials)
@retry(5)
@use_np
def test_np_laplace():
types = [None, "float32", "float64"]
device = mx.device.current_device()
samples = 1000000
# Generation test
trials = 8
num_buckets = 5
for dtype in types:
for loc, scale in [(0.0, 1.0), (1.0, 5.0)]:
buckets, probs = gen_buckets_probs_with_ppf(lambda x: ss.laplace.ppf(x, loc=loc, scale=scale), num_buckets)
buckets = np.array(buckets, dtype=dtype).tolist()
probs = [(buckets[i][1] - buckets[i][0])/scale for i in range(num_buckets)]
generator_mx_np = lambda x: np.random.laplace(loc, scale, size=x, device=device, dtype=dtype).asnumpy()
verify_generator(generator=generator_mx_np, buckets=buckets, probs=probs, nsamples=samples, nrepeat=trials)