From 082d8eb0e616d149862e6edb551024433c376d51 Mon Sep 17 00:00:00 2001
From: "niehues.mark@gmail.com" <niehues.mark@gmail.com>
Date: Wed, 11 Mar 2020 19:10:05 +0100
Subject: [PATCH] first steps

---
 .gitignore          |   1 +
 Pipfile             |  14 +++++
 Pipfile.lock        | 146 ++++++++++++++++++++++++++++++++++++++++++++
 graph.tex           |  19 ++++++
 tests/__init__.py   |   0
 tests/conftest.py   |  60 ++++++++++++++++++
 tests/test_graph.py |  18 ++++++
 7 files changed, 258 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 Pipfile
 create mode 100644 Pipfile.lock
 create mode 100644 graph.tex
 create mode 100644 tests/__init__.py
 create mode 100644 tests/conftest.py
 create mode 100644 tests/test_graph.py

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..485dee6
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.idea
diff --git a/Pipfile b/Pipfile
new file mode 100644
index 0000000..3e55fe9
--- /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 0000000..7492ffa
--- /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 0000000..e65853e
--- /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 0000000..e69de29
diff --git a/tests/conftest.py b/tests/conftest.py
new file mode 100644
index 0000000..a39ea65
--- /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 0000000..3a841cb
--- /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)
-- 
GitLab