in hype/graph.py [0:0]
def load_adjacency_matrix(path, format='hdf5', symmetrize=False, objects=None):
if format == 'hdf5':
with path_manager.open(path, 'rb') as fin:
with h5py.File(fin, 'r') as hf:
return {
'ids': hf['ids'].value.astype('int'),
'neighbors': hf['neighbors'].value.astype('int'),
'offsets': hf['offsets'].value.astype('int'),
'weights': hf['weights'].value.astype('float'),
'objects': hf['objects'].value
}
elif format == 'csv':
df = pandas.read_csv(path, usecols=['id1', 'id2', 'weight'], engine='c')
if symmetrize:
rev = df.copy().rename(columns={'id1' : 'id2', 'id2' : 'id1'})
df = pandas.concat([df, rev])
idmap = {}
idlist = []
def convert(id):
if id not in idmap:
idmap[id] = len(idlist)
idlist.append(id)
return idmap[id]
if objects is not None:
objects = pandas.DataFrame.from_dict({'obj': objects, 'id': np.arange(len(objects))})
df = df.merge(objects, left_on='id1', right_on='obj').merge(objects, left_on='id2', right_on='obj')
df['id1'] = df['id_x']
df['id2'] = df['id_y']
else:
df.loc[:, 'id1'] = df['id1'].apply(convert)
df.loc[:, 'id2'] = df['id2'].apply(convert)
objects = np.array(idlist)
groups = df.groupby('id1').apply(lambda x: x.sort_values(by='id2'))
counts = df.groupby('id1').id2.size()
ids = groups.index.levels[0].values
offsets = counts.loc[ids].values
offsets[1:] = np.cumsum(offsets)[:-1]
offsets[0] = 0
neighbors = groups['id2'].values
weights = groups['weight'].values
return {
'ids' : ids.astype('int'),
'offsets' : offsets.astype('int'),
'neighbors': neighbors.astype('int'),
'weights': weights.astype('float'),
'objects': objects
}
else:
raise RuntimeError(f'Unsupported file format {format}')