diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..485dee64bcfb48793379b200a1afd14e85a8aaf4 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000000000000000000000000000000000000..3e55fe983d69e3b0afb000d926c21ea694d2a5cf --- /dev/null +++ b/Pipfile @@ -0,0 +1,14 @@ +[[source]] +name = "pypi" +url = "https://pypi.org/simple" +verify_ssl = true + +[dev-packages] +pytest = "*" + +[packages] +networkx = "*" +network2tikz = {editable = true,path = "/home/mark/Projekte/network2tikz"} + +[requires] +python_version = "3.7" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000000000000000000000000000000000000..7492ffa1c379f2723691c94fc20015f8e68305e6 --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,146 @@ +{ + "_meta": { + "hash": { + "sha256": "90bb1fb36e73adedd9b5cbdfa92a32607094a70b9581b3b4880138c5c20b5227" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.7" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "decorator": { + "hashes": [ + "sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760", + "sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7" + ], + "version": "==4.4.2" + }, + "network2tikz": { + "editable": true, + "path": "/home/mark/Projekte/network2tikz" + }, + "networkx": { + "hashes": [ + "sha256:cdfbf698749a5014bf2ed9db4a07a5295df1d3a53bf80bf3cbd61edf9df05fa1", + "sha256:f8f4ff0b6f96e4f9b16af6b84622597b5334bf9cae8cf9b2e42e7985d5c95c64" + ], + "index": "pypi", + "version": "==2.4" + }, + "numpy": { + "hashes": [ + "sha256:1786a08236f2c92ae0e70423c45e1e62788ed33028f94ca99c4df03f5be6b3c6", + "sha256:17aa7a81fe7599a10f2b7d95856dc5cf84a4eefa45bc96123cbbc3ebc568994e", + "sha256:20b26aaa5b3da029942cdcce719b363dbe58696ad182aff0e5dcb1687ec946dc", + "sha256:2d75908ab3ced4223ccba595b48e538afa5ecc37405923d1fea6906d7c3a50bc", + "sha256:39d2c685af15d3ce682c99ce5925cc66efc824652e10990d2462dfe9b8918c6a", + "sha256:56bc8ded6fcd9adea90f65377438f9fea8c05fcf7c5ba766bef258d0da1554aa", + "sha256:590355aeade1a2eaba17617c19edccb7db8d78760175256e3cf94590a1a964f3", + "sha256:70a840a26f4e61defa7bdf811d7498a284ced303dfbc35acb7be12a39b2aa121", + "sha256:77c3bfe65d8560487052ad55c6998a04b654c2fbc36d546aef2b2e511e760971", + "sha256:9537eecf179f566fd1c160a2e912ca0b8e02d773af0a7a1120ad4f7507cd0d26", + "sha256:9acdf933c1fd263c513a2df3dceecea6f3ff4419d80bf238510976bf9bcb26cd", + "sha256:ae0975f42ab1f28364dcda3dde3cf6c1ddab3e1d4b2909da0cb0191fa9ca0480", + "sha256:b3af02ecc999c8003e538e60c89a2b37646b39b688d4e44d7373e11c2debabec", + "sha256:b6ff59cee96b454516e47e7721098e6ceebef435e3e21ac2d6c3b8b02628eb77", + "sha256:b765ed3930b92812aa698a455847141869ef755a87e099fddd4ccf9d81fffb57", + "sha256:c98c5ffd7d41611407a1103ae11c8b634ad6a43606eca3e2a5a269e5d6e8eb07", + "sha256:cf7eb6b1025d3e169989416b1adcd676624c2dbed9e3bcb7137f51bfc8cc2572", + "sha256:d92350c22b150c1cae7ebb0ee8b5670cc84848f6359cf6b5d8f86617098a9b73", + "sha256:e422c3152921cece8b6a2fb6b0b4d73b6579bd20ae075e7d15143e711f3ca2ca", + "sha256:e840f552a509e3380b0f0ec977e8124d0dc34dc0e68289ca28f4d7c1d0d79474", + "sha256:f3d0a94ad151870978fb93538e95411c83899c9dc63e6fb65542f769568ecfa5" + ], + "version": "==1.18.1" + } + }, + "develop": { + "attrs": { + "hashes": [ + "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c", + "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72" + ], + "version": "==19.3.0" + }, + "importlib-metadata": { + "hashes": [ + "sha256:06f5b3a99029c7134207dd882428a66992a9de2bef7c2b699b5641f9886c3302", + "sha256:b97607a1a18a5100839aec1dc26a1ea17ee0d93b20b0f008d80a5a050afb200b" + ], + "markers": "python_version < '3.8'", + "version": "==1.5.0" + }, + "more-itertools": { + "hashes": [ + "sha256:5dd8bcf33e5f9513ffa06d5ad33d78f31e1931ac9a18f33d37e77a180d393a7c", + "sha256:b1ddb932186d8a6ac451e1d95844b382f55e12686d51ca0c68b6f61f2ab7a507" + ], + "version": "==8.2.0" + }, + "packaging": { + "hashes": [ + "sha256:3c292b474fda1671ec57d46d739d072bfd495a4f51ad01a055121d81e952b7a3", + "sha256:82f77b9bee21c1bafbf35a84905d604d5d1223801d639cf3ed140bd651c08752" + ], + "version": "==20.3" + }, + "pluggy": { + "hashes": [ + "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0", + "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d" + ], + "version": "==0.13.1" + }, + "py": { + "hashes": [ + "sha256:5e27081401262157467ad6e7f851b7aa402c5852dbcb3dae06768434de5752aa", + "sha256:c20fdd83a5dbc0af9efd622bee9a5564e278f6380fffcacc43ba6f43db2813b0" + ], + "version": "==1.8.1" + }, + "pyparsing": { + "hashes": [ + "sha256:4c830582a84fb022400b85429791bc551f1f4871c33f23e44f353119e92f969f", + "sha256:c342dccb5250c08d45fd6f8b4a559613ca603b57498511740e65cd11a2e7dcec" + ], + "version": "==2.4.6" + }, + "pytest": { + "hashes": [ + "sha256:0d5fe9189a148acc3c3eb2ac8e1ac0742cb7618c084f3d228baaec0c254b318d", + "sha256:ff615c761e25eb25df19edddc0b970302d2a9091fbce0e7213298d85fb61fef6" + ], + "index": "pypi", + "version": "==5.3.5" + }, + "six": { + "hashes": [ + "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a", + "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c" + ], + "version": "==1.14.0" + }, + "wcwidth": { + "hashes": [ + "sha256:8fd29383f539be45b20bd4df0dc29c20ba48654a41e661925e612311e9f3c603", + "sha256:f28b3e8a6483e5d49e7f8949ac1a78314e740333ae305b4ba5defd3e74fb37a8" + ], + "version": "==0.1.8" + }, + "zipp": { + "hashes": [ + "sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b", + "sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96" + ], + "version": "==3.1.0" + } + } +} diff --git a/graph.tex b/graph.tex new file mode 100644 index 0000000000000000000000000000000000000000..e65853efec08025cd5c2af500cf0662db626981b --- /dev/null +++ b/graph.tex @@ -0,0 +1,19 @@ +\documentclass{standalone} +\usepackage{tikz-network} +\begin{document} +\begin{tikzpicture} +\clip (0,0) rectangle (6,6); +\Vertex[x=0.350,y=0.691]{0} +\Vertex[x=1.486,y=1.221]{1} +\Vertex[x=1.561,y=4.476]{3} +\Vertex[x=5.650,y=4.325]{2} +\Vertex[x=5.499,y=5.309]{4} +\Edge[label=0.33](0)(1) +\Edge[label=1.05](0)(3) +\Edge[label=0.53](1)(2) +\Edge[label=0.33](1)(3) +\Edge[label=1.08](3)(2) +\Edge[label=1.06](3)(4) +\Edge[label=0.26](2)(4) +\end{tikzpicture} +\end{document} \ No newline at end of file diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..a39ea650965c81c8cffeced61ba984254fa71eb8 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,60 @@ +from collections import namedtuple + +import pytest +import networkx as nx + +Street = namedtuple('Street', ['u', 'v', 'street_type']) +Edge = namedtuple('Edge', ['x', 'y', 'charging_coeff'], defaults=(None,)) +config = { + 'speed': { + 'default': 50, # km/h + 'highway': 130 # km/h + }, + 'consumption': { + 'default': 125 # Wh/km + }, + 'nodes': [ + Edge(14, 16, 10), + Edge(29, 23), + Edge(84, 64), + Edge(30, 66), + Edge(82, 77) + ], + 'edges': [ + Street(0, 1, 'default'), + Street(0, 3, 'default'), + Street(1, 2, 'highway'), + Street(1, 3, 'highway'), + Street(2, 3, 'default'), + Street(2, 4, 'default'), + Street(3, 4, 'default') + ] +} + + +@pytest.fixture +def G(): + G = init_graph() + yield G + del G + + +def init_graph(): + G = nx.Graph() + + for edge in config['edges']: + u_x, u_y, u_ch = config['nodes'][edge.u] + v_x, v_y, v_ch = config['nodes'][edge.v] + + # Calculate euclidean distance + s = ((v_y - u_y) ** 2 + (v_x - u_x) ** 2) ** (1 / 2) # in km + + # Calc travel time via t = s/v + t = s / config['speed'][edge.street_type] # in h + + # Calc consumption via c = s * consumption_per_km + c = s * config['consumption']['default'] + + G.add_edge(edge.u, edge.v, weight=t, c=c, d=s) + + return G diff --git a/tests/test_graph.py b/tests/test_graph.py new file mode 100644 index 0000000000000000000000000000000000000000..3a841cb05bfb7634938cd194d400260477341dd7 --- /dev/null +++ b/tests/test_graph.py @@ -0,0 +1,18 @@ +import networkx as nx +import network2tikz as tikz + +from .conftest import config + + +def test_graph_creation(G: nx.Graph): + assert G.number_of_nodes() == 5 + assert G.number_of_edges() == 7 + + +def test_print_graph(G: nx.Graph): + layout = {i: (d[0], d[1]) for i, d in enumerate(config['nodes'])} + edges_label = {(u, v): '{:.2f}'.format(G[u][v]['weight']).format() for u, v in G.edges} + + #layout = nx.planar_layout(G) + + tikz.plot(G, 'graph.tex', layout=layout, edges_label=edges_label)