def readGraph(self,
                  vertexFileName,
                  edgeFileNames,
                  undirected=True,
                  delimiter=None):
        """
        Read a MultiGraph from at least 2 files: one is the information about
        vertices and the other(s) are lists of edges. For the list of vertices
        the first column must be the ID of the vertex. 
        """

        X = numpy.loadtxt(vertexFileName,
                          skiprows=1,
                          converters=self.converters,
                          usecols=self.vertexIndices,
                          delimiter=delimiter)

        numVertices = X.shape[0]
        numFeatures = X.shape[1] - 1

        vertexIds = X[:, 0]
        vertexIdsDict = {}

        for i in range(0, numVertices):
            vertexIdsDict[vertexIds[i]] = i

        if self.nanProcessor != None:
            X[:, 1:numFeatures + 1] = self.nanProcessor(X[:,
                                                          1:numFeatures + 1])

        vertexList = VertexList(numVertices, numFeatures)
        vertexList.setVertices(X[:, 1:numFeatures + 1])

        maxEdgeTypes = len(edgeFileNames)
        sparseMultiGraph = SparseMultiGraph(vertexList, maxEdgeTypes,
                                            undirected)

        for i in range(0, maxEdgeTypes):
            self.__readEdgeFile(vertexIdsDict, edgeFileNames[i],
                                sparseMultiGraph, i)

        logging.info("MultiGraph read with " +
                     str(sparseMultiGraph.getNumVertices()) +
                     " vertices and " + str(sparseMultiGraph.getNumEdges()) +
                     " edges")

        return sparseMultiGraph
    def testGetNumEdges(self):
        sMultiGraph = SparseMultiGraph(self.vList, self.maxEdgeTypes)

        self.assertEquals(sMultiGraph.getNumEdges(), 0)

        for i in range(self.maxEdgeTypes):
            self.assertEquals(sMultiGraph.getNumEdges(i), 0)

        sMultiGraph.addEdge(0, 1, 2)
        sMultiGraph.addEdge(0, 1, 1)

        self.assertEquals(sMultiGraph.getNumEdges(), 2)
        self.assertEquals(sMultiGraph.getNumEdges(1), 1)
        self.assertEquals(sMultiGraph.getNumEdges(2), 1)

        sMultiGraph.addEdge(0, 1, 0)
        sMultiGraph.addEdge(0, 2, 0)
        self.assertEquals(sMultiGraph.getNumEdges(), 4)
        self.assertEquals(sMultiGraph.getNumEdges(0), 2)
    def testGetNumEdges(self):
        sMultiGraph = SparseMultiGraph(self.vList, self.maxEdgeTypes)

        self.assertEquals(sMultiGraph.getNumEdges(), 0)

        for i in range(self.maxEdgeTypes):
            self.assertEquals(sMultiGraph.getNumEdges(i), 0)

        sMultiGraph.addEdge(0, 1, 2)
        sMultiGraph.addEdge(0, 1, 1)

        self.assertEquals(sMultiGraph.getNumEdges(), 2)
        self.assertEquals(sMultiGraph.getNumEdges(1), 1)
        self.assertEquals(sMultiGraph.getNumEdges(2), 1)

        sMultiGraph.addEdge(0, 1, 0)
        sMultiGraph.addEdge(0, 2, 0)
        self.assertEquals(sMultiGraph.getNumEdges(), 4)
        self.assertEquals(sMultiGraph.getNumEdges(0), 2)
    def readGraph(self, vertexFileName, edgeFileNames, undirected=True, delimiter=None):
        """
        Read a MultiGraph from at least 2 files: one is the information about
        vertices and the other(s) are lists of edges. For the list of vertices
        the first column must be the ID of the vertex. 
        """
        
        X = numpy.loadtxt(vertexFileName, skiprows=1, converters=self.converters, usecols=self.vertexIndices, delimiter=delimiter)

        numVertices = X.shape[0]
        numFeatures = X.shape[1]-1 

        vertexIds = X[:, 0]
        vertexIdsDict = {}

        for i in range(0, numVertices):
            vertexIdsDict[vertexIds[i]] = i

        if self.nanProcessor != None:
            X[:, 1:numFeatures+1] = self.nanProcessor(X[:, 1:numFeatures+1])

        vertexList = VertexList(numVertices, numFeatures)
        vertexList.setVertices(X[:, 1:numFeatures+1])
        
        maxEdgeTypes = len(edgeFileNames)
        sparseMultiGraph = SparseMultiGraph(vertexList, maxEdgeTypes, undirected)

        for i in range(0, maxEdgeTypes):
            self.__readEdgeFile(vertexIdsDict, edgeFileNames[i], sparseMultiGraph, i)

        logging.info("MultiGraph read with " + str(sparseMultiGraph.getNumVertices()) + " vertices and " + str(sparseMultiGraph.getNumEdges()) + " edges")

        return sparseMultiGraph