increment = 10000
start = 1000

profile.start_clock()
file = open('csv/sparse_graphs.csv', 'w')
file.write("Nodes GenerateTime SaveTime FileSize\n")
#The +1 on the max size is just to be sure we include the max size in our range.
for i in range(start,max_size+1,increment):
    edge_probability = 1.0/i;
    scaling = 10
    #I only want my graph to be dense with a small probability (average density = 0.03125*#nodes)
    G = zen.generating.rgm.erdos_renyi(i,edge_probability*scaling)
    G.compact()
    filename = 'sparse' + str(i) + ".graph"
    
    #Profiling generation time
    difftime = profile.get_time_from_clock()
    gentime = str(difftime.seconds) + "." + str(difftime.microseconds/1000)
    print "Graph " + filename + " has taken " + gentime + " to generate."
    
    #Saving the generated graph
    edgelist.write(G,'storage/edgelist/sparse/' + filename)
    filesize = profile.filesize('storage/edgelist/sparse/' + filename)
    filesize = filesize/1024
    
    #Profiling IO time
    difftime = profile.get_time_from_clock()
    savetime = str(difftime.seconds) + "." + str(difftime.microseconds/1000)
    print "Graph " + filename + " (" + str(filesize) + "kB), has taken " + savetime + " seconds to save on disk."
    file.write(str(i) + " " + gentime + " " + savetime + " " + str(filesize) + "\n")
profile.start_clock()
file = open('csv/random_graphs.csv', 'w')
file.write("Nodes GenerateTime SaveTime FileSize\n")
#The +1 on the max size is just to be sure we include the max size in our range.
for i in range(start,max_size+1,increment):
    edge_probability_1 = random.uniform(0,1.0)
    edge_probability_2 = random.uniform(0,1.0)
    edge_probability_3 = random.uniform(0,1.0)
    edge_probability_4 = random.uniform(0,1.0)
    edge_probability_5 = random.uniform(0,1.0)
    #I only want my graph to be dense with a small probability (average density = 0.03125*#nodes)
    G = zen.generating.rgm.erdos_renyi(i,edge_probability_1*edge_probability_2*edge_probability_3*edge_probability_4*edge_probability_5 * 0.1)
    G.compact()
    filename = 'random' + str(i) + ".graph"
    
    #Profiling generation time
    difftime = profile.get_time_from_clock()
    gentime = str(difftime.seconds) + "." + str(difftime.microseconds/1000)
    print "Graph " + filename + " has taken " + gentime + " to generate."
    
    #Saving the generated graph
    edgelist.write(G,'storage/edgelist/random/' + filename)
    filesize = profile.filesize('storage/edgelist/random/' + filename)
    filesize = filesize/1024
    
    #Profiling IO time
    difftime = profile.get_time_from_clock()
    savetime = str(difftime.seconds) + "." + str(difftime.microseconds/1000)
    print "Graph " + filename + " (" + str(filesize) + "kB), has taken " + savetime + " seconds to save on disk."
    file.write(str(i) + " " + gentime + " " + savetime + " " + str(filesize) + "\n")
max_size = 41000
increment = 10000
start = 1000

profile.start_clock()
file = open("csv/barabasi_graphs.csv", "w")
file.write("GraphName GenerateTime SaveTime FileSize\n")
# The +1 on the max size is just to be sure we include the max size in our range.
for i in range(start, max_size + 1, increment):
    # Defines the maximum degree per node
    G = zen.generating.barabasi_albert(i, 1)
    G.compact()
    filename = "barabasi" + str(i) + ".graph"

    # Profiling generation time
    difftime = profile.get_time_from_clock()
    gentime = str(difftime.seconds) + "." + str(difftime.microseconds / 1000)
    print "Graph " + filename + " has taken " + gentime + " to generate."

    # Saving the generated graph
    edgelist.write(G, "storage/edgelist/barabasi/" + filename)
    filesize = profile.filesize("storage/edgelist/barabasi/" + filename)
    filesize = filesize / 1024

    # Profiling IO time
    difftime = profile.get_time_from_clock()
    savetime = str(difftime.seconds) + "." + str(difftime.microseconds / 1000)
    print "Graph " + filename + " (" + str(filesize) + "kB), has taken " + savetime + " seconds to save on disk."
    file.write(filename + " " + gentime + " " + savetime + " " + str(filesize) + "\n")
    
    #Define edges for each node
    for j in range(i):
        k = 0
        while k < max_degree:
            x = random.randint(1,max_degree)
            x = round(random.uniform(0,1)*random.uniform(0,1)*x)
            other_node = (j+x) % i
            if not G.has_edge(j,other_node):
                G.add_edge(j,other_node)
            k+=1
    G.compact()
    filename = 'metric' + str(i) + ".graph"
    
    #Profiling generation time
    difftime = profile.get_time_from_clock()
    gentime = str(difftime.seconds) + "." + str(difftime.microseconds/1000)
    print "Graph " + filename + " has taken " + gentime + " to generate."
    
    #Saving the generated graph
    edgelist.write(G,'storage/edgelist/metric/' + filename)
    filesize = profile.filesize('storage/edgelist/metric/' + filename)
    filesize = filesize/1024
    
    #Profiling IO time
    difftime = profile.get_time_from_clock()
    savetime = str(difftime.seconds) + "." + str(difftime.microseconds/1000)
    print "Graph " + filename + " (" + str(filesize) + "kB), has taken " + savetime + " seconds to save on disk."
    file.write(str(i) + " " + gentime + " " + savetime + " " + str(filesize) + "\n")

profile.start_clock()
file = open("csv/dense_graphs.csv", "w")
file.write("Nodes GenerateTime SaveTime FileSize\n")
# The +1 on the max size is just to be sure we include the max size in our range.
for i in range(start, max_size + 1, increment):
    edge_probability = random.uniform(0, 1.0)
    scaling = 0.05
    base_value = 0.05
    # Graphs of this category are potentially very big (average node degree = 0.0725*#nodes), which means the 20,000 node graph may have up to 4,000,000 edges.
    # which would be a graph of size 600MB.
    G = zen.generating.rgm.erdos_renyi(i, edge_probability * scaling + base_value)
    G.compact()
    filename = "dense" + str(i) + ".graph"

    # Profiling generation time
    difftime = profile.get_time_from_clock()
    gentime = str(difftime.seconds) + "." + str(difftime.microseconds / 1000)
    print "Graph " + filename + " has taken " + gentime + " to generate."

    # Saving the generated graph
    edgelist.write(G, "storage/edgelist/dense/" + filename)
    filesize = profile.filesize("storage/edgelist/dense/" + filename)
    filesize = filesize / 1024

    # Profiling IO time
    difftime = profile.get_time_from_clock()
    savetime = str(difftime.seconds) + "." + str(difftime.microseconds / 1000)
    print "Graph " + filename + " (" + str(filesize) + "kB), has taken " + savetime + " seconds to save on disk."
    file.write(str(i) + " " + gentime + " " + savetime + " " + str(filesize) + "\n")