{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import pandas as pd\n",
"import numpy as np\n",
"import sys\n",
"sys.path.append('../../Scripts')\n",
"from preprocess_daily import DailyPreprocessor\n",
"from generate_signals import SignalGenerator"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"비보호좌회전, 신호우회전, 유턴\n",
"\n",
"줄임말 목록\n",
"- `i` : 교차로번호, `inter_no`\n",
"- `f` : 진입, from, `inc_edge_id`\n",
"- `t` : 진출, to, `out_edge_id`\n",
"- `vec` : 방향벡터, unit vector (`np.array([0.6, 0.8])`)\n",
"- `dire` : 방위, direction (동, 서, 남, 북, 북동, 북서, 남동, 남서)\n",
"- `rvec` : 정방향 방향벡터, unit vector to the right direction (`np.array([0,1])`)\n",
"\n",
"필요한 객체들 목록\n",
"\n",
"- `inter2dire2rvec` : `inter_no` $\\mapsto$ `dire2rvec`\n",
" - `dire2rvec` : `dire` $\\mapsto$ `rvec`\n",
"- `inter2incs` : `inter_no` $\\mapsto$ `inc_edge_ids`\n",
"- `inter2outs` : `inter_no` $\\mapsto$ `out_edge_ids`\n",
"- `inter2inc2dire` : `inter_no` $\\mapsto$ `int2dire`\n",
" - `inc2dire` : `out_edge_id` $\\mapsto$ `dire`\n",
"- `inter2out2dire` : `inter_no` $\\mapsto$ `out2dire`\n",
" - `out2dire` : `inc_edge_id` $\\mapsto$ `dire`\n",
"- `inter2inc2vec` : `inter_no` $\\mapsto$ `int2vec`\n",
" - `inc2vec` : `out_edge_id` $\\mapsto$ `vec`\n",
"- `inter2out2vec` : `inter_no` $\\mapsto$ `out2vec`\n",
" - `out2vec` : `inc_edge_id` $\\mapsto$ `vec`\n",
"\n",
"좌회전 판단\n",
"\n",
"Given `inter_no`, `inc_edge_id` and `out_edge_id`, we have `inc_vec = inter2inc2vec[inter_no][inc_edge_id]` and `out_vec = inter2out2vec[inter_no][out_edge_id]`.\n",
"Rotate `inc_vec` by 90, 180 and 270 degrees clockwise, to define \n",
"`out_vec_left`, `out_vec_straight` and `out_vec_right`.\n",
"Define `out_vecs={'right':out_vec_left, 'straight':out_vec_straight, 'right':out_vec_right}`.\n",
"Select the key that maximize the similarity of the corresponding value of the key and `inc_vec`."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1. 데이터를 로드합니다.\n",
"1-1. 네트워크가 로드되었습니다.\n",
"1-2. 테이블들이 로드되었습니다.\n",
"1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n",
"1-4. 테이블들의 무결성 검사를 완료했습니다.\n",
"1-5. 주요 객체 (리스트, 딕셔너리)들을 저장했습니다.\n",
"2. 중간산출물을 생성합니다.\n",
"2-1. 매칭 테이블들을 생성했습니다.\n",
"2-2. 비보호우회전(g)을 배정했습니다.\n",
"2-3. 직진 및 좌회전(G)을 배정했습니다.\n",
"2-2. node2num_cycles.json를 저장했습니다.\n",
"3. 이슈사항을 저장합니다.\n"
]
}
],
"source": [
"self = DailyPreprocessor()\n",
"self.main()"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" inter_no | \n",
" phase_no | \n",
" ring_type | \n",
" move_no | \n",
" inc_dire | \n",
" out_dire | \n",
" inc_angle | \n",
" out_angle | \n",
" inc_edge_id | \n",
" out_edge_id | \n",
" node_id | \n",
" turn_type | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 175 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 179 | \n",
" 000 | \n",
" -571542797_02 | \n",
" 571500487_01 | \n",
" i0 | \n",
" straight | \n",
"
\n",
" \n",
" 1 | \n",
" 175 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 001 | \n",
" 180 | \n",
" -571500487_01 | \n",
" 571542797_02 | \n",
" i0 | \n",
" straight | \n",
"
\n",
" \n",
" 2 | \n",
" 175 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 001 | \n",
" 090 | \n",
" -571500487_01 | \n",
" 571545870_01 | \n",
" i0 | \n",
" left | \n",
"
\n",
" \n",
" 3 | \n",
" 175 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 179 | \n",
" 270 | \n",
" -571542797_02 | \n",
" 571510153_01 | \n",
" i0 | \n",
" left | \n",
"
\n",
" \n",
" 4 | \n",
" 175 | \n",
" 3 | \n",
" A | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
" 090 | \n",
" 270 | \n",
" 571545870_02 | \n",
" 571510153_01 | \n",
" i0 | \n",
" straight | \n",
"
\n",
" \n",
" 5 | \n",
" 175 | \n",
" 3 | \n",
" B | \n",
" 1 | \n",
" 동 | \n",
" 남 | \n",
" 090 | \n",
" 180 | \n",
" 571545870_02 | \n",
" 571542797_02 | \n",
" i0 | \n",
" left | \n",
"
\n",
" \n",
" 6 | \n",
" 175 | \n",
" 4 | \n",
" A | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 270 | \n",
" 000 | \n",
" 571510153_02 | \n",
" 571500487_01 | \n",
" i0 | \n",
" left | \n",
"
\n",
" \n",
" 7 | \n",
" 175 | \n",
" 4 | \n",
" B | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" 270 | \n",
" 090 | \n",
" 571510153_02 | \n",
" 571545870_01 | \n",
" i0 | \n",
" straight | \n",
"
\n",
" \n",
" 8 | \n",
" 176 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 180 | \n",
" 356 | \n",
" -571542810_01 | \n",
" -571542797_02.99 | \n",
" i1 | \n",
" straight | \n",
"
\n",
" \n",
" 9 | \n",
" 176 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 359 | \n",
" 180 | \n",
" 571542797_02.99 | \n",
" 571542810_01 | \n",
" i1 | \n",
" straight | \n",
"
\n",
" \n",
" 10 | \n",
" 176 | \n",
" 2 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 180 | \n",
" 356 | \n",
" -571542810_01 | \n",
" -571542797_02.99 | \n",
" i1 | \n",
" straight | \n",
"
\n",
" \n",
" 11 | \n",
" 176 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 180 | \n",
" 270 | \n",
" -571542810_01 | \n",
" 571543469_01 | \n",
" i1 | \n",
" left | \n",
"
\n",
" \n",
" 12 | \n",
" 176 | \n",
" 3 | \n",
" A | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 270 | \n",
" 356 | \n",
" 571543469_02 | \n",
" -571542797_02.99 | \n",
" i1 | \n",
" left | \n",
"
\n",
" \n",
" 13 | \n",
" 176 | \n",
" 3 | \n",
" B | \n",
" 18 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" i1 | \n",
" NaN | \n",
"
\n",
" \n",
" 14 | \n",
" 177 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 179 | \n",
" 000 | \n",
" -571542809_01 | \n",
" 571542811_01 | \n",
" i2 | \n",
" left | \n",
"
\n",
" \n",
" 15 | \n",
" 177 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 000 | \n",
" 180 | \n",
" 571542811_02 | \n",
" 571542809_01 | \n",
" i2 | \n",
" straight | \n",
"
\n",
" \n",
" 16 | \n",
" 177 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 000 | \n",
" 090 | \n",
" 571542811_02 | \n",
" 571542107_01 | \n",
" i2 | \n",
" left | \n",
"
\n",
" \n",
" 17 | \n",
" 177 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 179 | \n",
" 270 | \n",
" -571542809_01 | \n",
" 571542809_01 | \n",
" i2 | \n",
" left | \n",
"
\n",
" \n",
" 18 | \n",
" 177 | \n",
" 3 | \n",
" A | \n",
" 17 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" i2 | \n",
" NaN | \n",
"
\n",
" \n",
" 19 | \n",
" 177 | \n",
" 3 | \n",
" B | \n",
" 18 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" i2 | \n",
" NaN | \n",
"
\n",
" \n",
" 20 | \n",
" 177 | \n",
" 4 | \n",
" A | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 268 | \n",
" 000 | \n",
" -571542809_01 | \n",
" 571542811_01 | \n",
" i2 | \n",
" left | \n",
"
\n",
" \n",
" 21 | \n",
" 177 | \n",
" 4 | \n",
" B | \n",
" 1 | \n",
" 동 | \n",
" 남 | \n",
" 090 | \n",
" 180 | \n",
" 571542107_02 | \n",
" 571542809_01 | \n",
" i2 | \n",
" left | \n",
"
\n",
" \n",
" 22 | \n",
" 178 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 180 | \n",
" 000 | \n",
" 571540304_02 | \n",
" 571556450_01 | \n",
" i3 | \n",
" straight | \n",
"
\n",
" \n",
" 23 | \n",
" 178 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 000 | \n",
" 180 | \n",
" 571556450_02 | \n",
" 571540304_01 | \n",
" i3 | \n",
" straight | \n",
"
\n",
" \n",
" 24 | \n",
" 178 | \n",
" 2 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 000 | \n",
" 090 | \n",
" 571556450_02 | \n",
" 571500475_01 | \n",
" i3 | \n",
" left | \n",
"
\n",
" \n",
" 25 | \n",
" 178 | \n",
" 2 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 180 | \n",
" 270 | \n",
" 571540304_02 | \n",
" 571540303_01 | \n",
" i3 | \n",
" left | \n",
"
\n",
" \n",
" 26 | \n",
" 178 | \n",
" 3 | \n",
" A | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 270 | \n",
" 000 | \n",
" 571540303_02.21 | \n",
" 571556450_01 | \n",
" i3 | \n",
" left | \n",
"
\n",
" \n",
" 27 | \n",
" 178 | \n",
" 3 | \n",
" B | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" 270 | \n",
" 090 | \n",
" 571540303_02.21 | \n",
" 571500475_01 | \n",
" i3 | \n",
" straight | \n",
"
\n",
" \n",
" 28 | \n",
" 178 | \n",
" 4 | \n",
" A | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
" 090 | \n",
" 270 | \n",
" -571500475_01 | \n",
" 571540303_01 | \n",
" i3 | \n",
" straight | \n",
"
\n",
" \n",
" 29 | \n",
" 178 | \n",
" 4 | \n",
" B | \n",
" 1 | \n",
" 동 | \n",
" 남 | \n",
" 090 | \n",
" 180 | \n",
" -571500475_01 | \n",
" 571540304_01 | \n",
" i3 | \n",
" left | \n",
"
\n",
" \n",
" 30 | \n",
" 201 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 180 | \n",
" 000 | \n",
" -571500569_01 | \n",
" 571500583_02 | \n",
" i8 | \n",
" straight | \n",
"
\n",
" \n",
" 31 | \n",
" 201 | \n",
" 1 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 180 | \n",
" 270 | \n",
" -571500569_01 | \n",
" 571500618_01 | \n",
" i8 | \n",
" left | \n",
"
\n",
" \n",
" 32 | \n",
" 201 | \n",
" 2 | \n",
" A | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 270 | \n",
" 000 | \n",
" 571500618_02 | \n",
" 571500583_02 | \n",
" i8 | \n",
" left | \n",
"
\n",
" \n",
" 33 | \n",
" 201 | \n",
" 2 | \n",
" B | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" 270 | \n",
" 090 | \n",
" 571500618_02 | \n",
" 571500617_01 | \n",
" i8 | \n",
" straight | \n",
"
\n",
" \n",
" 34 | \n",
" 201 | \n",
" 3 | \n",
" A | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
" 090 | \n",
" 270 | \n",
" 571500617_02 | \n",
" 571500618_01 | \n",
" i8 | \n",
" straight | \n",
"
\n",
" \n",
" 35 | \n",
" 201 | \n",
" 3 | \n",
" B | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" 270 | \n",
" 090 | \n",
" 571500618_02 | \n",
" 571500617_01 | \n",
" i8 | \n",
" straight | \n",
"
\n",
" \n",
" 36 | \n",
" 201 | \n",
" 4 | \n",
" A | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
" 090 | \n",
" 270 | \n",
" 571500617_02 | \n",
" 571500618_01 | \n",
" i8 | \n",
" straight | \n",
"
\n",
" \n",
" 37 | \n",
" 201 | \n",
" 4 | \n",
" B | \n",
" 1 | \n",
" 동 | \n",
" 남 | \n",
" 090 | \n",
" 180 | \n",
" 571500617_02 | \n",
" 571500569_01 | \n",
" i8 | \n",
" left | \n",
"
\n",
" \n",
" 38 | \n",
" 201 | \n",
" 5 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 000 | \n",
" 090 | \n",
" 571500583_01 | \n",
" 571500617_01 | \n",
" i8 | \n",
" left | \n",
"
\n",
" \n",
" 39 | \n",
" 201 | \n",
" 5 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 000 | \n",
" 180 | \n",
" 571500583_01 | \n",
" 571500569_01 | \n",
" i8 | \n",
" straight | \n",
"
\n",
" \n",
" 40 | \n",
" 202 | \n",
" 1 | \n",
" A | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
" 090 | \n",
" 270 | \n",
" 571510152_02 | \n",
" -571510152_01 | \n",
" i9 | \n",
" straight | \n",
"
\n",
" \n",
" 41 | \n",
" 202 | \n",
" 1 | \n",
" B | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" 270 | \n",
" 090 | \n",
" 571510152_01 | \n",
" 571510152_01.65 | \n",
" i9 | \n",
" straight | \n",
"
\n",
" \n",
" 42 | \n",
" 202 | \n",
" 2 | \n",
" A | \n",
" 17 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" i9 | \n",
" NaN | \n",
"
\n",
" \n",
" 43 | \n",
" 202 | \n",
" 2 | \n",
" B | \n",
" 18 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" i9 | \n",
" NaN | \n",
"
\n",
" \n",
" 44 | \n",
" 206 | \n",
" 1 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 180 | \n",
" 000 | \n",
" -571511538_02 | \n",
" 571542073_02 | \n",
" i7 | \n",
" straight | \n",
"
\n",
" \n",
" 45 | \n",
" 206 | \n",
" 1 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 000 | \n",
" 180 | \n",
" 571542073_01 | \n",
" 571511538_02 | \n",
" i7 | \n",
" straight | \n",
"
\n",
" \n",
" 46 | \n",
" 206 | \n",
" 2 | \n",
" A | \n",
" 17 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" i7 | \n",
" NaN | \n",
"
\n",
" \n",
" 47 | \n",
" 206 | \n",
" 2 | \n",
" B | \n",
" 18 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" i7 | \n",
" NaN | \n",
"
\n",
" \n",
" 48 | \n",
" 206 | \n",
" 3 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 180 | \n",
" 000 | \n",
" -571511538_02 | \n",
" 571542073_02 | \n",
" i7 | \n",
" straight | \n",
"
\n",
" \n",
" 49 | \n",
" 206 | \n",
" 3 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 000 | \n",
" 180 | \n",
" 571542073_01 | \n",
" 571511538_02 | \n",
" i7 | \n",
" straight | \n",
"
\n",
" \n",
" 50 | \n",
" 206 | \n",
" 4 | \n",
" A | \n",
" 17 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" i7 | \n",
" NaN | \n",
"
\n",
" \n",
" 51 | \n",
" 206 | \n",
" 4 | \n",
" B | \n",
" 18 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" i7 | \n",
" NaN | \n",
"
\n",
" \n",
" 52 | \n",
" 210 | \n",
" 1 | \n",
" A | \n",
" 6 | \n",
" 동 | \n",
" 서 | \n",
" 090 | \n",
" 270 | \n",
" -571542115_01 | \n",
" 571500535_01 | \n",
" i6 | \n",
" straight | \n",
"
\n",
" \n",
" 53 | \n",
" 210 | \n",
" 1 | \n",
" B | \n",
" 18 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" i6 | \n",
" NaN | \n",
"
\n",
" \n",
" 54 | \n",
" 210 | \n",
" 2 | \n",
" A | \n",
" 5 | \n",
" 서 | \n",
" 북 | \n",
" 270 | \n",
" 000 | \n",
" 571500535_02.18 | \n",
" 571511538_01 | \n",
" i6 | \n",
" left | \n",
"
\n",
" \n",
" 55 | \n",
" 210 | \n",
" 2 | \n",
" B | \n",
" 2 | \n",
" 서 | \n",
" 동 | \n",
" 270 | \n",
" 090 | \n",
" 571500535_02.18 | \n",
" 571542115_01 | \n",
" i6 | \n",
" straight | \n",
"
\n",
" \n",
" 56 | \n",
" 210 | \n",
" 3 | \n",
" A | \n",
" 7 | \n",
" 북 | \n",
" 동 | \n",
" 000 | \n",
" 090 | \n",
" 571511538_02.121 | \n",
" 571542115_01 | \n",
" i6 | \n",
" left | \n",
"
\n",
" \n",
" 57 | \n",
" 210 | \n",
" 3 | \n",
" B | \n",
" 4 | \n",
" 북 | \n",
" 남 | \n",
" 000 | \n",
" 180 | \n",
" 571511538_02.121 | \n",
" 571500585_01 | \n",
" i6 | \n",
" straight | \n",
"
\n",
" \n",
" 58 | \n",
" 210 | \n",
" 4 | \n",
" A | \n",
" 8 | \n",
" 남 | \n",
" 북 | \n",
" 180 | \n",
" 000 | \n",
" 571500585_02 | \n",
" 571511538_01 | \n",
" i6 | \n",
" straight | \n",
"
\n",
" \n",
" 59 | \n",
" 210 | \n",
" 4 | \n",
" B | \n",
" 3 | \n",
" 남 | \n",
" 서 | \n",
" 180 | \n",
" 270 | \n",
" 571500585_02 | \n",
" 571500535_01 | \n",
" i6 | \n",
" left | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" inter_no phase_no ring_type move_no inc_dire out_dire inc_angle \\\n",
"0 175 1 A 8 남 북 179 \n",
"1 175 1 B 4 북 남 001 \n",
"2 175 2 A 7 북 동 001 \n",
"3 175 2 B 3 남 서 179 \n",
"4 175 3 A 6 동 서 090 \n",
"5 175 3 B 1 동 남 090 \n",
"6 175 4 A 5 서 북 270 \n",
"7 175 4 B 2 서 동 270 \n",
"8 176 1 A 8 남 북 180 \n",
"9 176 1 B 4 북 남 359 \n",
"10 176 2 A 8 남 북 180 \n",
"11 176 2 B 3 남 서 180 \n",
"12 176 3 A 5 서 북 270 \n",
"13 176 3 B 18 NaN NaN NaN \n",
"14 177 1 A 8 남 북 179 \n",
"15 177 1 B 4 북 남 000 \n",
"16 177 2 A 7 북 동 000 \n",
"17 177 2 B 3 남 서 179 \n",
"18 177 3 A 17 NaN NaN NaN \n",
"19 177 3 B 18 NaN NaN NaN \n",
"20 177 4 A 5 서 북 268 \n",
"21 177 4 B 1 동 남 090 \n",
"22 178 1 A 8 남 북 180 \n",
"23 178 1 B 4 북 남 000 \n",
"24 178 2 A 7 북 동 000 \n",
"25 178 2 B 3 남 서 180 \n",
"26 178 3 A 5 서 북 270 \n",
"27 178 3 B 2 서 동 270 \n",
"28 178 4 A 6 동 서 090 \n",
"29 178 4 B 1 동 남 090 \n",
"30 201 1 A 8 남 북 180 \n",
"31 201 1 B 3 남 서 180 \n",
"32 201 2 A 5 서 북 270 \n",
"33 201 2 B 2 서 동 270 \n",
"34 201 3 A 6 동 서 090 \n",
"35 201 3 B 2 서 동 270 \n",
"36 201 4 A 6 동 서 090 \n",
"37 201 4 B 1 동 남 090 \n",
"38 201 5 A 7 북 동 000 \n",
"39 201 5 B 4 북 남 000 \n",
"40 202 1 A 6 동 서 090 \n",
"41 202 1 B 2 서 동 270 \n",
"42 202 2 A 17 NaN NaN NaN \n",
"43 202 2 B 18 NaN NaN NaN \n",
"44 206 1 A 8 남 북 180 \n",
"45 206 1 B 4 북 남 000 \n",
"46 206 2 A 17 NaN NaN NaN \n",
"47 206 2 B 18 NaN NaN NaN \n",
"48 206 3 A 8 남 북 180 \n",
"49 206 3 B 4 북 남 000 \n",
"50 206 4 A 17 NaN NaN NaN \n",
"51 206 4 B 18 NaN NaN NaN \n",
"52 210 1 A 6 동 서 090 \n",
"53 210 1 B 18 NaN NaN NaN \n",
"54 210 2 A 5 서 북 270 \n",
"55 210 2 B 2 서 동 270 \n",
"56 210 3 A 7 북 동 000 \n",
"57 210 3 B 4 북 남 000 \n",
"58 210 4 A 8 남 북 180 \n",
"59 210 4 B 3 남 서 180 \n",
"\n",
" out_angle inc_edge_id out_edge_id node_id turn_type \n",
"0 000 -571542797_02 571500487_01 i0 straight \n",
"1 180 -571500487_01 571542797_02 i0 straight \n",
"2 090 -571500487_01 571545870_01 i0 left \n",
"3 270 -571542797_02 571510153_01 i0 left \n",
"4 270 571545870_02 571510153_01 i0 straight \n",
"5 180 571545870_02 571542797_02 i0 left \n",
"6 000 571510153_02 571500487_01 i0 left \n",
"7 090 571510153_02 571545870_01 i0 straight \n",
"8 356 -571542810_01 -571542797_02.99 i1 straight \n",
"9 180 571542797_02.99 571542810_01 i1 straight \n",
"10 356 -571542810_01 -571542797_02.99 i1 straight \n",
"11 270 -571542810_01 571543469_01 i1 left \n",
"12 356 571543469_02 -571542797_02.99 i1 left \n",
"13 NaN NaN NaN i1 NaN \n",
"14 000 -571542809_01 571542811_01 i2 left \n",
"15 180 571542811_02 571542809_01 i2 straight \n",
"16 090 571542811_02 571542107_01 i2 left \n",
"17 270 -571542809_01 571542809_01 i2 left \n",
"18 NaN NaN NaN i2 NaN \n",
"19 NaN NaN NaN i2 NaN \n",
"20 000 -571542809_01 571542811_01 i2 left \n",
"21 180 571542107_02 571542809_01 i2 left \n",
"22 000 571540304_02 571556450_01 i3 straight \n",
"23 180 571556450_02 571540304_01 i3 straight \n",
"24 090 571556450_02 571500475_01 i3 left \n",
"25 270 571540304_02 571540303_01 i3 left \n",
"26 000 571540303_02.21 571556450_01 i3 left \n",
"27 090 571540303_02.21 571500475_01 i3 straight \n",
"28 270 -571500475_01 571540303_01 i3 straight \n",
"29 180 -571500475_01 571540304_01 i3 left \n",
"30 000 -571500569_01 571500583_02 i8 straight \n",
"31 270 -571500569_01 571500618_01 i8 left \n",
"32 000 571500618_02 571500583_02 i8 left \n",
"33 090 571500618_02 571500617_01 i8 straight \n",
"34 270 571500617_02 571500618_01 i8 straight \n",
"35 090 571500618_02 571500617_01 i8 straight \n",
"36 270 571500617_02 571500618_01 i8 straight \n",
"37 180 571500617_02 571500569_01 i8 left \n",
"38 090 571500583_01 571500617_01 i8 left \n",
"39 180 571500583_01 571500569_01 i8 straight \n",
"40 270 571510152_02 -571510152_01 i9 straight \n",
"41 090 571510152_01 571510152_01.65 i9 straight \n",
"42 NaN NaN NaN i9 NaN \n",
"43 NaN NaN NaN i9 NaN \n",
"44 000 -571511538_02 571542073_02 i7 straight \n",
"45 180 571542073_01 571511538_02 i7 straight \n",
"46 NaN NaN NaN i7 NaN \n",
"47 NaN NaN NaN i7 NaN \n",
"48 000 -571511538_02 571542073_02 i7 straight \n",
"49 180 571542073_01 571511538_02 i7 straight \n",
"50 NaN NaN NaN i7 NaN \n",
"51 NaN NaN NaN i7 NaN \n",
"52 270 -571542115_01 571500535_01 i6 straight \n",
"53 NaN NaN NaN i6 NaN \n",
"54 000 571500535_02.18 571511538_01 i6 left \n",
"55 090 571500535_02.18 571542115_01 i6 straight \n",
"56 090 571511538_02.121 571542115_01 i6 left \n",
"57 180 571511538_02.121 571500585_01 i6 straight \n",
"58 000 571500585_02 571511538_01 i6 straight \n",
"59 270 571500585_02 571500535_01 i6 left "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for i, row in self.match5.iterrows():\n",
" node_id = row.node_id\n",
" inc_edge_id = row.inc_edge_id\n",
" out_edge_id = row.out_edge_id\n",
" if not (pd.isna(inc_edge_id) and pd.isna(out_edge_id)):\n",
" turn_type = n2io2turn[node_id][(inc_edge_id, out_edge_id)]\n",
" self.match5.at[i, 'turn_type']=turn_type\n",
"display(self.match5)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4\n",
"2\n",
"1\n",
"1\n",
"2\n",
"1\n",
"1\n",
"1\n",
"3\n",
"2\n",
"3\n",
"1\n",
"2\n"
]
},
{
"ename": "KeyError",
"evalue": "nan",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[1;32mIn[15], line 4\u001b[0m\n\u001b[0;32m 2\u001b[0m inc_edge_id \u001b[38;5;241m=\u001b[39m row\u001b[38;5;241m.\u001b[39minc_edge_id\n\u001b[0;32m 3\u001b[0m out_edge_id \u001b[38;5;241m=\u001b[39m row\u001b[38;5;241m.\u001b[39mout_edge_id\n\u001b[1;32m----> 4\u001b[0m inc_edge \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnet\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetEdge\u001b[49m\u001b[43m(\u001b[49m\u001b[43minc_edge_id\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 5\u001b[0m out_edge \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnet\u001b[38;5;241m.\u001b[39mgetEdge(out_edge_id)\n\u001b[0;32m 6\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;28mlen\u001b[39m(inc_edge\u001b[38;5;241m.\u001b[39mgetConnections(out_edge)))\n",
"File \u001b[1;32mC:\\Program Files (x86)\\Eclipse\\Sumo\\tools\\sumolib\\net\\__init__.py:261\u001b[0m, in \u001b[0;36mNet.getEdge\u001b[1;34m(self, id)\u001b[0m\n\u001b[0;32m 260\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mgetEdge\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;28mid\u001b[39m):\n\u001b[1;32m--> 261\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_id2edge\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;28;43mid\u001b[39;49m\u001b[43m]\u001b[49m\n",
"\u001b[1;31mKeyError\u001b[0m: nan"
]
}
],
"source": [
"for row in self.match5.itertuples():\n",
" inc_edge_id = row.inc_edge_id\n",
" out_edge_id = row.out_edge_id\n",
" inc_edge = self.net.getEdge(inc_edge_id)\n",
" out_edge = self.net.getEdge(out_edge_id)\n",
" print(len(inc_edge.getConnections(out_edge)))"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1. 데이터를 로드합니다.\n",
"1-1. 네트워크가 로드되었습니다.\n",
"1-2. 테이블들이 로드되었습니다.\n",
"1-3. 네트워크의 모든 clean state requirement들을 체크했습니다.\n",
"1-4. 테이블들의 무결성 검사를 완료했습니다.\n",
"1-5. 주요 객체 (리스트, 딕셔너리)들을 저장했습니다.\n"
]
}
],
"source": [
"self.load_data()\n",
"self.make_match1()\n",
"self.make_match2()\n",
"self.make_match3()\n",
"self.make_match4()\n",
"self.make_match5()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" parent_id | \n",
" child_id | \n",
" direction | \n",
" condition | \n",
" inc_edge_id | \n",
" out_edge_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" i0 | \n",
" u00 | \n",
" 북 | \n",
" 좌회전시 | \n",
" 571500487_02 | \n",
" 571500487_01.32 | \n",
"
\n",
" \n",
" 1 | \n",
" i2 | \n",
" u20 | \n",
" 북 | \n",
" 보행신호시 | \n",
" 571542810_01.51 | \n",
" 571542810_02 | \n",
"
\n",
" \n",
" 2 | \n",
" i3 | \n",
" u30 | \n",
" 북 | \n",
" 보행신호시 | \n",
" 571556452_01 | \n",
" 571556452_02 | \n",
"
\n",
" \n",
" 3 | \n",
" i3 | \n",
" u31 | \n",
" 동 | \n",
" 보행신호시 | \n",
" 571500475_02 | \n",
" 571500475_01.26 | \n",
"
\n",
" \n",
" 4 | \n",
" i3 | \n",
" u32 | \n",
" 서 | \n",
" 보행신호시 | \n",
" 571540303_02 | \n",
" -571540303_02 | \n",
"
\n",
" \n",
" 5 | \n",
" i6 | \n",
" u60 | \n",
" 서 | \n",
" 좌회전시 | \n",
" 571500535_02 | \n",
" -571500535_02 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" parent_id child_id direction condition inc_edge_id out_edge_id\n",
"0 i0 u00 북 좌회전시 571500487_02 571500487_01.32\n",
"1 i2 u20 북 보행신호시 571542810_01.51 571542810_02\n",
"2 i3 u30 북 보행신호시 571556452_01 571556452_02\n",
"3 i3 u31 동 보행신호시 571500475_02 571500475_01.26\n",
"4 i3 u32 서 보행신호시 571540303_02 -571540303_02\n",
"5 i6 u60 서 좌회전시 571500535_02 -571500535_02"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" parent_id | \n",
" child_id | \n",
" head_edge_id | \n",
" inc_edge_id | \n",
" out_edge_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" i0 | \n",
" u00 | \n",
" -571500487_01 | \n",
" 571500487_02 | \n",
" 571500487_01.32 | \n",
"
\n",
" \n",
" 1 | \n",
" i2 | \n",
" u20 | \n",
" 571542811_02 | \n",
" 571542810_01.51 | \n",
" 571542810_02 | \n",
"
\n",
" \n",
" 2 | \n",
" i3 | \n",
" u30 | \n",
" 571556450_02 | \n",
" 571556452_01 | \n",
" 571556452_02 | \n",
"
\n",
" \n",
" 3 | \n",
" i3 | \n",
" u31 | \n",
" -571500475_01 | \n",
" 571500475_02 | \n",
" 571500475_01.26 | \n",
"
\n",
" \n",
" 4 | \n",
" i3 | \n",
" u32 | \n",
" 571540303_02.21 | \n",
" 571540303_02 | \n",
" -571540303_02 | \n",
"
\n",
" \n",
" 5 | \n",
" i6 | \n",
" u60 | \n",
" 571500535_02.18 | \n",
" 571500535_02 | \n",
" -571500535_02 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" parent_id child_id head_edge_id inc_edge_id out_edge_id\n",
"0 i0 u00 -571500487_01 571500487_02 571500487_01.32\n",
"1 i2 u20 571542811_02 571542810_01.51 571542810_02\n",
"2 i3 u30 571556450_02 571556452_01 571556452_02\n",
"3 i3 u31 -571500475_01 571500475_02 571500475_01.26\n",
"4 i3 u32 571540303_02.21 571540303_02 -571540303_02\n",
"5 i6 u60 571500535_02.18 571500535_02 -571500535_02"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" child_id | \n",
" condition | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" u00 | \n",
" 좌회전시 | \n",
"
\n",
" \n",
" 1 | \n",
" u20 | \n",
" 보행신호시 | \n",
"
\n",
" \n",
" 2 | \n",
" u30 | \n",
" 보행신호시 | \n",
"
\n",
" \n",
" 3 | \n",
" u31 | \n",
" 보행신호시 | \n",
"
\n",
" \n",
" 4 | \n",
" u32 | \n",
" 보행신호시 | \n",
"
\n",
" \n",
" 5 | \n",
" u60 | \n",
" 좌회전시 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" child_id condition\n",
"0 u00 좌회전시\n",
"1 u20 보행신호시\n",
"2 u30 보행신호시\n",
"3 u31 보행신호시\n",
"4 u32 보행신호시\n",
"5 u60 좌회전시"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" parent_id | \n",
" child_id | \n",
" head_edge_id | \n",
" inc_edge_id | \n",
" out_edge_id | \n",
" condition | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" i0 | \n",
" u00 | \n",
" -571500487_01 | \n",
" 571500487_02 | \n",
" 571500487_01.32 | \n",
" 좌회전시 | \n",
"
\n",
" \n",
" 1 | \n",
" i2 | \n",
" u20 | \n",
" 571542811_02 | \n",
" 571542810_01.51 | \n",
" 571542810_02 | \n",
" 보행신호시 | \n",
"
\n",
" \n",
" 2 | \n",
" i3 | \n",
" u30 | \n",
" 571556450_02 | \n",
" 571556452_01 | \n",
" 571556452_02 | \n",
" 보행신호시 | \n",
"
\n",
" \n",
" 3 | \n",
" i3 | \n",
" u31 | \n",
" -571500475_01 | \n",
" 571500475_02 | \n",
" 571500475_01.26 | \n",
" 보행신호시 | \n",
"
\n",
" \n",
" 4 | \n",
" i3 | \n",
" u32 | \n",
" 571540303_02.21 | \n",
" 571540303_02 | \n",
" -571540303_02 | \n",
" 보행신호시 | \n",
"
\n",
" \n",
" 5 | \n",
" i6 | \n",
" u60 | \n",
" 571500535_02.18 | \n",
" 571500535_02 | \n",
" -571500535_02 | \n",
" 좌회전시 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" parent_id child_id head_edge_id inc_edge_id out_edge_id \\\n",
"0 i0 u00 -571500487_01 571500487_02 571500487_01.32 \n",
"1 i2 u20 571542811_02 571542810_01.51 571542810_02 \n",
"2 i3 u30 571556450_02 571556452_01 571556452_02 \n",
"3 i3 u31 -571500475_01 571500475_02 571500475_01.26 \n",
"4 i3 u32 571540303_02.21 571540303_02 -571540303_02 \n",
"5 i6 u60 571500535_02.18 571500535_02 -571500535_02 \n",
"\n",
" condition \n",
"0 좌회전시 \n",
"1 보행신호시 \n",
"2 보행신호시 \n",
"3 보행신호시 \n",
"4 보행신호시 \n",
"5 좌회전시 "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"display(self.uturn)\n",
"display(self.u_turn)\n",
"display(self.u_condition)\n",
"\n",
"self.u_turn = pd.merge(self.u_turn, self.u_condition, on='child_id')\n",
"self.u_turn"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"parent_id i0\n",
"child_id u00\n",
"head_edge_id -571500487_01\n",
"inc_edge_id 571500487_02\n",
"out_edge_id 571500487_01.32\n",
"condition 좌회전시\n",
"Name: 0, dtype: object\n"
]
}
],
"source": [
"cmatches = []\n",
"i = 0\n",
"row = self.u_turn.iloc[0]\n",
"print(row)\n",
"child_id = row.child_id\n",
"parent_id = row.parent_id\n",
"condition = row.condition\n",
"inc_edge_id = row.inc_edge_id\n",
"out_edge_id = row.out_edge_id\n",
"cmatch = self.match5.copy()[self.match5.node_id==parent_id] # match dataframe for a child node\n",
"cmatch = cmatch.sort_values(by=['phase_no', 'ring_type']).reset_index(drop=True)\n",
"cmatch['node_id'] = child_id"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# 각 uturn node에 대하여 (inc_edge_id, out_edge_id) 부여\n",
"cmatches = []\n",
"for _, row in self.uturn.iterrows():\n",
" child_id = row.child_id\n",
" parent_id = row.parent_id\n",
" dire = row.direction\n",
" condition = row.condition\n",
" inc_edge_id = row.inc_edge_id\n",
" out_edge_id = row.out_edge_id\n",
"\n",
" print(parent_id, condition)\n",
"\n",
" # match5에서 부모노드id에 해당하는 행들을 가져옴 (cmatch)\n",
" cmatch = self.match5.copy()[self.match5.node_id==parent_id] # match dataframe for a child node\n",
" cmatch = cmatch.sort_values(by=['phase_no', 'ring_type']).reset_index(drop=True)\n",
" cmatch['node_id'] = child_id\n",
" cmatch[['inc_edge_id', 'out_edge_id']] = np.nan\n",
" display(cmatch)\n",
"\n",
" # 보행신호시/좌회전시 진입/진출방향\n",
" ind = self.dires.index(dire)\n",
" inc_dire_pedes = self.dires[(ind + 2) % len(self.dires)]\n",
" out_dire_pedes = self.dires[(ind - 2) % len(self.dires)]\n",
" inc_dire_right = dire\n",
" out_dire_right = self.dires[(ind + 2) % len(self.dires)]\n",
"\n",
" if condition == '보행신호시':\n",
" print(inc_dire_pedes, out_dire_pedes)\n",
" else:\n",
" print(inc_dire_right, out_dire_right)\n",
"\n",
" # 보행신호시/좌회전시 조건\n",
" pedes_exists = (cmatch.inc_dire==inc_dire_pedes) & (cmatch.out_dire==out_dire_pedes)\n",
" right_exists = (cmatch.inc_dire==inc_dire_right) & (cmatch.out_dire==out_dire_right)\n",
"\n",
" # 보행신호시/좌회전시 진입/진출 엣지id 배정\n",
" ind = self.dires.index(dire)\n",
" if condition == \"보행신호시\":\n",
" cmatch.loc[pedes_exists, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
" elif condition == \"좌회전시\":\n",
" cmatch.loc[right_exists, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
" display(cmatch)\n",
"\n",
" # 신호없음이동류발생시/보행신호이동류발생시 조건\n",
" all_redsigns = cmatch.move_no == 18\n",
" crosswalk_on = cmatch.move_no == 17\n",
"\n",
" # 만약 어떤 유턴신호도 배정되지 않았다면\n",
" # 좌회전시 → 보행신호시 → 보행신호이동류발생시 → 신호없음이동류발생시 순으로 진입/진출 엣지id 배정\n",
" uturn_not_assigned = cmatch[['inc_edge_id','out_edge_id']].isna().any(axis=1).all()\n",
" if uturn_not_assigned:\n",
" # 좌회전시\n",
" if right_exists.any():\n",
" cmatch.loc[right_exists, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
" # 보행신호시\n",
" elif pedes_exists.any():\n",
" cmatch.loc[pedes_exists, ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
" # 보행신호이동류(17) 발생시\n",
" elif crosswalk_on.any():\n",
" cmatch.loc[crosswalk_on & (cmatch.out_dire!=dire), ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
" # 신호없음이동류(18) 발생시\n",
" elif all_redsigns.any():\n",
" cmatch.loc[all_redsigns & (cmatch.out_dire!=dire), ['inc_edge_id', 'out_edge_id']] = [inc_edge_id, out_edge_id]\n",
" display(cmatch)\n",
"cmatches.append(cmatch)\n"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"u31\n",
"5 5 s\n",
"6 6 s\n",
"7 7 s\n",
"0 0 s\n",
"1 1 s\n",
"2 2 s\n",
"3 3 s\n",
"4 4 t\n",
"\n",
"i3\n",
"5 5 r\n",
"6 6 s\n",
"7 7 s\n",
"8 8 s\n",
"9 9 l\n",
"15 15 r\n",
"16 16 s\n",
"17 17 s\n",
"18 18 s\n",
"19 19 l\n",
"10 10 r\n",
"11 11 s\n",
"12 12 s\n",
"13 13 s\n",
"14 14 l\n",
"0 0 r\n",
"1 1 s\n",
"2 2 s\n",
"3 3 s\n",
"4 4 l\n",
"\n",
"u00\n",
"5 5 s\n",
"6 6 s\n",
"7 7 s\n",
"8 8 s\n",
"0 0 s\n",
"1 1 s\n",
"2 2 s\n",
"3 3 s\n",
"4 4 t\n",
"\n",
"i0\n",
"0 0 r\n",
"1 1 s\n",
"2 2 s\n",
"3 3 l\n",
"8 8 r\n",
"9 9 s\n",
"10 10 s\n",
"11 11 s\n",
"12 12 s\n",
"13 13 l\n",
"14 14 r\n",
"15 15 s\n",
"16 16 l\n",
"4 4 r\n",
"5 5 s\n",
"6 6 s\n",
"7 7 l\n",
"\n",
"u60\n",
"0 0 s\n",
"1 1 s\n",
"2 2 s\n",
"3 3 s\n",
"4 4 s\n",
"5 5 s\n",
"6 6 s\n",
"7 7 s\n",
"8 8 t\n",
"\n",
"d12\n",
"\n",
"n13\n",
"0 -1 s\n",
"1 -1 s\n",
"2 -1 s\n",
"3 -1 s\n",
"4 -1 s\n",
"\n",
"i8\n",
"8 8 r\n",
"9 9 s\n",
"10 10 s\n",
"11 11 l\n",
"0 0 r\n",
"1 1 s\n",
"2 2 s\n",
"3 3 l\n",
"4 4 s\n",
"5 5 s\n",
"6 6 s\n",
"7 7 l\n",
"12 12 r\n",
"13 13 s\n",
"14 14 s\n",
"15 15 l\n",
"\n",
"i9\n",
"2 2 s\n",
"3 3 s\n",
"0 0 s\n",
"1 1 s\n",
"\n",
"n14\n",
"2 -1 r\n",
"3 -1 s\n",
"4 -1 s\n",
"5 -1 s\n",
"6 -1 s\n",
"7 -1 l\n",
"0 -1 r\n",
"1 -1 l\n",
"\n",
"n11\n",
"3 -1 s\n",
"4 -1 s\n",
"0 -1 s\n",
"1 -1 s\n",
"2 -1 s\n",
"\n",
"i7\n",
"4 4 r\n",
"5 5 s\n",
"6 6 s\n",
"3 3 r\n",
"0 0 s\n",
"1 1 s\n",
"2 2 l\n",
"\n",
"u32\n",
"0 0 s\n",
"1 1 s\n",
"2 2 s\n",
"3 3 s\n",
"4 4 s\n",
"5 5 s\n",
"6 6 s\n",
"7 7 t\n",
"\n",
"n06\n",
"0 -1 s\n",
"1 -1 s\n",
"2 -1 s\n",
"3 -1 s\n",
"4 -1 s\n",
"5 -1 s\n",
"6 -1 s\n",
"\n",
"n09\n",
"4 -1 s\n",
"5 -1 s\n",
"6 -1 s\n",
"0 -1 s\n",
"1 -1 s\n",
"2 -1 s\n",
"3 -1 s\n",
"\n",
"i6\n",
"4 4 r\n",
"5 5 s\n",
"6 6 s\n",
"7 7 s\n",
"8 8 l\n",
"12 12 r\n",
"13 13 s\n",
"14 14 s\n",
"15 15 l\n",
"9 9 r\n",
"10 10 s\n",
"11 11 s\n",
"0 0 r\n",
"1 1 s\n",
"2 2 s\n",
"3 3 l\n",
"\n",
"i5\n",
"0 0 s\n",
"1 1 s\n",
"2 2 s\n",
"3 3 s\n",
"4 4 s\n",
"5 5 s\n",
"\n",
"n08\n",
"0 -1 s\n",
"1 -1 s\n",
"2 -1 s\n",
"3 -1 l\n",
"7 -1 r\n",
"8 -1 s\n",
"9 -1 s\n",
"10 -1 s\n",
"4 -1 r\n",
"5 -1 l\n",
"6 -1 l\n",
"\n",
"c30\n",
"0 0 s\n",
"1 1 s\n",
"2 2 s\n",
"3 3 s\n",
"4 4 s\n",
"5 5 s\n",
"\n",
"n00\n",
"2 -1 s\n",
"3 -1 s\n",
"4 -1 s\n",
"5 -1 s\n",
"0 -1 s\n",
"1 -1 s\n",
"\n",
"i1\n",
"3 3 s\n",
"4 4 s\n",
"5 5 s\n",
"6 6 l\n",
"0 0 r\n",
"1 1 s\n",
"2 2 s\n",
"7 7 r\n",
"8 8 l\n",
"9 9 l\n",
"\n",
"n10\n",
"0 -1 s\n",
"1 -1 s\n",
"2 -1 s\n",
"3 -1 s\n",
"4 -1 s\n",
"5 -1 s\n",
"6 -1 s\n",
"7 -1 t\n",
"\n",
"n04\n",
"5 -1 r\n",
"6 -1 s\n",
"7 -1 s\n",
"8 -1 s\n",
"9 -1 l\n",
"0 -1 s\n",
"1 -1 s\n",
"2 -1 s\n",
"3 -1 l\n",
"10 -1 r\n",
"4 -1 r\n",
"\n",
"n03\n",
"0 -1 s\n",
"1 -1 s\n",
"2 -1 s\n",
"3 -1 s\n",
"4 -1 s\n",
"5 -1 s\n",
"\n",
"i2\n",
"3 3 r\n",
"4 4 s\n",
"5 5 s\n",
"6 6 s\n",
"2 2 r\n",
"0 0 s\n",
"1 1 s\n",
"\n",
"n01\n",
"2 -1 s\n",
"3 -1 s\n",
"4 -1 s\n",
"5 -1 s\n",
"0 -1 s\n",
"1 -1 s\n",
"\n",
"n02\n",
"0 -1 s\n",
"1 -1 s\n",
"2 -1 s\n",
"\n",
"d07\n",
"\n",
"d00\n",
"\n",
"n12\n",
"0 -1 s\n",
"1 -1 s\n",
"2 -1 r\n",
"3 -1 l\n",
"4 -1 r\n",
"5 -1 s\n",
"6 -1 s\n",
"\n",
"d16\n",
"\n",
"d11\n",
"\n",
"d15\n",
"\n",
"d17\n",
"\n",
"n15\n",
"5 -1 s\n",
"6 -1 s\n",
"7 -1 s\n",
"8 -1 l\n",
"2 -1 r\n",
"3 -1 s\n",
"4 -1 s\n",
"0 -1 r\n",
"1 -1 l\n",
"\n",
"d18\n",
"\n",
"n07\n",
"0 -1 s\n",
"1 -1 s\n",
"2 -1 s\n",
"3 -1 l\n",
"7 -1 s\n",
"8 -1 s\n",
"9 -1 s\n",
"4 -1 r\n",
"5 -1 l\n",
"6 -1 l\n",
"\n",
"d08\n",
"\n",
"d14\n",
"\n",
"d13\n",
"\n",
"d04\n",
"\n",
"d09\n",
"\n",
"n05\n",
"0 -1 s\n",
"1 -1 s\n",
"2 -1 s\n",
"3 -1 s\n",
"4 -1 s\n",
"5 -1 s\n",
"6 -1 s\n",
"7 -1 s\n",
"8 -1 s\n",
"\n",
"u20\n",
"0 0 s\n",
"1 1 s\n",
"2 2 t\n",
"3 3 s\n",
"4 4 s\n",
"5 5 s\n",
"\n",
"d10\n",
"\n",
"d03\n",
"\n",
"d06\n",
"\n",
"d01\n",
"\n",
"d05\n",
"\n",
"u30\n",
"5 5 s\n",
"6 6 s\n",
"7 7 s\n",
"0 0 s\n",
"1 1 s\n",
"2 2 s\n",
"3 3 s\n",
"4 4 t\n",
"\n"
]
}
],
"source": [
"nodes = self.net.getNodes()\n",
"for node in nodes:\n",
" node_id = node.getID()\n",
" print(node_id)\n",
" conns = [con for con in node.getConnections()]\n",
" for con in conns:\n",
" print(con.getJunctionIndex(), con.getTLLinkIndex(), con.getDirection())\n",
" print()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"'''Given `inter_no`, `inc_edge_id` and `out_edge_id`, we have `inc_vec = inter2inc2vec[inter_no][inc_edge_id]` and `out_vec = inter2out2vec[inter_no][out_edge_id]`.\n",
"Rotate `inc_vec` by 90, 180 and 270 degrees clockwise, to define \n",
"`out_vec_left`, `out_vec_straight` and `out_vec_right`.\n",
"Define `out_vecs={'right':out_vec_left, 'straight':out_vec_straight, 'right':out_vec_right}`.\n",
"Select the key that maximize the similarity of the corresponding value of the key and `inc_vec`.'''"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "sts",
"language": "python",
"name": "sts"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 2
}