Source code for upxo.netops.kcmp

# -*- coding: utf-8 -*-
"""
Created on Fri Jun  7 11:35:01 2024

@author: Dr. Sunil Anandatheertha
"""
import numpy as np
import networkx as nx
import netlsd
from networkx.algorithms import community
from upxo._sup.data_ops import calculate_angular_distance
from upxo._sup.data_ops import calculate_density_bins
from upxo._sup.data_ops import approximate_to_bin_means
from scipy.stats import wasserstein_distance, ks_2samp, energy_distance


[docs] def calculate_rkfield_js(G1, G2): """ Calculate Jaccard similarity between the node sets of two graphs. Usage ----- from upxo.netops.kcmp import calculate_rkfield_js """ nodes1 = set(G1.nodes()) nodes2 = set(G2.nodes()) return len(nodes1 & nodes2) / len(nodes1 | nodes2)
[docs] def calculate_rkfield_wd(kd_tgt, kd_smp): """ Calculate Wasserstein distance based R-Field. Parameters ---------- kd_tgt: Netowrk Degrees of the target grain structure kd_smp: Netowrk Degrees of the sample grain structure Return ------ r Usage ----- from upxo.netops.kcmp import calculate_rkfield_wd """ distance = wasserstein_distance(kd_tgt, kd_smp) """ """ r = 1 / (1 + distance) return r
[docs] def calculate_rkfield_ksp(kd_tgt, kd_smp): """ kd: Netowrk Degree Usage ----- from upxo.netops.kcmp import calculate_rkfield_ksp """ # Higher p-value indicates more similar distributions _, p_value = ks_2samp(kd_tgt, kd_smp) r = p_value return r
[docs] def calculate_rkfield_ed(kd_tgt, kd_smp): """ kd: Netowrk Degree Usage ----- from upxo.netops.kcmp import calculate_rkfield_ed """ # Energy Distance (a non-parametric measure of statistical distance) distance = energy_distance(kd_tgt, kd_smp) r = 1 / (1 + distance) return r
[docs] def calculate_rkfield_nlsd(kd_tgt, kd_smp, timescales=np.logspace(-2, 2, 20)): """ Calculates NetLSD similarity between two networks. Args: G1 (nx.Graph): The first network. G2 (nx.Graph): The second network. timescales (int, optional): Number of timescales to use (default: 10). Returns: float: The NetLSD distance (lower is more similar). Usage ----- from upxo.netops.kcmp import calculate_rkfield_nlsd """ descriptor1 = netlsd.heat(kd_tgt, timescales=timescales) descriptor2 = netlsd.heat(kd_smp, timescales=timescales) distance = np.linalg.norm(descriptor1 - descriptor2) # Convert distance to similarity (optional) r = 1 / (1 + distance) return r