def load_population_data(self, population): """Load node properties from SONATA Nodes. Args: population (str): a population name . Returns: pandas.DataFrame with node properties (zero-based index). """ nodes = self.storage.open_population(population) categoricals = nodes.enumeration_names node_count = nodes.size result = pd.DataFrame(index=np.arange(node_count)) _all = libsonata.Selection([(0, node_count)]) for attr in sorted(nodes.attribute_names): if attr in categoricals: enumeration = np.asarray(nodes.get_enumeration(attr, _all)) values = np.asarray(nodes.enumeration_values(attr)) # if the size of `values` is large enough compared to `enumeration`, not using # categorical reduces the memory usage. if values.shape[0] < 0.5 * enumeration.shape[0]: result[attr] = pd.Categorical.from_codes(enumeration, categories=values) else: result[attr] = values[enumeration] else: result[attr] = nodes.get_attribute(attr, _all) for attr in sorted( utils.add_dynamic_prefix(nodes.dynamics_attribute_names)): result[attr] = nodes.get_dynamics_attribute( attr.split(DYNAMICS_PREFIX)[1], _all) return result
def _dynamics_params_names(self): return set( utils.add_dynamic_prefix( self._population.dynamics_attribute_names))
def test_add_dynamic_prefix(): assert test_module.add_dynamic_prefix( ["a", "b"]) == [DYNAMICS_PREFIX + "a", DYNAMICS_PREFIX + "b"]