def test_source_sink_triangulation_delaunay(n):
    seed_number = randint(1, 1000)
    generator = Triangulation(n,
                              type="delaunay",
                              directed=True,
                              seed_number=seed_number)
    graph, source, sink = generator.generate()
    count_source, src = has_unique_source(graph)
    count_sink, snk = has_unique_sink(graph)
    assert count_source == 1
    assert count_sink == 1
    assert source == src
    assert sink == snk
def get_graph(graph_type, n, m, directed, seed_number):
    if graph_type == 'random':
        graph = Random(n, m, seed_number=seed_number, directed=directed)
    elif graph_type == 'scale-free':
        graph = ScaleFree(n, seed_number=seed_number, directed=directed)
    else:
        graph = Triangulation(n,
                              type=graph_type,
                              seed_number=seed_number,
                              directed=directed)
    return graph
def test_max_flow_triangulation_delaunay_directed(n):
    seed_number = randint(1, 1000)
    generator = Triangulation(n, type="delaunay", directed=True, seed_number=seed_number)
    graph, source, target = generator.generate()
    solver = Goldberg(graph)
    max_flow = solver.get_max_flow(source, target)

    generator = Triangulation(n, type="delaunay", directed=True, seed_number=seed_number)
    graph, source, target = generator.generate()
    res = gt.push_relabel_max_flow(graph, source, target, graph.ep.cap)
    res.a = graph.ep.cap.a - res.a  # the actual flow
    gt_max_flow = sum(res[e] for e in target.in_edges())
    assert max_flow == gt_max_flow
    return graph


'''#seed_number = randint(1, 1000)
# generator = Random(10, 40, directed=True, seed_number=seed_number)
seed_number = 386
generator = Triangulation(50, type="delaunay", directed=True, seed_number=seed_number)
# generator = Wikipedia()
g, source, target = generator.generate()
print("Source: " + str(source) + " target " + str(target))

gt.graph_draw(g, edge_pen_width=gt.prop_to_size(g.ep.cap, mi=1, ma=5, power=1),
              output="cf/cf_capacities.pdf", vertex_text=g.vertex_index, edge_text=g.ep.cap)'''
#seed_number = randint(1, 1000)
seed_number = 14
generator = Triangulation(50, type="delaunay", directed=True, seed_number=seed_number)
g, source, target = generator.generate()

gt.graph_draw(g, edge_pen_width=gt.prop_to_size(g.ep.cap, mi=1, ma=5, power=1),
              output="cf/cf_capacities.pdf", vertex_text=g.vertex_index, edge_text=g.ep.cap)

# source = g.vertex(0)
# target = g.vertex(3)
solver = Goldberg(g)
solution = solver.get_max_flow(source, target)
print("Il max flow trovato da Golberg è:", solution)

labels = g.new_vertex_property("string")
for vertex in g.vertices():
    labels[vertex] = str(g.vertex_index[vertex]) + "(" + str(g.vp.height[vertex]) + "," + str(
        g.vp.excess[vertex]) + ")"
from numpy.random import seed, random, random_integers
from scipy.linalg import norm
from scipy.stats import poisson
from max_flow_residuals import Goldberg
from max_flow_wave import GoldbergWave
import numpy as np
import math
from generation.Triangulation import Triangulation

# Number of nodes
N = 5
# Number of edges
M = 10

seed_number = 45
generator = Triangulation(N, directed=False, seed_number=seed_number)
g, src, tgt = generator.generate()

cap = g.ep.cap
gt.graph_draw(g,
              edge_pen_width=gt.prop_to_size(cap, mi=1, ma=1, power=1),
              output="graph_to_solve.pdf",
              vertex_text=g.vertex_index,
              edge_text=g.ep.cap)

# using GraphTool algorithm, find the solution to test and print the resulting graph
res = gt.push_relabel_max_flow(g, src, tgt, cap)
res.a = cap.a - res.a  # the actual flow
max_flow = sum(res[e] for e in tgt.in_edges())
print("Il max flow trovato da GraphTool è:", max_flow)
labels = g.new_edge_property("string")