No Description

network.ipynb 48KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "code",
  5. "execution_count": 37,
  6. "id": "93bbfffb",
  7. "metadata": {
  8. "scrolled": true
  9. },
  10. "outputs": [
  11. {
  12. "name": "stdout",
  13. "output_type": "stream",
  14. "text": [
  15. "WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip.\n",
  16. "Please see https://github.com/pypa/pip/issues/5599 for advice on fixing the underlying issue.\n",
  17. "To avoid this problem you can invoke Python with '-m pip' instead of running pip directly.\n",
  18. "Requirement already satisfied: pip in /home/tum/snap/jupyter/common/lib/python3.7/site-packages (23.3.2)\n",
  19. "Requirement already satisfied: setuptools in /home/tum/snap/jupyter/common/lib/python3.7/site-packages (68.0.0)\n",
  20. "Requirement already satisfied: wheel in /home/tum/snap/jupyter/common/lib/python3.7/site-packages (0.42.0)\n"
  21. ]
  22. }
  23. ],
  24. "source": [
  25. "!pip install --upgrade pip setuptools wheel"
  26. ]
  27. },
  28. {
  29. "cell_type": "code",
  30. "execution_count": 38,
  31. "id": "96e5adc4",
  32. "metadata": {
  33. "scrolled": false
  34. },
  35. "outputs": [
  36. {
  37. "name": "stdout",
  38. "output_type": "stream",
  39. "text": [
  40. "WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip.\n",
  41. "Please see https://github.com/pypa/pip/issues/5599 for advice on fixing the underlying issue.\n",
  42. "To avoid this problem you can invoke Python with '-m pip' instead of running pip directly.\n",
  43. "Requirement already satisfied: p5py in /home/tum/snap/jupyter/common/lib/python3.7/site-packages (1.0.0)\n",
  44. "Requirement already satisfied: PEP517 in /home/tum/snap/jupyter/common/lib/python3.7/site-packages (0.13.1)\n",
  45. "Requirement already satisfied: pymongo in /home/tum/snap/jupyter/common/lib/python3.7/site-packages (4.6.1)\n",
  46. "Requirement already satisfied: pandas in /home/tum/snap/jupyter/common/lib/python3.7/site-packages (1.3.5)\n",
  47. "Requirement already satisfied: tomli>=1.1.0 in /home/tum/snap/jupyter/common/lib/python3.7/site-packages (from PEP517) (2.0.1)\n",
  48. "Requirement already satisfied: importlib_metadata in /home/tum/snap/jupyter/common/lib/python3.7/site-packages (from PEP517) (6.7.0)\n",
  49. "Requirement already satisfied: zipp in /home/tum/snap/jupyter/common/lib/python3.7/site-packages (from PEP517) (3.15.0)\n",
  50. "Requirement already satisfied: dnspython<3.0.0,>=1.16.0 in /home/tum/snap/jupyter/common/lib/python3.7/site-packages (from pymongo) (2.3.0)\n",
  51. "Requirement already satisfied: python-dateutil>=2.7.3 in /snap/jupyter/6/lib/python3.7/site-packages (from pandas) (2.8.0)\n",
  52. "Requirement already satisfied: pytz>=2017.3 in /home/tum/snap/jupyter/common/lib/python3.7/site-packages (from pandas) (2023.3.post1)\n",
  53. "Requirement already satisfied: numpy>=1.17.3 in /home/tum/snap/jupyter/common/lib/python3.7/site-packages (from pandas) (1.21.6)\n",
  54. "Requirement already satisfied: six>=1.5 in /snap/jupyter/6/lib/python3.7/site-packages (from python-dateutil>=2.7.3->pandas) (1.12.0)\n",
  55. "Requirement already satisfied: typing-extensions>=3.6.4 in /home/tum/snap/jupyter/common/lib/python3.7/site-packages (from importlib_metadata->PEP517) (4.7.1)\n"
  56. ]
  57. }
  58. ],
  59. "source": [
  60. "!pip install p5py PEP517 pymongo pandas"
  61. ]
  62. },
  63. {
  64. "cell_type": "code",
  65. "execution_count": 39,
  66. "id": "ff046a48",
  67. "metadata": {},
  68. "outputs": [],
  69. "source": [
  70. "from pymongo import MongoClient\n",
  71. "import pandas as pd"
  72. ]
  73. },
  74. {
  75. "cell_type": "code",
  76. "execution_count": 40,
  77. "id": "220562c3",
  78. "metadata": {
  79. "scrolled": true
  80. },
  81. "outputs": [
  82. {
  83. "data": {
  84. "text/plain": [
  85. "MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True)"
  86. ]
  87. },
  88. "execution_count": 40,
  89. "metadata": {},
  90. "output_type": "execute_result"
  91. }
  92. ],
  93. "source": [
  94. "client = MongoClient(\"mongodb://localhost\")\n",
  95. "client"
  96. ]
  97. },
  98. {
  99. "cell_type": "code",
  100. "execution_count": 41,
  101. "id": "46daba6c",
  102. "metadata": {},
  103. "outputs": [
  104. {
  105. "data": {
  106. "text/plain": [
  107. "['admin', 'config', 'local']"
  108. ]
  109. },
  110. "execution_count": 41,
  111. "metadata": {},
  112. "output_type": "execute_result"
  113. }
  114. ],
  115. "source": [
  116. "client.list_database_names()"
  117. ]
  118. },
  119. {
  120. "cell_type": "code",
  121. "execution_count": 42,
  122. "id": "ed775449",
  123. "metadata": {},
  124. "outputs": [],
  125. "source": [
  126. "db = client.network_report"
  127. ]
  128. },
  129. {
  130. "cell_type": "code",
  131. "execution_count": 43,
  132. "id": "1996a9ee",
  133. "metadata": {
  134. "scrolled": true
  135. },
  136. "outputs": [
  137. {
  138. "data": {
  139. "text/plain": [
  140. "[]"
  141. ]
  142. },
  143. "execution_count": 43,
  144. "metadata": {},
  145. "output_type": "execute_result"
  146. }
  147. ],
  148. "source": [
  149. "db.list_collection_names()"
  150. ]
  151. },
  152. {
  153. "cell_type": "code",
  154. "execution_count": 44,
  155. "id": "7cbc7ee0",
  156. "metadata": {},
  157. "outputs": [
  158. {
  159. "data": {
  160. "text/plain": [
  161. "0"
  162. ]
  163. },
  164. "execution_count": 44,
  165. "metadata": {},
  166. "output_type": "execute_result"
  167. }
  168. ],
  169. "source": [
  170. "c = db['exfo_api'].find()\n",
  171. "len(list(c))"
  172. ]
  173. },
  174. {
  175. "cell_type": "code",
  176. "execution_count": null,
  177. "id": "dc0d07cb",
  178. "metadata": {
  179. "scrolled": false
  180. },
  181. "outputs": [],
  182. "source": [
  183. "all_result = list(db['exfo_api'].find({'ids.sla_id': 1350}))\n",
  184. "all_df = pd.DataFrame(all_result)\n",
  185. "all_df['ids']"
  186. ]
  187. },
  188. {
  189. "cell_type": "code",
  190. "execution_count": 20,
  191. "id": "a783f2b2",
  192. "metadata": {},
  193. "outputs": [
  194. {
  195. "ename": "AutoReconnect",
  196. "evalue": "localhost:27017: connection closed (configured timeouts: connectTimeoutMS: 20000.0ms)",
  197. "output_type": "error",
  198. "traceback": [
  199. "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
  200. "\u001b[0;31mOSError\u001b[0m Traceback (most recent call last)",
  201. "\u001b[0;32m/home/tum/snap/jupyter/common/lib/python3.7/site-packages/pymongo/pool.py\u001b[0m in \u001b[0;36mreceive_message\u001b[0;34m(self, request_id)\u001b[0m\n\u001b[1;32m 1019\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1020\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mreceive_message\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrequest_id\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmax_message_size\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1021\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mBaseException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0merror\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  202. "\u001b[0;32m/home/tum/snap/jupyter/common/lib/python3.7/site-packages/pymongo/network.py\u001b[0m in \u001b[0;36mreceive_message\u001b[0;34m(conn, request_id, max_message_size)\u001b[0m\n\u001b[1;32m 256\u001b[0m \u001b[0;31m# Ignore the response's request id.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 257\u001b[0;31m \u001b[0mlength\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mresponse_to\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mop_code\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_UNPACK_HEADER\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m_receive_data_on_socket\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mconn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m16\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdeadline\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 258\u001b[0m \u001b[0;31m# No request_id for exhaust cursor \"getMore\".\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  203. "\u001b[0;32m/home/tum/snap/jupyter/common/lib/python3.7/site-packages/pymongo/network.py\u001b[0m in \u001b[0;36m_receive_data_on_socket\u001b[0;34m(conn, length, deadline)\u001b[0m\n\u001b[1;32m 347\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mchunk_length\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 348\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mOSError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"connection closed\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 349\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
  204. "\u001b[0;31mOSError\u001b[0m: connection closed",
  205. "\nThe above exception was the direct cause of the following exception:\n",
  206. "\u001b[0;31mAutoReconnect\u001b[0m Traceback (most recent call last)",
  207. "\u001b[0;32m<ipython-input-20-a4ba2bdec62f>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mr0\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdb\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'exfo_api'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfind\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0;34m'test_status_result'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m{\u001b[0m \u001b[0;34m'$exists'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'$ne'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m}\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msort\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"created\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlimit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mr0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  208. "\u001b[0;32m/home/tum/snap/jupyter/common/lib/python3.7/site-packages/pymongo/cursor.py\u001b[0m in \u001b[0;36mnext\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1262\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__empty\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1263\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mStopIteration\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1264\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__data\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_refresh\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1265\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__data\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpopleft\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1266\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  209. "\u001b[0;32m/home/tum/snap/jupyter/common/lib/python3.7/site-packages/pymongo/cursor.py\u001b[0m in \u001b[0;36m_refresh\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1179\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__exhaust\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1180\u001b[0m )\n\u001b[0;32m-> 1181\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__send_message\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mq\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1182\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__id\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# Get More\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1183\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__limit\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  210. "\u001b[0;32m/home/tum/snap/jupyter/common/lib/python3.7/site-packages/pymongo/cursor.py\u001b[0m in \u001b[0;36m__send_message\u001b[0;34m(self, operation)\u001b[0m\n\u001b[1;32m 1059\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1060\u001b[0m response = client._run_operation(\n\u001b[0;32m-> 1061\u001b[0;31m \u001b[0moperation\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_unpack_response\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maddress\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__address\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1062\u001b[0m )\n\u001b[1;32m 1063\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mOperationFailure\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mexc\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  211. "\u001b[0;32m/home/tum/snap/jupyter/common/lib/python3.7/site-packages/pymongo/_csot.py\u001b[0m in \u001b[0;36mcsot_wrapper\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 105\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0m_TimeoutContext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 106\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 107\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 108\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 109\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mcast\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mF\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcsot_wrapper\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  212. "\u001b[0;32m/home/tum/snap/jupyter/common/lib/python3.7/site-packages/pymongo/mongo_client.py\u001b[0m in \u001b[0;36m_run_operation\u001b[0;34m(self, operation, unpack_res, address)\u001b[0m\n\u001b[1;32m 1397\u001b[0m \u001b[0moperation\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msession\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1398\u001b[0m \u001b[0maddress\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maddress\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1399\u001b[0;31m \u001b[0mretryable\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moperation\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmessage\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_Query\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1400\u001b[0m )\n\u001b[1;32m 1401\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
  213. "\u001b[0;32m/home/tum/snap/jupyter/common/lib/python3.7/site-packages/pymongo/mongo_client.py\u001b[0m in \u001b[0;36m_retryable_read\u001b[0;34m(self, func, read_pref, session, address, retryable)\u001b[0m\n\u001b[1;32m 1497\u001b[0m \u001b[0maddress\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maddress\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1498\u001b[0m \u001b[0mread_pref\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mread_pref\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1499\u001b[0;31m \u001b[0mretryable\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mretryable\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1500\u001b[0m )\n\u001b[1;32m 1501\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
  214. "\u001b[0;32m/home/tum/snap/jupyter/common/lib/python3.7/site-packages/pymongo/_csot.py\u001b[0m in \u001b[0;36mcsot_wrapper\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 105\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0m_TimeoutContext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 106\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 107\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 108\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 109\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mcast\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mF\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcsot_wrapper\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  215. "\u001b[0;32m/home/tum/snap/jupyter/common/lib/python3.7/site-packages/pymongo/mongo_client.py\u001b[0m in \u001b[0;36m_retry_internal\u001b[0;34m(self, func, session, bulk, is_read, address, read_pref, retryable)\u001b[0m\n\u001b[1;32m 1459\u001b[0m \u001b[0mread_pref\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mread_pref\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1460\u001b[0m \u001b[0maddress\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maddress\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1461\u001b[0;31m \u001b[0mretryable\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mretryable\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1462\u001b[0m ).run()\n\u001b[1;32m 1463\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
  216. "\u001b[0;32m/home/tum/snap/jupyter/common/lib/python3.7/site-packages/pymongo/mongo_client.py\u001b[0m in \u001b[0;36mrun\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 2318\u001b[0m \u001b[0;31m# if we raise ServerSelectionTimeoutError on the retry\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2319\u001b[0m \u001b[0;31m# attempt. Raise the original exception instead.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2320\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_check_last_error\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2321\u001b[0m \u001b[0;31m# A ServerSelectionTimeoutError error indicates that there may\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2322\u001b[0m \u001b[0;31m# be a persistent outage. Attempting to retry in this case will\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  217. "\u001b[0;32m/home/tum/snap/jupyter/common/lib/python3.7/site-packages/pymongo/mongo_client.py\u001b[0m in \u001b[0;36m_check_last_error\u001b[0;34m(self, check_csot)\u001b[0m\n\u001b[1;32m 2390\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mcheck_csot\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mremaining\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mremaining\u001b[0m \u001b[0;34m<=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2391\u001b[0m \u001b[0;32massert\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_last_error\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2392\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_last_error\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2393\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2394\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_get_server\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mServer\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  218. "\u001b[0;32m/home/tum/snap/jupyter/common/lib/python3.7/site-packages/pymongo/mongo_client.py\u001b[0m in \u001b[0;36mrun\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 2313\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_check_last_error\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcheck_csot\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2314\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2315\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_read\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_is_read\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_write\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2316\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mServerSelectionTimeoutError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2317\u001b[0m \u001b[0;31m# The application may think the write was never attempted\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  219. "\u001b[0;32m/home/tum/snap/jupyter/common/lib/python3.7/site-packages/pymongo/mongo_client.py\u001b[0m in \u001b[0;36m_read\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 2443\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_retrying\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_retryable\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2444\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_check_last_error\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2445\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_session\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_server\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mread_pref\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# type: ignore\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2446\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2447\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
  220. "\u001b[0;32m/home/tum/snap/jupyter/common/lib/python3.7/site-packages/pymongo/mongo_client.py\u001b[0m in \u001b[0;36m_cmd\u001b[0;34m(_session, server, conn, read_preference)\u001b[0m\n\u001b[1;32m 1389\u001b[0m \u001b[0moperation\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreset\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# Reset op in case of retry.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1390\u001b[0m return server.run_operation(\n\u001b[0;32m-> 1391\u001b[0;31m \u001b[0mconn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0moperation\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mread_preference\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_event_listeners\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0munpack_res\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1392\u001b[0m )\n\u001b[1;32m 1393\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
  221. "\u001b[0;32m/home/tum/snap/jupyter/common/lib/python3.7/site-packages/pymongo/helpers.py\u001b[0m in \u001b[0;36minner\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 320\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 321\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 322\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 323\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mOperationFailure\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mexc\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 324\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mno_reauth\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  222. "\u001b[0;32m/home/tum/snap/jupyter/common/lib/python3.7/site-packages/pymongo/server.py\u001b[0m in \u001b[0;36mrun_operation\u001b[0;34m(self, conn, operation, read_preference, listeners, unpack_res)\u001b[0m\n\u001b[1;32m 146\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 147\u001b[0m \u001b[0mconn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msend_message\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmax_doc_size\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 148\u001b[0;31m \u001b[0mreply\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mconn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreceive_message\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrequest_id\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 149\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 150\u001b[0m \u001b[0;31m# Unpack and check for command errors.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  223. "\u001b[0;32m/home/tum/snap/jupyter/common/lib/python3.7/site-packages/pymongo/pool.py\u001b[0m in \u001b[0;36mreceive_message\u001b[0;34m(self, request_id)\u001b[0m\n\u001b[1;32m 1020\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mreceive_message\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrequest_id\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmax_message_size\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1021\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mBaseException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0merror\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1022\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_raise_connection_failure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0merror\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1023\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1024\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_raise_if_not_writable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0munacknowledged\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mbool\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  224. "\u001b[0;32m/home/tum/snap/jupyter/common/lib/python3.7/site-packages/pymongo/pool.py\u001b[0m in \u001b[0;36m_raise_connection_failure\u001b[0;34m(self, error)\u001b[0m\n\u001b[1;32m 1169\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0merror\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mIOError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mOSError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mSSLError\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1170\u001b[0m \u001b[0mdetails\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_get_timeout_details\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mopts\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1171\u001b[0;31m \u001b[0m_raise_connection_failure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maddress\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0merror\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtimeout_details\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdetails\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1172\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1173\u001b[0m \u001b[0;32mraise\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
  225. "\u001b[0;32m/home/tum/snap/jupyter/common/lib/python3.7/site-packages/pymongo/pool.py\u001b[0m in \u001b[0;36m_raise_connection_failure\u001b[0;34m(address, error, msg_prefix, timeout_details)\u001b[0m\n\u001b[1;32m 409\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mNetworkTimeout\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0merror\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 410\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 411\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mAutoReconnect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0merror\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 412\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 413\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
  226. "\u001b[0;31mAutoReconnect\u001b[0m: localhost:27017: connection closed (configured timeouts: connectTimeoutMS: 20000.0ms)"
  227. ]
  228. }
  229. ],
  230. "source": [
  231. "r0 = list(db['exfo_api'].find({'test_status_result': { '$exists': True, '$ne': [] }}).sort(\"created\", -1).limit(10))\n",
  232. "r0"
  233. ]
  234. },
  235. {
  236. "cell_type": "code",
  237. "execution_count": 18,
  238. "id": "82c17e4b",
  239. "metadata": {},
  240. "outputs": [
  241. {
  242. "data": {
  243. "text/plain": [
  244. "[]"
  245. ]
  246. },
  247. "execution_count": 18,
  248. "metadata": {},
  249. "output_type": "execute_result"
  250. }
  251. ],
  252. "source": [
  253. "r0 = list(db['exfo_api'].find({'test_status_result': { '$exists': True, '$ne': [] }, 'ids':{'sla_name': {'$regex': '*POC*'}}}).sort(\"created\", -1).limit(10))\n",
  254. "r0"
  255. ]
  256. },
  257. {
  258. "cell_type": "code",
  259. "execution_count": null,
  260. "id": "b9bf03e8",
  261. "metadata": {},
  262. "outputs": [],
  263. "source": [
  264. "r0 = list(db['exfo_api'].find({'test_status_result': { '$exists': True, '$ne': [] }}).sort(\"created\", -1).limit(10))\n",
  265. "pd.json_normalize(r0, ['test_status_result','status', 'results_scores'], ['test_status_result','test_instance_id'], errors='ignore')"
  266. ]
  267. },
  268. {
  269. "cell_type": "code",
  270. "execution_count": 13,
  271. "id": "c55c2608",
  272. "metadata": {},
  273. "outputs": [
  274. {
  275. "name": "stdout",
  276. "output_type": "stream",
  277. "text": [
  278. "30\n",
  279. "666\n",
  280. "30\n"
  281. ]
  282. }
  283. ],
  284. "source": [
  285. "from pprint import pprint\n",
  286. "list_test_status_result = list(db['exfo_api'].find({'test_status_result': { '$exists': True, '$ne': [] }}, {'test_status_result':1, 'ids': 1}).sort(\"created\", -1).limit(30))\n",
  287. "print(len(list_test_status_result))\n",
  288. "data = []\n",
  289. "data2 = []\n",
  290. "for l in list_test_status_result:\n",
  291. " data = data + l['test_status_result']\n",
  292. " data2.append(l['ids'])\n",
  293. "print(len(data))\n",
  294. "print(len(data2))"
  295. ]
  296. },
  297. {
  298. "cell_type": "code",
  299. "execution_count": 14,
  300. "id": "954f3de0",
  301. "metadata": {
  302. "scrolled": true
  303. },
  304. "outputs": [
  305. {
  306. "name": "stdout",
  307. "output_type": "stream",
  308. "text": [
  309. "666\n"
  310. ]
  311. }
  312. ],
  313. "source": [
  314. "df0 = pd.json_normalize(data)\n",
  315. "df0\n",
  316. "print(len(data))"
  317. ]
  318. },
  319. {
  320. "cell_type": "code",
  321. "execution_count": 15,
  322. "id": "addc4b16",
  323. "metadata": {},
  324. "outputs": [
  325. {
  326. "data": {
  327. "text/plain": [
  328. "array(['ATP-Expansion BRIX', 'BV110_NMA', 'BV110_KKN', 'BV110_HYI',\n",
  329. " 'BV110_SNI', 'BV1100_BRK', 'BV110_PTY', 'BV110_CMI', 'BV110_NWS',\n",
  330. " 'BV110_PLK', 'BV110_RBI'], dtype=object)"
  331. ]
  332. },
  333. "execution_count": 15,
  334. "metadata": {},
  335. "output_type": "execute_result"
  336. }
  337. ],
  338. "source": [
  339. "df0['sla_name'].unique()"
  340. ]
  341. },
  342. {
  343. "cell_type": "code",
  344. "execution_count": null,
  345. "id": "5fdc4a48",
  346. "metadata": {
  347. "scrolled": true
  348. },
  349. "outputs": [],
  350. "source": [
  351. "df0['sla_name'].unique()"
  352. ]
  353. },
  354. {
  355. "cell_type": "code",
  356. "execution_count": null,
  357. "id": "b606622f",
  358. "metadata": {
  359. "scrolled": true
  360. },
  361. "outputs": [],
  362. "source": [
  363. "len(data2)"
  364. ]
  365. },
  366. {
  367. "cell_type": "code",
  368. "execution_count": null,
  369. "id": "e123b1d7",
  370. "metadata": {},
  371. "outputs": [],
  372. "source": [
  373. "df_ids = pd.json_normalize(data2)\n",
  374. "df_ids"
  375. ]
  376. },
  377. {
  378. "cell_type": "code",
  379. "execution_count": null,
  380. "id": "fae5c564",
  381. "metadata": {
  382. "scrolled": true
  383. },
  384. "outputs": [],
  385. "source": [
  386. "df = pd.json_normalize(data, record_path=['status', 'results_scores'], \n",
  387. " meta=['test_instance_id', ['status','time_stamp_display']], errors='ignore')\n",
  388. "df"
  389. ]
  390. },
  391. {
  392. "cell_type": "code",
  393. "execution_count": null,
  394. "id": "54799082",
  395. "metadata": {
  396. "scrolled": true
  397. },
  398. "outputs": [],
  399. "source": [
  400. "df3 = pd.merge(df0, df, on='test_instance_id')\n",
  401. "df3"
  402. ]
  403. },
  404. {
  405. "cell_type": "code",
  406. "execution_count": null,
  407. "id": "06fbb196",
  408. "metadata": {
  409. "scrolled": true
  410. },
  411. "outputs": [],
  412. "source": [
  413. "df3.drop(['status'], axis=1)"
  414. ]
  415. },
  416. {
  417. "cell_type": "code",
  418. "execution_count": null,
  419. "id": "566e5a39",
  420. "metadata": {
  421. "scrolled": true
  422. },
  423. "outputs": [],
  424. "source": [
  425. "df3.query('test_instance_class_id == 1554')"
  426. ]
  427. },
  428. {
  429. "cell_type": "code",
  430. "execution_count": null,
  431. "id": "fd175745",
  432. "metadata": {
  433. "scrolled": true
  434. },
  435. "outputs": [],
  436. "source": [
  437. "ping_test = df3.query(\"`service.service_name` == 'Ping test'\").drop([\"status\"],axis=1)\n",
  438. "ping_test"
  439. ]
  440. },
  441. {
  442. "cell_type": "code",
  443. "execution_count": null,
  444. "id": "d04bf31b",
  445. "metadata": {},
  446. "outputs": [],
  447. "source": [
  448. "ping_test.to_excel(\"ping_test.xlsx\")"
  449. ]
  450. },
  451. {
  452. "cell_type": "code",
  453. "execution_count": null,
  454. "id": "4211ee77",
  455. "metadata": {
  456. "scrolled": true
  457. },
  458. "outputs": [],
  459. "source": [
  460. "ping_test.dtypes\n",
  461. "ping_test.columns"
  462. ]
  463. },
  464. {
  465. "cell_type": "code",
  466. "execution_count": null,
  467. "id": "189ed063",
  468. "metadata": {},
  469. "outputs": [],
  470. "source": [
  471. "ping_test[\"service.service_name\"]"
  472. ]
  473. },
  474. {
  475. "cell_type": "code",
  476. "execution_count": null,
  477. "id": "ba901e35",
  478. "metadata": {},
  479. "outputs": [],
  480. "source": [
  481. "df3['status'][0]"
  482. ]
  483. },
  484. {
  485. "cell_type": "code",
  486. "execution_count": null,
  487. "id": "2276d112",
  488. "metadata": {},
  489. "outputs": [],
  490. "source": [
  491. "df3.dtypes"
  492. ]
  493. },
  494. {
  495. "cell_type": "code",
  496. "execution_count": null,
  497. "id": "aa384bc1",
  498. "metadata": {
  499. "scrolled": true
  500. },
  501. "outputs": [],
  502. "source": [
  503. "df3"
  504. ]
  505. },
  506. {
  507. "cell_type": "code",
  508. "execution_count": null,
  509. "id": "986c64ca",
  510. "metadata": {},
  511. "outputs": [],
  512. "source": [
  513. "df3[\"value_score\"] = df[[\"raw_value\",\"score\"]].astype(str).agg(\"/\".join, axis=1)\n",
  514. "df3"
  515. ]
  516. },
  517. {
  518. "cell_type": "code",
  519. "execution_count": null,
  520. "id": "7c605acc",
  521. "metadata": {
  522. "scrolled": true
  523. },
  524. "outputs": [],
  525. "source": [
  526. "df3"
  527. ]
  528. },
  529. {
  530. "cell_type": "code",
  531. "execution_count": null,
  532. "id": "690bc8ad",
  533. "metadata": {
  534. "scrolled": true
  535. },
  536. "outputs": [],
  537. "source": [
  538. "print(df3.query(\"sla_name == 'BV110_RBI'\"))\n",
  539. "print(df3[\"sla_name\"].unique())"
  540. ]
  541. },
  542. {
  543. "cell_type": "code",
  544. "execution_count": null,
  545. "id": "018d4db4",
  546. "metadata": {
  547. "scrolled": true
  548. },
  549. "outputs": [],
  550. "source": [
  551. "df4 = df3.query(\"sla_name in ('POC-Expansion-SLA_BRAS_88_Private (VLAN10)','POC-Expansion-SLA_BNG_144_Public (VLAN20)','POC-Expansion-SLA_BNG_144_Private (VLAN10)')\")\n",
  552. "df4"
  553. ]
  554. },
  555. {
  556. "cell_type": "code",
  557. "execution_count": null,
  558. "id": "bf21ade3",
  559. "metadata": {
  560. "scrolled": true
  561. },
  562. "outputs": [],
  563. "source": [
  564. "df3['sla_name'].unique()"
  565. ]
  566. },
  567. {
  568. "cell_type": "code",
  569. "execution_count": null,
  570. "id": "bc3d51f6",
  571. "metadata": {
  572. "scrolled": true
  573. },
  574. "outputs": [],
  575. "source": [
  576. "table = pd.pivot_table(df3, index=['sla_name', 'status.time_stamp_display'], \n",
  577. " columns=['service.service_name', \"target.target_value\", \"name\"], values=[\"raw_value\",])\n",
  578. "table"
  579. ]
  580. },
  581. {
  582. "cell_type": "code",
  583. "execution_count": null,
  584. "id": "10da50d4",
  585. "metadata": {},
  586. "outputs": [],
  587. "source": [
  588. "import time\n",
  589. " \n",
  590. "# ts stores the time in seconds\n",
  591. "ts = int(time.time())\n",
  592. "table.to_excel(f\"table{ts}.xlsx\")"
  593. ]
  594. },
  595. {
  596. "cell_type": "code",
  597. "execution_count": null,
  598. "id": "cc80c5e1",
  599. "metadata": {},
  600. "outputs": [],
  601. "source": [
  602. "df3['status'][0]"
  603. ]
  604. },
  605. {
  606. "cell_type": "code",
  607. "execution_count": null,
  608. "id": "d2ef3fd1",
  609. "metadata": {
  610. "scrolled": false
  611. },
  612. "outputs": [],
  613. "source": [
  614. "df = pd.json_normalize(list_test_status_result, record_path=[\"test_status_result\",\"status\"], meta=[\"\"])\n",
  615. "df "
  616. ]
  617. },
  618. {
  619. "cell_type": "code",
  620. "execution_count": null,
  621. "id": "9721b6d1",
  622. "metadata": {},
  623. "outputs": [],
  624. "source": [
  625. "df.dtypes"
  626. ]
  627. },
  628. {
  629. "cell_type": "code",
  630. "execution_count": null,
  631. "id": "a5fbfb1e",
  632. "metadata": {},
  633. "outputs": [],
  634. "source": [
  635. "def dict_list_to_df(df, col):\n",
  636. " \"\"\"Return a Pandas dataframe based on a column that contains a list of JSON objects or dictionaries.\n",
  637. " Args:\n",
  638. " df (Pandas dataframe): The dataframe to be flattened.\n",
  639. " col (str): The name of the column that contains the JSON objects or dictionaries.\n",
  640. " Returns:\n",
  641. " Pandas dataframe: A new dataframe with the JSON objects or dictionaries expanded into columns.\n",
  642. " \"\"\"\n",
  643. "\n",
  644. " rows = []\n",
  645. " for index, row in df[col].iteritems():\n",
  646. " for item in row:\n",
  647. " rows.append(item)\n",
  648. " df = pd.DataFrame(rows)\n",
  649. " return df"
  650. ]
  651. },
  652. {
  653. "cell_type": "code",
  654. "execution_count": null,
  655. "id": "b60cca21",
  656. "metadata": {},
  657. "outputs": [],
  658. "source": [
  659. "df1 = dict_list_to_df(df, \"status\")\n",
  660. "df1"
  661. ]
  662. },
  663. {
  664. "cell_type": "code",
  665. "execution_count": null,
  666. "id": "acaed425",
  667. "metadata": {},
  668. "outputs": [],
  669. "source": [
  670. "df2 = dict_list_to_df(df1, \"results_scores\")\n",
  671. "df2"
  672. ]
  673. },
  674. {
  675. "cell_type": "code",
  676. "execution_count": null,
  677. "id": "c7c363e7",
  678. "metadata": {
  679. "scrolled": true
  680. },
  681. "outputs": [],
  682. "source": [
  683. "!pip install flatten-json\n"
  684. ]
  685. },
  686. {
  687. "cell_type": "code",
  688. "execution_count": null,
  689. "id": "a87ab1b7",
  690. "metadata": {},
  691. "outputs": [],
  692. "source": [
  693. "from flatten_json import flatten\n",
  694. "df['status_r"
  695. ]
  696. },
  697. {
  698. "cell_type": "code",
  699. "execution_count": null,
  700. "id": "49d2d652",
  701. "metadata": {},
  702. "outputs": [],
  703. "source": [
  704. "df_flat = pd.io.json.json_normalize(json_struct)\n",
  705. "df"
  706. ]
  707. },
  708. {
  709. "cell_type": "code",
  710. "execution_count": null,
  711. "id": "41c258c7",
  712. "metadata": {},
  713. "outputs": [],
  714. "source": [
  715. "import ast\n",
  716. "from pandas.io.json import json_normalize\n",
  717. "\n",
  718. "def only_dict(d):\n",
  719. " '''\n",
  720. " Convert json string representation of dictionary to a python dict\n",
  721. " '''\n",
  722. " return ast.literal_eval(d)\n",
  723. "\n",
  724. "def list_of_dicts(ld):\n",
  725. " '''\n",
  726. " Create a mapping of the tuples formed after \n",
  727. " converting json strings of list to a python list \n",
  728. " '''\n",
  729. " return dict([(list(d.values())[1], list(d.values())[0]) for d in ast.literal_eval(ld)])"
  730. ]
  731. },
  732. {
  733. "cell_type": "code",
  734. "execution_count": null,
  735. "id": "2112d785",
  736. "metadata": {},
  737. "outputs": [],
  738. "source": [
  739. "A = json_normalize(df['status'].apply(only_dict).tolist()).add_prefix('status.')\n",
  740. "A"
  741. ]
  742. },
  743. {
  744. "cell_type": "code",
  745. "execution_count": null,
  746. "id": "9a21694d",
  747. "metadata": {},
  748. "outputs": [],
  749. "source": []
  750. },
  751. {
  752. "cell_type": "code",
  753. "execution_count": null,
  754. "id": "55d3ccb7",
  755. "metadata": {},
  756. "outputs": [],
  757. "source": [
  758. "pd.json_normalize(list(df['status']))"
  759. ]
  760. },
  761. {
  762. "cell_type": "code",
  763. "execution_count": null,
  764. "id": "072d4638",
  765. "metadata": {},
  766. "outputs": [],
  767. "source": [
  768. "new_temp = df.explode('status')\n",
  769. "new_temp"
  770. ]
  771. },
  772. {
  773. "cell_type": "code",
  774. "execution_count": null,
  775. "id": "c984e701",
  776. "metadata": {
  777. "scrolled": false
  778. },
  779. "outputs": [],
  780. "source": [
  781. "df2 = df.merge(new_temp, left_index=True, right_index=True, suffixes=(\"_test\",\"_status\"))\n",
  782. "df2"
  783. ]
  784. },
  785. {
  786. "cell_type": "code",
  787. "execution_count": null,
  788. "id": "c9081831",
  789. "metadata": {},
  790. "outputs": [],
  791. "source": [
  792. "df2.to_excel(\"test.xlsx\")"
  793. ]
  794. },
  795. {
  796. "cell_type": "code",
  797. "execution_count": null,
  798. "id": "5aa598fa",
  799. "metadata": {},
  800. "outputs": [],
  801. "source": [
  802. "temp = df.explode('status.results_scores')\n",
  803. "temp"
  804. ]
  805. },
  806. {
  807. "cell_type": "code",
  808. "execution_count": null,
  809. "id": "c16df369",
  810. "metadata": {
  811. "scrolled": true
  812. },
  813. "outputs": [],
  814. "source": [
  815. "temp"
  816. ]
  817. },
  818. {
  819. "cell_type": "code",
  820. "execution_count": null,
  821. "id": "dde802e6",
  822. "metadata": {
  823. "scrolled": false
  824. },
  825. "outputs": [],
  826. "source": [
  827. "l1 = []\n",
  828. "for l in list_test_status_result:\n",
  829. " l1 = l1 + l['test_status_result']\n",
  830. "df = pd.DataFrame(l1)\n",
  831. "df = pd.concat([df, df[\"service\"].apply(pd.Series)], axis=1)\n",
  832. "df"
  833. ]
  834. },
  835. {
  836. "cell_type": "code",
  837. "execution_count": null,
  838. "id": "4b36a671",
  839. "metadata": {},
  840. "outputs": [],
  841. "source": [
  842. "df['results_scores']"
  843. ]
  844. },
  845. {
  846. "cell_type": "code",
  847. "execution_count": null,
  848. "id": "9916d649",
  849. "metadata": {
  850. "scrolled": false
  851. },
  852. "outputs": [],
  853. "source": [
  854. "import numpy as np\n",
  855. "\n",
  856. "df1 = pd.DataFrame(df['status'][0])\n",
  857. "temp_df = pd.DataFrame.from_dict(np.concatenate(df1['results_scores']).tolist())\n",
  858. "temp_df[:10]"
  859. ]
  860. },
  861. {
  862. "cell_type": "code",
  863. "execution_count": null,
  864. "id": "024c43da",
  865. "metadata": {},
  866. "outputs": [],
  867. "source": [
  868. "final_df = df1.merge(temp_df, how='inner', left_index=True, right_index=True)\n",
  869. "final_df\n"
  870. ]
  871. },
  872. {
  873. "cell_type": "code",
  874. "execution_count": null,
  875. "id": "58ad756c",
  876. "metadata": {
  877. "scrolled": true
  878. },
  879. "outputs": [],
  880. "source": [
  881. "df = pd.DataFrame(list_test_status_result)\n",
  882. "df"
  883. ]
  884. },
  885. {
  886. "cell_type": "code",
  887. "execution_count": null,
  888. "id": "5ac35907",
  889. "metadata": {},
  890. "outputs": [],
  891. "source": [
  892. "df = df.explode('test_status_result')\n",
  893. "df"
  894. ]
  895. },
  896. {
  897. "cell_type": "code",
  898. "execution_count": null,
  899. "id": "1f9a585d",
  900. "metadata": {
  901. "scrolled": false
  902. },
  903. "outputs": [],
  904. "source": [
  905. "l0 = []\n",
  906. "for l in list_test_status_result:\n",
  907. " for t in l['test_status_result']:\n",
  908. " for st in t['status']:\n",
  909. " for rs in st['results_scores']:\n",
  910. " temp = t['service'] | (t['target'] or {}) | rs\n",
  911. " temp['sla_name'] = st['sla_name'] \n",
  912. " temp['time_stamp'] = st['time_stamp']\n",
  913. " temp['time_stamp_display'] = st['time_stamp_display']\n",
  914. " l0.append(temp)\n",
  915. "l0[:10]"
  916. ]
  917. },
  918. {
  919. "cell_type": "code",
  920. "execution_count": null,
  921. "id": "7c0d9839",
  922. "metadata": {},
  923. "outputs": [],
  924. "source": [
  925. "list_test_status_result = list(db['exfo_api'].find({}, {'test_status_result':1}))\n",
  926. "list_test_status_result"
  927. ]
  928. },
  929. {
  930. "cell_type": "code",
  931. "execution_count": null,
  932. "id": "956c1225",
  933. "metadata": {},
  934. "outputs": [],
  935. "source": [
  936. "pd.set_option('display.max_rows', 500)\n",
  937. "pd.set_option('display.max_columns', 500)\n",
  938. "pd.set_option('display.width', 1000)\n",
  939. "\n",
  940. "temp = []\n",
  941. "for l in list_test_status_result:\n",
  942. " for d in l['test_status_result']:\n",
  943. " for s in d['status']:\n",
  944. " for rs in s['results_scores']:\n",
  945. " t2 = {rs['name']: [rs['raw_value'], rs['score']]}\n",
  946. " temp.append({**d, **s, **t2})\n",
  947. "temp\n",
  948. "df = pd.json_normalize(temp)\n",
  949. "#df.set_index(['time_stamp_display'], inplace=True)\n",
  950. "df['sla_service'] = df['sla_name'] + \"/\" + df['service_name']\n",
  951. "df['sla_service'].unique()"
  952. ]
  953. },
  954. {
  955. "cell_type": "code",
  956. "execution_count": null,
  957. "id": "d6efa7a5",
  958. "metadata": {},
  959. "outputs": [],
  960. "source": [
  961. "f = df[df['sla_service'] == 'BV110_CMI/HTTPS Web Performances']\n",
  962. "f.set_index(['time_stamp_display'], inplace=True)\n",
  963. "f"
  964. ]
  965. },
  966. {
  967. "cell_type": "code",
  968. "execution_count": null,
  969. "id": "80181787",
  970. "metadata": {},
  971. "outputs": [],
  972. "source": []
  973. },
  974. {
  975. "cell_type": "code",
  976. "execution_count": null,
  977. "id": "0e1394e6",
  978. "metadata": {},
  979. "outputs": [],
  980. "source": []
  981. }
  982. ],
  983. "metadata": {
  984. "kernelspec": {
  985. "display_name": "Python 3 (ipykernel)",
  986. "language": "python",
  987. "name": "python3"
  988. },
  989. "language_info": {
  990. "codemirror_mode": {
  991. "name": "ipython",
  992. "version": 3
  993. },
  994. "file_extension": ".py",
  995. "mimetype": "text/x-python",
  996. "name": "python",
  997. "nbconvert_exporter": "python",
  998. "pygments_lexer": "ipython3",
  999. "version": "3.10.4"
  1000. }
  1001. },
  1002. "nbformat": 4,
  1003. "nbformat_minor": 5
  1004. }