|
|
@@ -11,9 +11,10 @@ import multiprocessing |
|
|
|
from multiprocessing import Pool |
|
|
|
from functools import partial |
|
|
|
import sys |
|
|
|
from tqdm import tqdm |
|
|
|
# from tqdm import tqdm |
|
|
|
import networkx as nx |
|
|
|
from gklearn.ged.env import GEDEnv |
|
|
|
from gklearn.utils import get_iters |
|
|
|
|
|
|
|
|
|
|
|
def compute_ged(g1, g2, options): |
|
|
@@ -135,11 +136,7 @@ def compute_geds_cml(graphs, options={}, sort=True, parallel=False, verbose=True |
|
|
|
G_listID = listID_toshare |
|
|
|
do_partial = partial(_wrapper_compute_ged_parallel, neo_options, sort) |
|
|
|
pool = Pool(processes=n_jobs, initializer=init_worker, initargs=(graphs, ged_env, listID)) |
|
|
|
if verbose: |
|
|
|
iterator = tqdm(pool.imap_unordered(do_partial, itr, chunksize), |
|
|
|
desc='computing GEDs', file=sys.stdout) |
|
|
|
else: |
|
|
|
iterator = pool.imap_unordered(do_partial, itr, chunksize) |
|
|
|
iterator = get_iters(pool.imap_unordered(do_partial, itr, chunksize), desc='computing GEDs', file=sys.stdout, length=len(graphs), verbose=verbose) |
|
|
|
# iterator = pool.imap_unordered(do_partial, itr, chunksize) |
|
|
|
for i, j, dis, n_eo_tmp in iterator: |
|
|
|
idx_itr = int(len(graphs) * i + j - (i + 1) * (i + 2) / 2) |
|
|
@@ -155,10 +152,7 @@ def compute_geds_cml(graphs, options={}, sort=True, parallel=False, verbose=True |
|
|
|
else: |
|
|
|
ged_vec = [] |
|
|
|
n_edit_operations = [] |
|
|
|
if verbose: |
|
|
|
iterator = tqdm(range(len(graphs)), desc='computing GEDs', file=sys.stdout) |
|
|
|
else: |
|
|
|
iterator = range(len(graphs)) |
|
|
|
iterator = get_iters(range(len(graphs)), desc='computing GEDs', file=sys.stdout, length=len(graphs), verbose=verbose) |
|
|
|
for i in iterator: |
|
|
|
# for i in range(len(graphs)): |
|
|
|
for j in range(i + 1, len(graphs)): |
|
|
@@ -175,7 +169,7 @@ def compute_geds_cml(graphs, options={}, sort=True, parallel=False, verbose=True |
|
|
|
return ged_vec, ged_mat, n_edit_operations |
|
|
|
|
|
|
|
|
|
|
|
def compute_geds(graphs, options={}, sort=True, repeats=1, parallel=False, verbose=True): |
|
|
|
def compute_geds(graphs, options={}, sort=True, repeats=1, parallel=False, n_jobs=None, verbose=True): |
|
|
|
from gklearn.gedlib import librariesImport, gedlibpy |
|
|
|
|
|
|
|
# initialize ged env. |
|
|
@@ -200,7 +194,8 @@ def compute_geds(graphs, options={}, sort=True, repeats=1, parallel=False, verbo |
|
|
|
ged_vec = [0 for i in range(len_itr)] |
|
|
|
n_edit_operations = [0 for i in range(len_itr)] |
|
|
|
itr = combinations(range(0, len(graphs)), 2) |
|
|
|
n_jobs = multiprocessing.cpu_count() |
|
|
|
if n_jobs is None: |
|
|
|
n_jobs = multiprocessing.cpu_count() |
|
|
|
if len_itr < 100 * n_jobs: |
|
|
|
chunksize = int(len_itr / n_jobs) + 1 |
|
|
|
else: |
|
|
@@ -212,11 +207,7 @@ def compute_geds(graphs, options={}, sort=True, repeats=1, parallel=False, verbo |
|
|
|
G_listID = listID_toshare |
|
|
|
do_partial = partial(_wrapper_compute_ged_parallel, neo_options, sort, repeats) |
|
|
|
pool = Pool(processes=n_jobs, initializer=init_worker, initargs=(graphs, ged_env, listID)) |
|
|
|
if verbose: |
|
|
|
iterator = tqdm(pool.imap_unordered(do_partial, itr, chunksize), |
|
|
|
desc='computing GEDs', file=sys.stdout) |
|
|
|
else: |
|
|
|
iterator = pool.imap_unordered(do_partial, itr, chunksize) |
|
|
|
iterator = get_iters(pool.imap_unordered(do_partial, itr, chunksize), desc='computing GEDs', file=sys.stdout, length=len(graphs), verbose=verbose) |
|
|
|
# iterator = pool.imap_unordered(do_partial, itr, chunksize) |
|
|
|
for i, j, dis, n_eo_tmp in iterator: |
|
|
|
idx_itr = int(len(graphs) * i + j - (i + 1) * (i + 2) / 2) |
|
|
@@ -232,10 +223,7 @@ def compute_geds(graphs, options={}, sort=True, repeats=1, parallel=False, verbo |
|
|
|
else: |
|
|
|
ged_vec = [] |
|
|
|
n_edit_operations = [] |
|
|
|
if verbose: |
|
|
|
iterator = tqdm(range(len(graphs)), desc='computing GEDs', file=sys.stdout) |
|
|
|
else: |
|
|
|
iterator = range(len(graphs)) |
|
|
|
iterator = get_iters(range(len(graphs)), desc='computing GEDs', file=sys.stdout, length=len(graphs), verbose=verbose) |
|
|
|
for i in iterator: |
|
|
|
# for i in range(len(graphs)): |
|
|
|
for j in range(i + 1, len(graphs)): |
|
|
|