import numpy as np from scipy.optimize import linear_sum_assignment from ged.costfunctions import ConstantCostFunction def computeBipartiteCostMatrix(G1, G2, cf=ConstantCostFunction(1, 3, 1, 3)): """Compute a Cost Matrix according to cost function cf""" n = G1.number_of_nodes() m = G2.number_of_nodes() nm = n + m C = np.ones([nm, nm])*np.inf C[n:, m:] = 0 for u in G1.nodes_iter(): for v in G2.nodes_iter(): cost = cf.cns(u, v, G1, G2) C[u, v] = cost for v in G1.nodes_iter(): C[v, m + v] = cf.cnd(v, G1) for v in G2.nodes_iter(): C[n + v, v] = cf.cni(v, G2) return C def getOptimalMapping(C, lsap_solver=linear_sum_assignment): """Compute an optimal linear mapping according to cost Matrix C inclure les progs C de Seb """ row_ind, col_ind = lsap_solver(C) return col_ind, row_ind[np.argsort(col_ind)]