Source code for bmtk.simulator.bionet.gids
import numpy as np
from collections import namedtuple
PopulationID = namedtuple('PopulationID', 'node_id population')
[docs]class GidPool(object):
def __init__(self):
# map from pool-id --> gid
self._accumulated_offset = 0
self._pool_offsets = {}
# map from gid --> pop, node_id
self._offsets = np.array([0], dtype=np.uint64)
self._offset2pool_map = {}
[docs] def add_pool(self, name, n_nodes):
offset_index = len(self._offsets)
self._offset2pool_map[offset_index] = name
self._offsets = np.append(self._offsets, np.array([self._accumulated_offset + n_nodes], dtype=np.uint64))
self._pool_offsets[name] = self._accumulated_offset
self._accumulated_offset += n_nodes
[docs] def get_gid(self, name, node_id):
return int(self._pool_offsets[name] + node_id)
[docs] def get_pool_id(self, gid):
offset_indx = np.searchsorted(self._offsets, gid, 'right')
node_id = gid - self._offsets[offset_indx-1]
pool_name = self._offset2pool_map[offset_indx]
return PopulationID(int(node_id), pool_name)