import os
import mxnet as mx
import numpy as np

def same(a, b):
    return np.sum(a != b) == 0

def check_with_device(device):
    a, b = -10, 10
    mu, sigma = 10, 2
    shape = (100, 100)
    mx.random.seed(128)
    ret1 = mx.random.normal(mu, sigma, shape, ctx=device)
    un1 = mx.random.uniform(a, b, shape, ctx=device)
    mx.random.seed(128)
    ret2 = mx.random.normal(mu, sigma, shape, ctx=device)
    un2 = mx.random.uniform(a, b, shape, ctx=device)
    assert same(ret1.asnumpy(), ret2.asnumpy())
    assert same(un1.asnumpy(), un2.asnumpy())
    assert abs(np.mean(ret1.asnumpy()) - mu) < 0.1
    assert abs(np.std(ret1.asnumpy()) - sigma) < 0.1
    assert abs(np.mean(un1.asnumpy()) - (a+b)/2) < 0.1


def check_symbolic_random(dev):
    a, b = -10, 10
    mu, sigma = 10, 2
    shape = (100, 100)
    X = mx.sym.Variable("X")
    Y = mx.sym.uniform(low=a, high=b, shape=shape) + X
    x = mx.nd.zeros(shape, ctx=dev)
    xgrad = mx.nd.zeros(shape, ctx=dev)
    yexec = Y.bind(dev, {'X' : x}, {'X': xgrad})
    mx.random.seed(128)
    yexec.forward(is_train=True)
    yexec.backward(yexec.outputs[0])
    un1 = (yexec.outputs[0] - x).copyto(dev)
    assert same(xgrad.asnumpy(), un1.asnumpy())
    mx.random.seed(128)
    yexec.forward()
    un2 = (yexec.outputs[0] - x).copyto(dev)
    assert same(un1.asnumpy(), un2.asnumpy())
    assert abs(np.mean(un1.asnumpy()) - (a+b)/2) < 0.1

    Y = mx.sym.normal(loc=mu, scale=sigma, shape=shape)
    yexec = Y.simple_bind(dev)
    mx.random.seed(128)
    yexec.forward()
    ret1 = yexec.outputs[0].copyto(dev)
    mx.random.seed(128)
    ret2 = mx.random.normal(mu, sigma, shape)
    assert same(ret1.asnumpy(), ret2.asnumpy())
    assert abs(np.mean(ret1.asnumpy()) - mu) < 0.1
    assert abs(np.std(ret1.asnumpy()) - sigma) < 0.1


def test_random():
    check_with_device(mx.cpu())
    check_symbolic_random(mx.cpu())


if __name__ == '__main__':
    test_random()
