diff --git "a/train_rag.ipynb" "b/train_rag.ipynb" new file mode 100644--- /dev/null +++ "b/train_rag.ipynb" @@ -0,0 +1,1862 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 5, + "id": "a87fe5f3", + "metadata": { + "id": "a87fe5f3" + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import torch\n", + "from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments, Trainer, BitsAndBytesConfig, EarlyStoppingCallback, PreTrainedTokenizer\n", + "from torch.utils.data import DataLoader\n", + "import sys\n", + "from peft import LoraConfig, get_peft_model, TaskType\n", + "from huggingface_hub import snapshot_download\n", + "import os\n", + "import re\n", + "import contextlib #helps make pip silent\n", + "import sys\n", + "import os\n", + "import numpy as np\n", + "\n", + "with contextlib.redirect_stdout(sys.__stdout__), contextlib.redirect_stderr(sys.__stderr__):\n", + " %pip install datasets\n", + " %pip install sql_metadata\n", + "\"\"\"\"\n", + "with contextlib.redirect_stdout(sys.__stdout__), contextlib.redirect_stderr(sys.__stderr__):\n", + " %pip install datasets\n", + " %pip install sql_metadata\n", + "\"\"\"\n", + "from datasets import Dataset\n", + "from sql_metadata import Parser\n", + "from transformers import AutoTokenizer, AutoModelForCausalLM\n", + "from rag_metadata import SQLMetadataRetriever" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "4ec432b2", + "metadata": { + "id": "4ec432b2" + }, + "outputs": [], + "source": [ + "is_google_colab = False\n", + "use_bnb = False" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "47577a7f", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 170, + "referenced_widgets": [ + "9200f1303f124bddaa6114cdf0f5f878", + "17ddbb74e1764f37b8d34c311fae200c", + "ef732739334b4ac593fd665e01cd83c1", + "949ee3d1a9cd4060864dec5d4283ef2c", + "b98629e053674527aacca899ab7f11a9", + "84cc47dc70864bf3aa7599c06eb13c51", + "5d711bb927024d8d9f9b8bb685d6f388", + "3b80c66e0f384c45ab4187301599fab2", + "db6a23e658a34722a8f22505c6ace7b4", + "7751defbc4534d518d9e923b9019aa8b", + "fe6352bce22a40e7a936e7f90313bd02" + ] + }, + "id": "47577a7f", + "outputId": "999c4e88-3f89-49b1-9e21-abac91703bf3" + }, + "outputs": [], + "source": [ + "current_read_path = \"./\"\n", + "current_write_path = \"./\"\n", + "\n", + "def read_path(rel_path):\n", + " return os.path.join(current_read_path, rel_path)\n", + "\n", + "def write_path(rel_path):\n", + " return os.path.join(current_write_path, rel_path)\n", + "\n", + "if is_google_colab:\n", + " from google.colab import drive\n", + " drive.mount('/content/drive')\n", + " current_write_path = \"/content/drive/MyDrive/sql_gen\"\n", + "\n", + " hugging_face_path = snapshot_download(\n", + " repo_id=\"USC-Applied-NLP-Group/SQL-Generation\",\n", + " repo_type=\"model\",\n", + " allow_patterns=[\"train-data/*\", \"deepseek-coder-1.3b-instruct/*\", \"src/*\", \"nba-data/*\"],\n", + " )\n", + " sys.path.append(hugging_face_path)\n", + " current_read_path = hugging_face_path\n", + "else:\n", + " base_path = os.getcwd() # Use current working directory in notebooks\n", + " sys.path.append(os.path.abspath(os.path.join(base_path, '../..')))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "de7c3cd3", + "metadata": { + "id": "de7c3cd3" + }, + "outputs": [], + "source": [ + "MODEL_DIR = write_path(\"rag-rank-16\")" + ] + }, + { + "cell_type": "markdown", + "id": "4b7eb12a", + "metadata": { + "id": "4b7eb12a" + }, + "source": [ + "## Prepare Model" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "3d0c0e3b", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3d0c0e3b", + "outputId": "a64bc20b-a33f-453e-e445-cd08109ed43b" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\Dean\\AppData\\Local\\Temp\\ipykernel_22484\\3262638624.py:6: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n", + " df_train.applymap(lambda x: re.sub(r'\\s+', ' ', x) if isinstance(x, str) else x)\n", + "C:\\Users\\Dean\\AppData\\Local\\Temp\\ipykernel_22484\\3262638624.py:7: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n", + " df_test.applymap(lambda x: re.sub(r'\\s+', ' ', x) if isinstance(x, str) else x)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total train dataset examples: 2143\n", + " natural_query \\\n", + "0 Which NBA teams were established after the yea... \n", + "1 What is the most points the Los Angeles Lakers... \n", + "2 What is the second-highest number of points th... \n", + "3 How many home games did the Golden State Warri... \n", + "4 What is the average number of assists by the B... \n", + "\n", + " sql_query result \n", + "0 SELECT full_name FROM team WHERE year_founded ... New Orleans Pelicans \n", + "1 SELECT MAX(pts_home) FROM game WHERE team_nam... 162 \n", + "2 SELECT pts_home FROM game WHERE team_name_home... 156 \n", + "3 SELECT COUNT(*) FROM game WHERE team_abbrevi... 29 \n", + "4 SELECT AVG(ast_home) FROM game WHERE team_ab... 26.51355662 \n", + "Total test dataset examples: 150\n", + " natural_query \\\n", + "0 What is the average number of fg_pct in home g... \n", + "1 How many lead changes occurred in games where ... \n", + "2 Which team had the most away games where they ... \n", + "3 What is the maximum number of team rebounds re... \n", + "4 What was the average margin of victory for the... \n", + "\n", + " sql_query result \n", + "0 SELECT AVG(fg_pct_home) FROM game WHERE team_n... 0.4636694306246544 \n", + "1 SELECT SUM(lead_changes) as total_lead_changes... 5828.0 \n", + "2 SELECT team_abbreviation_away FROM game WHERE ... ATL \n", + "3 SELECT MAX(o.team_rebounds_away) FROM game g J... 16 \n", + "4 SELECT AVG(victory_margin) AS avg_victory_marg... 11.48148148 \n" + ] + } + ], + "source": [ + "# Load dataset\n", + "df_train = pd.read_csv(read_path(\"train-data/train_set.tsv\"), sep='\\t')\n", + "df_test = pd.read_csv(read_path(\"train-data/test_set.tsv\"), sep='\\t')\n", + "\n", + "# Fix any spacing issues\n", + "df_train.applymap(lambda x: re.sub(r'\\s+', ' ', x) if isinstance(x, str) else x)\n", + "df_test.applymap(lambda x: re.sub(r'\\s+', ' ', x) if isinstance(x, str) else x)\n", + "\n", + "# Display dataset info\n", + "print(f\"Total train dataset examples: {len(df_train)}\")\n", + "print(df_train.head())\n", + "print(f\"Total test dataset examples: {len(df_test)}\")\n", + "print(df_test.head())\n", + "# Load tokenizer\n", + "model_name = read_path(\"deepseek-coder-1.3b-instruct\")\n", + "tokenizer = AutoTokenizer.from_pretrained(model_name)\n", + "\n", + "# Enable 8-bit quantization for lower memory usage\n", + "bnb_config = None\n", + "if use_bnb:\n", + " bnb_config = BitsAndBytesConfig(\n", + " load_in_8bit=True,\n", + " bnb_8bit_compute_dtype=torch.float16\n", + " )\n", + "\n", + "# Load model with quantization\n", + "#device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", + "device_name = 'cuda:0' if torch.cuda.is_available() else 'cpu'\n", + "device = torch.device(device_name)\n", + "model = AutoModelForCausalLM.from_pretrained(\n", + " model_name,\n", + " quantization_config=bnb_config,\n", + " device_map=device\n", + ")\n", + "\n", + "special_token = \"<|endofsql|>\"\n", + "\n", + "# Only add if it doesn’t already exist\n", + "#if special_token not in tokenizer.get_vocab():\n", + "#print(\"adding!\")\n", + "#print(len(tokenizer))\n", + "tokenizer.add_special_tokens({\"additional_special_tokens\": [special_token]})\n", + "tokenizer.eos_token = special_token\n", + "model.resize_token_embeddings(len(tokenizer))\n", + "\n", + "tokenizer.truncation_side = \"left\"\n" + ] + }, + { + "cell_type": "markdown", + "id": "3f6248fe", + "metadata": {}, + "source": [ + "## Prepare RAG" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "ccbb122b", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\Dean\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\transformers\\models\\bert\\modeling_bert.py:440: UserWarning: 1Torch was not compiled with flash attention. (Triggered internally at C:\\actions-runner\\_work\\pytorch\\pytorch\\builder\\windows\\pytorch\\aten\\src\\ATen\\native\\transformers\\cuda\\sdp_utils.cpp:555.)\n", + " attn_output = torch.nn.functional.scaled_dot_product_attention(\n" + ] + } + ], + "source": [ + "retriever = SQLMetadataRetriever()\n", + "\n", + "metadata_docs = [\n", + " '''team Table\n", + "Stores information about NBA teams.\n", + "CREATE TABLE IF NOT EXISTS \"team\" (\n", + " \"id\" TEXT PRIMARY KEY, -- Unique identifier for the team\n", + " \"full_name\" TEXT, -- Full official name of the team (e.g., \"Los Angeles Lakers\")\n", + " \"abbreviation\" TEXT, -- Shortened team name (e.g., \"LAL\")\n", + " \"nickname\" TEXT, -- Commonly used nickname for the team (e.g., \"Lakers\")\n", + " \"city\" TEXT, -- City where the team is based\n", + " \"state\" TEXT, -- State where the team is located\n", + " \"year_founded\" REAL -- Year the team was established\n", + ");\n", + "''',\n", + " '''game Table\n", + "Contains detailed statistics for each NBA game, including home and away team performance.\n", + "CREATE TABLE IF NOT EXISTS \"game\" (\n", + " \"season_id\" TEXT, -- Season identifier, formatted as \"2YYYY\" (e.g., \"21970\" for the 1970 season)\n", + " \"team_id_home\" TEXT, -- ID of the home team (matches \"id\" in team table)\n", + " \"team_abbreviation_home\" TEXT, -- Abbreviation of the home team\n", + " \"team_name_home\" TEXT, -- Full name of the home team\n", + " \"game_id\" TEXT PRIMARY KEY, -- Unique identifier for the game\n", + " \"game_date\" TIMESTAMP, -- Date the game was played (YYYY-MM-DD format)\n", + " \"matchup_home\" TEXT, -- Matchup details including opponent (e.g., \"LAL vs. BOS\")\n", + " \"wl_home\" TEXT, -- \"W\" if the home team won, \"L\" if they lost\n", + " \"min\" INTEGER, -- Total minutes played in the game\n", + " \"fgm_home\" REAL, -- Field goals made by the home team\n", + " \"fga_home\" REAL, -- Field goals attempted by the home team\n", + " \"fg_pct_home\" REAL, -- Field goal percentage of the home team\n", + " \"fg3m_home\" REAL, -- Three-point field goals made by the home team\n", + " \"fg3a_home\" REAL, -- Three-point attempts by the home team\n", + " \"fg3_pct_home\" REAL, -- Three-point field goal percentage of the home team\n", + " \"ftm_home\" REAL, -- Free throws made by the home team\n", + " \"fta_home\" REAL, -- Free throws attempted by the home team\n", + " \"ft_pct_home\" REAL, -- Free throw percentage of the home team\n", + " \"oreb_home\" REAL, -- Offensive rebounds by the home team\n", + " \"dreb_home\" REAL, -- Defensive rebounds by the home team\n", + " \"reb_home\" REAL, -- Total rebounds by the home team\n", + " \"ast_home\" REAL, -- Assists by the home team\n", + " \"stl_home\" REAL, -- Steals by the home team\n", + " \"blk_home\" REAL, -- Blocks by the home team\n", + " \"tov_home\" REAL, -- Turnovers by the home team\n", + " \"pf_home\" REAL, -- Personal fouls by the home team\n", + " \"pts_home\" REAL, -- Total points scored by the home team\n", + " \"plus_minus_home\" INTEGER, -- Plus/minus rating for the home team\n", + " \"video_available_home\" INTEGER, -- Indicates whether video is available (1 = Yes, 0 = No)\n", + " \"team_id_away\" TEXT, -- ID of the away team\n", + " \"team_abbreviation_away\" TEXT, -- Abbreviation of the away team\n", + " \"team_name_away\" TEXT, -- Full name of the away team\n", + " \"matchup_away\" TEXT, -- Matchup details from the away team’s perspective\n", + " \"wl_away\" TEXT, -- \"W\" if the away team won, \"L\" if they lost\n", + " \"fgm_away\" REAL, -- Field goals made by the away team\n", + " \"fga_away\" REAL, -- Field goals attempted by the away team\n", + " \"fg_pct_away\" REAL, -- Field goal percentage of the away team\n", + " \"fg3m_away\" REAL, -- Three-point field goals made by the away team\n", + " \"fg3a_away\" REAL, -- Three-point attempts by the away team\n", + " \"fg3_pct_away\" REAL, -- Three-point field goal percentage of the away team\n", + " \"ftm_away\" REAL, -- Free throws made by the away team\n", + " \"fta_away\" REAL, -- Free throws attempted by the away team\n", + " \"ft_pct_away\" REAL, -- Free throw percentage of the away team\n", + " \"oreb_away\" REAL, -- Offensive rebounds by the away team\n", + " \"dreb_away\" REAL, -- Defensive rebounds by the away team\n", + " \"reb_away\" REAL, -- Total rebounds by the away team\n", + " \"ast_away\" REAL, -- Assists by the away team\n", + " \"stl_away\" REAL, -- Steals by the away team\n", + " \"blk_away\" REAL, -- Blocks by the away team\n", + " \"tov_away\" REAL, -- Turnovers by the away team\n", + " \"pf_away\" REAL, -- Personal fouls by the away team\n", + " \"pts_away\" REAL, -- Total points scored by the away team\n", + " \"plus_minus_away\" INTEGER, -- Plus/minus rating for the away team\n", + " \"video_available_away\" INTEGER, -- Indicates whether video is available (1 = Yes, 0 = No)\n", + " \"season_type\" TEXT -- Regular season or playoffs\n", + ");\n", + "''',\n", + " '''other_stats Table\n", + "Stores additional statistics, linked to the game table via game_id.\n", + "CREATE TABLE IF NOT EXISTS \"other_stats\" (\n", + " \"game_id\" TEXT, -- Unique game identifier, matches id column from game table\n", + " \"league_id\" TEXT, -- League identifier\n", + " \"team_id_home\" TEXT, -- Home team identifier\n", + " \"team_abbreviation_home\" TEXT, -- Home team abbreviation\n", + " \"team_city_home\" TEXT, -- Home team city\n", + " \"pts_paint_home\" INTEGER, -- Points in the paint by the home team\n", + " \"pts_2nd_chance_home\" INTEGER, -- Second chance points by the home team\n", + " \"pts_fb_home\" INTEGER, -- Fast break points by the home team\n", + " \"largest_lead_home\" INTEGER,-- Largest lead by the home team\n", + " \"lead_changes\" INTEGER, -- Number of lead changes \n", + " \"times_tied\" INTEGER, -- Number of times the score was tied\n", + " \"team_turnovers_home\" INTEGER, -- Home team turnovers\n", + " \"total_turnovers_home\" INTEGER, -- Total turnovers by the home team\n", + " \"team_rebounds_home\" INTEGER, -- Home team rebounds\n", + " \"pts_off_to_home\" INTEGER, -- Points off turnovers by the home team\n", + " \"team_id_away\" TEXT, -- Away team identifier\n", + " \"team_abbreviation_away\" TEXT, -- Away team abbreviation\n", + " \"pts_paint_away\" INTEGER, -- Points in the paint by the away team\n", + " \"pts_2nd_chance_away\" INTEGER, -- Second chance points by the away team\n", + " \"pts_fb_away\" INTEGER, -- Fast break points by the away team\n", + " \"largest_lead_away\" INTEGER,-- Largest lead by the away team\n", + " \"team_turnovers_away\" INTEGER, -- Away team turnovers\n", + " \"total_turnovers_away\" INTEGER, -- Total turnovers by the away team\n", + " \"team_rebounds_away\" INTEGER, -- Away team rebounds\n", + " \"pts_off_to_away\" INTEGER -- Points off turnovers by the away team\n", + ");\n", + "'''\n", + "]\n", + "\n", + "retriever.add_documents(metadata_docs)" + ] + }, + { + "cell_type": "markdown", + "id": "f87be471", + "metadata": {}, + "source": [ + "## Tokenize and Mask Training Examples" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "7f8b1acf", + "metadata": { + "id": "7f8b1acf" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map: 100%|██████████| 2143/2143 [00:54<00:00, 39.03 examples/s]\n", + "Map: 100%|██████████| 150/150 [00:04<00:00, 37.49 examples/s]\n" + ] + } + ], + "source": [ + "\n", + "\n", + "def format_deepseek_chat(example, tokenizer, special_token=\"<|endofsql|>\"):\n", + " # Manually build the prompt as one flat string\n", + " relevant_schemas = retriever.retrieve(example[\"natural_query\"], top_k=1)\n", + " schema_block = \"\\n\\n\".join(relevant_schemas)\n", + "\n", + " input_prompt = f\"\"\"\n", + "You are an AI assistant that generates SQLite queries for an NBA database based on user questions.\n", + "\n", + "### Relevant Schema:\n", + "{schema_block}\n", + "\n", + "### Instructions:\n", + "- Generate a valid SQLite query to retrieve relevant data from the database.\n", + "- Use column names correctly based on the provided schema.\n", + "- Output only the SQLite query as plain text.\n", + "\n", + "### Team Name Information:\n", + "In the plaintext user questions, only the full team names will be used, but in the queries you may use the full team names or the abbreviations. \n", + "The full team names can be used with the game table, while the abbreviations should be used with the other_stats table.\n", + "Notice they are separated by the | character in the following list:\n", + "\n", + "Atlanta Hawks|ATL\n", + "Boston Celtics|BOS\n", + "Cleveland Cavaliers|CLE\n", + "New Orleans Pelicans|NOP\n", + "Chicago Bulls|CHI\n", + "Dallas Mavericks|DAL\n", + "Denver Nuggets|DEN\n", + "Golden State Warriors|GSW\n", + "Houston Rockets|HOU\n", + "Los Angeles Clippers|LAC\n", + "Los Angeles Lakers|LAL\n", + "Miami Heat|MIA\n", + "Milwaukee Bucks|MIL\n", + "Minnesota Timberwolves|MIN\n", + "Brooklyn Nets|BKN\n", + "New York Knicks|NYK\n", + "Orlando Magic|ORL\n", + "Indiana Pacers|IND\n", + "Philadelphia 76ers|PHI\n", + "Phoenix Suns|PHX\n", + "Portland Trail Blazers|POR\n", + "Sacramento Kings|SAC\n", + "San Antonio Spurs|SAS\n", + "Oklahoma City Thunder|OKC\n", + "Toronto Raptors|TOR\n", + "Utah Jazz|UTA\n", + "Memphis Grizzlies|MEM\n", + "Washington Wizards|WAS\n", + "Detroit Pistons|DET\n", + "Charlotte Hornets|CHA\n", + "\n", + "### Query Guidelines:\n", + "Use team_name_home and team_name_away to match teams to the game table. Use team_abbreviation_home and team_abbreviation away to match teams to the other_stats table.\n", + "\n", + "To filter by season, use season_id = '2YYYY'.\n", + "\n", + "Example: To get statistics from 2005, use a statement like: season_id = '22005'. To get statistics from 1972, use a statement like: season_id = \"21972\". To get statistics from 2015, use a statement like: season_id = \"22015\".\n", + "\n", + "Ensure queries return relevant columns and avoid unnecessary joins.\n", + "\n", + "### Example User Requests and SQLite Queries\n", + "Request:\n", + "\"What is the most points the Los Angeles Lakers have ever scored at home?\"\n", + "SQLite:\n", + "SELECT MAX(pts_home)\n", + "FROM game\n", + "WHERE team_name_home = 'Los Angeles Lakers';\n", + "\n", + "Request:\n", + "\"Which teams are located in the state of California?\"\n", + "SQLite:\n", + "SELECT full_name FROM team WHERE state = 'California';\n", + "\n", + "Request:\n", + "\"Which team had the highest number of team turnovers in an away game?\"\n", + "SQLite:\n", + "SELECT team_abbreviation_away FROM other_stats ORDER BY team_turnovers_away DESC LIMIT 1;\n", + "\n", + "Request:\n", + "\"Which teams were founded before 1979?\"\n", + "SQLite:\n", + "SELECT full_name FROM team WHERE year_founded < 1979;\n", + "\n", + "Request:\n", + "\"Find the Boston Celtics largest home victory margin in the 2008 season.\"\n", + "SQLite:\n", + "SELECT MAX(pts_home - pts_away) AS biggest_win\n", + "FROM game\n", + "WHERE team_name_home = 'Boston Celtics' AND season_id = '22008';\n", + "\n", + "Generate only the SQLite query prefaced by SQLite: and no other text. Now generate an SQLite query for the following user request.\n", + "Request:\n", + "\"\"\"\n", + " prompt = f\"{input_prompt}{example['natural_query']}\\n\"\n", + " completion = f\"SQLite:\\n{example['sql_query']}{special_token}\"\n", + "\n", + " full_text = prompt + completion\n", + " tokenized = tokenizer(\n", + " full_text,\n", + " truncation=True,\n", + " padding=\"max_length\",\n", + " max_length=3156, # or whatever your model can handle\n", + " )\n", + "\n", + " # Mask out prompt tokens in the labels\n", + " prompt_len = len(tokenizer(prompt, truncation=True)[\"input_ids\"])\n", + " labels = tokenized[\"input_ids\"][:]\n", + " labels[:prompt_len] = [-100] * prompt_len\n", + " tokenized[\"labels\"] = labels\n", + "\n", + " return tokenized\n", + "\n", + "# Build dataset dict\n", + "train_dataset_dict = {\n", + " \"natural_query\": df_train[\"natural_query\"].tolist(),\n", + " \"sql_query\": df_train[\"sql_query\"].tolist(),\n", + "}\n", + "\n", + "val_dataset_dict = {\n", + " \"natural_query\": df_test[\"natural_query\"].tolist(),\n", + " \"sql_query\": df_test[\"sql_query\"].tolist(),\n", + "}\n", + "\n", + "# Create HuggingFace Dataset\n", + "train_dataset = Dataset.from_dict(train_dataset_dict)\n", + "val_dataset = Dataset.from_dict(val_dataset_dict)\n", + "\n", + "\n", + "# Apply formatting\n", + "train_dataset = train_dataset.map(\n", + " lambda x: format_deepseek_chat(x, tokenizer),\n", + " remove_columns=[\"natural_query\", \"sql_query\"]\n", + ")\n", + "\n", + "val_dataset = val_dataset.map(\n", + " lambda x: format_deepseek_chat(x, tokenizer),\n", + " remove_columns=[\"natural_query\", \"sql_query\"]\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "43562f78", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 121, + "referenced_widgets": [ + "68ff2fc00bd041e7b79a811e3de1e596", + "4c41e81bcd254df7b1265206a5a6b40b", + "1a8c093fccbb437db6e0390a920f5cc5", + "e11d04a9d22a4229922e3eb4e3eb6466", + "5d89a5574a3d4a8993e6dca78d406d2d", + "dd24270dc07942a6972fbfaf58129989", + "643903cd7a5b4a52a4687ec38eb8c4dc", + "13ae11c314664c44ae18d35cf57a1334", + "e68cfd05ba994a34b93107d2eab82ad3", + "ea283e7e8b234519b881c562b7eb01d3", + "1ec5329ea0434df4b74d0f311e016c3e" + ] + }, + "id": "43562f78", + "outputId": "58e8ce3f-b7cd-4cf6-dfa4-180b4a699cf9" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'input_ids': [32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32014, 32013, 185, 2042, 417, 274, 20926, 20391, 344, 21559, 5975, 547, 12780, 327, 274, 461, 8443, 4892, 2842, 331, 2664, 4301, 13, 185, 185, 13518, 1916, 6352, 11593, 732, 25, 185, 14641, 6922, 185, 29133, 9339, 13024, 327, 1317, 461, 8443, 2612, 11, 2837, 1712, 285, 2292, 2547, 3779, 13, 185, 13403, 11866, 15787, 5787, 7449, 30862, 440, 14641, 1, 334, 185, 207, 440, 21810, 62, 304, 1, 323, 13532, 11, 655, 1585, 23825, 21411, 11, 31131, 372, 440, 17, 19393, 19393, 1, 334, 68, 13, 70, 1787, 440, 17, 16, 24, 22, 15, 1, 327, 254, 207, 16, 24, 22, 15, 4314, 8, 185, 207, 440, 21598, 62, 304, 62, 5816, 1, 323, 13532, 11, 294, 1585, 4982, 280, 254, 1712, 2547, 334, 3101, 3238, 440, 304, 1, 279, 2547, 2365, 8, 185, 207, 440, 21598, 62, 356, 26321, 335, 62, 5816, 1, 323, 13532, 11, 1585, 4196, 26321, 335, 280, 254, 1712, 2547, 185, 207, 440, 21598, 62, 1523, 62, 5816, 1, 323, 13532, 11, 1032, 1585, 11417, 1208, 280, 254, 1712, 2547, 185, 207, 440, 14641, 62, 304, 1, 323, 13532, 24590, 14356, 11, 207, 1585, 1198, 2710, 21411, 327, 254, 2612, 185, 207, 440, 14641, 62, 1984, 1, 323, 10920, 1428, 17483, 11, 1032, 1585, 9312, 254, 2612, 438, 7226, 334, 19393, 19393, 12, 8213, 12, 7127, 4797, 8, 185, 207, 440, 10108, 393, 62, 5816, 1, 323, 13532, 11, 294, 1585, 23772, 393, 4283, 2837, 25999, 334, 68, 13, 70, 1787, 440, 43, 1743, 7617, 13, 380, 2951, 2456, 185, 207, 440, 13443, 62, 5816, 1, 323, 13532, 11, 3462, 1585, 440, 54, 1, 562, 254, 1712, 2547, 2103, 11, 440, 43, 1, 562, 653, 4726, 185, 207, 440, 1513, 1, 3379, 4463, 18924, 11, 4885, 1585, 19090, 4054, 7226, 279, 254, 2612, 185, 207, 440, 17982, 76, 62, 5816, 1, 5878, 1743, 11, 2481, 1585, 11739, 9054, 1396, 457, 254, 1712, 2547, 185, 207, 440, 69, 2417, 62, 5816, 1, 5878, 1743, 11, 2481, 1585, 11739, 9054, 18012, 457, 254, 1712, 2547, 185, 207, 440, 17982, 62, 79, 296, 62, 5816, 1, 5878, 1743, 11, 1574, 1585, 11739, 6206, 14986, 280, 254, 1712, 2547, 185, 207, 440, 17982, 18, 76, 62, 5816, 1, 5878, 1743, 11, 655, 1585, 14910, 12, 3772, 2010, 9054, 1396, 457, 254, 1712, 2547, 185, 207, 440, 17982, 18, 64, 62, 5816, 1, 5878, 1743, 11, 655, 1585, 14910, 12, 3772, 15343, 457, 254, 1712, 2547, 185, 207, 440, 17982, 18, 62, 79, 296, 62, 5816, 1, 5878, 1743, 11, 294, 1585, 14910, 12, 3772, 2010, 6206, 14986, 280, 254, 1712, 2547, 185, 207, 440, 659, 76, 62, 5816, 1, 5878, 1743, 11, 2481, 1585, 7264, 8474, 1396, 457, 254, 1712, 2547, 185, 207, 440, 659, 64, 62, 5816, 1, 5878, 1743, 11, 2481, 1585, 7264, 8474, 18012, 457, 254, 1712, 2547, 185, 207, 440, 659, 62, 79, 296, 62, 5816, 1, 5878, 1743, 11, 1574, 1585, 7264, 5245, 14986, 280, 254, 1712, 2547, 185, 207, 440, 419, 65, 62, 5816, 1, 5878, 1743, 11, 655, 1585, 6050, 4630, 11435, 5740, 457, 254, 1712, 2547, 185, 207, 440, 67, 248, 65, 62, 5816, 1, 5878, 1743, 11, 655, 1585, 5855, 4630, 11435, 5740, 457, 254, 1712, 2547, 185, 207, 440, 248, 65, 62, 5816, 1, 5878, 1743, 11, 2481, 1585, 19090, 11435, 5740, 457, 254, 1712, 2547, 185, 207, 440, 537, 62, 5816, 1, 5878, 1743, 11, 2481, 1585, 3512, 1923, 457, 254, 1712, 2547, 185, 207, 440, 292, 75, 62, 5816, 1, 5878, 1743, 11, 2481, 1585, 3725, 909, 457, 254, 1712, 2547, 185, 207, 440, 1638, 74, 62, 5816, 1, 5878, 1743, 11, 2481, 1585, 380, 19722, 457, 254, 1712, 2547, 185, 207, 440, 577, 85, 62, 5816, 1, 5878, 1743, 11, 2481, 1585, 13974, 17396, 457, 254, 1712, 2547, 185, 207, 440, 26862, 62, 5816, 1, 5878, 1743, 11, 3462, 1585, 20414, 3931, 2724, 457, 254, 1712, 2547, 185, 207, 440, 462, 82, 62, 5816, 1, 5878, 1743, 11, 2481, 1585, 19090, 3472, 18605, 457, 254, 1712, 2547, 185, 207, 440, 13289, 62, 10646, 62, 5816, 1, 3379, 4463, 18924, 11, 243, 1585, 14751, 14, 10646, 14026, 327, 254, 1712, 2547, 185, 207, 440, 12986, 62, 16647, 62, 5816, 1, 3379, 4463, 18924, 11, 1585, 2325, 278, 980, 3192, 3905, 317, 2315, 334, 16, 405, 7589, 11, 207, 15, 405, 2357, 8, 185, 207, 440, 21598, 62, 304, 62, 11507, 1, 323, 13532, 11, 294, 1585, 4982, 280, 254, 2292, 2547, 185, 207, 440, 21598, 62, 356, 26321, 335, 62, 11507, 1, 323, 13532, 11, 1585, 4196, 26321, 335, 280, 254, 2292, 2547, 185, 207, 440, 21598, 62, 1523, 62, 11507, 1, 323, 13532, 11, 1032, 1585, 11417, 1208, 280, 254, 2292, 2547, 185, 207, 440, 10108, 393, 62, 11507, 1, 323, 13532, 11, 294, 1585, 23772, 393, 4283, 473, 254, 2292, 2547, 486, 82, 12422, 185, 207, 440, 13443, 62, 11507, 1, 323, 13532, 11, 3462, 1585, 440, 54, 1, 562, 254, 2292, 2547, 2103, 11, 440, 43, 1, 562, 653, 4726, 185, 207, 440, 17982, 76, 62, 11507, 1, 5878, 1743, 11, 2481, 1585, 11739, 9054, 1396, 457, 254, 2292, 2547, 185, 207, 440, 69, 2417, 62, 11507, 1, 5878, 1743, 11, 2481, 1585, 11739, 9054, 18012, 457, 254, 2292, 2547, 185, 207, 440, 17982, 62, 79, 296, 62, 11507, 1, 5878, 1743, 11, 1574, 1585, 11739, 6206, 14986, 280, 254, 2292, 2547, 185, 207, 440, 17982, 18, 76, 62, 11507, 1, 5878, 1743, 11, 655, 1585, 14910, 12, 3772, 2010, 9054, 1396, 457, 254, 2292, 2547, 185, 207, 440, 17982, 18, 64, 62, 11507, 1, 5878, 1743, 11, 655, 1585, 14910, 12, 3772, 15343, 457, 254, 2292, 2547, 185, 207, 440, 17982, 18, 62, 79, 296, 62, 11507, 1, 5878, 1743, 11, 294, 1585, 14910, 12, 3772, 2010, 6206, 14986, 280, 254, 2292, 2547, 185, 207, 440, 659, 76, 62, 11507, 1, 5878, 1743, 11, 2481, 1585, 7264, 8474, 1396, 457, 254, 2292, 2547, 185, 207, 440, 659, 64, 62, 11507, 1, 5878, 1743, 11, 2481, 1585, 7264, 8474, 18012, 457, 254, 2292, 2547, 185, 207, 440, 659, 62, 79, 296, 62, 11507, 1, 5878, 1743, 11, 1574, 1585, 7264, 5245, 14986, 280, 254, 2292, 2547, 185, 207, 440, 419, 65, 62, 11507, 1, 5878, 1743, 11, 655, 1585, 6050, 4630, 11435, 5740, 457, 254, 2292, 2547, 185, 207, 440, 67, 248, 65, 62, 11507, 1, 5878, 1743, 11, 655, 1585, 5855, 4630, 11435, 5740, 457, 254, 2292, 2547, 185, 207, 440, 248, 65, 62, 11507, 1, 5878, 1743, 11, 2481, 1585, 19090, 11435, 5740, 457, 254, 2292, 2547, 185, 207, 440, 537, 62, 11507, 1, 5878, 1743, 11, 2481, 1585, 3512, 1923, 457, 254, 2292, 2547, 185, 207, 440, 292, 75, 62, 11507, 1, 5878, 1743, 11, 2481, 1585, 3725, 909, 457, 254, 2292, 2547, 185, 207, 440, 1638, 74, 62, 11507, 1, 5878, 1743, 11, 2481, 1585, 380, 19722, 457, 254, 2292, 2547, 185, 207, 440, 577, 85, 62, 11507, 1, 5878, 1743, 11, 2481, 1585, 13974, 17396, 457, 254, 2292, 2547, 185, 207, 440, 26862, 62, 11507, 1, 5878, 1743, 11, 3462, 1585, 20414, 3931, 2724, 457, 254, 2292, 2547, 185, 207, 440, 462, 82, 62, 11507, 1, 5878, 1743, 11, 2481, 1585, 19090, 3472, 18605, 457, 254, 2292, 2547, 185, 207, 440, 13289, 62, 10646, 62, 11507, 1, 3379, 4463, 18924, 11, 243, 1585, 14751, 14, 10646, 14026, 327, 254, 2292, 2547, 185, 207, 440, 12986, 62, 16647, 62, 11507, 1, 3379, 4463, 18924, 11, 1585, 2325, 278, 980, 3192, 3905, 317, 2315, 334, 16, 405, 7589, 11, 207, 15, 405, 2357, 8, 185, 207, 440, 21810, 62, 2139, 1, 323, 13532, 3137, 1585, 3980, 996, 4314, 409, 1530, 23836, 185, 477, 185, 185, 185, 13518, 3649, 8070, 25, 185, 12, 9338, 387, 245, 4629, 5975, 547, 5151, 276, 24174, 7688, 1189, 473, 254, 4892, 13, 185, 12, 7310, 3812, 4761, 9699, 2842, 331, 254, 4274, 16135, 13, 185, 12, 20239, 885, 254, 5975, 547, 5151, 372, 8803, 2422, 13, 185, 185, 13518, 11727, 9715, 9843, 25, 185, 769, 254, 8803, 818, 2664, 4301, 11, 885, 254, 2192, 2547, 4761, 540, 330, 1219, 11, 545, 279, 254, 12780, 340, 970, 931, 254, 2192, 2547, 4761, 409, 254, 31593, 715, 13, 207, 185, 546, 2192, 2547, 4761, 482, 330, 1219, 365, 254, 2612, 2365, 11, 1470, 254, 31593, 715, 1020, 330, 1219, 365, 254, 746, 62, 16204, 2365, 13, 185, 27298, 653, 417, 14843, 457, 254, 939, 3188, 279, 254, 1884, 1517, 25, 185, 185, 3554, 75, 9568, 12499, 705, 91, 1392, 43, 185, 33, 11885, 339, 3467, 959, 91, 33, 2951, 185, 34, 28412, 339, 22281, 4961, 91, 34, 1535, 185, 4843, 24270, 19871, 9017, 91, 45, 5080, 185, 1915, 10595, 21915, 82, 91, 3388, 40, 185, 35, 20315, 6658, 329, 6388, 91, 35, 1743, 185, 23559, 329, 461, 905, 16806, 91, 35, 1732, 185, 25884, 255, 4734, 6370, 25546, 91, 11096, 54, 185, 39, 264, 7664, 10602, 1542, 91, 11317, 52, 185, 43, 378, 14204, 1854, 515, 6474, 91, 43, 2585, 185, 43, 378, 14204, 412, 9961, 91, 43, 1743, 185, 44, 20452, 31410, 91, 44, 7183, 185, 26389, 86, 1766, 25032, 380, 14450, 91, 44, 4470, 185, 7729, 21603, 10389, 696, 86, 313, 1596, 91, 19293, 185, 22120, 541, 18679, 461, 1542, 91, 33, 42, 45, 185, 4843, 4420, 716, 5072, 705, 91, 25399, 42, 185, 3161, 30075, 24247, 91, 1692, 43, 185, 3283, 4659, 12167, 407, 91, 13547, 185, 24374, 19362, 207, 22, 21, 407, 91, 11914, 40, 185, 47, 1389, 23218, 324, 4103, 91, 11914, 55, 185, 9915, 1561, 27258, 380, 1419, 89, 407, 91, 47, 1692, 185, 50, 19524, 28899, 23646, 91, 50, 2585, 185, 23920, 16924, 2566, 2750, 91, 50, 3146, 185, 17917, 25062, 5174, 24022, 91, 9516, 34, 185, 25869, 16466, 432, 1870, 710, 91, 51, 1692, 185, 52, 23667, 565, 10534, 91, 3219, 32, 185, 44, 4522, 262, 452, 368, 4877, 9123, 91, 30695, 185, 54, 7599, 422, 529, 2539, 91, 54, 3146, 185, 7983, 22852, 375, 382, 875, 91, 35, 2421, 185, 8061, 23106, 31538, 1542, 91, 3388, 32, 185, 185, 13518, 21539, 2881, 15143, 25, 185, 9138, 2547, 62, 1523, 62, 5816, 285, 2547, 62, 1523, 62, 11507, 276, 4168, 9474, 276, 254, 2612, 2365, 13, 7310, 2547, 62, 356, 26321, 335, 62, 5816, 285, 2547, 62, 356, 26321, 335, 2292, 276, 4168, 9474, 276, 254, 746, 62, 16204, 2365, 13, 185, 185, 1889, 6226, 457, 4314, 11, 931, 4314, 62, 304, 405, 651, 17, 19393, 19393, 6683, 185, 185, 15013, 25, 2147, 748, 13024, 473, 207, 17, 15, 15, 20, 11, 931, 245, 6158, 833, 25, 4314, 62, 304, 405, 651, 17, 17, 15, 15, 20, 6683, 2147, 748, 13024, 473, 207, 16, 24, 22, 17, 11, 931, 245, 6158, 833, 25, 4314, 62, 304, 405, 440, 17, 16, 24, 22, 17, 2770, 2147, 748, 13024, 473, 207, 17, 15, 16, 20, 11, 931, 245, 6158, 833, 25, 4314, 62, 304, 405, 440, 17, 17, 15, 16, 20, 2770, 185, 185, 2269, 18912, 12780, 967, 7688, 10115, 285, 4934, 20976, 29980, 13, 185, 185, 13518, 18531, 10481, 10413, 6074, 285, 5975, 547, 3130, 7486, 185, 4397, 25, 185, 1, 2628, 317, 254, 1093, 3472, 254, 10851, 14204, 412, 9961, 463, 2634, 18605, 429, 1712, 1956, 185, 6231, 547, 25, 185, 7507, 21234, 7, 462, 82, 62, 5816, 8, 185, 14092, 2612, 185, 20013, 2547, 62, 1523, 62, 5816, 405, 651, 43, 378, 14204, 412, 9961, 4057, 185, 185, 4397, 25, 185, 1, 15575, 9474, 417, 6288, 279, 254, 1967, 280, 8700, 1956, 185, 6231, 547, 25, 185, 7507, 2192, 62, 1523, 7432, 2547, 11294, 1967, 405, 651, 9517, 351, 8092, 4057, 185, 185, 4397, 25, 185, 1, 15575, 2547, 658, 254, 7495, 1594, 280, 2547, 1936, 17396, 279, 274, 2292, 2612, 1956, 185, 6231, 547, 25, 185, 7507, 2547, 62, 356, 26321, 335, 62, 11507, 7432, 746, 62, 16204, 25554, 9784, 2547, 62, 788, 17396, 62, 11507, 22187, 34, 29731, 207, 16, 26, 185, 185, 4397, 25, 185, 1, 15575, 9474, 773, 16316, 1321, 207, 16, 24, 22, 24, 1956, 185, 6231, 547, 25, 185, 7507, 2192, 62, 1523, 7432, 2547, 11294, 1008, 62, 10246, 271, 8086, 16, 24, 22, 24, 26, 185, 185, 4397, 25, 185, 1, 13000, 254, 13164, 339, 3467, 959, 8402, 1712, 14009, 7037, 279, 254, 207, 17, 15, 15, 23, 4314, 876, 185, 6231, 547, 25, 185, 7507, 21234, 7, 462, 82, 62, 5816, 567, 265, 1267, 62, 11507, 8, 4958, 10919, 62, 7541, 185, 14092, 2612, 185, 20013, 2547, 62, 1523, 62, 5816, 405, 651, 33, 11885, 339, 3467, 959, 6, 5584, 4314, 62, 304, 405, 651, 17, 17, 15, 15, 23, 4057, 185, 185, 7605, 387, 885, 254, 5975, 547, 5151, 3651, 3250, 457, 5975, 547, 25, 285, 637, 746, 2422, 13, 4195, 8297, 274, 5975, 547, 5151, 327, 254, 1884, 2664, 3092, 13, 185, 4397, 25, 185, 2628, 317, 254, 5126, 1594, 280, 267, 70, 62, 79, 296, 279, 1712, 4951, 457, 254, 11738, 21915, 82, 30, 185, 6231, 547, 25, 185, 7507, 338, 23238, 7, 17982, 62, 79, 296, 62, 5816, 8, 7432, 2612, 11294, 2547, 62, 1523, 62, 5816, 405, 651, 1915, 10595, 21915, 82, 4057, 32022], 'attention_mask': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 'labels': [-100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, 185, 207, 440, 13289, 62, 10646, 62, 11507, 1, 3379, 4463, 18924, 11, 243, 1585, 14751, 14, 10646, 14026, 327, 254, 2292, 2547, 185, 207, 440, 12986, 62, 16647, 62, 11507, 1, 3379, 4463, 18924, 11, 1585, 2325, 278, 980, 3192, 3905, 317, 2315, 334, 16, 405, 7589, 11, 207, 15, 405, 2357, 8, 185, 207, 440, 21810, 62, 2139, 1, 323, 13532, 3137, 1585, 3980, 996, 4314, 409, 1530, 23836, 185, 477, 185, 185, 185, 13518, 3649, 8070, 25, 185, 12, 9338, 387, 245, 4629, 5975, 547, 5151, 276, 24174, 7688, 1189, 473, 254, 4892, 13, 185, 12, 7310, 3812, 4761, 9699, 2842, 331, 254, 4274, 16135, 13, 185, 12, 20239, 885, 254, 5975, 547, 5151, 372, 8803, 2422, 13, 185, 185, 13518, 11727, 9715, 9843, 25, 185, 769, 254, 8803, 818, 2664, 4301, 11, 885, 254, 2192, 2547, 4761, 540, 330, 1219, 11, 545, 279, 254, 12780, 340, 970, 931, 254, 2192, 2547, 4761, 409, 254, 31593, 715, 13, 207, 185, 546, 2192, 2547, 4761, 482, 330, 1219, 365, 254, 2612, 2365, 11, 1470, 254, 31593, 715, 1020, 330, 1219, 365, 254, 746, 62, 16204, 2365, 13, 185, 27298, 653, 417, 14843, 457, 254, 939, 3188, 279, 254, 1884, 1517, 25, 185, 185, 3554, 75, 9568, 12499, 705, 91, 1392, 43, 185, 33, 11885, 339, 3467, 959, 91, 33, 2951, 185, 34, 28412, 339, 22281, 4961, 91, 34, 1535, 185, 4843, 24270, 19871, 9017, 91, 45, 5080, 185, 1915, 10595, 21915, 82, 91, 3388, 40, 185, 35, 20315, 6658, 329, 6388, 91, 35, 1743, 185, 23559, 329, 461, 905, 16806, 91, 35, 1732, 185, 25884, 255, 4734, 6370, 25546, 91, 11096, 54, 185, 39, 264, 7664, 10602, 1542, 91, 11317, 52, 185, 43, 378, 14204, 1854, 515, 6474, 91, 43, 2585, 185, 43, 378, 14204, 412, 9961, 91, 43, 1743, 185, 44, 20452, 31410, 91, 44, 7183, 185, 26389, 86, 1766, 25032, 380, 14450, 91, 44, 4470, 185, 7729, 21603, 10389, 696, 86, 313, 1596, 91, 19293, 185, 22120, 541, 18679, 461, 1542, 91, 33, 42, 45, 185, 4843, 4420, 716, 5072, 705, 91, 25399, 42, 185, 3161, 30075, 24247, 91, 1692, 43, 185, 3283, 4659, 12167, 407, 91, 13547, 185, 24374, 19362, 207, 22, 21, 407, 91, 11914, 40, 185, 47, 1389, 23218, 324, 4103, 91, 11914, 55, 185, 9915, 1561, 27258, 380, 1419, 89, 407, 91, 47, 1692, 185, 50, 19524, 28899, 23646, 91, 50, 2585, 185, 23920, 16924, 2566, 2750, 91, 50, 3146, 185, 17917, 25062, 5174, 24022, 91, 9516, 34, 185, 25869, 16466, 432, 1870, 710, 91, 51, 1692, 185, 52, 23667, 565, 10534, 91, 3219, 32, 185, 44, 4522, 262, 452, 368, 4877, 9123, 91, 30695, 185, 54, 7599, 422, 529, 2539, 91, 54, 3146, 185, 7983, 22852, 375, 382, 875, 91, 35, 2421, 185, 8061, 23106, 31538, 1542, 91, 3388, 32, 185, 185, 13518, 21539, 2881, 15143, 25, 185, 9138, 2547, 62, 1523, 62, 5816, 285, 2547, 62, 1523, 62, 11507, 276, 4168, 9474, 276, 254, 2612, 2365, 13, 7310, 2547, 62, 356, 26321, 335, 62, 5816, 285, 2547, 62, 356, 26321, 335, 2292, 276, 4168, 9474, 276, 254, 746, 62, 16204, 2365, 13, 185, 185, 1889, 6226, 457, 4314, 11, 931, 4314, 62, 304, 405, 651, 17, 19393, 19393, 6683, 185, 185, 15013, 25, 2147, 748, 13024, 473, 207, 17, 15, 15, 20, 11, 931, 245, 6158, 833, 25, 4314, 62, 304, 405, 651, 17, 17, 15, 15, 20, 6683, 2147, 748, 13024, 473, 207, 16, 24, 22, 17, 11, 931, 245, 6158, 833, 25, 4314, 62, 304, 405, 440, 17, 16, 24, 22, 17, 2770, 2147, 748, 13024, 473, 207, 17, 15, 16, 20, 11, 931, 245, 6158, 833, 25, 4314, 62, 304, 405, 440, 17, 17, 15, 16, 20, 2770, 185, 185, 2269, 18912, 12780, 967, 7688, 10115, 285, 4934, 20976, 29980, 13, 185, 185, 13518, 18531, 10481, 10413, 6074, 285, 5975, 547, 3130, 7486, 185, 4397, 25, 185, 1, 2628, 317, 254, 1093, 3472, 254, 10851, 14204, 412, 9961, 463, 2634, 18605, 429, 1712, 1956, 185, 6231, 547, 25, 185, 7507, 21234, 7, 462, 82, 62, 5816, 8, 185, 14092, 2612, 185, 20013, 2547, 62, 1523, 62, 5816, 405, 651, 43, 378, 14204, 412, 9961, 4057, 185, 185, 4397, 25, 185, 1, 15575, 9474, 417, 6288, 279, 254, 1967, 280, 8700, 1956, 185, 6231, 547, 25, 185, 7507, 2192, 62, 1523, 7432, 2547, 11294, 1967, 405, 651, 9517, 351, 8092, 4057, 185, 185, 4397, 25, 185, 1, 15575, 2547, 658, 254, 7495, 1594, 280, 2547, 1936, 17396, 279, 274, 2292, 2612, 1956, 185, 6231, 547, 25, 185, 7507, 2547, 62, 356, 26321, 335, 62, 11507, 7432, 746, 62, 16204, 25554, 9784, 2547, 62, 788, 17396, 62, 11507, 22187, 34, 29731, 207, 16, 26, 185, 185, 4397, 25, 185, 1, 15575, 9474, 773, 16316, 1321, 207, 16, 24, 22, 24, 1956, 185, 6231, 547, 25, 185, 7507, 2192, 62, 1523, 7432, 2547, 11294, 1008, 62, 10246, 271, 8086, 16, 24, 22, 24, 26, 185, 185, 4397, 25, 185, 1, 13000, 254, 13164, 339, 3467, 959, 8402, 1712, 14009, 7037, 279, 254, 207, 17, 15, 15, 23, 4314, 876, 185, 6231, 547, 25, 185, 7507, 21234, 7, 462, 82, 62, 5816, 567, 265, 1267, 62, 11507, 8, 4958, 10919, 62, 7541, 185, 14092, 2612, 185, 20013, 2547, 62, 1523, 62, 5816, 405, 651, 33, 11885, 339, 3467, 959, 6, 5584, 4314, 62, 304, 405, 651, 17, 17, 15, 15, 23, 4057, 185, 185, 7605, 387, 885, 254, 5975, 547, 5151, 3651, 3250, 457, 5975, 547, 25, 285, 637, 746, 2422, 13, 4195, 8297, 274, 5975, 547, 5151, 327, 254, 1884, 2664, 3092, 13, 185, 4397, 25, 185, 2628, 317, 254, 5126, 1594, 280, 267, 70, 62, 79, 296, 279, 1712, 4951, 457, 254, 11738, 21915, 82, 30, 185, 6231, 547, 25, 185, 7507, 338, 23238, 7, 17982, 62, 79, 296, 62, 5816, 8, 7432, 2612, 11294, 2547, 62, 1523, 62, 5816, 405, 651, 1915, 10595, 21915, 82, 4057, 32022]}\n", + "\n", + "You are an AI assistant that generates SQLite queries for an NBA database based on user questions.\n", + "\n", + "### Relevant Schema:\n", + "game Table\n", + "Contains detailed statistics for each NBA game, including home and away team performance.\n", + "CREATE TABLE IF NOT EXISTS \"game\" (\n", + " \"season_id\" TEXT, -- Season identifier, formatted as \"2YYYY\" (e.g., \"21970\" for the 1970 season)\n", + " \"team_id_home\" TEXT, -- ID of the home team (matches \"id\" in team table)\n", + " \"team_abbreviation_home\" TEXT, -- Abbreviation of the home team\n", + " \"team_name_home\" TEXT, -- Full name of the home team\n", + " \"game_id\" TEXT PRIMARY KEY, -- Unique identifier for the game\n", + " \"game_date\" TIMESTAMP, -- Date the game was played (YYYY-MM-DD format)\n", + " \"matchup_home\" TEXT, -- Matchup details including opponent (e.g., \"LAL vs. BOS\")\n", + " \"wl_home\" TEXT, -- \"W\" if the home team won, \"L\" if they lost\n", + " \"min\" INTEGER, -- Total minutes played in the game\n", + " \"fgm_home\" REAL, -- Field goals made by the home team\n", + " \"fga_home\" REAL, -- Field goals attempted by the home team\n", + " \"fg_pct_home\" REAL, -- Field goal percentage of the home team\n", + " \"fg3m_home\" REAL, -- Three-point field goals made by the home team\n", + " \"fg3a_home\" REAL, -- Three-point attempts by the home team\n", + " \"fg3_pct_home\" REAL, -- Three-point field goal percentage of the home team\n", + " \"ftm_home\" REAL, -- Free throws made by the home team\n", + " \"fta_home\" REAL, -- Free throws attempted by the home team\n", + " \"ft_pct_home\" REAL, -- Free throw percentage of the home team\n", + " \"oreb_home\" REAL, -- Offensive rebounds by the home team\n", + " \"dreb_home\" REAL, -- Defensive rebounds by the home team\n", + " \"reb_home\" REAL, -- Total rebounds by the home team\n", + " \"ast_home\" REAL, -- Assists by the home team\n", + " \"stl_home\" REAL, -- Steals by the home team\n", + " \"blk_home\" REAL, -- Blocks by the home team\n", + " \"tov_home\" REAL, -- Turnovers by the home team\n", + " \"pf_home\" REAL, -- Personal fouls by the home team\n", + " \"pts_home\" REAL, -- Total points scored by the home team\n", + " \"plus_minus_home\" INTEGER, -- Plus/minus rating for the home team\n", + " \"video_available_home\" INTEGER, -- Indicates whether video is available (1 = Yes, 0 = No)\n", + " \"team_id_away\" TEXT, -- ID of the away team\n", + " \"team_abbreviation_away\" TEXT, -- Abbreviation of the away team\n", + " \"team_name_away\" TEXT, -- Full name of the away team\n", + " \"matchup_away\" TEXT, -- Matchup details from the away team’s perspective\n", + " \"wl_away\" TEXT, -- \"W\" if the away team won, \"L\" if they lost\n", + " \"fgm_away\" REAL, -- Field goals made by the away team\n", + " \"fga_away\" REAL, -- Field goals attempted by the away team\n", + " \"fg_pct_away\" REAL, -- Field goal percentage of the away team\n", + " \"fg3m_away\" REAL, -- Three-point field goals made by the away team\n", + " \"fg3a_away\" REAL, -- Three-point attempts by the away team\n", + " \"fg3_pct_away\" REAL, -- Three-point field goal percentage of the away team\n", + " \"ftm_away\" REAL, -- Free throws made by the away team\n", + " \"fta_away\" REAL, -- Free throws attempted by the away team\n", + " \"ft_pct_away\" REAL, -- Free throw percentage of the away team\n", + " \"oreb_away\" REAL, -- Offensive rebounds by the away team\n", + " \"dreb_away\" REAL, -- Defensive rebounds by the away team\n", + " \"reb_away\" REAL, -- Total rebounds by the away team\n", + " \"ast_away\" REAL, -- Assists by the away team\n", + " \"stl_away\" REAL, -- Steals by the away team\n", + " \"blk_away\" REAL, -- Blocks by the away team\n", + " \"tov_away\" REAL, -- Turnovers by the away team\n", + " \"pf_away\" REAL, -- Personal fouls by the away team\n", + " \"pts_away\" REAL, -- Total points scored by the away team\n", + " \"plus_minus_away\" INTEGER, -- Plus/minus rating for the away team\n", + " \"video_available_away\" INTEGER, -- Indicates whether video is available (1 = Yes, 0 = No)\n", + " \"season_type\" TEXT -- Regular season or playoffs\n", + ");\n", + "\n", + "\n", + "### Instructions:\n", + "- Generate a valid SQLite query to retrieve relevant data from the database.\n", + "- Use column names correctly based on the provided schema.\n", + "- Output only the SQLite query as plain text.\n", + "\n", + "### Team Name Information:\n", + "In the plaintext user questions, only the full team names will be used, but in the queries you may use the full team names or the abbreviations. \n", + "The full team names can be used with the game table, while the abbreviations should be used with the other_stats table.\n", + "Notice they are separated by the | character in the following list:\n", + "\n", + "Atlanta Hawks|ATL\n", + "Boston Celtics|BOS\n", + "Cleveland Cavaliers|CLE\n", + "New Orleans Pelicans|NOP\n", + "Chicago Bulls|CHI\n", + "Dallas Mavericks|DAL\n", + "Denver Nuggets|DEN\n", + "Golden State Warriors|GSW\n", + "Houston Rockets|HOU\n", + "Los Angeles Clippers|LAC\n", + "Los Angeles Lakers|LAL\n", + "Miami Heat|MIA\n", + "Milwaukee Bucks|MIL\n", + "Minnesota Timberwolves|MIN\n", + "Brooklyn Nets|BKN\n", + "New York Knicks|NYK\n", + "Orlando Magic|ORL\n", + "Indiana Pacers|IND\n", + "Philadelphia 76ers|PHI\n", + "Phoenix Suns|PHX\n", + "Portland Trail Blazers|POR\n", + "Sacramento Kings|SAC\n", + "San Antonio Spurs|SAS\n", + "Oklahoma City Thunder|OKC\n", + "Toronto Raptors|TOR\n", + "Utah Jazz|UTA\n", + "Memphis Grizzlies|MEM\n", + "Washington Wizards|WAS\n", + "Detroit Pistons|DET\n", + "Charlotte Hornets|CHA\n", + "\n", + "### Query Guidelines:\n", + "Use team_name_home and team_name_away to match teams to the game table. Use team_abbreviation_home and team_abbreviation away to match teams to the other_stats table.\n", + "\n", + "To filter by season, use season_id = '2YYYY'.\n", + "\n", + "Example: To get statistics from 2005, use a statement like: season_id = '22005'. To get statistics from 1972, use a statement like: season_id = \"21972\". To get statistics from 2015, use a statement like: season_id = \"22015\".\n", + "\n", + "Ensure queries return relevant columns and avoid unnecessary joins.\n", + "\n", + "### Example User Requests and SQLite Queries\n", + "Request:\n", + "\"What is the most points the Los Angeles Lakers have ever scored at home?\"\n", + "SQLite:\n", + "SELECT MAX(pts_home)\n", + "FROM game\n", + "WHERE team_name_home = 'Los Angeles Lakers';\n", + "\n", + "Request:\n", + "\"Which teams are located in the state of California?\"\n", + "SQLite:\n", + "SELECT full_name FROM team WHERE state = 'California';\n", + "\n", + "Request:\n", + "\"Which team had the highest number of team turnovers in an away game?\"\n", + "SQLite:\n", + "SELECT team_abbreviation_away FROM other_stats ORDER BY team_turnovers_away DESC LIMIT 1;\n", + "\n", + "Request:\n", + "\"Which teams were founded before 1979?\"\n", + "SQLite:\n", + "SELECT full_name FROM team WHERE year_founded < 1979;\n", + "\n", + "Request:\n", + "\"Find the Boston Celtics largest home victory margin in the 2008 season.\"\n", + "SQLite:\n", + "SELECT MAX(pts_home - pts_away) AS biggest_win\n", + "FROM game\n", + "WHERE team_name_home = 'Boston Celtics' AND season_id = '22008';\n", + "\n", + "Generate only the SQLite query prefaced by SQLite: and no other text. Now generate an SQLite query for the following user request.\n", + "Request:\n", + "What is the average number of fg_pct in home games by the Chicago Bulls?\n", + "SQLite:\n", + "SELECT AVG(fg_pct_home) FROM game WHERE team_name_home = 'Chicago Bulls';\n" + ] + } + ], + "source": [ + "for v in val_dataset:\n", + " print(v)\n", + " print(tokenizer.decode(v['input_ids'], skip_special_tokens=True))\n", + " break\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "8890a657", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "8890a657", + "outputId": "95b9971d-d446-432b-9faa-baa1c060d66a" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "trainable params: 14,991,360 || all params: 1,361,463,296 || trainable%: 1.1011\n" + ] + } + ], + "source": [ + "# Define LoRA configuration\n", + "lora_config = LoraConfig(\n", + " r=16, # Rank of LoRA matrices (adjust for memory vs. accuracy)\n", + " lora_alpha=32, # Scaling factor\n", + " lora_dropout=0.0, # Dropout for regularization\n", + " bias=\"none\",\n", + " task_type=TaskType.CAUSAL_LM,\n", + " target_modules=[\n", + " \"q_proj\",\n", + " \"k_proj\",\n", + " \"v_proj\",\n", + " \"o_proj\",\n", + " \"gate_proj\",\n", + " \"up_proj\",\n", + " \"down_proj\"\n", + " ]\n", + ")\n", + "\n", + "# Wrap model with LoRA adapters\n", + "model = get_peft_model(model, lora_config)\n", + "model = model.to(device)\n", + "model.print_trainable_parameters() # Show trainable parameters count" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "d9508451", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "d9508451", + "outputId": "d004fa38-78a0-49ee-eed5-bbc6373ccae2" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":21: FutureWarning: `tokenizer` is deprecated and will be removed in version 5.0.0 for `Trainer.__init__`. Use `processing_class` instead.\n", + " trainer = Trainer(\n", + "No label_names provided for model class `PeftModelForCausalLM`. Since `PeftModel` hides base models input arguments, if label_names is not given, label_names can't be set automatically within `Trainer`. Note that empty label_names list will be used instead.\n" + ] + } + ], + "source": [ + "training_args = TrainingArguments(\n", + " output_dir=MODEL_DIR,\n", + " eval_strategy=\"epoch\", # Evaluate at the end of each epoch\n", + " save_strategy=\"epoch\", # Save model every epoch\n", + " per_device_train_batch_size=1, # LoRA allows higher batch size\n", + " per_device_eval_batch_size=1,\n", + " gradient_accumulation_steps=16,\n", + " num_train_epochs=10, # Increase if needed\n", + " learning_rate=5e-5, # Higher LR since we're only training LoRA layers\n", + " weight_decay=0.001,\n", + " logging_steps=50, # Print loss every 50 steps\n", + " save_total_limit=2, # Keep last 4 checkpoints\n", + " bf16=True if torch.cuda.is_available() else False,\n", + " push_to_hub=False,\n", + " load_best_model_at_end=True,\n", + " metric_for_best_model=\"eval_loss\",\n", + " greater_is_better=False\n", + ")\n", + "\n", + "# Trainer setup\n", + "trainer = Trainer(\n", + " model=model,\n", + " args=training_args,\n", + " train_dataset=train_dataset,\n", + " eval_dataset=val_dataset,\n", + " tokenizer=tokenizer,\n", + " callbacks=[EarlyStoppingCallback(early_stopping_patience=2)]\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b0ff5278", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 214 + }, + "id": "b0ff5278", + "outputId": "07e6446f-c680-4532-caad-d62a7d3edd6d" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m\u001b[1mwandb\u001b[0m: \u001b[33mWARNING\u001b[0m The `run_name` is currently set to the same value as `TrainingArguments.output_dir`. If this was not intended, please specify a different run name by setting the `TrainingArguments.run_name` parameter.\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: Using wandb-core as the SDK backend. Please refer to https://wandb.me/wandb-core for more information.\n", + "\u001b[34m\u001b[1mwandb\u001b[0m: Currently logged in as: \u001b[33mlicesma\u001b[0m (\u001b[33mlicesma-usc\u001b[0m) to \u001b[32mhttps://api.wandb.ai\u001b[0m. Use \u001b[1m`wandb login --relogin`\u001b[0m to force relogin\n" + ] + }, + { + "data": { + "text/html": [ + "Tracking run with wandb version 0.19.9" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Run data is saved locally in /content/wandb/run-20250420_174906-5ypbflqe" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "Syncing run /content/drive/MyDrive/sql_gen/dyn_rag_test to Weights & Biases (docs)
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + " View project at https://wandb.ai/licesma-usc/huggingface" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + " View run at https://wandb.ai/licesma-usc/huggingface/runs/5ypbflqe" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "
\n", + " \n", + " \n", + " [ 4/580 00:11 < 54:56, 0.17 it/s, Epoch 0.05/10]\n", + "
\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
EpochTraining LossValidation Loss

" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Run training\n", + "trainer.train()\n", + "\n", + "# Merge LoRA adapters with the base model before saving\n", + "model = model.merge_and_unload()\n", + "model.save_pretrained(MODEL_DIR)\n", + "tokenizer.save_pretrained(MODEL_DIR)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "J7qO7FE73i40", + "metadata": { + "id": "J7qO7FE73i40" + }, + "outputs": [], + "source": [ + "\n", + "# Prepare query with the same prompt\n", + "input_text = \"How many points do the Los Angeles Lakers average at home?\"\n", + "message = [{'role': 'user', 'content': input_prompt + input_text}]\n", + "inputs = tokenizer.apply_chat_template(message, add_generation_prompt=True, return_tensors=\"pt\").to(model.device)\n", + "\n", + "# Generate Tables\n", + "outputs = model.generate(\n", + " inputs,\n", + " max_new_tokens=256,\n", + ")\n", + "model_output = tokenizer.decode(outputs[0][len(inputs[0]):], skip_special_tokens=True)\n", + "\n", + "print(\"Generated Tables:\", model_output)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "kwHMVyQa3n89", + "metadata": { + "id": "kwHMVyQa3n89" + }, + "outputs": [], + "source": [ + "import sqlite3 as sql\n", + "\n", + "prompt_length = len(input_prompt)\n", + "\n", + "print(prompt_length)\n", + "\n", + "# Create connection to sqlite3 database\n", + "connection = sql.connect(read_path('nba-data/nba.sqlite'))\n", + "cursor = connection.cursor()\n", + "\n", + "for v in val_dataset:\n", + " full_example = tokenizer.decode(v[\"input_ids\"], skip_special_tokens=True)\n", + " user_prompt = full_example[:prompt_length]\n", + " question, tables = full_example[prompt_length:].split(\"Tables:\\n\")\n", + " print(question)\n", + " print(tables)\n", + " break\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "LhiHqAaB9uE4", + "metadata": { + "id": "LhiHqAaB9uE4" + }, + "outputs": [], + "source": [ + "def extract_tables_from_string(s):\n", + " keywords = {\"game\", \"team\", \"other_stats\"}\n", + " found = {k for k in keywords if k in s}\n", + " return found" + ] + }, + { + "cell_type": "markdown", + "id": "Kdd8nxWD9txh", + "metadata": { + "id": "Kdd8nxWD9txh" + }, + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "KjAXaUgp4TfY", + "metadata": { + "id": "KjAXaUgp4TfY" + }, + "outputs": [], + "source": [ + "def compare_table_lists(actual_tables, generated_tables):\n", + " actual_set = extract_tables_from_string(actual_tables)\n", + " generated_set = extract_tables_from_string(generated_tables)\n", + "\n", + " # Check if they match\n", + " return generated_set == actual_set" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8h7bpMML6G6v", + "metadata": { + "id": "8h7bpMML6G6v" + }, + "outputs": [], + "source": [ + "\n", + "num_sql_matched = 0\n", + "\n", + "first_actual = []\n", + "first_model = []\n", + "print(\"Evaluating...\")\n", + "for v in val_dataset:\n", + " full_example = tokenizer.decode(v[\"input_ids\"], skip_special_tokens=True)\n", + " user_prompt = full_example[:prompt_length]\n", + " question, training_tables = full_example[prompt_length:].split(\"Tables:\\n\")\n", + " #print(question)\n", + " #print(sql_query)\n", + "\n", + " # Obtain model output\n", + " message = [{'role': 'user', 'content': input_prompt + question}]\n", + " inputs = tokenizer.apply_chat_template(message, add_generation_prompt=True, return_tensors=\"pt\").to(model.device)\n", + "\n", + " # Generate SQL query\n", + " outputs = model.generate(\n", + " inputs,\n", + " max_new_tokens=256,\n", + " pad_token_id=tokenizer.eos_token_id,\n", + " )\n", + " model_output = tokenizer.decode(outputs[0][len(inputs[0]):], skip_special_tokens=True)\n", + " after_last_colon = model_output.rsplit(\":\", 1)[-1]\n", + " tables_string = after_last_colon.replace('\\n', '').replace('\\r', '')\n", + " #print(\"Training tables:\", training_tables)\n", + " #print(\"Model tables:\", tables_string.split(\" \"))\n", + " first_actual = training_tables\n", + " first_model = tables_string\n", + " result = compare_table_lists(training_tables, tables_string)\n", + " if result:\n", + " num_sql_matched += 1\n", + "\n", + "print(\"Accuracy :\", num_sql_matched/len(val_dataset))\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "CoJeZ4FoUMp_", + "metadata": { + "id": "CoJeZ4FoUMp_" + }, + "outputs": [], + "source": [ + "\n", + "num_sql_matched = 0\n", + "\n", + "first_actual = []\n", + "first_model = []\n", + "print(\"Evaluating...\")\n", + "for v in val_dataset:\n", + " full_example = tokenizer.decode(v[\"input_ids\"], skip_special_tokens=True)\n", + " user_prompt = full_example[:prompt_length]\n", + " question, training_tables = full_example[prompt_length:].split(\"Tables:\\n\")\n", + " #print(question)\n", + " #print(sql_query)\n", + "\n", + " # Obtain model output\n", + " message = [{'role': 'user', 'content': input_prompt + question}]\n", + " inputs = tokenizer.apply_chat_template(message, add_generation_prompt=True, return_tensors=\"pt\").to(model.device)\n", + "\n", + " # Generate SQL query\n", + " outputs = model.generate(\n", + " inputs,\n", + " max_new_tokens=256,\n", + " pad_token_id=tokenizer.eos_token_id,\n", + " )\n", + " model_output = tokenizer.decode(outputs[0][len(inputs[0]):], skip_special_tokens=True)\n", + " after_last_colon = model_output.rsplit(\":\", 1)[-1]\n", + " tables_string = after_last_colon.replace('\\n', '').replace('\\r', '')\n", + " #print(\"Training tables:\", training_tables)\n", + " #print(\"Model tables:\", tables_string.split(\" \"))\n", + " first_actual = training_tables\n", + " first_model = tables_string\n", + " result = compare_table_lists(training_tables, tables_string)\n", + " if result:\n", + " num_sql_matched += 1\n", + "\n", + "print(\"Accuracy :\", num_sql_matched/len(val_dataset))\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "lNG1joS3T8DN", + "metadata": { + "id": "lNG1joS3T8DN" + }, + "outputs": [], + "source": [ + "model = AutoModelForCausalLM.from_pretrained(MODEL_DIR, torch_dtype=torch.bfloat16, device_map=device)\n", + "tokenizer = AutoTokenizer.from_pretrained(MODEL_DIR)\n" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "gpuType": "A100", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "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.12.6" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "13ae11c314664c44ae18d35cf57a1334": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "17ddbb74e1764f37b8d34c311fae200c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_84cc47dc70864bf3aa7599c06eb13c51", + "placeholder": "​", + "style": "IPY_MODEL_5d711bb927024d8d9f9b8bb685d6f388", + "value": "Fetching 37 files: 100%" + } + }, + "1a8c093fccbb437db6e0390a920f5cc5": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_13ae11c314664c44ae18d35cf57a1334", + "max": 1044, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_e68cfd05ba994a34b93107d2eab82ad3", + "value": 1044 + } + }, + "1ec5329ea0434df4b74d0f311e016c3e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "3b80c66e0f384c45ab4187301599fab2": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "4c41e81bcd254df7b1265206a5a6b40b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_dd24270dc07942a6972fbfaf58129989", + "placeholder": "​", + "style": "IPY_MODEL_643903cd7a5b4a52a4687ec38eb8c4dc", + "value": "Map: 100%" + } + }, + "5d711bb927024d8d9f9b8bb685d6f388": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "5d89a5574a3d4a8993e6dca78d406d2d": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "643903cd7a5b4a52a4687ec38eb8c4dc": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "68ff2fc00bd041e7b79a811e3de1e596": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_4c41e81bcd254df7b1265206a5a6b40b", + "IPY_MODEL_1a8c093fccbb437db6e0390a920f5cc5", + "IPY_MODEL_e11d04a9d22a4229922e3eb4e3eb6466" + ], + "layout": "IPY_MODEL_5d89a5574a3d4a8993e6dca78d406d2d" + } + }, + "7751defbc4534d518d9e923b9019aa8b": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "84cc47dc70864bf3aa7599c06eb13c51": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "9200f1303f124bddaa6114cdf0f5f878": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_17ddbb74e1764f37b8d34c311fae200c", + "IPY_MODEL_ef732739334b4ac593fd665e01cd83c1", + "IPY_MODEL_949ee3d1a9cd4060864dec5d4283ef2c" + ], + "layout": "IPY_MODEL_b98629e053674527aacca899ab7f11a9" + } + }, + "949ee3d1a9cd4060864dec5d4283ef2c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_7751defbc4534d518d9e923b9019aa8b", + "placeholder": "​", + "style": "IPY_MODEL_fe6352bce22a40e7a936e7f90313bd02", + "value": " 37/37 [00:00<00:00, 3657.54it/s]" + } + }, + "b98629e053674527aacca899ab7f11a9": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "db6a23e658a34722a8f22505c6ace7b4": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "dd24270dc07942a6972fbfaf58129989": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "e11d04a9d22a4229922e3eb4e3eb6466": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_ea283e7e8b234519b881c562b7eb01d3", + "placeholder": "​", + "style": "IPY_MODEL_1ec5329ea0434df4b74d0f311e016c3e", + "value": " 1044/1044 [00:10<00:00, 43.90 examples/s]" + } + }, + "e68cfd05ba994a34b93107d2eab82ad3": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "ea283e7e8b234519b881c562b7eb01d3": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ef732739334b4ac593fd665e01cd83c1": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_3b80c66e0f384c45ab4187301599fab2", + "max": 37, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_db6a23e658a34722a8f22505c6ace7b4", + "value": 37 + } + }, + "fe6352bce22a40e7a936e7f90313bd02": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + } + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}