Skip to content
Snippets Groups Projects
Commit af3e3abd authored by Lionel GUEZ's avatar Lionel GUEZ
Browse files

Move functions to `util_eddies.py`

Move functions `node_to_date_eddy` and `date_eddy_to_node` from script
`report_graph.py` to script `util_eddies.py`. `util_eddies.py`
contains more basic functions, it only imports
shapefile. `report_graph.py` imports networkx. It was not convenient
nor meaningful to require networkx for scripts that use
`node_to_date_eddy` or `date_eddy_to_node`.
parent d3f911de
No related branches found
No related tags found
No related merge requests found
......@@ -253,3 +253,22 @@ def other_orient(orientation):
return "Anticyclones"
else:
return "Cyclones"
def node_to_date_eddy(node_index, e_overestim, only_date = False):
"""Convert from node identification in graph to eddy identification in
shapefiles. Return date_index or (date_index, eddy_index).
"""
k = (node_index - 1) // e_overestim
if only_date:
return k
else:
return k, node_index - k * e_overestim
def date_eddy_to_node(date, eddy_index, e_overestim):
"""Convert from eddy identification in shapefiles to node
identification in graph.
"""
return date * e_overestim + eddy_index
......@@ -11,7 +11,6 @@ from os import path
import pprint
import sys
import util_eddies
import report_graph
import json
parser = argparse.ArgumentParser()
......@@ -28,7 +27,7 @@ if args.ishape:
else:
if args.node:
with open("e_overestim.txt") as f: e_overestim = int(f.read())
date, eddy_index = report_graph.node_to_date_eddy(args.node,
date, eddy_index = util_eddies.node_to_date_eddy(args.node,
e_overestim)
else:
reply = input("date, eddy_index = ? ").split(",")
......
......@@ -8,6 +8,7 @@ from matplotlib import patches
import cartopy.crs as ccrs
import report_graph
import sys
import util_eddies
color_iter = itertools.cycle(('#1f77b4', '#aec7e8', '#ff7f0e',
'#ffbb78', '#2ca02c', '#98df8a',
......@@ -37,8 +38,8 @@ def is_node_type(G, n, label):
elif label == "important":
return G.in_degree[n] == 0 or G.out_degree[n] == 0 or G.degree[n] >= 3
elif label[0] == "date":
return report_graph.node_to_date_eddy(n, G.graph["e_overestim"],
only_date = True) == label[1]
return util_eddies.node_to_date_eddy(n, G.graph["e_overestim"],
only_date = True) == label[1]
elif label[0] == "node":
return n in label[1]
else:
......@@ -100,7 +101,6 @@ def animate_nbunch(G, nbunch):
if __name__ == "__main__":
import argparse
from os import path
import util_eddies
import time
parser = argparse.ArgumentParser(description = __doc__)
......
......@@ -8,25 +8,6 @@ import os
import json
import util_eddies
def node_to_date_eddy(node_index, e_overestim, only_date = False):
"""Convert from node identification in graph to eddy identification in
shapefiles. Return date_index or (date_index, eddy_index).
"""
k = (node_index - 1) // e_overestim
if only_date:
return k
else:
return k, node_index - k * e_overestim
def date_eddy_to_node(date, eddy_index, e_overestim):
"""Convert from eddy identification in shapefiles to node
identification in graph.
"""
return date * e_overestim + eddy_index
def read_eddy_graph(edgelist, shpc_dir = None, orientation = "Cyclones"):
if os.access(edgelist, os.R_OK):
G = nx.read_edgelist(edgelist, create_using = nx.DiGraph,
......@@ -50,7 +31,7 @@ def set_attribute(G, SHPC, orientation):
if G.number_of_nodes() <= SHPC.get_n_shapes(0, orientation) / 100:
for n in G:
date_index, eddy_index = node_to_date_eddy(n,
date_index, eddy_index = util_eddies.node_to_date_eddy(n,
G.graph["e_overestim"])
ishape = SHPC.comp_ishape(date_index, eddy_index, 0, orientation)
shape_rec = reader.shapeRecord(ishape)
......@@ -59,7 +40,7 @@ def set_attribute(G, SHPC, orientation):
ssh = shape_rec.record.ssh)
else:
for shape_rec in reader:
n = date_eddy_to_node(shape_rec.record.date,
n = util_eddies.date_eddy_to_node(shape_rec.record.date,
shape_rec.record.eddy_index,
G.graph["e_overestim"])
......@@ -78,7 +59,7 @@ def partition_graph_date(A, e_overestim):
my_subgraphs = {}
for n in A.iternodes():
date_index = node_to_date_eddy(int(n), e_overestim, only_date = True)
date_index = util_eddies.node_to_date_eddy(int(n), e_overestim, only_date = True)
if date_index in my_subgraphs:
my_subgraphs[date_index].append(n)
......@@ -146,11 +127,11 @@ if __name__ == "__main__":
if len_H >= 1:
# First and last dates:
node_index = min(G.nodes)
my_date = node_to_date_eddy(node_index, G.graph["e_overestim"],
my_date = util_eddies.node_to_date_eddy(node_index, G.graph["e_overestim"],
only_date = True)
print("First date:", my_date)
node_index = max(G.nodes)
my_date = node_to_date_eddy(node_index, G.graph["e_overestim"],
my_date = util_eddies.node_to_date_eddy(node_index, G.graph["e_overestim"],
only_date = True)
print("Last date:", my_date)
......
......@@ -21,7 +21,6 @@ script.
import graph_tool
import time
import math
import report_graph
import util_eddies
import argparse
......@@ -67,7 +66,7 @@ def node_to_prop(node_list, e_overestim, SHPC, orientation):
properties = []
for n in node_list:
date_index, eddy_index = report_graph.node_to_date_eddy(n, e_overestim)
date_index, eddy_index = util_eddies.node_to_date_eddy(n, e_overestim)
i_slice = SHPC.get_slice(date_index)
ishape = SHPC.comp_ishape(date_index, eddy_index, i_slice, orientation)
shapeRec = SHPC.get_reader(i_slice, orientation, "extremum")\
......
......@@ -15,6 +15,7 @@ import argparse
import report_graph
import itertools
import util_eddies
parser = argparse.ArgumentParser()
parser.add_argument("input_file", help = "Graph-tool file")
parser.add_argument("output_file", help = "Graphviz file")
......@@ -54,7 +55,7 @@ if args.t:
except KeyError:
break
else:
date_index = report_graph.node_to_date_eddy(segment,
date_index = util_eddies.node_to_date_eddy(segment,
g_in.gp.e_overestim,
only_date = True)
n.attr["label"] = f"{segment} in {i}\n({date_index})"
......@@ -62,7 +63,7 @@ if args.t:
else:
for n in g_out.iternodes():
segment = int(n)
date_index = report_graph.node_to_date_eddy(segment,
date_index = util_eddies.node_to_date_eddy(segment,
g_in.gp.e_overestim,
only_date = True)
n.attr["label"] = f"{segment}\n({date_index})"
......
#!/usr/bin/env python3
import json
import report_graph
import util_eddies
import bisect
import sys
......@@ -10,7 +10,7 @@ if len(sys.argv) != 4:
last_date = int(sys.argv[1])
with open(sys.argv[2]) as f: expanded_traj = json.load(f)
last_node = report_graph.date_eddy_to_node(
last_node = util_eddies.date_eddy_to_node(
last_date, expanded_traj["e_overestim"], expanded_traj["e_overestim"])
filt_traj = []
......
#!/usr/bin/env python3
import report_graph
import util_eddies
import random
import numpy as np
......@@ -14,7 +14,7 @@ def get_extr_coord(traj, e_overestim, SHPC, orientation):
y = []
for node in traj:
date_index, eddy_index = report_graph.node_to_date_eddy(node,
date_index, eddy_index = util_eddies.node_to_date_eddy(node,
e_overestim)
i_slice = SHPC.get_slice(date_index)
ishape = SHPC.comp_ishape(date_index, eddy_index, i_slice, orientation)
......@@ -42,9 +42,9 @@ def get_duration(expanded_traj):
duration_list = []
for traj in expanded_traj["traj"]:
init_date = report_graph.node_to_date_eddy(
init_date = util_eddies.node_to_date_eddy(
traj[0], expanded_traj["e_overestim"], only_date = True)
final_date = report_graph.node_to_date_eddy(
final_date = util_eddies.node_to_date_eddy(
traj[- 1], expanded_traj["e_overestim"], only_date = True)
duration_list.append(final_date - init_date)
......
......@@ -16,7 +16,7 @@ import graph_tool
from graph_tool import topology
import json
import sys
import report_graph
import util_eddies
import numpy as np
import time
......@@ -101,9 +101,9 @@ for n in topology.topological_sort(g):
# date of the first eddy in segment n and the date of
# splitting is the date of the last eddy in segment
# n1.
date_merging = report_graph.node_to_date_eddy(
date_merging = util_eddies.node_to_date_eddy(
g.vp.name[n], g.gp.e_overestim, only_date = True)
date_splitting = report_graph.node_to_date_eddy(
date_splitting = util_eddies.node_to_date_eddy(
g.vp.inst_eddies[n1][- 1], g.gp.e_overestim,
only_date = True)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment