mirror of
https://github.com/20kaushik02/CSE515_MWDB_Project.git
synced 2025-12-06 09:34:07 +00:00
111 lines
18 KiB
Plaintext
111 lines
18 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"from utils import *\n",
|
|
"warnings.filterwarnings('ignore')\n",
|
|
"%matplotlib inline"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"fd_collection = getCollection(\"team_5_mwdb_phase_2\", \"fd_collection\")\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Showing 3 similar images for label 2, using euclidean_distance_measure for cm_fd feature descriptor...\n"
|
|
]
|
|
},
|
|
{
|
|
"ename": "ServerSelectionTimeoutError",
|
|
"evalue": "localhost:27017: [Errno 61] Connection refused, Timeout: 30s, Topology Description: <TopologyDescription id: 65275087330d96f89929cd0a, topology_type: Unknown, servers: [<ServerDescription ('localhost', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('localhost:27017: [Errno 61] Connection refused')>]>",
|
|
"output_type": "error",
|
|
"traceback": [
|
|
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
|
"\u001b[0;31mServerSelectionTimeoutError\u001b[0m Traceback (most recent call last)",
|
|
"\u001b[1;32m/Users/pavanrathnakarshetty/Documents/Multimedia and Web Databases/Phase 2/CSE515_MWDB_Project/Phase 2/task_1.ipynb Cell 3\u001b[0m line \u001b[0;36m1\n\u001b[1;32m <a href='vscode-notebook-cell:/Users/pavanrathnakarshetty/Documents/Multimedia%20and%20Web%20Databases/Phase%202/CSE515_MWDB_Project/Phase%202/task_1.ipynb#W2sZmlsZQ%3D%3D?line=8'>9</a>\u001b[0m selected_feature_model \u001b[39m=\u001b[39m valid_feature_models[\n\u001b[1;32m <a href='vscode-notebook-cell:/Users/pavanrathnakarshetty/Documents/Multimedia%20and%20Web%20Databases/Phase%202/CSE515_MWDB_Project/Phase%202/task_1.ipynb#W2sZmlsZQ%3D%3D?line=9'>10</a>\u001b[0m \u001b[39mstr\u001b[39m(\u001b[39minput\u001b[39m(\u001b[39m\"\u001b[39m\u001b[39mEnter feature model - one of \u001b[39m\u001b[39m\"\u001b[39m \u001b[39m+\u001b[39m \u001b[39mstr\u001b[39m(\u001b[39mlist\u001b[39m(valid_feature_models\u001b[39m.\u001b[39mkeys()))))\n\u001b[1;32m <a href='vscode-notebook-cell:/Users/pavanrathnakarshetty/Documents/Multimedia%20and%20Web%20Databases/Phase%202/CSE515_MWDB_Project/Phase%202/task_1.ipynb#W2sZmlsZQ%3D%3D?line=10'>11</a>\u001b[0m ]\n\u001b[1;32m <a href='vscode-notebook-cell:/Users/pavanrathnakarshetty/Documents/Multimedia%20and%20Web%20Databases/Phase%202/CSE515_MWDB_Project/Phase%202/task_1.ipynb#W2sZmlsZQ%3D%3D?line=11'>12</a>\u001b[0m selected_distance_measure \u001b[39m=\u001b[39m feature_distance_matches[selected_feature_model]\n\u001b[0;32m---> <a href='vscode-notebook-cell:/Users/pavanrathnakarshetty/Documents/Multimedia%20and%20Web%20Databases/Phase%202/CSE515_MWDB_Project/Phase%202/task_1.ipynb#W2sZmlsZQ%3D%3D?line=13'>14</a>\u001b[0m show_similar_images_for_label(\n\u001b[1;32m <a href='vscode-notebook-cell:/Users/pavanrathnakarshetty/Documents/Multimedia%20and%20Web%20Databases/Phase%202/CSE515_MWDB_Project/Phase%202/task_1.ipynb#W2sZmlsZQ%3D%3D?line=14'>15</a>\u001b[0m fd_collection,\n\u001b[1;32m <a href='vscode-notebook-cell:/Users/pavanrathnakarshetty/Documents/Multimedia%20and%20Web%20Databases/Phase%202/CSE515_MWDB_Project/Phase%202/task_1.ipynb#W2sZmlsZQ%3D%3D?line=15'>16</a>\u001b[0m sample_label,\n\u001b[1;32m <a href='vscode-notebook-cell:/Users/pavanrathnakarshetty/Documents/Multimedia%20and%20Web%20Databases/Phase%202/CSE515_MWDB_Project/Phase%202/task_1.ipynb#W2sZmlsZQ%3D%3D?line=16'>17</a>\u001b[0m k,\n\u001b[1;32m <a href='vscode-notebook-cell:/Users/pavanrathnakarshetty/Documents/Multimedia%20and%20Web%20Databases/Phase%202/CSE515_MWDB_Project/Phase%202/task_1.ipynb#W2sZmlsZQ%3D%3D?line=17'>18</a>\u001b[0m selected_feature_model,\n\u001b[1;32m <a href='vscode-notebook-cell:/Users/pavanrathnakarshetty/Documents/Multimedia%20and%20Web%20Databases/Phase%202/CSE515_MWDB_Project/Phase%202/task_1.ipynb#W2sZmlsZQ%3D%3D?line=18'>19</a>\u001b[0m selected_distance_measure,\n\u001b[1;32m <a href='vscode-notebook-cell:/Users/pavanrathnakarshetty/Documents/Multimedia%20and%20Web%20Databases/Phase%202/CSE515_MWDB_Project/Phase%202/task_1.ipynb#W2sZmlsZQ%3D%3D?line=19'>20</a>\u001b[0m save_plots\u001b[39m=\u001b[39;49m\u001b[39mFalse\u001b[39;49;00m,\n\u001b[1;32m <a href='vscode-notebook-cell:/Users/pavanrathnakarshetty/Documents/Multimedia%20and%20Web%20Databases/Phase%202/CSE515_MWDB_Project/Phase%202/task_1.ipynb#W2sZmlsZQ%3D%3D?line=20'>21</a>\u001b[0m )\n",
|
|
"File \u001b[0;32m~/Documents/Multimedia and Web Databases/Phase 2/CSE515_MWDB_Project/Phase 2/utils.py:538\u001b[0m, in \u001b[0;36mshow_similar_images_for_label\u001b[0;34m(fd_collection, target_label, k, feature_model, distance_measure, save_plots)\u001b[0m\n\u001b[1;32m 535\u001b[0m min_dists \u001b[39m=\u001b[39m {}\n\u001b[1;32m 537\u001b[0m \u001b[39m# Calculate representative feature vector for label\u001b[39;00m\n\u001b[0;32m--> 538\u001b[0m label_rep \u001b[39m=\u001b[39m calculate_label_representatives(\n\u001b[1;32m 539\u001b[0m fd_collection, target_label, feature_model\n\u001b[1;32m 540\u001b[0m )\n\u001b[1;32m 542\u001b[0m \u001b[39mfor\u001b[39;00m cur_img \u001b[39min\u001b[39;00m all_images:\n\u001b[1;32m 543\u001b[0m cur_img_id \u001b[39m=\u001b[39m cur_img[\u001b[39m\"\u001b[39m\u001b[39mimage_id\u001b[39m\u001b[39m\"\u001b[39m]\n",
|
|
"File \u001b[0;32m~/Documents/Multimedia and Web Databases/Phase 2/CSE515_MWDB_Project/Phase 2/utils.py:497\u001b[0m, in \u001b[0;36mcalculate_label_representatives\u001b[0;34m(fd_collection, label, feature_model)\u001b[0m\n\u001b[1;32m 494\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mcalculate_label_representatives\u001b[39m(fd_collection, label, feature_model):\n\u001b[1;32m 495\u001b[0m \u001b[39m \u001b[39m\u001b[39m\"\"\"Calculate representative feature vector of a label as the mean of all feature vectors under a feature model\"\"\"\u001b[39;00m\n\u001b[0;32m--> 497\u001b[0m label_fds \u001b[39m=\u001b[39m [\n\u001b[1;32m 498\u001b[0m img_fds[feature_model] \u001b[39m# get the specific feature model's feature vector\u001b[39;49;00m\n\u001b[1;32m 499\u001b[0m \u001b[39mfor\u001b[39;49;00m img_fds \u001b[39min\u001b[39;49;00m fd_collection\u001b[39m.\u001b[39;49mfind(\n\u001b[1;32m 500\u001b[0m {\u001b[39m\"\u001b[39;49m\u001b[39mtrue_label\u001b[39;49m\u001b[39m\"\u001b[39;49m: label}\n\u001b[1;32m 501\u001b[0m ) \u001b[39m# repeat for all images\u001b[39;49;00m\n\u001b[1;32m 502\u001b[0m ]\n\u001b[1;32m 504\u001b[0m \u001b[39m# Calculate mean across each dimension\u001b[39;00m\n\u001b[1;32m 505\u001b[0m \u001b[39m# and build a mean vector out of these means\u001b[39;00m\n\u001b[1;32m 506\u001b[0m label_mean_vector \u001b[39m=\u001b[39m [\u001b[39msum\u001b[39m(col) \u001b[39m/\u001b[39m \u001b[39mlen\u001b[39m(col) \u001b[39mfor\u001b[39;00m col \u001b[39min\u001b[39;00m \u001b[39mzip\u001b[39m(\u001b[39m*\u001b[39mlabel_fds)]\n",
|
|
"File \u001b[0;32m~/Documents/Multimedia and Web Databases/Phase 2/CSE515_MWDB_Project/Phase 2/utils.py:497\u001b[0m, in \u001b[0;36m<listcomp>\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 494\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mcalculate_label_representatives\u001b[39m(fd_collection, label, feature_model):\n\u001b[1;32m 495\u001b[0m \u001b[39m \u001b[39m\u001b[39m\"\"\"Calculate representative feature vector of a label as the mean of all feature vectors under a feature model\"\"\"\u001b[39;00m\n\u001b[0;32m--> 497\u001b[0m label_fds \u001b[39m=\u001b[39m [\n\u001b[1;32m 498\u001b[0m img_fds[feature_model] \u001b[39m# get the specific feature model's feature vector\u001b[39;00m\n\u001b[1;32m 499\u001b[0m \u001b[39mfor\u001b[39;00m img_fds \u001b[39min\u001b[39;00m fd_collection\u001b[39m.\u001b[39mfind(\n\u001b[1;32m 500\u001b[0m {\u001b[39m\"\u001b[39m\u001b[39mtrue_label\u001b[39m\u001b[39m\"\u001b[39m: label}\n\u001b[1;32m 501\u001b[0m ) \u001b[39m# repeat for all images\u001b[39;00m\n\u001b[1;32m 502\u001b[0m ]\n\u001b[1;32m 504\u001b[0m \u001b[39m# Calculate mean across each dimension\u001b[39;00m\n\u001b[1;32m 505\u001b[0m \u001b[39m# and build a mean vector out of these means\u001b[39;00m\n\u001b[1;32m 506\u001b[0m label_mean_vector \u001b[39m=\u001b[39m [\u001b[39msum\u001b[39m(col) \u001b[39m/\u001b[39m \u001b[39mlen\u001b[39m(col) \u001b[39mfor\u001b[39;00m col \u001b[39min\u001b[39;00m \u001b[39mzip\u001b[39m(\u001b[39m*\u001b[39mlabel_fds)]\n",
|
|
"File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pymongo/cursor.py:1262\u001b[0m, in \u001b[0;36mCursor.next\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1260\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m__empty:\n\u001b[1;32m 1261\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mStopIteration\u001b[39;00m\n\u001b[0;32m-> 1262\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mlen\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m__data) \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_refresh():\n\u001b[1;32m 1263\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m__data\u001b[39m.\u001b[39mpopleft()\n\u001b[1;32m 1264\u001b[0m \u001b[39melse\u001b[39;00m:\n",
|
|
"File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pymongo/cursor.py:1153\u001b[0m, in \u001b[0;36mCursor._refresh\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1150\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mlen\u001b[39m(\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m__data)\n\u001b[1;32m 1152\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m__session:\n\u001b[0;32m-> 1153\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m__session \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m__collection\u001b[39m.\u001b[39;49mdatabase\u001b[39m.\u001b[39;49mclient\u001b[39m.\u001b[39;49m_ensure_session()\n\u001b[1;32m 1155\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m__id \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m: \u001b[39m# Query\u001b[39;00m\n\u001b[1;32m 1156\u001b[0m \u001b[39mif\u001b[39;00m (\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m__min \u001b[39mor\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m__max) \u001b[39mand\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m__hint:\n",
|
|
"File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pymongo/mongo_client.py:1868\u001b[0m, in \u001b[0;36mMongoClient._ensure_session\u001b[0;34m(self, session)\u001b[0m\n\u001b[1;32m 1863\u001b[0m \u001b[39mreturn\u001b[39;00m session\n\u001b[1;32m 1865\u001b[0m \u001b[39mtry\u001b[39;00m:\n\u001b[1;32m 1866\u001b[0m \u001b[39m# Don't make implicit sessions causally consistent. Applications\u001b[39;00m\n\u001b[1;32m 1867\u001b[0m \u001b[39m# should always opt-in.\u001b[39;00m\n\u001b[0;32m-> 1868\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m__start_session(\u001b[39mTrue\u001b[39;49;00m, causal_consistency\u001b[39m=\u001b[39;49m\u001b[39mFalse\u001b[39;49;00m)\n\u001b[1;32m 1869\u001b[0m \u001b[39mexcept\u001b[39;00m (ConfigurationError, InvalidOperation):\n\u001b[1;32m 1870\u001b[0m \u001b[39m# Sessions not supported.\u001b[39;00m\n\u001b[1;32m 1871\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mNone\u001b[39;00m\n",
|
|
"File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pymongo/mongo_client.py:1811\u001b[0m, in \u001b[0;36mMongoClient.__start_session\u001b[0;34m(self, implicit, **kwargs)\u001b[0m\n\u001b[1;32m 1808\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39m__start_session\u001b[39m(\u001b[39mself\u001b[39m, implicit: \u001b[39mbool\u001b[39m, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs: Any) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m ClientSession:\n\u001b[1;32m 1809\u001b[0m \u001b[39m# Raises ConfigurationError if sessions are not supported.\u001b[39;00m\n\u001b[1;32m 1810\u001b[0m \u001b[39mif\u001b[39;00m implicit:\n\u001b[0;32m-> 1811\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_topology\u001b[39m.\u001b[39;49m_check_implicit_session_support()\n\u001b[1;32m 1812\u001b[0m server_session: Union[_EmptyServerSession, _ServerSession] \u001b[39m=\u001b[39m _EmptyServerSession()\n\u001b[1;32m 1813\u001b[0m \u001b[39melse\u001b[39;00m:\n",
|
|
"File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pymongo/topology.py:583\u001b[0m, in \u001b[0;36mTopology._check_implicit_session_support\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 581\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39m_check_implicit_session_support\u001b[39m(\u001b[39mself\u001b[39m) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m \u001b[39mNone\u001b[39;00m:\n\u001b[1;32m 582\u001b[0m \u001b[39mwith\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_lock:\n\u001b[0;32m--> 583\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_check_session_support()\n",
|
|
"File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pymongo/topology.py:599\u001b[0m, in \u001b[0;36mTopology._check_session_support\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 595\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_select_servers_loop(\n\u001b[1;32m 596\u001b[0m any_server_selector, \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mget_server_selection_timeout(), \u001b[39mNone\u001b[39;00m\n\u001b[1;32m 597\u001b[0m )\n\u001b[1;32m 598\u001b[0m \u001b[39melif\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_description\u001b[39m.\u001b[39mreadable_servers:\n\u001b[0;32m--> 599\u001b[0m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_select_servers_loop(\n\u001b[1;32m 600\u001b[0m readable_server_selector, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mget_server_selection_timeout(), \u001b[39mNone\u001b[39;49;00m\n\u001b[1;32m 601\u001b[0m )\n\u001b[1;32m 603\u001b[0m session_timeout \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_description\u001b[39m.\u001b[39mlogical_session_timeout_minutes\n\u001b[1;32m 604\u001b[0m \u001b[39mif\u001b[39;00m session_timeout \u001b[39mis\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n",
|
|
"File \u001b[0;32m/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pymongo/topology.py:269\u001b[0m, in \u001b[0;36mTopology._select_servers_loop\u001b[0;34m(self, selector, timeout, address)\u001b[0m\n\u001b[1;32m 266\u001b[0m \u001b[39mwhile\u001b[39;00m \u001b[39mnot\u001b[39;00m server_descriptions:\n\u001b[1;32m 267\u001b[0m \u001b[39m# No suitable servers.\u001b[39;00m\n\u001b[1;32m 268\u001b[0m \u001b[39mif\u001b[39;00m timeout \u001b[39m==\u001b[39m \u001b[39m0\u001b[39m \u001b[39mor\u001b[39;00m now \u001b[39m>\u001b[39m end_time:\n\u001b[0;32m--> 269\u001b[0m \u001b[39mraise\u001b[39;00m ServerSelectionTimeoutError(\n\u001b[1;32m 270\u001b[0m \u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m{\u001b[39;00m\u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_error_message(selector)\u001b[39m}\u001b[39;00m\u001b[39m, Timeout: \u001b[39m\u001b[39m{\u001b[39;00mtimeout\u001b[39m}\u001b[39;00m\u001b[39ms, Topology Description: \u001b[39m\u001b[39m{\u001b[39;00m\u001b[39mself\u001b[39m\u001b[39m.\u001b[39mdescription\u001b[39m!r}\u001b[39;00m\u001b[39m\"\u001b[39m\n\u001b[1;32m 271\u001b[0m )\n\u001b[1;32m 273\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_ensure_opened()\n\u001b[1;32m 274\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_request_check_all()\n",
|
|
"\u001b[0;31mServerSelectionTimeoutError\u001b[0m: localhost:27017: [Errno 61] Connection refused, Timeout: 30s, Topology Description: <TopologyDescription id: 65275087330d96f89929cd0a, topology_type: Unknown, servers: [<ServerDescription ('localhost', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('localhost:27017: [Errno 61] Connection refused')>]>"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"sample_label = int(input(\"Enter query label: (0 to 100)\"))\n",
|
|
"if sample_label < 0 or sample_label > 100:\n",
|
|
" raise ValueError(\"Query label should be between [0, 100]\")\n",
|
|
"\n",
|
|
"k = int(input(\"Enter value of k: \"))\n",
|
|
"if k < 1:\n",
|
|
" raise ValueError(\"k should be a positive integer\")\n",
|
|
"\n",
|
|
"selected_feature_model = valid_feature_models[\n",
|
|
" str(input(\"Enter feature model - one of \" + str(list(valid_feature_models.keys()))))\n",
|
|
"]\n",
|
|
"selected_distance_measure = feature_distance_matches[selected_feature_model]\n",
|
|
"\n",
|
|
"show_similar_images_for_label(\n",
|
|
" fd_collection,\n",
|
|
" sample_label,\n",
|
|
" k,\n",
|
|
" selected_feature_model,\n",
|
|
" selected_distance_measure,\n",
|
|
" save_plots=False,\n",
|
|
")\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"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.5"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|