-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnest_FPC.py
138 lines (106 loc) · 4.07 KB
/
nest_FPC.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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
'''
@author: Daniel Hjertholm
Tests for network with fixed connection probability for all
possible connections, created by NEST.
'''
import numpy
import numpy.random as rnd
import nest
import nest.topology as topo
from testsuite.FPC_test import FPCTester
class NEST_FPCTester(FPCTester):
'''
Tests for network with fixed connection probability for all
possible connections, created by NEST.
'''
def __init__(self, N_s, N_t, p, e_min=5):
'''
Construct a test object.
Parameters
----------
N_s : Number of nodes in source population.
N_t : Number of nodes in target population.
p : Connection probability.
e_min : Minimum expected number of observations in each bin.
'''
nest.set_verbosity('M_FATAL')
FPCTester.__init__(self, N_s=N_s, N_t=N_t, p=p, e_min=e_min)
self._L = 1.
maskdict = {'rectangular': {'lower_left': [-self._L / 2.] * 2,
'upper_right': [self._L / 2.] * 2}}
kernel = self._p
self._conndict = {'connection_type': 'divergent',
'mask': maskdict, 'kernel': kernel}
def _reset(self, seed):
'''
Reset simulator and seed the PRNGs.
Parameters
----------
seed: PRNG seed value.
'''
nest.ResetKernel()
if seed is None:
seed = rnd.randint(10 ** 10)
seed = 3 * seed # Reduces probability of overlapping seed values.
rnd.seed(seed)
nest.SetKernelStatus({'rng_seeds': [seed + 1],
'grng_seed': seed + 2})
def _build(self):
'''Create populations.'''
pos = zip((0.,) * self._N_s, (0.,) * self._N_s)
ldict_s = {'elements': 'iaf_neuron', 'positions': pos,
'extent': [self._L] * 2, 'edge_wrap': True}
pos = zip((0.,) * self._N_t, (0.,) * self._N_t)
ldict_t = {'elements': 'iaf_neuron', 'positions': pos,
'extent': [self._L] * 2, 'edge_wrap': True}
self._ls = topo.CreateLayer(ldict_s)
self._lt = topo.CreateLayer(ldict_t)
def _connect(self):
'''Connect populations.'''
topo.ConnectLayers(self._ls, self._lt, self._conndict)
def _degrees(self):
'''Return list of degrees.'''
connections = nest.GetConnections(source=nest.GetLeaves(self._ls)[0])
i = 0 if self._degree == 'out' else 1
connections = [conn[i] for conn in connections]
return self._counter(connections)
class InDegreeTester(NEST_FPCTester):
'''
Tests for the in-degree distribution of networks with fixed connection
probability for all possible connections, created by NEST.
'''
def __init__(self, N_s, N_t, p, e_min=5):
'''
Construct a test object.
Parameters
----------
N_s : Number of nodes in source population.
N_t : Number of nodes in target population.
p : Connection probability.
e_min: Minimum expected number of observations in each bin.
'''
self._degree = 'in'
NEST_FPCTester.__init__(self, N_s, N_t, p, e_min)
class OutDegreeTester(NEST_FPCTester):
'''
Tests for the out-degree distribution of networks with fixed connection
probability for all possible connections, created by NEST.
'''
def __init__(self, N_s, N_t, p, e_min=5):
'''
Construct a test object.
Parameters
----------
N_s : Number of nodes in source population.
N_t : Number of nodes in target population.
p : Connection probability.
e_min: Minimum expected number of observations in each bin.
'''
self._degree = 'out'
NEST_FPCTester.__init__(self, N_s, N_t, p, e_min)
if __name__ == '__main__':
test = InDegreeTester(N_s=30, N_t=100, p=0.5)
ks, p = test.two_level_test(n_runs=100, start_seed=0, control=False)
print 'p-value of KS-test of uniformity:', p
test.show_CDF()
test.show_histogram()