{
 "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",
    "import copy\n",
    "sys.path.append('../../Scripts')\n",
    "from preprocess_daily import DailyPreprocessor\n",
    "from generate_signals import SignalGenerator"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "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-1. 매칭 테이블들을 생성했습니다.\n",
      "2-2. 초기화 신호가 지정되었습니다. (우회전 : g)\n",
      "2-3. 유턴 인덱스 / 비보호좌회전 인덱스를 지정했습니다.\n",
      "i6\n",
      "[8]\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>inter_no</th>\n",
       "      <th>phase_no</th>\n",
       "      <th>ring_type</th>\n",
       "      <th>move_no</th>\n",
       "      <th>inc_dire</th>\n",
       "      <th>out_dire</th>\n",
       "      <th>inc_angle</th>\n",
       "      <th>out_angle</th>\n",
       "      <th>inc_edge_id</th>\n",
       "      <th>out_edge_id</th>\n",
       "      <th>node_id</th>\n",
       "      <th>turn_type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>92</th>\n",
       "      <td>210</td>\n",
       "      <td>1</td>\n",
       "      <td>A</td>\n",
       "      <td>6</td>\n",
       "      <td>동</td>\n",
       "      <td>서</td>\n",
       "      <td>090</td>\n",
       "      <td>270</td>\n",
       "      <td>-571542115_01</td>\n",
       "      <td>571500535_01</td>\n",
       "      <td>i6</td>\n",
       "      <td>straight</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>93</th>\n",
       "      <td>210</td>\n",
       "      <td>1</td>\n",
       "      <td>B</td>\n",
       "      <td>18</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>i6</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>94</th>\n",
       "      <td>210</td>\n",
       "      <td>2</td>\n",
       "      <td>A</td>\n",
       "      <td>5</td>\n",
       "      <td>서</td>\n",
       "      <td>북</td>\n",
       "      <td>270</td>\n",
       "      <td>000</td>\n",
       "      <td>571500535_02.18</td>\n",
       "      <td>571511538_01</td>\n",
       "      <td>i6</td>\n",
       "      <td>left</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>210</td>\n",
       "      <td>2</td>\n",
       "      <td>B</td>\n",
       "      <td>2</td>\n",
       "      <td>서</td>\n",
       "      <td>동</td>\n",
       "      <td>270</td>\n",
       "      <td>090</td>\n",
       "      <td>571500535_02.18</td>\n",
       "      <td>571542115_01</td>\n",
       "      <td>i6</td>\n",
       "      <td>straight</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>96</th>\n",
       "      <td>210</td>\n",
       "      <td>3</td>\n",
       "      <td>A</td>\n",
       "      <td>7</td>\n",
       "      <td>북</td>\n",
       "      <td>동</td>\n",
       "      <td>000</td>\n",
       "      <td>090</td>\n",
       "      <td>571511538_02.121</td>\n",
       "      <td>571542115_01</td>\n",
       "      <td>i6</td>\n",
       "      <td>left</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>97</th>\n",
       "      <td>210</td>\n",
       "      <td>3</td>\n",
       "      <td>B</td>\n",
       "      <td>4</td>\n",
       "      <td>북</td>\n",
       "      <td>남</td>\n",
       "      <td>000</td>\n",
       "      <td>180</td>\n",
       "      <td>571511538_02.121</td>\n",
       "      <td>571500585_01</td>\n",
       "      <td>i6</td>\n",
       "      <td>straight</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>98</th>\n",
       "      <td>210</td>\n",
       "      <td>4</td>\n",
       "      <td>A</td>\n",
       "      <td>8</td>\n",
       "      <td>남</td>\n",
       "      <td>북</td>\n",
       "      <td>180</td>\n",
       "      <td>000</td>\n",
       "      <td>571500585_02</td>\n",
       "      <td>571511538_01</td>\n",
       "      <td>i6</td>\n",
       "      <td>straight</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>99</th>\n",
       "      <td>210</td>\n",
       "      <td>4</td>\n",
       "      <td>B</td>\n",
       "      <td>3</td>\n",
       "      <td>남</td>\n",
       "      <td>서</td>\n",
       "      <td>180</td>\n",
       "      <td>270</td>\n",
       "      <td>571500585_02</td>\n",
       "      <td>571500535_01</td>\n",
       "      <td>i6</td>\n",
       "      <td>left</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    inter_no  phase_no ring_type  move_no inc_dire out_dire inc_angle  \\\n",
       "92       210         1         A        6        동        서       090   \n",
       "93       210         1         B       18      NaN      NaN       NaN   \n",
       "94       210         2         A        5        서        북       270   \n",
       "95       210         2         B        2        서        동       270   \n",
       "96       210         3         A        7        북        동       000   \n",
       "97       210         3         B        4        북        남       000   \n",
       "98       210         4         A        8        남        북       180   \n",
       "99       210         4         B        3        남        서       180   \n",
       "\n",
       "   out_angle       inc_edge_id   out_edge_id node_id turn_type  \n",
       "92       270     -571542115_01  571500535_01      i6  straight  \n",
       "93       NaN               NaN           NaN      i6       NaN  \n",
       "94       000   571500535_02.18  571511538_01      i6      left  \n",
       "95       090   571500535_02.18  571542115_01      i6  straight  \n",
       "96       090  571511538_02.121  571542115_01      i6      left  \n",
       "97       180  571511538_02.121  571500585_01      i6  straight  \n",
       "98       000      571500585_02  571511538_01      i6  straight  \n",
       "99       270      571500585_02  571500535_01      i6      left  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "self = DailyPreprocessor()\n",
    "self.load_data() # 1. 데이터 불러오기\n",
    "self.get_matches() # 2-1\n",
    "self.initialize_state() # 2-2\n",
    "self.assign_indices() # 2-3\n",
    "\n",
    "parent_id = self.parent_ids[4]\n",
    "print(parent_id)\n",
    "UPLindices = self.p2UPLindices[parent_id]\n",
    "print(UPLindices)\n",
    "m6 = self.match6[self.match6.node_id==parent_id].copy()\n",
    "\n",
    "# matching에 신호 배정\n",
    "for i, row in self.match6.iterrows():\n",
    "    node_id = row.node_id\n",
    "    move_no = row.move_no\n",
    "    if (pd.isna(row.inc_edge_id)) or (pd.isna(row.out_edge_id)):\n",
    "        continue\n",
    "    inc_edge = self.net.getEdge(row.inc_edge_id)\n",
    "    out_edge = self.net.getEdge(row.out_edge_id)\n",
    "    state = copy.deepcopy(self.node2init[node_id])\n",
    "    for conn in inc_edge.getConnections(out_edge):\n",
    "        index = conn.getTLLinkIndex()\n",
    "        if index >= 0:\n",
    "            state[index] = 'G'\n",
    "    self.match6.at[i, 'state'] = ''.join(state)\n",
    "    if node_id in self.parent_ids:\n",
    "        UPLindices = self.p2UPLindices[node_id]\n",
    "        self.match6.at[i, 'unprotected_left'] = ''.join([state[j] for j in UPLindices])\n",
    "display(self.match6[self.match6.node_id==parent_id])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['b', 'c']"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L = 'abcd'\n",
    "UPLindices = [1,2]\n",
    "[L[i] for i in UPLindices]"
   ]
  }
 ],
 "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
}
