Changeset 433
- Timestamp:
- 08/05/08 13:59:20 (2 months ago)
- Files:
-
- trunk/src/nest1/connectors.py (modified) (2 diffs)
- trunk/src/nest2/__init__.py (modified) (14 diffs)
- trunk/src/nest2/connectors.py (modified) (11 diffs)
- trunk/test/Results (added)
- trunk/test/VAbenchmarks.py (modified) (1 diff)
- trunk/test/simple_STDP.py (modified) (2 diffs)
- trunk/test/unittests/nest2tests.py (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/nest1/connectors.py
r415 r433 21 21 all_positive = (weight>=0).all() 22 22 assert all_negative or all_positive, "Weights must be either all positive or all negative" 23 if synapse_type == 'inhibitory': 24 if all_positive: 25 weight *= -1 23 if synapse_type == 'inhibitory' and all_positive: 24 weight *= -1 26 25 elif is_number(weight): 27 26 if synapse_type == 'inhibitory' and weight > 0: … … 73 72 presynaptic_neurons = numpy.reshape(projection.pre.cell,(projection.pre.cell.size,)) 74 73 npre = projection.pre.size 74 if projection.rng: 75 if isinstance(projection.rng, NativeRNG): 76 print "Warning: use of NativeRNG not implemented. Using NumpyRNG" 77 rng = numpy.random 78 else: 79 rng = projection.rng 80 else: 81 rng = numpy.random 75 82 for post in postsynaptic_neurons: 76 if projection.rng: 77 rarr = projection.rng.uniform(0,1,(npre,)) # what about NativeRNG? 78 else: 79 rarr = numpy.random.uniform(0,1,(npre,)) 83 rarr = rng.uniform(0, 1, npre) # what about NativeRNG? 80 84 source_list = numpy.compress(numpy.less(rarr, self.p_connect), presynaptic_neurons).tolist() 81 85 # if self connections are not allowed, check whether pre and post are the same trunk/src/nest2/__init__.py
r432 r433 125 125 if file is False: 126 126 device_parameters.update(to_file=False, to_memory=True) 127 # line needed for old version of nest 2.0 128 # device_parameters.pop('to_memory') 127 129 nest.SetStatus(self._device, device_parameters) 128 130 … … 574 576 if isinstance(cellclass, type): 575 577 self.celltype = cellclass(cellparams) 578 self.cellparams = self.celltype.parameters 576 579 if not parent: 577 580 self.cell = nest.Create(self.celltype.nest_name, self.size) … … 579 582 #A SubPopulation has been created, those fields will be filled later 580 583 self.cell = [] 581 self.cellparams = self.celltype.parameters582 584 elif isinstance(cellclass, str): 583 585 if not parent: … … 911 913 nest.sps(self.recorders['spikes']._device[0]) 912 914 nest.sr("%d GetAddress %d append" %(self.recorders['spikes']._device[0], node)) 915 #nest.sr("GetStatus /events get") 913 916 nest.sr("GetStatus /n_events get") 914 917 n_spikes += nest.spp() … … 985 988 986 989 def __init__(self, parent): 987 self.parent = parent 990 self.parent = parent 991 self.port_idx = 0 992 self.last_conn = (0,0) 993 994 def reset(self): 995 self.port_idx = 0 996 self.last_conn = (0,0) 988 997 989 998 def __getitem__(self, id): 990 999 """Returns a (source address, target port number) tuple.""" 991 assert isinstance(id, int) 992 return (self.parent._sources[id], self.parent._target_ports[id]) 1000 src = self.parent._sources[id] 1001 tgt = self.parent._targets[id] 1002 connections = nest.FindConnections([src],[tgt], self.parent.plasticity_name) 1003 # We keep this counter to be sure that, when several connections have been 1004 # established for the same source <-> target, we iterates over those connections 1005 # Note that, for the moment, there may a problem if the sources/targets lists are 1006 # not sorted according to the sources. 1007 if (src,tgt) == self.last_conn: 1008 self.port_idx += 1 1009 else: 1010 self.port_idx = 0 1011 self.last_conn = (src,tgt) 1012 return (src,connections['ports'][self.port_idx]) 993 1013 994 1014 def __init__(self, presynaptic_population, postsynaptic_population, … … 1042 1062 # Set synaptic plasticity parameters 1043 1063 original_synapse_context = nest.GetSynapseContext() 1044 #self.plasticity_name = self.label.replace(" ","_to_") 1045 #nest.CopySynapseType(self._plasticity_model,"excitatory") 1046 nest.SetSynapseContext(self._plasticity_model) 1064 1065 # We create a particular synapse context just for this projection, by copying 1066 # the one which is desired. The name of the synapse context is randomly generated 1067 # and will be available as projection.plasticity_name 1068 self.plasticity_name = "%d" %numpy.random.random_integers(0,1000) 1069 #self.plasticity_name = self.label.replace(" â ","_to_") 1070 nest.CopySynapseType(self._plasticity_model,self.plasticity_name) 1071 # Then we define this copy of the standard plasticity model as the current one) 1072 nest.SetSynapseContext(self.plasticity_name) 1047 1073 1048 1074 if hasattr(self, '_short_term_plasticity_parameters') and self._short_term_plasticity_parameters: 1049 synapse_defaults = nest.GetSynapseDefaults(self. _plasticity_model)1075 synapse_defaults = nest.GetSynapseDefaults(self.plasticity_name) 1050 1076 synapse_defaults.pop('num_connections') # otherwise NEST tells you to check your spelling! 1051 1077 if 'num_connectors' in synapse_defaults: 1052 1078 synapse_defaults.pop('num_connectors') 1053 1079 synapse_defaults.update(self._short_term_plasticity_parameters) 1054 1055 nest.SetSynapseDefaults(self._plasticity_model, synapse_defaults) 1080 nest.SetSynapseDefaults(self.plasticity_name, synapse_defaults) 1056 1081 1057 1082 if hasattr(self, '_stdp_parameters') and self._stdp_parameters: … … 1068 1093 raise Exception("Postsynaptic cell model does not support STDP.") 1069 1094 1070 synapse_defaults = nest.GetSynapseDefaults(self. _plasticity_model)1095 synapse_defaults = nest.GetSynapseDefaults(self.plasticity_name) 1071 1096 if 'num_connectors' in synapse_defaults: 1072 1097 synapse_defaults.pop('num_connectors') # otherwise NEST tells you to check your spelling! 1073 1098 synapse_defaults.pop('num_connections') # otherwise NEST tells you to check your spelling! 1074 1099 synapse_defaults.update(self._stdp_parameters) 1075 nest.SetSynapseDefaults(self. _plasticity_model, synapse_defaults)1100 nest.SetSynapseDefaults(self.plasticity_name, synapse_defaults) 1076 1101 1077 1102 # Create connections … … 1097 1122 def connections(self): 1098 1123 """for conn in prj.connections()...""" 1124 self.connection.reset() 1099 1125 for i in xrange(len(self)): 1100 1126 yield self.connection[i] … … 1230 1256 if optimized: 1231 1257 for src in self.pre.cell.flat: 1232 _set_connections(src, self. _plasticity_model, **{name: value})1258 _set_connections(src, self.plasticity_name, **{name: value}) 1233 1259 else: 1234 1260 for src, port in self.connections(): 1235 _set_connection(src, port, self. _plasticity_model, **{name: value})1261 _set_connection(src, port, self.plasticity_name, **{name: value}) 1236 1262 elif isinstance(value, (list, numpy.ndarray)): 1237 1263 # this is probably not the most efficient way - should sort by src and then use SetConnections? … … 1239 1265 for (src,port),v in zip(self.connections(), value): 1240 1266 try: 1241 _set_connection(src, port, self. _plasticity_model, **{name: v})1267 _set_connection(src, port, self.plasticity_name, **{name: v}) 1242 1268 except common.RoundingWarning: 1243 1269 logging.warning("Rounding occurred when setting %s to %s" % (name, v)) … … 1296 1322 self._method) 1297 1323 print "\tsource\ttarget\tport" 1298 for conn in zip(self._sources, self._targets, self._target_ports): 1299 print "\t%d\t%d\t%d" % conn 1324 for src,tgt in zip(self._sources, self._targets): 1325 connections = nest.FindConnections([src],[tgt],self.plasticity_name) 1326 for port in connections['ports']: 1327 print "\t%d\t%d\t%d" % (src, tgt, port) 1300 1328 print "Connection data for the presynaptic population (%s)" % self.pre.label 1301 1329 for src in self.pre.cell.flat: 1302 print src, nest.GetConnections([src], self. _plasticity_model)1330 print src, nest.GetConnections([src], self.plasticity_name) 1303 1331 1304 1332 def _get_connection_values(self, format, parameter_name, gather): … … 1307 1335 values = [] 1308 1336 for src, port in self.connections(): 1309 values.append(_get_connection(src, port, self. _plasticity_model, parameter_name))1337 values.append(_get_connection(src, port, self.plasticity_name, parameter_name)) 1310 1338 elif format == 'array': 1311 1339 values = numpy.zeros((self.pre.size, self.post.size)) 1312 1340 for src, port in self.connections(): 1313 v, tgt = _get_connection(src, port, self. _plasticity_model,1341 v, tgt = _get_connection(src, port, self.plasticity_name, 1314 1342 parameter_name, 'target') 1315 1343 # note that we assume that Population ids are consecutive, which is the case, but we should … … 1350 1378 weights = []; delays = [] 1351 1379 for src, port in self.connections(): 1352 weight, delay = _get_connection(src, port, self. _plasticity_model,1380 weight, delay = _get_connection(src, port, self.plasticity_name, 1353 1381 'weight', 'delay') 1354 1382 # Note unit change from pA to nA or nS to uS, depending on synapse type … … 1394 1422 """ 1395 1423 description = common.Projection.describe(self, template) 1396 description += "\n Parameters of connection from %d to %d [port %d]" % (self._sources[0], self._targets[0], self._target_ports[0]) 1397 dict = nest.GetConnections([self.pre.cell.flat[0]], self._plasticity_model)[0] 1424 src = self._sources[0] 1425 tgt = self._targets[0] 1426 port = nest.FindConnections([src],[tgt],self.plasticity_name)['ports'][0] 1427 description += "\n Parameters of connection from %d to %d [port %d]" % (src, tgt, port) 1428 dict = nest.GetConnections([self.pre.cell.flat[0]], self.plasticity_name)[0] 1398 1429 for i in xrange(len(self._targets)): 1399 1430 idx = numpy.where(numpy.array(dict['targets']) == self._targets[i])[0] trunk/src/nest2/connectors.py
r415 r433 12 12 from pyNN.random import RandomDistribution, NativeRNG 13 13 from math import * 14 from random import sample 14 15 from numpy import arccos, arcsin, arctan, arctan2, ceil, cos, cosh, e, exp, \ 15 16 fabs, floor, fmod, hypot, ldexp, log, log10, modf, pi, power, \ … … 22 23 all_positive = (weight>=0).all() 23 24 assert all_negative or all_positive, "Weights must be either all positive or all negative" 24 if synapse_type == 'inhibitory': 25 if all_positive: 26 weight *= -1 25 if synapse_type == 'inhibitory' and all_positive: 26 weight *= -1 27 27 elif is_number(weight): 28 28 if synapse_type == 'inhibitory' and weight > 0: … … 46 46 47 47 def connect(self, projection): 48 postsynaptic_neurons = projection.post.cell .flatten()48 postsynaptic_neurons = projection.post.cell_local.flatten() 49 49 target_list = postsynaptic_neurons.tolist() 50 50 for pre in projection.pre.cell.flat: … … 60 60 projection._targets += target_list 61 61 projection._sources += [pre]*N 62 projection._target_ports += get_target_ports(pre, target_list, projection._plasticity_model)62 #projection._target_ports += get_target_ports(pre, target_list, projection._plasticity_model) 63 63 nest.DivergentConnectWD([pre], target_list, weights, delays) 64 64 return len(projection._targets) … … 71 71 projection._targets = projection.post.cell.flatten() 72 72 N = len(projection._sources) 73 projection._target_ports = [get_target_ports(pre, [None], projection._plasticity_model)[0] for pre in projection._sources]73 #projection._target_ports = [get_target_ports(pre, [None], projection._plasticity_model)[0] for pre in projection._sources] 74 74 weights = self.getWeights(N) 75 75 weights = _convertWeight(weights, projection.synapse_type).tolist() … … 83 83 84 84 def connect(self, projection): 85 postsynaptic_neurons = projection.post.cell .flatten()85 postsynaptic_neurons = projection.post.cell_local 86 86 npost = len(postsynaptic_neurons) 87 for pre in projection.pre.cell.flat: 88 if projection.rng: 89 rarr = projection.rng.uniform(0, 1, (npost,)) # what about NativeRNG? 90 else: 91 rarr = numpy.random.uniform(0, 1, (npost,)) 87 if projection.rng: 88 if isinstance(projection.rng, NativeRNG): 89 print "Warning: use of NativeRNG not implemented. Using NumpyRNG" 90 rng = numpy.random 91 else: 92 rng = projection.rng 93 else: 94 rng = numpy.random 95 for pre in projection.pre.cell.flat: 96 rarr = rng.uniform(0, 1, npost) # what about NativeRNG? 92 97 target_list = numpy.compress(numpy.less(rarr, self.p_connect), postsynaptic_neurons).tolist() 98 #N = rng.binomial(npost,self.p_connect,1)[0] 99 #target_list = sample(postsynaptic_neurons, N) 93 100 # if self connections are not allowed, check whether pre and post are the same 94 101 if not self.allow_self_connections and pre in target_list: … … 97 104 weights = self.getWeights(N) 98 105 weights = _convertWeight(weights, projection.synapse_type).tolist() 99 delays = self.getDelays(N).tolist()106 delays = self.getDelays(N).tolist() 100 107 projection._targets += target_list 101 108 projection._sources += [pre]*N 102 projection._target_ports += get_target_ports(pre, target_list, projection._plasticity_model)109 #projection._target_ports += get_target_ports(pre, target_list, projection._plasticity_model) 103 110 nest.DivergentConnectWD([pre], target_list, weights, delays) 104 111 return len(projection._sources) … … 157 164 projection._targets += target_list 158 165 projection._sources += [pre]*N 159 projection._target_ports += get_target_ports(pre, target_list, projection._plasticity_model)166 #projection._target_ports += get_target_ports(pre, target_list, projection._plasticity_model) 160 167 nest.DivergentConnectWD([pre], target_list, weights, delays) 161 168 return len(projection._sources) … … 191 198 total_targets = len(all_targets) 192 199 projection._targets += all_targets[-N:] 193 projection._target_ports += range(total_targets-N, total_targets)200 #projection._target_ports += range(total_targets-N, total_targets) 194 201 return len(projection._sources) 195 202 … … 235 242 end_ports = _n_connections(projection.pre, projection._plasticity_model) 236 243 for pre, start_port, end_port in zip(presynaptic_neurons, start_ports, end_ports): 237 projection._target_ports += range(start_port, end_port)244 #projection._target_ports += range(start_port, end_port) 238 245 projection._sources += [pre]*(end_port-start_port) 239 246 conn_dict = nest.GetConnections([pre], projection._plasticity_model)[0] … … 253 260 projection._sources.append(src) 254 261 projection._targets.append(tgt) 255 projection._target_ports.append(get_target_ports(src, [tgt], projection._plasticity_model)[0])262 #projection._target_ports.append(get_target_ports(src, [tgt], projection._plasticity_model)[0]) 256 263 weights.append(_convertWeight(weight, projection.synapse_type)) 257 264 delays.append(delay) trunk/test/VAbenchmarks.py
r409 r433 140 140 rng = NumpyRNG(seed=rngseed, parallel_safe=False, rank=node_id, num_processes=np) 141 141 uniformDistr = RandomDistribution('uniform', [v_reset,v_thresh], rng=rng) 142 if simulator == "brian":143 uniformDistr = RandomDistribution('uniform', [v_reset*0.001,v_thresh*0.001], rng=rng)144 142 exc_cells.randomInit(uniformDistr) 145 143 inh_cells.randomInit(uniformDistr) trunk/test/simple_STDP.py
r415 r433 36 36 37 37 if simulator == "nest2": 38 print nest.GetConnection([p1[0]], 'stdp_synapse_hom', 0)38 print nest.GetConnection([p1[0]], prj.plasticity_name, 0) 39 39 print nest.GetStatus([p2[0]]) 40 40 … … 47 47 while t < 50: 48 48 t = run(1.0) 49 syn_dict = nest.GetConnection([p1[0]], 'stdp_synapse_hom', 0)49 syn_dict = nest.GetConnection([p1[0]], prj.plasticity_name, 0) 50 50 print "%4.1f %6.4f %7.3f %6.4f" % (t, prj.getWeights()[0], syn_dict['Kplus'], syn_dict['weight']) 51 51 #run(1000.0) trunk/test/unittests/nest2tests.py
r410 r433 11 11 import os 12 12 13 def get_weight(src, port ):14 conn_dict = nest.nest.GetConnection([src], 'static_synapse', port)13 def get_weight(src, port, plasticity_name): 14 conn_dict = nest.nest.GetConnection([src], plasticity_name, port) 15 15 if isinstance(conn_dict, dict): 16 16 return conn_dict['weight'] … … 18 18 raise Exception("Either the source id (%s) or the port number (%s) or both is invalid." % (src, port)) 19 19 20 def get_delay(src, port ):21 conn_dict = nest.nest.GetConnection([src], 'static_synapse', port)20 def get_delay(src, port, plasticity_name): 21 conn_dict = nest.nest.GetConnection([src], plasticity_name, port) 22 22 if isinstance(conn_dict, dict): 23 23 return conn_dict['delay'] … … 445 445 ###print "--------", prj.label, srcP.label, tgtP.label, src, tgt 446 446 ###print nest.nest.GetConnections([src],'static_synapse') ### 447 weights.append(get_weight(src, tgt ))447 weights.append(get_weight(src, tgt, prj.plasticity_name)) 448 448 assert weights == [0.0]*len(prj._sources) 449 449 … … 483 483 for src, tgt in prj.connections(): 484 484 #print nest.nest.GetConnections([src],[tgt]) 485 weights.append(get_weight(src, tgt ))485 weights.append(get_weight(src, tgt, prj.plasticity_name)) 486 486 assert weights == [0.]*len(prj._sources) 487 487 … … 497 497 # are equal. 498 498 for src,tgt in prj1.connections(): 499 w1.append(get_weight(src, tgt ))500 d1.append(get_delay(src, tgt ))499 w1.append(get_weight(src, tgt, prj1.plasticity_name)) 500 d1.append(get_delay(src, tgt, prj1.plasticity_name)) 501 501 for src,tgt in prj2.connections(): 502 w2.append(get_weight(src, tgt ))503 d2.append(get_delay(src, tgt ))502 w2.append(get_weight(src, tgt, prj2.plasticity_name)) 503 d2.append(get_delay(src, tgt, prj2.plasticity_name)) 504 504 assert (w1 == w2) and (d1 == d2) 505 505 … … 527 527 prj.setWeights(1.234) 528 528 for src, tgt in prj.connections(): 529 assert get_weight(src, tgt ) == 1234.0 # note the difference in units between pyNN and NEST529 assert get_weight(src, tgt, prj.plasticity_name) == 1234.0 # note the difference in units between pyNN and NEST 530 530 531 531 #def testSetAndGetID(self): … … 540 540 weights_out = [] 541 541 for src,tgt in prj.connections(): 542 weights_out.append(0.001*get_weight(src, tgt )) # units conversion542 weights_out.append(0.001*get_weight(src, tgt, prj.plasticity_name)) # units conversion 543 543 self.assert_(arrays_almost_equal(weights_in, weights_out, 1e-8), "%s != %s" % (weights_in, weights_out)) 544 544 … … 549 549 w1 = []; w2 = []; 550 550 for src,tgt in prj1.connections(): 551 w1.append(get_weight(src, tgt ))551 w1.append(get_weight(src, tgt, prj1.plasticity_name)) 552 552 prj1.randomizeWeights(self.distrib_Numpy) 553 553 for src, tgt in prj1.connections(): 554 w2.append(get_weight(src, tgt ))554 w2.append(get_weight(src, tgt, prj1.plasticity_name)) 555 555 self.assertNotEqual(w1,w2) 556 556 … … 561 561 d1 = []; d2 = []; 562 562 for src,tgt in prj1.connections(): 563 d1.append(get_delay(src,tgt ))563 d1.append(get_delay(src,tgt, prj1.plasticity_name)) 564 564 prj1.randomizeDelays(self.distrib_Numpy) 565 565 for src, tgt in prj1.connections(): 566 d2.append(get_delay(src,tgt ))566 d2.append(get_delay(src,tgt, prj1.plasticity_name)) 567 567 self.assertNotEqual(d1,d2) 568 568
