Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def leiden_lite(g, cell_list, resolution=1, weighted=False, verbose=True, num_starts=None, seed=1):
""" Code from Ethan Armand and Wayne Doyle, ./mukamel_lab/mop
slightly modified by Fangming Xie 05/13/2019
"""
import leidenalg
ti = time.time()
if num_starts is not None:
np.random.seed(seed)
partitions = []
quality = []
seeds = np.random.randint(10*num_starts, size=num_starts)
for seed in seeds:
if weighted:
temp_partition = leidenalg.find_partition(g,
leidenalg.RBConfigurationVertexPartition,
weights=g.es['weight'],
resolution_parameter=resolution,
seed=seed,
)
else:
temp_partition = leidenalg.find_partition(g,
leidenalg.RBConfigurationVertexPartition,
resolution_parameter=resolution,
seed=seed,
)
quality.append(temp_partition.quality())
partitions.append(temp_partition)
partition1 = partitions[np.argmax(quality)]
else:
if weighted:
resolution_parameter=resolution,
seed=seed,
)
quality.append(temp_partition.quality())
partitions.append(temp_partition)
partition1 = partitions[np.argmax(quality)]
else:
if weighted:
partition1 = leidenalg.find_partition(g,
leidenalg.RBConfigurationVertexPartition,
weights=g.es['weight'],
resolution_parameter=resolution,
seed=seed,
)
else:
partition1 = leidenalg.find_partition(g,
leidenalg.RBConfigurationVertexPartition,
resolution_parameter=resolution,
seed=seed,
)
# get cluster labels from partition1
labels = [0]*(len(cell_list))
for i, cluster in enumerate(partition1):
for element in cluster:
labels[element] = i+1
df_res = pd.DataFrame(index=cell_list)
df_res['cluster'] = labels
df_res = df_res.rename_axis('sample', inplace=False)
if verbose:
res = self.params['leiden_res']
seed = self.params['seed']
# construct the graph object
nn = set(self.snn_graph[self.snn_graph.columns[0]])
g = ig.Graph()
g.add_vertices(len(nn))
g.vs['name'] = list(range(1, len(nn)+1))
ll = []
for i in self.snn_graph.itertuples(index=False):
ll.append(tuple(i))
g.add_edges(ll)
if self.params == 'ModularityVertexPartition':
part = leidenalg.ModularityVertexPartition
else:
part = leidenalg.RBERVertexPartition
cl = leidenalg.find_partition(g,
part,
n_iterations=10,
resolution_parameter=res,
seed=seed)
self.leiden_cl = cl.membership
self.leiden_prep()
log_debug('Leiden has finished.')
weights=g.es['weight'],
resolution_parameter=resolution,
seed=seed,
)
else:
temp_partition = leidenalg.find_partition(g,
leidenalg.RBConfigurationVertexPartition,
resolution_parameter=resolution,
seed=seed,
)
quality.append(temp_partition.quality())
partitions.append(temp_partition)
partition1 = partitions[np.argmax(quality)]
else:
if weighted:
partition1 = leidenalg.find_partition(g,
leidenalg.RBConfigurationVertexPartition,
weights=g.es['weight'],
resolution_parameter=resolution,
seed=seed,
)
else:
partition1 = leidenalg.find_partition(g,
leidenalg.RBConfigurationVertexPartition,
resolution_parameter=resolution,
seed=seed,
)
# get cluster labels from partition1
labels = [0]*(len(cell_list))
for i, cluster in enumerate(partition1):
for element in cluster:
if num_starts is not None:
np.random.seed(seed)
partitions = []
quality = []
seeds = np.random.randint(10*num_starts, size=num_starts)
for seed in seeds:
if weighted:
temp_partition = leidenalg.find_partition(g,
leidenalg.RBConfigurationVertexPartition,
weights=g.es['weight'],
resolution_parameter=resolution,
seed=seed,
)
else:
temp_partition = leidenalg.find_partition(g,
leidenalg.RBConfigurationVertexPartition,
resolution_parameter=resolution,
seed=seed,
)
quality.append(temp_partition.quality())
partitions.append(temp_partition)
partition1 = partitions[np.argmax(quality)]
else:
if weighted:
partition1 = leidenalg.find_partition(g,
leidenalg.RBConfigurationVertexPartition,
weights=g.es['weight'],
resolution_parameter=resolution,
seed=seed,
)
else: