def _set_cython_attribute(self, attribute, value): """ Sets the value of the given attribute for all neurons in the population, as a Numpy array having the same geometry as the population if it is local. :param attribute: should be a string representing the variables's name. :param value: a value or Numpy array of the right size. """ try: ctype = self._get_attribute_cpp_type(attribute) if attribute in self.neuron_type.description['local']: if isinstance(value, np.ndarray): self.cyInstance.set_local_attribute_all( attribute, value.reshape(self.size), ctype) elif isinstance(value, list): self.cyInstance.set_local_attribute_all( attribute, np.array(value).reshape(self.size), ctype) else: self.cyInstance.set_local_attribute_all( attribute, value * np.ones(self.size), ctype) else: self.cyInstance.set_global_attribute(attribute, value, ctype) except Exception as e: Global._debug(e) err_msg = """Population.set(): either the variable '%(attr)s' does not exist in the population '%(pop)s', or the provided array does not have the right size.""" Global._error(err_msg % {'attr': attribute, 'pop': self.name})
def _set_cython_attribute(self, attribute, value): """ Sets the value of the given attribute for all neurons in the population, as a NumPy array having the same geometry as the population if it is local. *Parameter:* * **attribute**: should be a string representing the variables's name. * **value**: a value or Numpy array of the right size. """ try: if attribute in self.neuron_type.description['local']: if isinstance(value, np.ndarray): getattr(self.cyInstance, 'set_'+attribute)(value.reshape(self.size)) elif isinstance(value, list): getattr(self.cyInstance, 'set_'+attribute)(np.array(value).reshape(self.size)) else: getattr(self.cyInstance, 'set_'+attribute)(value * np.ones( self.size )) else: getattr(self.cyInstance, 'set_'+attribute)(value) except Exception as e: Global._debug(e) err_msg = """Population.set(): either the variable '%(attr)s' does not exist in the population '%(pop)s', or the provided array does not have the right size.""" Global._error(err_msg % { 'attr': attribute, 'pop': self.name } )
def add_network(self, py_instance): """ Adds an empty structure for a new network and returns the new network ID. """ new_dict = { 'populations': [], 'projections': [], 'monitors': [], 'extensions': [], 'instance': None, 'compiled': False, 'directory': None } found = -1 # scan for slots which were freed before for i, entry in enumerate(self._network): if entry == None and self._py_instances[i] == None: found = i break # dependent on the scan append at the end # or fill free slot if found == -1: new_id = len(self._network) self._network.append(new_dict) self._py_instances.append(py_instance) else: new_id = found self._network[new_id] = new_dict self._py_instances[new_id] = py_instance Global._debug("Added network", new_id) return new_id
def _set_cython_attribute(self, attribute, value): """ Sets the value of the given attribute for all neurons in the population, as a NumPy array having the same geometry as the population if it is local. Parameter: * *attribute*: should be a string representing the variables's name. * *value*: a value or Numpy array of the right size. """ try: if attribute in self.neuron_type.description['local']: if isinstance(value, np.ndarray): getattr(self.cyInstance, 'set_' + attribute)(value.reshape(self.size)) elif isinstance(value, list): getattr(self.cyInstance, 'set_' + attribute)( np.array(value).reshape(self.size)) else: getattr(self.cyInstance, 'set_' + attribute)(value * np.ones(self.size)) else: getattr(self.cyInstance, 'set_' + attribute)(value) except Exception as e: Global._debug(e) err_msg = """either the variable '%(attr)s' does not exist in the population '%(pop)s', or the provided array does not have the right size.""" Global._error(err_msg % {'attr': attribute, 'pop': self.name})
def _remove_network(self, py_instance): """ Remove the given network from the list of compilable/instantiable networks. It is important to invalidate only the slot. If del is called on the dictionary entry then this will lead to a removal of the space and therefore all succesequent networks would be assigned wrong. This function will be called from the Network.__del__() method, after destruction of the attached objects. """ Global._debug("Remove network", py_instance) net_id = -1 for net_id, inst in enumerate(self._py_instances): if inst == py_instance: self._network[net_id] = None self._py_instances[net_id] = None