Merge branch 'fix-make-example-network-bidi' into develop

This commit is contained in:
James Powell
2017-11-08 19:02:08 -05:00
8 changed files with 1075 additions and 25 deletions

View File

@@ -1,25 +1,5 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
from networkx import DiGraph
from logging import getLogger
logger = getLogger('gnpy.core')
from . import elements from . import elements
from .execute import *
def network_from_json(json_data): from .network import *
# NOTE|dutc: we could use the following, but it would tie our data format
# too closely to the graph library
# from networkx import node_link_graph
g = DiGraph()
nodes = {}
for el in json_data['elements']:
el = getattr(elements, el['type'])(el['id'], **el['metadata'])
g.add_node(el)
nodes[el.id] = el
for cx in json_data['connections']:
from_node, to_node = nodes[cx['from_node']], nodes[cx['to_node']]
g.add_edge(from_node, to_node)
return g

2
core/execute.py Normal file
View File

@@ -0,0 +1,2 @@
#!/usr/bin/env python3

23
core/network.py Normal file
View File

@@ -0,0 +1,23 @@
#!/usr/bin/env python3
from networkx import DiGraph
from . import elements
def network_from_json(json_data):
# NOTE|dutc: we could use the following, but it would tie our data format
# too closely to the graph library
# from networkx import node_link_graph
g = DiGraph()
nodes = {}
for el in json_data['elements']:
el = getattr(elements, el['type'])(el['id'], **el['metadata'])
g.add_node(el)
nodes[el.id] = el
for cx in json_data['connections']:
from_node, to_node = nodes[cx['from_node']], nodes[cx['to_node']]
g.add_edge(from_node, to_node)
return g

11
examples/Makefile Normal file
View File

@@ -0,0 +1,11 @@
REGIONS = europe asia conus
TARGETS = $(foreach region,$(REGIONS),coronet.$(region).json)
all: $(TARGETS)
$(TARGETS): convert.py CORONET_Global_Topology.xls
python $< -f $(subst .json,,$(subst coronet.,,$@)) > $@
.PHONY: clean
clean:
-rm $(TARGETS) -f

View File

@@ -7,6 +7,7 @@ except ModuleNotFoundError:
exit('Required: `pip install xlrd`') exit('Required: `pip install xlrd`')
from argparse import ArgumentParser from argparse import ArgumentParser
from collections import namedtuple, Counter from collections import namedtuple, Counter
from itertools import chain
from json import dumps from json import dumps
Node = namedtuple('Node', 'city state country region latitude longitude') Node = namedtuple('Node', 'city state country region latitude longitude')
@@ -68,7 +69,7 @@ if __name__ == '__main__':
nodes, links = parse_excel(args) nodes, links = parse_excel(args)
if args.filter_region: if args.filter_region:
nodes = [n for n in nodes if n.region in args.filter_region] nodes = [n for n in nodes if n.region.lower() in args.filter_region]
cities = {n.city for n in nodes} cities = {n.city for n in nodes}
links = [lnk for lnk in links if lnk.from_city in cities and links = [lnk for lnk in links if lnk.from_city in cities and
lnk.to_city in cities] lnk.to_city in cities]
@@ -92,12 +93,21 @@ if __name__ == '__main__':
'type': 'Fiber'} 'type': 'Fiber'}
for x in links], for x in links],
'connections': 'connections':
list(chain.from_iterable(zip( # put bidi next to each other
[{'from_node': x.from_city, [{'from_node': x.from_city,
'to_node': f'fiber ({x.from_city}{x.to_city})'} 'to_node': f'fiber ({x.from_city}{x.to_city})'}
for x in links] + for x in links],
[{'from_node': f'fiber ({x.from_city}{x.to_city})',
'to_node': x.from_city}
for x in links])))
+
list(chain.from_iterable(zip(
[{'from_node': f'fiber ({x.from_city}{x.to_city})', [{'from_node': f'fiber ({x.from_city}{x.to_city})',
'to_node': x.to_city} 'to_node': x.to_city}
for x in links] for x in links],
[{'from_node': x.to_city,
'to_node': f'fiber ({x.from_city}{x.to_city})'}
for x in links])))
} }
print(dumps(data, indent=2)) print(dumps(data, indent=2))

View File

@@ -266,113 +266,225 @@
"from_node": "Bangkok", "from_node": "Bangkok",
"to_node": "fiber (Bangkok \u2192 Delhi)" "to_node": "fiber (Bangkok \u2192 Delhi)"
}, },
{
"from_node": "fiber (Bangkok \u2192 Delhi)",
"to_node": "Bangkok"
},
{ {
"from_node": "Bangkok", "from_node": "Bangkok",
"to_node": "fiber (Bangkok \u2192 Hong_Kong)" "to_node": "fiber (Bangkok \u2192 Hong_Kong)"
}, },
{
"from_node": "fiber (Bangkok \u2192 Hong_Kong)",
"to_node": "Bangkok"
},
{ {
"from_node": "Beijing", "from_node": "Beijing",
"to_node": "fiber (Beijing \u2192 Seoul)" "to_node": "fiber (Beijing \u2192 Seoul)"
}, },
{
"from_node": "fiber (Beijing \u2192 Seoul)",
"to_node": "Beijing"
},
{ {
"from_node": "Beijing", "from_node": "Beijing",
"to_node": "fiber (Beijing \u2192 Shanghai)" "to_node": "fiber (Beijing \u2192 Shanghai)"
}, },
{
"from_node": "fiber (Beijing \u2192 Shanghai)",
"to_node": "Beijing"
},
{ {
"from_node": "Delhi", "from_node": "Delhi",
"to_node": "fiber (Delhi \u2192 Mumbai)" "to_node": "fiber (Delhi \u2192 Mumbai)"
}, },
{
"from_node": "fiber (Delhi \u2192 Mumbai)",
"to_node": "Delhi"
},
{ {
"from_node": "Hong_Kong", "from_node": "Hong_Kong",
"to_node": "fiber (Hong_Kong \u2192 Shanghai)" "to_node": "fiber (Hong_Kong \u2192 Shanghai)"
}, },
{
"from_node": "fiber (Hong_Kong \u2192 Shanghai)",
"to_node": "Hong_Kong"
},
{ {
"from_node": "Hong_Kong", "from_node": "Hong_Kong",
"to_node": "fiber (Hong_Kong \u2192 Sydney)" "to_node": "fiber (Hong_Kong \u2192 Sydney)"
}, },
{
"from_node": "fiber (Hong_Kong \u2192 Sydney)",
"to_node": "Hong_Kong"
},
{ {
"from_node": "Hong_Kong", "from_node": "Hong_Kong",
"to_node": "fiber (Hong_Kong \u2192 Taipei)" "to_node": "fiber (Hong_Kong \u2192 Taipei)"
}, },
{
"from_node": "fiber (Hong_Kong \u2192 Taipei)",
"to_node": "Hong_Kong"
},
{ {
"from_node": "Honolulu", "from_node": "Honolulu",
"to_node": "fiber (Honolulu \u2192 Sydney)" "to_node": "fiber (Honolulu \u2192 Sydney)"
}, },
{
"from_node": "fiber (Honolulu \u2192 Sydney)",
"to_node": "Honolulu"
},
{ {
"from_node": "Honolulu", "from_node": "Honolulu",
"to_node": "fiber (Honolulu \u2192 Taipei)" "to_node": "fiber (Honolulu \u2192 Taipei)"
}, },
{
"from_node": "fiber (Honolulu \u2192 Taipei)",
"to_node": "Honolulu"
},
{ {
"from_node": "Mumbai", "from_node": "Mumbai",
"to_node": "fiber (Mumbai \u2192 Singapore)" "to_node": "fiber (Mumbai \u2192 Singapore)"
}, },
{
"from_node": "fiber (Mumbai \u2192 Singapore)",
"to_node": "Mumbai"
},
{ {
"from_node": "Seoul", "from_node": "Seoul",
"to_node": "fiber (Seoul \u2192 Tokyo)" "to_node": "fiber (Seoul \u2192 Tokyo)"
}, },
{
"from_node": "fiber (Seoul \u2192 Tokyo)",
"to_node": "Seoul"
},
{ {
"from_node": "Singapore", "from_node": "Singapore",
"to_node": "fiber (Singapore \u2192 Sydney)" "to_node": "fiber (Singapore \u2192 Sydney)"
}, },
{
"from_node": "fiber (Singapore \u2192 Sydney)",
"to_node": "Singapore"
},
{ {
"from_node": "Taipei", "from_node": "Taipei",
"to_node": "fiber (Taipei \u2192 Tokyo)" "to_node": "fiber (Taipei \u2192 Tokyo)"
}, },
{
"from_node": "fiber (Taipei \u2192 Tokyo)",
"to_node": "Taipei"
},
{ {
"from_node": "fiber (Bangkok \u2192 Delhi)", "from_node": "fiber (Bangkok \u2192 Delhi)",
"to_node": "Delhi" "to_node": "Delhi"
}, },
{
"from_node": "Delhi",
"to_node": "fiber (Bangkok \u2192 Delhi)"
},
{ {
"from_node": "fiber (Bangkok \u2192 Hong_Kong)", "from_node": "fiber (Bangkok \u2192 Hong_Kong)",
"to_node": "Hong_Kong" "to_node": "Hong_Kong"
}, },
{
"from_node": "Hong_Kong",
"to_node": "fiber (Bangkok \u2192 Hong_Kong)"
},
{ {
"from_node": "fiber (Beijing \u2192 Seoul)", "from_node": "fiber (Beijing \u2192 Seoul)",
"to_node": "Seoul" "to_node": "Seoul"
}, },
{
"from_node": "Seoul",
"to_node": "fiber (Beijing \u2192 Seoul)"
},
{ {
"from_node": "fiber (Beijing \u2192 Shanghai)", "from_node": "fiber (Beijing \u2192 Shanghai)",
"to_node": "Shanghai" "to_node": "Shanghai"
}, },
{
"from_node": "Shanghai",
"to_node": "fiber (Beijing \u2192 Shanghai)"
},
{ {
"from_node": "fiber (Delhi \u2192 Mumbai)", "from_node": "fiber (Delhi \u2192 Mumbai)",
"to_node": "Mumbai" "to_node": "Mumbai"
}, },
{
"from_node": "Mumbai",
"to_node": "fiber (Delhi \u2192 Mumbai)"
},
{ {
"from_node": "fiber (Hong_Kong \u2192 Shanghai)", "from_node": "fiber (Hong_Kong \u2192 Shanghai)",
"to_node": "Shanghai" "to_node": "Shanghai"
}, },
{
"from_node": "Shanghai",
"to_node": "fiber (Hong_Kong \u2192 Shanghai)"
},
{ {
"from_node": "fiber (Hong_Kong \u2192 Sydney)", "from_node": "fiber (Hong_Kong \u2192 Sydney)",
"to_node": "Sydney" "to_node": "Sydney"
}, },
{
"from_node": "Sydney",
"to_node": "fiber (Hong_Kong \u2192 Sydney)"
},
{ {
"from_node": "fiber (Hong_Kong \u2192 Taipei)", "from_node": "fiber (Hong_Kong \u2192 Taipei)",
"to_node": "Taipei" "to_node": "Taipei"
}, },
{
"from_node": "Taipei",
"to_node": "fiber (Hong_Kong \u2192 Taipei)"
},
{ {
"from_node": "fiber (Honolulu \u2192 Sydney)", "from_node": "fiber (Honolulu \u2192 Sydney)",
"to_node": "Sydney" "to_node": "Sydney"
}, },
{
"from_node": "Sydney",
"to_node": "fiber (Honolulu \u2192 Sydney)"
},
{ {
"from_node": "fiber (Honolulu \u2192 Taipei)", "from_node": "fiber (Honolulu \u2192 Taipei)",
"to_node": "Taipei" "to_node": "Taipei"
}, },
{
"from_node": "Taipei",
"to_node": "fiber (Honolulu \u2192 Taipei)"
},
{ {
"from_node": "fiber (Mumbai \u2192 Singapore)", "from_node": "fiber (Mumbai \u2192 Singapore)",
"to_node": "Singapore" "to_node": "Singapore"
}, },
{
"from_node": "Singapore",
"to_node": "fiber (Mumbai \u2192 Singapore)"
},
{ {
"from_node": "fiber (Seoul \u2192 Tokyo)", "from_node": "fiber (Seoul \u2192 Tokyo)",
"to_node": "Tokyo" "to_node": "Tokyo"
}, },
{
"from_node": "Tokyo",
"to_node": "fiber (Seoul \u2192 Tokyo)"
},
{ {
"from_node": "fiber (Singapore \u2192 Sydney)", "from_node": "fiber (Singapore \u2192 Sydney)",
"to_node": "Sydney" "to_node": "Sydney"
}, },
{
"from_node": "Sydney",
"to_node": "fiber (Singapore \u2192 Sydney)"
},
{ {
"from_node": "fiber (Taipei \u2192 Tokyo)", "from_node": "fiber (Taipei \u2192 Tokyo)",
"to_node": "Tokyo" "to_node": "Tokyo"
},
{
"from_node": "Tokyo",
"to_node": "fiber (Taipei \u2192 Tokyo)"
} }
] ]
} }

File diff suppressed because it is too large Load Diff

View File

@@ -286,121 +286,241 @@
"from_node": "Amsterdam", "from_node": "Amsterdam",
"to_node": "fiber (Amsterdam \u2192 Berlin)" "to_node": "fiber (Amsterdam \u2192 Berlin)"
}, },
{
"from_node": "fiber (Amsterdam \u2192 Berlin)",
"to_node": "Amsterdam"
},
{ {
"from_node": "Amsterdam", "from_node": "Amsterdam",
"to_node": "fiber (Amsterdam \u2192 Brussels)" "to_node": "fiber (Amsterdam \u2192 Brussels)"
}, },
{
"from_node": "fiber (Amsterdam \u2192 Brussels)",
"to_node": "Amsterdam"
},
{ {
"from_node": "Amsterdam", "from_node": "Amsterdam",
"to_node": "fiber (Amsterdam \u2192 Frankfurt)" "to_node": "fiber (Amsterdam \u2192 Frankfurt)"
}, },
{
"from_node": "fiber (Amsterdam \u2192 Frankfurt)",
"to_node": "Amsterdam"
},
{ {
"from_node": "Berlin", "from_node": "Berlin",
"to_node": "fiber (Berlin \u2192 Warsaw)" "to_node": "fiber (Berlin \u2192 Warsaw)"
}, },
{
"from_node": "fiber (Berlin \u2192 Warsaw)",
"to_node": "Berlin"
},
{ {
"from_node": "Brussels", "from_node": "Brussels",
"to_node": "fiber (Brussels \u2192 London)" "to_node": "fiber (Brussels \u2192 London)"
}, },
{
"from_node": "fiber (Brussels \u2192 London)",
"to_node": "Brussels"
},
{ {
"from_node": "Bucharest", "from_node": "Bucharest",
"to_node": "fiber (Bucharest \u2192 Istanbul)" "to_node": "fiber (Bucharest \u2192 Istanbul)"
}, },
{
"from_node": "fiber (Bucharest \u2192 Istanbul)",
"to_node": "Bucharest"
},
{ {
"from_node": "Bucharest", "from_node": "Bucharest",
"to_node": "fiber (Bucharest \u2192 Warsaw)" "to_node": "fiber (Bucharest \u2192 Warsaw)"
}, },
{
"from_node": "fiber (Bucharest \u2192 Warsaw)",
"to_node": "Bucharest"
},
{ {
"from_node": "Frankfurt", "from_node": "Frankfurt",
"to_node": "fiber (Frankfurt \u2192 Vienna)" "to_node": "fiber (Frankfurt \u2192 Vienna)"
}, },
{
"from_node": "fiber (Frankfurt \u2192 Vienna)",
"to_node": "Frankfurt"
},
{ {
"from_node": "Istanbul", "from_node": "Istanbul",
"to_node": "fiber (Istanbul \u2192 Rome)" "to_node": "fiber (Istanbul \u2192 Rome)"
}, },
{
"from_node": "fiber (Istanbul \u2192 Rome)",
"to_node": "Istanbul"
},
{ {
"from_node": "London", "from_node": "London",
"to_node": "fiber (London \u2192 Paris)" "to_node": "fiber (London \u2192 Paris)"
}, },
{
"from_node": "fiber (London \u2192 Paris)",
"to_node": "London"
},
{ {
"from_node": "Madrid", "from_node": "Madrid",
"to_node": "fiber (Madrid \u2192 Paris)" "to_node": "fiber (Madrid \u2192 Paris)"
}, },
{
"from_node": "fiber (Madrid \u2192 Paris)",
"to_node": "Madrid"
},
{ {
"from_node": "Madrid", "from_node": "Madrid",
"to_node": "fiber (Madrid \u2192 Zurich)" "to_node": "fiber (Madrid \u2192 Zurich)"
}, },
{
"from_node": "fiber (Madrid \u2192 Zurich)",
"to_node": "Madrid"
},
{ {
"from_node": "Rome", "from_node": "Rome",
"to_node": "fiber (Rome \u2192 Vienna)" "to_node": "fiber (Rome \u2192 Vienna)"
}, },
{
"from_node": "fiber (Rome \u2192 Vienna)",
"to_node": "Rome"
},
{ {
"from_node": "Rome", "from_node": "Rome",
"to_node": "fiber (Rome \u2192 Zurich)" "to_node": "fiber (Rome \u2192 Zurich)"
}, },
{
"from_node": "fiber (Rome \u2192 Zurich)",
"to_node": "Rome"
},
{ {
"from_node": "Vienna", "from_node": "Vienna",
"to_node": "fiber (Vienna \u2192 Warsaw)" "to_node": "fiber (Vienna \u2192 Warsaw)"
}, },
{
"from_node": "fiber (Vienna \u2192 Warsaw)",
"to_node": "Vienna"
},
{ {
"from_node": "fiber (Amsterdam \u2192 Berlin)", "from_node": "fiber (Amsterdam \u2192 Berlin)",
"to_node": "Berlin" "to_node": "Berlin"
}, },
{
"from_node": "Berlin",
"to_node": "fiber (Amsterdam \u2192 Berlin)"
},
{ {
"from_node": "fiber (Amsterdam \u2192 Brussels)", "from_node": "fiber (Amsterdam \u2192 Brussels)",
"to_node": "Brussels" "to_node": "Brussels"
}, },
{
"from_node": "Brussels",
"to_node": "fiber (Amsterdam \u2192 Brussels)"
},
{ {
"from_node": "fiber (Amsterdam \u2192 Frankfurt)", "from_node": "fiber (Amsterdam \u2192 Frankfurt)",
"to_node": "Frankfurt" "to_node": "Frankfurt"
}, },
{
"from_node": "Frankfurt",
"to_node": "fiber (Amsterdam \u2192 Frankfurt)"
},
{ {
"from_node": "fiber (Berlin \u2192 Warsaw)", "from_node": "fiber (Berlin \u2192 Warsaw)",
"to_node": "Warsaw" "to_node": "Warsaw"
}, },
{
"from_node": "Warsaw",
"to_node": "fiber (Berlin \u2192 Warsaw)"
},
{ {
"from_node": "fiber (Brussels \u2192 London)", "from_node": "fiber (Brussels \u2192 London)",
"to_node": "London" "to_node": "London"
}, },
{
"from_node": "London",
"to_node": "fiber (Brussels \u2192 London)"
},
{ {
"from_node": "fiber (Bucharest \u2192 Istanbul)", "from_node": "fiber (Bucharest \u2192 Istanbul)",
"to_node": "Istanbul" "to_node": "Istanbul"
}, },
{
"from_node": "Istanbul",
"to_node": "fiber (Bucharest \u2192 Istanbul)"
},
{ {
"from_node": "fiber (Bucharest \u2192 Warsaw)", "from_node": "fiber (Bucharest \u2192 Warsaw)",
"to_node": "Warsaw" "to_node": "Warsaw"
}, },
{
"from_node": "Warsaw",
"to_node": "fiber (Bucharest \u2192 Warsaw)"
},
{ {
"from_node": "fiber (Frankfurt \u2192 Vienna)", "from_node": "fiber (Frankfurt \u2192 Vienna)",
"to_node": "Vienna" "to_node": "Vienna"
}, },
{
"from_node": "Vienna",
"to_node": "fiber (Frankfurt \u2192 Vienna)"
},
{ {
"from_node": "fiber (Istanbul \u2192 Rome)", "from_node": "fiber (Istanbul \u2192 Rome)",
"to_node": "Rome" "to_node": "Rome"
}, },
{
"from_node": "Rome",
"to_node": "fiber (Istanbul \u2192 Rome)"
},
{ {
"from_node": "fiber (London \u2192 Paris)", "from_node": "fiber (London \u2192 Paris)",
"to_node": "Paris" "to_node": "Paris"
}, },
{
"from_node": "Paris",
"to_node": "fiber (London \u2192 Paris)"
},
{ {
"from_node": "fiber (Madrid \u2192 Paris)", "from_node": "fiber (Madrid \u2192 Paris)",
"to_node": "Paris" "to_node": "Paris"
}, },
{
"from_node": "Paris",
"to_node": "fiber (Madrid \u2192 Paris)"
},
{ {
"from_node": "fiber (Madrid \u2192 Zurich)", "from_node": "fiber (Madrid \u2192 Zurich)",
"to_node": "Zurich" "to_node": "Zurich"
}, },
{
"from_node": "Zurich",
"to_node": "fiber (Madrid \u2192 Zurich)"
},
{ {
"from_node": "fiber (Rome \u2192 Vienna)", "from_node": "fiber (Rome \u2192 Vienna)",
"to_node": "Vienna" "to_node": "Vienna"
}, },
{
"from_node": "Vienna",
"to_node": "fiber (Rome \u2192 Vienna)"
},
{ {
"from_node": "fiber (Rome \u2192 Zurich)", "from_node": "fiber (Rome \u2192 Zurich)",
"to_node": "Zurich" "to_node": "Zurich"
}, },
{
"from_node": "Zurich",
"to_node": "fiber (Rome \u2192 Zurich)"
},
{ {
"from_node": "fiber (Vienna \u2192 Warsaw)", "from_node": "fiber (Vienna \u2192 Warsaw)",
"to_node": "Warsaw" "to_node": "Warsaw"
},
{
"from_node": "Warsaw",
"to_node": "fiber (Vienna \u2192 Warsaw)"
} }
] ]
} }