Source code for PAMI.subgraphMining.topK.DFSCode

import pickle

[docs] class DfsCode: def __init__(self): """ Initializes the DFSCode object with default values. """ self.rightMost = -1 self.size = 0 self.rightMostPath = [] self.eeList = []
[docs] def copy(self): """ Creates a deep copy of the DFSCode object. """ return pickle.loads(pickle.dumps(self))
[docs] def notPreOfRm(self, v): """ Checks if a given vertex is not the second-to-last element on the rightmost path. Args: v (int): The vertex to check. Returns: bool: True if the vertex is not the second-to-last element on the rightmost path, False otherwise. """ if len(self.rightMostPath) <= 1: return True return v != self.rightMostPath[-2]
[docs] def getAllVLabels(self): """ Retrieves all vertex labels from the extended edge list. Returns: list: A list of vertex labels. """ labels = [] vertexMap = {} for ee in self.eeList: v1, v1Label = ee.getV1(), ee.getVLabel1() v2, v2Label = ee.getV2(), ee.getVLabel2() vertexMap[v1] = v1Label vertexMap[v2] = v2Label count = 0 while count in vertexMap: labels.append(vertexMap[count]) count += 1 return labels
[docs] def add(self, ee): """ Adds an extended edge to the DFSCode object. Args: ee (ExtendedEdge): The extended edge to add. """ if self.size == 0: self.rightMost = 1 self.rightMostPath.extend([0, 1]) else: v1, v2 = ee.getV1(), ee.getV2() if v1 < v2: self.rightMost = v2 while self.rightMostPath and self.rightMostPath[-1] > v1: self.rightMostPath.pop() self.rightMostPath.append(v2) self.eeList.append(ee) self.size += 1
[docs] def getAt(self, index): """ Retrieves the extended edge at the specified index. Args: index (int): The index of the extended edge to retrieve. Returns: ExtendedEdge: The extended edge at the specified index. """ return self.eeList[index]
[docs] def onRightMostPath(self, v): """ Checks if a vertex is present on the rightmost path. Args: v (int): The vertex to check. Returns: bool: True if the vertex is present on the rightmost path, False otherwise. """ return v in self.rightMostPath
[docs] def containEdge(self, v1, v2): """ Checks if an edge between vertices v1 and v2 is present. Args: v1 (int): The first vertex of the edge. v2 (int): The second vertex of the edge. Returns: bool: True if the edge is present, False otherwise. """ for ee in self.eeList: if (ee.getV1() == v1 and ee.getV2() == v2) or (ee.getV1() == v2 and ee.getV2() == v1): return True return False
[docs] def isEmpty(self): """ Checks if the DFSCode object is empty. Returns: bool: True if the DFSCode object is empty, False otherwise.""" return not self.eeList
[docs] def getRightMost(self): """ Retrieves the rightmost vertex. Returns: int: The index of the rightmost vertex. """ return self.rightMost
[docs] def getRightMostPath(self): """ Retrieves the rightmost path. Returns: list: A list containing the vertices on the rightmost path. """ return self.rightMostPath
[docs] def getEeList(self): """ Retrieves the extended edge list. Returns: list: A list of ExtendedEdge objects. """ return self.eeList
def __str__(self): """ Returns a string representation of the DFSCode object. Returns: str: A string representation of the DFSCode object. """ return "DfsCode: " + " ".join(str(ee) for ee in self.eeList)