-
Notifications
You must be signed in to change notification settings - Fork 31
/
test_distribution.py
59 lines (53 loc) · 2.91 KB
/
test_distribution.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import numpy as np
import pytest
import psyneulink.core.llvm as pnlvm
import psyneulink.core.components.functions.distributionfunctions as Functions
np.random.seed(0)
test_var = np.random.rand()
RAND1 = np.random.rand()
RAND2 = np.random.rand()
RAND3 = np.random.rand()
RAND4 = np.random.rand()
RAND5 = np.random.rand()
test_data = [
(Functions.DriftDiffusionAnalytical, test_var, {}, None,
(1.9774974807292212, 0.012242689689501842, 1.9774974807292207, 1.3147677945132479, 1.7929299891370192, 1.9774974807292207, 1.3147677945132479, 1.7929299891370192)),
(Functions.DriftDiffusionAnalytical, test_var, {"drift_rate": RAND1, "threshold": RAND2, "starting_point": RAND3, "t0":RAND4, "noise": RAND5}, None,
(0.4236547993389047, -2.7755575615628914e-17, 0.5173675420165031, 0.06942854144616283, 6.302631815990666, 1.4934079600147951, 0.4288991185241868, 1.7740760781361433)),
(Functions.DriftDiffusionAnalytical, -test_var, {"drift_rate": RAND1, "threshold": RAND2, "starting_point": RAND3, "t0":RAND4, "noise": RAND5}, None,
(0.42365479933890504, 0.0, 0.5173675420165031, 0.06942854144616283, 6.302631815990666, 1.4934079600147951, 0.4288991185241868, 1.7740760781361433)),
# FIXME: Rounding errors result in different behaviour on different platforms
# (Functions.DriftDiffusionAnalytical, 1e-4, {"drift_rate": 1e-5, "threshold": RAND2, "starting_point": RAND3, "t0":RAND4, "noise": RAND5}, "Rounding errors",
# (0.5828813465336954, 0.04801236718458773, 0.532471083815943, 0.09633801362499317, 6.111833139205608, 1.5821207676710864, 0.5392724012504414, 1.8065252817609618)),
# Two tests with different inputs to show that input is ignored.
(Functions.NormalDist, 1e14, {"mean": RAND1, "standard_deviation": RAND2}, None, (1.0890232855122397)),
(Functions.NormalDist, 1e-4, {"mean": RAND1, "standard_deviation": RAND2}, None, (1.0890232855122397)),
]
# use list, naming function produces ugly names
names = [
"DriftDiffusionAnalytical-DefaultParameters",
"DriftDiffusionAnalytical-RandomParameters",
"DriftDiffusionAnalytical-NegInput",
# "DriftDiffusionAnalytical-SmallDriftRate",
"NormalDist1",
"NormalDist2",
]
@pytest.mark.function
@pytest.mark.transfer_function
@pytest.mark.benchmark
@pytest.mark.parametrize("func, variable, params, llvm_skip, expected", test_data, ids=names)
def test_execute(func, variable, params, llvm_skip, expected, benchmark, func_mode):
benchmark.group = "TransferFunction " + func.componentName
if func_mode != 'Python' and llvm_skip:
pytest.skip(llvm_skip)
f = func(default_variable=variable, **params)
if func_mode == 'Python':
ex = f
elif func_mode == 'LLVM':
ex = pnlvm.execution.FuncExecution(f).execute
elif func_mode == 'PTX':
ex = pnlvm.execution.FuncExecution(f).cuda_execute
res = ex(variable)
assert np.allclose(res, expected)
if benchmark.enabled:
benchmark(f.function, variable)