def _connect(self): cl = [] v = 0 for i in numpy.nonzero(self.target.pop._mask_local)[0]: samples = self.target.get_neuron_annotation(i,self.parameters.annotation_reference_name) weights = self._obtain_weights(i) delays = self._obtain_delays(i) if self.parameters.num_samples == 0: co = Counter(sample_from_bin_distribution(weights, int(samples))) else: assert self.parameters.num_samples > 2*int(samples), ("%s: %d %d" % (self.name,self.parameters.num_samples,2*int(samples))) co = Counter(sample_from_bin_distribution(weights, int(self.parameters.num_samples - 2*int(samples)))) v = v + numpy.sum(co.values()) k = co.keys() a = numpy.array([k,numpy.zeros(len(k))+i,self.weight_scaler*numpy.multiply(self.parameters.base_weight.next(len(k)),co.values()),numpy.array(delays)[k]]) cl.append(a) cl = numpy.hstack(cl).T method = self.sim.FromListConnector(cl) logger.warning("%s(%s): %g connections were created, %g per target neuron [%g]" % (self.name,self.__class__.__name__,len(cl),len(cl)/len(numpy.nonzero(self.target.pop._mask_local)[0]),v/len(numpy.nonzero(self.target.pop._mask_local)[0]))) if len(cl) > 0: self.proj = self.sim.Projection( self.source.pop, self.target.pop, method, synapse_type=self.init_synaptic_mechanisms(), label=self.name, receptor_type=self.parameters.target_synapses) else: logger.warning("%s(%s): empty projection - pyNN projection not created." % (self.name,self.__class__.__name__))
def _connect(self): cl = [] v = 0 for i in numpy.nonzero(self.target.pop._mask_local)[0]: samples = self.target.get_neuron_annotation(i,self.parameters.annotation_reference_name) weights = self._obtain_weights(i) delays = self._obtain_delays(i) if self.parameters.num_samples == 0: co = Counter(sample_from_bin_distribution(weights, int(samples))) else: assert self.parameters.num_samples > 2*int(samples), ("%s: %d %d" % (self.name,self.parameters.num_samples,2*int(samples))) co = Counter(sample_from_bin_distribution(weights, int(self.parameters.num_samples - 2*int(samples)))) v = v + numpy.sum(co.values()) k = co.keys() a = numpy.array([k,numpy.zeros(len(k))+i,self.weight_scaler*numpy.multiply(self.parameters.base_weight.next(len(k)),co.values()),numpy.array(delays)[k]]) cl.append(a) cl = numpy.hstack(cl).T method = self.sim.FromListConnector(cl) logger.warning("%s(%s): %g connections were created, %g per target neuron [%g]" % (self.name,self.__class__.__name__,len(cl),len(cl)/len(numpy.nonzero(self.target.pop._mask_local)[0]),v/len(numpy.nonzero(self.target.pop._mask_local)[0]))) if len(cl) > 0: self.proj = self.sim.Projection( self.source.pop, self.target.pop, method, synapse_type=self.init_synaptic_mechanisms(), label=self.name, receptor_type=self.parameters.target_synapses) else: logger.warning("%s(%s): empty projection - pyNN projection not created." % (self.name,self.__class__.__name__))
def worker(ref,idxs): for i in idxs: samples = self.target.get_neuron_annotation(i,self.parameters.annotation_reference_name) weights = self._obtain_weights(i) delays = self._obtain_delays(i) if self.parameters.num_samples == 0: co = Counter(sample_from_bin_distribution(weights, int(samples))) else: assert self.parameters.num_samples > 2*int(samples), ("%s: %d %d" % (self.name,self.parameters.num_samples,2*int(samples))) a = sample_from_bin_distribution(weights, int(self.parameters.num_samples - 2*int(samples))) co = Counter(a) v = v + numpy.sum(co.values()) cl.extend([(int(k),int(i),self.weight_scaler*self.parameters.base_weight.next()*co[k],delays[k]) for k in co.keys()]) return cl
def worker(ref,idxs): for i in idxs: samples = self.target.get_neuron_annotation(i,self.parameters.annotation_reference_name) weights = self._obtain_weights(i) delays = self._obtain_delays(i) if self.parameters.num_samples == 0: co = Counter(sample_from_bin_distribution(weights, int(samples))) else: assert self.parameters.num_samples > 2*int(samples), ("%s: %d %d" % (self.name,self.parameters.num_samples,2*int(samples))) a = sample_from_bin_distribution(weights, int(self.parameters.num_samples - 2*int(samples))) co = Counter(a) v = v + numpy.sum(co.values()) cl.extend([(int(k),int(i),self.weight_scaler*self.parameters.base_weight.next()[0]*co[k],delays[k]) for k in co.keys()]) return cl
def _connect(self): # This is due to native synapses models (which we currently use as the short term synaptic plasticity model) # do not apply the 1000 factor scaler as the pyNN synaptic models wf = self.parameters.weight_factor * self.weight_scaler seeds = mozaik.get_seeds(self.target.pop.size) weights = self.connection_matrix delays = self.delay_matrix cl = [] for i in range(0, self.target.pop.size): co = Counter( sample_from_bin_distribution(weights[:, i].flatten(), int(self.parameters.num_samples), seeds[i])) cl.extend([(int(k), int(i), wf * co[k] / self.parameters.num_samples, delays[k][i]) for k in co.keys()]) method = self.sim.FromListConnector(cl) self.proj = self.sim.Projection( self.source.pop, self.target.pop, method, synapse_type=self.init_synaptic_mechanisms(), label=self.name, receptor_type=self.parameters.target_synapses)
def build_connector(indices, seeds, queue_cl, queue_v): cli = [] vi = 0 for i in range(len(indices)): weights = self._obtain_weights(indices[i], seeds[i]) delays = self._obtain_delays(indices[i], seeds[i]) co = Counter( sample_from_bin_distribution( weights, int(self.parameters.num_samples.next()), seeds[i])) vi = vi + numpy.sum(list(co.values())) k = list(co.keys()) a = numpy.array([ k, numpy.zeros(len(k)) + indices[i], self.weight_scaler * numpy.multiply( self.parameters.base_weight.copy(seeds[i]).next( len(k)), list(co.values())), numpy.array(delays)[k], ]) cli.append(a) # Add the output to the two queues to communicate it with the main process queue_cl.put(cli) queue_v.put(vi)
def build_connector(indices, seeds, queue_cl, queue_v): cli = [] vi = 0 for i in range(len(indices)): samples = self.target.get_neuron_annotation( indices[i], self.parameters.annotation_reference_name) weights = self._obtain_weights(indices[i], seeds[i]) delays = self._obtain_delays(indices[i], seeds[i]) if self.parameters.num_samples == 0: co = Counter( sample_from_bin_distribution(weights, int(samples), seeds[i])) else: assert self.parameters.num_samples > 2 * int( samples), "%s: %d %d" % ( self.name, self.parameters.num_samples, 2 * int(samples), ) co = Counter( sample_from_bin_distribution( weights, int(self.parameters.num_samples - 2 * int(samples)), seeds[i], )) vi = vi + numpy.sum(list(co.values())) k = list(co.keys()) a = numpy.array([ k, numpy.zeros(len(k)) + indices[i], self.weight_scaler * numpy.multiply( self.parameters.base_weight.copy(seeds[i]).next( len(k)), list(co.values())), numpy.array(delays)[k], ]) cli.append(a) # Add the output to the two queues to communicate it with the main process queue_cl.put(cli) queue_v.put(vi)
def _connect(self): cl = [] for i in numpy.nonzero(self.target.pop._mask_local)[0]: weights = self._obtain_weights(i) delays = self._obtain_delays(i) co = Counter(sample_from_bin_distribution(weights, int(self.parameters.num_samples.next()))) cl.extend([(k,i,self.weight_scaler*self.parameters.base_weight.next()*co[k],delays[k]) for k in co.keys()]) method = self.sim.FromListConnector(cl) if len(cl) > 0: self.proj = self.sim.Projection( self.source.pop, self.target.pop, method, synapse_type=self.init_synaptic_mechanisms(), label=self.name, receptor_type=self.parameters.target_synapses) else: logger.warning("%s(%s): empty projection - pyNN projection not created." % (self.name,self.__class__.__name__))
def connect(self): cl = [] d={} for i,(s,t,w,delay) in enumerate(self.connection_list): if d.has_key(t): d[t].append(i) else: d[t] = [i] for k in d.keys(): w = [self.connection_list[i][2] for i in d[k]] samples = sample_from_bin_distribution(w,self.parameters.num_samples) a = [self.connection_list[d[k][s]] for s in samples] cl.extend([(a,b,self.parameters.weight_factor/len(samples),de) for (a,b,c,de) in a]) method = self.sim.FromListConnector(cl) self.proj = self.sim.Projection(self.source.pop, self.target.pop, method, synapse_dynamics=self.short_term_plasticity, label=self.name, rng=None, target=self.parameters.target_synapses)
def _connect(self): # This is due to native synapses models (which we currently use as the short term synaptic plasticity model) # do not apply the 1000 factor scaler as the pyNN synaptic models wf = self.parameters.weight_factor * self.weight_scaler weights = self.connection_matrix delays = self.delay_matrix cl = [] for i in xrange(0,self.target.pop.size): co = Counter(sample_from_bin_distribution(weights[:,i].flatten(), int(self.parameters.num_samples))) cl.extend([(int(k),int(i),wf*co[k]/self.parameters.num_samples,delays[k][i]) for k in co.keys()]) method = self.sim.FromListConnector(cl) self.proj = self.sim.Projection( self.source.pop, self.target.pop, method, synapse_type=self.init_synaptic_mechanisms(), label=self.name, receptor_type=self.parameters.target_synapses)
def _connect(self): cl = [] for i in numpy.nonzero(self.target.pop._mask_local)[0]: weights = self._obtain_weights(i) delays = self._obtain_delays(i) co = Counter( sample_from_bin_distribution(weights, self.parameters.num_samples)) cl.extend([(k, i, self.weight_scaler * self.parameters.base_weight * co[k], delays[k]) for k in co.keys()]) method = self.sim.FromListConnector(cl) if len(cl) > 0: self.proj = self.sim.Projection( self.source.pop, self.target.pop, method, synapse_type=self.init_synaptic_mechanisms(), label=self.name, receptor_type=self.parameters.target_synapses) else: logger.warning( "%s(%s): empty projection - pyNN projection not created." % (self.name, self.__class__.__name__))
def _determine_weights_and_delays(self,i): weights = self._obtain_weights(i) delays = self._obtain_delays(i) co = Counter(sample_from_bin_distribution(weights, self.parameters.num_samples.next())) return co.keys(),[self.weight_scaler*self.parameters.base_weight.next()*co[k] for k in co.keys()],[delays[k] for k in co.keys()]