{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "c200034d-b5f7-4af8-89fe-589d508d65d5",
   "metadata": {
    "tags": []
   },
   "source": [
    "# PRINTER_SELL"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "60301507-1d96-4e3c-97cd-390dc512bcb5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "\n",
       "\n",
       "\n",
       "\n",
       "\n"
      ],
      "text/html": [
       " "
      ],
      "text/plain": [
       ""
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pytct\n",
    "pytct.init(\"Chp4\", overwrite=True)\n",
    "\n",
    "statenum=4 #number of states\n",
    "#states are sequentially labeled 0,1,...,statenum\n",
    "#initial state is labeled 0\n",
    "\n",
    "trans=[(0,'start',1,'c'),\n",
    "       (1,'auto_finish',0,'u'),\n",
    "       (1,'manual_stop',0,'c'),\n",
    "       (1,'breakdown',2,'u'),\n",
    "       (2,'fix',0,'c'),\n",
    "       (2,'sell',3,'c')] #set of transitions\n",
    "#each triple is (exit state, event label, entering state)\n",
    "#each event is either 'c' (controllable) or 'u' (uncontrollable)\n",
    "\n",
    "marker = [0,1,3] #set of marker states\n",
    "\n",
    "pytct.create('PRINTER_SELL', statenum, trans, marker)\n",
    "#create automaton PRINTER_SELL\n",
    "\n",
    "pytct.display_automaton('PRINTER_SELL',color=True)\n",
    "#plot PRINTER_SELL.DES with color coding"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "a0060523-4eb5-40df-b6d0-b09f75940e37",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "\n",
       "\n",
       "\n",
       "\n",
       "\n"
      ],
      "text/html": [
       "
"
      ],
      "text/plain": [
       ""
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pytct\n",
    "pytct.init(\"Chp4\", overwrite=True)\n",
    "\n",
    "statenum=4 #number of states\n",
    "#states are sequentially labeled 0,1,...,statenum\n",
    "#initial state is labeled 0\n",
    "\n",
    "trans=[(0,'start',1,'c'),\n",
    "       (1,'auto_finish',0,'u'),\n",
    "       (1,'manual_stop',0,'c'),\n",
    "       (1,'breakdown',2,'u'),\n",
    "       (2,'fix',0,'c'),\n",
    "       (2,'sell',3,'c')] #set of transitions\n",
    "#each triple is (exit state, event label, entering state)\n",
    "#each event is either 'c' (controllable) or 'u' (uncontrollable)\n",
    "\n",
    "marker = [0,1,3] #set of marker states\n",
    "\n",
    "pytct.create('PRINTER_SELL', statenum, trans, marker)\n",
    "#create automaton PRINTER_SELL\n",
    "\n",
    "pytct.display_automaton('PRINTER_SELL',color=True)\n",
    "#plot PRINTER_SELL.DES with color coding"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "a0060523-4eb5-40df-b6d0-b09f75940e37",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "\n",
       "\n",
       "\n",
       "\n",
       "\n"
      ],
      "text/html": [
       " "
      ],
      "text/plain": [
       ""
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# creat automaton E\n",
    "\n",
    "statenum=2 #number of states\n",
    "#states are sequentially labeled 0,1,...,statenum\n",
    "#initial state is labeled 0\n",
    "\n",
    "trans=[(0,'start',0,'c'),\n",
    "       (0,'auto_finish',0,'u'),\n",
    "       (0,'manual_stop',0,'c'),\n",
    "       (0,'breakdown',1,'u'),\n",
    "       (1,'start',1,'c'),\n",
    "       (1,'auto_finish',1,'u'),\n",
    "       (1,'manual_stop',1,'c'),\n",
    "       (1,'fix',1,'c'),\n",
    "       (1,'sell',1,'c')] #set of transitions\n",
    "#each triple is (exit state, event label, entering state)\n",
    "#each event is either 'c' (controllable) or 'u' (uncontrollable)\n",
    "\n",
    "marker = [0,1] #set of marker states\n",
    "\n",
    "pytct.create('E', statenum, trans, marker)\n",
    "#create automaton E\n",
    "\n",
    "pytct.display_automaton('E',color=True)\n",
    "#plot E.DES with color coding"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "32a50cc2-4042-4f2b-90e1-66626d3d6f10",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pytct.is_controllable('PRINTER_SELL','E')\n",
    "#check if E is controllable wrt. PRINTER_SELL"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "fb1d4451-3dbf-4183-8c7a-c73a8c7550a1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pytct.uncontrollable_states('PRINTER_SELL','E')\n",
    "#compute the set of uncontrollable states"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e2b54ebf-3551-4ae4-a7dc-ef6b1a8255aa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "\n",
       "\n",
       "\n",
       "\n",
       "\n"
      ],
      "text/html": [
       "
"
      ],
      "text/plain": [
       ""
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# creat automaton E\n",
    "\n",
    "statenum=2 #number of states\n",
    "#states are sequentially labeled 0,1,...,statenum\n",
    "#initial state is labeled 0\n",
    "\n",
    "trans=[(0,'start',0,'c'),\n",
    "       (0,'auto_finish',0,'u'),\n",
    "       (0,'manual_stop',0,'c'),\n",
    "       (0,'breakdown',1,'u'),\n",
    "       (1,'start',1,'c'),\n",
    "       (1,'auto_finish',1,'u'),\n",
    "       (1,'manual_stop',1,'c'),\n",
    "       (1,'fix',1,'c'),\n",
    "       (1,'sell',1,'c')] #set of transitions\n",
    "#each triple is (exit state, event label, entering state)\n",
    "#each event is either 'c' (controllable) or 'u' (uncontrollable)\n",
    "\n",
    "marker = [0,1] #set of marker states\n",
    "\n",
    "pytct.create('E', statenum, trans, marker)\n",
    "#create automaton E\n",
    "\n",
    "pytct.display_automaton('E',color=True)\n",
    "#plot E.DES with color coding"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "32a50cc2-4042-4f2b-90e1-66626d3d6f10",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pytct.is_controllable('PRINTER_SELL','E')\n",
    "#check if E is controllable wrt. PRINTER_SELL"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "fb1d4451-3dbf-4183-8c7a-c73a8c7550a1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pytct.uncontrollable_states('PRINTER_SELL','E')\n",
    "#compute the set of uncontrollable states"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e2b54ebf-3551-4ae4-a7dc-ef6b1a8255aa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "\n",
       "\n",
       "\n",
       "\n",
       "\n"
      ],
      "text/html": [
       " "
      ],
      "text/plain": [
       ""
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pytct.sync('S','PRINTER_SELL','E')\n",
    "#synchronous product\n",
    "\n",
    "pytct.display_automaton('S',color=True)\n",
    "#plot DES with color coding"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "828e479c-4020-4e76-be55-80e103bb9a49",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pytct.is_controllable('PRINTER_SELL','S')\n",
    "#check if S is controllable wrt. PRINTER_SELL"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "bd0e2ad3-31b6-47db-90c5-cd31a8e56bd0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[5]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pytct.uncontrollable_states('PRINTER_SELL','S')\n",
    "#compute the set of uncontrollable states"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "771361ea-bcd7-4c9d-bd24-a45c4a6ba7a7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "\n",
       "\n",
       "\n",
       "\n",
       "\n"
      ],
      "text/html": [
       "
"
      ],
      "text/plain": [
       ""
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pytct.sync('S','PRINTER_SELL','E')\n",
    "#synchronous product\n",
    "\n",
    "pytct.display_automaton('S',color=True)\n",
    "#plot DES with color coding"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "828e479c-4020-4e76-be55-80e103bb9a49",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pytct.is_controllable('PRINTER_SELL','S')\n",
    "#check if S is controllable wrt. PRINTER_SELL"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "bd0e2ad3-31b6-47db-90c5-cd31a8e56bd0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[5]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pytct.uncontrollable_states('PRINTER_SELL','S')\n",
    "#compute the set of uncontrollable states"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "771361ea-bcd7-4c9d-bd24-a45c4a6ba7a7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "\n",
       "\n",
       "\n",
       "\n",
       "\n"
      ],
      "text/html": [
       " "
      ],
      "text/plain": [
       ""
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pytct.supcon('C','PRINTER_SELL','E') \n",
    "#compute optimal supervisor\n",
    "\n",
    "pytct.display_automaton('C', color=True) # display automaton\n",
    "# red transition: controllable; green transition: uncontrollable"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "e67a9fe0-455b-4516-9b88-a6b6520b6f08",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "\n",
       "\n",
       "\n",
       "\n",
       "\n"
      ],
      "text/html": [
       "
"
      ],
      "text/plain": [
       ""
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pytct.supcon('C','PRINTER_SELL','E') \n",
    "#compute optimal supervisor\n",
    "\n",
    "pytct.display_automaton('C', color=True) # display automaton\n",
    "# red transition: controllable; green transition: uncontrollable"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "e67a9fe0-455b-4516-9b88-a6b6520b6f08",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "\n",
       "\n",
       "\n",
       "\n",
       "\n"
      ],
      "text/html": [
       " "
      ],
      "text/plain": [
       ""
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pytct.supcon('CC','PRINTER_SELL','S') \n",
    "#compute optimal supervisor\n",
    "\n",
    "pytct.display_automaton('CC', color=True) # display automaton\n",
    "# red transition: controllable; green transition: uncontrollable"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "c2919984-2ec7-4fb1-8b8c-f660c27394f5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3: start\n"
     ]
    }
   ],
   "source": [
    "table = pytct.conact('PRINTER_SELL','C')\n",
    "#compute supervisor's control actions\n",
    "\n",
    "print(table)\n",
    "#print control actions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "fa614e21-0c9a-4ab3-bf52-8bcc3e60a711",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3: start\n"
     ]
    }
   ],
   "source": [
    "table = pytct.conact('PRINTER_SELL','CC')\n",
    "#compute supervisor's control actions\n",
    "\n",
    "print(table)\n",
    "#print control actions\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a8027191-c2b9-4355-aad6-0c903c459849",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "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.11.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
"
      ],
      "text/plain": [
       ""
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pytct.supcon('CC','PRINTER_SELL','S') \n",
    "#compute optimal supervisor\n",
    "\n",
    "pytct.display_automaton('CC', color=True) # display automaton\n",
    "# red transition: controllable; green transition: uncontrollable"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "c2919984-2ec7-4fb1-8b8c-f660c27394f5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3: start\n"
     ]
    }
   ],
   "source": [
    "table = pytct.conact('PRINTER_SELL','C')\n",
    "#compute supervisor's control actions\n",
    "\n",
    "print(table)\n",
    "#print control actions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "fa614e21-0c9a-4ab3-bf52-8bcc3e60a711",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3: start\n"
     ]
    }
   ],
   "source": [
    "table = pytct.conact('PRINTER_SELL','CC')\n",
    "#compute supervisor's control actions\n",
    "\n",
    "print(table)\n",
    "#print control actions\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a8027191-c2b9-4355-aad6-0c903c459849",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "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.11.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}