From aa5ae349c4ef9d611c353c8ee346e5503ddf449b Mon Sep 17 00:00:00 2001 From: Colin Jarvis Date: Tue, 23 Jan 2024 13:08:33 +0000 Subject: [PATCH 1/6] Adding LLM eval for SQL generation notebook --- ..._to_evaluate_LLMs_for_SQL_generation.ipynb | 2000 +++++++++++++++++ registry.yaml | 9 + 2 files changed, 2009 insertions(+) create mode 100644 examples/evaluation/How_to_evaluate_LLMs_for_SQL_generation.ipynb diff --git a/examples/evaluation/How_to_evaluate_LLMs_for_SQL_generation.ipynb b/examples/evaluation/How_to_evaluate_LLMs_for_SQL_generation.ipynb new file mode 100644 index 0000000000..12d41772e8 --- /dev/null +++ b/examples/evaluation/How_to_evaluate_LLMs_for_SQL_generation.ipynb @@ -0,0 +1,2000 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "d5dd7679-5ed6-4243-8e0f-549f8118bff7", + "metadata": {}, + "source": [ + "# How to test and evaluate LLMs for SQL generation\n", + "\n", + "LLMs are fundamentatlly non-deterministic in their responses, this attribute makes them wonderfully creative and dynamic in their responses. However, this trait poses significant challenges in achieving consistency, a crucial aspect for integrating LLMs into production environments.\n", + "\n", + "The key to harnessing the potential of LLMs in practical applications lies in consistent and systematic evaluation. This enables the identification and rectification of inconsistencies and helps in monitoring progress over time as the application evolves.\n", + "\n", + "## Scope of this notebook\n", + "\n", + "This notebook aims to demonstrate a framework for evaluating LLMs, particularly focusing on:\n", + "\n", + "* **Unit Testing:** Essential for assessing individual components of the application.\n", + "* **Evaluation Metrics:** Methods to quantitatively measure the model's effectiveness.\n", + "* **Runbook Documentation:** A record of historical evaluations to track progress and regression.\n", + "\n", + "This example focuses on a natural language to SQL use case - code generation use cases fit well with this approach when you combine **code validation** with **code execution**, so your application can test code for real as it is generated to ensure consistency.\n", + "\n", + "Although this notebook uses SQL generation usecase to demonstrate the concept, the approach is generic and can be applied to a wide variety of LLM driven applications.\n", + "\n", + "We will use two versions of a prompt to perform SQL generation. We will then use the unit tests and evaluation functions to test the perforamance of the prompts. Specifically, in this demonstration, we will evaluate:\n", + "\n", + "1. The consistency of JSON response.\n", + "2. Syntactic correctness of SQL in response.\n", + "\n", + "\n", + "## Table of contents\n", + "\n", + "1. **[Setup](#Setup):** Install required libraries, download data consisting of SQL queries and corresponding natural language translations.\n", + "2. **[Test Development](#Test-development):** Create unit tests and define evaluation metrics for the SQL generation process.\n", + "4. **[Evaluation](#Evaluation):** Conduct tests using different prompts to assess the impact on performance.\n", + "5. **[Reporting](#Report):** Compile a report that succinctly presents the performance differences observed across various tests." + ] + }, + { + "cell_type": "markdown", + "id": "2913d615", + "metadata": {}, + "source": [ + "## Setup\n", + "\n", + "Import our libraries and the dataset we'll use, which is the natural language to SQL [b-mc2/sql-create-context](https://huggingface.co/datasets/b-mc2/sql-create-context) dataset from HuggingFace." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "245fcedb", + "metadata": {}, + "outputs": [], + "source": [ + "from datasets import load_dataset\n", + "from openai import OpenAI\n", + "import pandas as pd\n", + "import pydantic\n", + "import os\n", + "import sqlite3\n", + "from sqlite3 import Error\n", + "from pprint import pprint\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from dotenv import load_dotenv\n", + "\n", + "# Loads key from local .env file to setup API KEY in env variables\n", + "%reload_ext dotenv\n", + "%dotenv\n", + " \n", + "GPT_MODEL = 'gpt-3.5-turbo'\n", + "dataset = load_dataset(\"b-mc2/sql-create-context\")" + ] + }, + { + "cell_type": "markdown", + "id": "04c7fde6-d7dc-4a0d-b9a0-32858f3bac25", + "metadata": {}, + "source": [ + "### Looking at the dataset\n", + "\n", + "We use Huggingface datasets library to download SQL create context dataset. This dataset consists of:\n", + "\n", + "1. Question, expressed in natural language\n", + "2. Answer, expressed in SQL designed to answer the question in natural language.\n", + "3. Context, expressed as a CREATE SQL statement, that describes the table that may be used to answer the question.\n", + "\n", + "In our demonstration today, we will use LLM to attempt to answer the question (in natural language). The LLM will be expected to generate a CREATE SQL statement to create a context suitable to answer the user question and a coresponding SELECT SQL query designed to answer the user question completely.\n", + "\n", + "The dataset looks like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "f8027115", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
questionanswercontext
0How many heads of the departments are older th...SELECT COUNT(*) FROM head WHERE age > 56CREATE TABLE head (age INTEGER)
1List the name, born state and age of the heads...SELECT name, born_state, age FROM head ORDER B...CREATE TABLE head (name VARCHAR, born_state VA...
2List the creation year, name and budget of eac...SELECT creation, name, budget_in_billions FROM...CREATE TABLE department (creation VARCHAR, nam...
3What are the maximum and minimum budget of the...SELECT MAX(budget_in_billions), MIN(budget_in_...CREATE TABLE department (budget_in_billions IN...
4What is the average number of employees of the...SELECT AVG(num_employees) FROM department WHER...CREATE TABLE department (num_employees INTEGER...
\n", + "
" + ], + "text/plain": [ + " question \\\n", + "0 How many heads of the departments are older th... \n", + "1 List the name, born state and age of the heads... \n", + "2 List the creation year, name and budget of eac... \n", + "3 What are the maximum and minimum budget of the... \n", + "4 What is the average number of employees of the... \n", + "\n", + " answer \\\n", + "0 SELECT COUNT(*) FROM head WHERE age > 56 \n", + "1 SELECT name, born_state, age FROM head ORDER B... \n", + "2 SELECT creation, name, budget_in_billions FROM... \n", + "3 SELECT MAX(budget_in_billions), MIN(budget_in_... \n", + "4 SELECT AVG(num_employees) FROM department WHER... \n", + "\n", + " context \n", + "0 CREATE TABLE head (age INTEGER) \n", + "1 CREATE TABLE head (name VARCHAR, born_state VA... \n", + "2 CREATE TABLE department (creation VARCHAR, nam... \n", + "3 CREATE TABLE department (budget_in_billions IN... \n", + "4 CREATE TABLE department (num_employees INTEGER... " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sql_df = dataset['train'].to_pandas()\n", + "sql_df.head()" + ] + }, + { + "cell_type": "markdown", + "id": "b04cb5eb", + "metadata": {}, + "source": [ + "\n", + "## Test development\n", + "\n", + "To test to output of the LLM generations, we'll develop two unit tests and an evaluation, which will combine to give us a basic evaluation framework to grade the quality of our LLM iterations.\n", + "\n", + "To re-iterate, our purpose is to measure the correctness and consistency of LLM output given our questions.\n", + "\n", + "### Unit tests\n", + "\n", + "Unit tests should test the most granular components of your LLM application.\n", + "\n", + "For this section we'll develop unit tests to test the following:\n", + "- `test_valid_schema` will check that a parseable `create` and `select` statement are returned by the LLM.\n", + "- `test_llm_sql` will execute both the `create` and `select` statements on a `sqlite` database to ensure they are syntactically correct." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "eb811101", + "metadata": {}, + "outputs": [], + "source": [ + "from pydantic import BaseModel\n", + "\n", + "class LLMResponse(BaseModel):\n", + " \"\"\"This simple Class expects to receive a JSON string that can be parsed into a `create` and `select` statement.\"\"\"\n", + " create: str\n", + " select: str" + ] + }, + { + "cell_type": "markdown", + "id": "19fadf67-8b2f-4e17-95df-030a36aad90b", + "metadata": {}, + "source": [ + "#### Prompt\n", + "\n", + "For this demonstration purposes, we use a fairly simple prompt requesting GPT to generate a pair of context CREATE SQL and a answering SELECT SQL query. We supply the natural language question as part of the prompt. We request the response to be in JSON format, so that it can be parsed easily." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "c2be3ba4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('Translate this natural language request into a JSON object containing two '\n", + " 'SQL queries. \\n'\n", + " 'The first query should be a CREATE statement for a table answering the '\n", + " \"user's request, while the second should be a SELECT query answering their \"\n", + " 'question. \\n'\n", + " 'This should be returned as a JSON with keys \"create\" and \"select\". \\n'\n", + " 'For example:\\n'\n", + " '\\n'\n", + " '{\"create\": \"\"\"CREATE_QUERY\"\"\",\"select\": \"\"\"SELECT_QUERY\"\"\"}\"')\n" + ] + } + ], + "source": [ + "system_prompt = '''Translate this natural language request into a JSON object containing two SQL queries. \n", + "The first query should be a CREATE statement for a table answering the user's request, while the second should be a SELECT query answering their question. \n", + "This should be returned as a JSON with keys \"create\" and \"select\". \n", + "For example:\\n\\n{\"create\": \"\"\"CREATE_QUERY\"\"\",\"select\": \"\"\"SELECT_QUERY\"\"\"}\"'''\n", + "\n", + "pprint(system_prompt)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "3a20d712", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[{'content': 'Translate this natural language request into a JSON object '\n", + " 'containing two SQL queries. \\n'\n", + " 'The first query should be a CREATE statement for a table '\n", + " \"answering the user's request, while the second should be a \"\n", + " 'SELECT query answering their question. \\n'\n", + " 'This should be returned as a JSON with keys \"create\" and '\n", + " '\"select\". \\n'\n", + " 'For example:\\n'\n", + " '\\n'\n", + " '{\"create\": \"\"\"CREATE_QUERY\"\"\",\"select\": \"\"\"SELECT_QUERY\"\"\"}\"',\n", + " 'role': 'system'},\n", + " {'content': 'How many heads of the departments are older than 56 ?',\n", + " 'role': 'user'}]\n" + ] + } + ], + "source": [ + "# Compiling the system prompt and user question into message array\n", + "\n", + "messages = []\n", + "messages.append({\"role\": \"system\", \"content\": system_prompt})\n", + "messages.append({\"role\":\"user\",\"content\": sql_df.iloc[0]['question']})\n", + "pprint(messages)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "38b704b3-6f0e-4708-bc70-96723d69da6f", + "metadata": {}, + "outputs": [], + "source": [ + "# Sending the message array to GPT, requesting a response (ensure that you have API key loaded to Env for this step)\n", + "\n", + "client = OpenAI()\n", + "completion = client.chat.completions.create(model = GPT_MODEL, messages = messages)" + ] + }, + { + "cell_type": "markdown", + "id": "901e3bb7", + "metadata": {}, + "source": [ + "#### Check JSON formatting\n", + "\n", + "Our first simple unit test checks that the LLM response is parseable into the `LLMResponse` Pydantic class that we've defined.\n", + "\n", + "We'll test that our first response passes, then create a failing example to check that the check fails. This logic will be wrapped in a simple function `test_valid_schema`." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "2b057391-4f83-4b5a-8843-a9ee74bee871", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('{\"create\": \"CREATE TABLE departments (department_id INTEGER PRIMARY KEY, '\n", + " 'department_name TEXT, head_name TEXT, age INTEGER)\", \"select\": \"SELECT '\n", + " 'COUNT(*) FROM departments WHERE age > 56\"}')\n" + ] + } + ], + "source": [ + "# Viewing the output from GPT\n", + "\n", + "content = completion.choices[0].message.content\n", + "pprint(content)" + ] + }, + { + "cell_type": "markdown", + "id": "4b98bbb4-dd17-49bc-828c-e561abf5b481", + "metadata": {}, + "source": [ + "#### Validating the output schema\n", + "\n", + "We expect GPT to respond with a valid SQL, we can validate this using LLMResponse base model. `test_valid_schema` is designed to help us validate this." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "4c7133f1-74d6-43f1-9443-09a3f8308c35", + "metadata": {}, + "outputs": [], + "source": [ + "def test_valid_schema(content):\n", + " \"\"\"Tests whether the content provided can be parsed into our Pydantic model.\"\"\"\n", + " try:\n", + " LLMResponse.model_validate_json(content)\n", + " return True\n", + " # Catch pydantic's validation errors:\n", + " except pydantic.ValidationError as exc:\n", + " print(f\"ERROR: Invalid schema: {exc}\")\n", + " return False" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "6a9a9128", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test_valid_schema(content)" + ] + }, + { + "cell_type": "markdown", + "id": "78f1af23-4dd0-4860-8a1a-88e5146be6ed", + "metadata": {}, + "source": [ + "#### Testing negative scenario\n", + "\n", + "To simulate a scenario in which we get an invalid JSON response from GPT, we hardcode an invalid JSON as response. We expect `test_valid_schema` function to throw an exception." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "a0a26690", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ERROR: Invalid schema: 1 validation error for LLMResponse\n", + " Invalid JSON: expected value at line 1 column 1 [type=json_invalid, input_value='CREATE departments, select * from departments', input_type=str]\n", + " For further information visit https://errors.pydantic.dev/2.5/v/json_invalid\n" + ] + }, + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "failing_query = 'CREATE departments, select * from departments'\n", + "test_valid_schema(failing_query)" + ] + }, + { + "cell_type": "markdown", + "id": "a5fdc420-94cc-4e47-80e1-82bf51e44f2a", + "metadata": {}, + "source": [ + "As expected, we get an exception thrown from the `test_valid_schema` fucntion." + ] + }, + { + "cell_type": "markdown", + "id": "a4e972cd-5734-43c0-a103-b9ceb41552fd", + "metadata": {}, + "source": [ + "### Test SQL queries\n", + "\n", + "Next we'll validate the correctness of the SQL. This test will be desined to validate:\n", + "\n", + "1. The CREATE SQL returned in GPT response is syntactically correct.\n", + "2. The SELECT SQL returned in the GPT response is syntactically correct.\n", + "\n", + "To achieve this, we will use a sqlite instance. We will direct the retured SQL functions to a sqlite instance. If the SQL statements are valid, sqlite instance will accept and execute the statements; otherwise we will expect an exception to be thrown.\n", + "\n", + "`create_connection` function below will setup a sqlite instance (in-memory by default) and create a connection to be used later." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "9cc95481", + "metadata": {}, + "outputs": [], + "source": [ + "# Set up SQLite to act as our test database\n", + "def create_connection(db_file=\":memory:\"):\n", + " \"\"\"create a database connection to a SQLite database\"\"\"\n", + " try:\n", + " conn = sqlite3.connect(db_file)\n", + " # print(sqlite3.version)\n", + " except Error as e:\n", + " print(e)\n", + " return None\n", + "\n", + " return conn\n", + "\n", + "def close_connection(conn):\n", + " \"\"\"close a database connection\"\"\"\n", + " try:\n", + " conn.close()\n", + " except Error as e:\n", + " print(e)\n", + "\n", + "\n", + "conn = create_connection()" + ] + }, + { + "cell_type": "markdown", + "id": "aa5c5cb8-1c81-403b-a3f2-f2784d8235fc", + "metadata": {}, + "source": [ + "Next, we will create the following functions to carry out the syntactical correctness checks.\n", + "\n", + "\n", + "- `test_create`: Function testing if the CREATE SQL statement succeeds.\n", + "- `test_select`: Function testing if the SELECT SQL statement succeeds.\n", + "- `test_llm_sql`: Wrapper function executing the two tests above." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "c6d2573d", + "metadata": {}, + "outputs": [], + "source": [ + "def test_select(conn, cursor, select):\n", + " \"\"\"Tests that a SQLite select query can be executed successfully.\"\"\"\n", + " try:\n", + " print(f\"Testing select query: {select}\")\n", + " cursor.execute(select)\n", + " record = cursor.fetchall()\n", + " print(record)\n", + "\n", + " return True\n", + "\n", + " except sqlite3.Error as error:\n", + " print(\"Error while executing select query:\", error)\n", + "\n", + " return False\n", + "\n", + "\n", + "def test_create(conn, cursor, create):\n", + " \"\"\"Tests that a SQLite create query can be executed successfully\"\"\"\n", + " try:\n", + " print(f\"Testing create query: {create}\")\n", + " cursor.execute(create)\n", + " conn.commit()\n", + "\n", + " return True\n", + "\n", + " except sqlite3.Error as error:\n", + " print(\"Error while creating the SQLite table:\", error)\n", + "\n", + " return False\n", + "\n", + "\n", + "def test_llm_sql(LLMResponse):\n", + " \"\"\"Runs a suite of SQLite tests\"\"\"\n", + " try:\n", + " conn = create_connection()\n", + " cursor = conn.cursor()\n", + "\n", + " create_response = test_create(conn, cursor, LLMResponse.create)\n", + "\n", + " select_response = test_select(conn, cursor, LLMResponse.select)\n", + "\n", + " if conn:\n", + " close_connection(conn)\n", + "\n", + " if create_response is not True:\n", + " return False\n", + "\n", + " elif select_response is not True:\n", + " return False\n", + "\n", + " else:\n", + " return True\n", + "\n", + " except sqlite3.Error as error:\n", + " print(\"Error while creating a sqlite table\", error)\n", + "\n", + " return False" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "a9266753-4646-4901-bc14-632d3bf47aaa", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CREATE SQL is: CREATE TABLE departments (department_id INTEGER PRIMARY KEY, department_name TEXT, head_name TEXT, age INTEGER)\n", + "SELECT SQL is: SELECT COUNT(*) FROM departments WHERE age > 56\n" + ] + } + ], + "source": [ + "# Viewing CREATE and SELECT sqls returned by GPT\n", + "\n", + "test_query = LLMResponse.model_validate_json(content)\n", + "print(f\"CREATE SQL is: {test_query.create}\")\n", + "print(f\"SELECT SQL is: {test_query.select}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "83bc1f1b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Testing create query: CREATE TABLE departments (department_id INTEGER PRIMARY KEY, department_name TEXT, head_name TEXT, age INTEGER)\n", + "Testing select query: SELECT COUNT(*) FROM departments WHERE age > 56\n", + "[(0,)]\n" + ] + }, + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Testing the CREATE and SELECT sqls are valid (we expect this to be succesful)\n", + "\n", + "test_llm_sql(test_query)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "589c7cc7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Testing create query: CREATE TABLE departments (id INT, name VARCHAR(255), head_of_department VARCHAR(255))\n", + "Testing select query: SELECT COUNT(*) FROM departments WHERE age > 56\n", + "Error while executing select query: no such column: age\n" + ] + }, + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Again we'll perform a negative test to confirm that a failing SELECT will return an error.\n", + "\n", + "test_failure_query = '{\"create\": \"CREATE TABLE departments (id INT, name VARCHAR(255), head_of_department VARCHAR(255))\", \"select\": \"SELECT COUNT(*) FROM departments WHERE age > 56\"}'\n", + "test_failure_query = LLMResponse.model_validate_json(test_failure_query)\n", + "test_llm_sql(test_failure_query)" + ] + }, + { + "cell_type": "markdown", + "id": "8148f820", + "metadata": {}, + "source": [ + "### Evaluation\n", + "\n", + "The last component is to **evaluate** whether the generate SQL actually answers the user's question. This test will be performed by `gpt-4`, and will assess how **relevant** the produced SQL query is when compared to the initial user request.\n", + "\n", + "This is a simple example which adapts an approach outlined in the [G-Eval paper](https://arxiv.org/abs/2303.16634), and tested in one of our other [cookbooks](https://github.com/openai/openai-cookbook/blob/main/examples/evaluation/How_to_eval_abstractive_summarization.ipynb)." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "029c8426", + "metadata": {}, + "outputs": [], + "source": [ + "EVALUATION_MODEL = \"gpt-4\"\n", + "\n", + "EVALUATION_PROMPT_TEMPLATE = \"\"\"\n", + "You will be given one summary written for an article. Your task is to rate the summary on one metric.\n", + "Please make sure you read and understand these instructions very carefully. \n", + "Please keep this document open while reviewing, and refer to it as needed.\n", + "\n", + "Evaluation Criteria:\n", + "\n", + "{criteria}\n", + "\n", + "Evaluation Steps:\n", + "\n", + "{steps}\n", + "\n", + "Example:\n", + "\n", + "Request:\n", + "\n", + "{request}\n", + "\n", + "Queries:\n", + "\n", + "{queries}\n", + "\n", + "Evaluation Form (scores ONLY):\n", + "\n", + "- {metric_name}\n", + "\"\"\"\n", + "\n", + "# Relevance\n", + "\n", + "RELEVANCY_SCORE_CRITERIA = \"\"\"\n", + "Relevance(1-5) - review of how relevant the produced SQL queries are to the original question. \\\n", + "The queries should contain all points highlighted in the user's request. \\\n", + "Annotators were instructed to penalize queries which contained redundancies and excess information.\n", + "\"\"\"\n", + "\n", + "RELEVANCY_SCORE_STEPS = \"\"\"\n", + "1. Read the request and the queries carefully.\n", + "2. Compare the queries to the request document and identify the main points of the request.\n", + "3. Assess how well the queries cover the main points of the request, and how much irrelevant or redundant information it contains.\n", + "4. Assign a relevance score from 1 to 5.\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "85cfb78d", + "metadata": {}, + "outputs": [], + "source": [ + "def get_geval_score(\n", + " criteria: str, steps: str, request: str, queries: str, metric_name: str\n", + "):\n", + " \"\"\"Given evaluation criteria and an observation, this function uses EVALUATION GPT to evaluate the observation against those criteria.\n", + "\"\"\"\n", + " prompt = EVALUATION_PROMPT_TEMPLATE.format(\n", + " criteria=criteria,\n", + " steps=steps,\n", + " request=request,\n", + " queries=queries,\n", + " metric_name=metric_name,\n", + " )\n", + " response = client.chat.completions.create(\n", + " model=EVALUATION_MODEL,\n", + " messages=[{\"role\": \"user\", \"content\": prompt}],\n", + " temperature=0,\n", + " max_tokens=5,\n", + " top_p=1,\n", + " frequency_penalty=0,\n", + " presence_penalty=0,\n", + " )\n", + " return response.choices[0].message.content" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "607ee304", + "metadata": {}, + "outputs": [], + "source": [ + "# Test out evaluation on a few records\n", + "\n", + "evaluation_results = []\n", + "\n", + "for x,y in sql_df.head(3).iterrows():\n", + " \n", + " score = get_geval_score(RELEVANCY_SCORE_CRITERIA,RELEVANCY_SCORE_STEPS,y['question'],y['context'] + '\\n' + y['answer'],'relevancy')\n", + " \n", + " evaluation_results.append((y['question'],y['context'] + '\\n' + y['answer'],score))" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "bd1002c2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "User Question \t: How many heads of the departments are older than 56 ?\n", + "CREATE SQL Returned \t: CREATE TABLE head (age INTEGER)\n", + "SELECT SQL Returned \t: SELECT COUNT(*) FROM head WHERE age > 56\n", + "5\n", + "********************\n", + "User Question \t: List the name, born state and age of the heads of departments ordered by age.\n", + "CREATE SQL Returned \t: CREATE TABLE head (name VARCHAR, born_state VARCHAR, age VARCHAR)\n", + "SELECT SQL Returned \t: SELECT name, born_state, age FROM head ORDER BY age\n", + "5\n", + "********************\n", + "User Question \t: List the creation year, name and budget of each department.\n", + "CREATE SQL Returned \t: CREATE TABLE department (creation VARCHAR, name VARCHAR, budget_in_billions VARCHAR)\n", + "SELECT SQL Returned \t: SELECT creation, name, budget_in_billions FROM department\n", + "5\n", + "********************\n" + ] + } + ], + "source": [ + "for result in evaluation_results:\n", + " print(f\"User Question \\t: {result[0]}\")\n", + " print(f\"CREATE SQL Returned \\t: {result[1].splitlines()[0]}\")\n", + " print(f\"SELECT SQL Returned \\t: {result[1].splitlines()[1]}\")\n", + " print(f\"{result[2]}\")\n", + " print(\"*\" * 20)" + ] + }, + { + "cell_type": "markdown", + "id": "afe98f7a-3e88-437f-a5cd-d105969d3020", + "metadata": {}, + "source": [ + "## " + ] + }, + { + "cell_type": "markdown", + "id": "fe04c6c7", + "metadata": {}, + "source": [ + "## Putting it all together\n", + "\n", + "We'll now test these functions in combination including our unit test and evaluations to test out two system prompts.\n", + "\n", + "Each iteration of input/output and scores should be stored as a **run**. Optionally you can add GPT-4 annotation within your evaluations or as a separate step to review an entire run and highlight the reasons for errors.\n", + "\n", + "For this example, the second system prompt will include an extra line of clarification, so we can assess the impact of this for both SQL validity and quality of solution." + ] + }, + { + "cell_type": "markdown", + "id": "61b68e2a", + "metadata": {}, + "source": [ + "### First run - System Prompt 1\n", + "\n", + "The system under test is the first system prompt as shown below. This `run` will generate responses for this system prompt and evaluate the responses using the functions we've created so far." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "85c44a17", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('Translate this natural language request into a JSON object containing two SQL queries. \\n'\n", + " \"The first query should be a CREATE statement for a table answering the user's request, while the second should be a \"\n", + " 'SELECT query answering their question. \\n'\n", + " 'This should be returned as a JSON with keys \"create\" and \"select\". \\n'\n", + " 'For example:\\n'\n", + " '\\n'\n", + " '{\"create\": \"CREATE_QUERY\",\"select\": \"SELECT_QUERY\"}\" ')\n" + ] + } + ], + "source": [ + "# Set first system prompt\n", + "system_prompt = \"\"\"Translate this natural language request into a JSON object containing two SQL queries. \n", + "The first query should be a CREATE statement for a table answering the user's request, while the second should be a SELECT query answering their question. \n", + "This should be returned as a JSON with keys \"create\" and \"select\". \n", + "For example:\\n\\n{\"create\": \"CREATE_QUERY\",\"select\": \"SELECT_QUERY\"}\" \"\"\"\n", + "\n", + "pprint(system_prompt, width = 120)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "1244c44e", + "metadata": {}, + "outputs": [], + "source": [ + "def get_response(system_prompt,user_message,model=GPT_MODEL):\n", + " messages = []\n", + " messages.append({\"role\": \"system\", \"content\": system_prompt})\n", + " messages.append({\"role\":\"user\",\"content\": user_message})\n", + " \n", + " response = client.chat.completions.create(model=GPT_MODEL,messages=messages,temperature=0)\n", + " \n", + " return response.choices[0].message.content" + ] + }, + { + "cell_type": "markdown", + "id": "76c2723b-3060-400f-b6fe-c3c3c9d6907e", + "metadata": {}, + "source": [ + "#### Run the tests and evaluations\n", + "\n", + "The functions below, run unit test and evaluate responses" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "a98afa30", + "metadata": {}, + "outputs": [], + "source": [ + "def execute_unit_tests(input_df,output_list,system_prompt):\n", + " \"\"\"Unit testing function that takes in a dataframe and appends test results to an output_list.\n", + " The system prompt is configurable to allow us to test a couple with this framework.\"\"\"\n", + "\n", + " for x,y in input_df.iterrows():\n", + " model_response = get_response(system_prompt,y['question'])\n", + "\n", + " format_valid = test_valid_schema(model_response)\n", + "\n", + " try:\n", + " test_query = LLMResponse.model_validate_json(model_response)\n", + " sql_valid = test_llm_sql(test_query)\n", + "\n", + " except:\n", + " sql_valid = False\n", + "\n", + " output_list.append((y['question'],model_response,format_valid,sql_valid))\n", + " \n", + "def evaluate_row(row):\n", + " \"\"\"Simple evaluation function to categorize unit testing results. \n", + " If the format or SQL are flagged it returns a label, otherwise it is correct\"\"\"\n", + " if row['format'] == False:\n", + " return 'Format incorrect'\n", + " \n", + " elif row['sql'] == False:\n", + " return 'SQL incorrect'\n", + " \n", + " else:\n", + " return 'SQL correct'" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "898e5069", + "metadata": {}, + "outputs": [], + "source": [ + "# Select 100 unseen queries to test this one\n", + "test_df = sql_df.tail(50)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "2baec278", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Testing create query: CREATE TABLE partnerships (id INT, player1 VARCHAR(255), player2 VARCHAR(255), venue VARCHAR(255))\n", + "Testing select query: SELECT venue FROM partnerships WHERE player1 = 'shoaib malik' AND player2 = 'misbah-ul-haq'\n", + "[]\n", + "Testing create query: CREATE TABLE partnerships (id INT, player1 VARCHAR(255), player2 VARCHAR(255), venue VARCHAR(255))\n", + "Testing select query: SELECT venue FROM partnerships WHERE player1 = 'herschelle gibbs' AND player2 = 'justin kemp'\n", + "[]\n", + "Testing create query: CREATE TABLE Played (Number INT, Points INT)\n", + "Testing select query: SELECT * FROM Played WHERE Points = 310\n", + "[]\n", + "Testing create query: CREATE TABLE losing_bonus (bonus_id INT, points_against INT)\n", + "Testing select query: SELECT * FROM losing_bonus WHERE points_against = 588\n", + "[]\n", + "Testing create query: CREATE TABLE rugby_teams (team_name VARCHAR(255), tries_against INT, losing_bonus INT);\n", + "Testing select query: SELECT * FROM rugby_teams WHERE tries_against = 7;\n", + "[]\n", + "Testing create query: CREATE TABLE try_bonus (id INT, points_against INT, try_bonus VARCHAR(50))\n", + "Testing select query: SELECT try_bonus FROM try_bonus WHERE points_against = 488\n", + "[]\n", + "Testing create query: CREATE TABLE Points (Team VARCHAR(255), Try_Bonus INT)\n", + "Testing select query: SELECT Team FROM Points WHERE Try_Bonus = 140\n", + "[]\n", + "Testing create query: CREATE TABLE Drawn (Team TEXT, Tries_against INT);\n", + "Testing select query: SELECT * FROM Drawn WHERE Tries_against = 0;\n", + "[]\n", + "Testing create query: CREATE TABLE champion (id INT, name VARCHAR(255), reign_days INT, defenses INT)\n", + "Testing select query: SELECT days_held FROM champion WHERE reign_days > 3 AND defenses = 1\n", + "Error while executing select query: no such column: days_held\n", + "Testing create query: CREATE TABLE champion (id INT, name VARCHAR(255), reign_days INT, defenses INT);\n", + "Testing select query: SELECT days_held FROM champion WHERE reign_days > 3 AND defenses < 1;\n", + "Error while executing select query: no such column: days_held\n", + "Testing create query: CREATE TABLE champion_stats (champion_id INT, days_held INT, reign INT, defenses INT)\n", + "Testing select query: SELECT AVG(defenses) FROM champion_stats WHERE days_held = 404 AND reign > 1\n", + "[(None,)]\n", + "Testing create query: CREATE TABLE champions (name VARCHAR(255), days_held INT, defense INT)\n", + "Testing select query: SELECT MIN(defense) FROM champions WHERE days_held = 345\n", + "[(None,)]\n", + "Testing create query: CREATE TABLE records (date DATE, record VARCHAR(10))\n", + "Testing select query: SELECT date FROM records WHERE record = '76-72'\n", + "[]\n", + "Testing create query: CREATE TABLE attendance (game_id INT, loss VARCHAR(20), attendance INT);\n", + "Testing select query: SELECT attendance FROM attendance WHERE loss = 'Ponson (1-5)';\n", + "[]\n", + "Testing create query: CREATE TABLE records (day VARCHAR(10), record INT);\n", + "Testing select query: SELECT day FROM records WHERE record >= 36 AND record <= 39;\n", + "[]\n", + "Testing create query: CREATE TABLE records (id INT, date DATE);\n", + "Testing select query: SELECT date FROM records WHERE id = '30-31';\n", + "[]\n", + "Testing create query: CREATE TABLE games (game_id INT, opponent VARCHAR(255), result VARCHAR(255))\n", + "Testing select query: SELECT opponent FROM games WHERE result = 'loss' AND game_id = (SELECT game_id FROM games WHERE opponent = 'Leonard' AND result = '7–8')\n", + "[]\n", + "Testing create query: CREATE TABLE game_scores (record VARCHAR(10), score INT);\n", + "Testing select query: SELECT score FROM game_scores WHERE record = '18–43';\n", + "[]\n", + "Testing create query: CREATE TABLE game_scores (game_id INT, opponent VARCHAR(255), score INT)\n", + "Testing select query: SELECT score FROM game_scores WHERE opponent = 'Royals' AND record = '24–52'\n", + "Error while executing select query: no such column: record\n", + "Testing create query: CREATE TABLE game_scores (record VARCHAR(10), score INT);\n", + "Testing select query: SELECT score FROM game_scores WHERE record = '22–46';\n", + "[]\n", + "Testing create query: CREATE TABLE military_specialties (id INT, specialty_name VARCHAR(255), real_name VARCHAR(255))\n", + "Testing select query: SELECT real_name FROM military_specialties WHERE specialty_name = 'shock paratrooper'\n", + "[]\n", + "Testing create query: CREATE TABLE IF NOT EXISTS people (id INT PRIMARY KEY, name VARCHAR(255), birthplace VARCHAR(255))\n", + "Testing select query: SELECT birthplace FROM people WHERE name = 'Pete Sanderson'\n", + "[]\n", + "Testing create query: CREATE TABLE roles (id INT, name VARCHAR(255), role VARCHAR(255))\n", + "Testing select query: SELECT role FROM roles WHERE name = 'Jean-Luc Bouvier'\n", + "[]\n", + "Testing create query: CREATE TABLE pilots (id INT, name VARCHAR(255), kayak VARCHAR(255))\n", + "Testing select query: SELECT name FROM pilots WHERE kayak = 'silent attack kayak'\n", + "[]\n", + "Testing create query: CREATE TABLE persons (id INT, name VARCHAR(255), birthplace VARCHAR(255), code_name VARCHAR(255))\n", + "Testing select query: SELECT code_name FROM persons WHERE birthplace = 'Liverpool'\n", + "[]\n", + "Testing create query: CREATE TABLE medalists (name VARCHAR(255), sport VARCHAR(255))\n", + "Testing select query: SELECT name FROM medalists WHERE sport = 'canoeing'\n", + "[]\n", + "Testing create query: CREATE TABLE IF NOT EXISTS events (event_id INT, event_name VARCHAR(255), event_category VARCHAR(255), event_gender VARCHAR(255), event_weight VARCHAR(255))\n", + "Testing select query: SELECT event_name FROM events WHERE event_category = 'Women' AND event_weight = 'Half Middleweight'\n", + "[]\n", + "Testing create query: CREATE TABLE medals (id INT, athlete_name VARCHAR(255), medal VARCHAR(255), year INT, city VARCHAR(255))\n", + "Testing select query: SELECT athlete_name FROM medals WHERE medal = 'bronze' AND year = 2000 AND city = 'Sydney'\n", + "[]\n", + "Testing create query: CREATE TABLE attendance (id INT, opponent VARCHAR(255), attendees INT);\n", + "Testing select query: SELECT COUNT(*) FROM attendance WHERE opponent = 'twins';\n", + "[(0,)]\n", + "Testing create query: CREATE TABLE records (id INT, date DATE, record INT);\n", + "Testing select query: SELECT date FROM records WHERE record BETWEEN 41 AND 46;\n", + "[]\n", + "Testing create query: CREATE TABLE scores (id INT, record VARCHAR(10), score INT);\n", + "Testing select query: SELECT score FROM scores WHERE record = '48-55';\n", + "[]\n", + "Testing create query: CREATE TABLE scores (id INT, record VARCHAR(10), score INT);\n", + "Testing select query: SELECT score FROM scores WHERE record = '44-49';\n", + "[]\n", + "Testing create query: CREATE TABLE scores (Opponent TEXT, Record TEXT, Score INTEGER);\n", + "Testing select query: SELECT Score FROM scores WHERE Opponent = 'white sox' AND Record = '2-0';\n", + "[]\n", + "Testing create query: CREATE TABLE votes (candidate_name VARCHAR(255), vote_count INT);\n", + "Testing select query: SELECT vote_count FROM votes WHERE candidate_name = 'candice sjostrom';\n", + "[]\n", + "Testing create query: CREATE TABLE percentages (name VARCHAR(255), percentage FLOAT);\n", + "Testing select query: SELECT percentage FROM percentages WHERE name = 'chris wright';\n", + "[]\n", + "Testing create query: CREATE TABLE votes (year INT, candidate VARCHAR(255), vote_percentage FLOAT, office VARCHAR(255))\n", + "Testing select query: SELECT COUNT(*) FROM votes WHERE year > 1992 AND vote_percentage = 1.59 AND office = 'us representative 4'\n", + "[(0,)]\n", + "Testing create query: CREATE TABLE representatives (id INT, name VARCHAR(255), year_start INT, year_end INT)\n", + "Testing select query: SELECT year_start, year_end FROM representatives WHERE name = 'J. Smith Young'\n", + "[]\n", + "Testing create query: CREATE TABLE politicians (id INT, name VARCHAR(255), party VARCHAR(255))\n", + "Testing select query: SELECT party FROM politicians WHERE name = 'Thomas L. Young'\n", + "[]\n", + "Testing create query: CREATE TABLE medals (country TEXT, gold INTEGER, silver INTEGER, bronze INTEGER);\n", + "Testing select query: SELECT MIN(gold + silver + bronze) AS lowest_total_medals FROM medals WHERE gold = 0 AND silver > 1 AND bronze > 2;\n", + "[(None,)]\n", + "Testing create query: CREATE TABLE medals (country TEXT, rank INTEGER, gold INTEGER, silver INTEGER, bronze INTEGER, total INTEGER);\n", + "Testing select query: SELECT SUM(silver) AS total_silver FROM medals WHERE rank = 14 AND total < 1;\n", + "[(None,)]\n", + "Testing create query: CREATE TABLE player_stats (player_id INT, tackles INT, fumble_recoveries INT, forced_fumbles INT);\n", + "Testing select query: SELECT COUNT(tackles) FROM player_stats WHERE fumble_recoveries > 0 AND forced_fumbles > 0;\n", + "[(0,)]\n", + "Testing create query: CREATE TABLE forced_fumbles (player_name VARCHAR(255), solo_tackles INT, forced_fumbles INT);\n", + "Testing select query: SELECT COUNT(forced_fumbles) FROM forced_fumbles WHERE player_name = 'jim laney' AND solo_tackles < 2;\n", + "[(0,)]\n", + "Testing create query: CREATE TABLE player_stats (player_id INT, solo_tackles INT, total INT);\n", + "Testing select query: SELECT MAX(total) AS high_total FROM player_stats WHERE solo_tackles > 15;\n", + "[(None,)]\n", + "Testing create query: CREATE TABLE fumble_recoveries (player_name VARCHAR(255), forced_fumbles INT, sacks INT, solo_tackles INT, fumble_recoveries INT);\n", + "Testing select query: SELECT COUNT(fumble_recoveries) FROM fumble_recoveries WHERE player_name = 'scott gajos' AND forced_fumbles = 0 AND sacks = 0 AND solo_tackles < 2;\n", + "[(0,)]\n", + "Testing create query: CREATE TABLE matches (id INT, opponent VARCHAR(255), time VARCHAR(255), location VARCHAR(255))\n", + "Testing select query: SELECT opponent FROM matches WHERE time = '20:00 GMT' AND location = 'Camp Nou'\n", + "[]\n", + "Testing create query: CREATE TABLE matches (id INT, match_time TIME, score VARCHAR(5))\n", + "Testing select query: SELECT match_time FROM matches WHERE score = '3-2'\n", + "[]\n", + "Testing create query: CREATE TABLE grounds (id INT, name VARCHAR(255))\n", + "Testing select query: SELECT name FROM grounds WHERE id IN (SELECT ground_id FROM team_grounds WHERE team_id = (SELECT id FROM teams WHERE name = 'Aston Villa'))\n", + "Error while executing select query: no such table: team_grounds\n", + "Testing create query: CREATE TABLE competition (id INT, name VARCHAR(255), type VARCHAR(255), time TIMESTAMP);\n", + "Testing select query: SELECT type FROM competition WHERE time = '18:30 GMT' AND name = 'San Siro';\n", + "[]\n", + "Testing create query: CREATE TABLE decile (school_name VARCHAR(255), locality VARCHAR(255), decile INT)\n", + "Testing select query: SELECT COUNT(decile) AS total_decile FROM decile WHERE locality = 'redwood school'\n", + "[(0,)]\n", + "Testing create query: CREATE TABLE reports (id INT, report_name VARCHAR(255), circuit_name VARCHAR(255))\n", + "Testing select query: SELECT report_name FROM reports WHERE circuit_name = 'Tripoli'\n", + "[]\n" + ] + } + ], + "source": [ + "# Execute unit tests and capture results\n", + "results = []\n", + "\n", + "execute_unit_tests(input_df=test_df,output_list=results,system_prompt=system_prompt)" + ] + }, + { + "cell_type": "markdown", + "id": "a070a4bf-7435-4059-bf74-eb6129cbab2b", + "metadata": {}, + "source": [ + "#### Run Evaluation\n", + "\n", + "Now that we have generated the SQL based on system prompt 1 (run 1), we can run evaluation against the results. We use pandas `apply` functin to \"apply\" evaluation to each resulting generation" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "8fe18367", + "metadata": {}, + "outputs": [], + "source": [ + "results_df = pd.DataFrame(results)\n", + "results_df.columns = ['question','response','format','sql']\n", + "\n", + "# Execute evaluation\n", + "results_df['evaluation_score'] = results_df.apply(lambda x: get_geval_score(RELEVANCY_SCORE_CRITERIA,RELEVANCY_SCORE_STEPS,x['question'],x['response'],'relevancy'),axis=1)\n", + "results_df['unit_test_evaluation'] = results_df.apply(lambda x: evaluate_row(x),axis=1)" + ] + }, + { + "cell_type": "markdown", + "id": "c3dd9b04-44e2-476c-86fd-c0a261b1cbdd", + "metadata": {}, + "source": [ + "## Viewing unit test results and evaluations - Run 1\n", + "\n", + "We can now group the outcomes of the unit test (which test the structure of response) and evaluation (which checks if the SQL is syntatically correct)." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "650e6159", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "unit_test_evaluation\n", + "correct 46\n", + "SQL incorrect 4\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results_df['unit_test_evaluation'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "b3f98f81", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "evaluation_score\n", + "5 46\n", + "4 3\n", + "3 1\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results_df['evaluation_score'].value_counts()" + ] + }, + { + "cell_type": "markdown", + "id": "019f3a1d", + "metadata": {}, + "source": [ + "### Second run\n", + "\n", + "We now use a new system prompt to run same unit test and evaluation. Please note that we are using the same functions for unit testing and evaluations; the only change is the system prompt (which is under the test)." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "513a2da1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "('Translate this natural language request into a JSON object containing two SQL queries. \\n'\n", + " \"The first query should be a CREATE statement for a table answering the user's request, while the second should be a \"\n", + " 'SELECT query answering their question. \\n'\n", + " 'This should be returned as a JSON with keys \"create\" and \"select\". \\n'\n", + " 'For example:\\n'\n", + " '\\n'\n", + " '{\"create\": \"CREATE_QUERY\",\"select\": \"SELECT_QUERY\"}\" \\n'\n", + " 'Ensure the SQL is always generated on one line, never use \\n'\n", + " ' to separate rows.')\n" + ] + } + ], + "source": [ + "system_prompt_2 = \"\"\"Translate this natural language request into a JSON object containing two SQL queries. \n", + "The first query should be a CREATE statement for a table answering the user's request, while the second should be a SELECT query answering their question. \n", + "This should be returned as a JSON with keys \"create\" and \"select\". \n", + "For example:\\n\\n{\"create\": \"CREATE_QUERY\",\"select\": \"SELECT_QUERY\"}\" \n", + "Ensure the SQL is always generated on one line, never use \\n to separate rows.\"\"\"\n", + "\n", + "pprint(system_prompt_2, width=120)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "70bd3e32", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Testing create query: CREATE TABLE partnerships (id INT, player1 VARCHAR(255), player2 VARCHAR(255), venue VARCHAR(255))\n", + "Testing select query: SELECT venue FROM partnerships WHERE player1 = 'shoaib malik' AND player2 = 'misbah-ul-haq'\n", + "[]\n", + "Testing create query: CREATE TABLE partnerships (partnership_id INT, player1 VARCHAR(255), player2 VARCHAR(255), venue VARCHAR(255));\n", + "Testing select query: SELECT venue FROM partnerships WHERE player1 = 'herschelle gibbs' AND player2 = 'justin kemp';\n", + "[]\n", + "Testing create query: CREATE TABLE scores (NumberPlayed INT, Points INT);\n", + "Testing select query: SELECT NumberPlayed FROM scores WHERE Points = 310;\n", + "[]\n", + "Testing create query: CREATE TABLE losing_bonus (bonus_id INT, points_against INT)\n", + "Testing select query: SELECT * FROM losing_bonus WHERE points_against = 588\n", + "[]\n", + "Testing create query: CREATE TABLE rugby_teams (team_name VARCHAR(255), tries_against INT, losing_bonus INT);\n", + "Testing select query: SELECT * FROM rugby_teams WHERE tries_against = 7;\n", + "[]\n", + "Testing create query: CREATE TABLE try_bonus (try_bonus_id INT, points_against INT)\n", + "Testing select query: SELECT try_bonus FROM try_bonus WHERE points_against = 488\n", + "Error while executing select query: no such column: try_bonus\n", + "Testing create query: CREATE TABLE Points (Team VARCHAR(255), Try_Bonus INT)\n", + "Testing select query: SELECT Team FROM Points WHERE Try_Bonus = 140\n", + "[]\n", + "Testing create query: CREATE TABLE Drawn (Team TEXT, Tries_against INT);\n", + "Testing select query: SELECT * FROM Drawn WHERE Tries_against = 0;\n", + "[]\n", + "Testing create query: CREATE TABLE IF NOT EXISTS champions (id INT, name VARCHAR(255), reign_days INT, defenses INT);\n", + "Testing select query: SELECT days_held FROM champions WHERE reign_days > 3 AND defenses = 1;\n", + "Error while executing select query: no such column: days_held\n", + "Testing create query: CREATE TABLE champion (name VARCHAR(255), reign_days INT, defenses INT);\n", + "Testing select query: SELECT days_held FROM champion WHERE reign_days > 3 AND defenses < 1;\n", + "Error while executing select query: no such column: days_held\n", + "Testing create query: CREATE TABLE champion_stats (champion_name VARCHAR(255), days_held INT, reign INT, defenses INT);\n", + "Testing select query: SELECT AVG(defenses) FROM champion_stats WHERE days_held = 404 AND reign > 1;\n", + "[(None,)]\n", + "Testing create query: CREATE TABLE champions (name VARCHAR(255), days_held INT, defense INT);\n", + "Testing select query: SELECT MIN(defense) FROM champions WHERE days_held = 345;\n", + "[(None,)]\n", + "Testing create query: CREATE TABLE records (date DATE, record VARCHAR(10));\n", + "Testing select query: SELECT date FROM records WHERE record = '76-72';\n", + "[]\n", + "Testing create query: CREATE TABLE attendance (game_id INT, loss VARCHAR(10), attendance INT);\n", + "Testing select query: SELECT attendance FROM attendance WHERE loss = 'Ponson (1-5)';\n", + "[]\n", + "Testing create query: CREATE TABLE records (day VARCHAR(10), record INT);\n", + "Testing select query: SELECT day FROM records WHERE record >= 36 AND record <= 39;\n", + "[]\n", + "Testing create query: CREATE TABLE records (id INT, date DATE);\n", + "Testing select query: SELECT date FROM records WHERE record = '30-31';\n", + "Error while executing select query: no such column: record\n", + "Testing create query: CREATE TABLE games (game_id INT, opponent VARCHAR(255), result VARCHAR(255));\n", + "Testing select query: SELECT opponent FROM games WHERE result = 'loss' AND game_id = (SELECT game_id FROM games WHERE opponent = 'Leonard' AND result = '7–8');\n", + "[]\n", + "Testing create query: CREATE TABLE game_scores (game_id INT, home_team_score INT, away_team_score INT);\n", + "Testing select query: SELECT home_team_score, away_team_score FROM game_scores WHERE home_team_score = 18 AND away_team_score = 43;\n", + "[]\n", + "Testing create query: CREATE TABLE game_scores (game_id INT, opponent VARCHAR(50), score INT)\n", + "Testing select query: SELECT score FROM game_scores WHERE opponent = 'Royals' AND record = '24–52'\n", + "Error while executing select query: no such column: record\n", + "Testing create query: CREATE TABLE game_scores (id INT, home_team_score INT, away_team_score INT);\n", + "Testing select query: SELECT * FROM game_scores WHERE home_team_score = 22 AND away_team_score = 46;\n", + "[]\n", + "Testing create query: CREATE TABLE military_specialties (id INT, specialty_name VARCHAR(255), real_name VARCHAR(255));\n", + "Testing select query: SELECT real_name FROM military_specialties WHERE specialty_name = 'shock paratrooper';\n", + "[]\n", + "Testing create query: CREATE TABLE birthplaces (name VARCHAR(255), birthplace VARCHAR(255));\n", + "Testing select query: SELECT birthplace FROM birthplaces WHERE name = 'Pete Sanderson';\n", + "[]\n", + "Testing create query: CREATE TABLE roles (id INT, name VARCHAR(255), role VARCHAR(255))\n", + "Testing select query: SELECT role FROM roles WHERE name = 'Jean-Luc Bouvier'\n", + "[]\n", + "Testing create query: CREATE TABLE pilots (id INT, name VARCHAR(255), kayak_type VARCHAR(255))\n", + "Testing select query: SELECT name FROM pilots WHERE kayak_type = 'silent attack kayak'\n", + "[]\n", + "Testing create query: CREATE TABLE persons (id INT, name VARCHAR(255), birthplace VARCHAR(255), code_name VARCHAR(255));\n", + "Testing select query: SELECT code_name FROM persons WHERE birthplace = 'Liverpool';\n", + "[]\n", + "Testing create query: CREATE TABLE medalists (name VARCHAR(255), sport VARCHAR(255))\n", + "Testing select query: SELECT name FROM medalists WHERE sport = 'canoeing'\n", + "[]\n", + "Testing create query: CREATE TABLE IF NOT EXISTS events (event_id INT, event_name VARCHAR(255), event_category VARCHAR(255))\n", + "Testing select query: SELECT event_name FROM events WHERE event_category = 'women's half middleweight'\n", + "Error while executing select query: near \"s\": syntax error\n", + "Testing create query: CREATE TABLE medals (id INT, athlete VARCHAR(255), event VARCHAR(255), medal VARCHAR(255), year INT);\n", + "Testing select query: SELECT athlete FROM medals WHERE medal = 'bronze' AND year = 2000 AND event = 'Sydney games';\n", + "[]\n", + "Testing create query: CREATE TABLE attendance (opponent VARCHAR(50), people_attended INT);\n", + "Testing select query: SELECT people_attended FROM attendance WHERE opponent = 'twins';\n", + "[]\n", + "Testing create query: CREATE TABLE records (date DATE, record INT);\n", + "Testing select query: SELECT date FROM records WHERE record BETWEEN 41 AND 46;\n", + "[]\n", + "Testing create query: CREATE TABLE scores (id INT, record VARCHAR(10), score INT);\n", + "Testing select query: SELECT score FROM scores WHERE record = '48-55';\n", + "[]\n", + "Testing create query: CREATE TABLE scores (id INT, record VARCHAR(10), score INT);\n", + "Testing select query: SELECT score FROM scores WHERE record = '44-49';\n", + "[]\n", + "Testing create query: CREATE TABLE scores (Opponent VARCHAR(50), Record VARCHAR(10), Score INT);\n", + "Testing select query: SELECT Score FROM scores WHERE Opponent = 'white sox' AND Record = '2-0';\n", + "[]\n", + "Testing create query: CREATE TABLE votes (candidate_name VARCHAR(255), vote_count INT);\n", + "Testing select query: SELECT vote_count FROM votes WHERE candidate_name = 'candice sjostrom';\n", + "[]\n", + "Testing create query: CREATE TABLE percentages (name VARCHAR(255), percentage FLOAT);\n", + "Testing select query: SELECT percentage FROM percentages WHERE name = 'chris wright';\n", + "[]\n", + "Testing create query: CREATE TABLE votes (year INT, candidate VARCHAR(255), vote_percentage FLOAT, office VARCHAR(255));\n", + "Testing select query: SELECT COUNT(*) FROM votes WHERE year > 1992 AND vote_percentage = 1.59 AND office = 'us representative 4';\n", + "[(0,)]\n", + "Testing create query: CREATE TABLE representatives (id INT, name VARCHAR(255), start_year INT, end_year INT)\n", + "Testing select query: SELECT start_year, end_year FROM representatives WHERE name = 'J. Smith Young'\n", + "[]\n", + "Testing create query: CREATE TABLE politicians (id INT, name VARCHAR(255), party VARCHAR(255))\n", + "Testing select query: SELECT party FROM politicians WHERE name = 'Thomas L. Young'\n", + "[]\n", + "Testing create query: CREATE TABLE medal_counts (country TEXT, gold INTEGER, silver INTEGER, bronze INTEGER);\n", + "Testing select query: SELECT MIN(gold + silver + bronze) AS lowest_total_medals FROM medal_counts WHERE gold = 0 AND silver > 1 AND bronze > 2;\n", + "[(None,)]\n", + "Testing create query: CREATE TABLE medals (country TEXT, rank INTEGER, gold INTEGER, silver INTEGER, bronze INTEGER, total INTEGER);\n", + "Testing select query: SELECT SUM(silver) AS total_silver FROM medals WHERE rank = 14 AND total < 1;\n", + "[(None,)]\n", + "Testing create query: CREATE TABLE player_stats (player_id INT, tackles INT, fumble_recoveries INT, forced_fumbles INT);\n", + "Testing select query: SELECT COUNT(tackles) FROM player_stats WHERE fumble_recoveries > 0 AND forced_fumbles = 0;\n", + "[(0,)]\n", + "Testing create query: CREATE TABLE forced_fumbles (player_name VARCHAR(255), solo_tackles INT, forced_fumbles INT);\n", + "Testing select query: SELECT COUNT(forced_fumbles) FROM forced_fumbles WHERE player_name = 'Jim Laney' AND solo_tackles < 2;\n", + "[(0,)]\n", + "Testing create query: CREATE TABLE player_stats (player_id INT, solo_tackles INT, total INT);\n", + "Testing select query: SELECT MAX(total) AS high_total FROM player_stats WHERE solo_tackles > 15;\n", + "[(None,)]\n", + "Testing create query: CREATE TABLE fumble_recoveries (player_name VARCHAR(255), forced_fumbles INT, sacks INT, solo_tackles INT, fumble_recoveries INT);\n", + "Testing select query: SELECT fumble_recoveries FROM fumble_recoveries WHERE player_name = 'scott gajos' AND forced_fumbles = 0 AND sacks = 0 AND solo_tackles < 2;\n", + "[]\n", + "Testing create query: CREATE TABLE matches (id INT, opponent VARCHAR(255), time VARCHAR(255), location VARCHAR(255))\n", + "Testing select query: SELECT opponent FROM matches WHERE time = '20:00 GMT' AND location = 'Camp Nou'\n", + "[]\n", + "Testing create query: CREATE TABLE matches (id INT, match_time TIME, score VARCHAR(5))\n", + "Testing select query: SELECT match_time FROM matches WHERE score = '3-2'\n", + "[]\n", + "Testing create query: CREATE TABLE grounds (id INT, name VARCHAR(255));\n", + "Testing select query: SELECT name FROM grounds WHERE id IN (SELECT ground_id FROM team_grounds WHERE team_id = (SELECT id FROM teams WHERE name = 'Aston Villa'));\n", + "Error while executing select query: no such table: team_grounds\n", + "Testing create query: CREATE TABLE competition (id INT, type VARCHAR(255), location VARCHAR(255), time TIME)\n", + "Testing select query: SELECT type FROM competition WHERE location = 'San Siro' AND time = '18:30:00'\n", + "[]\n", + "Testing create query: CREATE TABLE decile (school_name VARCHAR(255), locality VARCHAR(255), decile INT)\n", + "Testing select query: SELECT COUNT(DISTINCT decile) AS total_decile FROM decile WHERE locality = 'redwood school'\n", + "[(0,)]\n", + "Testing create query: CREATE TABLE reports (id INT, name VARCHAR(255), circuit VARCHAR(255))\n", + "Testing select query: SELECT * FROM reports WHERE circuit = 'Tripoli'\n", + "[]\n" + ] + } + ], + "source": [ + "# Execute unit tests\n", + "results_2 = []\n", + "\n", + "execute_unit_tests(input_df=test_df,output_list=results_2,system_prompt=system_prompt_2)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "04532d59", + "metadata": {}, + "outputs": [], + "source": [ + "results_2_df = pd.DataFrame(results_2)\n", + "results_2_df.columns = ['question','response','format','sql']\n", + "\n", + "# Execute evaluation\n", + "results_2_df['evaluation_score'] = results_2_df.apply(lambda x: get_geval_score(RELEVANCY_SCORE_CRITERIA,RELEVANCY_SCORE_STEPS,x['question'],x['response'],'relevancy'),axis=1)\n", + "results_2_df['unit_test_evaluation'] = results_2_df.apply(lambda x: evaluate_row(x),axis=1)" + ] + }, + { + "cell_type": "markdown", + "id": "cd95c3f9-f90d-451d-a32b-aeb066906779", + "metadata": {}, + "source": [ + "## Viewing unit test results and evaluations - Run 2\n", + "\n", + "We can now group the outcomes of the unit test (which test the structure of response) and evaluation (which checks if the SQL is syntatically correct)." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "cbaa4bdf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "unit_test_evaluation\n", + "correct 43\n", + "SQL incorrect 7\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results_2_df['unit_test_evaluation'].value_counts()" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "1ada474e", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "evaluation_score\n", + "5 46\n", + "4 3\n", + "3 1\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "results_2_df['evaluation_score'].value_counts()" + ] + }, + { + "cell_type": "markdown", + "id": "1908c933", + "metadata": {}, + "source": [ + "## Report\n", + "\n", + "We'll make a simple dataframe to store and display the run performance - this is where you can use tools like Weights & Biases Prompts or Gantry to store the results for analytics on your different iterations." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "d277222d", + "metadata": {}, + "outputs": [], + "source": [ + "results_df['run'] = 1\n", + "results_df['Evaluating Model'] = 'gpt-4'\n", + "\n", + "results_2_df['run'] = 2\n", + "results_2_df['Evaluating Model'] = 'gpt-4'" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "6da35c99", + "metadata": {}, + "outputs": [], + "source": [ + "run_df = pd.concat([results_df,results_2_df])" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "4116cb37", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
questionresponseformatsqlevaluation_scoreunit_test_evaluationrunEvaluating Model
0What venue did the parntership of shoaib malik...{\"create\": \"CREATE TABLE partnerships (id INT,...TrueTrue5correct1gpt-4
1What venue did the partnership of herschelle g...{\"create\": \"CREATE TABLE partnerships (id INT,...TrueTrue5correct1gpt-4
2What is the number Played that has 310 Points ...{\"create\": \"CREATE TABLE Played (Number INT, P...TrueTrue5correct1gpt-4
3What Losing bonus has a Points against of 588?{\"create\": \"CREATE TABLE losing_bonus (bonus_i...TrueTrue5correct1gpt-4
4What Tries against has a Losing bonus of 7?{\"create\": \"CREATE TABLE rugby_teams (team_nam...TrueTrue3correct1gpt-4
\n", + "
" + ], + "text/plain": [ + " question \\\n", + "0 What venue did the parntership of shoaib malik... \n", + "1 What venue did the partnership of herschelle g... \n", + "2 What is the number Played that has 310 Points ... \n", + "3 What Losing bonus has a Points against of 588? \n", + "4 What Tries against has a Losing bonus of 7? \n", + "\n", + " response format sql \\\n", + "0 {\"create\": \"CREATE TABLE partnerships (id INT,... True True \n", + "1 {\"create\": \"CREATE TABLE partnerships (id INT,... True True \n", + "2 {\"create\": \"CREATE TABLE Played (Number INT, P... True True \n", + "3 {\"create\": \"CREATE TABLE losing_bonus (bonus_i... True True \n", + "4 {\"create\": \"CREATE TABLE rugby_teams (team_nam... True True \n", + "\n", + " evaluation_score unit_test_evaluation run Evaluating Model \n", + "0 5 correct 1 gpt-4 \n", + "1 5 correct 1 gpt-4 \n", + "2 5 correct 1 gpt-4 \n", + "3 5 correct 1 gpt-4 \n", + "4 3 correct 1 gpt-4 " + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "run_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "ed800f0c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Number of records
rununit_test_evaluation
1SQL incorrect4
correct46
2SQL incorrect7
correct43
\n", + "
" + ], + "text/plain": [ + " Number of records\n", + "run unit_test_evaluation \n", + "1 SQL incorrect 4\n", + " correct 46\n", + "2 SQL incorrect 7\n", + " correct 43" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Unit test results\n", + "unittest_df_pivot = pd.pivot_table(run_df, values='format',index=['run','unit_test_evaluation'], #columns='position',\n", + " aggfunc='count')\n", + "unittest_df_pivot.columns = ['Number of records']\n", + "unittest_df_pivot" + ] + }, + { + "cell_type": "markdown", + "id": "0162a009-fc43-484c-90f6-d59a8e52f365", + "metadata": {}, + "source": [ + "#### Plotting the results\n", + "\n", + "We can create a simple bar chart to visualise the results of unit tests for both runs." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "e2b4aa03-42f5-4c30-a610-e553937bf160", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0kAAAIjCAYAAADWYVDIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABY/ElEQVR4nO3dZ3RUVf/28WsS0khIQgkJSEmkhc4NihQFhEhTpEm7UQggKL2IBW+l2ChKsYGIUsRGFcVCEem9g0gnIEIgSEkMgQTIfl74ZP5nSIAMJJkEvp+1Zq3MPmX/5kzLNeecfWzGGCMAAAAAgCTJzdUFAAAAAEB2QkgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAKyscjISIWGhrq6jLtKvXr1VK9ePZf1b7PZNHz4cJf1j7TVq1dPFSpUcHUZ6TZz5kyFh4fLw8NDgYGBri4nS2Xk52J8fLyeffZZhYSEyGazacCAARmy3uxk+vTpstls2rJli6tLAXIUQhJwh4YPHy6bzaa///47zekVKlTIsH/KExISNHz4cK1YseKW84aGhspms93yNn369Ayp7Z133tGCBQvSNe/Ro0dvWtOoUaMypCZX+fnnnwlCaUh5Tfbt2zfVtBUrVshms2nu3LkuqCxn2bdvnyIjI1WiRAlNmTJFn3766Q3nTfl8Srl5eHgoNDRU/fr104ULF7Ku6GzqnXfe0fTp09WzZ0/NnDlTzzzzTKb2d7PP5caNG2dq37eL1xDuVblcXQCAG5syZYqSk5Pt9xMSEjRixAhJumXwmjBhguLj4+33f/75Z33zzTcaP368ChQoYG+vVatWhtT6zjvv6KmnnlKLFi3SvUyHDh3UtGnTVO3/+c9/MqQmV/n555/18ccfpxmULl26pFy57u2P3ilTpmjIkCEqXLiwq0vJkVasWKHk5GS9//77KlmyZLqWmTRpkvz8/HTx4kUtW7ZMH374obZt26Y1a9ZkcrXZ22+//aYaNWpo2LBhWdZnlSpV9MILL6Rqz+7vB15DuNfc29/UQDbn4eFx28teH1ZOnTqlb775Ri1atMg2h/BVrVpVTz/9tKvLyFLe3t6uLsGlypcvr/3792vUqFH64IMPXF1OlkpOTlZSUtIdvwZiYmIkyanD7J566in7jyPPPfec2rdvr1mzZmnTpk2qXr36HdWT0S5fvixPT0+5uWX+wS4xMTEqV65chq3v6tWrSk5Olqen5w3nue+++3Lk515Oeg0BGYHD7YAslnJY0ezZs/X222+rSJEi8vb2VoMGDXTo0CGHea3H3h89elRBQUGSpBEjRtgPfbjTw7q+/PJLVatWTT4+PsqXL5/at2+v48ePO8xz8OBBtW7dWiEhIfL29laRIkXUvn17xcbGSvr3PJuLFy9qxowZ9roiIyPvqC5JeuKJJ3T//fenOa1mzZp64IEH7PenTZum+vXrq2DBgvLy8lK5cuU0adKkW/aRcrz+0aNHHdpTnifroY2rV69WmzZtVKxYMXl5ealo0aIaOHCgLl26ZJ8nMjJSH3/8sSQ5HKKSIq3nbPv27WrSpIn8/f3l5+enBg0aaMOGDWnWuXbtWg0aNEhBQUHy9fVVy5YtdebMGYd5t2zZokaNGqlAgQLy8fFRWFiYunbtetPt4My2Xrp0qR5++GEFBgbKz89PZcqU0auvvnrT9acIDQ1Vp06dNGXKFJ08efKm897o3JOUw3+sbDab+vTpozlz5qhcuXLy8fFRzZo1tXv3bknS5MmTVbJkSXl7e6tevXqpnu8UW7duVa1atezb7ZNPPkk1T2JiooYNG6aSJUvaXwcvvfSSEhMT06zpq6++Uvny5eXl5aVFixbd9DFPnDjRPm/hwoXVu3dvh0OaQkND7Xs9goKCbvsz4JFHHpEkHT582KF948aNaty4sQICApQ7d27VrVtXa9euTbX8iRMn1K1bNxUuXFheXl4KCwtTz549lZSUZJ/nyJEjatOmjfLly6fcuXOrRo0a+umnnxzWk/I++/bbb/Xaa6/pvvvuU+7cuRUXFydJWrBggSpUqCBvb29VqFBB3333XZqP59tvv1W1atWUJ08e+fv7q2LFinr//fdv+PhT+o2KitJPP/1kf5+mvC5iYmLUrVs3BQcHy9vbW5UrV9aMGTMc1pFy2PB7772nCRMmqESJEvLy8tIff/xxw37Ta9euXYqMjNT9998vb29vhYSEqGvXrjp79myqedPzXEj/vm5v9dnhjLReQ6GhoWl+9l9/Lqgz34OAq7AnCXCRUaNGyc3NTYMHD1ZsbKzGjBmjjh07auPGjWnOHxQUpEmTJqlnz55q2bKlWrVqJUmqVKnSbdfw9ttv6/XXX1fbtm317LPP6syZM/rwww9Vp04dbd++XYGBgUpKSlKjRo2UmJiovn37KiQkRCdOnNCPP/6oCxcuKCAgQDNnztSzzz6r6tWrq0ePHpKkEiVK3LL/hISENM/lCgwMVK5cudSuXTt16tRJmzdv1oMPPmiffuzYMW3YsEHvvvuuvW3SpEkqX768nnzySeXKlUsLFy5Ur169lJycrN69e9/2NrKaM2eOEhIS1LNnT+XPn1+bNm3Shx9+qL/++ktz5syR9O8vrCdPntTSpUs1c+bMW65zz549euSRR+Tv76+XXnpJHh4emjx5surVq6eVK1fqoYcecpi/b9++yps3r4YNG6ajR49qwoQJ6tOnj2bNmiXp33/uGjZsqKCgIL3yyisKDAzU0aNHNX/+/JvWkd5tvWfPHj3xxBOqVKmS3njjDXl5eenQoUNp/iN9I//73//0xRdfZPjepNWrV+uHH36wP98jR47UE088oZdeekkTJ05Ur169dP78eY0ZM0Zdu3bVb7/95rD8+fPn1bRpU7Vt21YdOnTQ7Nmz1bNnT3l6etpDZnJysp588kmtWbNGPXr0UNmyZbV7926NHz9eBw4cSHVe3m+//abZs2erT58+KlCgwE334g4fPlwjRoxQRESEevbsqf3792vSpEnavHmz1q5dKw8PD02YMEFffPGFvvvuO/vhT7fzGZASBvLmzetQa5MmTVStWjUNGzZMbm5u9h8fVq9ebd9bcPLkSVWvXl0XLlxQjx49FB4erhMnTmju3LlKSEiQp6enTp8+rVq1aikhIUH9+vVT/vz5NWPGDD355JOaO3euWrZs6VDPm2++KU9PTw0ePFiJiYny9PTUkiVL1Lp1a5UrV04jR47U2bNn1aVLFxUpUsRh2aVLl6pDhw5q0KCBRo8eLUnau3ev1q5dq/79+6f5+MuWLauZM2dq4MCBKlKkiP3wt6CgIF26dEn16tXToUOH1KdPH4WFhWnOnDmKjIzUhQsXUq1z2rRpunz5snr06CEvLy/ly5fvptv+ypUraX7u+fr6ysfHx/6Yjhw5oi5duigkJER79uzRp59+qj179mjDhg32HwnS81ykuNVnh7PSeg05y9nvQSBLGQB3ZNiwYUaSOXPmTJrTy5cvb+rWrWu/v3z5ciPJlC1b1iQmJtrb33//fSPJ7N69297WuXNnU7x4cfv9M2fOGElm2LBhTtf57rvvGkkmKirKGGPM0aNHjbu7u3n77bcd5tu9e7fJlSuXvX379u1GkpkzZ85N1+/r62s6d+6crlqioqKMpBve1q9fb4wxJjY21nh5eZkXXnjBYfkxY8YYm81mjh07Zm9LSEhI1U+jRo3M/fff79BWt25dh+dj2rRpDtslRcrztHz58pv2MXLkyFS19O7d29zo4/X6569FixbG09PTHD582N528uRJkydPHlOnTp1UdUZERJjk5GR7+8CBA427u7u5cOGCMcaY7777zkgymzdvTrP/G0nvth4/fvxNX+83U7x4cfP4448bY4zp0qWL8fb2NidPnjTG/N/2tr7Orn/9p0h5z1lJMl5eXg7P4+TJk40kExISYuLi4uztQ4YMSfWc161b10gyY8eOtbclJiaaKlWqmIIFC5qkpCRjjDEzZ840bm5uZvXq1Q79f/LJJ0aSWbt2rUNNbm5uZs+ePbfcNjExMcbT09M0bNjQXLt2zd7+0UcfGUlm6tSpqR5/ep6DlHn3799vzpw5Y44ePWqmTp1qfHx8TFBQkLl48aIxxpjk5GRTqlQp06hRI4fXV0JCggkLCzOPPfaYva1Tp07Gzc0tzddYyrIDBgwwkhy20z///GPCwsJMaGio/TGmPO/3339/qvdXlSpVTKFCheyvbWOMWbJkiZHk8Lro37+/8ff3N1evXr3l9rie9TWZYsKECUaS+fLLL+1tSUlJpmbNmsbPz8/+Wkr5HPP39zcxMTHp7u9Gn3sjR460z5fWZ80333xjJJlVq1bZ29LzXKT3s+NG0vsaSnl8aX0PXP+568z3IOAqHG4HuEiXLl0cfuVLOXThyJEjWdL//PnzlZycrLZt2+rvv/+230JCQlSqVCktX75ckhQQECBJWrx4sRISEjK0hh49emjp0qWpbinnCPj7+6tJkyaaPXu2jDH25WbNmqUaNWqoWLFi9raUX2AlKTY2Vn///bfq1q2rI0eO2A8LvFPWPi5evKi///5btWrVkjFG27dvd3p9165d05IlS9SiRQuHQ90KFSqk//73v1qzZo39sKMUPXr0cDjU7JFHHtG1a9d07NgxSf93nsqPP/6oK1eupLuW9G7rlPV///33DoOKOOu1117T1atXM3QkwwYNGjjsqUnZC9e6dWvlyZMnVfv177VcuXLpueees9/39PTUc889p5iYGG3dulXSv3sTy5Ytq/DwcIf3Tf369SXJ/r5JUbdu3XSd8/Lrr78qKSlJAwYMcDgXp3v37vL39091mJqzypQpo6CgIIWGhqpr164qWbKkfvnlF+XOnVuStGPHDh08eFD//e9/dfbsWfvjunjxoho0aKBVq1YpOTlZycnJWrBggZo1a+ZwCGaKlNfmzz//rOrVq+vhhx+2T/Pz81OPHj109OjRVIekde7c2eH9FR0drR07dqhz5872zyBJeuyxx1Jtz8DAQF28eFFLly69o22U4ueff1ZISIg6dOhgb/Pw8FC/fv0UHx+vlStXOszfunVr+6HQ6fHQQw+l+bln7c+6LS5fvqy///5bNWrUkCRt27ZNktL9XKS41WfHrdzqNXQ7XP09CNwMIQnIAtd/WUly+Adf+r9DFs6fP58lNR08eFDGGJUqVUpBQUEOt71799pPDg8LC9OgQYP02WefqUCBAmrUqJE+/vjjDAkepUqVUkRERKqbv7+/fZ527drp+PHjWr9+vaR/j3/funWr2rVr57CutWvXKiIiQr6+vgoMDFRQUJD9PJmMCkl//vmnIiMjlS9fPvn5+SkoKEh169a97T7OnDmjhIQElSlTJtW0smXLKjk5OdX5Ybd63dStW1etW7fWiBEjVKBAATVv3lzTpk1Ldb5MWtKzrdu1a6fatWvr2WefVXBwsNq3b6/Zs2c7HZjuv/9+PfPMM/r0008VHR3t1LI3cv22SfnnumjRomm2X/9eK1y4sHx9fR3aSpcuLen/Di06ePCg9uzZk+o9kzJfyvsmRVhYWLpqT/lH9frXgqenp+6///50/yN7I/PmzdPSpUv19ddfq0aNGoqJiXH4R/zgwYOS/g0r1z+2zz77TImJiYqNjdWZM2cUFxd3y2tKHTt27Iava+vjTXH9dkqZXqpUqVTruH69vXr1UunSpdWkSRMVKVJEXbt2veW5X7eqvVSpUqkGjkhv7bdSoECBND/3ihcvbp/n3Llz6t+/v4KDg+Xj46OgoCB7PymfNel9LlLc6XfOrV5Dt8PV34PAzXBOEnCHUkaqsp68b5WQkJDmaFbu7u5pzm/9FT8zJScny2az6ZdffkmzFj8/P/vfY8eOVWRkpL7//nstWbJE/fr108iRI7Vhw4ZU5wdktGbNmil37tyaPXu2atWqpdmzZ8vNzU1t2rSxz3P48GE1aNBA4eHhGjdunIoWLSpPT0/9/PPPGj9+/E3/gU8rwEr/7uW5/v5jjz2mc+fO6eWXX1Z4eLh8fX114sQJRUZG3tFeFWfc6nWTcq2hDRs2aOHChVq8eLG6du2qsWPHasOGDQ7P6/XSs619fHy0atUqLV++XD/99JMWLVqkWbNmqX79+lqyZMkN60vL//73P82cOVOjR49Oc+j49D43KW7Ud0a+15KTk1WxYkWNGzcuzenXB7I7/Scyo9SpU8c+MlmzZs1UsWJFdezYUVu3bpWbm5v99fvuu++qSpUqaa7Dz89P586dy5T67mQ7FSxYUDt27NDixYv1yy+/6JdfftG0adPUqVOnVIMtZIbMeI7btm2rdevW6cUXX1SVKlXk5+en5ORkNW7c+LY/a+70fXCr15B08/dsWv27+nsQuBlCEnCHUn79279/f6p/kBISEnT8+HE1bNgwQ/q60RfQ7ShRooSMMQoLC7P/Cn4zFStWVMWKFfXaa69p3bp1ql27tj755BO99dZbGV6bla+vr5544gnNmTNH48aN06xZs/TII484XFNk4cKFSkxM1A8//ODwy+T1hz6lJeWXy+svinj9r8W7d+/WgQMHNGPGDHXq1MnentYhPundFkFBQcqdO7f279+fatq+ffvk5uaW6jWVXjVq1FCNGjX09ttv6+uvv1bHjh317bff6tlnn73hMunZ1pLk5uamBg0aqEGDBho3bpzeeecd/e9//9Py5csVERGR7hpLlCihp59+WpMnT041QIX073OT1sUq73Svyo2cPHlSFy9edNibdODAAUmyH8ZXokQJ7dy5Uw0aNMjQ17z1c8R66GVSUpKioqKc2q634ufnp2HDhqlLly6aPXu22rdvbx9oxd/f/6Z9BQUFyd/fX7///vtN+yhevPgNX9cp02+1vPR/e7is0lqvp6enmjVrpmbNmik5OVm9evXS5MmT9frrr6f7WlLWvnft2qXk5GSHvUnprf1OnT9/XsuWLdOIESM0dOhQe/v12yK9z0VmSOs1JN38PXuj0TOB7IrD7YA71KBBA3l6emrSpEmpfuH79NNPdfXqVTVp0iRD+ko59jsjrnLeqlUrubu7a8SIEal+tTPG2IeajYuL09WrVx2mV6xYUW5ubg6HcPn6+mba1dfbtWunkydP6rPPPtPOnTtTHWqX8muk9XHExsZq2rRpt1x3yj+Hq1atsrddu3ZNn3766S37MMakOcxwyj/Zt9oe7u7uatiwob7//nuHIalPnz6tr7/+Wg8//LDDoYfpcf78+VTPZ8qegfQecnezbZ3WngRn1n+91157TVeuXNGYMWNSTStRooRiY2O1a9cue1t0dPQNh4G+U1evXtXkyZPt95OSkjR58mQFBQWpWrVqkv79hf/EiROaMmVKquUvXbqkixcv3lbfERER8vT01AcffODw/H3++eeKjY3V448/flvrvZGOHTuqSJEi9tHgqlWrphIlSui9995zuAh1ipShot3c3NSiRQstXLhQW7ZsSTVfSu1NmzbVpk2b7IduSv+ex/fpp58qNDT0ludpFSpUSFWqVNGMGTMcDmVdunRpqvOZrh8W283NzT7i3+28Jps2bapTp045jPp29epVffjhh/Lz87MfYptZ0vqskf69QLhVep+LzHL9a0j69z27YcMGh+HHf/zxx1SHDQM5AXuSgDtUsGBBDR06VK+99prq1KmjJ598Urlz59a6dev0zTffqGHDhmrWrFmG9OXj46Ny5cpp1qxZKl26tPLly6cKFSqk+5h0qxIlSuitt97SkCFDdPToUbVo0UJ58uRRVFSUvvvuO/Xo0UODBw/Wb7/9pj59+qhNmzYqXbq0rl69qpkzZ8rd3V2tW7e2r69atWr69ddfNW7cOBUuXFhhYWFp7h2w2rZtm7788ss0a6tZs6b9ftOmTZUnTx4NHjw4Vb+S1LBhQ/svyc8995zi4+M1ZcoUFSxY8Jbnu5QvX141atTQkCFDdO7cOeXLl0/ffvttqmAYHh6uEiVKaPDgwTpx4oT8/f01b968NI+dT/mHul+/fmrUqJHc3d3tv7Re76233rJfd6hXr17KlSuXJk+erMTExDSDw63MmDFDEydOVMuWLVWiRAn9888/mjJlivz9/dW0adNbLn+rbf3GG29o1apVevzxx1W8eHHFxMRo4sSJKlKkiMNJ+umVsjcprcOi2rdvr5dfflktW7ZUv379lJCQoEmTJql06dL2k9czUuHChTV69GgdPXpUpUuX1qxZs7Rjxw59+umn9gs7P/PMM5o9e7aef/55LV++XLVr19a1a9e0b98+zZ49W4sXL07zJPpbCQoK0pAhQzRixAg1btxYTz75pPbv36+JEyfqwQcfzPCLj3p4eKh///568cUXtWjRIjVu3FifffaZmjRp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AAC4SroOt9u1a5f97379+ql///46dOiQatSoIUnasGGDPv74Y40aNSpzqgQAAACALGIzxphbzeTm5iabzaZbzWqz2XTt2rUMKy4jxMXFKSAgQLGxsfL393d1OQAAZDnbroWuLgE5XeUnXV0Bcrh0RI4skd5skK49SVFRURlWGAAAAABkZ+kKScWLF8/sOgAAAAAgW7iti8mePHlSa9asUUxMjJKTkx2m9evXL93rGTlypObPn699+/bJx8dHtWrV0ujRo1WmTBn7PJcvX9YLL7ygb7/9VomJiWrUqJEmTpyo4ODg2ykdAAAAAG7K6ZA0ffp0Pffcc/L09FT+/Plls9ns02w2m1MhaeXKlerdu7cefPBBXb16Va+++qoaNmyoP/74Q76+vpKkgQMH6qefftKcOXMUEBCgPn36qFWrVlq7dq2zpQMAAADALaVr4AarokWL6vnnn9eQIUPk5ub0COI3debMGRUsWFArV65UnTp1FBsbq6CgIH399dd66qmnJEn79u1T2bJltX79evvoelaJiYlKTEy034+Li1PRokUZuAEAcM9i4AbcMQZuwB3KaQM3OJ1yEhIS1L59+wwPSJIUGxsrScqXL58kaevWrbpy5YoiIiLs84SHh6tYsWJav359musYOXKkAgIC7LeiRYtmeJ0AAAAA7l5OJ51u3bppzpw5GV5IcnKyBgwYoNq1a6tChQqSpFOnTsnT01OBgYEO8wYHB+vUqVNprmfIkCGKjY21344fP57htQIAAAC4ezl9TtLIkSP1xBNPaNGiRapYsaI8PDwcpo8bN+62Cundu7d+//13rVmz5raWT+Hl5SUvL687WgcAAACAe9dthaTFixfbR6C7fuCG29GnTx/9+OOPWrVqlYoUKWJvDwkJUVJSki5cuOCwN+n06dMKCQm5rb4AAAAA4GacDkljx47V1KlTFRkZecedG2PUt29ffffdd1qxYoXCwsIcplerVk0eHh5atmyZWrduLUnav3+//vzzT9WsWfOO+wcAAACA6zkdkry8vFS7du0M6bx37976+uuv9f333ytPnjz284wCAgLk4+OjgIAAdevWTYMGDVK+fPnk7++vvn37qmbNmmmObAcAAAAAd8rpgRv69++vDz/8MEM6nzRpkmJjY1WvXj0VKlTIfps1a5Z9nvHjx+uJJ55Q69atVadOHYWEhGj+/PkZ0j8AAAAAXM/p6yS1bNlSv/32m/Lnz6/y5cunGrghuwWY9I6FDgDA3YrrJOGOcZ0k3KGcdp0kpw+3CwwMVKtWre6oOAAAAADIrpwOSdOmTcuMOgAAAAAgW3D6nCQAAAAAuJs5vScpLCzsptdDOnLkyB0VBAAAAACu5HRIGjBggMP9K1euaPv27Vq0aJFefPHFjKoLAAAAAFzC6ZDUv3//NNs//vhjbdmy5Y4LAgAAAABXyrBzkpo0aaJ58+Zl1OoAAAAAwCUyLCTNnTtX+fLly6jVAQAAAIBLOH243X/+8x+HgRuMMTp16pTOnDmjiRMnZmhxAAAAAJDVnA5JLVq0cLjv5uamoKAg1atXT+Hh4RlVFwAAAAC4hNMhadiwYZlRBwAAAABkC1xMFgAAAAAs0r0nyc3N7aYXkZUkm82mq1ev3nFRAAAAAOAq6Q5J33333Q2nrV+/Xh988IGSk5MzpCgAAAAAcJV0h6TmzZunatu/f79eeeUVLVy4UB07dtQbb7yRocUBAAAAQFa7rXOSTp48qe7du6tixYq6evWqduzYoRkzZqh48eIZXR8AAAAAZCmnQlJsbKxefvlllSxZUnv27NGyZcu0cOFCVahQIbPqAwAAAIAsle7D7caMGaPRo0crJCRE33zzTZqH3wEAAABATmczxpj0zOjm5iYfHx9FRETI3d39hvPNnz8/w4rLCHFxcQoICFBsbKz8/f1dXQ4AAFnOtmuhq0tATlf5SVdXgBwunZEj06U3G6R7T1KnTp1uOQQ4AAAAAOR06Q5J06dPz8QyAAAAACB7uK3R7QAAAADgbkVIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAICFS0PSqlWr1KxZMxUuXFg2m00LFixwmG6M0dChQ1WoUCH5+PgoIiJCBw8edE2xAAAAAO4JLg1JFy9eVOXKlfXxxx+nOX3MmDH64IMP9Mknn2jjxo3y9fVVo0aNdPny5SyuFAAAAMC9IpcrO2/SpImaNGmS5jRjjCZMmKDXXntNzZs3lyR98cUXCg4O1oIFC9S+ffusLBUAAADAPSLbnpMUFRWlU6dOKSIiwt4WEBCghx56SOvXr7/hcomJiYqLi3O4AQAAAEB6ZduQdOrUKUlScHCwQ3twcLB9WlpGjhypgIAA+61o0aKZWicAAACAu0u2DUm3a8iQIYqNjbXfjh8/7uqSAAAAAOQg2TYkhYSESJJOnz7t0H769Gn7tLR4eXnJ39/f4QYAAAAA6ZVtQ1JYWJhCQkK0bNkye1tcXJw2btyomjVrurAyAAAAAHczl45uFx8fr0OHDtnvR0VFaceOHcqXL5+KFSumAQMG6K233lKpUqUUFham119/XYULF1aLFi1cVzQAAACAu5pLQ9KWLVv06KOP2u8PGjRIktS5c2dNnz5dL730ki5evKgePXrowoULevjhh7Vo0SJ5e3u7qmQAAAAAdzmbMca4uojMFBcXp4CAAMXGxnJ+EgDgnmTbtdDVJSCnq/ykqytADpddIkd6s0G2PScJAAAAAFyBkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYJHL1QUAcI7NZnN1CcjhjDGuLgEAgGyNPUkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWORydQH3Gtuuha4uAQAAAMBNsCcJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGCRI0LSxx9/rNDQUHl7e+uhhx7Spk2bXF0SAAAAgLtUtg9Js2bN0qBBgzRs2DBt27ZNlStXVqNGjRQTE+Pq0gAAAADchbJ9SBo3bpy6d++uLl26qFy5cvrkk0+UO3duTZ061dWlAQAAALgL5XJ1ATeTlJSkrVu3asiQIfY2Nzc3RUREaP369Wkuk5iYqMTERPv92NhYSVJcXFzmFpte8QmurgDAPS7bfB4i6/DdA8DFsst3T0odxpibzpetQ9Lff/+ta9euKTg42KE9ODhY+/btS3OZkSNHasSIEanaixYtmik1AkBOExAQ4OoSAAD3mOz23fPPP//ctKZsHZJux5AhQzRo0CD7/eTkZJ07d0758+eXzWZzYWXAnYuLi1PRokV1/Phx+fv7u7ocAMA9gO8e3E2MMfrnn39UuHDhm86XrUNSgQIF5O7urtOnTzu0nz59WiEhIWku4+XlJS8vL4e2wMDAzCoRcAl/f3++qAAAWYrvHtwt0rNXK1sP3ODp6alq1app2bJl9rbk5GQtW7ZMNWvWdGFlAAAAAO5W2XpPkiQNGjRInTt31gMPPKDq1atrwoQJunjxorp06eLq0gAAAADchbJ9SGrXrp3OnDmjoUOH6tSpU6pSpYoWLVqUajAH4F7g5eWlYcOGpTqkFACAzMJ3D+5FNnOr8e8AAAAA4B6Src9JAgAAAICsRkgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBLiQzWbTggULXF0GAABZZvjw4apSpYqrywBuipCEe9qZM2fUs2dPFStWTF5eXgoJCVGjRo20du1ah/nWrVunpk2bKm/evPL29lbFihU1btw4Xbt2zWE+Z0NPdHS0mjRpkhEPJds5evSobDabduzY4epSAABOSkpKSrP9ypUrWVwJ4BqEJNzTWrdure3bt2vGjBk6cOCAfvjhB9WrV09nz561z/Pdd9+pbt26KlKkiJYvX659+/apf//+euutt9S+fXvdySj6ISEhLr3uhDFGV69eTdV+oy9HAED2lZycrDFjxqhkyZLy8vJSsWLF9Pbbb0uSdu/erfr168vHx0f58+dXjx49FB8fb182MjJSLVq00Ntvv63ChQurTJky9h+7Zs2apbp168rb21tfffWVJOmzzz5T2bJl5e3trfDwcE2cONGhlr/++ksdOnRQvnz55OvrqwceeEAbN27U9OnTNWLECO3cuVM2m002m03Tp0/Psm0EpJsB7lHnz583ksyKFStuOE98fLzJnz+/adWqVappP/zwg5Fkvv32W3ubJPPdd9+luwbr/FFRUUaSmTdvnqlXr57x8fExlSpVMuvWrXNYZs2aNaZu3brGx8fHBAYGmoYNG5pz584ZY4y5fPmy6du3rwkKCjJeXl6mdu3aZtOmTfZlly9fbiSZn3/+2VStWtV4eHiY5cuXm7p165revXub/v37m/z585t69eoZY4zZvXu3ady4sfH19TUFCxY0Tz/9tDlz5ox9fdeuXTOjR482JUqUMJ6enqZo0aLmrbfesj82661u3brp3i4AAOe99NJLJm/evGb69Onm0KFDZvXq1WbKlCkmPj7eFCpUyLRq1crs3r3bLFu2zISFhZnOnTvbl+3cubPx8/MzzzzzjPn999/N77//bv9eCg0NNfPmzTNHjhwxJ0+eNF9++aUpVKiQvW3evHkmX758Zvr06cYYY/755x9z//33m0ceecSsXr3aHDx40MyaNcusW7fOJCQkmBdeeMGUL1/eREdHm+joaJOQkOCiLQbcGCEJ96wrV64YPz8/M2DAAHP58uU055k/f76RlCqopChdurRp3ry5/X5GhKTw8HDz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DAx0al2bN29Wjx497PdtNpsWLFhww/mnT58um81209vRo0edqsHZ+m9Ug7e39231m5UiIyPVokULh7aiRYsqOjpaFSpUcE1RAHCPyOXqAgAAOUNQUJBT87dr106NGze232/VqpUqVKigN95447bXeTv8/f21f/9+hzabzZbp/WYGd3d3hYSEuLoMALjrsScJAGDfa/Hee++pUKFCyp8/v3r37q0rV67Y57EeUhYaGipJatmypWw2m/2+lY+Pj0JCQuw3T09P5c6d237f29tbzz33nIKCguTv76/69etr586d9uV37typRx99VHny5JG/v7+qVaumLVu2aMWKFerSpYtiY2Pte4aGDx9+w8dms9kc6ggJCVFwcLAk6dNPP1XhwoWVnJzssEzz5s3VtWtXSdLhw4fVvHlzBQcHy8/PTw8++KB+/fXXG/aX1iFxFy5ckM1m04oVKyRJ165dU7du3RQWFiYfHx+VKVNG77//vn3+4cOHa8aMGfr+++/tj3HFihVprnvlypWqXr26vLy8VKhQIb3yyiu6evWqfXq9evXUr18/vfTSS8qXL59CQkJuur0AAIQkAMD/t3z5ch0+fFjLly/XjBkzNH36dE2fPj3NeTdv3ixJmjZtmqKjo+33ndGmTRvFxMTol19+0datW1W1alU1aNBA586dkyR17NhRRYoU0ebNm7V161a98sor8vDwUK1atTRhwgT5+/srOjpa0dHRGjx48G095jZt2ujs2bNavny5ve3cuXNatGiROnbsKEmKj49X06ZNtWzZMm3fvl2NGzdWs2bN9Oeff95Wn5KUnJysIkWKaM6cOfrjjz80dOhQvfrqq5o9e7YkafDgwWrbtq0aN25sf4y1atVKtZ4TJ06oadOmevDBB7Vz505NmjRJn3/+ud566y2H+WbMmCFfX19t3LhRY8aM0RtvvKGlS5fedv0AcLfjcDsAgCQpb968+uijj+Tu7q7w8HA9/vjjWrZsmbp3755q3pTD5AIDA2/r8K81a9Zo06ZNiomJkZeXlyTpvffe04IFCzR37lz16NFDf/75p1588UWFh4dLkkqVKmVfPiAgwL6H6FZiY2Pl5+fn0PbII4/ol19+Ud68edWkSRN9/fXXatCggSRp7ty5KlCggB599FFJUuXKlVW5cmX7sm+++aa+++47/fDDD+rTp4/Tj12SPDw8NGLECPv9sLAwrV+/XrNnz1bbtm3l5+cnHx8fJSYm3vQxTpw4UUWLFtVHH30km82m8PBwnTx5Ui+//LKGDh0qN7d/fwutVKmShg0bJunf7fjRRx9p2bJleuyxx26rfgC42xGSAACSpPLly8vd3d1+v1ChQtq9e3em9LVz507Fx8crf/78Du2XLl3S4cOHJUmDBg3Ss88+q5kzZyoiIkJt2rRRiRIlnO4rT5482rZtm0Obj4+P/e+OHTuqe/fumjhxory8vPTVV1+pffv29oARHx+v4cOH66efflJ0dLSuXr2qS5cu3dGeJEn6+OOPNXXqVP3555+6dOmSkpKSVKVKFafWsXfvXtWsWdPhHKvatWsrPj5ef/31l4oVKybp35BkVahQIcXExNxR/QBwNyMkAcBdzN/fX7GxsanaL1y4oICAAIc2Dw8Ph/s2my3VuToZJT4+XoUKFbKfo2OVMmrd8OHD9d///lc//fSTfvnlFw0bNkzffvutWrZs6VRfbm5uKlmy5A2nN2vWTMYY/fTTT3rwwQe1evVqjR8/3j598ODBWrp0qd577z2VLFlSPj4+euqpp5SUlHTD/iTJGGNvs57bJUnffvutBg8erLFjx6pmzZrKkyeP3n33XW3cuNGpx5ZeWfncAsDdgJAEAHexMmXKaMmSJanat23bptKlS9/Ruj08PHTt2rXbWrZq1ao6deqUcuXKleagDylKly6t0qVLa+DAgerQoYOmTZumli1bytPT87b7vp63t7datWqlr776SocOHVKZMmVUtWpV+/S1a9cqMjLSHs7i4+NvOnR5yqGI0dHR+s9//iNJqa5rtHbtWtWqVUu9evWyt6XsQUuRnsdYtmxZzZs3T8YY+96ktWvXKk+ePCpSpMjNHzgA4IYYuAEA7mI9e/bUgQMH1K9fP+3atUv79+/XuHHj9M033+iFF164o3WHhoZq2bJlOnXqlM6fP+/UshEREapZs6ZatGihJUuW6OjRo1q3bp3+97//acuWLbp06ZL69OmjFStW6NixY1q7dq02b96ssmXL2vuOj4/XsmXL9PfffyshIeGGfRljdOrUqVQ3656Ujh076qefftLUqVPtAzakKFWqlObPn68dO3Zo586d+u9//3vTvTA+Pj6qUaOGRo0apb1792rlypV67bXXUq1zy5YtWrx4sQ4cOKDXX3891eAXoaGh9ufs77//TrU3SpJ69eql48ePq2/fvtq3b5++//57DRs2TIMGDbLv0QIAOI9PUAC4i91///1atWqV9u3bp4iICD300EOaPXu25syZ43ANo9sxduxYLV26VEWLFrXvMUkvm82mn3/+WXXq1FGXLl1UunRptW/fXseOHVNwcLDc3d119uxZderUSaVLl1bbtm3VpEkT+2AHtWrV0vPPP6927dopKChIY8aMuWFfcXFxKlSoUKqb9Zyc+vXrK1++fNq/f7/++9//Oiw/btw45c2bV7Vq1VKzZs3UqFEjhz1NaZk6daquXr2qatWqacCAAalGm3vuuefUqlUrtWvXTg899JDOnj3rsFdJkrp3764yZcrogQceUFBQkNauXZuqn/vuu08///yzNm3apMqVK+v5559Xt27dUoUyAIBzbMZ60DQAAAAA3OPYkwQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIDF/wPzUn4Q+IkF2gAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "unittest_df_pivot.reset_index(inplace=True)\n", + "\n", + "# Plotting\n", + "plt.figure(figsize=(10, 6))\n", + "\n", + "# Set the width of each bar\n", + "bar_width = 0.35\n", + "\n", + "# OpenAI brand colors\n", + "openai_colors = ['#00D1B2', '#000000'] # Green and Black\n", + "\n", + "# Get unique runs and unit test evaluations\n", + "unique_runs = unittest_df_pivot['run'].unique()\n", + "unique_unit_test_evaluations = unittest_df_pivot['unit_test_evaluation'].unique()\n", + "\n", + "# Ensure we have enough colors (repeating the pattern if necessary)\n", + "colors = openai_colors * (len(unique_runs) // len(openai_colors) + 1)\n", + "\n", + "# Iterate over each run to plot\n", + "for i, run in enumerate(unique_runs):\n", + " run_data = unittest_df_pivot[unittest_df_pivot['run'] == run]\n", + "\n", + " # Position of bars for this run\n", + " positions = np.arange(len(unique_unit_test_evaluations)) + i * bar_width\n", + "\n", + " plt.bar(positions, run_data['Number of records'], width=bar_width, label=f'Run {run}', color=colors[i])\n", + "\n", + "# Setting the x-axis labels to be the unit test evaluations, centered under the groups\n", + "plt.xticks(np.arange(len(unique_unit_test_evaluations)) + bar_width / 2, unique_unit_test_evaluations)\n", + "\n", + "plt.xlabel('Unit Test Evaluation')\n", + "plt.ylabel('Number of Records')\n", + "plt.title('Unit Test Evaluations vs Number of Records for Each Run')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "7228eac7-e0a9-473d-9432-e558bbc91841", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Number of records
runevaluation_score
131
43
546
231
43
546
\n", + "
" + ], + "text/plain": [ + " Number of records\n", + "run evaluation_score \n", + "1 3 1\n", + " 4 3\n", + " 5 46\n", + "2 3 1\n", + " 4 3\n", + " 5 46" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Unit test results\n", + "evaluation_df_pivot = pd.pivot_table(run_df, values='format',index=['run','evaluation_score'], #columns='position',\n", + " aggfunc='count')\n", + "evaluation_df_pivot.columns = ['Number of records']\n", + "evaluation_df_pivot" + ] + }, + { + "cell_type": "markdown", + "id": "786515fa-6841-4820-98f9-aa29ae76cf76", + "metadata": {}, + "source": [ + "#### Plotting the results\n", + "\n", + "We can create a simple bar chart to visualise the results of unit tests for both runs." + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "b2a18a78-55ec-43f6-9d62-929707a94364", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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//6mXLlymWocP368uXQXcf78+UzLtWnTxqUWY4ypVq2aadasWaZlP//8cyPJfP7558YYY1JSUkzJkiVN9erVzd9//+1c7sMPPzSSzLhx41zqlGQmTZrk0uett95qateunWldl+rXr5+RZIoWLWq6du1qZsyYYXbt2pVpuXHjxhlJZsWKFZnmpaenG2OMmT17tpFk3nzzTee8lJQU06BBAxMUFGSSkpKMMcbExcUZSSYkJMQkJCS49NWyZUtTo0YNc+HCBZf+GzZsaCpXruxsq1mzprnzzjuv+PouFRsba3x9fc3JkyedbcnJySY0NNRlm3A4HGbIkCFu95+xDW/dutXs37/f+Pj4mKFDhzrnN2vWzFSrVs05nfFeLFq0KFNfl26TGdve/fff72y7ePGiKVu2rLHZbGbatGnO9lOnTpmAgADTv39/Z1vGdnbTTTc5PwtjjHn33XeNJPPCCy8YY/55vytXrmzatGnj/GyN+Wc7r1ChgmndunWmmvr06ZOj92f48OFGkvnqq6+cbWfOnDEVKlQw5cuXN2lpaS6vP6efgSQzaNAgc/z4cZOQkGC2bdtm2rZtaySZ5557zrnc0qVLjZeXl8v6jTFm/vz5RpLZtGmTMcaYvXv3Gi8vL9O1a1eXmoz5v+09ISHB+Pn5mTvuuMNlmZdfftlIMgsXLnS2NWvWzEgy8+fPd+lr1apVRpJ59tlnnW0XL140TZo0cdkuTp06lem15JR1m8xwNfuYsWPHurW+K+3Hjcm870xJSTHVq1c3t99+u7MtJ5+FMcaUK1fOSDJffvmlsy0hIcHY7XYzatSoK9ad020o4/XFxcW5PP/S/bgx//e5L1myxNmWnJxswsPDTffu3a9YE1AQcSQJ8KA5c+Zo/fr1Lg/rr2633367ihcvrmXLljnbTp06pfXr17v8Guzt7e28xiU9PV0nT57UxYsXVadOnRyfNpUTAQEBzn9n/HrarFkz/f7770pMTHS7v23btikhIUEPP/ywy7VKd955p6KiorIcbenBBx90mW7SpIl+//33K65r0aJFevnll1WhQgWtXLlSo0ePVtWqVdWyZUuX027ef/991axZU127ds3UR8apUB999JHCw8PVp08f5zxfX18NHTpUZ8+e1caNG12e1717d5UoUcI5ffLkSX322Wfq1auXzpw54/Lrc5s2bbR3715nTaGhofrll1+0d+/eK75Gq969eys1NVUrVqxwtn3yySc6ffq0y7YTGhqqLVu2XNNRoIoVK+ree+/VK6+8oqNHj151P5f697//7fy3t7e36tSpI2OMBg0a5GwPDQ1VlSpVstwG+vXrp+DgYOd0jx49VLp0aX300UeSpB07dmjv3r26++67deLECefncO7cObVs2VJffvml0tPTXfq8dPvLzkcffaS6deu6nJIXFBSk+++/X3/88YfzlMur8frrr6tEiRIqWbKk6tSpow0bNujxxx/XyJEjncu89957qlq1qqKiolyOcNx+++2S5DwVd9WqVUpPT9e4cePk5eX6J0HG9v7pp58qJSVFw4cPd1lm8ODBCgkJyfQ9tdvtmU4T/uijj+Tj46OHHnrI2ebt7a1HH33UZbmAgAD5+fnpiy++0KlTp672LXK6mn2MtcacuNJ+XHLdd546dUqJiYlq0qSJy/45J59FhujoaDVp0sQ5XaJEiWy/B1nJyTbkrqCgIJfrnPz8/FS3bt0c1wQUNAzcAHhQ3bp1L3vBr4+Pj7p37663335bycnJstvtWrFihVJTUzOdMvPGG29o5syZ2r17t8vpL1mNunS1Nm3apPHjx2vz5s2ZTltLTEyUw+Fwq78DBw5IkqpUqZJpXlRUlL7++muXNn9/f5ewIUlFixbN0R9TXl5eGjJkiIYMGaITJ05o06ZNmj9/vtauXau77rpLX331lSRp//79VzzF5sCBA6pcuXKmP2SqVq3q8royXPoZ7Nu3T8YYPf3003r66aezXEdCQoJuuukmTZo0SZ07d9Ytt9yi6tWrq23btrr33nsVExNz2Rpr1qypqKgoLVu2zBkqli1bpuLFizv/UJakZ599Vv3791dERIRq166t9u3bq1+/fqpYseJl+7/UU089paVLl2ratGlZnnJ4NW6++WaXaYfDIX9/fxUvXjxT+6WnN0lS5cqVXaZtNpsiIyOd11hkBM+sTvnKkJiY6HIKUk6/TwcOHFC9evUytVu3kasdIr1z58565JFHlJKSoq1bt2rKlCk6f/68y/a4d+9e7dq1K9P3JUPGIAf79++Xl5eXoqOjL/tapMzfUz8/P1WsWDHT9n7TTTdlGpjkwIEDKl26tIKCglzaL+3Tbrdr+vTpGjVqlEqVKqX69eurQ4cO6tevn8LDw7Ot0d3apaz3MT4+Pipbtqxb67jSflySPvzwQ02ePFk7duxwuSbMGn5y8llkuPS7IeV8XyjlbBtyV9myZTOFuaJFi2rnzp1X3SfgSYQkoIC76667tGDBAq1du1ZdunTRu+++q6ioKNWsWdO5zJtvvqkBAwaoS5cueuyxx1SyZEnn+feXXsx9qewuFL90MIT9+/erZcuWioqK0vPPP6+IiAj5+fnpo48+0qxZszL94p4XvL29c6WfYsWKqVOnTurUqZOaN2+ujRs36sCBA85rl3Kb9VdkSc73avTo0dmOJJUxfHDTpk21f/9+ffDBB/rkk0/02muvadasWZo/f77LkZas9O7dW88884z++usvBQcHa/Xq1erTp498fP5v19+rVy81adJEK1eu1CeffKLnnntO06dP14oVK9SuXbscv8aKFSvqnnvu0SuvvKKxY8dmmp/T7cwqq887u23AGJPDSv9Pxufw3HPPqVatWlkuc+kf9Zd+lp5QtmxZ5xDX7du3V/HixfXII4+oRYsW6tatm6R/XluNGjX0/PPPZ9lHREREntV3re/R8OHD1bFjR61atUrr1q3T008/ralTp+qzzz7TrbfemktVZs1ut19TUMjKV199pU6dOqlp06aaO3euSpcuLV9fXy1atEhvv/32VfV5rd+DnGxD7n5nc/O7CRQEhCSggGvatKlKly6tZcuWqXHjxvrss88yDYSwfPlyVaxYUStWrHD5j238+PFX7L9o0aJZjjB16a/Da9asUXJyslavXu3yK2ZWI+jldISujFCyZ88el6MbGW15FVqs6tSpo40bN+ro0aMqV66cKlWqpJ9//vmyzylXrpx27typ9PR0lz+odu/e7Zx/ORlHaXx9fXN0P5eMUQ4HDhyos2fPqmnTppowYUKOQtLEiRP1/vvvq1SpUkpKSnIO9mFVunRpPfzww3r44YeVkJCg2267Tc8884xbIUn652jSm2++qenTp2eal3E05tJt7dLtLDddeoqiMUb79u1zHoWrVKmSJCkkJCTX76tTrlw57dmzJ1N7TrcRdzzwwAOaNWuWnnrqKXXt2lU2m02VKlXSjz/+qJYtW172+1ipUiWlp6fr119/zTYoWr+n1iOMKSkpiouLy9F7V65cOW3YsEFnz551CZ5ZvUcZdY0aNUqjRo3S3r17VatWLc2cOVNvvvnmFdeVXe2e2se8//778vf317p162S3253tixYtclkuJ59FXslqG/LEdxYoSLgmCSjgvLy81KNHD61Zs0ZLly7VxYsXM51ql/ELnvUXuy1btmjz5s1X7L9SpUpKTEx0OSXi6NGjLiOsZbeOxMTETP/RS1JgYGCWwetSderUUcmSJTV//nyXU1DWrl2rXbt26c4777xiHzkRHx+f5TUgKSkp2rBhg7y8vJxHbrp3764ff/wx0+uX/u+1t2/fXvHx8S7Xil28eFEvvfSSgoKC1KxZs8vWU7JkSTVv3lwLFizI8hoe632bLj2NLCgoSJGRkVkO43ypqlWrqkaNGlq2bJmWLVum0qVLq2nTps75aWlpma4lK1mypMqUKZOj/i9VqVIl3XPPPVqwYIHi4+Nd5oWEhKh48eKZRqGbO3eu2+vJqSVLlujMmTPO6eXLl+vo0aPO8Fe7dm1VqlRJM2bM0NmzZzM9/1run9W+fXt99913Lt/Bc+fO6ZVXXlH58uVzdEpVTvn4+GjUqFHatWuXPvjgA0n/HCH8888/9eqrr2Za/u+//9a5c+ckSV26dJGXl5cmTZqU6WhwxvbeqlUr+fn56cUXX3T5/r/++utKTEzM0fe0ffv2unjxosstA9LS0jLdhPj8+fO6cOGCS1ulSpUUHBx8Vdtkfu1jLsfb21s2m83lCMwff/yhVatWuSyXk88ir2S1DWX8iGD9zqalpV1xNFHgRsGRJMCD1q5d6/xl2aphw4Yuv9j27t1bL730ksaPH68aNWo4r2vI0KFDB61YsUJdu3bVnXfeqbi4OM2fP1/R0dFZ/vFnddddd2nMmDHq2rWrhg4dqvPnz2vevHm65ZZbXC4qvuOOO+Tn56eOHTvqgQce0NmzZ/Xqq6+qZMmSmf7Qr127tubNm6fJkycrMjJSJUuWzPQrrvTPkZTp06dr4MCBatasmfr06aNjx47phRdeUPny5TVixIgcvY9XcvjwYdWtW1e33367WrZsqfDwcCUkJOi///2vfvzxRw0fPtx5nctjjz2m5cuXq2fPnrrvvvtUu3ZtnTx5UqtXr9b8+fNVs2ZN3X///VqwYIEGDBig77//XuXLl9fy5cu1adMmzZ4922WwgOzMmTNHjRs3Vo0aNTR48GBVrFhRx44d0+bNm3X48GH9+OOPkv65QLt58+aqXbu2wsLCtG3bNi1fvlyPPPJIjl577969NW7cOPn7+2vQoEEuR77OnDmjsmXLqkePHqpZs6aCgoL06aefauvWrdnee+hKnnzySS1dulR79uxRtWrVXOb9+9//1rRp0/Tvf/9bderU0ZdffqnffvvtqtaTE2FhYWrcuLEGDhyoY8eOafbs2YqMjHQO3e3l5aXXXntN7dq1U7Vq1TRw4EDddNNN+vPPP/X5558rJCREa9asuap1jx07Vv/973/Vrl07DR06VGFhYXrjjTcUFxen999/P9dP6RowYIDGjRun6dOnq0uXLrr33nv17rvv6sEHH9Tnn3+uRo0aKS0tTbt379a7776rdevWqU6dOoqMjNSTTz6p//znP2rSpIm6desmu92urVu3qkyZMpo6dapKlCih2NhYTZw4UW3btlWnTp20Z88ezZ07V//6179cLtbPTseOHdWoUSONHTtWf/zxh6Kjo7VixYpMIf23335Ty5Yt1atXL0VHR8vHx0crV67UsWPHsjwKeiX5sY+50n78zjvv1PPPP6+2bdvq7rvvVkJCgubMmaPIyEiXH6dy8lnkpUu3oWrVqql+/fqKjY3VyZMnFRYWpnfeeUcXL17M0zqAAsMzg+oBhdvlho5VFsMkp6enm4iICCPJTJ48OVN/6enpZsqUKaZcuXLGbrebW2+91Xz44YdZDu+tS4ZbNsaYTz75xFSvXt34+fmZKlWqmDfffDPLIcBXr15tYmJijL+/vylfvryZPn26WbhwYaZhYuPj482dd95pgoODjSTncOBZDR1rjDHLli0zt956q7Hb7SYsLMz07dvXHD582GWZ/v37m8DAwEyvPas6L5WUlGReeOEF06ZNG1O2bFnj6+trgoODTYMGDcyrr77qMryuMcacOHHCPPLII+amm24yfn5+pmzZsqZ///7mr7/+ci5z7NgxM3DgQFO8eHHj5+dnatSokelzyxj2OrvhjPfv32/69etnwsPDja+vr7nppptMhw4dzPLly53LTJ482dStW9eEhoaagIAAExUVZZ555hmTkpJy2decYe/evc7t6uuvv3aZl5ycbB577DFTs2ZNExwcbAIDA03NmjXN3Llzr9hvVsMtZ8gYStk6BLgx/wyDPGjQIONwOExwcLDp1auXSUhIyHYI8OPHj2fqN6tt4NLhxjO2s//+978mNjbWlCxZ0gQEBJg777zTHDhwINPzt2/fbrp162aKFStm7Ha7KVeunOnVq5fZsGHD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AAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsHA7JP399986f/68c/rAgQOaPXu2Pvnkk1wtDAAAAAA8we2Q1LlzZy1ZskSSdPr0adWrV08zZ85U586dNW/evFwvEAAAAADyk9sh6YcfflCTJk0kScuXL1epUqV04MABLVmyRC+++GKuFwgAAAAA+cntkHT+/HkFBwdLkj755BN169ZNXl5eql+/vg4cOJDrBQIAAABAfnI7JEVGRmrVqlU6dOiQ1q1bpzvuuEOSlJCQoJCQkFwvEAAAAADyk9shady4cRo9erTKly+vevXqqUGDBpL+Oap06623utXXvHnzFBMTo5CQEIWEhKhBgwZau3atc/6FCxc0ZMgQFStWTEFBQerevbuOHTvmbskAAAAAkGM2Y4xx90nx8fE6evSoatasKS+vf3LWd999p5CQEEVFReW4nzVr1sjb21uVK1eWMUZvvPGGnnvuOW3fvl3VqlXTQw89pP/9739avHixHA6HHnnkEXl5eWnTpk05XkdSUpIcDocSExM50gUAAAo02841ni6h8KjZydMVFCpXETnyRE6zwVWFpLwUFham5557Tj169FCJEiX09ttvq0ePHpKk3bt3q2rVqtq8ebPq16+fo/4ISQAA4HpBSMpHhKR8VVAiR06zgU9OOuvWrVuOV7xixYocL2uVlpam9957T+fOnVODBg30/fffKzU1Va1atXIuExUVpZtvvvmyISk5OVnJycnO6aSkpKuqBwAAAEDhlKNrkhwOh/MREhKiDRs2aNu2bc7533//vTZs2CCHw+F2AT/99JOCgoJkt9v14IMPauXKlYqOjlZ8fLz8/PwUGhrqsnypUqUUHx+fbX9Tp051qTciIsLtmgAAAAAUXjk6krRo0SLnv8eMGaNevXpp/vz58vb2lvTPUaCHH374qk5nq1Klinbs2KHExEQtX75c/fv318aNG93uJ0NsbKxGjhzpnE5KSiIoAQAAAMixHIUkq4ULF+rrr792BiRJ8vb21siRI9WwYUM999xzbvXn5+enyMhISVLt2rW1detWvfDC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wMMOHz6sPn366MSJEypRooQaN26sb7/9ViVKlPB0aShguCYJAAAAACy4TxIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAgX/zxxx+y2WzasWNHnq9r8eLFCg0NzfP1AABuTIQkAIAGDBggm82W6dG2bVtPl3ZF5cuX1+zZs13aevfurd9++y3P1x0XF6e7775bZcqUkb+/v8qWLavOnTtr9+7deb5uAEDe8fF0AQCAgqFt27ZatGiRS5vdbvdQNdcmICBAAQEBebqO1NRUtW7dWlWqVNGKFStUunRpHT58WGvXrtXp06fzdL2+vr551j8AgCNJAID/z263Kzw83OVRtGhRSdLdd9+t3r17uyyfmpqq4sWLa8mSJZKkjz/+WI0bN1ZoaKiKFSumDh06aP/+/dmuL6tT4latWiWbzeac3r9/vzp37qxSpUopKChI//rXv/Tpp5865zdv3lwHDhzQiBEjnEe/sut73rx5qlSpkvz8/FSlShUtXbrUZb7NZtNrr72mrl27qkiRIqpcubJWr16dbf2//PKL9u/fr7lz56p+/foqV66cGjVqpMmTJ6t+/frO5Q4fPqw+ffooLCxMgYGBqlOnjrZs2eJWXfPmzVOnTp0UGBioZ555RpL0wQcf6LbbbpO/v78qVqyoiRMn6uLFi9nWCwDIOUISAOCK+vbtqzVr1ujs2bPOtnXr1un8+fPq2rWrJOncuXMaOXKktm3bpg0bNsjLy0tdu3ZVenr6Va/37Nmzat++vTZs2KDt27erbdu26tixow4ePChJWrFihcqWLatJkybp6NGjOnr0aJb9rFy5UsOGDdOoUaP0888/64EHHtDAgQP1+eefuyw3ceJE9erVSzt37lT79u3Vt29fnTx5Mss+S5QoIS8vLy1fvlxpaWnZ1t+sWTP9+eefWr16tX788Uc9/vjjzvckp3VNmDBBXbt21U8//aT77rtPX331lfr166dhw4bp119/1YIFC7R48WJngAIAXCMDACj0+vfvb7y9vU1gYKDL45lnnjHGGJOammqKFy9ulixZ4nxOnz59TO/evbPt8/jx40aS+emnn4wxxsTFxRlJZvv27cYYYxYtWmQcDofLc1auXGmu9F9TtWrVzEsvveScLleunJk1a5bLMpf23bBhQzN48GCXZXr27Gnat2/vnJZknnrqKef02bNnjSSzdu3abGt5+eWXTZEiRUxwcLBp0aKFmTRpktm/f79z/oIFC0xwcLA5ceJEls/PaV3Dhw93WaZly5ZmypQpLm1Lly41pUuXzrZWAEDOcSQJACBJatGihXbs2OHyePDBByVJPj4+6tWrl9566y1J/xw1+uCDD9S3b1/n8/fu3as+ffqoYsWKCgkJUfny5SXJedTnapw9e1ajR49W1apVFRoaqqCgIO3atcvtPnft2qVGjRq5tDVq1Ei7du1yaYuJiXH+OzAwUCEhIUpISMi23yFDhig+Pl5vvfWWGjRooPfee0/VqlXT+vXrJUk7duzQrbfeqrCwsGuqq06dOi7TP/74oyZNmqSgoCDnY/DgwTp69KjOnz+fbb0AgJxh4AYAgKR/QkFkZGS28/v27atmzZopISFB69evV0BAgMvodx07dlS5cuX06quvqkyZMkpPT1f16tWVkpKSZX9eXl4yxri0paamukyPHj1a69ev14wZMxQZGamAgAD16NEj2z6v1aUDIthstiueLhgcHKyOHTuqY8eOmjx5stq0aaPJkyerdevWuTZ4RGBgoMv02bNnNXHiRHXr1i3Tsv7+/rmyTgAozDiSBADIkYYNGyoiIkLLli3TW2+9pZ49ezpDxYkTJ7Rnzx499dRTatmypapWrapTp05dtr8SJUrozJkzOnfunLPt0nsobdq0SQMGDFDXrl1Vo0YNhYeH648//nBZxs/PL9trgjJUrVpVmzZtytR3dHT0FV61e2w2m6KiopyvKSYmRjt27Mj2uqarreu2227Tnj17FBkZmenh5cV/7QBwrTiSBACQJCUnJys+Pt6lzcfHR8WLF3dO33333Zo/f75+++03l8EFihYtqmLFiumVV15R6dKldfDgQY0dO/ay66tXr56KFCmiJ554QkOHDtWWLVu0ePFil2UqV66sFStWqGPHjrLZbHr66aczHdkpX768vvzyS911112y2+0u9WZ47LHH1KtXL916661q1aqV1qxZoxUrVriMlOeuHTt2aPz48br33nsVHR0tPz8/bdy4UQsXLtSYMWMkSX369NGUKVPUpUsXTZ06VaVLl9b27dtVpkwZNWjQ4KrrGjdunDp06KCbb75ZPXr0kJeXl3788Uf9/PPPmjx58lW/JgDA/+fpi6IAAJ7Xv39/IynTo0qVKi7L/frrr0aSKVeunElPT3eZt379elO1alVjt9tNTEyM+eKLL4wks3LlSmNM5oEbjPlnoIbIyEgTEBBgOnToYF555RWXgRvi4uJMixYtTEBAgImIiDAvv/yyadasmRk2bJhzmc2bN5uYmBhjt9udz81qUIi5c+eaihUrGl9fX3PLLbe4DEJhjHGpNYPD4TCLFi3K8j07fvy4GTp0qKlevboJCgoywcHBpkaNGmbGjBkmLS3Nudwff/xhunfvbkJCQkyRIkVMnTp1zJYtW66pLmOM+fjjj03Dhg1NQECACQkJMXXr1jWvvPJKlrUCANxjM+aSE8IBAAAAoBDjxGUAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAs/h9at1uYvWSJwwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "evaluation_df_pivot.reset_index(inplace=True)\n", + "\n", + "# Plotting\n", + "plt.figure(figsize=(10, 6))\n", + "\n", + "# Set the width of each bar\n", + "bar_width = 0.35\n", + "\n", + "# OpenAI brand colors\n", + "openai_colors = ['#00D1B2', '#000000'] # Green and Black\n", + "\n", + "# Get unique runs and evaluation scores\n", + "unique_runs = evaluation_df_pivot['run'].unique()\n", + "unique_evaluation_scores = evaluation_df_pivot['evaluation_score'].unique()\n", + "\n", + "# Ensure we have enough colors (repeating the pattern if necessary)\n", + "colors = openai_colors * (len(unique_runs) // len(openai_colors) + 1)\n", + "\n", + "# Iterate over each run to plot\n", + "for i, run in enumerate(unique_runs):\n", + " run_data = evaluation_df_pivot[evaluation_df_pivot['run'] == run]\n", + "\n", + " # Position of bars for this run\n", + " positions = np.arange(len(unique_evaluation_scores)) + i * bar_width\n", + "\n", + " plt.bar(positions, run_data['Number of records'], width=bar_width, label=f'Run {run}', color=colors[i])\n", + "\n", + "# Setting the x-axis labels to be the evaluation scores, centered under the groups\n", + "plt.xticks(np.arange(len(unique_evaluation_scores)) + bar_width / 2, unique_evaluation_scores)\n", + "\n", + "plt.xlabel('Evaluation Score')\n", + "plt.ylabel('Number of Records')\n", + "plt.title('Evaluation Scores vs Number of Records for Each Run')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "992f9aa0", + "metadata": {}, + "source": [ + "## Conclusion\n", + "\n", + "Now you have a framework to test SQL generation using LLMs, and with some tweaks this approach can be extended to many other code generation use cases. With GPT-4 and engaged human labellers you can aim to automate the evaluation of these test cases, making an iterative loop where new examples are added to the test set and this structure detects any performance regressions. \n", + "\n", + "We hope you find this useful, and please supply any feedback." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "openai_test", + "language": "python", + "name": "openai_test" + }, + "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.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/registry.yaml b/registry.yaml index 0d23852ca9..70012a91e4 100644 --- a/registry.yaml +++ b/registry.yaml @@ -1194,3 +1194,12 @@ - colin-jarvis tags: - guardrails + +- title: How to evaluate LLMs for SQL generation + path: examples/evaluation/How_to_evaluate_LLMs_for_SQL_generation.ipynb + date: 2024-01-23 + authors: + - colin-jarvis + tags: + - guardrails + From fd214d4b4fd1b674cdc3cbf07cd6152b0f5a6d4e Mon Sep 17 00:00:00 2001 From: Lee Spacagna Date: Fri, 10 Jan 2025 13:39:54 +0200 Subject: [PATCH 2/6] Testing and minor modification to handle edge case on last cell --- ..._to_evaluate_LLMs_for_SQL_generation.ipynb | 800 ++++++++++-------- 1 file changed, 442 insertions(+), 358 deletions(-) diff --git a/examples/evaluation/How_to_evaluate_LLMs_for_SQL_generation.ipynb b/examples/evaluation/How_to_evaluate_LLMs_for_SQL_generation.ipynb index 12d41772e8..addab37b2a 100644 --- a/examples/evaluation/How_to_evaluate_LLMs_for_SQL_generation.ipynb +++ b/examples/evaluation/How_to_evaluate_LLMs_for_SQL_generation.ipynb @@ -49,10 +49,67 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 9, "id": "245fcedb", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Matplotlib is building the font cache; this may take a moment.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cannot find .env file\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "2352f1731ce346a2ad30174380a138a1", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "README.md: 0%| | 0.00/4.43k [00:00\n", " \n", " \n", - " question\n", " answer\n", + " question\n", " context\n", " \n", " \n", " \n", " \n", " 0\n", - " How many heads of the departments are older th...\n", " SELECT COUNT(*) FROM head WHERE age > 56\n", + " How many heads of the departments are older th...\n", " CREATE TABLE head (age INTEGER)\n", " \n", " \n", " 1\n", - " List the name, born state and age of the heads...\n", " SELECT name, born_state, age FROM head ORDER B...\n", + " List the name, born state and age of the heads...\n", " CREATE TABLE head (name VARCHAR, born_state VA...\n", " \n", " \n", " 2\n", - " List the creation year, name and budget of eac...\n", " SELECT creation, name, budget_in_billions FROM...\n", + " List the creation year, name and budget of eac...\n", " CREATE TABLE department (creation VARCHAR, nam...\n", " \n", " \n", " 3\n", - " What are the maximum and minimum budget of the...\n", " SELECT MAX(budget_in_billions), MIN(budget_in_...\n", + " What are the maximum and minimum budget of the...\n", " CREATE TABLE department (budget_in_billions IN...\n", " \n", " \n", " 4\n", - " What is the average number of employees of the...\n", " SELECT AVG(num_employees) FROM department WHER...\n", + " What is the average number of employees of the...\n", " CREATE TABLE department (num_employees INTEGER...\n", " \n", " \n", @@ -160,13 +217,6 @@ "" ], "text/plain": [ - " question \\\n", - "0 How many heads of the departments are older th... \n", - "1 List the name, born state and age of the heads... \n", - "2 List the creation year, name and budget of eac... \n", - "3 What are the maximum and minimum budget of the... \n", - "4 What is the average number of employees of the... \n", - "\n", " answer \\\n", "0 SELECT COUNT(*) FROM head WHERE age > 56 \n", "1 SELECT name, born_state, age FROM head ORDER B... \n", @@ -174,6 +224,13 @@ "3 SELECT MAX(budget_in_billions), MIN(budget_in_... \n", "4 SELECT AVG(num_employees) FROM department WHER... \n", "\n", + " question \\\n", + "0 How many heads of the departments are older th... \n", + "1 List the name, born state and age of the heads... \n", + "2 List the creation year, name and budget of eac... \n", + "3 What are the maximum and minimum budget of the... \n", + "4 What is the average number of employees of the... \n", + "\n", " context \n", "0 CREATE TABLE head (age INTEGER) \n", "1 CREATE TABLE head (name VARCHAR, born_state VA... \n", @@ -182,7 +239,7 @@ "4 CREATE TABLE department (num_employees INTEGER... " ] }, - "execution_count": 2, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -215,7 +272,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 13, "id": "eb811101", "metadata": {}, "outputs": [], @@ -240,7 +297,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 14, "id": "c2be3ba4", "metadata": {}, "outputs": [ @@ -271,7 +328,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 15, "id": "3a20d712", "metadata": {}, "outputs": [ @@ -306,7 +363,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 16, "id": "38b704b3-6f0e-4708-bc70-96723d69da6f", "metadata": {}, "outputs": [], @@ -331,7 +388,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 17, "id": "2b057391-4f83-4b5a-8843-a9ee74bee871", "metadata": {}, "outputs": [ @@ -339,9 +396,11 @@ "name": "stdout", "output_type": "stream", "text": [ - "('{\"create\": \"CREATE TABLE departments (department_id INTEGER PRIMARY KEY, '\n", - " 'department_name TEXT, head_name TEXT, age INTEGER)\", \"select\": \"SELECT '\n", - " 'COUNT(*) FROM departments WHERE age > 56\"}')\n" + "('{\\n'\n", + " ' \"create\": \"CREATE TABLE department_heads (id INT, name VARCHAR(50), age '\n", + " 'INT)\",\\n'\n", + " ' \"select\": \"SELECT COUNT(*) FROM department_heads WHERE age > 56\"\\n'\n", + " '}')\n" ] } ], @@ -364,7 +423,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 18, "id": "4c7133f1-74d6-43f1-9443-09a3f8308c35", "metadata": {}, "outputs": [], @@ -382,7 +441,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 19, "id": "6a9a9128", "metadata": {}, "outputs": [ @@ -392,7 +451,7 @@ "True" ] }, - "execution_count": 9, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -413,7 +472,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 20, "id": "a0a26690", "metadata": {}, "outputs": [ @@ -423,7 +482,7 @@ "text": [ "ERROR: Invalid schema: 1 validation error for LLMResponse\n", " Invalid JSON: expected value at line 1 column 1 [type=json_invalid, input_value='CREATE departments, select * from departments', input_type=str]\n", - " For further information visit https://errors.pydantic.dev/2.5/v/json_invalid\n" + " For further information visit https://errors.pydantic.dev/2.8/v/json_invalid\n" ] }, { @@ -432,7 +491,7 @@ "False" ] }, - "execution_count": 10, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -469,7 +528,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 21, "id": "9cc95481", "metadata": {}, "outputs": [], @@ -512,7 +571,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 22, "id": "c6d2573d", "metadata": {}, "outputs": [], @@ -578,7 +637,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 23, "id": "a9266753-4646-4901-bc14-632d3bf47aaa", "metadata": {}, "outputs": [ @@ -586,8 +645,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CREATE SQL is: CREATE TABLE departments (department_id INTEGER PRIMARY KEY, department_name TEXT, head_name TEXT, age INTEGER)\n", - "SELECT SQL is: SELECT COUNT(*) FROM departments WHERE age > 56\n" + "CREATE SQL is: CREATE TABLE department_heads (id INT, name VARCHAR(50), age INT)\n", + "SELECT SQL is: SELECT COUNT(*) FROM department_heads WHERE age > 56\n" ] } ], @@ -601,7 +660,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 24, "id": "83bc1f1b", "metadata": {}, "outputs": [ @@ -609,8 +668,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "Testing create query: CREATE TABLE departments (department_id INTEGER PRIMARY KEY, department_name TEXT, head_name TEXT, age INTEGER)\n", - "Testing select query: SELECT COUNT(*) FROM departments WHERE age > 56\n", + "Testing create query: CREATE TABLE department_heads (id INT, name VARCHAR(50), age INT)\n", + "Testing select query: SELECT COUNT(*) FROM department_heads WHERE age > 56\n", "[(0,)]\n" ] }, @@ -620,7 +679,7 @@ "True" ] }, - "execution_count": 14, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -633,7 +692,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 25, "id": "589c7cc7", "metadata": {}, "outputs": [ @@ -652,7 +711,7 @@ "False" ] }, - "execution_count": 15, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -679,7 +738,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 26, "id": "029c8426", "metadata": {}, "outputs": [], @@ -732,7 +791,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 27, "id": "85cfb78d", "metadata": {}, "outputs": [], @@ -763,7 +822,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 28, "id": "607ee304", "metadata": {}, "outputs": [], @@ -781,7 +840,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 29, "id": "bd1002c2", "metadata": {}, "outputs": [ @@ -850,7 +909,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 30, "id": "85c44a17", "metadata": {}, "outputs": [ @@ -880,7 +939,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 31, "id": "1244c44e", "metadata": {}, "outputs": [], @@ -907,7 +966,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 32, "id": "a98afa30", "metadata": {}, "outputs": [], @@ -945,7 +1004,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 33, "id": "898e5069", "metadata": {}, "outputs": [], @@ -956,7 +1015,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 34, "id": "2baec278", "metadata": {}, "outputs": [ @@ -964,152 +1023,157 @@ "name": "stdout", "output_type": "stream", "text": [ - "Testing create query: CREATE TABLE partnerships (id INT, player1 VARCHAR(255), player2 VARCHAR(255), venue VARCHAR(255))\n", + "Testing create query: CREATE TABLE partnerships (id INT, player1 VARCHAR(50), player2 VARCHAR(50), venue VARCHAR(100))\n", "Testing select query: SELECT venue FROM partnerships WHERE player1 = 'shoaib malik' AND player2 = 'misbah-ul-haq'\n", "[]\n", - "Testing create query: CREATE TABLE partnerships (id INT, player1 VARCHAR(255), player2 VARCHAR(255), venue VARCHAR(255))\n", - "Testing select query: SELECT venue FROM partnerships WHERE player1 = 'herschelle gibbs' AND player2 = 'justin kemp'\n", + "Testing create query: No table creation needed for this question\n", + "Error while creating the SQLite table: near \"No\": syntax error\n", + "Testing select query: SELECT venue FROM partnership_table WHERE player1 = 'herschelle gibbs' AND player2 = 'justin kemp'\n", + "Error while executing select query: no such table: partnership_table\n", + "Testing create query: CREATE TABLE games (Played INT, Points INT)\n", + "Testing select query: SELECT Played FROM games WHERE Points = 310\n", + "[]\n", + "Testing create query: CREATE TABLE losing_bonuses (id INT, points_against INT, losing_bonus VARCHAR(50))\n", + "Testing select query: SELECT losing_bonus FROM losing_bonuses WHERE points_against = 588\n", "[]\n", - "Testing create query: CREATE TABLE Played (Number INT, Points INT)\n", - "Testing select query: SELECT * FROM Played WHERE Points = 310\n", + "Testing create query: CREATE TABLE rugby_matches (team1 VARCHAR(50), team2 VARCHAR(50), tries_against INT, losing_bonus INT)\n", + "Testing select query: SELECT * FROM rugby_matches WHERE tries_against = 7 AND losing_bonus = 1\n", "[]\n", - "Testing create query: CREATE TABLE losing_bonus (bonus_id INT, points_against INT)\n", - "Testing select query: SELECT * FROM losing_bonus WHERE points_against = 588\n", + "Testing create query: CREATE TABLE try_bonus (id INT, points_against INT)\n", + "Testing select query: SELECT * FROM try_bonus WHERE points_against = 488\n", "[]\n", - "Testing create query: CREATE TABLE rugby_teams (team_name VARCHAR(255), tries_against INT, losing_bonus INT);\n", - "Testing select query: SELECT * FROM rugby_teams WHERE tries_against = 7;\n", + "Testing create query: CREATE TABLE Points (team_name VARCHAR(50), Try_bonus INT)\n", + "Testing select query: SELECT team_name FROM Points WHERE Try_bonus = 140\n", "[]\n", - "Testing create query: CREATE TABLE try_bonus (id INT, points_against INT, try_bonus VARCHAR(50))\n", - "Testing select query: SELECT try_bonus FROM try_bonus WHERE points_against = 488\n", + "Testing create query: CREATE TABLE Drawn (Drawn_id INT, Tries_against INT)\n", + "Testing select query: SELECT Drawn_id FROM Drawn WHERE Tries_against = 0\n", "[]\n", - "Testing create query: CREATE TABLE Points (Team VARCHAR(255), Try_Bonus INT)\n", - "Testing select query: SELECT Team FROM Points WHERE Try_Bonus = 140\n", + "Testing create query: CREATE TABLE champions (id INT, name VARCHAR(255), reign_days INT, defenses INT)\n", + "Testing select query: SELECT name, reign_days FROM champions WHERE reign_days > 3 AND defenses = 1\n", "[]\n", - "Testing create query: CREATE TABLE Drawn (Team TEXT, Tries_against INT);\n", - "Testing select query: SELECT * FROM Drawn WHERE Tries_against = 0;\n", + "Testing create query: CREATE TABLE champion_reigns (id INT, champion_name VARCHAR(50), days_held INT, defenses INT)\n", + "Testing select query: SELECT days_held FROM champion_reigns WHERE days_held > 3 AND defenses < 1\n", "[]\n", - "Testing create query: CREATE TABLE champion (id INT, name VARCHAR(255), reign_days INT, defenses INT)\n", - "Testing select query: SELECT days_held FROM champion WHERE reign_days > 3 AND defenses = 1\n", - "Error while executing select query: no such column: days_held\n", - "Testing create query: CREATE TABLE champion (id INT, name VARCHAR(255), reign_days INT, defenses INT);\n", - "Testing select query: SELECT days_held FROM champion WHERE reign_days > 3 AND defenses < 1;\n", - "Error while executing select query: no such column: days_held\n", - "Testing create query: CREATE TABLE champion_stats (champion_id INT, days_held INT, reign INT, defenses INT)\n", - "Testing select query: SELECT AVG(defenses) FROM champion_stats WHERE days_held = 404 AND reign > 1\n", + "Testing create query: CREATE TABLE champion_defenses (champion_id INT, days_held INT, defenses INT)\n", + "Testing select query: SELECT AVG(defenses) AS average_defenses FROM champion_defenses WHERE days_held = 404 AND defenses > 1\n", "[(None,)]\n", - "Testing create query: CREATE TABLE champions (name VARCHAR(255), days_held INT, defense INT)\n", + "Testing create query: CREATE TABLE champions (id INT, name VARCHAR(50), days_held INT, defense INT)\n", "Testing select query: SELECT MIN(defense) FROM champions WHERE days_held = 345\n", "[(None,)]\n", - "Testing create query: CREATE TABLE records (date DATE, record VARCHAR(10))\n", - "Testing select query: SELECT date FROM records WHERE record = '76-72'\n", + "Testing create query: CREATE TABLE records (date DATE, score VARCHAR(10))\n", + "Testing select query: SELECT date FROM records WHERE score = '76-72'\n", "[]\n", - "Testing create query: CREATE TABLE attendance (game_id INT, loss VARCHAR(20), attendance INT);\n", - "Testing select query: SELECT attendance FROM attendance WHERE loss = 'Ponson (1-5)';\n", + "Testing create query: CREATE TABLE attendance_data (game_id INT, attendance INT, result VARCHAR(10))\n", + "Testing select query: SELECT attendance FROM attendance_data WHERE result = '1-5' AND loss = 'Ponson'\n", + "Error while executing select query: no such column: loss\n", + "Testing create query: CREATE TABLE records (id INT, value INT, day DATE)\n", + "Testing select query: SELECT day FROM records WHERE value BETWEEN 36 AND 39\n", "[]\n", - "Testing create query: CREATE TABLE records (day VARCHAR(10), record INT);\n", - "Testing select query: SELECT day FROM records WHERE record >= 36 AND record <= 39;\n", + "Testing create query: CREATE TABLE records (record_id INT, record_date DATE)\n", + "Testing select query: SELECT record_date FROM records WHERE record_id = '30-31'\n", "[]\n", - "Testing create query: CREATE TABLE records (id INT, date DATE);\n", - "Testing select query: SELECT date FROM records WHERE id = '30-31';\n", + "Testing create query: CREATE TABLE games (game_id INT, opponent VARCHAR(50), result VARCHAR(10))\n", + "Testing select query: SELECT opponent FROM games WHERE result = 'loss' AND game_id = 7\n", "[]\n", - "Testing create query: CREATE TABLE games (game_id INT, opponent VARCHAR(255), result VARCHAR(255))\n", - "Testing select query: SELECT opponent FROM games WHERE result = 'loss' AND game_id = (SELECT game_id FROM games WHERE opponent = 'Leonard' AND result = '7–8')\n", + "Testing create query: CREATE TABLE game_scores (game_id INT, home_team_score INT, away_team_score INT)\n", + "Testing select query: SELECT home_team_score, away_team_score FROM game_scores WHERE home_team_score = 18 AND away_team_score = 43\n", "[]\n", - "Testing create query: CREATE TABLE game_scores (record VARCHAR(10), score INT);\n", - "Testing select query: SELECT score FROM game_scores WHERE record = '18–43';\n", - "[]\n", - "Testing create query: CREATE TABLE game_scores (game_id INT, opponent VARCHAR(255), score INT)\n", + "Testing create query: CREATE TABLE game_scores (game_id INT, opponent VARCHAR(50), score INT, record VARCHAR(10))\n", "Testing select query: SELECT score FROM game_scores WHERE opponent = 'Royals' AND record = '24–52'\n", - "Error while executing select query: no such column: record\n", - "Testing create query: CREATE TABLE game_scores (record VARCHAR(10), score INT);\n", - "Testing select query: SELECT score FROM game_scores WHERE record = '22–46';\n", "[]\n", - "Testing create query: CREATE TABLE military_specialties (id INT, specialty_name VARCHAR(255), real_name VARCHAR(255))\n", - "Testing select query: SELECT real_name FROM military_specialties WHERE specialty_name = 'shock paratrooper'\n", + "Testing create query: CREATE TABLE game_scores (record VARCHAR(10), score INT)\n", + "Testing select query: SELECT score FROM game_scores WHERE record = '22–46'\n", "[]\n", - "Testing create query: CREATE TABLE IF NOT EXISTS people (id INT PRIMARY KEY, name VARCHAR(255), birthplace VARCHAR(255))\n", - "Testing select query: SELECT birthplace FROM people WHERE name = 'Pete Sanderson'\n", + "Testing create query: CREATE TABLE military_personnel (id INT, real_name VARCHAR(255), primary_military_specialty VARCHAR(255))\n", + "Testing select query: SELECT real_name FROM military_personnel WHERE primary_military_specialty = 'shock paratrooper'\n", "[]\n", - "Testing create query: CREATE TABLE roles (id INT, name VARCHAR(255), role VARCHAR(255))\n", - "Testing select query: SELECT role FROM roles WHERE name = 'Jean-Luc Bouvier'\n", + "Testing create query: CREATE TABLE persons (id INT, name VARCHAR(255), birthplace VARCHAR(255))\n", + "Testing select query: SELECT birthplace FROM persons WHERE name = 'Pete Sanderson'\n", "[]\n", - "Testing create query: CREATE TABLE pilots (id INT, name VARCHAR(255), kayak VARCHAR(255))\n", - "Testing select query: SELECT name FROM pilots WHERE kayak = 'silent attack kayak'\n", + "Testing create query: No table creation needed for this question\n", + "Error while creating the SQLite table: near \"No\": syntax error\n", + "Testing select query: SELECT role FROM employees WHERE name = 'Jean-Luc Bouvier'\n", + "Error while executing select query: no such table: employees\n", + "Testing create query: CREATE TABLE pilots (id INT, real_name VARCHAR(255), callsign VARCHAR(255))\n", + "Testing select query: SELECT real_name FROM pilots WHERE callsign = 'silent attack kayak'\n", "[]\n", - "Testing create query: CREATE TABLE persons (id INT, name VARCHAR(255), birthplace VARCHAR(255), code_name VARCHAR(255))\n", + "Testing create query: CREATE TABLE persons (id INT, name VARCHAR(50), birthplace VARCHAR(50), code_name VARCHAR(50))\n", "Testing select query: SELECT code_name FROM persons WHERE birthplace = 'Liverpool'\n", "[]\n", - "Testing create query: CREATE TABLE medalists (name VARCHAR(255), sport VARCHAR(255))\n", + "Testing create query: CREATE TABLE medalists (id INT, name VARCHAR(50), sport VARCHAR(50), medal VARCHAR(20))\n", "Testing select query: SELECT name FROM medalists WHERE sport = 'canoeing'\n", "[]\n", - "Testing create query: CREATE TABLE IF NOT EXISTS events (event_id INT, event_name VARCHAR(255), event_category VARCHAR(255), event_gender VARCHAR(255), event_weight VARCHAR(255))\n", - "Testing select query: SELECT event_name FROM events WHERE event_category = 'Women' AND event_weight = 'Half Middleweight'\n", + "Testing create query: CREATE TABLE events (event_id INT, event_name VARCHAR(50), event_category VARCHAR(50), event_type VARCHAR(50))\n", + "Testing select query: SELECT event_name FROM events WHERE event_category = 'women' AND event_type = 'half middleweight'\n", "[]\n", - "Testing create query: CREATE TABLE medals (id INT, athlete_name VARCHAR(255), medal VARCHAR(255), year INT, city VARCHAR(255))\n", - "Testing select query: SELECT athlete_name FROM medals WHERE medal = 'bronze' AND year = 2000 AND city = 'Sydney'\n", + "Testing create query: CREATE TABLE olympic_medals (athlete_id INT, athlete_name VARCHAR(255), event VARCHAR(255), year INT, city VARCHAR(255), medal VARCHAR(255))\n", + "Testing select query: SELECT athlete_name FROM olympic_medals WHERE year = 2000 AND city = 'Sydney' AND medal = 'Bronze'\n", "[]\n", - "Testing create query: CREATE TABLE attendance (id INT, opponent VARCHAR(255), attendees INT);\n", - "Testing select query: SELECT COUNT(*) FROM attendance WHERE opponent = 'twins';\n", + "Testing create query: CREATE TABLE attendance (id INT, opponent VARCHAR(50), attendees INT)\n", + "Testing select query: SELECT COUNT(attendees) FROM attendance WHERE opponent = 'twins'\n", "[(0,)]\n", - "Testing create query: CREATE TABLE records (id INT, date DATE, record INT);\n", - "Testing select query: SELECT date FROM records WHERE record BETWEEN 41 AND 46;\n", - "[]\n", - "Testing create query: CREATE TABLE scores (id INT, record VARCHAR(10), score INT);\n", - "Testing select query: SELECT score FROM scores WHERE record = '48-55';\n", + "Testing create query: CREATE TABLE records (date DATE, record VARCHAR(10))\n", + "Testing select query: SELECT date FROM records WHERE record = '41-46'\n", "[]\n", - "Testing create query: CREATE TABLE scores (id INT, record VARCHAR(10), score INT);\n", - "Testing select query: SELECT score FROM scores WHERE record = '44-49';\n", + "Testing create query: CREATE TABLE scores (id INT, record VARCHAR(10), score INT)\n", + "Testing select query: SELECT score FROM scores WHERE record = '48-55'\n", "[]\n", - "Testing create query: CREATE TABLE scores (Opponent TEXT, Record TEXT, Score INTEGER);\n", - "Testing select query: SELECT Score FROM scores WHERE Opponent = 'white sox' AND Record = '2-0';\n", + "Testing create query: CREATE TABLE scores (id INT, record VARCHAR(10), score INT)\n", + "Testing select query: SELECT score FROM scores WHERE record = '44-49'\n", "[]\n", - "Testing create query: CREATE TABLE votes (candidate_name VARCHAR(255), vote_count INT);\n", - "Testing select query: SELECT vote_count FROM votes WHERE candidate_name = 'candice sjostrom';\n", + "Testing create query: CREATE TABLE scores (Opponent VARCHAR(50), Record VARCHAR(5), Score INT)\n", + "Testing select query: SELECT Score FROM scores WHERE Opponent = 'white sox' AND Record = '2-0'\n", "[]\n", - "Testing create query: CREATE TABLE percentages (name VARCHAR(255), percentage FLOAT);\n", - "Testing select query: SELECT percentage FROM percentages WHERE name = 'chris wright';\n", + "Testing create query: No table creation needed for this question\n", + "Error while creating the SQLite table: near \"No\": syntax error\n", + "Testing select query: SELECT votes FROM candidates WHERE name = 'Candice Sjostrom'\n", + "Error while executing select query: no such table: candidates\n", + "Testing create query: CREATE TABLE percentages (name VARCHAR(50), percentage DECIMAL(5,2))\n", + "Testing select query: SELECT percentage FROM percentages WHERE name = 'Chris Wright'\n", "[]\n", - "Testing create query: CREATE TABLE votes (year INT, candidate VARCHAR(255), vote_percentage FLOAT, office VARCHAR(255))\n", - "Testing select query: SELECT COUNT(*) FROM votes WHERE year > 1992 AND vote_percentage = 1.59 AND office = 'us representative 4'\n", + "Testing create query: CREATE TABLE candidate_votes (year INT, candidate VARCHAR(50), vote_percentage DECIMAL(5,2), office VARCHAR(50))\n", + "Testing select query: SELECT COUNT(*) FROM candidate_votes WHERE year > 1992 AND vote_percentage = 1.59 AND office = 'US Representative 4'\n", "[(0,)]\n", - "Testing create query: CREATE TABLE representatives (id INT, name VARCHAR(255), year_start INT, year_end INT)\n", - "Testing select query: SELECT year_start, year_end FROM representatives WHERE name = 'J. Smith Young'\n", + "Testing create query: CREATE TABLE representatives (id INT, name VARCHAR(255), start_year INT, end_year INT)\n", + "Testing select query: SELECT start_year, end_year FROM representatives WHERE name = 'J. Smith Young'\n", "[]\n", - "Testing create query: CREATE TABLE politicians (id INT, name VARCHAR(255), party VARCHAR(255))\n", + "Testing create query: No table creation needed for this question\n", + "Error while creating the SQLite table: near \"No\": syntax error\n", "Testing select query: SELECT party FROM politicians WHERE name = 'Thomas L. Young'\n", - "[]\n", - "Testing create query: CREATE TABLE medals (country TEXT, gold INTEGER, silver INTEGER, bronze INTEGER);\n", - "Testing select query: SELECT MIN(gold + silver + bronze) AS lowest_total_medals FROM medals WHERE gold = 0 AND silver > 1 AND bronze > 2;\n", + "Error while executing select query: no such table: politicians\n", + "Testing create query: CREATE TABLE medals (country VARCHAR(50), gold INT, silver INT, bronze INT)\n", + "Testing select query: SELECT MIN(silver + bronze) AS lowest_total_medals FROM medals WHERE gold = 0 AND silver > 1 AND bronze > 2\n", "[(None,)]\n", - "Testing create query: CREATE TABLE medals (country TEXT, rank INTEGER, gold INTEGER, silver INTEGER, bronze INTEGER, total INTEGER);\n", - "Testing select query: SELECT SUM(silver) AS total_silver FROM medals WHERE rank = 14 AND total < 1;\n", - "[(None,)]\n", - "Testing create query: CREATE TABLE player_stats (player_id INT, tackles INT, fumble_recoveries INT, forced_fumbles INT);\n", - "Testing select query: SELECT COUNT(tackles) FROM player_stats WHERE fumble_recoveries > 0 AND forced_fumbles > 0;\n", - "[(0,)]\n", - "Testing create query: CREATE TABLE forced_fumbles (player_name VARCHAR(255), solo_tackles INT, forced_fumbles INT);\n", - "Testing select query: SELECT COUNT(forced_fumbles) FROM forced_fumbles WHERE player_name = 'jim laney' AND solo_tackles < 2;\n", - "[(0,)]\n", - "Testing create query: CREATE TABLE player_stats (player_id INT, solo_tackles INT, total INT);\n", - "Testing select query: SELECT MAX(total) AS high_total FROM player_stats WHERE solo_tackles > 15;\n", + "Testing create query: CREATE TABLE country_medals (country_name VARCHAR(50), rank INT, total_medals INT, silver_medals INT)\n", + "Testing select query: SELECT SUM(silver_medals) AS total_silver_medals FROM country_medals WHERE rank = 14 AND total_medals < 1\n", "[(None,)]\n", - "Testing create query: CREATE TABLE fumble_recoveries (player_name VARCHAR(255), forced_fumbles INT, sacks INT, solo_tackles INT, fumble_recoveries INT);\n", - "Testing select query: SELECT COUNT(fumble_recoveries) FROM fumble_recoveries WHERE player_name = 'scott gajos' AND forced_fumbles = 0 AND sacks = 0 AND solo_tackles < 2;\n", - "[(0,)]\n", - "Testing create query: CREATE TABLE matches (id INT, opponent VARCHAR(255), time VARCHAR(255), location VARCHAR(255))\n", - "Testing select query: SELECT opponent FROM matches WHERE time = '20:00 GMT' AND location = 'Camp Nou'\n", - "[]\n", - "Testing create query: CREATE TABLE matches (id INT, match_time TIME, score VARCHAR(5))\n", - "Testing select query: SELECT match_time FROM matches WHERE score = '3-2'\n", + "Testing create query: CREATE TABLE player_stats (player_id INT, tackles INT, fumble_recoveries INT, forced_fumbles INT)\n", + "Testing select query: SELECT tackles FROM player_stats WHERE fumble_recoveries > 0 AND forced_fumbles = 0\n", "[]\n", - "Testing create query: CREATE TABLE grounds (id INT, name VARCHAR(255))\n", - "Testing select query: SELECT name FROM grounds WHERE id IN (SELECT ground_id FROM team_grounds WHERE team_id = (SELECT id FROM teams WHERE name = 'Aston Villa'))\n", - "Error while executing select query: no such table: team_grounds\n", - "Testing create query: CREATE TABLE competition (id INT, name VARCHAR(255), type VARCHAR(255), time TIMESTAMP);\n", - "Testing select query: SELECT type FROM competition WHERE time = '18:30 GMT' AND name = 'San Siro';\n", + "Testing create query: CREATE TABLE player_stats (player_name VARCHAR(50), forced_fumbles INT, solo_tackles INT)\n", + "Testing select query: SELECT forced_fumbles FROM player_stats WHERE player_name = 'Jim Laney' AND solo_tackles < 2\n", "[]\n", - "Testing create query: CREATE TABLE decile (school_name VARCHAR(255), locality VARCHAR(255), decile INT)\n", - "Testing select query: SELECT COUNT(decile) AS total_decile FROM decile WHERE locality = 'redwood school'\n", + "Testing create query: CREATE TABLE player_stats (player_id INT, solo_tackles INT, total INT)\n", + "Testing select query: SELECT MAX(total) AS high_total FROM player_stats WHERE solo_tackles > 15\n", + "[(None,)]\n", + "Testing create query: CREATE TABLE fumble_stats (player_name VARCHAR(50), fumble_recoveries INT, forced_fumbles INT, sacks INT, solo_tackles INT)\n", + "Testing select query: SELECT fumble_recoveries FROM fumble_stats WHERE player_name = 'scott gajos' AND forced_fumbles = 0 AND sacks = 0 AND solo_tackles < 2\n", + "[]\n", + "Testing create query: No table creation needed for this request\n", + "Error while creating the SQLite table: near \"No\": syntax error\n", + "Testing select query: SELECT Opponent FROM Matches WHERE Time = '20:00 GMT' AND Venue = 'Camp Nou'\n", + "Error while executing select query: no such table: Matches\n", + "Testing create query: CREATE TABLE matches (match_id INT, match_date DATE, match_time TIME, home_team VARCHAR(50), away_team VARCHAR(50), home_score INT, away_score INT)\n", + "Testing select query: SELECT match_time FROM matches WHERE home_score = 3 AND away_score = 2\n", + "[]\n", + "Testing create query: CREATE TABLE grounds (ground_id INT, ground_name VARCHAR(50))\n", + "Testing select query: SELECT ground_name FROM grounds WHERE ground_id = (SELECT ground_id FROM matches WHERE team_name = 'Aston Villa')\n", + "Error while executing select query: no such table: matches\n", + "Testing create query: CREATE TABLE competitions (id INT, name VARCHAR(255), location VARCHAR(255), time VARCHAR(50))\n", + "Testing select query: SELECT name FROM competitions WHERE location = 'San Siro' AND time = '18:30 GMT'\n", + "[]\n", + "Testing create query: CREATE TABLE schools (school_id INT, school_name VARCHAR(50), locality VARCHAR(50), decile INT)\n", + "Testing select query: SELECT COUNT(decile) AS total_decile FROM schools WHERE locality = 'redwood school'\n", "[(0,)]\n", "Testing create query: CREATE TABLE reports (id INT, report_name VARCHAR(255), circuit_name VARCHAR(255))\n", "Testing select query: SELECT report_name FROM reports WHERE circuit_name = 'Tripoli'\n", @@ -1136,7 +1200,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 35, "id": "8fe18367", "metadata": {}, "outputs": [], @@ -1161,7 +1225,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 36, "id": "650e6159", "metadata": {}, "outputs": [ @@ -1169,12 +1233,12 @@ "data": { "text/plain": [ "unit_test_evaluation\n", - "correct 46\n", - "SQL incorrect 4\n", + "SQL correct 43\n", + "SQL incorrect 7\n", "Name: count, dtype: int64" ] }, - "execution_count": 26, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -1185,7 +1249,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 37, "id": "b3f98f81", "metadata": { "scrolled": true @@ -1195,13 +1259,13 @@ "data": { "text/plain": [ "evaluation_score\n", - "5 46\n", - "4 3\n", - "3 1\n", + "5 45\n", + "3 3\n", + "4 2\n", "Name: count, dtype: int64" ] }, - "execution_count": 27, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -1222,7 +1286,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 38, "id": "513a2da1", "metadata": {}, "outputs": [ @@ -1254,7 +1318,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 39, "id": "70bd3e32", "metadata": {}, "outputs": [ @@ -1262,155 +1326,160 @@ "name": "stdout", "output_type": "stream", "text": [ - "Testing create query: CREATE TABLE partnerships (id INT, player1 VARCHAR(255), player2 VARCHAR(255), venue VARCHAR(255))\n", - "Testing select query: SELECT venue FROM partnerships WHERE player1 = 'shoaib malik' AND player2 = 'misbah-ul-haq'\n", + "Testing create query: CREATE TABLE partnerships (id INT, player1 VARCHAR(50), player2 VARCHAR(50), venue VARCHAR(100));\n", + "Testing select query: SELECT venue FROM partnerships WHERE player1 = 'shoaib malik' AND player2 = 'misbah-ul-haq';\n", + "[]\n", + "Testing create query: CREATE TABLE partnerships (id INT, player1 VARCHAR(50), player2 VARCHAR(50), venue VARCHAR(50))\n", + "Testing select query: SELECT venue FROM partnerships WHERE player1 = 'herschelle gibbs' AND player2 = 'justin kemp'\n", + "[]\n", + "Testing create query: CREATE TABLE games (Played INT, Points INT)\n", + "Testing select query: SELECT Played FROM games WHERE Points = 310\n", + "[]\n", + "Testing create query: CREATE TABLE losing_bonuses (bonus_id INT, points_against INT)\n", + "Testing select query: SELECT * FROM losing_bonuses WHERE points_against = 588\n", "[]\n", - "Testing create query: CREATE TABLE partnerships (partnership_id INT, player1 VARCHAR(255), player2 VARCHAR(255), venue VARCHAR(255));\n", - "Testing select query: SELECT venue FROM partnerships WHERE player1 = 'herschelle gibbs' AND player2 = 'justin kemp';\n", + "Testing create query: CREATE TABLE tries_table (team VARCHAR(50), tries_scored INT, losing_bonus INT)\n", + "Testing select query: SELECT team FROM tries_table WHERE losing_bonus = 7\n", "[]\n", - "Testing create query: CREATE TABLE scores (NumberPlayed INT, Points INT);\n", - "Testing select query: SELECT NumberPlayed FROM scores WHERE Points = 310;\n", + "Testing create query: CREATE TABLE bonus_points (Try_bonus VARCHAR(50), Points_against INT)\n", + "Testing select query: SELECT Try_bonus FROM bonus_points WHERE Points_against = 488\n", "[]\n", - "Testing create query: CREATE TABLE losing_bonus (bonus_id INT, points_against INT)\n", - "Testing select query: SELECT * FROM losing_bonus WHERE points_against = 588\n", + "Testing create query: CREATE TABLE Points (team_name VARCHAR(50), Try_bonus INT)\n", + "Testing select query: SELECT team_name FROM Points WHERE Try_bonus = 140\n", "[]\n", - "Testing create query: CREATE TABLE rugby_teams (team_name VARCHAR(255), tries_against INT, losing_bonus INT);\n", - "Testing select query: SELECT * FROM rugby_teams WHERE tries_against = 7;\n", + "Testing create query: CREATE TABLE Drawn (Drawn_id INT, Tries_against INT)\n", + "Testing select query: SELECT * FROM Drawn WHERE Tries_against = 0\n", "[]\n", - "Testing create query: CREATE TABLE try_bonus (try_bonus_id INT, points_against INT)\n", - "Testing select query: SELECT try_bonus FROM try_bonus WHERE points_against = 488\n", - "Error while executing select query: no such column: try_bonus\n", - "Testing create query: CREATE TABLE Points (Team VARCHAR(255), Try_Bonus INT)\n", - "Testing select query: SELECT Team FROM Points WHERE Try_Bonus = 140\n", + "Testing create query: CREATE TABLE champions (id INT, name VARCHAR(50), reign_days INT, defenses INT)\n", + "Testing select query: SELECT reign_days FROM champions WHERE reign_days > 3 AND defenses = 1\n", "[]\n", - "Testing create query: CREATE TABLE Drawn (Team TEXT, Tries_against INT);\n", - "Testing select query: SELECT * FROM Drawn WHERE Tries_against = 0;\n", + "Testing create query: CREATE TABLE champion_reigns (id INT, champion_name VARCHAR(255), days_held INT, defenses INT)\n", + "Testing select query: SELECT days_held FROM champion_reigns WHERE defenses < 1 AND days_held > 3\n", "[]\n", - "Testing create query: CREATE TABLE IF NOT EXISTS champions (id INT, name VARCHAR(255), reign_days INT, defenses INT);\n", - "Testing select query: SELECT days_held FROM champions WHERE reign_days > 3 AND defenses = 1;\n", - "Error while executing select query: no such column: days_held\n", - "Testing create query: CREATE TABLE champion (name VARCHAR(255), reign_days INT, defenses INT);\n", - "Testing select query: SELECT days_held FROM champion WHERE reign_days > 3 AND defenses < 1;\n", - "Error while executing select query: no such column: days_held\n", - "Testing create query: CREATE TABLE champion_stats (champion_name VARCHAR(255), days_held INT, reign INT, defenses INT);\n", - "Testing select query: SELECT AVG(defenses) FROM champion_stats WHERE days_held = 404 AND reign > 1;\n", + "Testing create query: CREATE TABLE champion_defenses (champion_id INT, days_held INT, defenses INT)\n", + "Testing select query: SELECT AVG(defenses) FROM champion_defenses WHERE days_held = 404 AND defenses > 1\n", "[(None,)]\n", - "Testing create query: CREATE TABLE champions (name VARCHAR(255), days_held INT, defense INT);\n", - "Testing select query: SELECT MIN(defense) FROM champions WHERE days_held = 345;\n", + "Testing create query: CREATE TABLE champions (name VARCHAR(50), days_held INT, defense INT)\n", + "Testing select query: SELECT MIN(defense) FROM champions WHERE days_held = 345\n", "[(None,)]\n", - "Testing create query: CREATE TABLE records (date DATE, record VARCHAR(10));\n", - "Testing select query: SELECT date FROM records WHERE record = '76-72';\n", + "Testing create query: CREATE TABLE records (date DATE, score VARCHAR(10))\n", + "Testing select query: SELECT date FROM records WHERE score = '76-72'\n", "[]\n", - "Testing create query: CREATE TABLE attendance (game_id INT, loss VARCHAR(10), attendance INT);\n", - "Testing select query: SELECT attendance FROM attendance WHERE loss = 'Ponson (1-5)';\n", + "Testing create query: CREATE TABLE attendance_data (game_id INT, attendance INT, result VARCHAR(10))\n", + "Testing select query: SELECT attendance FROM attendance_data WHERE result = '1-5' AND loss = 'Ponson'\n", + "Error while executing select query: no such column: loss\n", + "Testing create query: CREATE TABLE records (id INT, day VARCHAR(20), value INT)\n", + "Testing select query: SELECT day FROM records WHERE value BETWEEN 36 AND 39\n", "[]\n", - "Testing create query: CREATE TABLE records (day VARCHAR(10), record INT);\n", - "Testing select query: SELECT day FROM records WHERE record >= 36 AND record <= 39;\n", + "Testing create query: CREATE TABLE records (id INT, date DATE)\n", + "Testing select query: SELECT date FROM records WHERE id = '30-31'\n", "[]\n", - "Testing create query: CREATE TABLE records (id INT, date DATE);\n", - "Testing select query: SELECT date FROM records WHERE record = '30-31';\n", - "Error while executing select query: no such column: record\n", - "Testing create query: CREATE TABLE games (game_id INT, opponent VARCHAR(255), result VARCHAR(255));\n", - "Testing select query: SELECT opponent FROM games WHERE result = 'loss' AND game_id = (SELECT game_id FROM games WHERE opponent = 'Leonard' AND result = '7–8');\n", + "Testing create query: CREATE TABLE games (game_id INT, opponent VARCHAR(50), result VARCHAR(10))\n", + "Testing select query: SELECT opponent FROM games WHERE result = 'loss' AND game_id = 7\n", "[]\n", - "Testing create query: CREATE TABLE game_scores (game_id INT, home_team_score INT, away_team_score INT);\n", - "Testing select query: SELECT home_team_score, away_team_score FROM game_scores WHERE home_team_score = 18 AND away_team_score = 43;\n", + "Testing create query: CREATE TABLE game_scores (game_id INT, home_team_score INT, away_team_score INT)\n", + "Testing select query: SELECT home_team_score, away_team_score FROM game_scores WHERE home_team_score = 18 AND away_team_score = 43\n", "[]\n", - "Testing create query: CREATE TABLE game_scores (game_id INT, opponent VARCHAR(50), score INT)\n", - "Testing select query: SELECT score FROM game_scores WHERE opponent = 'Royals' AND record = '24–52'\n", - "Error while executing select query: no such column: record\n", - "Testing create query: CREATE TABLE game_scores (id INT, home_team_score INT, away_team_score INT);\n", - "Testing select query: SELECT * FROM game_scores WHERE home_team_score = 22 AND away_team_score = 46;\n", + "Testing create query: CREATE TABLE game_scores (game_id INT, opponent VARCHAR(50), score INT, team_record VARCHAR(10))\n", + "Testing select query: SELECT score FROM game_scores WHERE opponent = 'Royals' AND team_record = '24–52'\n", "[]\n", - "Testing create query: CREATE TABLE military_specialties (id INT, specialty_name VARCHAR(255), real_name VARCHAR(255));\n", - "Testing select query: SELECT real_name FROM military_specialties WHERE specialty_name = 'shock paratrooper';\n", + "Testing create query: CREATE TABLE game_scores (record VARCHAR(10), score INT)\n", + "Testing select query: SELECT score FROM game_scores WHERE record = '22–46'\n", "[]\n", - "Testing create query: CREATE TABLE birthplaces (name VARCHAR(255), birthplace VARCHAR(255));\n", - "Testing select query: SELECT birthplace FROM birthplaces WHERE name = 'Pete Sanderson';\n", + "Testing create query: CREATE TABLE military_personnel (id INT, code_name VARCHAR(50), real_name VARCHAR(50), primary_military_specialty VARCHAR(50))\n", + "Testing select query: SELECT real_name FROM military_personnel WHERE primary_military_specialty = 'shock paratrooper'\n", "[]\n", - "Testing create query: CREATE TABLE roles (id INT, name VARCHAR(255), role VARCHAR(255))\n", - "Testing select query: SELECT role FROM roles WHERE name = 'Jean-Luc Bouvier'\n", + "Testing create query: No table creation needed for this question\n", + "Error while creating the SQLite table: near \"No\": syntax error\n", + "Testing select query: SELECT birthplace FROM employees WHERE name = 'Pete Sanderson'\n", + "Error while executing select query: no such table: employees\n", + "Testing create query: CREATE TABLE roles (id INT, name VARCHAR(255))\n", + "Testing select query: SELECT name FROM roles WHERE name = 'Jean-Luc Bouvier'\n", "[]\n", - "Testing create query: CREATE TABLE pilots (id INT, name VARCHAR(255), kayak_type VARCHAR(255))\n", - "Testing select query: SELECT name FROM pilots WHERE kayak_type = 'silent attack kayak'\n", + "Testing create query: CREATE TABLE pilots (id INT, real_name VARCHAR(255), callsign VARCHAR(255))\n", + "Testing select query: SELECT real_name FROM pilots WHERE callsign = 'silent attack kayak'\n", "[]\n", - "Testing create query: CREATE TABLE persons (id INT, name VARCHAR(255), birthplace VARCHAR(255), code_name VARCHAR(255));\n", - "Testing select query: SELECT code_name FROM persons WHERE birthplace = 'Liverpool';\n", + "Testing create query: CREATE TABLE persons (id INT, name VARCHAR(50), birthplace VARCHAR(50), code_name VARCHAR(50))\n", + "Testing select query: SELECT code_name FROM persons WHERE birthplace = 'Liverpool'\n", "[]\n", - "Testing create query: CREATE TABLE medalists (name VARCHAR(255), sport VARCHAR(255))\n", + "Testing create query: CREATE TABLE medalists (id INT, name VARCHAR(255), sport VARCHAR(255), medal VARCHAR(255))\n", "Testing select query: SELECT name FROM medalists WHERE sport = 'canoeing'\n", "[]\n", - "Testing create query: CREATE TABLE IF NOT EXISTS events (event_id INT, event_name VARCHAR(255), event_category VARCHAR(255))\n", - "Testing select query: SELECT event_name FROM events WHERE event_category = 'women's half middleweight'\n", - "Error while executing select query: near \"s\": syntax error\n", - "Testing create query: CREATE TABLE medals (id INT, athlete VARCHAR(255), event VARCHAR(255), medal VARCHAR(255), year INT);\n", - "Testing select query: SELECT athlete FROM medals WHERE medal = 'bronze' AND year = 2000 AND event = 'Sydney games';\n", + "Testing create query: CREATE TABLE events (event_id INT, event_name VARCHAR(50), event_type VARCHAR(50), gender VARCHAR(10), weight_class VARCHAR(50))\n", + "Testing select query: SELECT event_name FROM events WHERE gender = 'Women' AND weight_class = 'Half Middleweight'\n", "[]\n", - "Testing create query: CREATE TABLE attendance (opponent VARCHAR(50), people_attended INT);\n", - "Testing select query: SELECT people_attended FROM attendance WHERE opponent = 'twins';\n", + "Testing create query: CREATE TABLE olympic_medals (athlete_id INT, athlete_name VARCHAR(255), event VARCHAR(255), year INT, city VARCHAR(255), medal VARCHAR(255))\n", + "Testing select query: SELECT athlete_name FROM olympic_medals WHERE year = 2000 AND city = 'Sydney' AND medal = 'Bronze'\n", "[]\n", - "Testing create query: CREATE TABLE records (date DATE, record INT);\n", - "Testing select query: SELECT date FROM records WHERE record BETWEEN 41 AND 46;\n", + "Testing create query: CREATE TABLE attendance (id INT, opponent VARCHAR(50), people_attended INT)\n", + "Testing select query: SELECT COUNT(*) FROM attendance WHERE opponent = 'twins'\n", + "[(0,)]\n", + "Testing create query: CREATE TABLE records (date DATE, record VARCHAR(10))\n", + "Testing select query: SELECT date FROM records WHERE record = '41-46'\n", "[]\n", - "Testing create query: CREATE TABLE scores (id INT, record VARCHAR(10), score INT);\n", - "Testing select query: SELECT score FROM scores WHERE record = '48-55';\n", + "Testing create query: CREATE TABLE scores (id INT, record VARCHAR(10), score INT)\n", + "Testing select query: SELECT score FROM scores WHERE record = '48-55'\n", "[]\n", - "Testing create query: CREATE TABLE scores (id INT, record VARCHAR(10), score INT);\n", - "Testing select query: SELECT score FROM scores WHERE record = '44-49';\n", + "Testing create query: CREATE TABLE scores (id INT, record VARCHAR(10), score INT)\n", + "Testing select query: SELECT score FROM scores WHERE record = '44-49'\n", "[]\n", - "Testing create query: CREATE TABLE scores (Opponent VARCHAR(50), Record VARCHAR(10), Score INT);\n", - "Testing select query: SELECT Score FROM scores WHERE Opponent = 'white sox' AND Record = '2-0';\n", + "Testing create query: CREATE TABLE scores (Opponent VARCHAR(50), Record VARCHAR(5), Score INT)\n", + "Testing select query: SELECT Score FROM scores WHERE Opponent = 'white sox' AND Record = '2-0'\n", "[]\n", - "Testing create query: CREATE TABLE votes (candidate_name VARCHAR(255), vote_count INT);\n", - "Testing select query: SELECT vote_count FROM votes WHERE candidate_name = 'candice sjostrom';\n", + "Testing create query: CREATE TABLE candidates (id INT, name VARCHAR(50), votes INT)\n", + "Testing select query: SELECT votes FROM candidates WHERE name = 'candice sjostrom'\n", "[]\n", - "Testing create query: CREATE TABLE percentages (name VARCHAR(255), percentage FLOAT);\n", - "Testing select query: SELECT percentage FROM percentages WHERE name = 'chris wright';\n", + "Testing create query: CREATE TABLE percentages (name VARCHAR(50), percentage DECIMAL(5,2))\n", + "Testing select query: SELECT percentage FROM percentages WHERE name = 'Chris Wright'\n", "[]\n", - "Testing create query: CREATE TABLE votes (year INT, candidate VARCHAR(255), vote_percentage FLOAT, office VARCHAR(255));\n", - "Testing select query: SELECT COUNT(*) FROM votes WHERE year > 1992 AND vote_percentage = 1.59 AND office = 'us representative 4';\n", + "Testing create query: CREATE TABLE candidate_votes (year INT, candidate VARCHAR(50), vote_percentage DECIMAL(5,2), office VARCHAR(50))\n", + "Testing select query: SELECT COUNT(*) FROM candidate_votes WHERE year > 1992 AND vote_percentage = 1.59 AND office = 'us representative 4'\n", "[(0,)]\n", - "Testing create query: CREATE TABLE representatives (id INT, name VARCHAR(255), start_year INT, end_year INT)\n", + "Testing create query: CREATE TABLE representatives (id INT, name VARCHAR(50), start_year INT, end_year INT)\n", "Testing select query: SELECT start_year, end_year FROM representatives WHERE name = 'J. Smith Young'\n", "[]\n", - "Testing create query: CREATE TABLE politicians (id INT, name VARCHAR(255), party VARCHAR(255))\n", + "Testing create query: No table creation needed for this question\n", + "Error while creating the SQLite table: near \"No\": syntax error\n", "Testing select query: SELECT party FROM politicians WHERE name = 'Thomas L. Young'\n", - "[]\n", - "Testing create query: CREATE TABLE medal_counts (country TEXT, gold INTEGER, silver INTEGER, bronze INTEGER);\n", - "Testing select query: SELECT MIN(gold + silver + bronze) AS lowest_total_medals FROM medal_counts WHERE gold = 0 AND silver > 1 AND bronze > 2;\n", - "[(None,)]\n", - "Testing create query: CREATE TABLE medals (country TEXT, rank INTEGER, gold INTEGER, silver INTEGER, bronze INTEGER, total INTEGER);\n", - "Testing select query: SELECT SUM(silver) AS total_silver FROM medals WHERE rank = 14 AND total < 1;\n", + "Error while executing select query: no such table: politicians\n", + "Testing create query: CREATE TABLE medals (country VARCHAR(50), gold INT, silver INT, bronze INT)\n", + "Testing select query: SELECT MIN(silver + bronze) AS lowest_total_medals FROM medals WHERE gold = 0 AND silver > 1 AND bronze > 2\n", "[(None,)]\n", - "Testing create query: CREATE TABLE player_stats (player_id INT, tackles INT, fumble_recoveries INT, forced_fumbles INT);\n", - "Testing select query: SELECT COUNT(tackles) FROM player_stats WHERE fumble_recoveries > 0 AND forced_fumbles = 0;\n", - "[(0,)]\n", - "Testing create query: CREATE TABLE forced_fumbles (player_name VARCHAR(255), solo_tackles INT, forced_fumbles INT);\n", - "Testing select query: SELECT COUNT(forced_fumbles) FROM forced_fumbles WHERE player_name = 'Jim Laney' AND solo_tackles < 2;\n", - "[(0,)]\n", - "Testing create query: CREATE TABLE player_stats (player_id INT, solo_tackles INT, total INT);\n", - "Testing select query: SELECT MAX(total) AS high_total FROM player_stats WHERE solo_tackles > 15;\n", + "Testing create query: CREATE TABLE country_medals (country_name VARCHAR(50), gold_medals INT, silver_medals INT, bronze_medals INT)\n", + "Testing select query: SELECT SUM(silver_medals) AS total_silver_medals FROM country_medals WHERE gold_medals = 0 AND silver_medals > 0 AND bronze_medals = 0\n", "[(None,)]\n", - "Testing create query: CREATE TABLE fumble_recoveries (player_name VARCHAR(255), forced_fumbles INT, sacks INT, solo_tackles INT, fumble_recoveries INT);\n", - "Testing select query: SELECT fumble_recoveries FROM fumble_recoveries WHERE player_name = 'scott gajos' AND forced_fumbles = 0 AND sacks = 0 AND solo_tackles < 2;\n", - "[]\n", - "Testing create query: CREATE TABLE matches (id INT, opponent VARCHAR(255), time VARCHAR(255), location VARCHAR(255))\n", - "Testing select query: SELECT opponent FROM matches WHERE time = '20:00 GMT' AND location = 'Camp Nou'\n", - "[]\n", - "Testing create query: CREATE TABLE matches (id INT, match_time TIME, score VARCHAR(5))\n", - "Testing select query: SELECT match_time FROM matches WHERE score = '3-2'\n", + "Testing create query: CREATE TABLE player_stats (player_id INT, tackles INT, fumble_recoveries INT, forced_fumbles INT)\n", + "Testing select query: SELECT tackles FROM player_stats WHERE fumble_recoveries > 0 AND forced_fumbles = 0\n", "[]\n", - "Testing create query: CREATE TABLE grounds (id INT, name VARCHAR(255));\n", - "Testing select query: SELECT name FROM grounds WHERE id IN (SELECT ground_id FROM team_grounds WHERE team_id = (SELECT id FROM teams WHERE name = 'Aston Villa'));\n", - "Error while executing select query: no such table: team_grounds\n", - "Testing create query: CREATE TABLE competition (id INT, type VARCHAR(255), location VARCHAR(255), time TIME)\n", - "Testing select query: SELECT type FROM competition WHERE location = 'San Siro' AND time = '18:30:00'\n", + "Testing create query: CREATE TABLE player_stats (player_name VARCHAR(50), forced_fumbles INT, solo_tackles INT);\n", + "Testing select query: SELECT forced_fumbles FROM player_stats WHERE player_name = 'jim laney' AND solo_tackles < 2;\n", "[]\n", - "Testing create query: CREATE TABLE decile (school_name VARCHAR(255), locality VARCHAR(255), decile INT)\n", - "Testing select query: SELECT COUNT(DISTINCT decile) AS total_decile FROM decile WHERE locality = 'redwood school'\n", - "[(0,)]\n", - "Testing create query: CREATE TABLE reports (id INT, name VARCHAR(255), circuit VARCHAR(255))\n", - "Testing select query: SELECT * FROM reports WHERE circuit = 'Tripoli'\n", + "Testing create query: CREATE TABLE player_stats (player_id INT, solo_tackles INT, total INT)\n", + "Testing select query: SELECT MAX(total) AS high_total FROM player_stats WHERE solo_tackles > 15\n", + "[(None,)]\n", + "Testing create query: CREATE TABLE fumble_stats (player_name VARCHAR(50), fumble_recoveries INT, forced_fumbles INT, sacks INT, solo_tackles INT)\n", + "Testing select query: SELECT fumble_recoveries FROM fumble_stats WHERE player_name = 'scott gajos' AND forced_fumbles = 0 AND sacks = 0 AND solo_tackles < 2\n", + "[]\n", + "Testing create query: No table creation needed for this request\n", + "Error while creating the SQLite table: near \"No\": syntax error\n", + "Testing select query: SELECT Opponent FROM Matches WHERE Time = '20:00 GMT' AND Venue = 'Camp Nou'\n", + "Error while executing select query: no such table: Matches\n", + "Testing create query: CREATE TABLE matches (match_id INT, match_date DATE, match_time TIME, home_team VARCHAR(50), away_team VARCHAR(50), home_score INT, away_score INT)\n", + "Testing select query: SELECT match_time FROM matches WHERE home_score = 3 AND away_score = 2\n", + "[]\n", + "Testing create query: CREATE TABLE grounds (ground_id INT, ground_name VARCHAR(50))\n", + "Testing select query: SELECT ground_name FROM grounds WHERE ground_id = (SELECT ground_id FROM matches WHERE home_team = 'Aston Villa' OR away_team = 'Aston Villa')\n", + "Error while executing select query: no such table: matches\n", + "Testing create query: No table creation needed\n", + "Error while creating the SQLite table: near \"No\": syntax error\n", + "Testing select query: SELECT competition_type FROM competitions WHERE venue = 'San Siro' AND start_time = '18:30 GMT';\n", + "Error while executing select query: no such table: competitions\n", + "Testing create query: No table creation needed for this question\n", + "Error while creating the SQLite table: near \"No\": syntax error\n", + "Testing select query: SELECT COUNT(*) AS total_decile FROM schools WHERE locality = 'redwood' AND type = 'decile'\n", + "Error while executing select query: no such table: schools\n", + "Testing create query: CREATE TABLE reports (report_id INT, report_name VARCHAR(50), circuit_name VARCHAR(50))\n", + "Testing select query: SELECT * FROM reports WHERE circuit_name = 'Tripoli'\n", "[]\n" ] } @@ -1424,7 +1493,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 40, "id": "04532d59", "metadata": {}, "outputs": [], @@ -1449,7 +1518,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 41, "id": "cbaa4bdf", "metadata": {}, "outputs": [ @@ -1457,12 +1526,12 @@ "data": { "text/plain": [ "unit_test_evaluation\n", - "correct 43\n", + "SQL correct 43\n", "SQL incorrect 7\n", "Name: count, dtype: int64" ] }, - "execution_count": 31, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -1473,7 +1542,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 42, "id": "1ada474e", "metadata": { "scrolled": true @@ -1483,13 +1552,14 @@ "data": { "text/plain": [ "evaluation_score\n", - "5 46\n", + "5 44\n", "4 3\n", - "3 1\n", + "3 2\n", + "1 1\n", "Name: count, dtype: int64" ] }, - "execution_count": 32, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -1510,7 +1580,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 43, "id": "d277222d", "metadata": {}, "outputs": [], @@ -1524,7 +1594,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 44, "id": "6da35c99", "metadata": {}, "outputs": [], @@ -1534,7 +1604,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 45, "id": "4116cb37", "metadata": {}, "outputs": [ @@ -1573,55 +1643,55 @@ " \n", " 0\n", " What venue did the parntership of shoaib malik...\n", - " {\"create\": \"CREATE TABLE partnerships (id INT,...\n", + " {\\n \"create\": \"CREATE TABLE partnerships (i...\n", " True\n", " True\n", " 5\n", - " correct\n", + " SQL correct\n", " 1\n", " gpt-4\n", " \n", " \n", " 1\n", " What venue did the partnership of herschelle g...\n", - " {\"create\": \"CREATE TABLE partnerships (id INT,...\n", - " True\n", + " {\\n \"create\": \"No table creation needed for...\n", " True\n", + " False\n", " 5\n", - " correct\n", + " SQL incorrect\n", " 1\n", " gpt-4\n", " \n", " \n", " 2\n", " What is the number Played that has 310 Points ...\n", - " {\"create\": \"CREATE TABLE Played (Number INT, P...\n", + " {\\n \"create\": \"CREATE TABLE games (Played I...\n", " True\n", " True\n", " 5\n", - " correct\n", + " SQL correct\n", " 1\n", " gpt-4\n", " \n", " \n", " 3\n", " What Losing bonus has a Points against of 588?\n", - " {\"create\": \"CREATE TABLE losing_bonus (bonus_i...\n", + " {\\n \"create\": \"CREATE TABLE losing_bonuses ...\n", " True\n", " True\n", " 5\n", - " correct\n", + " SQL correct\n", " 1\n", " gpt-4\n", " \n", " \n", " 4\n", " What Tries against has a Losing bonus of 7?\n", - " {\"create\": \"CREATE TABLE rugby_teams (team_nam...\n", + " {\\n \"create\": \"CREATE TABLE rugby_matches (...\n", " True\n", " True\n", " 3\n", - " correct\n", + " SQL correct\n", " 1\n", " gpt-4\n", " \n", @@ -1637,22 +1707,22 @@ "3 What Losing bonus has a Points against of 588? \n", "4 What Tries against has a Losing bonus of 7? \n", "\n", - " response format sql \\\n", - "0 {\"create\": \"CREATE TABLE partnerships (id INT,... True True \n", - "1 {\"create\": \"CREATE TABLE partnerships (id INT,... True True \n", - "2 {\"create\": \"CREATE TABLE Played (Number INT, P... True True \n", - "3 {\"create\": \"CREATE TABLE losing_bonus (bonus_i... True True \n", - "4 {\"create\": \"CREATE TABLE rugby_teams (team_nam... True True \n", + " response format sql \\\n", + "0 {\\n \"create\": \"CREATE TABLE partnerships (i... True True \n", + "1 {\\n \"create\": \"No table creation needed for... True False \n", + "2 {\\n \"create\": \"CREATE TABLE games (Played I... True True \n", + "3 {\\n \"create\": \"CREATE TABLE losing_bonuses ... True True \n", + "4 {\\n \"create\": \"CREATE TABLE rugby_matches (... True True \n", "\n", " evaluation_score unit_test_evaluation run Evaluating Model \n", - "0 5 correct 1 gpt-4 \n", - "1 5 correct 1 gpt-4 \n", - "2 5 correct 1 gpt-4 \n", - "3 5 correct 1 gpt-4 \n", - "4 3 correct 1 gpt-4 " + "0 5 SQL correct 1 gpt-4 \n", + "1 5 SQL incorrect 1 gpt-4 \n", + "2 5 SQL correct 1 gpt-4 \n", + "3 5 SQL correct 1 gpt-4 \n", + "4 3 SQL correct 1 gpt-4 " ] }, - "execution_count": 35, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } @@ -1663,7 +1733,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 46, "id": "ed800f0c", "metadata": {}, "outputs": [ @@ -1700,22 +1770,22 @@ " \n", " \n", " 1\n", - " SQL incorrect\n", - " 4\n", - " \n", - " \n", - " correct\n", - " 46\n", + " SQL correct\n", + " 43\n", " \n", " \n", - " 2\n", " SQL incorrect\n", " 7\n", " \n", " \n", - " correct\n", + " 2\n", + " SQL correct\n", " 43\n", " \n", + " \n", + " SQL incorrect\n", + " 7\n", + " \n", " \n", "\n", "" @@ -1723,13 +1793,13 @@ "text/plain": [ " Number of records\n", "run unit_test_evaluation \n", - "1 SQL incorrect 4\n", - " correct 46\n", - "2 SQL incorrect 7\n", - " correct 43" + "1 SQL correct 43\n", + " SQL incorrect 7\n", + "2 SQL correct 43\n", + " SQL incorrect 7" ] }, - "execution_count": 36, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" } @@ -1754,13 +1824,13 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 47, "id": "e2b4aa03-42f5-4c30-a610-e553937bf160", "metadata": {}, "outputs": [ { "data": { - "image/png": "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Ttf57rvvGkkmKirKGGPM0aNHjbu7u3n77bcd5tu9e7fJlSuXvX379u1GkpkzZ85N1+/r62s6d+6crlqioqKMpBve1q9fb4wxJjY21nh5eZkXXnjBYfkxY8YYm81mjh07Zm9LSEhI1U+jRo3M/fff79BWt25dh+dj2rRpDtslRcrztHz58pv2MXLkyFS19O7d29zo4/X6569FixbG09PTHD582N528uRJkydPHlOnTp1UdUZERJjk5GR7+8CBA427u7u5cOGCMcaY7777zkgymzdvTrP/G0nvth4/fvxNX+83U7x4cfP4448bY4zp0qWL8fb2NidPnjTG/N/2tr7Orn/9p0h5z1lJMl5eXg7P4+TJk40kExISYuLi4uztQ4YMSfWc161b10gyY8eOtbclJiaaKlWqmIIFC5qkpCRjjDEzZ840bm5uZvXq1Q79f/LJJ0aSWbt2rUNNbm5uZs+ePbfcNjExMcbT09M0bNjQXLt2zd7+0UcfGUlm6tSpqR5/ep6DlHn3799vzpw5Y44ePWqmTp1qfHx8TFBQkLl48aIxxpjk5GRTqlQp06hRI4fXV0JCggkLCzOPPfaYva1Tp07Gzc0tzddYyrIDBgwwkhy20z///GPCwsJMaGio/TGmPO/3339/qvdXlSpVTKFCheyvbWOMWbJkiZHk8Lro37+/8ff3N1evXr3l9rie9TWZYsKECUaS+fLLL+1tSUlJpmbNmsbPz8/+Wkr5HPP39zcxMTHp7u9Gn3sjR460z5fWZ80333xjJJlVq1bZ29LzXKT3s+NG0vsaSnl8aX0PXP+568z3IOAqHG4HuEiXLl0cfuVLOXThyJEjWdL//PnzlZycrLZt2+rvv/+230JCQlSqVCktX75ckhQQECBJWrx4sRISEjK0hh49emjp0qWpbinnCPj7+6tJkyaaPXu2jDH25WbNmqUaNWqoWLFi9raUX2AlKTY2Vn///bfq1q2rI0eO2A8LvFPWPi5evKi///5btWrVkjFG27dvd3p9165d05IlS9SiRQuHQ90KFSqk//73v1qzZo39sKMUPXr0cDjU7JFHHtG1a9d07NgxSf93nsqPP/6oK1eupLuW9G7rlPV///33DoOKOOu1117T1atXM3QkwwYNGjjsqUnZC9e6dWvlyZMnVfv177VcuXLpueees9/39PTUc889p5iYGG3dulXSv3sTy5Ytq/DwcIf3Tf369SXJ/r5JUbdu3XSd8/Lrr78qKSlJAwYMcDgXp3v37vL39091mJqzypQpo6CgIIWGhqpr164qWbKkfvnlF+XOnVuStGPHDh08eFD//e9/dfbsWfvjunjxoho0aKBVq1YpOTlZycnJWrBggZo1a+ZwCGaKlNfmzz//rOrVq+vhhx+2T/Pz81OPHj109OjRVIekde7c2eH9FR0drR07dqhz5872zyBJeuyxx1Jtz8DAQF28eFFLly69o22U4ueff1ZISIg6dOhgb/Pw8FC/fv0UHx+vlStXOszfunVr+6HQ6fHQQw+l+bln7c+6LS5fvqy///5bNWrUkCRt27ZNktL9XKS41WfHrdzqNXQ7XP09CNwMIQnIAtd/WUly+Adf+r9DFs6fP58lNR08eFDGGJUqVUpBQUEOt71799pPDg8LC9OgQYP02WefqUCBAmrUqJE+/vjjDAkepUqVUkRERKqbv7+/fZ527drp+PHjWr9+vaR/j3/funWr2rVr57CutWvXKiIiQr6+vgoMDFRQUJD9PJmMCkl//vmnIiMjlS9fPvn5+SkoKEh169a97T7OnDmjhIQElSlTJtW0smXLKjk5OdX5Ybd63dStW1etW7fWiBEjVKBAATVv3lzTpk1Ldb5MWtKzrdu1a6fatWvr2WefVXBwsNq3b6/Zs2c7HZjuv/9+PfPMM/r0008VHR3t1LI3cv22SfnnumjRomm2X/9eK1y4sHx9fR3aSpcuLen/Di06ePCg9uzZk+o9kzJfyvsmRVhYWLpqT/lH9frXgqenp+6///50/yN7I/PmzdPSpUv19ddfq0aNGoqJiXH4R/zgwYOS/g0r1z+2zz77TImJiYqNjdWZM2cUFxd3y2tKHTt27Iava+vjTXH9dkqZXqpUqVTruH69vXr1UunSpdWkSRMVKVJEXbt2veW5X7eqvVSpUqkGjkhv7bdSoECBND/3ihcvbp/n3Llz6t+/v4KDg+Xj46OgoCB7PymfNel9LlLc6XfOrV5Dt8PV34PAzXBOEnCHUkaqsp68b5WQkJDmaFbu7u5pzm/9FT8zJScny2az6ZdffkmzFj8/P/vfY8eOVWRkpL7//nstWbJE/fr108iRI7Vhw4ZU5wdktGbNmil37tyaPXu2atWqpdmzZ8vNzU1t2rSxz3P48GE1aNBA4eHhGjdunIoWLSpPT0/9/PPPGj9+/E3/gU8rwEr/7uW5/v5jjz2mc+fO6eWXX1Z4eLh8fX114sQJRUZG3tFeFWfc6nWTcq2hDRs2aOHChVq8eLG6du2qsWPHasOGDQ7P6/XSs619fHy0atUqLV++XD/99JMWLVqkWbNmqX79+lqyZMkN60vL//73P82cOVOjR49Oc+j49D43KW7Ud0a+15KTk1WxYkWNGzcuzenXB7I7/Scyo9SpU8c+MlmzZs1UsWJFdezYUVu3bpWbm5v99fvuu++qSpUqaa7Dz89P586dy5T67mQ7FSxYUDt27NDixYv1yy+/6JdfftG0adPUqVOnVIMtZIbMeI7btm2rdevW6cUXX1SVKlXk5+en5ORkNW7c+LY/a+70fXCr15B08/dsWv27+nsQuBlCEnCHUn79279/f6p/kBISEnT8+HE1bNgwQ/q60RfQ7ShRooSMMQoLC7P/Cn4zFStWVMWKFfXaa69p3bp1ql27tj755BO99dZbGV6bla+vr5544gnNmTNH48aN06xZs/TII484XFNk4cKFSkxM1A8//ODwy+T1hz6lJeWXy+svinj9r8W7d+/WgQMHNGPGDHXq1MnentYhPundFkFBQcqdO7f279+fatq+ffvk5uaW6jWVXjVq1FCNGjX09ttv6+uvv1bHjh317bff6tlnn73hMunZ1pLk5uamBg0aqEGDBho3bpzeeecd/e9//9Py5csVERGR7hpLlCihp59+WpMnT041QIX073OT1sUq73Svyo2cPHlSFy9edNibdODAAUmyH8ZXokQJ7dy5Uw0aNMjQ17z1c8R66GVSUpKioqKc2q634ufnp2HDhqlLly6aPXu22rdvbx9oxd/f/6Z9BQUFyd/fX7///vtN+yhevPgNX9cp02+1vPR/e7is0lqvp6enmjVrpmbNmik5OVm9evXS5MmT9frrr6f7WlLWvnft2qXk5GSHvUnprf1OnT9/XsuWLdOIESM0dOhQe/v12yK9z0VmSOs1JN38PXuj0TOB7IrD7YA71KBBA3l6emrSpEmpfuH79NNPdfXqVTVp0iRD+ko59jsjrnLeqlUrubu7a8SIEal+tTPG2IeajYuL09WrVx2mV6xYUW5ubg6HcPn6+mba1dfbtWunkydP6rPPPtPOnTtTHWqX8muk9XHExsZq2rRpt1x3yj+Hq1atsrddu3ZNn3766S37MMakOcxwyj/Zt9oe7u7uatiwob7//nuHIalPnz6tr7/+Wg8//LDDoYfpcf78+VTPZ8qegfQecnezbZ3WngRn1n+91157TVeuXNGYMWNSTStRooRiY2O1a9cue1t0dPQNh4G+U1evXtXkyZPt95OSkjR58mQFBQWpWrVqkv79hf/EiROaMmVKquUvXbqkixcv3lbfERER8vT01AcffODw/H3++eeKjY3V448/flvrvZGOHTuqSJEi9tHgqlWrphIlSui9995zuAh1ipShot3c3NSiRQstXLhQW7ZsSTVfSu1NmzbVpk2b7IduSv+ex/fpp58qNDT0ludpFSpUSFWqVNGMGTMcDmVdunRpqvOZrh8W283NzT7i3+28Jps2bapTp045jPp29epVffjhh/Lz87MfYptZ0vqskf69QLhVep+LzHL9a0j69z27YcMGh+HHf/zxx1SHDQM5AXuSgDtUsGBBDR06VK+99prq1KmjJ598Urlz59a6dev0zTffqGHDhmrWrFmG9OXj46Ny5cpp1qxZKl26tPLly6cKFSqk+5h0qxIlSuitt97SkCFDdPToUbVo0UJ58uRRVFSUvvvuO/Xo0UODBw/Wb7/9pj59+qhNmzYqXbq0rl69qpkzZ8rd3V2tW7e2r69atWr69ddfNW7cOBUuXFhhYWFp7h2w2rZtm7788ss0a6tZs6b9ftOmTZUnTx4NHjw4Vb+S1LBhQ/svyc8995zi4+M1ZcoUFSxY8Jbnu5QvX141atTQkCFDdO7cOeXLl0/ffvttqmAYHh6uEiVKaPDgwTpx4oT8/f01b968NI+dT/mHul+/fmrUqJHc3d3tv7Re76233rJfd6hXr17KlSuXJk+erMTExDSDw63MmDFDEydOVMuWLVWiRAn9888/mjJlivz9/dW0adNbLn+rbf3GG29o1apVevzxx1W8eHHFxMRo4sSJKlKkiMNJ+umVsjcprcOi2rdvr5dfflktW7ZUv379lJCQoEmTJql06dL2k9czUuHChTV69GgdPXpUpUuX1qxZs7Rjxw59+umn9gs7P/PMM5o9e7aef/55LV++XLVr19a1a9e0b98+zZ49W4sXL07zJPpbCQoK0pAhQzRixAg1btxYTz75pPbv36+JEyfqwQcfzPCLj3p4eKh///568cUXtWjRIjVu3FifffaZmjRp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AAC4SroOt9u1a5f97379+ql///46dOiQatSoIUnasGGDPv74Y40aNSpzqgQAAACALGIzxphbzeTm5iabzaZbzWqz2XTt2rUMKy4jxMXFKSAgQLGxsfL393d1OQAAZDnbroWuLgE5XeUnXV0Bcrh0RI4skd5skK49SVFRURlWGAAAAABkZ+kKScWLF8/sOgAAAAAgW7iti8mePHlSa9asUUxMjJKTkx2m9evXL93rGTlypObPn699+/bJx8dHtWrV0ujRo1WmTBn7PJcvX9YLL7ygb7/9VomJiWrUqJEmTpyo4ODg2ykdAAAAAG7K6ZA0ffp0Pffcc/L09FT+/Plls9ns02w2m1MhaeXKlerdu7cefPBBXb16Va+++qoaNmyoP/74Q76+vpKkgQMH6qefftKcOXMUEBCgPn36qFWrVlq7dq2zpQMAAADALaVr4AarokWL6vnnn9eQIUPk5ub0COI3debMGRUsWFArV65UnTp1FBsbq6CgIH399dd66qmnJEn79u1T2bJltX79evvoelaJiYlKTEy034+Li1PRokUZuAEAcM9i4AbcMQZuwB3KaQM3OJ1yEhIS1L59+wwPSJIUGxsrScqXL58kaevWrbpy5YoiIiLs84SHh6tYsWJav359musYOXKkAgIC7LeiRYtmeJ0AAAAA7l5OJ51u3bppzpw5GV5IcnKyBgwYoNq1a6tChQqSpFOnTsnT01OBgYEO8wYHB+vUqVNprmfIkCGKjY21344fP57htQIAAAC4ezl9TtLIkSP1xBNPaNGiRapYsaI8PDwcpo8bN+62Cundu7d+//13rVmz5raWT+Hl5SUvL687WgcAAACAe9dthaTFixfbR6C7fuCG29GnTx/9+OOPWrVqlYoUKWJvDwkJUVJSki5cuOCwN+n06dMKCQm5rb4AAAAA4GacDkljx47V1KlTFRkZecedG2PUt29ffffdd1qxYoXCwsIcplerVk0eHh5atmyZWrduLUnav3+//vzzT9WsWfOO+wcAAACA6zkdkry8vFS7du0M6bx37976+uuv9f333ytPnjz284wCAgLk4+OjgIAAdevWTYMGDVK+fPnk7++vvn37qmbNmmmObAcAAAAAd8rpgRv69++vDz/8MEM6nzRpkmJjY1WvXj0VKlTIfps1a5Z9nvHjx+uJJ55Q69atVadOHYWEhGj+/PkZ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LVqUajAH4F7g5eWlYcOGpTqkFACAzMJ3D+5FNnOr8e8AAAAA4B6Src9JAgAAAICsRkgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBLiQzWbTggULXF0GAABZZvjw4apSpYqrywBuipCEe9qZM2fUs2dPFStWTF5eXgoJCVGjRo20du1ah/nWrVunpk2bKm/evPL29lbFihU1btw4Xbt2zWE+Z0NPdHS0mjRpkhEPJds5evSobDabduzY4epSAABOSkpKSrP9ypUrWVwJ4BqEJNzTWrdure3bt2vGjBk6cOCAfvjhB9WrV09nz561z/Pdd9+pbt26KlKkiJYvX659+/apf//+euutt9S+fXvdySj6ISEhLr3uhDFGV69eTdV+oy9HAED2lZycrDFjxqhkyZLy8vJSsWLF9Pbbb0uSdu/erfr168vHx0f58+dXjx49FB8fb182MjJSLVq00Ntvv63ChQurTJky9h+7Zs2apbp168rb21tfffWVJOmzzz5T2bJl5e3trfDwcE2cONGhlr/++ksdOnRQvnz55OvrqwceeEAbN27U9OnTNWLECO3cuVM2m002m03Tp0/Psm0EpJsB7lHnz583ksyKFStuOE98fLzJnz+/adWqVappP/zwg5Fkvv32W3ubJPPdd9+luwbr/FFRUUaSmTdvnqlXr57x8fExlSpVMuvWrXNYZs2aNaZu3brGx8fHBAYGmoYNG5pz584ZY4y5fPmy6du3rwkKCjJeXl6mdu3aZtOmTfZlly9fbiSZn3/+2VStWtV4eHiY5cuXm7p165revXub/v37m/z585t69eoZY4zZvXu3ady4sfH19TUFCxY0Tz/9tDlz5ox9fdeuXTOjR482JUqUMJ6enqZo0aLmrbfesj82661u3brp3i4AAOe99NJLJm/evGb69Onm0KFDZvXq1WbKlCkmPj7eFCpUyLRq1crs3r3bLFu2zISFhZnOnTvbl+3cubPx8/MzzzzzjPn999/N77//bv9eCg0NNfPmzTNHjhwxJ0+eNF9++aUpVKiQvW3evHkmX758Zvr06cYYY/755x9z//33m0ceecSsXr3aHDx40MyaNcusW7fOJCQkmBdeeMGUL1/eREdHm+joaJOQkOCiLQbcGCEJ96wrV64YPz8/M2DAAHP58uU055k/f76RlCqopChdurRp3ry5/X5GhKTw8HDz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DAx0al2bN29Wjx497PdtNpsWLFhww/mnT58um81209vRo0edqsHZ+m9Ug7e39231m5UiIyPVokULh7aiRYsqOjpaFSpUcE1RAHCPyOXqAgAAOUNQUJBT87dr106NGze232/VqpUqVKigN95447bXeTv8/f21f/9+hzabzZbp/WYGd3d3hYSEuLoMALjrsScJAGDfa/Hee++pUKFCyp8/v3r37q0rV67Y57EeUhYaGipJatmypWw2m/2+lY+Pj0JCQuw3T09P5c6d237f29tbzz33nIKCguTv76/69etr586d9uV37typRx99VHny5JG/v7+qVaumLVu2aMWKFerSpYtiY2Pte4aGDx9+w8dms9kc6ggJCVFwcLAk6dNPP1XhwoWVnJzssEzz5s3VtWtXSdLhw4fVvHlzBQcHy8/PTw8++KB+/fXXG/aX1iFxFy5ckM1m04oVKyRJ165dU7du3RQWFiYfHx+VKVNG77//vn3+4cOHa8aMGfr+++/tj3HFihVprnvlypWqXr26vLy8VKhQIb3yyiu6evWqfXq9evXUr18/vfTSS8qXL59CQkJuur0AAIQkAMD/t3z5ch0+fFjLly/XjBkzNH36dE2fPj3NeTdv3ixJmjZtmqKjo+33ndGmTRvFxMTol19+0datW1W1alU1aNBA586dkyR17NhRRYoU0ebNm7V161a98sor8vDwUK1atTRhwgT5+/srOjpa0dHRGjx48G095jZt2ujs2bNavny5ve3cuXNatGiROnbsKEmKj49X06ZNtWzZMm3fvl2NGzdWs2bN9Oeff95Wn5KUnJysIkWKaM6cOfrjjz80dOhQvfrqq5o9e7YkafDgwWrbtq0aN25sf4y1atVKtZ4TJ06oadOmevDBB7Vz505NmjRJn3/+ud566y2H+WbMmCFfX19t3LhRY8aM0RtvvKGlS5fedv0AcLfjcDsAgCQpb968+uijj+Tu7q7w8HA9/vjjWrZsmbp3755q3pTD5AIDA2/r8K81a9Zo06ZNiomJkZeXlyTpvffe04IFCzR37lz16NFDf/75p1588UWFh4dLkkqVKmVfPiAgwL6H6FZiY2Pl5+fn0PbII4/ol19+Ud68edWkSRN9/fXXatCggSRp7ty5KlCggB599FFJUuXKlVW5cmX7sm+++aa+++47/fDDD+rTp4/Tj12SPDw8NGLECPv9sLAwrV+/XrNnz1bbtm3l5+cnHx8fJSYm3vQxTpw4UUWLFtVHH30km82m8PBwnTx5Ui+//LKGDh0qN7d/fwutVKmShg0bJunf7fjRRx9p2bJleuyxx26rfgC42xGSAACSpPLly8vd3d1+v1ChQtq9e3em9LVz507Fx8crf/78Du2XLl3S4cOHJUmDBg3Ss88+q5kzZyoiIkJt2rRRiRIlnO4rT5482rZtm0Obj4+P/e+OHTuqe/fumjhxory8vPTVV1+pffv29oARHx+v4cOH66efflJ0dLSuXr2qS5cu3dGeJEn6+OOPNXXqVP3555+6dOmSkpKSVKVKFafWsXfvXtWsWdPhHKvatWsrPj5ef/31l4oVKybp35BkVahQIcXExNxR/QBwNyMkAcBdzN/fX7GxsanaL1y4oICAAIc2Dw8Ph/s2my3VuToZJT4+XoUKFbKfo2OVMmrd8OHD9d///lc//fSTfvnlFw0bNkzffvutWrZs6VRfbm5uKlmy5A2nN2vWTMYY/fTTT3rwwQe1evVqjR8/3j598ODBWrp0qd577z2VLFlSPj4+euqpp5SUlHTD/iTJGGNvs57bJUnffvutBg8erLFjx6pmzZrKkyeP3n33XW3cuNGpx5ZeWfncAsDdgJAEAHexMmXKaMmSJanat23bptKlS9/Ruj08PHTt2rXbWrZq1ao6deqUcuXKleagDylKly6t0qVLa+DAgerQoYOmTZumli1bytPT87b7vp63t7datWqlr776SocOHVKZMmVUtWpV+/S1a9cqMjLSHs7i4+NvOnR5yqGI0dHR+s9//iNJqa5rtHbtWtWqVUu9evWyt6XsQUuRnsdYtmxZzZs3T8YY+96ktWvXKk+ePCpSpMjNHzgA4IYYuAEA7mI9e/bUgQMH1K9fP+3atUv79+/XuHHj9M033+iFF164o3WHhoZq2bJlOnXqlM6fP+/UshEREapZs6ZatGihJUuW6OjRo1q3bp3+97//acuWLbp06ZL69OmjFStW6NixY1q7dq02b96ssmXL2vuOj4/XsmXL9PfffyshIeGGfRljdOrUqVQ3656Ujh076qefftLUqVPtAzakKFWqlObPn68dO3Zo586d+u9//3vTvTA+Pj6qUaOGRo0apb1792rlypV67bXXUq1zy5YtWrx4sQ4cOKDXX3891eAXoaGh9ufs77//TrU3SpJ69eql48ePq2/fvtq3b5++//57DRs2TIMGDbLv0QIAOI9PUAC4i91///1atWqV9u3bp4iICD300EOaPXu25syZ43ANo9sxduxYLV26VEWLFrXvMUkvm82mn3/+WXXq1FGXLl1UunRptW/fXseOHVNwcLDc3d119uxZderUSaVLl1bbtm3VpEkT+2AHtWrV0vPPP6927dopKChIY8aMuWFfcXFxKlSoUKqb9Zyc+vXrK1++fNq/f7/++9//Oiw/btw45c2bV7Vq1VKzZs3UqFEjhz1NaZk6daquXr2qatWqacCAAalGm3vuuefUqlUrtWvXTg899JDOnj3rsFdJkrp3764yZcrogQceUFBQkNauXZuqn/vuu08///yzNm3apMqVK+v5559Xt27dUoUyAIBzbMZ60DQAAAAA3OPYkwQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIDF/wPzUn4Q+IkF2gAAAABJRU5ErkJggg==", + "image/png": "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OXKkOnTooGeffVbnzp3Te++9p3r16mnXrl0KDAxUQkKCmjRpovj4ePXv31/BwcE6deqUvvvuO126dEkBAQGaP3++nn32WdWoUUO9e/eWJJUoUeK2y4+Li0v1Wq7AwEDlypVLHTt2VNeuXbVt2zY99NBD9uEnTpzQ5s2b9dZbb9nbZsyYoQoVKqhly5bKlSuXli1bphdeeEFJSUnq27dvhteR1aJFixQXF6c+ffooX7582rp1q9577z39+eefWrRokaR/fmE9ffq0Vq1apfnz5992nvv379cjjzwif39/DRs2TB4eHpo5c6YaNGigtWvX6uGHH3YYv3///rrvvvs0evRoHT9+XFOnTlW/fv305ZdfSvrnn7vGjRsrKChIL7/8sgIDA3X8+HEtWbLklnWkd13v379fTzzxhCpXrqzXXntNXl5e+v3331P9Rzotr7zyij755JNMP5r0yy+/6Ntvv7W/3+PGjdMTTzyhYcOGafr06XrhhRd08eJFTZw4UT169NDPP//sMP3FixfVvHlzdejQQZ07d9bChQvVp08feXp62kNmUlKSWrZsqfXr16t3794qV66c9u3bpylTpujw4cMprsv7+eeftXDhQvXr10/58+e/5VHcMWPGaOzYsQoLC1OfPn106NAhzZgxQ9u2bdOGDRvk4eGhqVOn6pNPPtHXX39tP/0pI9uA5DBw3333OdTarFkzVa9eXaNHj5abm5v9x4dffvnFfrTg9OnTqlGjhi5duqTevXurbNmyOnXqlBYvXqy4uDh5enrq7Nmzql27tuLi4jRgwADly5dP8+bNU8uWLbV48WK1adPGoZ7XX39dnp6eGjp0qOLj4+Xp6amVK1eqXbt2Kl++vMaNG6fz58+re/fuKlKkiMO0q1atUufOndWoUSNNmDBBknTgwAFt2LBBAwcOTPX1lytXTvPnz9fgwYNVpEgR++lvQUFBunr1qho0aKDff/9d/fr1U2hoqBYtWqTw8HBdunQpxTznzJmja9euqXfv3vLy8lLevHlvue6vX7+e6nbP19dXPj4+9td07Ngxde/eXcHBwdq/f78+/PBD7d+/X5s3b7b/SJCe9yLZ7bYdzkrtM+QsZ/eDQLYyAO7I6NGjjSRz7ty5VIdXqFDB1K9f3/589erVRpIpV66ciY+Pt7e/8847RpLZt2+fva1bt26mePHi9ufnzp0z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s7clJibqww8/vO0yjDGpdjOc/E/27daHu7u7GjdurG+++cahS+qzZ8/q888/V926dR1OPUyPixcvpng/k48MpPeUu1ut69SOJDgz/5u9+uqrun79uiZOnJhiWIkSJRQTE6O9e/fa26KiotLsBvpO3bhxQzNnzrQ/T0hI0MyZMxUUFKTq1atL+ucX/lOnTmnWrFkppr969aquXLmSoWWHhYXJ09NT7777rsP79/HHHysmJkaPP/54huabli5duqhIkSL23uCqV6+uEiVK6O2333a4CXWy5K6i3dzc1Lp1ay1btkzbt29PMV5y7c2bN9fWrVvtp25K/1zH9+GHHyokJOS212kVKlRIVatW1bx58xxOZV21alWK65lu7hbbzc3N3uNfRj6TzZs315kzZxx6fbtx44bee+89+fn52U+xzSqpbWukf24QbpXe9yKr3PwZkv75zm7evNmh+/HvvvsuxWnDwL2AI0nAHSpQoIBGjRqlV199VfXq1VPLli2VO3dubdy4UV988YUaN26sFi1aZMqyfHx8VL58eX355ZcqXbq08ubNq4oVK6b7nHSrEiVK6I033tCIESN0/PhxtW7dWnny5FFkZKS+/vpr9e7dW0OHDtXPP/+sfv36qX379ipdurRu3Lih+fPny93dXe3atbPPr3r16vrpp580efJkFS5cWKGhoakeHbDauXOnPv3001Rrq1Wrlv158+bNlSdPHg0dOjTFciWpcePG9l+Sn3vuOV2+fFmzZs1SgQIFbnu9S4UKFVSzZk2NGDFCFy5cUN68ebVgwYIUwbBs2bIqUaKEhg4dqlOnTsnf319fffVVqufOJ/9DPWDAADVp0kTu7u72X1pv9sYbb9jvO/TCCy8oV65cmjlzpuLj41MNDrczb948TZ8+XW3atFGJEiX0999/a9asWfL391fz5s1vO/3t1vVrr72mdevW6fHHH1fx4sUVHR2t6dOnq0iRIg4X6adX8tGk1E6L6tSpk4YPH642bdpowIABiouL04wZM1S6dGn7xeuZqXDhwpowYYKOHz+u0qVL68svv9Tu3bv14Ycf2m/s/Mwzz2jhwoV6/vnntXr1atWpU0eJiYk6ePCgFi5cqBUrVqR6Ef3tBAUFacSIERo7dqyaNm2qli1b6tChQ5o+fboeeuihTL/5qIeHhwYOHKiXXnpJy5cvV9OmTfXRRx+pWbNmqlChgrp37677779fp06d0urVq+Xv769ly5ZJkt58802tXLlS9evXt3eDHhUVpUWLFmn9+vUKDAzUyy+/rC+++ELNmjXTgAEDlDdvXs2bN0+RkZH66quv0nWj2HHjxunxxx9X3bp11aNHD124cEHvvfeeKlSo4BDknn32WV24cEENGzZUkSJFdOLECb333nuqWrWq/ToiZ/Tu3VszZ85UeHi4duzYoZCQEC1evFgbNmzQ1KlTHToByYhTp06lut3z8/NT69at5e/vr3r16mnixIm6fv267r//fq1cuVKRkZEppknPe5FVUvsMPfvss1q8eLGaNm2qDh066OjRo/r000/TdUsI4K6TvZ3pATnXp59+amrWrGl8fX2Nl5eXKVu2rBk7dqy5du2aw3ipdXVszP91Jztnzhx7W2pdIG/cuNFUr17deHp6OtUd+M1dgCf76quvTN26dY2vr6/x9fU1ZcuWNX379jWHDh0yxhhz7Ngx06NHD1OiRAnj7e1t8ubNax599FHz008/Oczn4MGDpl69esbHx8dIumV34LfrAjy1abt06WLvxjY13377ralcubLx9vY2ISEhZsKECWb27NmpdvVs7YrWGGOOHj1qwsLCjJeXlylYsKD573//a1atWpWiC/DffvvNhIWFGT8/P5M/f37Tq1cvs2fPnhTv240bN0z//v1NUFCQsdlsDt1Vp/ae7dy50zRp0sT4+fmZ3Llzm0cffdRs3LjRYZzkbnxv7ur35q7Kd+7caTp37myKFStmvLy8TIECBcwTTzxhtm/fnup6S82t1nVERIRp1aqVKVy4sPH09DSFCxc2nTt3NocPH77tfFPrbtkYY44cOWLc3d1T/V6sXLnSVKxY0Xh6epoyZcqYTz/9NM0uwPv27evQlvw5e+uttxzaU/sO1q9f31SoUMFs377d1KpVy3h7e5vixYub999/P0W9CQkJZsKECaZChQrGy8vL3HfffaZ69epm7NixJiYm5pY13c77779vypYtazw8PEzBggVNnz59zMWLFx3GyUgX4KmNGxMTYwICAhy+D7t27TJt27Y1+fLlM15eXqZ48eKmQ4cOJiIiwmHaEydOmK5du5qgoCDj5eVlHnjgAdO3b1+H7pyPHj1qnnzySRMYGGi8vb1NjRo1zHfffecwn7S2h8m++uorU65cOePl5WXKly9vlixZ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zU7h4eFq3bq1Q1vRokUVFRWlihUruqYoAPiXyOXqAgAA94agoCCnxu/YsaOaNm1qf962bVtVrFhRr732WobnmRH+/v46dOiQQ5vNZsvy5WYFd3d3BQcHu7oMAMjxOJIEALAftXj77bdVqFAh5cuXT3379tX169ft41hPKQsJCZEktWnTRjabzf7cysfHR8HBwfaHp6encufObX/u7e2t5557TkFBQfL391fDhg21Z88e+/R79uzRo48+qjx58sjf31/Vq1fX9u3btWbNGnXv3l0xMTH2I0NjxoxJ87XZbDaHOoKDg1WwYEFJ0ocffqjChQsrKSnJYZpWrVqpR48ekqSjR4+qVatWKliwoPz8/PTQQw/pp59+SnN5qZ0Sd+nSJdlsNq1Zs0aSlJiYqJ49eyo0NFQ+Pj4qU6aM3nnnHfv4Y8aM0bx58/TNN9/YX+OaNWtSnffatWtVo0YNeXl5qVChQnr55Zd148YN+/AGDRpowIABGjZsmPLmzavg4OBbri8AACEJAPD/rV69WkePHtXq1as1b948zZ07V3Pnzk113G3btkmS5syZo6ioKPtzZ7Rv317R0dH68ccftWPHDlWrVk2NGjXShQsXJEldunRRkSJFtG3bNu3YsUMvv/yyPDw8VLt2bU2dOlX+/v6KiopSVFSUhg4dmqHX3L59e50/f16rV6+2t124cEHLly9Xly5dJEmXL19W8+bNFRERoV27dqlp06Zq0aKF/vjjjwwtU5KSkpJUpEgRLVq0SL/99ptGjRql//73v1q4cKEkaejQoerQoYOaNm1qf421a9dOMZ9Tp06pefPmeuihh7Rnzx7NmDFDH3/8sd544w2H8ebNmydfX19t2bJFEydO1GuvvaZVq1ZluH4AyOk43Q4AIEm677779P7778vd3V1ly5bV448/roiICPXq1SvFuMmnyQUGBmbo9K/169dr69atio6OlpeXlyTp7bff1tKlS7V48WL17t1bf/zxh1566SWVLVtWklSqVCn79AEBAfYjRLcTExMjPz8/h7ZHHnlEP/74o+677z41a9ZMn3/+uRo1aiRJWrx4sfLnz69HH31UklSlShVVqVLFPu3rr7+ur7/+Wt9++6369evn9GuXJA8PD40dO9b+PDQ0VJs2bdLChQvVoUMH+fn5ycfHR/Hx8bd8jdOnT1fRokX1/vvvy2azqWzZsjp9+rSGDx+uUaNGyc3tn99CK1eurNGjR0v6Zz2+//77ioiI0GOPPZah+gEgpyMkAQAkSRUqVJC7u7v9eaFChbRv374sWdaePXt0+fJl5cuXz6H96tWrOnr0qCRpyJAhevbZZzV//nyFhYWpffv2KlGihNPLypMnj3bu3OnQ5uPjY/+7S5cu6tWrl6ZPny4vLy999tln6tSpkz1gXL58WWPGjNH333+vqKgo3bhxQ1evXr2jI0mSNG3aNM2ePVt//PGHrl69qoSEBFWtWtWpeRw4cEC1atVyuMaqTp06unz5sv78808VK1ZM0j8hyapQoUKKjo6+o/oBICcjJAFADubv76+YmJgU7ZcuXVJAQIBDm4eHh8Nzm82W4lqdzHL58mUVKlTIfo2OVXKvdWPGjNFTTz2l77//Xj/++KNGjx6tBQsWqE2bNk4ty83NTSVLlkxzeIsWLWSM0ffff6+HHnpIv/zyi6ZMmWIfPnToUK1atUpvv/22SpYsKR8fHz355JNKSEhIc3mSZIyxt1mv7ZKkBQsWaOjQoZo0aZJq1aqlPHny6K233tKWLVucem3plZ3vLQDkBIQkAMjBypQpo5UrV6Zo37lzp0qXLn1H8/bw8FBiYmKGpq1WrZrOnDmjXLlypdrpQ7LSpUurdOnSGjx4sDp37qw5c+aoTZs28vT0zPCyb+bt7a22bdvqs88+0++//64yZcqoWrVq9uEbNmxQeHi4PZxdvnz5ll2XJ5+KGBUVpQcffFCSUtzXaMOGDapdu7ZeeOEFe1vyEbRk6XmN5cqV01dffSVjjP1o0oYNG5QnTx4VKVLk1i8cAJAmOm4AgBysT58+Onz4sAYMGKC9e/fq0KFDmjx5sr744gu9+OKLdzTvkJAQRURE6MyZM7p48aJT04aFhalWrVpq3bq1Vq5cqePHj2vjxo165ZVXtH37dl29elX9+vXTmjVrdOLECW3YsEHbtm1TuXLl7Mu+fPmyIiIi9NdffykuLi7NZRljdObMmRQP65GULl266Pvvv9fs2bPtHTYkK1WqlJYsWaLdu3drz549euqpp255FMbHx0c1a9bU+PHjdeDAAa1du1avvvpqinlu375dK1as0OHDhzVy5MgUnV+EhITY37O//vorxdEoSXrhhRd08uRJ9e/fXwcPHtQ333yj0aNHa8iQIfYjWgAA57EFBYAc7IEHHtC6det08OBBhYWF6eGHH9bChQu1aNEih3sYZcSkSZO0atUqFS1a1H7EJL1sNpt++OEH1atXT927d1fp0qXVqVMnnThxQgULFpS7u7vOnz+vrl27qnTp0urQoYOaNWtm7+ygdu3aev7559WxY0cFBQVp4sSJaS4rNjZWhQoVSvGwXpPTsGFD5c2bV4cOHdJTTz3lMP3kyZN13333qXbt2mrRooWaNGnicKQpNbNnz9aNGzdUvXp1DRo0KEVvc88995zatm2rjh076uGHH9b58+cdjipJUq9evVSmTBn95z//UVBQkDZs2JBiOffff79++OEHbd26VVWqVNHzzz+vnj17pghlAADn2Iz1pGkAAAAA+JfjSBIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAW/w/d7DpFp2LlAwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -1809,7 +1879,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 53, "id": "7228eac7-e0a9-473d-9432-e558bbc91841", "metadata": {}, "outputs": [ @@ -1847,28 +1917,32 @@ " \n", " 1\n", " 3\n", - " 1\n", + " 3\n", " \n", " \n", " 4\n", - " 3\n", + " 2\n", " \n", " \n", " 5\n", - " 46\n", + " 45\n", " \n", " \n", - " 2\n", - " 3\n", + " 2\n", + " 1\n", " 1\n", " \n", " \n", + " 3\n", + " 2\n", + " \n", + " \n", " 4\n", " 3\n", " \n", " \n", " 5\n", - " 46\n", + " 44\n", " \n", " \n", "\n", @@ -1877,15 +1951,16 @@ "text/plain": [ " Number of records\n", "run evaluation_score \n", - "1 3 1\n", - " 4 3\n", - " 5 46\n", - "2 3 1\n", + "1 3 3\n", + " 4 2\n", + " 5 45\n", + "2 1 1\n", + " 3 2\n", " 4 3\n", - " 5 46" + " 5 44" ] }, - "execution_count": 38, + "execution_count": 53, "metadata": {}, "output_type": "execute_result" } @@ -1910,13 +1985,13 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 55, "id": "b2a18a78-55ec-43f6-9d62-929707a94364", "metadata": {}, "outputs": [ { "data": { - "image/png": "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//6mXLlymWocP368uXQXcf78+UzLtWnTxqUWY4ypVq2aadasWaZlP//8cyPJfP7558YYY1JSUkzJkiVN9erVzd9//+1c7sMPPzSSzLhx41zqlGQmTZrk0uett95qateunWldl+rXr5+RZIoWLWq6du1qZsyYYXbt2pVpuXHjxhlJZsWKFZnmpaenG2OMmT17tpFk3nzzTee8lJQU06BBAxMUFGSSkpKMMcbExcUZSSYkJMQkJCS49NWyZUtTo0YNc+HCBZf+GzZsaCpXruxsq1mzprnzzjuv+PouFRsba3x9fc3JkyedbcnJySY0NNRlm3A4HGbIkCFu95+xDW/dutXs37/f+Pj4mKFDhzrnN2vWzFSrVs05nfFeLFq0KFNfl26TGdve/fff72y7ePGiKVu2rLHZbGbatGnO9lOnTpmAgADTv39/Z1vGdnbTTTc5PwtjjHn33XeNJPPCCy8YY/55vytXrmzatGnj/GyN+Wc7r1ChgmndunWmmvr06ZOj92f48OFGkvnqq6+cbWfOnDEVKlQw5cuXN2lpaS6vP6efgSQzaNAgc/z4cZOQkGC2bdtm2rZtaySZ5557zrnc0qVLjZeXl8v6jTFm/vz5RpLZtGmTMcaYvXv3Gi8vL9O1a1eXmoz5v+09ISHB+Pn5mTvuuMNlmZdfftlIMgsXLnS2NWvWzEgy8+fPd+lr1apVRpJ59tlnnW0XL140TZo0cdkuTp06lem15JR1m8xwNfuYsWPHurW+K+3Hjcm870xJSTHVq1c3t99+u7MtJ5+FMcaUK1fOSDJffvmlsy0hIcHY7XYzatSoK9ad020o4/XFxcW5PP/S/bgx//e5L1myxNmWnJxswsPDTffu3a9YE1AQcSQJ8KA5c+Zo/fr1Lg/rr2633367ihcvrmXLljnbTp06pfXr17v8Guzt7e28xiU9PV0nT57UxYsXVadOnRyfNpUTAQEBzn9n/HrarFkz/f7770pMTHS7v23btikhIUEPP/ywy7VKd955p6KiorIcbenBBx90mW7SpIl+//33K65r0aJFevnll1WhQgWtXLlSo0ePVtWqVdWyZUuX027ef/991axZU127ds3UR8apUB999JHCw8PVp08f5zxfX18NHTpUZ8+e1caNG12e1717d5UoUcI5ffLkSX322Wfq1auXzpw54/Lrc5s2bbR3715nTaGhofrll1+0d+/eK75Gq969eys1NVUrVqxwtn3yySc6ffq0y7YTGhqqLVu2XNNRoIoVK+ree+/VK6+8oqNHj151P5f697//7fy3t7e36tSpI2OMBg0a5GwPDQ1VlSpVstwG+vXrp+DgYOd0jx49VLp0aX300UeSpB07dmjv3r26++67deLECefncO7cObVs2VJffvml0tPTXfq8dPvLzkcffaS6deu6nJIXFBSk+++/X3/88YfzlMur8frrr6tEiRIqWbKk6tSpow0bNujxxx/XyJEjncu89957qlq1qqKiolyOcNx+++2S5DwVd9WqVUpPT9e4cePk5eX6J0HG9v7pp58qJSVFw4cPd1lm8ODBCgkJyfQ9tdvtmU4T/uijj+Tj46OHHnrI2ebt7a1HH33UZbmAgAD5+fnpiy++0KlTp672LXK6mn2MtcacuNJ+XHLdd546dUqJiYlq0qSJy/45J59FhujoaDVp0sQ5XaJEiWy/B1nJyTbkrqCgIJfrnPz8/FS3bt0c1wQUNAzcAHhQ3bp1L3vBr4+Pj7p37663335bycnJstvtWrFihVJTUzOdMvPGG29o5syZ2r17t8vpL1mNunS1Nm3apPHjx2vz5s2ZTltLTEyUw+Fwq78DBw5IkqpUqZJpXlRUlL7++muXNn9/f5ewIUlFixbN0R9TXl5eGjJkiIYMGaITJ05o06ZNmj9/vtauXau77rpLX331lSRp//79VzzF5sCBA6pcuXKmP2SqVq3q8royXPoZ7Nu3T8YYPf3003r66aezXEdCQoJuuukmTZo0SZ07d9Ytt9yi6tWrq23btrr33nsVExNz2Rpr1qypqKgoLVu2zBkqli1bpuLFizv/UJakZ599Vv3791dERIRq166t9u3bq1+/fqpYseJl+7/UU089paVLl2ratGlZnnJ4NW6++WaXaYfDIX9/fxUvXjxT+6WnN0lS5cqVXaZtNpsiIyOd11hkBM+sTvnKkJiY6HIKUk6/TwcOHFC9evUytVu3kasdIr1z58565JFHlJKSoq1bt2rKlCk6f/68y/a4d+9e7dq1K9P3JUPGIAf79++Xl5eXoqOjL/tapMzfUz8/P1WsWDHT9n7TTTdlGpjkwIEDKl26tIKCglzaL+3Tbrdr+vTpGjVqlEqVKqX69eurQ4cO6tevn8LDw7Ot0d3apaz3MT4+Pipbtqxb67jSflySPvzwQ02ePFk7duxwuSbMGn5y8llkuPS7IeV8XyjlbBtyV9myZTOFuaJFi2rnzp1X3SfgSYQkoIC76667tGDBAq1du1ZdunTRu+++q6ioKNWsWdO5zJtvvqkBAwaoS5cueuyxx1SyZEnn+feXXsx9qewuFL90MIT9+/erZcuWioqK0vPPP6+IiAj5+fnpo48+0qxZszL94p4XvL29c6WfYsWKqVOnTurUqZOaN2+ujRs36sCBA85rl3Kb9VdkSc73avTo0dmOJJUxfHDTpk21f/9+ffDBB/rkk0/02muvadasWZo/f77LkZas9O7dW88884z++usvBQcHa/Xq1erTp498fP5v19+rVy81adJEK1eu1CeffKLnnntO06dP14oVK9SuXbscv8aKFSvqnnvu0SuvvKKxY8dmmp/T7cwqq887u23AGJPDSv9Pxufw3HPPqVatWlkuc+kf9Zd+lp5QtmxZ5xDX7du3V/HixfXII4+oRYsW6tatm6R/XluNGjX0/PPPZ9lHREREntV3re/R8OHD1bFjR61atUrr1q3T008/ralTp+qzzz7TrbfemktVZs1ut19TUMjKV199pU6dOqlp06aaO3euSpcuLV9fXy1atEhvv/32VfV5rd+DnGxD7n5nc/O7CRQEhCSggGvatKlKly6tZcuWqXHjxvrss88yDYSwfPlyVaxYUStWrHD5j238+PFX7L9o0aJZjjB16a/Da9asUXJyslavXu3yK2ZWI+jldISujFCyZ88el6MbGW15FVqs6tSpo40bN+ro0aMqV66cKlWqpJ9//vmyzylXrpx27typ9PR0lz+odu/e7Zx/ORlHaXx9fXN0P5eMUQ4HDhyos2fPqmnTppowYUKOQtLEiRP1/vvvq1SpUkpKSnIO9mFVunRpPfzww3r44YeVkJCg2267Tc8884xbIUn652jSm2++qenTp2eal3E05tJt7dLtLDddeoqiMUb79u1zHoWrVKmSJCkkJCTX76tTrlw57dmzJ1N7TrcRdzzwwAOaNWuWnnrqKXXt2lU2m02VKlXSjz/+qJYtW172+1ipUiWlp6fr119/zTYoWr+n1iOMKSkpiouLy9F7V65cOW3YsEFnz551CZ5ZvUcZdY0aNUqjRo3S3r17VatWLc2cOVNvvvnmFdeVXe2e2se8//778vf317p162S3253tixYtclkuJ59FXslqG/LEdxYoSLgmCSjgvLy81KNHD61Zs0ZLly7VxYsXM51ql/ELnvUXuy1btmjz5s1X7L9SpUpKTEx0OSXi6NGjLiOsZbeOxMTETP/RS1JgYGCWwetSderUUcmSJTV//nyXU1DWrl2rXbt26c4777xiHzkRHx+f5TUgKSkp2rBhg7y8vJxHbrp3764ff/wx0+uX/u+1t2/fXvHx8S7Xil28eFEvvfSSgoKC1KxZs8vWU7JkSTVv3lwLFizI8hoe632bLj2NLCgoSJGRkVkO43ypqlWrqkaNGlq2bJmWLVum0qVLq2nTps75aWlpma4lK1mypMqUKZOj/i9VqVIl3XPPPVqwYIHi4+Nd5oWEhKh48eKZRqGbO3eu2+vJqSVLlujMmTPO6eXLl+vo0aPO8Fe7dm1VqlRJM2bM0NmzZzM9/1run9W+fXt99913Lt/Bc+fO6ZVXXlH58uVzdEpVTvn4+GjUqFHatWuXPvjgA0n/HCH8888/9eqrr2Za/u+//9a5c+ckSV26dJGXl5cmTZqU6WhwxvbeqlUr+fn56cUXX3T5/r/++utKTEzM0fe0ffv2unjxosstA9LS0jLdhPj8+fO6cOGCS1ulSpUUHBx8Vdtkfu1jLsfb21s2m83lCMwff/yhVatWuSyXk88ir2S1DWX8iGD9zqalpV1xNFHgRsGRJMCD1q5d6/xl2aphw4Yuv9j27t1bL730ksaPH68aNWo4r2vI0KFDB61YsUJdu3bVnXfeqbi4OM2fP1/R0dFZ/vFnddddd2nMmDHq2rWrhg4dqvPnz2vevHm65ZZbXC4qvuOOO+Tn56eOHTvqgQce0NmzZ/Xqq6+qZMmSmf7Qr127tubNm6fJkycrMjJSJUuWzPQrrvTPkZTp06dr4MCBatasmfr06aNjx47phRdeUPny5TVixIgcvY9XcvjwYdWtW1e33367WrZsqfDwcCUkJOi///2vfvzxRw0fPtx5nctjjz2m5cuXq2fPnrrvvvtUu3ZtnTx5UqtXr9b8+fNVs2ZN3X///VqwYIEGDBig77//XuXLl9fy5cu1adMmzZ4922WwgOzMmTNHjRs3Vo0aNTR48GBVrFhRx44d0+bNm3X48GH9+OOPkv65QLt58+aqXbu2wsLCtG3bNi1fvlyPPPJIjl577969NW7cOPn7+2vQoEEuR77OnDmjsmXLqkePHqpZs6aCgoL06aefauvWrdnee+hKnnzySS1dulR79uxRtWrVXOb9+9//1rRp0/Tvf/9bderU0ZdffqnffvvtqtaTE2FhYWrcuLEGDhyoY8eOafbs2YqMjHQO3e3l5aXXXntN7dq1U7Vq1TRw4EDddNNN+vPPP/X5558rJCREa9asuap1jx07Vv/973/Vrl07DR06VGFhYXrjjTcUFxen999/P9dP6RowYIDGjRun6dOnq0uXLrr33nv17rvv6sEHH9Tnn3+uRo0aKS0tTbt379a7776rdevWqU6dOoqMjNSTTz6p//znP2rSpIm6desmu92urVu3qkyZMpo6dapKlCih2NhYTZw4UW3btlWnTp20Z88ezZ07V//6179cLtbPTseOHdWoUSONHTtWf/zxh6Kjo7VixYpMIf23335Ty5Yt1atXL0VHR8vHx0crV67UsWPHsjwKeiX5sY+50n78zjvv1PPPP6+2bdvq7rvvVkJCgubMmaPIyEiXH6dy8lnkpUu3oWrVqql+/fqKjY3VyZMnFRYWpnfeeUcXL17M0zqAAsMzg+oBhdvlho5VFsMkp6enm4iICCPJTJ48OVN/6enpZsqUKaZcuXLGbrebW2+91Xz44YdZDu+tS4ZbNsaYTz75xFSvXt34+fmZKlWqmDfffDPLIcBXr15tYmJijL+/vylfvryZPn26WbhwYaZhYuPj482dd95pgoODjSTncOBZDR1rjDHLli0zt956q7Hb7SYsLMz07dvXHD582GWZ/v37m8DAwEyvPas6L5WUlGReeOEF06ZNG1O2bFnj6+trgoODTYMGDcyrr77qMryuMcacOHHCPPLII+amm24yfn5+pmzZsqZ///7mr7/+ci5z7NgxM3DgQFO8eHHj5+dnatSokelzyxj2OrvhjPfv32/69etnwsPDja+vr7nppptMhw4dzPLly53LTJ482dStW9eEhoaagIAAExUVZZ555hmTkpJy2decYe/evc7t6uuvv3aZl5ycbB577DFTs2ZNExwcbAIDA03NmjXN3Llzr9hvVsMtZ8gYStk6BLgx/wyDPGjQIONwOExwcLDp1auXSUhIyHYI8OPHj2fqN6tt4NLhxjO2s//+978mNjbWlCxZ0gQEBJg777zTHDhwINPzt2/fbrp162aKFStm7Ha7KVeunOnVq5fZsGHD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AAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsHA7JP399986f/68c/rAgQOaPXu2Pvnkk1wtDAAAAAA8we2Q1LlzZy1ZskSSdPr0adWrV08zZ85U586dNW/evFwvEAAAAADyk9sh6YcfflCTJk0kScuXL1epUqV04MABLVmyRC+++GKuFwgAAAAA+cntkHT+/HkFBwdLkj755BN169ZNXl5eql+/vg4cOJDrBQIAAABAfnI7JEVGRmrVqlU6dOiQ1q1bpzvuuEOSlJCQoJCQkFwvEAAAAADyk9shady4cRo9erTKly+vevXqqUGDBpL+Oap06623utXXvHnzFBMTo5CQEIWEhKhBgwZau3atc/6FCxc0ZMgQFStWTEFBQerevbuOHTvmbskAAAAAkGM2Y4xx90nx8fE6evSoatasKS+vf3LWd999p5CQEEVFReW4nzVr1sjb21uVK1eWMUZvvPGGnnvuOW3fvl3VqlXTQw89pP/9739avHixHA6HHnnkEXl5eWnTpk05XkdSUpIcDocSExM50gUAAAo02841ni6h8KjZydMVFCpXETnyRE6zwVWFpLwUFham5557Tj169FCJEiX09ttvq0ePHpKk3bt3q2rVqtq8ebPq16+fo/4ISQAA4HpBSMpHhKR8VVAiR06zgU9OOuvWrVuOV7xixYocL2uVlpam9957T+fOnVODBg30/fffKzU1Va1atXIuExUVpZtvvvmyISk5OVnJycnO6aSkpKuqBwAAAEDhlKNrkhwOh/MREhKiDRs2aNu2bc7533//vTZs2CCHw+F2AT/99JOCgoJkt9v14IMPauXKlYqOjlZ8fLz8/PwUGhrqsnypUqUUHx+fbX9Tp051qTciIsLtmgAAAAAUXjk6krRo0SLnv8eMGaNevXpp/vz58vb2lvTPUaCHH374qk5nq1Klinbs2KHExEQtX75c/fv318aNG93uJ0NsbKxGjhzpnE5KSiIoAQAAAMixHIUkq4ULF+rrr792BiRJ8vb21siRI9WwYUM999xzbvXn5+enyMhISVLt2rW1detWvfDC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wMMOHz6sPn366MSJEypRooQaN26sb7/9ViVKlPB0aShguCYJAAAAACy4TxIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAgX/zxxx+y2WzasWNHnq9r8eLFCg0NzfP1AABuTIQkAIAGDBggm82W6dG2bVtPl3ZF5cuX1+zZs13aevfurd9++y3P1x0XF6e7775bZcqUkb+/v8qWLavOnTtr9+7deb5uAEDe8fF0AQCAgqFt27ZatGiRS5vdbvdQNdcmICBAAQEBebqO1NRUtW7dWlWqVNGKFStUunRpHT58WGvXrtXp06fzdL2+vr551j8AgCNJAID/z263Kzw83OVRtGhRSdLdd9+t3r17uyyfmpqq4sWLa8mSJZKkjz/+WI0bN1ZoaKiKFSumDh06aP/+/dmuL6tT4latWiWbzeac3r9/vzp37qxSpUopKChI//rXv/Tpp5865zdv3lwHDhzQiBEjnEe/sut73rx5qlSpkvz8/FSlShUtXbrUZb7NZtNrr72mrl27qkiRIqpcubJWr16dbf2//PKL9u/fr7lz56p+/foqV66cGjVqpMmTJ6t+/frO5Q4fPqw+ffooLCxMgYGBqlOnjrZs2eJWXfPmzVOnTp0UGBioZ555RpL0wQcf6LbbbpO/v78qVqyoiRMn6uLFi9nWCwDIOUISAOCK+vbtqzVr1ujs2bPOtnXr1un8+fPq2rWrJOncuXMaOXKktm3bpg0bNsjLy0tdu3ZVenr6Va/37Nmzat++vTZs2KDt27erbdu26tixow4ePChJWrFihcqWLatJkybp6NGjOnr0aJb9rFy5UsOGDdOoUaP0888/64EHHtDAgQP1+eefuyw3ceJE9erVSzt37lT79u3Vt29fnTx5Mss+S5QoIS8vLy1fvlxpaWnZ1t+sWTP9+eefWr16tX788Uc9/vjjzvckp3VNmDBBXbt21U8//aT77rtPX331lfr166dhw4bp119/1YIFC7R48WJngAIAXCMDACj0+vfvb7y9vU1gYKDL45lnnjHGGJOammqKFy9ulixZ4nxOnz59TO/evbPt8/jx40aS+emnn4wxxsTFxRlJZvv27cYYYxYtWmQcDofLc1auXGmu9F9TtWrVzEsvveScLleunJk1a5bLMpf23bBhQzN48GCXZXr27Gnat2/vnJZknnrqKef02bNnjSSzdu3abGt5+eWXTZEiRUxwcLBp0aKFmTRpktm/f79z/oIFC0xwcLA5ceJEls/PaV3Dhw93WaZly5ZmypQpLm1Lly41pUuXzrZWAEDOcSQJACBJatGihXbs2OHyePDBByVJPj4+6tWrl9566y1J/xw1+uCDD9S3b1/n8/fu3as+ffqoYsWKCgkJUfny5SXJedTnapw9e1ajR49W1apVFRoaqqCgIO3atcvtPnft2qVGjRq5tDVq1Ei7du1yaYuJiXH+OzAwUCEhIUpISMi23yFDhig+Pl5vvfWWGjRooPfee0/VqlXT+vXrJUk7duzQrbfeqrCwsGuqq06dOi7TP/74oyZNmqSgoCDnY/DgwTp69KjOnz+fbb0AgJxh4AYAgKR/QkFkZGS28/v27atmzZopISFB69evV0BAgMvodx07dlS5cuX06quvqkyZMkpPT1f16tWVkpKSZX9eXl4yxri0paamukyPHj1a69ev14wZMxQZGamAgAD16NEj2z6v1aUDIthstiueLhgcHKyOHTuqY8eOmjx5stq0aaPJkyerdevWuTZ4RGBgoMv02bNnNXHiRHXr1i3Tsv7+/rmyTgAozDiSBADIkYYNGyoiIkLLli3TW2+9pZ49ezpDxYkTJ7Rnzx499dRTatmypapWrapTp05dtr8SJUrozJkzOnfunLPt0nsobdq0SQMGDFDXrl1Vo0YNhYeH648//nBZxs/PL9trgjJUrVpVmzZtytR3dHT0FV61e2w2m6KiopyvKSYmRjt27Mj2uqarreu2227Tnj17FBkZmenh5cV/7QBwrTiSBACQJCUnJys+Pt6lzcfHR8WLF3dO33333Zo/f75+++03l8EFihYtqmLFiumVV15R6dKldfDgQY0dO/ay66tXr56KFCmiJ554QkOHDtWWLVu0ePFil2UqV66sFStWqGPHjrLZbHr66aczHdkpX768vvzyS911112y2+0u9WZ47LHH1KtXL916661q1aqV1qxZoxUrVriMlOeuHTt2aPz48br33nsVHR0tPz8/bdy4UQsXLtSYMWMkSX369NGUKVPUpUsXTZ06VaVLl9b27dtVpkwZNWjQ4KrrGjdunDp06KCbb75ZPXr0kJeXl3788Uf9/PPPmjx58lW/JgDA/+fpi6IAAJ7Xv39/IynTo0qVKi7L/frrr0aSKVeunElPT3eZt379elO1alVjt9tNTEyM+eKLL4wks3LlSmNM5oEbjPlnoIbIyEgTEBBgOnToYF555RWXgRvi4uJMixYtTEBAgImIiDAvv/yyadasmRk2bJhzmc2bN5uYmBhjt9udz81qUIi5c+eaihUrGl9fX3PLLbe4DEJhjHGpNYPD4TCLFi3K8j07fvy4GTp0qKlevboJCgoywcHBpkaNGmbGjBkmLS3Nudwff/xhunfvbkJCQkyRIkVMnTp1zJYtW66pLmOM+fjjj03Dhg1NQECACQkJMXXr1jWvvPJKlrUCANxjM+aSE8IBAAAAoBDjxGUAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAs/h9at1uYvWSJwwAAAABJRU5ErkJggg==", + "image/png": "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9c6ZM0cRERF69tlnNX36dIWHh+uJJ57QrFmzHOvMnDlTJUuWVFRUlBYvXqzFixfrueeeu2qfCxcuVLdu3eTp6anJkyerf//+WrZsmerVq5fpB1RaWppatGihQoUKadq0aWrYsKGmT5+eaXToShEREZL+/qF04cKFa66blJSk+vXr67XXXtO9996rV155RY899pj27NmjI0eOSJIuXryoRo0aafHixerZs6deeuklBQcHq0+fPnrllVcy9blgwQK99tpreuSRRzR9+nSFhobq119/Va1atbR7926NHDlS06dPl7+/vzp06KDly5c7Hjtu3DiNHz9ejRs31uuvv67nnntOpUqVumaIqV69usqWLasPPvgg07IlS5aoYMGCjr8WP/bYY5ozZ446d+6s2bNna/jw4fLz89Pu3buv+TplKFOmjHr16qU333xTR48ezdZjsqt79+5KT0/XlClTVLNmTU2cOFEzZ85U8+bNdccdd2jq1KmKjIzU8OHDtXHjxkyPf+GFF/S///1PI0aM0MCBA7Vu3To1a9ZMFy9edKzzxRdfqEGDBkpMTNTYsWM1adIknT17Vk2aNNH333+fqc+uXbvqwoULmjRpkvr373/V2k+cOKE6depo7dq1euKJJ/TCCy/o0qVLateuneP9bdCggRYvXizp78OfMj4vrkpISNCZM2dUsGBBR1t6erratWunadOmqW3btnrttdfUoUMHzZgxQ927d3d6/Pjx4/XQQw/J29tbEyZM0Pjx4xUeHq4vvvjCsc64ceM0YMAAlShRQtOnT1fnzp01b9483Xvvvbp8+bJTf6dOnVKrVq1UtWpVzZw5U40bN5YxRu3bt9fixYv14IMPauLEiTpy5Igj2Fh17txZy5cvV9++fTV79mwNHDhQ586d06FDh676Gjz33HN65JFHJP19+NvixYv16KOPSnLtOyY1NVUtWrRQ0aJFNW3aNHXu3Dlbr//VvsczvPLKK7rrrrs0YcIETZo0SV5eXuratWum84Cy815I0v79+9WlSxc1b95c06dPV8GCBdWnTx/9+uuv1633as/hyn3IVWfOnFHLli0VGxur6dOnKyoqSiNGjNCaNWtuuE/ArQyAPLdgwQIjKcub3W53rLd27Vojyaxatcrp8a1btzZly5Z13E9NTTXJyclO65w5c8YUK1bMPPzww07tkszYsWMd93v3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ABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYuDUkzZkzRzExMQoKClJQUJBq166tNWvWOJZfunRJAwYMUKFChRQQEKDOnTvrxIkTbqwYAAAAwK3OrSGpZMmSmjJlirZv365t27apSZMmat++vX799VdJ0pAhQ7Rq1Sp9+OGH2rBhg44ePapOnTq5s2QAAAAAtzibMca48oCLFy/KGKMCBQpIkg4ePKjly5crOjpa9957700XFBoaqpdeekldunRRkSJF9N5776lLly6SpD179qhixYravHmzatWqla3+EhMTFRwcrISEBAUFBd10fQAAZJdt5yp3l5B/xLZzdwX5gos/uwDksOxmA5dHktq3b69FixZJks6ePauaNWtq+vTpat++vebMmXPDBaelpen999/X+fPnVbt2bW3fvl2XL19Ws2bNHOtERUWpVKlS2rx581X7SU5OVmJiotMNAAAAALLL5ZD0ww8/qH79+pKkpUuXqlixYjp48KAWLVqkV1991eUCfv75ZwUEBMhut+uxxx5zjEodP35cPj4+CgkJcVq/WLFiOn78+FX7mzx5soKDgx238PBwl2sCAAAAcPtyOSRduHBBgYGBkqTPPvtMnTp1koeHh2rVqqWDBw+6XECFChW0Y8cObdmyRY8//rh69+6tXbt2udxPhlGjRikhIcFxO3z48A33BQAAAOD243JIioyM1IoVK3T48GGtXbvWcR5SfHz8DZ3z4+Pjo8jISFWrVk2TJ09WbGysXnnlFYWFhSklJUVnz551Wv/EiRMKCwu7an92u90xW17GDQAAAACyy+WQNGbMGA0fPlylS5dWzZo1Vbt2bUl/jyrdddddN11Qenq6kpOTVa1aNXl7e2v9+vWOZXv37tWhQ4cc2wQAAACAnObl6gO6dOmievXq6dixY4qNjXW0N23aVB07dnSpr1GjRqlVq1YqVaqUzp07p/fee09fffWV1q5dq+DgYPXr109Dhw5VaGiogoKC9NRTT6l27drZntkOAAAAAFzlckiSpLCwsEyHvNWoUcPlfuLj49WrVy8dO3ZMwcHBiomJ0dq1a9W8eXNJ0owZM+Th4aHOnTsr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73R74YUXjDHGXL582RQuXNgsWrTI8ZgePXqY7t27X7XPkydPGknm559/NsYYExcXZySZH3/80RhjzIIFC0xwcLDTY5YvX26u919TpUqVzGuvvea4HxERYWbMmOG0zpV916lTx/Tv399pna5du5rWrVs77ksyzz//vON+UlKSkWTWrFlz1Vpef/11U6BAARMYGGgaN25sJkyYYA4cOOBYPm/ePBMYGGhOnTqV5eOzW9fgwYOd1mnatKmZNGmSU9vixYtN8eLFr1orACD7GEkCAEiSGjdurB07djjdHnvsMUmSl5eXunXrpnfffVfS36NGH3/8sXr27Ol4/L59+9SjRw+VLVtWQUFBKl26tCQ5Rn1uRFJSkoYPH66KFSsqJCREAQEB2r17t8t97t69W3Xr1nVqq1u3rnbv3u3UFhMT4/i3v7+/goKCFB8ff9V+BwwYoOPHj+vdd99V7dq19eGHH6pSpUpat26dJGnHjh266667FBoaelN1Va9e3en+Tz/9pAkTJiggIMBx69+/v44dO6YLFy5ctV4AQPYwcQMAQNLfoSAyMvKqy3v27KmGDRsqPj5e69atk5+fn9Psd23btlVERITefPNNlShRQunp6apcubJSUlKy7M/Dw0PGGKe2y5cvO90fPny41q1bp2nTpikyMlJ+fn7q0qXLVfu8WVdOiGCz2a57uGBgYKDatm2rtm3bauLEiWrRooUmTpyo5s2b59jkEf7+/k73k5KSNH78eHXq1CnTur6+vjmyTQC4nTGSBADIljp16ig8PFxLlizRu+++q65duzpCxalTp7R37149//zzatq0qSpWrKgzZ85cs78iRYro3LlzOn/+vKPtymsobdq0SX369FHHjh1VpUoVhYWF6Y8//nBax8fH56rnBGWoWLGiNm3alKnv6Ojo6zxr19hsNkVFRTmeU0xMjHbs2HHV85putK67775be/fuVWRkZKabhwf/tQPAzWIkCQAgSUpOTtbx48ed2ry8vFS4cGHH/QceeEBz587Vb7/95jS5QMGCBVWoUCG98cYbKl68uA4dOqSRI0dec3s1a9ZUgQIF9Oyzz2rgwIHasmWLFi5c6LRO+fLltWzZMrVt21Y2m02jR4/ONLJTunRpbdy4Uffff7/sdrtTvRmefvppdevWTXfddZeaNWumVatWadmyZU4z5blqx44dGjt2rB566CFFR0fLx8dHGzZs0Pz58zVixAhJUo8ePTRp0iR16NBBkydPVvHixfXjjz+qRIkSql279g3XNWbMGLVp00alSpVSly5d5OHhoZ9++km//PKLJk6ceMPPCQDw/7n7pCgAgPv17t3bSMp0q1ChgtN6u3btMpJMRESESU9Pd1q2bt06U7FiRWO3201MTIz56quvjCSzfPlyY0zmiRuM+XuihsjISOPn52fatGlj3njjDaeJG+Li4kzjxo2Nn5+fCQ8PN6+//rpp2LChGTRokGOdzZs3m5iYGGO32x2PzWpSiNmzZ5uyZcsab29vc+eddzpNQmGMcao1Q3BwsFmwYEGWr9nJkyfNwIEDTeXKlU1AQIAJDAw0VapUMdOmTTNpaWmO9f744w/TuXNnExQUZAoUKGCqV69utmzZclN1GWPMp59+aurUqWP8/PxMUFCQqVGjhnnjjTeyrBUA4BqbMVccEA4AAAAAtzEOXAYAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMDi/wHQI4KaEx2+SgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -1926,34 +2001,43 @@ } ], "source": [ - "evaluation_df_pivot.reset_index(inplace=True)\n", + "evaluation_df_pivot.reset_index(drop=True, inplace=True)\n", "\n", "# Plotting\n", "plt.figure(figsize=(10, 6))\n", "\n", - "# Set the width of each bar\n", "bar_width = 0.35\n", "\n", "# OpenAI brand colors\n", - "openai_colors = ['#00D1B2', '#000000'] # Green and Black\n", + "openai_colors = ['#00D1B2', '#000000'] # Green, Black\n", "\n", - "# Get unique runs and evaluation scores\n", + "# Identify unique runs and evaluation scores\n", "unique_runs = evaluation_df_pivot['run'].unique()\n", "unique_evaluation_scores = evaluation_df_pivot['evaluation_score'].unique()\n", "\n", - "# Ensure we have enough colors (repeating the pattern if necessary)\n", + "# Repeat colors if there are more runs than colors\n", "colors = openai_colors * (len(unique_runs) // len(openai_colors) + 1)\n", "\n", - "# Iterate over each run to plot\n", "for i, run in enumerate(unique_runs):\n", - " run_data = evaluation_df_pivot[evaluation_df_pivot['run'] == run]\n", - "\n", - " # Position of bars for this run\n", + " # Select rows for this run only\n", + " run_data = evaluation_df_pivot[evaluation_df_pivot['run'] == run].copy()\n", + " \n", + " # Ensure every 'evaluation_score' is present\n", + " run_data.set_index('evaluation_score', inplace=True)\n", + " run_data = run_data.reindex(unique_evaluation_scores, fill_value=0)\n", + " run_data.reset_index(inplace=True)\n", + " \n", + " # Plot each bar\n", " positions = np.arange(len(unique_evaluation_scores)) + i * bar_width\n", + " plt.bar(\n", + " positions,\n", + " run_data['Number of records'],\n", + " width=bar_width,\n", + " label=f'Run {run}',\n", + " color=colors[i]\n", + " )\n", "\n", - " plt.bar(positions, run_data['Number of records'], width=bar_width, label=f'Run {run}', color=colors[i])\n", - "\n", - "# Setting the x-axis labels to be the evaluation scores, centered under the groups\n", + "# Configure the x-axis to show evaluation scores under the grouped bars\n", "plt.xticks(np.arange(len(unique_evaluation_scores)) + bar_width / 2, unique_evaluation_scores)\n", "\n", "plt.xlabel('Evaluation Score')\n", @@ -1978,9 +2062,9 @@ ], "metadata": { "kernelspec": { - "display_name": "openai_test", + "display_name": "myenv", "language": "python", - "name": "openai_test" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -1992,7 +2076,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.13" + "version": "3.12.7" } }, "nbformat": 4, From fe4a599b45b3af6cf1a000d042490cf9b731163b Mon Sep 17 00:00:00 2001 From: Lee Spacagna Date: Fri, 10 Jan 2025 13:59:15 +0200 Subject: [PATCH 3/6] improved run examples --- ..._to_evaluate_LLMs_for_SQL_generation.ipynb | 396 ++++++++---------- 1 file changed, 172 insertions(+), 224 deletions(-) diff --git a/examples/evaluation/How_to_evaluate_LLMs_for_SQL_generation.ipynb b/examples/evaluation/How_to_evaluate_LLMs_for_SQL_generation.ipynb index addab37b2a..46429c6708 100644 --- a/examples/evaluation/How_to_evaluate_LLMs_for_SQL_generation.ipynb +++ b/examples/evaluation/How_to_evaluate_LLMs_for_SQL_generation.ipynb @@ -49,65 +49,16 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 6, "id": "245fcedb", "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Matplotlib is building the font cache; this may take a moment.\n" - ] - }, { "name": "stdout", "output_type": "stream", "text": [ "cannot find .env file\n" ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "2352f1731ce346a2ad30174380a138a1", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "README.md: 0%| | 0.00/4.43k [00:00 56\"\\n'\n", - " '}')\n" + "('{\"create\": \"CREATE TABLE department_heads (name VARCHAR(50), age '\n", + " 'INT)\",\"select\": \"SELECT COUNT(*) FROM department_heads WHERE age > 56\"}')\n" ] } ], @@ -423,7 +371,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 13, "id": "4c7133f1-74d6-43f1-9443-09a3f8308c35", "metadata": {}, "outputs": [], @@ -441,7 +389,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 14, "id": "6a9a9128", "metadata": {}, "outputs": [ @@ -451,7 +399,7 @@ "True" ] }, - "execution_count": 19, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -472,7 +420,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 15, "id": "a0a26690", "metadata": {}, "outputs": [ @@ -491,7 +439,7 @@ "False" ] }, - "execution_count": 20, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -528,7 +476,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 16, "id": "9cc95481", "metadata": {}, "outputs": [], @@ -571,7 +519,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 17, "id": "c6d2573d", "metadata": {}, "outputs": [], @@ -637,7 +585,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 18, "id": "a9266753-4646-4901-bc14-632d3bf47aaa", "metadata": {}, "outputs": [ @@ -645,7 +593,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "CREATE SQL is: CREATE TABLE department_heads (id INT, name VARCHAR(50), age INT)\n", + "CREATE SQL is: CREATE TABLE department_heads (name VARCHAR(50), age INT)\n", "SELECT SQL is: SELECT COUNT(*) FROM department_heads WHERE age > 56\n" ] } @@ -660,7 +608,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 19, "id": "83bc1f1b", "metadata": {}, "outputs": [ @@ -668,7 +616,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Testing create query: CREATE TABLE department_heads (id INT, name VARCHAR(50), age INT)\n", + "Testing create query: CREATE TABLE department_heads (name VARCHAR(50), age INT)\n", "Testing select query: SELECT COUNT(*) FROM department_heads WHERE age > 56\n", "[(0,)]\n" ] @@ -679,7 +627,7 @@ "True" ] }, - "execution_count": 24, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -692,7 +640,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 20, "id": "589c7cc7", "metadata": {}, "outputs": [ @@ -711,7 +659,7 @@ "False" ] }, - "execution_count": 25, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -738,7 +686,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 21, "id": "029c8426", "metadata": {}, "outputs": [], @@ -791,7 +739,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 22, "id": "85cfb78d", "metadata": {}, "outputs": [], @@ -822,7 +770,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 23, "id": "607ee304", "metadata": {}, "outputs": [], @@ -840,7 +788,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 24, "id": "bd1002c2", "metadata": {}, "outputs": [ @@ -909,7 +857,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 25, "id": "85c44a17", "metadata": {}, "outputs": [ @@ -939,7 +887,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 26, "id": "1244c44e", "metadata": {}, "outputs": [], @@ -966,7 +914,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 27, "id": "a98afa30", "metadata": {}, "outputs": [], @@ -1004,7 +952,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 28, "id": "898e5069", "metadata": {}, "outputs": [], @@ -1015,7 +963,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 29, "id": "2baec278", "metadata": {}, "outputs": [ @@ -1036,8 +984,8 @@ "Testing create query: CREATE TABLE losing_bonuses (id INT, points_against INT, losing_bonus VARCHAR(50))\n", "Testing select query: SELECT losing_bonus FROM losing_bonuses WHERE points_against = 588\n", "[]\n", - "Testing create query: CREATE TABLE rugby_matches (team1 VARCHAR(50), team2 VARCHAR(50), tries_against INT, losing_bonus INT)\n", - "Testing select query: SELECT * FROM rugby_matches WHERE tries_against = 7 AND losing_bonus = 1\n", + "Testing create query: CREATE TABLE tries_against (team_name VARCHAR(50), losing_bonus INT)\n", + "Testing select query: SELECT * FROM tries_against WHERE losing_bonus = 7\n", "[]\n", "Testing create query: CREATE TABLE try_bonus (id INT, points_against INT)\n", "Testing select query: SELECT * FROM try_bonus WHERE points_against = 488\n", @@ -1048,17 +996,17 @@ "Testing create query: CREATE TABLE Drawn (Drawn_id INT, Tries_against INT)\n", "Testing select query: SELECT Drawn_id FROM Drawn WHERE Tries_against = 0\n", "[]\n", - "Testing create query: CREATE TABLE champions (id INT, name VARCHAR(255), reign_days INT, defenses INT)\n", - "Testing select query: SELECT name, reign_days FROM champions WHERE reign_days > 3 AND defenses = 1\n", + "Testing create query: CREATE TABLE champion_reigns (id INT, champion_name VARCHAR(255), days_held INT, defenses INT)\n", + "Testing select query: SELECT days_held FROM champion_reigns WHERE days_held > 3 AND defenses = 1\n", "[]\n", - "Testing create query: CREATE TABLE champion_reigns (id INT, champion_name VARCHAR(50), days_held INT, defenses INT)\n", - "Testing select query: SELECT days_held FROM champion_reigns WHERE days_held > 3 AND defenses < 1\n", + "Testing create query: CREATE TABLE champion_reigns (champion_id INT, days_held INT, defenses INT)\n", + "Testing select query: SELECT days_held FROM champion_reigns WHERE defenses < 1 AND days_held > 3\n", "[]\n", "Testing create query: CREATE TABLE champion_defenses (champion_id INT, days_held INT, defenses INT)\n", "Testing select query: SELECT AVG(defenses) AS average_defenses FROM champion_defenses WHERE days_held = 404 AND defenses > 1\n", "[(None,)]\n", - "Testing create query: CREATE TABLE champions (id INT, name VARCHAR(50), days_held INT, defense INT)\n", - "Testing select query: SELECT MIN(defense) FROM champions WHERE days_held = 345\n", + "Testing create query: CREATE TABLE champion_defense (champion_name VARCHAR(50), days_held INT, defense_rating INT)\n", + "Testing select query: SELECT MIN(defense_rating) AS lowest_defense FROM champion_defense WHERE days_held = 345\n", "[(None,)]\n", "Testing create query: CREATE TABLE records (date DATE, score VARCHAR(10))\n", "Testing select query: SELECT date FROM records WHERE score = '76-72'\n", @@ -1066,7 +1014,7 @@ "Testing create query: CREATE TABLE attendance_data (game_id INT, attendance INT, result VARCHAR(10))\n", "Testing select query: SELECT attendance FROM attendance_data WHERE result = '1-5' AND loss = 'Ponson'\n", "Error while executing select query: no such column: loss\n", - "Testing create query: CREATE TABLE records (id INT, value INT, day DATE)\n", + "Testing create query: CREATE TABLE records (id INT, day VARCHAR(20), value INT)\n", "Testing select query: SELECT day FROM records WHERE value BETWEEN 36 AND 39\n", "[]\n", "Testing create query: CREATE TABLE records (record_id INT, record_date DATE)\n", @@ -1075,8 +1023,8 @@ "Testing create query: CREATE TABLE games (game_id INT, opponent VARCHAR(50), result VARCHAR(10))\n", "Testing select query: SELECT opponent FROM games WHERE result = 'loss' AND game_id = 7\n", "[]\n", - "Testing create query: CREATE TABLE game_scores (game_id INT, home_team_score INT, away_team_score INT)\n", - "Testing select query: SELECT home_team_score, away_team_score FROM game_scores WHERE home_team_score = 18 AND away_team_score = 43\n", + "Testing create query: CREATE TABLE game_scores (record VARCHAR(10), score INT)\n", + "Testing select query: SELECT score FROM game_scores WHERE record = '18–43'\n", "[]\n", "Testing create query: CREATE TABLE game_scores (game_id INT, opponent VARCHAR(50), score INT, record VARCHAR(10))\n", "Testing select query: SELECT score FROM game_scores WHERE opponent = 'Royals' AND record = '24–52'\n", @@ -1084,12 +1032,13 @@ "Testing create query: CREATE TABLE game_scores (record VARCHAR(10), score INT)\n", "Testing select query: SELECT score FROM game_scores WHERE record = '22–46'\n", "[]\n", - "Testing create query: CREATE TABLE military_personnel (id INT, real_name VARCHAR(255), primary_military_specialty VARCHAR(255))\n", + "Testing create query: CREATE TABLE military_personnel (id INT, code_name VARCHAR(50), real_name VARCHAR(50), primary_military_specialty VARCHAR(50))\n", "Testing select query: SELECT real_name FROM military_personnel WHERE primary_military_specialty = 'shock paratrooper'\n", "[]\n", - "Testing create query: CREATE TABLE persons (id INT, name VARCHAR(255), birthplace VARCHAR(255))\n", - "Testing select query: SELECT birthplace FROM persons WHERE name = 'Pete Sanderson'\n", - "[]\n", + "Testing create query: No table creation needed for this question\n", + "Error while creating the SQLite table: near \"No\": syntax error\n", + "Testing select query: SELECT birthplace FROM people WHERE name = 'Pete Sanderson'\n", + "Error while executing select query: no such table: people\n", "Testing create query: No table creation needed for this question\n", "Error while creating the SQLite table: near \"No\": syntax error\n", "Testing select query: SELECT role FROM employees WHERE name = 'Jean-Luc Bouvier'\n", @@ -1100,7 +1049,7 @@ "Testing create query: CREATE TABLE persons (id INT, name VARCHAR(50), birthplace VARCHAR(50), code_name VARCHAR(50))\n", "Testing select query: SELECT code_name FROM persons WHERE birthplace = 'Liverpool'\n", "[]\n", - "Testing create query: CREATE TABLE medalists (id INT, name VARCHAR(50), sport VARCHAR(50), medal VARCHAR(20))\n", + "Testing create query: CREATE TABLE medalists (id INT, name VARCHAR(255), sport VARCHAR(255), medal VARCHAR(255))\n", "Testing select query: SELECT name FROM medalists WHERE sport = 'canoeing'\n", "[]\n", "Testing create query: CREATE TABLE events (event_id INT, event_name VARCHAR(50), event_category VARCHAR(50), event_type VARCHAR(50))\n", @@ -1131,8 +1080,8 @@ "Testing create query: CREATE TABLE percentages (name VARCHAR(50), percentage DECIMAL(5,2))\n", "Testing select query: SELECT percentage FROM percentages WHERE name = 'Chris Wright'\n", "[]\n", - "Testing create query: CREATE TABLE candidate_votes (year INT, candidate VARCHAR(50), vote_percentage DECIMAL(5,2), office VARCHAR(50))\n", - "Testing select query: SELECT COUNT(*) FROM candidate_votes WHERE year > 1992 AND vote_percentage = 1.59 AND office = 'US Representative 4'\n", + "Testing create query: CREATE TABLE candidate_votes (year INT, candidate_name VARCHAR(50), vote_percentage DECIMAL(5,2), office VARCHAR(50))\n", + "Testing select query: SELECT COUNT(*) FROM candidate_votes WHERE year > 1992 AND vote_percentage = 1.59 AND office = 'us representative 4'\n", "[(0,)]\n", "Testing create query: CREATE TABLE representatives (id INT, name VARCHAR(255), start_year INT, end_year INT)\n", "Testing select query: SELECT start_year, end_year FROM representatives WHERE name = 'J. Smith Young'\n", @@ -1141,11 +1090,11 @@ "Error while creating the SQLite table: near \"No\": syntax error\n", "Testing select query: SELECT party FROM politicians WHERE name = 'Thomas L. Young'\n", "Error while executing select query: no such table: politicians\n", - "Testing create query: CREATE TABLE medals (country VARCHAR(50), gold INT, silver INT, bronze INT)\n", - "Testing select query: SELECT MIN(silver + bronze) AS lowest_total_medals FROM medals WHERE gold = 0 AND silver > 1 AND bronze > 2\n", + "Testing create query: CREATE TABLE country_medals (country_name VARCHAR(50), gold_medals INT, silver_medals INT, bronze_medals INT)\n", + "Testing select query: SELECT MIN(gold_medals + silver_medals + bronze_medals) AS lowest_total_medals FROM country_medals WHERE gold_medals = 0 AND silver_medals > 1 AND bronze_medals > 2\n", "[(None,)]\n", - "Testing create query: CREATE TABLE country_medals (country_name VARCHAR(50), rank INT, total_medals INT, silver_medals INT)\n", - "Testing select query: SELECT SUM(silver_medals) AS total_silver_medals FROM country_medals WHERE rank = 14 AND total_medals < 1\n", + "Testing create query: CREATE TABLE country_medals (country_name VARCHAR(50), gold_medals INT, silver_medals INT, bronze_medals INT)\n", + "Testing select query: SELECT SUM(silver_medals) AS total_silver_medals FROM country_medals WHERE gold_medals = 0 AND silver_medals > 0 AND bronze_medals = 0\n", "[(None,)]\n", "Testing create query: CREATE TABLE player_stats (player_id INT, tackles INT, fumble_recoveries INT, forced_fumbles INT)\n", "Testing select query: SELECT tackles FROM player_stats WHERE fumble_recoveries > 0 AND forced_fumbles = 0\n", @@ -1159,19 +1108,19 @@ "Testing create query: CREATE TABLE fumble_stats (player_name VARCHAR(50), fumble_recoveries INT, forced_fumbles INT, sacks INT, solo_tackles INT)\n", "Testing select query: SELECT fumble_recoveries FROM fumble_stats WHERE player_name = 'scott gajos' AND forced_fumbles = 0 AND sacks = 0 AND solo_tackles < 2\n", "[]\n", - "Testing create query: No table creation needed for this request\n", - "Error while creating the SQLite table: near \"No\": syntax error\n", - "Testing select query: SELECT Opponent FROM Matches WHERE Time = '20:00 GMT' AND Venue = 'Camp Nou'\n", - "Error while executing select query: no such table: Matches\n", + "Testing create query: CREATE TABLE matches (id INT, home_team VARCHAR(50), away_team VARCHAR(50), match_time TIME, venue VARCHAR(50))\n", + "Testing select query: SELECT away_team FROM matches WHERE match_time = '20:00:00' AND venue = 'Camp Nou'\n", + "[]\n", "Testing create query: CREATE TABLE matches (match_id INT, match_date DATE, match_time TIME, home_team VARCHAR(50), away_team VARCHAR(50), home_score INT, away_score INT)\n", "Testing select query: SELECT match_time FROM matches WHERE home_score = 3 AND away_score = 2\n", "[]\n", - "Testing create query: CREATE TABLE grounds (ground_id INT, ground_name VARCHAR(50))\n", - "Testing select query: SELECT ground_name FROM grounds WHERE ground_id = (SELECT ground_id FROM matches WHERE team_name = 'Aston Villa')\n", + "Testing create query: CREATE TABLE grounds (id INT, name VARCHAR(50))\n", + "Testing select query: SELECT name FROM grounds WHERE id = (SELECT ground_id FROM matches WHERE team = 'Aston Villa')\n", "Error while executing select query: no such table: matches\n", - "Testing create query: CREATE TABLE competitions (id INT, name VARCHAR(255), location VARCHAR(255), time VARCHAR(50))\n", - "Testing select query: SELECT name FROM competitions WHERE location = 'San Siro' AND time = '18:30 GMT'\n", - "[]\n", + "Testing create query: No table creation needed for this request\n", + "Error while creating the SQLite table: near \"No\": syntax error\n", + "Testing select query: SELECT competition_type FROM competitions WHERE venue = 'San Siro' AND start_time = '18:30 GMT';\n", + "Error while executing select query: no such table: competitions\n", "Testing create query: CREATE TABLE schools (school_id INT, school_name VARCHAR(50), locality VARCHAR(50), decile INT)\n", "Testing select query: SELECT COUNT(decile) AS total_decile FROM schools WHERE locality = 'redwood school'\n", "[(0,)]\n", @@ -1200,7 +1149,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 30, "id": "8fe18367", "metadata": {}, "outputs": [], @@ -1225,7 +1174,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 31, "id": "650e6159", "metadata": {}, "outputs": [ @@ -1233,12 +1182,12 @@ "data": { "text/plain": [ "unit_test_evaluation\n", - "SQL correct 43\n", - "SQL incorrect 7\n", + "SQL correct 42\n", + "SQL incorrect 8\n", "Name: count, dtype: int64" ] }, - "execution_count": 36, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -1249,7 +1198,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 32, "id": "b3f98f81", "metadata": { "scrolled": true @@ -1259,13 +1208,14 @@ "data": { "text/plain": [ "evaluation_score\n", - "5 45\n", - "3 3\n", - "4 2\n", + "5 43\n", + "4 4\n", + "3 2\n", + "1 1\n", "Name: count, dtype: int64" ] }, - "execution_count": 37, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -1286,7 +1236,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 33, "id": "513a2da1", "metadata": {}, "outputs": [ @@ -1318,7 +1268,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 34, "id": "70bd3e32", "metadata": {}, "outputs": [ @@ -1338,19 +1288,19 @@ "Testing create query: CREATE TABLE losing_bonuses (bonus_id INT, points_against INT)\n", "Testing select query: SELECT * FROM losing_bonuses WHERE points_against = 588\n", "[]\n", - "Testing create query: CREATE TABLE tries_table (team VARCHAR(50), tries_scored INT, losing_bonus INT)\n", - "Testing select query: SELECT team FROM tries_table WHERE losing_bonus = 7\n", + "Testing create query: CREATE TABLE tries (team VARCHAR(50), against VARCHAR(50), losing_bonus INT)\n", + "Testing select query: SELECT * FROM tries WHERE against = 'Losing' AND losing_bonus = 7\n", "[]\n", - "Testing create query: CREATE TABLE bonus_points (Try_bonus VARCHAR(50), Points_against INT)\n", - "Testing select query: SELECT Try_bonus FROM bonus_points WHERE Points_against = 488\n", + "Testing create query: CREATE TABLE try_bonus (id INT, points_against INT)\n", + "Testing select query: SELECT * FROM try_bonus WHERE points_against = 488\n", "[]\n", - "Testing create query: CREATE TABLE Points (team_name VARCHAR(50), Try_bonus INT)\n", - "Testing select query: SELECT team_name FROM Points WHERE Try_bonus = 140\n", + "Testing create query: CREATE TABLE Points (Team VARCHAR(50), Try_Bonus INT)\n", + "Testing select query: SELECT Team FROM Points WHERE Try_Bonus = 140\n", "[]\n", "Testing create query: CREATE TABLE Drawn (Drawn_id INT, Tries_against INT)\n", "Testing select query: SELECT * FROM Drawn WHERE Tries_against = 0\n", "[]\n", - "Testing create query: CREATE TABLE champions (id INT, name VARCHAR(50), reign_days INT, defenses INT)\n", + "Testing create query: CREATE TABLE champions (id INT, name VARCHAR(255), reign_days INT, defenses INT)\n", "Testing select query: SELECT reign_days FROM champions WHERE reign_days > 3 AND defenses = 1\n", "[]\n", "Testing create query: CREATE TABLE champion_reigns (id INT, champion_name VARCHAR(255), days_held INT, defenses INT)\n", @@ -1371,8 +1321,8 @@ "Testing create query: CREATE TABLE records (id INT, day VARCHAR(20), value INT)\n", "Testing select query: SELECT day FROM records WHERE value BETWEEN 36 AND 39\n", "[]\n", - "Testing create query: CREATE TABLE records (id INT, date DATE)\n", - "Testing select query: SELECT date FROM records WHERE id = '30-31'\n", + "Testing create query: CREATE TABLE records (record_id INT, record_date DATE);\n", + "Testing select query: SELECT record_date FROM records WHERE record_id = '30-31';\n", "[]\n", "Testing create query: CREATE TABLE games (game_id INT, opponent VARCHAR(50), result VARCHAR(10))\n", "Testing select query: SELECT opponent FROM games WHERE result = 'loss' AND game_id = 7\n", @@ -1381,18 +1331,17 @@ "Testing select query: SELECT home_team_score, away_team_score FROM game_scores WHERE home_team_score = 18 AND away_team_score = 43\n", "[]\n", "Testing create query: CREATE TABLE game_scores (game_id INT, opponent VARCHAR(50), score INT, team_record VARCHAR(10))\n", - "Testing select query: SELECT score FROM game_scores WHERE opponent = 'Royals' AND team_record = '24–52'\n", + "Testing select query: SELECT score FROM game_scores WHERE opponent = 'Royals' AND team_record = '24-52'\n", "[]\n", - "Testing create query: CREATE TABLE game_scores (record VARCHAR(10), score INT)\n", - "Testing select query: SELECT score FROM game_scores WHERE record = '22–46'\n", + "Testing create query: CREATE TABLE game_scores (game_id INT, home_team_score INT, away_team_score INT)\n", + "Testing select query: SELECT home_team_score, away_team_score FROM game_scores WHERE home_team_score = 22 AND away_team_score = 46\n", "[]\n", "Testing create query: CREATE TABLE military_personnel (id INT, code_name VARCHAR(50), real_name VARCHAR(50), primary_military_specialty VARCHAR(50))\n", "Testing select query: SELECT real_name FROM military_personnel WHERE primary_military_specialty = 'shock paratrooper'\n", "[]\n", - "Testing create query: No table creation needed for this question\n", - "Error while creating the SQLite table: near \"No\": syntax error\n", - "Testing select query: SELECT birthplace FROM employees WHERE name = 'Pete Sanderson'\n", - "Error while executing select query: no such table: employees\n", + "Testing create query: CREATE TABLE persons (id INT, name VARCHAR(255), birthplace VARCHAR(255))\n", + "Testing select query: SELECT birthplace FROM persons WHERE name = 'Pete Sanderson'\n", + "[]\n", "Testing create query: CREATE TABLE roles (id INT, name VARCHAR(255))\n", "Testing select query: SELECT name FROM roles WHERE name = 'Jean-Luc Bouvier'\n", "[]\n", @@ -1411,11 +1360,11 @@ "Testing create query: CREATE TABLE olympic_medals (athlete_id INT, athlete_name VARCHAR(255), event VARCHAR(255), year INT, city VARCHAR(255), medal VARCHAR(255))\n", "Testing select query: SELECT athlete_name FROM olympic_medals WHERE year = 2000 AND city = 'Sydney' AND medal = 'Bronze'\n", "[]\n", - "Testing create query: CREATE TABLE attendance (id INT, opponent VARCHAR(50), people_attended INT)\n", + "Testing create query: CREATE TABLE attendance (id INT, opponent VARCHAR(50), attendees INT)\n", "Testing select query: SELECT COUNT(*) FROM attendance WHERE opponent = 'twins'\n", "[(0,)]\n", "Testing create query: CREATE TABLE records (date DATE, record VARCHAR(10))\n", - "Testing select query: SELECT date FROM records WHERE record = '41-46'\n", + "Testing select query: SELECT date FROM records WHERE record BETWEEN '41' AND '46'\n", "[]\n", "Testing create query: CREATE TABLE scores (id INT, record VARCHAR(10), score INT)\n", "Testing select query: SELECT score FROM scores WHERE record = '48-55'\n", @@ -1430,55 +1379,52 @@ "Testing select query: SELECT votes FROM candidates WHERE name = 'candice sjostrom'\n", "[]\n", "Testing create query: CREATE TABLE percentages (name VARCHAR(50), percentage DECIMAL(5,2))\n", - "Testing select query: SELECT percentage FROM percentages WHERE name = 'Chris Wright'\n", + "Testing select query: SELECT percentage FROM percentages WHERE name = 'chris wright'\n", "[]\n", "Testing create query: CREATE TABLE candidate_votes (year INT, candidate VARCHAR(50), vote_percentage DECIMAL(5,2), office VARCHAR(50))\n", - "Testing select query: SELECT COUNT(*) FROM candidate_votes WHERE year > 1992 AND vote_percentage = 1.59 AND office = 'us representative 4'\n", + "Testing select query: SELECT COUNT(*) FROM candidate_votes WHERE year > 1992 AND vote_percentage = 1.59 AND office = 'US Representative 4'\n", "[(0,)]\n", "Testing create query: CREATE TABLE representatives (id INT, name VARCHAR(50), start_year INT, end_year INT)\n", "Testing select query: SELECT start_year, end_year FROM representatives WHERE name = 'J. Smith Young'\n", "[]\n", - "Testing create query: No table creation needed for this question\n", - "Error while creating the SQLite table: near \"No\": syntax error\n", + "Testing create query: CREATE TABLE politicians (id INT, name VARCHAR(255), party VARCHAR(255))\n", "Testing select query: SELECT party FROM politicians WHERE name = 'Thomas L. Young'\n", - "Error while executing select query: no such table: politicians\n", - "Testing create query: CREATE TABLE medals (country VARCHAR(50), gold INT, silver INT, bronze INT)\n", - "Testing select query: SELECT MIN(silver + bronze) AS lowest_total_medals FROM medals WHERE gold = 0 AND silver > 1 AND bronze > 2\n", - "[(None,)]\n", + "[]\n", "Testing create query: CREATE TABLE country_medals (country_name VARCHAR(50), gold_medals INT, silver_medals INT, bronze_medals INT)\n", - "Testing select query: SELECT SUM(silver_medals) AS total_silver_medals FROM country_medals WHERE gold_medals = 0 AND silver_medals > 0 AND bronze_medals = 0\n", + "Testing select query: SELECT MIN(silver_medals + bronze_medals) AS lowest_total_medals FROM country_medals WHERE gold_medals = 0 AND silver_medals > 1 AND bronze_medals > 2\n", + "[(None,)]\n", + "Testing create query: CREATE TABLE country_medals (country_name VARCHAR(50), rank INT, total_medals INT, silver_medals INT)\n", + "Testing select query: SELECT SUM(silver_medals) AS total_silver_medals FROM country_medals WHERE rank = 14 AND total_medals < 1\n", "[(None,)]\n", "Testing create query: CREATE TABLE player_stats (player_id INT, tackles INT, fumble_recoveries INT, forced_fumbles INT)\n", "Testing select query: SELECT tackles FROM player_stats WHERE fumble_recoveries > 0 AND forced_fumbles = 0\n", "[]\n", - "Testing create query: CREATE TABLE player_stats (player_name VARCHAR(50), forced_fumbles INT, solo_tackles INT);\n", - "Testing select query: SELECT forced_fumbles FROM player_stats WHERE player_name = 'jim laney' AND solo_tackles < 2;\n", + "Testing create query: CREATE TABLE player_stats (player_name VARCHAR(50), solo_tackles INT, forced_fumbles INT)\n", + "Testing select query: SELECT forced_fumbles FROM player_stats WHERE player_name = 'Jim Laney' AND solo_tackles < 2\n", "[]\n", "Testing create query: CREATE TABLE player_stats (player_id INT, solo_tackles INT, total INT)\n", "Testing select query: SELECT MAX(total) AS high_total FROM player_stats WHERE solo_tackles > 15\n", "[(None,)]\n", - "Testing create query: CREATE TABLE fumble_stats (player_name VARCHAR(50), fumble_recoveries INT, forced_fumbles INT, sacks INT, solo_tackles INT)\n", - "Testing select query: SELECT fumble_recoveries FROM fumble_stats WHERE player_name = 'scott gajos' AND forced_fumbles = 0 AND sacks = 0 AND solo_tackles < 2\n", + "Testing create query: CREATE TABLE fumble_stats (player_name VARCHAR(50), fumble_recoveries INT, forced_fumbles INT, sacks INT, solo_tackles INT);\n", + "Testing select query: SELECT fumble_recoveries FROM fumble_stats WHERE player_name = 'Scott Gajos' AND forced_fumbles = 0 AND sacks = 0 AND solo_tackles < 2;\n", "[]\n", - "Testing create query: No table creation needed for this request\n", - "Error while creating the SQLite table: near \"No\": syntax error\n", - "Testing select query: SELECT Opponent FROM Matches WHERE Time = '20:00 GMT' AND Venue = 'Camp Nou'\n", - "Error while executing select query: no such table: Matches\n", + "Testing create query: CREATE TABLE matches (match_id INT, match_time TIME, stadium VARCHAR(50), opponent VARCHAR(50))\n", + "Testing select query: SELECT opponent FROM matches WHERE match_time = '20:00:00' AND stadium = 'Camp Nou' AND match_time AT TIME ZONE 'GMT' = '20:00:00'\n", + "Error while executing select query: near \"AT\": syntax error\n", "Testing create query: CREATE TABLE matches (match_id INT, match_date DATE, match_time TIME, home_team VARCHAR(50), away_team VARCHAR(50), home_score INT, away_score INT)\n", "Testing select query: SELECT match_time FROM matches WHERE home_score = 3 AND away_score = 2\n", "[]\n", - "Testing create query: CREATE TABLE grounds (ground_id INT, ground_name VARCHAR(50))\n", - "Testing select query: SELECT ground_name FROM grounds WHERE ground_id = (SELECT ground_id FROM matches WHERE home_team = 'Aston Villa' OR away_team = 'Aston Villa')\n", + "Testing create query: CREATE TABLE grounds (id INT, name VARCHAR(50))\n", + "Testing select query: SELECT name FROM grounds WHERE id = (SELECT ground_id FROM matches WHERE team = 'Aston Villa')\n", "Error while executing select query: no such table: matches\n", - "Testing create query: No table creation needed\n", - "Error while creating the SQLite table: near \"No\": syntax error\n", - "Testing select query: SELECT competition_type FROM competitions WHERE venue = 'San Siro' AND start_time = '18:30 GMT';\n", - "Error while executing select query: no such table: competitions\n", + "Testing create query: CREATE TABLE competitions (id INT, competition_type VARCHAR(50), venue VARCHAR(50), start_time TIME, timezone VARCHAR(10))\n", + "Testing select query: SELECT competition_type FROM competitions WHERE venue = 'San Siro' AND start_time = '18:30:00' AND timezone = 'GMT'\n", + "[]\n", "Testing create query: No table creation needed for this question\n", "Error while creating the SQLite table: near \"No\": syntax error\n", "Testing select query: SELECT COUNT(*) AS total_decile FROM schools WHERE locality = 'redwood' AND type = 'decile'\n", "Error while executing select query: no such table: schools\n", - "Testing create query: CREATE TABLE reports (report_id INT, report_name VARCHAR(50), circuit_name VARCHAR(50))\n", + "Testing create query: CREATE TABLE reports (id INT, report_name VARCHAR(255), circuit_name VARCHAR(255))\n", "Testing select query: SELECT * FROM reports WHERE circuit_name = 'Tripoli'\n", "[]\n" ] @@ -1493,7 +1439,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 35, "id": "04532d59", "metadata": {}, "outputs": [], @@ -1518,7 +1464,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 36, "id": "cbaa4bdf", "metadata": {}, "outputs": [ @@ -1526,12 +1472,12 @@ "data": { "text/plain": [ "unit_test_evaluation\n", - "SQL correct 43\n", - "SQL incorrect 7\n", + "SQL correct 46\n", + "SQL incorrect 4\n", "Name: count, dtype: int64" ] }, - "execution_count": 41, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -1542,7 +1488,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 37, "id": "1ada474e", "metadata": { "scrolled": true @@ -1552,14 +1498,13 @@ "data": { "text/plain": [ "evaluation_score\n", - "5 44\n", - "4 3\n", - "3 2\n", - "1 1\n", + "5 45\n", + "3 3\n", + "4 2\n", "Name: count, dtype: int64" ] }, - "execution_count": 42, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -1580,7 +1525,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 38, "id": "d277222d", "metadata": {}, "outputs": [], @@ -1594,7 +1539,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 39, "id": "6da35c99", "metadata": {}, "outputs": [], @@ -1604,7 +1549,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 40, "id": "4116cb37", "metadata": {}, "outputs": [ @@ -1687,10 +1632,10 @@ " \n", " 4\n", " What Tries against has a Losing bonus of 7?\n", - " {\\n \"create\": \"CREATE TABLE rugby_matches (...\n", + " {\\n \"create\": \"CREATE TABLE tries_against (...\n", " True\n", " True\n", - " 3\n", + " 5\n", " SQL correct\n", " 1\n", " gpt-4\n", @@ -1712,17 +1657,17 @@ "1 {\\n \"create\": \"No table creation needed for... True False \n", "2 {\\n \"create\": \"CREATE TABLE games (Played I... True True \n", "3 {\\n \"create\": \"CREATE TABLE losing_bonuses ... True True \n", - "4 {\\n \"create\": \"CREATE TABLE rugby_matches (... True True \n", + "4 {\\n \"create\": \"CREATE TABLE tries_against (... True True \n", "\n", " evaluation_score unit_test_evaluation run Evaluating Model \n", "0 5 SQL correct 1 gpt-4 \n", "1 5 SQL incorrect 1 gpt-4 \n", "2 5 SQL correct 1 gpt-4 \n", "3 5 SQL correct 1 gpt-4 \n", - "4 3 SQL correct 1 gpt-4 " + "4 5 SQL correct 1 gpt-4 " ] }, - "execution_count": 45, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -1733,7 +1678,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 41, "id": "ed800f0c", "metadata": {}, "outputs": [ @@ -1771,20 +1716,20 @@ " \n", " 1\n", " SQL correct\n", - " 43\n", + " 42\n", " \n", " \n", " SQL incorrect\n", - " 7\n", + " 8\n", " \n", " \n", " 2\n", " SQL correct\n", - " 43\n", + " 46\n", " \n", " \n", " SQL incorrect\n", - " 7\n", + " 4\n", " \n", " \n", "\n", @@ -1793,13 +1738,13 @@ "text/plain": [ " Number of records\n", "run unit_test_evaluation \n", - "1 SQL correct 43\n", - " SQL incorrect 7\n", - "2 SQL correct 43\n", - " SQL incorrect 7" + "1 SQL correct 42\n", + " SQL incorrect 8\n", + "2 SQL correct 46\n", + " SQL incorrect 4" ] }, - "execution_count": 46, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -1824,13 +1769,13 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 42, "id": "e2b4aa03-42f5-4c30-a610-e553937bf160", "metadata": {}, "outputs": [ { "data": { - "image/png": "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OXKkOnTooGeffVbnzp3Te++9p3r16mnXrl0KDAxUQkKCmjRpovj4ePXv31/BwcE6deqUvvvuO126dEkBAQGaP3++nn32WdWoUUO9e/eWJJUoUeK2y4+Li0v1Wq7AwEDlypVLHTt2VNeuXbVt2zY99NBD9uEnTpzQ5s2b9dZbb9nbZsyYoQoVKqhly5bKlSuXli1bphdeeEFJSUnq27dvhteR1aJFixQXF6c+ffooX7582rp1q9577z39+eefWrRokaR/fmE9ffq0Vq1apfnz5992nvv379cjjzwif39/DRs2TB4eHpo5c6YaNGigtWvX6uGHH3YYv3///rrvvvs0evRoHT9+XFOnTlW/fv305ZdfSvrnn7vGjRsrKChIL7/8sgIDA3X8+HEtWbLklnWkd13v379fTzzxhCpXrqzXXntNXl5e+v3331P9Rzotr7zyij755JNMP5r0yy+/6Ntvv7W/3+PGjdMTTzyhYcOGafr06XrhhRd08eJFTZw4UT169NDPP//sMP3FixfVvHlzdejQQZ07d9bChQvVp08feXp62kNmUlKSWrZsqfXr16t3794qV66c9u3bpylTpujw4cMprsv7+eeftXDhQvXr10/58+e/5VHcMWPGaOzYsQoLC1OfPn106NAhzZgxQ9u2bdOGDRvk4eGhqVOn6pNPPtHXX39tP/0pI9uA5DBw3333OdTarFkzVa9eXaNHj5abm5v9x4dffvnFfrTg9OnTqlGjhi5duqTevXurbNmyOnXqlBYvXqy4uDh5enrq7Nmzql27tuLi4jRgwADly5dP8+bNU8uWLbV48WK1adPGoZ7XX39dnp6eGjp0qOLj4+Xp6amVK1eqXbt2Kl++vMaNG6fz58+re/fuKlKkiMO0q1atUufOndWoUSNNmDBBknTgwAFt2LBBAwcOTPX1lytXTvPnz9fgwYNVpEgR++lvQUFBunr1qho0aKDff/9d/fr1U2hoqBYtWqTw8HBdunQpxTznzJmja9euqXfv3vLy8lLevHlvue6vX7+e6nbP19dXPj4+9td07Ngxde/eXcHBwdq/f78+/PBD7d+/X5s3b7b/SJCe9yLZ7bYdzkrtM+QsZ/eDQLYyAO7I6NGjjSRz7ty5VIdXqFDB1K9f3/589erVRpIpV66ciY+Pt7e/8847RpLZt2+fva1bt26mePHi9ufnzp0z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s7clJibqww8/vO0yjDGpdjOc/E/27daHu7u7GjdurG+++cahS+qzZ8/q888/V926dR1OPUyPixcvpng/k48MpPeUu1ut69SOJDgz/5u9+uqrun79uiZOnJhiWIkSJRQTE6O9e/fa26KiotLsBvpO3bhxQzNnzrQ/T0hI0MyZMxUUFKTq1atL+ucX/lOnTmnWrFkppr969aquXLmSoWWHhYXJ09NT7777rsP79/HHHysmJkaPP/54huabli5duqhIkSL23uCqV6+uEiVK6O2333a4CXWy5K6i3dzc1Lp1ay1btkzbt29PMV5y7c2bN9fWrVvtp25K/1zH9+GHHyokJOS212kVKlRIVatW1bx58xxOZV21alWK65lu7hbbzc3N3uNfRj6TzZs315kzZxx6fbtx44bee+89+fn52U+xzSqpbWukf24QbpXe9yKr3PwZkv75zm7evNmh+/HvvvsuxWnDwL2AI0nAHSpQoIBGjRqlV199VfXq1VPLli2VO3dubdy4UV988YUaN26sFi1aZMqyfHx8VL58eX355ZcqXbq08ubNq4oVK6b7nHSrEiVK6I033tCIESN0/PhxtW7dWnny5FFkZKS+/vpr9e7dW0OHDtXPP/+sfv36qX379ipdurRu3Lih+fPny93dXe3atbPPr3r16vrpp580efJkFS5cWKGhoakeHbDauXOnPv3001Rrq1Wrlv158+bNlSdPHg0dOjTFciWpcePG9l+Sn3vuOV2+fFmzZs1SgQIFbnu9S4UKFVSzZk2NGDFCFy5cUN68ebVgwYIUwbBs2bIqUaKEhg4dqlOnTsnf319fffVVqufOJ/9DPWDAADVp0kTu7u72X1pv9sYbb9jvO/TCCy8oV65cmjlzpuLj41MNDrczb948TZ8+XW3atFGJEiX0999/a9asWfL391fz5s1vO/3t1vVrr72mdevW6fHHH1fx4sUVHR2t6dOnq0iRIg4X6adX8tGk1E6L6tSpk4YPH642bdpowIABiouL04wZM1S6dGn7xeuZqXDhwpowYYKOHz+u0qVL68svv9Tu3bv14Ycf2m/s/Mwzz2jhwoV6/vnntXr1atWpU0eJiYk6ePCgFi5cqBUrVqR6Ef3tBAUFacSIERo7dqyaNm2qli1b6tChQ5o+fboeeuihTL/5qIeHhwYOHKiXXnpJy5cvV9OmTfXRRx+pWbNmqlChgrp37677779fp06d0urVq+Xv769ly5ZJkt58802tXLlS9evXt3eDHhUVpUWLFmn9+vUKDAzUyy+/rC+++ELNmjXTgAEDlDdvXs2bN0+RkZH66quv0nWj2HHjxunxxx9X3bp11aNHD124cEHvvfeeKlSo4BDknn32WV24cEENGzZUkSJFdOLECb333nuqWrWq/ToiZ/Tu3VszZ85UeHi4duzYoZCQEC1evFgbNmzQ1KlTHToByYhTp06lut3z8/NT69at5e/vr3r16mnixIm6fv267r//fq1cuVKRkZEppknPe5FVUvsMPfvss1q8eLGaNm2qDh066OjRo/r000/TdUsI4K6TvZ3pATnXp59+amrWrGl8fX2Nl5eXKVu2rBk7dqy5du2aw3ipdXVszP91Jztnzhx7W2pdIG/cuNFUr17deHp6OtUd+M1dgCf76quvTN26dY2vr6/x9fU1ZcuWNX379jWHDh0yxhhz7Ngx06NHD1OiRAnj7e1t8ubNax599FHz008/Oczn4MGDpl69esbHx8dIumV34LfrAjy1abt06WLvxjY13377ralcubLx9vY2ISEhZsKECWb27NmpdvVs7YrWGGOOHj1qwsLCjJeXlylYsKD573//a1atWpWiC/DffvvNhIWFGT8/P5M/f37Tq1cvs2fPnhTv240bN0z//v1NUFCQsdlsDt1Vp/ae7dy50zRp0sT4+fmZ3Llzm0cffdRs3LjRYZzkbnxv7ur35q7Kd+7caTp37myKFStmvLy8TIECBcwTTzxhtm/fnup6S82t1nVERIRp1aqVKVy4sPH09DSFCxc2nTt3NocPH77tfFPrbtkYY44cOWLc3d1T/V6sXLnSVKxY0Xh6epoyZcqYTz/9NM0uwPv27evQlvw5e+uttxzaU/sO1q9f31SoUMFs377d1KpVy3h7e5vixYub999/P0W9CQkJZsKECaZChQrGy8vL3HfffaZ69epm7NixJiYm5pY13c77779vypYtazw8PEzBggVNnz59zMWLFx3GyUgX4KmNGxMTYwICAhy+D7t27TJt27Y1+fLlM15eXqZ48eKmQ4cOJiIiwmHaEydOmK5du5qgoCDj5eVlHnjgAdO3b1+H7pyPHj1qnnzySRMYGGi8vb1NjRo1zHfffecwn7S2h8m++uorU65cOePl5WXKly9vlixZkmK7uHjxYtO4cWNToEAB4+npaYoVK2aee+45ExUVddv1k9Zn8uzZs6Z79+4mf/78xtPT01SqVMnhO25M2p+v2y0vre2e9TX9+eefpk2bNiYwMNAEBASY9u3bm9OnT6e6/bjde5HebUdanP0MTZo0ydx///3Gy8vL1KlTx2zfvj3NLsDTsx8EXMVmDFfHAQAAAEAyrkkCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIBFjr+ZbFJSkk6fPq08efLIZrO5uhwAAAAALmKM0d9//63ChQvf8sbWOT4knT59WkWLFnV1GQAAAADuEidPnlSRIkXSHJ7jQ1KePHkk/bMi/P39XVwNAAAAAFeJjY1V0aJF7RkhLTk+JCWfYufv709IAgAAAHDby3DouAEAAAAALAhJAAAAAGBBSAIAAAAAixx/TRIAAABwNzHG6MaNG0pMTHR1KTmOu7u7cuXKdce3/iEkAQAAANkkISFBUVFRiouLc3UpOVbu3LlVqFAheXp6ZngehCQAAAAgGyQlJSkyMlLu7u4qXLiwPD097/iIB/6PMUYJCQk6d+6cIiMjVapUqVveMPZWCEkAAABANkhISFBSUpKKFi2q3Llzu7qcHMnHx0ceHh46ceKEEhIS5O3tnaH50HEDAAAAkI0yenQD6ZMZ65d3CAAAAAAsCEkAAAAAYME1SQAAAICL2fYuy9blmcotsnV59xqOJAEAAAC4pfDwcNlsNtlsNnl4eCg0NFTDhg3TtWvXsnzZS5YsUePGjZUvXz7ZbDbt3r07y5dJSAIAAABwW02bNlVUVJSOHTumKVOmaObMmRo9enSWL/fKlSuqW7euJkyYkOXLSkZIAgAAAHBbXl5eCg4OVtGiRdW6dWuFhYVp1apV9uEhISGaOnWqwzRVq1bVmDFj7M9tNps++ugjtWnTRrlz51apUqX07bff3nK5zzzzjEaNGqWwsLDMfDm3REgCAAAA4JRff/1VGzdulKenp9PTjh07Vh06dNDevXvVvHlzdenSRRcuXMiCKjOOkAQAAADgtr777jv5+fnJ29tblSpVUnR0tF566SWn5xMeHq7OnTurZMmSevPNN3X58mVt3bo1CyrOOHq3AwAAAHBbjz76qGbMmKErV65oypQpypUrl9q1a+f0fCpXrmz/29fXV/7+/oqOjs7MUu8YR5IAAAAA3Javr69KliypKlWqaPbs2dqyZYs+/vhj+3A3NzcZYxymuX79eor5eHh4ODy32WxKSkrKmqIziJAEAAAAwClubm7673//q1dffVVXr16VJAUFBSkqKso+TmxsrCIjI11V4h3hdLtslt03CkMOVKWlqyvAPe7mX/kAAMiI9u3b66WXXtK0adM0dOhQNWzYUHPnzlWLFi0UGBioUaNGyd3d/Y6Xc+HCBf3xxx86ffq0JOnQoUOSpODgYAUHB9/x/FNDSAIAAABczFRu4eoSnJYrVy7169dPEydOVJ8+fTRixAhFRkbqiSeeUEBAgF5//fVMOZL07bffqnv37vbnnTp1kiSNHj3aoXvxzGQzOfwnxdjYWAUEBCgmJkb+/v6uLocjSbhzHEnCHcrhm30AuGtdu3ZNkZGRCg0Nlbe3t6vLybFutZ7Tmw24JgkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAscrm6AAAAAODfzmazZevyjDHZurx7DUeSAAAAANxSeHi4bDabbDabPDw8FBoaqmHDhunatWtZutzr169r+PDhqlSpknx9fVW4cGF17dpVp0+fztLlEpIAAAAA3FbTpk0VFRWlY8eOacqUKZo5c6ZGjx6dpcuMi4vTzp07NXLkSO3cuVNLlizRoUOH1LJlyyxdLiEJAAAAwG15eXkpODhYRYsWVevWrRUWFqZVq1bZh4eEhGjq1KkO01StWlVjxoyxP7fZbProo4/Upk0b5c6dW6VKldK3336b5jIDAgK0atUqdejQQWXKlFHNmjX1/vvva8eOHfrjjz8y+yXaEZIAAAAAOOXXX3/Vxo0b5enp6fS0Y8eOVYcOHbR37141b95cXbp00YULF9I9fUxMjGw2mwIDA51ednoRkgAAAADc1nfffSc/Pz95e3urUqVKio6O1ksvveT0fMLDw9W5c2eVLFlSb775pi5fvqytW7ema9pr165p+PDh6ty5s/z9/Z1ednrRux0AAACA23r00Uc1Y8YMXblyRVOmTFGuXLnUrl07p+dTuXJl+9++vr7y9/dXdHT0bae7fv26OnToIGOMZsyY4fRyncGRJAAAAAC35evrq5IlS6pKlSqaPXu2tmzZoo8//tg+3M3NLUXX4tevX08xHw8PD4fnNptNSUlJt1x2ckA6ceKEVq1alaVHkSRCEgAAAAAnubm56b///a9effVVXb16VZIUFBSkqKgo+zixsbGKjIy842UlB6QjR47op59+Ur58+e54nrdDSAIAAADgtPbt28vd3V3Tpk2TJDVs2FDz58/XL7/8on379qlbt25yd3e/o2Vcv35dTz75pLZv367PPvtMiYmJOnPmjM6cOaOEhITMeBmp4pokAAAAwMVuPk3tXpArVy7169dPEydOVJ8+fTRixAhFRkbqiSeeUEBAgF5//fU7PpJ06tQpexfhVatWdRi2evVqNWjQ4I7mnxabuRffESfExsYqICBAMTExWX7uYnrY9i5zdQm411XJ2punIefL4Zt9ALhrXbt2TZGRkQoNDZW3t7ery8mxbrWe05sNON0OAAAAACwISQAAAABgQUgCAAAAAIu7JiSNHz9eNptNgwYNsrddu3ZNffv2Vb58+eTn56d27drp7NmzrisSAAAAQI53V4Skbdu2aebMmQ5335WkwYMHa9myZVq0aJHWrl2r06dPq23bti6qEgAAALhzdKCTtTJj/bo8JF2+fFldunTRrFmzdN9999nbY2Ji9PHHH2vy5Mlq2LChqlevrjlz5mjjxo3avHlzmvOLj49XbGyswwMAAABwNQ8PD0lSXFyciyvJ2ZLXb/L6zgiX3yepb9++evzxxxUWFqY33njD3r5jxw5dv35dYWFh9rayZcuqWLFi2rRpk2rWrJnq/MaNG6exY8dmed0AAACAM9zd3RUYGKjo6GhJUu7cuWWz2VxcVc5hjFFcXJyio6MVGBh4RzeydWlIWrBggXbu3Klt27alGHbmzBl5enoqMDDQob1gwYI6c+ZMmvMcMWKEhgwZYn8eGxurokWLZlrNAAAAQEYFBwdLkj0oIfMFBgba13NGuSwknTx5UgMHDtSqVasy9WZaXl5e8vLyyrT5AQAAAJnFZrOpUKFCKlCggK5fv+7qcnIcDw+POzqClMxlIWnHjh2Kjo5WtWrV7G2JiYlat26d3n//fa1YsUIJCQm6dOmSw9Gks2fP3nEyBAAAAFzJ3d09U/6ZR9ZwWUhq1KiR9u3b59DWvXt3lS1bVsOHD1fRokXl4eGhiIgItWvXTpJ06NAh/fHHH6pVq5YrSgYAAADwL+CykJQnTx5VrFjRoc3X11f58uWzt/fs2VNDhgxR3rx55e/vr/79+6tWrVppdtoAAAAAAHfK5b3b3cqUKVPk5uamdu3aKT4+Xk2aNNH06dNdXRYAAACAHMxmcvjdrGJjYxUQEKCYmBj5+/u7uhzZ9i5zdQm411Vp6eoKcI/L4Zt9AADSlN5s4PKbyQIAAADA3YSQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALBwaUiaMWOGKleuLH9/f/n7+6tWrVr68ccf7cOvXbumvn37Kl++fPLz81O7du109uxZF1YMAAAAIKdzaUgqUqSIxo8frx07dmj79u1q2LChWrVqpf3790uSBg8erGXLlmnRokVau3atTp8+rbZt27qyZAAAAAA5nM0YY1xdhFXevHn11ltv6cknn1RQUJA+//xzPfnkk5KkgwcPqly5ctq0aZNq1qyZrvnFxsYqICBAMTEx8vf3z8rS08W2d5mrS8C9rkpLV1eAe9xdttkHACDbpDcb3DXXJCUmJmrBggW6cuWKatWqpR07duj69esKCwuzj1O2bFkVK1ZMmzZtSnM+8fHxio2NdXgAAAAAQHq5PCTt27dPfn5+8vLy0vPPP6+vv/5a5cuX15kzZ+Tp6anAwECH8QsWLKgzZ86kOb9x48YpICDA/ihatGgWvwIAAAAAOYnLQ1KZMmW0e/dubdmyRX369FG3bt3022+/ZXh+I0aMUExMjP1x8uTJTKwWAAAAQE6Xy9UFeHp6qmTJkpKk6tWra9u2bXrnnXfUsWNHJSQk6NKlSw5Hk86ePavg4OA05+fl5SUvL6+sLhsAAABADuXyI0k3S0pKUnx8vKpXry4PDw9FRETYhx06dEh//PGHatWq5cIKAQAAAORkLj2SNGLECDVr1kzFihXT33//rc8//1xr1qzRihUrFBAQoJ49e2rIkCHKmzev/P391b9/f9WqVSvdPdsBAAAAgLNcGpKio6PVtWtXRUVFKSAgQJUrV9aKFSv02GOPSZKmTJkiNzc3tWvXTvHx8WrSpImmT5/uypIBAAAA5HB33X2SMhv3SUKOw32ScIdy+GYfAIA03XP3SQIAAACAuwEhCQAAAAAsCEkAAAAAYEFIAgAAAAALp0PS1atXFRcXZ39+4sQJTZ06VStXrszUwgAAAADAFZwOSa1atdInn3wiSbp06ZIefvhhTZo0Sa1atdKMGTMyvUAAAAAAyE5Oh6SdO3fqkUcekSQtXrxYBQsW1IkTJ/TJJ5/o3XffzfQCAQAAACA7OR2S4uLilCdPHknSypUr1bZtW7m5ualmzZo6ceJEphcIAAAAANnJ6ZBUsmRJLV26VCdPntSKFSvUuHFjSVJ0dPRdcbNWAAAAALgTToekUaNGaejQoQoJCdHDDz+sWrVqSfrnqNKDDz6Y6QUCAAAAQHbK5ewETz75pOrWrauoqChVqVLF3t6oUSO1adMmU4sDAAAAgOzmdEiSpODgYAUHBzu01ahRI1MKAgAAAABXSldIatu2bbpnuGTJkgwXAwAAAACulq5rkgICAuwPf39/RUREaPv27fbhO3bsUEREhAICArKsUAAAAADIDuk6kjRnzhz738OHD1eHDh30wQcfyN3dXZKUmJioF154gd7tAAAAANzznO7dbvbs2Ro6dKg9IEmSu7u7hgwZotmzZ2dqcQAAAACQ3ZwOSTdu3NDBgwdTtB88eFBJSUmZUhQAAAAAuIrTvdt1795dPXv21NGjR+092m3ZskXjx49X9+7dM71AAAAAAMhOToekt99+W8HBwZo0aZKioqIkSYUKFdJLL72kF198MdMLBAAAAIDs5FRIunHjhj7//HN169ZNw4YNU2xsrCTRYQMAAACAHMOpa5Jy5cql559/XteuXZP0TzgiIAEAAADISZzuuKFGjRratWtXVtQCAAAAAC7n9DVJL7zwgl588UX9+eefql69unx9fR2GV65cOdOKAwAAAIDs5nRI6tSpkyRpwIAB9jabzSZjjGw2mxITEzOvOgAAAADIZk6HpMjIyKyoAwAAAADuCk6HpOLFi2dFHQAAAABwV3A6JEnS0aNHNXXqVB04cECSVL58eQ0cOFAlSpTI1OIAAAAAILs53bvdihUrVL58eW3dulWVK1dW5cqVtWXLFlWoUEGrVq3KihoBAAAAINs4fSTp5Zdf1uDBgzV+/PgU7cOHD9djjz2WacUBAAAAQHZz+kjSgQMH1LNnzxTtPXr00G+//ZYpRQEAAACAqzgdkoKCgrR79+4U7bt371aBAgUyoyYAAAAAcBmnT7fr1auXevfurWPHjql27dqSpA0bNmjChAkaMmRIphcIAAAAANnJ6ZA0cuRI5cmTR5MmTdKIESMkSYULF9aYMWMcbjALAAAAAPcimzHGZHTiv//+W5KUJ0+eTCsos8XGxiogIEAxMTHy9/d3dTmy7V3m6hJwr6vS0tUV4B53B5t9AADuaenNBk4fSYqMjNSNGzdUqlQph3B05MgReXh4KCQkJEMFAwAAAMDdwOmOG8LDw7Vx48YU7Vu2bFF4eHhm1AQAAAAALuN0SNq1a5fq1KmTor1mzZqp9noHAAAAAPcSp0OSzWazX4tkFRMTo8TExEwpCgAAAABcxemQVK9ePY0bN84hECUmJmrcuHGqW7duphYHAAAAANnN6Y4bJkyYoHr16qlMmTJ65JFHJEm//PKLYmNj9fPPP2d6gQAAAACQnZw+klS+fHnt3btXHTp0UHR0tP7++2917dpVBw8eVMWKFbOiRgAAAADINk4fSZL+uXnsm2++mdm1AAAAAIDLOX0kSfrn9Lqnn35atWvX1qlTpyRJ8+fP1/r16zO1OAAAAADIbk6HpK+++kpNmjSRj4+Pdu7cqfj4eEn/9G7H0SUAAAAA9zqnQ9Ibb7yhDz74QLNmzZKHh4e9vU6dOtq5c2emFgcAAAAA2c3pkHTo0CHVq1cvRXtAQIAuXbqUGTUBAAAAgMs4HZKCg4P1+++/p2hfv369HnjggUwpCgAAAABcxemQ1KtXLw0cOFBbtmyRzWbT6dOn9dlnn2no0KHq06dPVtQIAAAAANnG6S7AX375ZSUlJalRo0aKi4tTvXr15OXlpaFDh6p///5ZUSMAAAAAZBubMcZkZMKEhAT9/vvvunz5ssqXLy8/Pz9dvXpVPj4+mV3jHYmNjVVAQIBiYmLk7+/v6nJk27vM1SXgXlelpasrwD0ug5t9AADueenNBhm6T5IkeXp6qnz58qpRo4Y8PDw0efJkhYaGZnR2AAAAAHBXSHdIio+P14gRI/Sf//xHtWvX1tKlSyVJc+bMUWhoqKZMmaLBgwdnVZ0AAAAAkC3SfU3SqFGjNHPmTIWFhWnjxo1q3769unfvrs2bN2vy5Mlq37693N3ds7JWAAAAAMhy6Q5JixYt0ieffKKWLVvq119/VeXKlXXjxg3t2bNHNpstK2sEAAAAgGyT7tPt/vzzT1WvXl2SVLFiRXl5eWnw4MEEJAAAAAA5SrpDUmJiojw9Pe3Pc+XKJT8/vywpCgAAAABcJd2n2xljFB4eLi8vL0nStWvX9Pzzz8vX19dhvCVLlmRuhQAAAACQjdIdkrp16+bw/Omnn870YgAAAADA1dIdkubMmZOVdQAAAADAXSHDN5MFAAAAgJyIkAQAAAAAFoQkAAAAALAgJAEAAACARbpCUrVq1XTx4kVJ0muvvaa4uLgsLQoAAAAAXCVdIenAgQO6cuWKJGns2LG6fPlylhYFAAAAAK6Sri7Aq1atqu7du6tu3boyxujtt9+Wn59fquOOGjUqUwsEAAAAgOyUrpA0d+5cjR49Wt99951sNpt+/PFH5cqVclKbzUZIAgAAAHBPS1dIKlOmjBYsWCBJcnNzU0REhAoUKJClhQEAAACAK6QrJFklJSVlRR0AAAAAcFdwOiRJ0tGjRzV16lQdOHBAklS+fHkNHDhQJUqUyNTiAAAAACC7OX2fpBUrVqh8+fLaunWrKleurMqVK2vLli2qUKGCVq1alRU1AgAAAEC2cfpI0ssvv6zBgwdr/PjxKdqHDx+uxx57LNOKAwAAAIDs5vSRpAMHDqhnz54p2nv06KHffvstU4oCAAAAAFdxOiQFBQVp9+7dKdp3795Nj3cAAAAA7nlOn27Xq1cv9e7dW8eOHVPt2rUlSRs2bNCECRM0ZMiQTC8QAAAAALKT0yFp5MiRypMnjyZNmqQRI0ZIkgoXLqwxY8ZowIABmV4gAAAAAGQnmzHGZHTiv//+W5KUJ0+eTCsos8XGxiogIEAxMTHy9/d3dTmy7V3m6hJwr6vS0tUV4B53B5t9AADuaenNBhm6T1KyuzkcAQAAAEBGON1xAwAAAADkZIQkAAAAALAgJAEAAACAhVMh6fr162rUqJGOHDmSVfUAAAAAgEs5FZI8PDy0d+/erKoFAAAAAFzO6dPtnn76aX388cdZUQsAAAAAuJzTXYDfuHFDs2fP1k8//aTq1avL19fXYfjkyZMzrTgAAAAAyG5Oh6Rff/1V1apVkyQdPnzYYZjNZsucqgAAAADARZwOSatXr86KOgAAAADgrpDhLsB///13rVixQlevXpUkGWMyrSgAAAAAcBWnQ9L58+fVqFEjlS5dWs2bN1dUVJQkqWfPnnrxxRczvUAAAAAAyE5Oh6TBgwfLw8NDf/zxh3Lnzm1v79ixo5YvX56pxQEAAABAdnP6mqSVK1dqxYoVKlKkiEN7qVKldOLEiUwrDAAAAABcwekjSVeuXHE4gpTswoUL8vLycmpe48aN00MPPaQ8efKoQIECat26tQ4dOuQwzrVr19S3b1/ly5dPfn5+ateunc6ePets2QAAAACQLk6HpEceeUSffPKJ/bnNZlNSUpImTpyoRx991Kl5rV27Vn379tXmzZu1atUqXb9+XY0bN9aVK1fs4wwePFjLli3TokWLtHbtWp0+fVpt27Z1tmwAAAAASBebcbJbul9//VWNGjVStWrV9PPPP6tly5bav3+/Lly4oA0bNqhEiRIZLubcuXMqUKCA1q5dq3r16ikmJkZBQUH6/PPP9eSTT0qSDh48qHLlymnTpk2qWbPmbecZGxurgIAAxcTEyN/fP8O1ZRbb3mWuLgH3uiotXV0B7nH0RgoA+LdKbzZw+khSxYoVdfjwYdWtW1etWrXSlStX1LZtW+3ateuOApIkxcTESJLy5s0rSdqxY4euX7+usLAw+zhly5ZVsWLFtGnTplTnER8fr9jYWIcHAAAAAKSX0x03SFJAQIBeeeWVTC0kKSlJgwYNUp06dVSxYkVJ0pkzZ+Tp6anAwECHcQsWLKgzZ86kOp9x48Zp7NixmVobAAAAgH+PDIWkixcv6uOPP9aBAwckSeXLl1f37t3tR4Ayom/fvvr111+1fv36DM9DkkaMGKEhQ4bYn8fGxqpo0aJ3NE8AAAAA/x5On263bt06hYSE6N1339XFixd18eJFvfvuuwoNDdW6desyVES/fv303XffafXq1Q5diwcHByshIUGXLl1yGP/s2bMKDg5OdV5eXl7y9/d3eAAAAABAejkdkvr27auOHTsqMjJSS5Ys0ZIlS3Ts2DF16tRJffv2dWpexhj169dPX3/9tX7++WeFhoY6DK9evbo8PDwUERFhbzt06JD++OMP1apVy9nSAQAAAOC2nD7d7vfff9fixYvl7u5ub3N3d9eQIUMcugZPj759++rzzz/XN998ozx58tivMwoICJCPj48CAgLUs2dPDRkyRHnz5pW/v7/69++vWrVqpatnOwAAAABwltMhqVq1ajpw4IDKlCnj0H7gwAFVqVLFqXnNmDFDktSgQQOH9jlz5ig8PFySNGXKFLm5ualdu3aKj49XkyZNNH36dGfLBgAAAIB0SVdI2rt3r/3vAQMGaODAgfr999/tR3M2b96sadOmafz48U4tPD336vD29ta0adM0bdo0p+YNAAAAABmRrpvJurm5yWaz3TbU2Gw2JSYmZlpxmYGbySLH4WayuEPcTBYA8G+V3myQriNJkZGRmVYYAAAAANzN0hWSihcvntV1AAAAAMBdIUM3kz19+rTWr1+v6OhoJSUlOQwbMGBAphQGAAAAAK7gdEiaO3eunnvuOXl6eipfvnyy2Wz2YTabjZAEAAAA4J7mdEgaOXKkRo0apREjRsjNzel70QIAAADAXc3plBMXF6dOnToRkAAAAADkSE4nnZ49e2rRokVZUQsAAAAAuJzTp9uNGzdOTzzxhJYvX65KlSrJw8PDYfjkyZMzrTgAAAAAyG4ZCkkrVqxQmTJlJClFxw0AAAAAcC9zOiRNmjRJs2fPVnh4eBaUAwAAAACu5fQ1SV5eXqpTp05W1AIAAAAALud0SBo4cKDee++9rKgFAAAAAFzO6dPttm7dqp9//lnfffedKlSokKLjhiVLlmRacQAAAACQ3ZwOSYGBgWrbtm1W1AIAAAAALud0SJozZ05W1AEAAAAAdwWnr0kCAAAAgJzM6SNJoaGht7wf0rFjx+6oIAAAAABwJadD0qBBgxyeX79+Xbt27dLy5cv10ksvZVZdAAAAAOASToekgQMHpto+bdo0bd++/Y4LAgAAAABXyrRrkpo1a6avvvoqs2YHAAAAAC6RaSFp8eLFyps3b2bNDgAAAABcwunT7R588EGHjhuMMTpz5ozOnTun6dOnZ2pxAAAAAJDdnA5JrVu3dnju5uamoKAgNWjQQGXLls2sugAAAADAJZwOSaNHj86KOgAAAADgrsDNZAEAAADAIt1Hktzc3G55E1lJstlsunHjxh0XBQAAAACuku6Q9PXXX6c5bNOmTXr33XeVlJSUKUUBAAAAgKukOyS1atUqRduhQ4f08ssva9myZerSpYtee+21TC0OAAAAALJbhq5JOn36tHr16qVKlSrpxo0b2r17t+bNm6fixYtndn0AAAAAkK2cCkkxMTEaPny4SpYsqf379ysiIkLLli1TxYoVs6o+AAAAAMhW6T7dbuLEiZowYYKCg4P1xRdfpHr6HQAAAADc62zGGJOeEd3c3OTj46OwsDC5u7unOd6SJUsyrbjMEBsbq4CAAMXExMjf39/V5ci2d5mrS8C9rkpLV1eAe1w6N/sAAOQ46c0G6T6S1LVr19t2AQ4AAAAA97p0h6S5c+dmYRkAAAAAcHfIUO92AAAAAJBTEZIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFi4NCStW7dOLVq0UOHChWWz2bR06VKH4cYYjRo1SoUKFZKPj4/CwsJ05MgR1xQLAAAA4F/BpSHpypUrqlKliqZNm5bq8IkTJ+rdd9/VBx98oC1btsjX11dNmjTRtWvXsrlSAAAAAP8WuVy58GbNmqlZs2apDjPGaOrUqXr11VfVqlUrSdInn3yiggULaunSperUqVOq08XHxys+Pt7+PDY2NvMLBwAAAJBj3bXXJEVGRurMmTMKCwuztwUEBOjhhx/Wpk2b0pxu3LhxCggIsD+KFi2aHeUCAAAAyCHu2pB05swZSVLBggUd2gsWLGgflpoRI0YoJibG/jh58mSW1gkAAAAgZ3Hp6XZZwcvLS15eXq4uAwAAAMA96q49khQcHCxJOnv2rEP72bNn7cMAAAAAILPdtSEpNDRUwcHBioiIsLfFxsZqy5YtqlWrlgsrAwAAAJCTufR0u8uXL+v333+3P4+MjNTu3buVN29eFStWTIMGDdIbb7yhUqVKKTQ0VCNHjlThwoXVunVr1xUNAAAAIEdzaUjavn27Hn30UfvzIUOGSJK6deumuXPnatiwYbpy5Yp69+6tS5cuqW7dulq+fLm8vb1dVTIAAACAHM5mjDGuLiIrxcbGKiAgQDExMfL393d1ObLtXebqEnCvq9LS1RXgHpfDN/sAAKQpvdngrr0mCQAAAABcgZAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAi1yuLgAAAGQt295lri4B97oqLV1dAe5xxhhXl+AUjiQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBxT4SkadOmKSQkRN7e3nr44Ye1detWV5cEAAAAIIe660PSl19+qSFDhmj06NHauXOnqlSpoiZNmig6OtrVpQEAAADIge76kDR58mT16tVL3bt3V/ny5fXBBx8od+7cmj17tqtLAwAAAJAD5XJ1AbeSkJCgHTt2aMSIEfY2Nzc3hYWFadOmTalOEx8fr/j4ePvzmJgYSVJsbGzWFptel+NcXQGAf7m7ZnuI7MO+B4CL3S37nuQ6jDG3HO+uDkl//fWXEhMTVbBgQYf2ggUL6uDBg6lOM27cOI0dOzZFe9GiRbOkRgC41wQEBLi6BADAv8zdtu/5+++/b1nTXR2SMmLEiBEaMmSI/XlSUpIuXLigfPnyyWazubAy4M7FxsaqaNGiOnnypPz9/V1dDgDgX4B9D3ISY4z+/vtvFS5c+Jbj3dUhKX/+/HJ3d9fZs2cd2s+ePavg4OBUp/Hy8pKXl5dDW2BgYFaVCLiEv78/OyoAQLZi34OcIj1Hte7qjhs8PT1VvXp1RURE2NuSkpIUERGhWrVqubAyAAAAADnVXX0kSZKGDBmibt266T//+Y9q1KihqVOn6sqVK+revburSwMAAACQA931Ialjx446d+6cRo0apTNnzqhq1apavnx5is4cgH8DLy8vjR49OsUppQAAZBX2Pfg3spnb9X8HAAAAAP8id/U1SQAAAACQ3QhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAP4lbDabli5d6uoygLseIQlIxblz59SnTx8VK1ZMXl5eCg4OVpMmTbRhwwaH8TZu3KjmzZvrvvvuk7e3typVqqTJkycrMTHRYbycvFNq0KCBBg0a5OoyAOCe4Or9S1RUlJo1a5YZL+Wuc/z4cdlsNu3evdvVpSAHuOvvkwS4Qrt27ZSQkKB58+bpgQce0NmzZxUREaHz58/bx/n666/VoUMHde/eXatXr1ZgYKB++uknDRs2TJs2bdLChQtls9lc+Cr+T0JCgjw9PR3aEhMTZbPZ5ObGbyUAkF1cvX8JDg7OrJeSIcYYJSYmKlcux39BU9tPAS5lADi4ePGikWTWrFmT5jiXL182+fLlM23btk0x7NtvvzWSzIIFC+xtkszXX3/tVA29e/c2BQoUMF5eXqZChQpm2bJl9uGLFy825cuXN56enqZ48eLm7bffdpi+ePHi5rXXXjPPPPOMyZMnj+nWrZuZM2eOCQgIMN98840pV66ccXd3N5GRkebatWvmxRdfNIULFza5c+c2NWrUMKtXr3aY3/r16039+vWNj4+PCQwMNI0bNzYXLlww3bp1M5IcHpGRkel+nQDwb3I37F+s40dGRhpJ5quvvjINGjQwPj4+pnLlymbjxo0O06S1DzDGmGvXrpn+/fuboKAg4+XlZerUqWO2bt1qn3b16tVGkvnhhx9MtWrVjIeHh1m9erWpX7++6du3rxk4cKDJly+fadCggTHGmH379pmmTZsaX19fU6BAAfP000+bc+fO2eeXmJhoJkyYYEqUKGE8PT1N0aJFzRtvvGF/bdZH/fr1071egJvxEzJwEz8/P/n5+Wnp0qWKj49PdZyVK1fq/PnzGjp0aIphLVq0UOnSpfXFF19kaPlJSUlq1qyZNmzYoE8//VS//fabxo8fL3d3d0nSjh071KFDB3Xq1En79u3TmDFjNHLkSM2dO9dhPm+//baqVKmiXbt2aeTIkZKkuLg4TZgwQR999JH279+vAgUKqF+/ftq0aZMWLFigvXv3qn379mratKmOHDkiSdq9e7caNWqk8uXLa9OmTVq/fr1atGihxMREvfPOO6pVq5Z69eqlqKgoRUVFqWjRohl63QCQ07l6/5KWV155RUOHDtXu3btVunRpde7cWTdu3JB0632AJA0bNkxfffWV5s2bp507d6pkyZJq0qSJLly44LCMl19+WePHj9eBAwdUuXJlSdK8efPk6empDRs26IMPPtClS5fUsGFDPfjgg9q+fbuWL1+us2fPqkOHDvb5jBgxQuPHj9fIkSP122+/6fPPP1fBggUlSVu3bpUk/fTTT4qKitKSJUsydT3hX8bVKQ24Gy1evNjcd999xtvb29SuXduMGDHC7Nmzxz58/PjxRpK5ePFiqtO3bNnSlCtXzv5cTvzSt2LFCuPm5mYOHTqU6vCnnnrKPPbYYw5tL730kilfvrz9efHixU3r1q0dxpkzZ46RZHbv3m1vO3HihHF3dzenTp1yGLdRo0ZmxIgRxhhjOnfubOrUqZNmvfXr1zcDBw5M12sDgH87V+5fbh4/+UjSRx99ZB++f/9+I8kcOHDAGHPrfcDly5eNh4eH+eyzz+xtCQkJpnDhwmbixInGmP87krR06VKHaevXr28efPBBh7bXX3/dNG7c2KHt5MmTRpI5dOiQiY2NNV5eXmbWrFmp1pP8enbt2nX7FQHcBkeSgFS0a9dOp0+f1rfffqumTZtqzZo1qlatWoqjNcaYNOeR0XOrd+/erSJFiqh06dKpDj9w4IDq1Knj0FanTh0dOXLE4YLe//znP6nWlPwLniTt27dPiYmJKl26tP0XTj8/P61du1ZHjx6119OoUaMMvRYAgCNX7l/SYt0vFCpUSJIUHR0t6db7gKNHj+r69esO+yQPDw/VqFFDBw4ccBg3tX1S9erVHZ7v2bNHq1evdtgflS1b1r6sAwcOKD4+nn0SsgUdNwBp8Pb21mOPPabHHntMI0eO1LPPPqvRo0crPDxcpUqVkvRPYKldu3aKaQ8cOKCqVatmaLk+Pj53Uradr69vqvO2Xux7+fJlubu7a8eOHfbT+ZL5+fllaj0AgH+4av+SFg8PD/vfyfuIpKQkSVm7T7q57fLly2rRooUmTJiQYtxChQrp2LFjmVILkB4cSQLSqXz58rpy5YokqUmTJsqbN68mTZqUYrxvv/1WR44cUXh4eIaWU7lyZf355586fPhwqsPLlSuXoqvYDRs2qHTp0imCzu08+OCDSkxMVHR0tEqWLOnwSO4BqXLlyoqIiEhzHp6enim6pAUApF927V8y4lb7gBIlStivKUp2/fp1bdu2TeXLl3d6WdWqVdP+/fsVEhKSYp/k6+urUqVKycfHJ816ko+wsU9CZiAkATc5f/68GjZsqE8//VR79+5VZGSkFi1apIkTJ6pVq1aS/vn1a+bMmfrmm2/Uu3dv7d27V8ePH9fHH3+s8PBw9erVS82bN3eYb2RkpHbv3u3wSN4pWtWvX1/16tVTu3bttGrVKkVGRurHH3/U8uXLJUkvvviiIiIi9Prrr+vw4cOaN2+e3n///VQv8r2d0qVLq0uXLuratauWLFmiyMhIbd26VePGjdP3338v6Z+LZLdt26YXXnhBe/fu1cGDBzVjxgz99ddfkqSQkBBt2bJFx48f119//WX/9REA4MjV+5eMuNU+wNfXV3369NFLL72k5cuX67ffflOvXr0UFxennj17Or2svn376sKFC+rcubO2bdumo0ePasWKFerevbsSExPl7e2t4cOHa9iwYfrkk0909OhRbd68WR9//LEkqUCBAvLx8bF3+BATE5Mp6wD/Uq6+KAq421y7ds28/PLLplq1aiYgIMDkzp3blClTxrz66qsmLi7OYdx169aZJk2aGH9/f3uXoxMmTEgxT93ULWny45dffkm1hvPnz5vu3bubfPnyGW9vb1OxYkXz3Xff2YcndwHu4eFhihUrZt566y2H6YsXL26mTJni0JbcBfjNEhISzKhRo0xISIjx8PAwhQoVMm3atDF79+61j7NmzRpTu3Zt4+XlZQIDA02TJk3sFxUfOnTI1KxZ0/j4+NAFOADcwt2wf1EqHTdYOzpI7qbceiuIW+0Drl69avr372/y589/yy7Ab+6IIq1Ofw4fPmzatGljAgMDjY+PjylbtqwZNGiQSUpKMsb80wX4G2+8YYoXL27fB7755pv26WfNmmWKFi1q3Nzc6AIcd8RmzC2uDASQbteuXVOrVq108uRJrV27VkFBQa4uCQCQA7B/AbIfIQnIRNeuXdPUqVNVqlQptWvXztXlAAByCPYvQPYiJAEAAACABR03AAAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAA6RISEqKpU6e6uoy7Unatm+PHj8tms2n37t1ZviwA+DcjJAFADtagQQMNGjQoRfvcuXMVGBjo1Ly2bdum3r1725/bbDYtXbo0zfHnzp0rm812y8fx48edqsHZ+tOqwdvbO0PLzU7h4eFq3bq1Q1vRokUVFRWlihUruqYoAPiXyOXqAgAA94agoCCnxu/YsaOaNm1qf962bVtVrFhRr732WobnmRH+/v46dOiQQ5vNZsvy5WYFd3d3BQcHu7oMAMjxOJIEALAftXj77bdVqFAh5cuXT3379tX169ft41hPKQsJCZEktWnTRjabzf7cysfHR8HBwfaHp6encufObX/u7e2t5557TkFBQfL391fDhg21Z88e+/R79uzRo48+qjx58sjf31/Vq1fX9u3btWbNGnXv3l0xMTH2I0NjxoxJ87XZbDaHOoKDg1WwYEFJ0ocffqjChQsrKSnJYZpWrVqpR48ekqSjR4+qVatWKliwoPz8/PTQQw/pp59+SnN5qZ0Sd+nSJdlsNq1Zs0aSlJiYqJ49eyo0NFQ+Pj4qU6aM3nnnHfv4Y8aM0bx58/TNN9/YX+OaNWtSnffatWtVo0YNeXl5qVChQnr55Zd148YN+/AGDRpowIABGjZsmPLmzavg4OBbri8AACEJAPD/rV69WkePHtXq1as1b948zZ07V3Pnzk113G3btkmS5syZo6ioKPtzZ7Rv317R0dH68ccftWPHDlWrVk2NGjXShQsXJEldunRRkSJFtG3bNu3YsUMvv/yyPDw8VLt2bU2dOlX+/v6KiopSVFSUhg4dmqHX3L59e50/f16rV6+2t124cEHLly9Xly5dJEmXL19W8+bNFRERoV27dqlp06Zq0aKF/vjjjwwtU5KSkpJUpEgRLVq0SL/99ptGjRql//73v1q4cKEkaejQoerQoYOaNm1qf421a9dOMZ9Tp06pefPmeuihh7Rnzx7NmDFDH3/8sd544w2H8ebNmydfX19t2bJFEydO1GuvvaZVq1ZluH4AyOk43Q4AIEm677779P7778vd3V1ly5bV448/roiICPXq1SvFuMmnyQUGBmbo9K/169dr69atio6OlpeXlyTp7bff1tKlS7V48WL17t1bf/zxh1566SWVLVtWklSqVCn79AEBAfYjRLcTExMjPz8/h7ZHHnlEP/74o+677z41a9ZMn3/+uRo1aiRJWrx4sfLnz69HH31UklSlShVVqVLFPu3rr7+ur7/+Wt9++6369evn9GuXJA8PD40dO9b+PDQ0VJs2bdLChQvVoUMH+fn5ycfHR/Hx8bd8jdOnT1fRokX1/vvvy2azqWzZsjp9+rSGDx+uUaNGyc3tn99CK1eurNGjR0v6Zz2+//77ioiI0GOPPZah+gEgpyMkAQAkSRUqVJC7u7v9eaFChbRv374sWdaePXt0+fJl5cuXz6H96tWrOnr0qCRpyJAhevbZZzV//nyFhYWpffv2KlGihNPLypMnj3bu3OnQ5uPjY/+7S5cu6tWrl6ZPny4vLy999tln6tSpkz1gXL58WWPGjNH333+vqKgo3bhxQ1evXr2jI0mSNG3aNM2ePVt//PGHrl69qoSEBFWtWtWpeRw4cEC1atVyuMaqTp06unz5sv78808VK1ZM0j8hyapQoUKKjo6+o/oBICcjJAFADubv76+YmJgU7ZcuXVJAQIBDm4eHh8Nzm82W4lqdzHL58mUVKlTIfo2OVXKvdWPGjNFTTz2l77//Xj/++KNGjx6tBQsWqE2bNk4ty83NTSVLlkxzeIsWLWSM0ffff6+HHnpIv/zyi6ZMmWIfPnToUK1atUpvv/22SpYsKR8fHz355JNKSEhIc3mSZIyxt1mv7ZKkBQsWaOjQoZo0aZJq1aqlPHny6K233tKWLVucem3plZ3vLQDkBIQkAMjBypQpo5UrV6Zo37lzp0qXLn1H8/bw8FBiYmKGpq1WrZrOnDmjXLlypdrpQ7LSpUurdOnSGjx4sDp37qw5c+aoTZs28vT0zPCyb+bt7a22bdvqs88+0++//64yZcqoWrVq9uEbNmxQeHi4PZxdvnz5ll2XJ5+KGBUVpQcffFCSUtzXaMOGDapdu7ZeeOEFe1vyEbRk6XmN5cqV01dffSVjjP1o0oYNG5QnTx4VKVLk1i8cAJAmOm4AgBysT58+Onz4sAYMGKC9e/fq0KFDmjx5sr744gu9+OKLdzTvkJAQRURE6MyZM7p48aJT04aFhalWrVpq3bq1Vq5cqePHj2vjxo165ZVXtH37dl29elX9+vXTmjVrdOLECW3YsEHbtm1TuXLl7Mu+fPmyIiIi9NdffykuLi7NZRljdObMmRQP65GULl266Pvvv9fs2bPtHTYkK1WqlJYsWaLdu3drz549euqpp255FMbHx0c1a9bU+PHjdeDAAa1du1avvvpqinlu375dK1as0OHDhzVy5MgUnV+EhITY37O//vorxdEoSXrhhRd08uRJ9e/fXwcPHtQ333yj0aNHa8iQIfYjWgAA57EFBYAc7IEHHtC6det08OBBhYWF6eGHH9bChQu1aNEih3sYZcSkSZO0atUqFS1a1H7EJL1sNpt++OEH1atXT927d1fp0qXVqVMnnThxQgULFpS7u7vOnz+vrl27qnTp0urQoYOaNWtm7+ygdu3aev7559WxY0cFBQVp4sSJaS4rNjZWhQoVSvGwXpPTsGFD5c2bV4cOHdJTTz3lMP3kyZN13333qXbt2mrRooWaNGnicKQpNbNnz9aNGzdUvXp1DRo0KEVvc88995zatm2rjh076uGHH9b58+cdjipJUq9evVSmTBn95z//UVBQkDZs2JBiOffff79++OEHbd26VVWqVNHzzz+vnj17pghlAADn2Iz1pGkAAAAA+JfjSBIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAW/w/d7DpFp2LlAwAAAABJRU5ErkJggg==", + "image/png": "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98CBAzVo0CAdPnxYtWvXliRt2rRJH3zwgcaPH58zVQIAAABALrEZY8zNRnJzc5PNZtPNRrXZbEpOTs624rJDXFycAgICFBsbK39/f1eXI9vupa4uAXe6ak+4ugLc4TKx2QcA4K6U2WyQqSNJUVFR2VYYAAAAANzOMhWSSpYsmdN1AAAAAMBtIUs3kz116pTWrVunmJgYpaSkOAwbOHBgpuczbtw4LV68WPv375ePj4/q1q2rCRMmqFy5cvZxrl69queff17z589XQkKCmjZtqmnTpqlw4cJZKR0AAAAAbsjpkDRnzhw9++yz8vT0VIECBWSz2ezDbDabUyFpzZo16tevnx544AElJSXppZdeUpMmTfT777/L19dXkjRkyBD98MMPWrhwoQICAtS/f3+1bdtW69evd7Z0AAAAALipTHXcYFW8eHE999xzGjlypNzcnO5B/IbOnj2rQoUKac2aNapfv75iY2MVFBSkL774Qk8++aQkaf/+/apQoYI2btxo713PKiEhQQkJCfbncXFxKl68OB034O5Bxw24RXTcAAD4t8psxw1Op5z4+Hh16tQp2wOSJMXGxkqS8ufPL0navn27rl27prCwMPs45cuXV4kSJbRx48Z05zFu3DgFBATYH8WLF8/2OgEAAADcvZxOOj179tTChQuzvZCUlBQNHjxY9erVU+XKlSVJp0+flqenpwIDAx3GLVy4sE6fPp3ufEaOHKnY2Fj748SJE9leKwAAAIC7l9PXJI0bN06PP/64li1bpipVqsjDw8Nh+OTJk7NUSL9+/fTbb79p3bp1WZo+lZeXl7y8vG5pHgAAAAD+vbIUkpYvX27vge76jhuyon///vr++++1du1aFStWzN4eHBysxMREXbx40eFo0pkzZxQcHJylZQEAAADAjTgdkiZNmqRZs2YpPDz8lhdujNGAAQP0zTffaPXq1QoNDXUYXrNmTXl4eCgiIkLt2rWTJB04cEB//PGH6tSpc8vLBwAAAIDrOR2SvLy8VK9evWxZeL9+/fTFF1/o22+/Vb58+ezXGQUEBMjHx0cBAQHq2bOnhg4dqvz588vf318DBgxQnTp10u3ZDgAAAABuldMdNwwaNEjvvfdetix8+vTpio2NVcOGDVWkSBH746uvvrKPM2XKFD3++ONq166d6tevr+DgYC1evDhblg8AAAAA13P6Pklt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", "text/plain": [ "
" ] @@ -1879,7 +1824,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 47, "id": "7228eac7-e0a9-473d-9432-e558bbc91841", "metadata": {}, "outputs": [ @@ -1915,34 +1860,34 @@ " \n", " \n", " \n", - " 1\n", - " 3\n", - " 3\n", + " 1\n", + " 1\n", + " 1\n", " \n", " \n", - " 4\n", + " 3\n", " 2\n", " \n", " \n", - " 5\n", - " 45\n", + " 4\n", + " 4\n", " \n", " \n", - " 2\n", - " 1\n", - " 1\n", + " 5\n", + " 43\n", " \n", " \n", + " 2\n", " 3\n", - " 2\n", + " 3\n", " \n", " \n", " 4\n", - " 3\n", + " 2\n", " \n", " \n", " 5\n", - " 44\n", + " 45\n", " \n", " \n", "\n", @@ -1951,16 +1896,16 @@ "text/plain": [ " Number of records\n", "run evaluation_score \n", - "1 3 3\n", - " 4 2\n", - " 5 45\n", - "2 1 1\n", + "1 1 1\n", " 3 2\n", - " 4 3\n", - " 5 44" + " 4 4\n", + " 5 43\n", + "2 3 3\n", + " 4 2\n", + " 5 45" ] }, - "execution_count": 53, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -1985,13 +1930,13 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 48, "id": "b2a18a78-55ec-43f6-9d62-929707a94364", "metadata": {}, "outputs": [ { "data": { - "image/png": "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9c6ZM0cRERF69tlnNX36dIWHh+uJJ57QrFmzHOvMnDlTJUuWVFRUlBYvXqzFixfrueeeu2qfCxcuVLdu3eTp6anJkyerf//+WrZsmerVq5fpB1RaWppatGihQoUKadq0aWrYsKGmT5+eaXToShEREZL+/qF04cKFa66blJSk+vXr67XXXtO9996rV155RY899pj27NmjI0eOSJIuXryoRo0aafHixerZs6deeuklBQcHq0+fPnrllVcy9blgwQK99tpreuSRRzR9+nSFhobq119/Va1atbR7926NHDlS06dPl7+/vzp06KDly5c7Hjtu3DiNHz9ejRs31uuvv67nnntOpUqVumaIqV69usqWLasPPvgg07IlS5aoYMGCjr8WP/bYY5ozZ446d+6s2bNna/jw4fLz89Pu3buv+TplKFOmjHr16qU333xTR48ezdZjsqt79+5KT0/XlClTVLNmTU2cOFEzZ85U8+bNdccdd2jq1KmKjIzU8OHDtXHjxkyPf+GFF/S///1PI0aM0MCBA7Vu3To1a9ZMFy9edKzzxRdfqEGDBkpMTNTYsWM1adIknT17Vk2aNNH333+fqc+uXbvqwoULmjRpkvr373/V2k+cOKE6depo7dq1euKJJ/TCCy/o0qVLateuneP9bdCggRYvXizp78OfMj4vrkpISNCZM2dUsGBBR1t6erratWunadOmqW3btnrttdfUoUMHzZgxQ927d3d6/Pjx4/XQQw/J29tbEyZM0Pjx4xUeHq4vvvjCsc64ceM0YMAAlShRQtOnT1fnzp01b9483Xvvvbp8+bJTf6dOnVKrVq1UtWpVzZw5U40bN5YxRu3bt9fixYv14IMPauLEiTpy5Igj2Fh17txZy5cvV9++fTV79mwNHDhQ586d06FDh676Gjz33HN65JFHJP19+NvixYv16KOPSnLtOyY1NVUtWrRQ0aJFNW3aNHXu3Dlbr//VvsczvPLKK7rrrrs0YcIETZo0SV5eXuratWum84Cy815I0v79+9WlSxc1b95c06dPV8GCBdWnTx/9+uuv1633as/hyn3IVWfOnFHLli0VGxur6dOnKyoqSiNGjNCaNWtuuE/ArQyAPLdgwQIjKcub3W53rLd27Vojyaxatcrp8a1btzZly5Z13E9NTTXJyclO65w5c8YUK1bMPPzww07tkszYsWMd93v3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ABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYuDUkzZkzRzExMQoKClJQUJBq166tNWvWOJZfunRJAwYMUKFChRQQEKDOnTvrxIkTbqwYAAAAwK3OrSGpZMmSmjJlirZv365t27apSZMmat++vX799VdJ0pAhQ7Rq1Sp9+OGH2rBhg44ePapOnTq5s2QAAAAAtzibMca48oCLFy/KGKMCBQpIkg4ePKjly5crOjpa9957700XFBoaqpdeekldunRRkSJF9N5776lLly6SpD179qhixYravHmzatWqla3+EhMTFRwcrISEBAUFBd10fQAAZJdt5yp3l5B/xLZzdwX5gos/uwDksOxmA5dHktq3b69FixZJks6ePauaNWtq+vTpat++vebMmXPDBaelpen999/X+fPnVbt2bW3fvl2XL19Ws2bNHOtERUWpVKlS2rx581X7SU5OVmJiotMNAAAAALLL5ZD0ww8/qH79+pKkpUuXqlixYjp48KAWLVqkV1991eUCfv75ZwUEBMhut+uxxx5zjEodP35cPj4+CgkJcVq/WLFiOn78+FX7mzx5soKDgx238PBwl2sCAAAAcPtyOSRduHBBgYGBkqTPPvtMnTp1koeHh2rVqqWDBw+6XECFChW0Y8cObdmyRY8//rh69+6tXbt2udxPhlGjRikhIcFxO3z48A33BQAAAOD243JIioyM1IoVK3T48GGtXbvWcR5SfHz8DZ3z4+Pjo8jISFWrVk2TJ09WbGysXnnlFYWFhSklJUVnz551Wv/EiRMKCwu7an92u90xW17GDQAAAACyy+WQNGbMGA0fPlylS5dWzZo1Vbt2bUl/jyrdddddN11Qenq6kpOTVa1aNXl7e2v9+vWOZXv37tWhQ4cc2wQAAACAnObl6gO6dOmievXq6dixY4qNjXW0N23aVB07dnSpr1GjRqlVq1YqVaqUzp07p/fee09fffWV1q5dq+DgYPXr109Dhw5VaGiogoKC9NRTT6l27drZntkOAAAAAFzlckiSpLCwsEyHvNWoUcPlfuLj49WrVy8dO3ZMwcHBiomJ0dq1a9W8eXNJ0owZM+Th4aHOnTsr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73R74YUXjDHGXL582RQuXNgsWrTI8ZgePXqY7t27X7XPkydPGknm559/NsYYExcXZySZH3/80RhjzIIFC0xwcLDTY5YvX26u919TpUqVzGuvvea4HxERYWbMmOG0zpV916lTx/Tv399pna5du5rWrVs77ksyzz//vON+UlKSkWTWrFlz1Vpef/11U6BAARMYGGgaN25sJkyYYA4cOOBYPm/ePBMYGGhOnTqV5eOzW9fgwYOd1mnatKmZNGmSU9vixYtN8eLFr1orACD7GEkCAEiSGjdurB07djjdHnvsMUmSl5eXunXrpnfffVfS36NGH3/8sXr27Ol4/L59+9SjRw+VLVtWQUFBKl26tCQ5Rn1uRFJSkoYPH66KFSsqJCREAQEB2r17t8t97t69W3Xr1nVqq1u3rnbv3u3UFhMT4/i3v7+/goKCFB8ff9V+BwwYoOPHj+vdd99V7dq19eGHH6pSpUpat26dJGnHjh266667FBoaelN1Va9e3en+Tz/9pAkTJiggIMBx69+/v44dO6YLFy5ctV4AQPYwcQMAQNLfoSAyMvKqy3v27KmGDRsqPj5e69atk5+fn9Psd23btlVERITefPNNlShRQunp6apcubJSUlKy7M/Dw0PGGKe2y5cvO90fPny41q1bp2nTpikyMlJ+fn7q0qXLVfu8WVdOiGCz2a57uGBgYKDatm2rtm3bauLEiWrRooUmTpyo5s2b59jkEf7+/k73k5KSNH78eHXq1CnTur6+vjmyTQC4nTGSBADIljp16ig8PFxLlizRu+++q65duzpCxalTp7R37149//zzatq0qSpWrKgzZ85cs78iRYro3LlzOn/+vKPtymsobdq0SX369FHHjh1VpUoVhYWF6Y8//nBax8fH56rnBGWoWLGiNm3alKnv6Ojo6zxr19hsNkVFRTmeU0xMjHbs2HHV85putK67775be/fuVWRkZKabhwf/tQPAzWIkCQAgSUpOTtbx48ed2ry8vFS4cGHH/QceeEBz587Vb7/95jS5QMGCBVWoUCG98cYbKl68uA4dOqSRI0dec3s1a9ZUgQIF9Oyzz2rgwIHasmWLFi5c6LRO+fLltWzZMrVt21Y2m02jR4/ONLJTunRpbdy4Uffff7/sdrtTvRmefvppdevWTXfddZeaNWumVatWadmyZU4z5blqx44dGjt2rB566CFFR0fLx8dHGzZs0Pz58zVixAhJUo8ePTRp0iR16NBBkydPVvHixfXjjz+qRIkSql279g3XNWbMGLVp00alSpVSly5d5OHhoZ9++km//PKLJk6ceMPPCQDw/7n7pCgAgPv17t3bSMp0q1ChgtN6u3btMpJMRESESU9Pd1q2bt06U7FiRWO3201MTIz56quvjCSzfPlyY0zmiRuM+XuihsjISOPn52fatGlj3njjDaeJG+Li4kzjxo2Nn5+fCQ8PN6+//rpp2LChGTRokGOdzZs3m5iYGGO32x2PzWpSiNmzZ5uyZcsab29vc+eddzpNQmGMcao1Q3BwsFmwYEGWr9nJkyfNwIEDTeXKlU1AQIAJDAw0VapUMdOmTTNpaWmO9f744w/TuXNnExQUZAoUKGCqV69utmzZclN1GWPMp59+aurUqWP8/PxMUFCQqVGjhnnjjTeyrBUA4BqbMVccEA4AAAAAtzEOXAYAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMDi/wHQI4KaEx2+SgAAAABJRU5ErkJggg==", + "image/png": "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b18TFhaWocZx48aZK78iLly4kGG5Vq1aOdVijDFVqlQxjRs3zrDsl19+aSSZL7/80hhjTHJysilWrJipWrWquXjxomO5NWvWGElm7NixTnVKMhMnTnTq86677jI1atTIsK0r9enTx0gyBQsWNJ07dzbTp083e/fuzbDc2LFjjSSzfPnyDPPS0tKMMcbMmjXLSDLvvvuuY15ycrKpW7euCQgIMAkJCcYYY2JiYowkExQUZOLi4pz6at68ualWrZq5dOmSU//16tUzFStWdLRFR0eb++6777rP70pjxowx3t7e5vTp0462pKQkExIS4rRPBAcHm0GDBrncf/o+vH37dnPo0CHj5eVlBg8e7JjfuHFjU6VKFcd0+muxcOHCDH1duU+m73uPPPKIoy0lJcWUKlXK2Gw2M3XqVEf7mTNnjJ+fn+nbt6+jLX0/u+OOOxzvhTHGfPjhh0aSefXVV40x/7zeFStWNK1atXK8t8b8s5+XK1fOtGzZMkNNvXr1ytLrM3ToUCPJfP311462c+fOmXLlypmyZcua1NRUp+ef1fdAkhkwYIA5efKkiYuLMzt27DCtW7c2kszLL7/sWG7JkiXGw8PDafvGGDNv3jwjyWzZssUYY8yBAweMh4eH6dy5s1NNxvzf/h4XF2d8fHzMvffe67TMG2+8YSSZBQsWONoaN25sJJl58+Y59bVy5Uojybz00kuOtpSUFNOwYUOn/eLMmTMZnktWWffJdDfyHTN69GiXtne973FjMn53Jicnm6pVq5pmzZo52rLyXhhjTFhYmJFkNm/e7GiLi4szdrvdjBgx4rp1Z3UfSn9+MTExTutf+T1uzP+974sXL3a0JSUlmdDQUNO1a9fr1gTkRRxJAtxo9uzZWr9+vdPD+qtbs2bNVKRIES1dutTRdubMGa1fv97p12BPT0/HNS5paWk6ffq0UlJSVLNmzSyfNpUVfn5+jn+n/3rauHFj/f7774qPj3e5vx07diguLk5PPPGE07VK9913nyIiIjIdbemxxx5zmm7YsKF+//33625r4cKFeuONN1SuXDmtWLFCI0eOVOXKldW8eXOn024+/vhjRUdHq3Pnzhn6SD8V6tNPP1VoaKh69erlmOft7a3BgwcrMTFRmzZtclqva9euKlq0qGP69OnT2rhxo3r06KFz5845/frcqlUrHThwwFFTSEiIfv31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ZVOkSBGzePFixzq9evUyPXv2vGqfJ0+eNJLMzz//bIwxJiYmxkgyP/74ozHGmIULF5rg4GCndVasWGGu919TlSpVzOuvv+6YDgsLMzNnznRa5sq+69WrZwYOHOi0TPfu3U3btm0d05LM888/75hOTEw0kszatWuvWssbb7xhChQoYAIDA03Tpk3NxIkTzaFDhxzz58+fbwIDA82pU6cyXT+rdQ0dOtRpmebNm5vJkyc7tS1ZssSUKFHiqrUCALKOI0kAAElS06ZNtWvXLqfHY489Jkny8vJSjx499N5770n656jRJ598ot69ezvWP3DggHr16qXy5csrKChIZcuWlSTHUZ8bkZiYqJEjR6py5coKCQlRQECA9u7d63Kfe/fuVf369Z3a6tevr7179zq1RUVFOf7t7++voKAgxcXFXbXfQYMGKTY2Vu+9957q1q2rjz76SFWqVNH69eslSbt27dJdd92lQoUK3VRdNWvWdJr+6aefNHHiRAUEBDgeAwcO1PHjx3XhwoWr1gsAyBoGbgAASPonFISHh191fu/evdW4cWPFxcVp/fr18vPzcxr9rn379goLC9Nbb72lkiVLKi0tTVWrVlVycnKm/Xl4eMgY49R2+fJlp+mRI0dq/fr1mj59usLDw+Xn56du3bpdtc+bdeWACDab7bqnCwYGBqp9+/Zq3769Jk2apFatWmnSpElq2bJltg0e4e/v7zSdmJioCRMmqEuXLhmW9fX1zZZtAsDtjCNJAIAsqVevnkqXLq2lS5fqvffeU/fu3R2h4tSpU9q/f7+ef/55NW/eXJUrV9aZM2eu2V/RokV17tw5nT9/3tF25T2UtmzZon79+qlz586qVq2aQkND9ccffzgt4+Pjc9VrgtJVrlxZW7ZsydB3ZGTkdZ61a2w2myIiIhzPKSoqSrt27brqdU03Wtfdd9+t/fv3Kzw8PMPDw4P/2gHgZnEkCQAgSUpKSlJsbKxTm5eXl4oUKeKYfuCBBzRv3jz99ttvToMLFCxYUIULF9abb76pEiVK6M8//9To0aOvub3atWurQIECevbZZzV48GBt27ZNixYtclqmYsWKWr58udq3by+bzaYXXnghw5GdsmXLavPmzbr//vtlt9ud6k339NNPq0ePHrrrrrvUokULrV69WsuXL3caKc9Vu3bt0rhx4/TQQw8pMjJSPj4+2rRpkxYsWKBRo0ZJknr16qXJkyerU6dOmjJlikqUKKEff/xRJUuWVN26dW+4rrFjx6pdu3YqU6aMunXrJg8PD/3000/65ZdfNGnSpBt+TgCA/8/dF0UBANyvb9++RlKGR6VKlZyW27Nnj5FkwsLCTFpamtO89evXm8qVKxu73W6ioqLMV199ZSSZFStWGGMyDtxgzD8DNYSHhxs/Pz/Trl078+abbzoN3BATE2OaNm1q/Pz8TOnSpc0bb7xhGjdubIYMGeJYZuvWrSYqKsrY7XbHupkNCjFnzhxTvnx54+3tbe68806nQSiMMU61pgsODjYLFy7M9DU7efKkGTx4sKlataoJCAgwgYGBplq1amb69OkmNTXVsdwff/xhunbtaoKCgkyBAgVMzZo1zbZt226qLmOM+eyzz0y9evWMn5+fCQoKMrVq1TJvvvlmprUCAFxjM+aKE8IBAAAA4DbGicsAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABY/D/mvoRj+3Y9QgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -2001,7 +1946,10 @@ } ], "source": [ - "evaluation_df_pivot.reset_index(drop=True, inplace=True)\n", + "\n", + "\n", + "# Reset index without dropping the 'run' and 'evaluation_score' columns\n", + "evaluation_df_pivot.reset_index(inplace=True)\n", "\n", "# Plotting\n", "plt.figure(figsize=(10, 6))\n", From 6e68aa98c1220ee6ebe316e9088c15d34f6c20b1 Mon Sep 17 00:00:00 2001 From: Lee Spacagna Date: Fri, 10 Jan 2025 14:20:39 +0200 Subject: [PATCH 4/6] Switch to 4o and 4o-mini and structured outputs --- ..._to_evaluate_LLMs_for_SQL_generation.ipynb | 1059 ++++++++++------- 1 file changed, 660 insertions(+), 399 deletions(-) diff --git a/examples/evaluation/How_to_evaluate_LLMs_for_SQL_generation.ipynb b/examples/evaluation/How_to_evaluate_LLMs_for_SQL_generation.ipynb index 46429c6708..f569108f1f 100644 --- a/examples/evaluation/How_to_evaluate_LLMs_for_SQL_generation.ipynb +++ b/examples/evaluation/How_to_evaluate_LLMs_for_SQL_generation.ipynb @@ -49,7 +49,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 94, "id": "245fcedb", "metadata": {}, "outputs": [ @@ -78,7 +78,7 @@ "%reload_ext dotenv\n", "%dotenv\n", " \n", - "GPT_MODEL = 'gpt-3.5-turbo'\n", + "GPT_MODEL = 'gpt-4o'\n", "dataset = load_dataset(\"b-mc2/sql-create-context\")" ] }, @@ -102,7 +102,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 95, "id": "f8027115", "metadata": {}, "outputs": [ @@ -190,7 +190,7 @@ "4 CREATE TABLE department (num_employees INTEGER... " ] }, - "execution_count": 7, + "execution_count": 95, "metadata": {}, "output_type": "execute_result" } @@ -223,17 +223,18 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 96, "id": "eb811101", "metadata": {}, "outputs": [], "source": [ "from pydantic import BaseModel\n", "\n", + "\n", "class LLMResponse(BaseModel):\n", - " \"\"\"This simple Class expects to receive a JSON string that can be parsed into a `create` and `select` statement.\"\"\"\n", - " create: str\n", - " select: str" + " \"\"\"This simple Class expects to receive a JSON string that can be parsed into a `create` and `select` statement.\"\"\"\n", + " create: str\n", + " select: str" ] }, { @@ -248,7 +249,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 98, "id": "c2be3ba4", "metadata": {}, "outputs": [ @@ -260,26 +261,20 @@ " 'SQL queries. \\n'\n", " 'The first query should be a CREATE statement for a table answering the '\n", " \"user's request, while the second should be a SELECT query answering their \"\n", - " 'question. \\n'\n", - " 'This should be returned as a JSON with keys \"create\" and \"select\". \\n'\n", - " 'For example:\\n'\n", - " '\\n'\n", - " '{\"create\": \"\"\"CREATE_QUERY\"\"\",\"select\": \"\"\"SELECT_QUERY\"\"\"}\"')\n" + " 'question.')\n" ] } ], "source": [ "system_prompt = '''Translate this natural language request into a JSON object containing two SQL queries. \n", - "The first query should be a CREATE statement for a table answering the user's request, while the second should be a SELECT query answering their question. \n", - "This should be returned as a JSON with keys \"create\" and \"select\". \n", - "For example:\\n\\n{\"create\": \"\"\"CREATE_QUERY\"\"\",\"select\": \"\"\"SELECT_QUERY\"\"\"}\"'''\n", + "The first query should be a CREATE statement for a table answering the user's request, while the second should be a SELECT query answering their question.'''\n", "\n", "pprint(system_prompt)\n" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 99, "id": "3a20d712", "metadata": {}, "outputs": [ @@ -291,12 +286,7 @@ " 'containing two SQL queries. \\n'\n", " 'The first query should be a CREATE statement for a table '\n", " \"answering the user's request, while the second should be a \"\n", - " 'SELECT query answering their question. \\n'\n", - " 'This should be returned as a JSON with keys \"create\" and '\n", - " '\"select\". \\n'\n", - " 'For example:\\n'\n", - " '\\n'\n", - " '{\"create\": \"\"\"CREATE_QUERY\"\"\",\"select\": \"\"\"SELECT_QUERY\"\"\"}\"',\n", + " 'SELECT query answering their question.',\n", " 'role': 'system'},\n", " {'content': 'How many heads of the departments are older than 56 ?',\n", " 'role': 'user'}]\n" @@ -314,7 +304,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 116, "id": "38b704b3-6f0e-4708-bc70-96723d69da6f", "metadata": {}, "outputs": [], @@ -322,7 +312,14 @@ "# Sending the message array to GPT, requesting a response (ensure that you have API key loaded to Env for this step)\n", "\n", "client = OpenAI()\n", - "completion = client.chat.completions.create(model = GPT_MODEL, messages = messages)" + "# completion = client.chat.completions.create(model = GPT_MODEL, messages = messages)\n", + "\n", + "\n", + "completion = client.beta.chat.completions.parse(\n", + " model=GPT_MODEL,\n", + " messages=messages,\n", + " response_format=LLMResponse,\n", + ")" ] }, { @@ -339,7 +336,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 117, "id": "2b057391-4f83-4b5a-8843-a9ee74bee871", "metadata": {}, "outputs": [ @@ -347,8 +344,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "('{\"create\": \"CREATE TABLE department_heads (name VARCHAR(50), age '\n", - " 'INT)\",\"select\": \"SELECT COUNT(*) FROM department_heads WHERE age > 56\"}')\n" + "('{\"create\":\"CREATE TABLE Departments (\\\\n DepartmentID INT PRIMARY '\n", + " 'KEY,\\\\n DepartmentName VARCHAR(255),\\\\n HeadName VARCHAR(255),\\\\n '\n", + " 'HeadAge INT\\\\n);\",\"select\":\"SELECT COUNT(*) AS NumberOfHeadsOlderThan56 FROM '\n", + " 'Departments WHERE HeadAge > 56;\"}')\n" ] } ], @@ -371,7 +370,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 118, "id": "4c7133f1-74d6-43f1-9443-09a3f8308c35", "metadata": {}, "outputs": [], @@ -389,7 +388,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 119, "id": "6a9a9128", "metadata": {}, "outputs": [ @@ -399,7 +398,7 @@ "True" ] }, - "execution_count": 14, + "execution_count": 119, "metadata": {}, "output_type": "execute_result" } @@ -420,7 +419,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 120, "id": "a0a26690", "metadata": {}, "outputs": [ @@ -439,7 +438,7 @@ "False" ] }, - "execution_count": 15, + "execution_count": 120, "metadata": {}, "output_type": "execute_result" } @@ -476,7 +475,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 121, "id": "9cc95481", "metadata": {}, "outputs": [], @@ -519,7 +518,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 122, "id": "c6d2573d", "metadata": {}, "outputs": [], @@ -585,7 +584,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 123, "id": "a9266753-4646-4901-bc14-632d3bf47aaa", "metadata": {}, "outputs": [ @@ -593,8 +592,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "CREATE SQL is: CREATE TABLE department_heads (name VARCHAR(50), age INT)\n", - "SELECT SQL is: SELECT COUNT(*) FROM department_heads WHERE age > 56\n" + "CREATE SQL is: CREATE TABLE Departments (\n", + " DepartmentID INT PRIMARY KEY,\n", + " DepartmentName VARCHAR(255),\n", + " HeadName VARCHAR(255),\n", + " HeadAge INT\n", + ");\n", + "SELECT SQL is: SELECT COUNT(*) AS NumberOfHeadsOlderThan56 FROM Departments WHERE HeadAge > 56;\n" ] } ], @@ -608,7 +612,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 124, "id": "83bc1f1b", "metadata": {}, "outputs": [ @@ -616,8 +620,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "Testing create query: CREATE TABLE department_heads (name VARCHAR(50), age INT)\n", - "Testing select query: SELECT COUNT(*) FROM department_heads WHERE age > 56\n", + "Testing create query: CREATE TABLE Departments (\n", + " DepartmentID INT PRIMARY KEY,\n", + " DepartmentName VARCHAR(255),\n", + " HeadName VARCHAR(255),\n", + " HeadAge INT\n", + ");\n", + "Testing select query: SELECT COUNT(*) AS NumberOfHeadsOlderThan56 FROM Departments WHERE HeadAge > 56;\n", "[(0,)]\n" ] }, @@ -627,7 +636,7 @@ "True" ] }, - "execution_count": 19, + "execution_count": 124, "metadata": {}, "output_type": "execute_result" } @@ -640,7 +649,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 125, "id": "589c7cc7", "metadata": {}, "outputs": [ @@ -659,7 +668,7 @@ "False" ] }, - "execution_count": 20, + "execution_count": 125, "metadata": {}, "output_type": "execute_result" } @@ -679,19 +688,19 @@ "source": [ "### Evaluation\n", "\n", - "The last component is to **evaluate** whether the generate SQL actually answers the user's question. This test will be performed by `gpt-4`, and will assess how **relevant** the produced SQL query is when compared to the initial user request.\n", + "The last component is to **evaluate** whether the generate SQL actually answers the user's question. This test will be performed by `gpt-4o-mini`, and will assess how **relevant** the produced SQL query is when compared to the initial user request.\n", "\n", "This is a simple example which adapts an approach outlined in the [G-Eval paper](https://arxiv.org/abs/2303.16634), and tested in one of our other [cookbooks](https://github.com/openai/openai-cookbook/blob/main/examples/evaluation/How_to_eval_abstractive_summarization.ipynb)." ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 126, "id": "029c8426", "metadata": {}, "outputs": [], "source": [ - "EVALUATION_MODEL = \"gpt-4\"\n", + "EVALUATION_MODEL = \"gpt-4o-mini\"\n", "\n", "EVALUATION_PROMPT_TEMPLATE = \"\"\"\n", "You will be given one summary written for an article. Your task is to rate the summary on one metric.\n", @@ -739,7 +748,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 127, "id": "85cfb78d", "metadata": {}, "outputs": [], @@ -770,7 +779,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 128, "id": "607ee304", "metadata": {}, "outputs": [], @@ -788,7 +797,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 129, "id": "bd1002c2", "metadata": {}, "outputs": [ @@ -804,12 +813,12 @@ "User Question \t: List the name, born state and age of the heads of departments ordered by age.\n", "CREATE SQL Returned \t: CREATE TABLE head (name VARCHAR, born_state VARCHAR, age VARCHAR)\n", "SELECT SQL Returned \t: SELECT name, born_state, age FROM head ORDER BY age\n", - "5\n", + "4\n", "********************\n", "User Question \t: List the creation year, name and budget of each department.\n", "CREATE SQL Returned \t: CREATE TABLE department (creation VARCHAR, name VARCHAR, budget_in_billions VARCHAR)\n", "SELECT SQL Returned \t: SELECT creation, name, budget_in_billions FROM department\n", - "5\n", + "4\n", "********************\n" ] } @@ -857,7 +866,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 115, "id": "85c44a17", "metadata": {}, "outputs": [ @@ -867,11 +876,7 @@ "text": [ "('Translate this natural language request into a JSON object containing two SQL queries. \\n'\n", " \"The first query should be a CREATE statement for a table answering the user's request, while the second should be a \"\n", - " 'SELECT query answering their question. \\n'\n", - " 'This should be returned as a JSON with keys \"create\" and \"select\". \\n'\n", - " 'For example:\\n'\n", - " '\\n'\n", - " '{\"create\": \"CREATE_QUERY\",\"select\": \"SELECT_QUERY\"}\" ')\n" + " 'SELECT query answering their question. \\n')\n" ] } ], @@ -879,15 +884,14 @@ "# Set first system prompt\n", "system_prompt = \"\"\"Translate this natural language request into a JSON object containing two SQL queries. \n", "The first query should be a CREATE statement for a table answering the user's request, while the second should be a SELECT query answering their question. \n", - "This should be returned as a JSON with keys \"create\" and \"select\". \n", - "For example:\\n\\n{\"create\": \"CREATE_QUERY\",\"select\": \"SELECT_QUERY\"}\" \"\"\"\n", + "\"\"\"\n", "\n", "pprint(system_prompt, width = 120)" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 130, "id": "1244c44e", "metadata": {}, "outputs": [], @@ -896,8 +900,15 @@ " messages = []\n", " messages.append({\"role\": \"system\", \"content\": system_prompt})\n", " messages.append({\"role\":\"user\",\"content\": user_message})\n", + "\n", + " response = client.beta.chat.completions.parse(\n", + " model=GPT_MODEL,\n", + " messages=messages,\n", + " response_format=LLMResponse,\n", + " )\n", + "\n", " \n", - " response = client.chat.completions.create(model=GPT_MODEL,messages=messages,temperature=0)\n", + " # response = client.chat.completions.create(model=GPT_MODEL,messages=messages,temperature=0,response_format=LLMResponse)\n", " \n", " return response.choices[0].message.content" ] @@ -914,7 +925,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 131, "id": "a98afa30", "metadata": {}, "outputs": [], @@ -952,7 +963,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 132, "id": "898e5069", "metadata": {}, "outputs": [], @@ -963,7 +974,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 133, "id": "2baec278", "metadata": {}, "outputs": [ @@ -971,161 +982,424 @@ "name": "stdout", "output_type": "stream", "text": [ - "Testing create query: CREATE TABLE partnerships (id INT, player1 VARCHAR(50), player2 VARCHAR(50), venue VARCHAR(100))\n", - "Testing select query: SELECT venue FROM partnerships WHERE player1 = 'shoaib malik' AND player2 = 'misbah-ul-haq'\n", - "[]\n", - "Testing create query: No table creation needed for this question\n", - "Error while creating the SQLite table: near \"No\": syntax error\n", - "Testing select query: SELECT venue FROM partnership_table WHERE player1 = 'herschelle gibbs' AND player2 = 'justin kemp'\n", - "Error while executing select query: no such table: partnership_table\n", - "Testing create query: CREATE TABLE games (Played INT, Points INT)\n", - "Testing select query: SELECT Played FROM games WHERE Points = 310\n", - "[]\n", - "Testing create query: CREATE TABLE losing_bonuses (id INT, points_against INT, losing_bonus VARCHAR(50))\n", - "Testing select query: SELECT losing_bonus FROM losing_bonuses WHERE points_against = 588\n", - "[]\n", - "Testing create query: CREATE TABLE tries_against (team_name VARCHAR(50), losing_bonus INT)\n", - "Testing select query: SELECT * FROM tries_against WHERE losing_bonus = 7\n", - "[]\n", - "Testing create query: CREATE TABLE try_bonus (id INT, points_against INT)\n", - "Testing select query: SELECT * FROM try_bonus WHERE points_against = 488\n", - "[]\n", - "Testing create query: CREATE TABLE Points (team_name VARCHAR(50), Try_bonus INT)\n", - "Testing select query: SELECT team_name FROM Points WHERE Try_bonus = 140\n", - "[]\n", - "Testing create query: CREATE TABLE Drawn (Drawn_id INT, Tries_against INT)\n", - "Testing select query: SELECT Drawn_id FROM Drawn WHERE Tries_against = 0\n", - "[]\n", - "Testing create query: CREATE TABLE champion_reigns (id INT, champion_name VARCHAR(255), days_held INT, defenses INT)\n", - "Testing select query: SELECT days_held FROM champion_reigns WHERE days_held > 3 AND defenses = 1\n", - "[]\n", - "Testing create query: CREATE TABLE champion_reigns (champion_id INT, days_held INT, defenses INT)\n", - "Testing select query: SELECT days_held FROM champion_reigns WHERE defenses < 1 AND days_held > 3\n", + "Testing create query: CREATE TABLE partnerships (\n", + " id INT AUTO_INCREMENT PRIMARY KEY,\n", + " player1 VARCHAR(255),\n", + " player2 VARCHAR(255),\n", + " venue VARCHAR(255),\n", + " date DATE\n", + ");\n", + "Testing select query: SELECT venue FROM partnerships WHERE player1 = 'shoaib malik' AND player2 = 'misbah-ul-haq';\n", "[]\n", - "Testing create query: CREATE TABLE champion_defenses (champion_id INT, days_held INT, defenses INT)\n", - "Testing select query: SELECT AVG(defenses) AS average_defenses FROM champion_defenses WHERE days_held = 404 AND defenses > 1\n", + "Testing create query: CREATE TABLE cricket_partnerships (\n", + " id INT PRIMARY KEY,\n", + " batsman_1 VARCHAR(100),\n", + " batsman_2 VARCHAR(100),\n", + " venue VARCHAR(255)\n", + ");\n", + "Testing select query: SELECT venue FROM cricket_partnerships WHERE batsman_1 = 'Herschelle Gibbs' AND batsman_2 = 'Justin Kemp';\n", + "[]\n", + "Testing create query: CREATE TABLE PointsTable (\n", + " Number INT NOT NULL,\n", + " Played INT NOT NULL,\n", + " Points INT NOT NULL\n", + ");\n", + "Testing select query: SELECT Played FROM PointsTable WHERE Points = 310;\n", + "[]\n", + "Testing create query: CREATE TABLE teams (\n", + " id INT PRIMARY KEY,\n", + " name VARCHAR(100),\n", + " losing_bonus INT,\n", + " points_against INT\n", + ");\n", + "Testing select query: SELECT losing_bonus FROM teams WHERE points_against = 588;\n", + "[]\n", + "Testing create query: CREATE TABLE TriesAgainst (ID INT, TeamID INT, OpponentID INT, MatchDate DATE, TriesAgainst INT, LosingBonus INT);\n", + "Testing select query: SELECT * FROM TriesAgainst WHERE LosingBonus = 7;\n", + "[]\n", + "Testing create query: CREATE TABLE RugbyTeamStats (\n", + " TeamName VARCHAR(255),\n", + " TryBonus INT,\n", + " PointsAgainst INT\n", + ");\n", + "Testing select query: SELECT TryBonus FROM RugbyTeamStats WHERE PointsAgainst = 488;\n", + "[]\n", + "Testing create query: CREATE TABLE Points (\n", + " id INT PRIMARY KEY,\n", + " try_bonus INT,\n", + " description VARCHAR(255)\n", + ");\n", + "Testing select query: SELECT * FROM Points WHERE try_bonus = 140;\n", + "[]\n", + "Testing create query: CREATE TABLE DrawnMatches (\n", + " MatchID INT PRIMARY KEY,\n", + " TriesAgainst INT,\n", + " Result VARCHAR(10)\n", + ");\n", + "Testing select query: SELECT MatchID FROM DrawnMatches WHERE TriesAgainst = 0 AND Result = 'Drawn';\n", + "[]\n", + "Testing create query: CREATE TABLE champions (\n", + " id INT PRIMARY KEY,\n", + " name VARCHAR(255),\n", + " reign_days INT,\n", + " defenses INT\n", + ");\n", + "Testing select query: SELECT reign_days FROM champions WHERE reign_days > 3 AND defenses = 1;\n", + "[]\n", + "Testing create query: CREATE TABLE champions (\n", + " champion_id INT PRIMARY KEY,\n", + " name VARCHAR(255) NOT NULL,\n", + " days_held INT NOT NULL,\n", + " reign INT NOT NULL,\n", + " defenses INT NOT NULL\n", + ");\n", + "Testing select query: SELECT days_held FROM champions WHERE reign > 3 AND defenses < 1;\n", + "[]\n", + "Testing create query: CREATE TABLE champions (\n", + " id INT PRIMARY KEY,\n", + " name VARCHAR(255),\n", + " days_held INT,\n", + " reign INT,\n", + " defenses INT\n", + ");\n", + "Testing select query: SELECT AVG(defenses) AS average_defenses \n", + "FROM champions \n", + "WHERE days_held = 404 AND reign > 1;\n", "[(None,)]\n", - "Testing create query: CREATE TABLE champion_defense (champion_name VARCHAR(50), days_held INT, defense_rating INT)\n", - "Testing select query: SELECT MIN(defense_rating) AS lowest_defense FROM champion_defense WHERE days_held = 345\n", + "Testing create query: CREATE TABLE champions (\n", + " id SERIAL PRIMARY KEY,\n", + " champion_name VARCHAR(255),\n", + " defense INT,\n", + " days_held INT\n", + ");\n", + "Testing select query: SELECT MIN(defense) AS lowest_defense\n", + "FROM champions\n", + "WHERE days_held = 345;\n", "[(None,)]\n", - "Testing create query: CREATE TABLE records (date DATE, score VARCHAR(10))\n", - "Testing select query: SELECT date FROM records WHERE score = '76-72'\n", - "[]\n", - "Testing create query: CREATE TABLE attendance_data (game_id INT, attendance INT, result VARCHAR(10))\n", - "Testing select query: SELECT attendance FROM attendance_data WHERE result = '1-5' AND loss = 'Ponson'\n", - "Error while executing select query: no such column: loss\n", - "Testing create query: CREATE TABLE records (id INT, day VARCHAR(20), value INT)\n", - "Testing select query: SELECT day FROM records WHERE value BETWEEN 36 AND 39\n", - "[]\n", - "Testing create query: CREATE TABLE records (record_id INT, record_date DATE)\n", - "Testing select query: SELECT record_date FROM records WHERE record_id = '30-31'\n", - "[]\n", - "Testing create query: CREATE TABLE games (game_id INT, opponent VARCHAR(50), result VARCHAR(10))\n", - "Testing select query: SELECT opponent FROM games WHERE result = 'loss' AND game_id = 7\n", - "[]\n", - "Testing create query: CREATE TABLE game_scores (record VARCHAR(10), score INT)\n", - "Testing select query: SELECT score FROM game_scores WHERE record = '18–43'\n", - "[]\n", - "Testing create query: CREATE TABLE game_scores (game_id INT, opponent VARCHAR(50), score INT, record VARCHAR(10))\n", - "Testing select query: SELECT score FROM game_scores WHERE opponent = 'Royals' AND record = '24–52'\n", - "[]\n", - "Testing create query: CREATE TABLE game_scores (record VARCHAR(10), score INT)\n", - "Testing select query: SELECT score FROM game_scores WHERE record = '22–46'\n", - "[]\n", - "Testing create query: CREATE TABLE military_personnel (id INT, code_name VARCHAR(50), real_name VARCHAR(50), primary_military_specialty VARCHAR(50))\n", - "Testing select query: SELECT real_name FROM military_personnel WHERE primary_military_specialty = 'shock paratrooper'\n", - "[]\n", - "Testing create query: No table creation needed for this question\n", - "Error while creating the SQLite table: near \"No\": syntax error\n", - "Testing select query: SELECT birthplace FROM people WHERE name = 'Pete Sanderson'\n", - "Error while executing select query: no such table: people\n", - "Testing create query: No table creation needed for this question\n", - "Error while creating the SQLite table: near \"No\": syntax error\n", - "Testing select query: SELECT role FROM employees WHERE name = 'Jean-Luc Bouvier'\n", - "Error while executing select query: no such table: employees\n", - "Testing create query: CREATE TABLE pilots (id INT, real_name VARCHAR(255), callsign VARCHAR(255))\n", - "Testing select query: SELECT real_name FROM pilots WHERE callsign = 'silent attack kayak'\n", - "[]\n", - "Testing create query: CREATE TABLE persons (id INT, name VARCHAR(50), birthplace VARCHAR(50), code_name VARCHAR(50))\n", - "Testing select query: SELECT code_name FROM persons WHERE birthplace = 'Liverpool'\n", - "[]\n", - "Testing create query: CREATE TABLE medalists (id INT, name VARCHAR(255), sport VARCHAR(255), medal VARCHAR(255))\n", - "Testing select query: SELECT name FROM medalists WHERE sport = 'canoeing'\n", - "[]\n", - "Testing create query: CREATE TABLE events (event_id INT, event_name VARCHAR(50), event_category VARCHAR(50), event_type VARCHAR(50))\n", - "Testing select query: SELECT event_name FROM events WHERE event_category = 'women' AND event_type = 'half middleweight'\n", - "[]\n", - "Testing create query: CREATE TABLE olympic_medals (athlete_id INT, athlete_name VARCHAR(255), event VARCHAR(255), year INT, city VARCHAR(255), medal VARCHAR(255))\n", - "Testing select query: SELECT athlete_name FROM olympic_medals WHERE year = 2000 AND city = 'Sydney' AND medal = 'Bronze'\n", - "[]\n", - "Testing create query: CREATE TABLE attendance (id INT, opponent VARCHAR(50), attendees INT)\n", - "Testing select query: SELECT COUNT(attendees) FROM attendance WHERE opponent = 'twins'\n", + "Testing create query: CREATE TABLE GameScores (\n", + " game_id INT PRIMARY KEY,\n", + " score_team1 INT,\n", + " score_team2 INT,\n", + " match_date DATE\n", + ");\n", + "Testing select query: SELECT match_date FROM GameScores WHERE score_team1 = 76 AND score_team2 = 72;\n", + "[]\n", + "Testing create query: CREATE TABLE GameResults (\n", + " date DATE,\n", + " team VARCHAR(50),\n", + " opponent VARCHAR(50),\n", + " result VARCHAR(10),\n", + " pitcher VARCHAR(50),\n", + " record VARCHAR(10),\n", + " attendance INT\n", + ");\n", + "Testing select query: SELECT attendance FROM GameResults WHERE pitcher = 'Ponson' AND record = '1-5' AND result = 'loss';\n", + "[]\n", + "Testing create query: CREATE TABLE Records (\n", + " record_id INT PRIMARY KEY,\n", + " date DATE NOT NULL,\n", + " value VARCHAR(10) NOT NULL\n", + ");\n", + "Testing select query: SELECT date FROM Records WHERE value = '36-39';\n", + "[]\n", + "Testing create query: CREATE TABLE records (\n", + " id INT AUTO_INCREMENT PRIMARY KEY,\n", + " record VARCHAR(10) NOT NULL,\n", + " record_date DATE NOT NULL\n", + ");\n", + "Testing select query: SELECT record_date FROM records WHERE record = '30-31';\n", + "[]\n", + "Testing create query: CREATE TABLE games (\n", + " id SERIAL PRIMARY KEY,\n", + " player_name TEXT,\n", + " outcome TEXT,\n", + " losses TEXT,\n", + " opponent TEXT\n", + ");\n", + "Testing select query: SELECT opponent FROM games WHERE player_name = 'Leonard' AND outcome = 'loss' AND losses = '7-8';\n", + "[]\n", + "Testing create query: CREATE TABLE GameScores (\n", + " id INT PRIMARY KEY AUTO_INCREMENT,\n", + " game_number INT NOT NULL,\n", + " score VARCHAR(50) NOT NULL\n", + ");\n", + "Error while creating the SQLite table: near \"AUTO_INCREMENT\": syntax error\n", + "Testing select query: SELECT score FROM GameScores WHERE game_number = 61; -- 18-43 is the record of wins-losses, which indicates game 61\n", + "Error while executing select query: no such table: GameScores\n", + "Testing create query: CREATE TABLE games (id INT PRIMARY KEY, opponent VARCHAR(255), score VARCHAR(255), date DATE, season_record VARCHAR(10));\n", + "Testing select query: SELECT score FROM games WHERE opponent = 'Royals' AND season_record = '24-52';\n", + "[]\n", + "Testing create query: CREATE TABLE game_scores (\n", + " id SERIAL PRIMARY KEY,\n", + " record VARCHAR(10),\n", + " score VARCHAR(10)\n", + ");\n", + "Testing select query: SELECT score FROM game_scores WHERE record = '22-46';\n", + "[]\n", + "Testing create query: CREATE TABLE military_specialties (\n", + " id INT PRIMARY KEY AUTO_INCREMENT,\n", + " real_name VARCHAR(255),\n", + " primary_specialty VARCHAR(255)\n", + ");\n", + "Error while creating the SQLite table: near \"AUTO_INCREMENT\": syntax error\n", + "Testing select query: SELECT real_name FROM military_specialties WHERE primary_specialty = 'shock paratrooper';\n", + "Error while executing select query: no such table: military_specialties\n", + "Testing create query: CREATE TABLE Persons (ID INT PRIMARY KEY, FirstName VARCHAR(50), LastName VARCHAR(50), Birthplace VARCHAR(100));\n", + "Testing select query: SELECT Birthplace FROM Persons WHERE FirstName = 'Pete' AND LastName = 'Sanderson';\n", + "[]\n", + "Testing create query: CREATE TABLE Employees (\n", + " id INT PRIMARY KEY,\n", + " name VARCHAR(100) NOT NULL,\n", + " role VARCHAR(100) NOT NULL\n", + ");\n", + "Testing select query: SELECT role FROM Employees WHERE name = 'Jean-Luc Bouvier';\n", + "[]\n", + "Testing create query: CREATE TABLE silent_attack_kayak_pilot (\n", + " id INT PRIMARY KEY,\n", + " real_name VARCHAR(255),\n", + " nickname VARCHAR(255)\n", + ");\n", + "Testing select query: SELECT real_name FROM silent_attack_kayak_pilot WHERE nickname = 'silent attack kayak';\n", + "[]\n", + "Testing create query: CREATE TABLE Persons (\n", + " ID INT PRIMARY KEY,\n", + " FirstName VARCHAR(255),\n", + " LastName VARCHAR(255),\n", + " BirthPlace VARCHAR(255),\n", + " CodeName VARCHAR(255)\n", + ");\n", + "Testing select query: SELECT CodeName FROM Persons WHERE BirthPlace = 'Liverpool';\n", + "[]\n", + "Testing create query: CREATE TABLE Canoeing_Medalists (\n", + " id INT PRIMARY KEY AUTO_INCREMENT,\n", + " name VARCHAR(255) NOT NULL,\n", + " country VARCHAR(100),\n", + " medal_type ENUM('gold', 'silver', 'bronze') NOT NULL,\n", + " event VARCHAR(255)\n", + ");\n", + "Error while creating the SQLite table: near \"AUTO_INCREMENT\": syntax error\n", + "Testing select query: SELECT name FROM Canoeing_Medalists;\n", + "Error while executing select query: no such table: Canoeing_Medalists\n", + "Testing create query: CREATE TABLE WomensHalfMiddleweightEventGames (\n", + " EventID INT PRIMARY KEY,\n", + " GameName VARCHAR(255) NOT NULL,\n", + " Year INT NOT NULL\n", + ");\n", + "Testing select query: SELECT GameName, Year\n", + "FROM WomensHalfMiddleweightEventGames;\n", + "[]\n", + "Testing create query: CREATE TABLE OlympicMedals (\n", + " id SERIAL PRIMARY KEY,\n", + " athlete_name VARCHAR(255),\n", + " event VARCHAR(255),\n", + " medal_type ENUM('Gold', 'Silver', 'Bronze'),\n", + " year INT,\n", + " city VARCHAR(255)\n", + ");\n", + "Error while creating the SQLite table: near \"'Gold'\": syntax error\n", + "Testing select query: SELECT athlete_name, event\n", + "FROM OlympicMedals\n", + "WHERE medal_type = 'Bronze' AND year = 2000 AND city = 'Sydney';\n", + "Error while executing select query: no such table: OlympicMedals\n", + "Testing create query: CREATE TABLE game_attendance (\n", + " game_id INT PRIMARY KEY,\n", + " opponent VARCHAR(255),\n", + " attendees INT\n", + ");\n", + "Testing select query: SELECT COUNT(*) FROM game_attendance WHERE opponent = 'twins';\n", "[(0,)]\n", - "Testing create query: CREATE TABLE records (date DATE, record VARCHAR(10))\n", - "Testing select query: SELECT date FROM records WHERE record = '41-46'\n", - "[]\n", - "Testing create query: CREATE TABLE scores (id INT, record VARCHAR(10), score INT)\n", - "Testing select query: SELECT score FROM scores WHERE record = '48-55'\n", - "[]\n", - "Testing create query: CREATE TABLE scores (id INT, record VARCHAR(10), score INT)\n", - "Testing select query: SELECT score FROM scores WHERE record = '44-49'\n", - "[]\n", - "Testing create query: CREATE TABLE scores (Opponent VARCHAR(50), Record VARCHAR(5), Score INT)\n", - "Testing select query: SELECT Score FROM scores WHERE Opponent = 'white sox' AND Record = '2-0'\n", - "[]\n", - "Testing create query: No table creation needed for this question\n", - "Error while creating the SQLite table: near \"No\": syntax error\n", - "Testing select query: SELECT votes FROM candidates WHERE name = 'Candice Sjostrom'\n", - "Error while executing select query: no such table: candidates\n", - "Testing create query: CREATE TABLE percentages (name VARCHAR(50), percentage DECIMAL(5,2))\n", - "Testing select query: SELECT percentage FROM percentages WHERE name = 'Chris Wright'\n", - "[]\n", - "Testing create query: CREATE TABLE candidate_votes (year INT, candidate_name VARCHAR(50), vote_percentage DECIMAL(5,2), office VARCHAR(50))\n", - "Testing select query: SELECT COUNT(*) FROM candidate_votes WHERE year > 1992 AND vote_percentage = 1.59 AND office = 'us representative 4'\n", - "[(0,)]\n", - "Testing create query: CREATE TABLE representatives (id INT, name VARCHAR(255), start_year INT, end_year INT)\n", - "Testing select query: SELECT start_year, end_year FROM representatives WHERE name = 'J. Smith Young'\n", - "[]\n", - "Testing create query: No table creation needed for this question\n", - "Error while creating the SQLite table: near \"No\": syntax error\n", - "Testing select query: SELECT party FROM politicians WHERE name = 'Thomas L. Young'\n", - "Error while executing select query: no such table: politicians\n", - "Testing create query: CREATE TABLE country_medals (country_name VARCHAR(50), gold_medals INT, silver_medals INT, bronze_medals INT)\n", - "Testing select query: SELECT MIN(gold_medals + silver_medals + bronze_medals) AS lowest_total_medals FROM country_medals WHERE gold_medals = 0 AND silver_medals > 1 AND bronze_medals > 2\n", + "Testing create query: CREATE TABLE Records (Date DATE, Record VARCHAR(5));\n", + "Testing select query: SELECT Date FROM Records WHERE Record = '41-46';\n", + "[]\n", + "Testing create query: CREATE TABLE Scores (\n", + " id INT PRIMARY KEY AUTO_INCREMENT,\n", + " score INT NOT NULL,\n", + " wins INT NOT NULL,\n", + " losses INT NOT NULL\n", + ");\n", + "Error while creating the SQLite table: near \"AUTO_INCREMENT\": syntax error\n", + "Testing select query: SELECT score FROM Scores WHERE wins = 48 AND losses = 55;\n", + "Error while executing select query: no such table: Scores\n", + "Testing create query: CREATE TABLE ScoresRecords (\n", + " id INT PRIMARY KEY,\n", + " score INT NOT NULL,\n", + " record VARCHAR(20) NOT NULL\n", + ");\n", + "Testing select query: SELECT score FROM ScoresRecords WHERE record = '44-49';\n", + "[]\n", + "Testing create query: CREATE TABLE games (\n", + " id INT PRIMARY KEY,\n", + " score VARCHAR(10),\n", + " opponent VARCHAR(50),\n", + " record VARCHAR(5)\n", + ");\n", + "Testing select query: SELECT score FROM games WHERE opponent = 'white sox' AND record = '2-0';\n", + "[]\n", + "Testing create query: CREATE TABLE votes (\n", + " id INT PRIMARY KEY,\n", + " candidate_name VARCHAR(255),\n", + " vote_count INT\n", + ");\n", + "Testing select query: SELECT vote_count FROM votes WHERE candidate_name = 'Candice Sjostrom';\n", + "[]\n", + "Testing create query: CREATE TABLE election_results (\n", + " candidate_name VARCHAR(100),\n", + " votes_received INT,\n", + " total_votes INT\n", + ");\n", + "Testing select query: SELECT (votes_received::FLOAT / total_votes) * 100 AS percentage_received\n", + "FROM election_results\n", + "WHERE candidate_name = 'Chris Wright';\n", + "Error while executing select query: unrecognized token: \":\"\n", + "Testing create query: CREATE TABLE election_results (\n", + " year INT,\n", + " candidate_name VARCHAR(255),\n", + " percentage_of_vote DECIMAL(5, 2),\n", + " office VARCHAR(255),\n", + " votes INT\n", + ");\n", + "Testing select query: SELECT votes FROM election_results \n", + "WHERE year > 1992 AND \n", + " percentage_of_vote = 1.59 AND \n", + " office = 'us representative 4';\n", + "[]\n", + "Testing create query: CREATE TABLE Representatives (\n", + " id INT PRIMARY KEY,\n", + " name VARCHAR(255),\n", + " start_year INT,\n", + " end_year INT\n", + ");\n", + "\n", + "INSERT INTO Representatives (id, name, start_year, end_year) VALUES\n", + "(1, 'J. Smith Young', 2010, 2014),\n", + "(2, 'Another Representative', 2015, 2020);\n", + "Error while creating the SQLite table: You can only execute one statement at a time.\n", + "Testing select query: SELECT start_year, end_year FROM Representatives WHERE name = 'J. Smith Young';\n", + "Error while executing select query: no such table: Representatives\n", + "Testing create query: CREATE TABLE Politicians (\n", + " id INT PRIMARY KEY,\n", + " name VARCHAR(255),\n", + " party VARCHAR(255)\n", + ");\n", + "Testing select query: SELECT party FROM Politicians WHERE name = 'Thomas L. Young';\n", + "[]\n", + "Testing create query: CREATE TABLE country_medals (\n", + " country VARCHAR(100),\n", + " gold INT,\n", + " silver INT,\n", + " bronze INT,\n", + " total_medals INT GENERATED ALWAYS AS (gold + silver + bronze) STORED\n", + ");\n", + "Testing select query: SELECT MIN(total_medals) AS lowest_total_medals\n", + "FROM country_medals\n", + "WHERE gold = 0 AND bronze > 2 AND silver > 1;\n", "[(None,)]\n", - "Testing create query: CREATE TABLE country_medals (country_name VARCHAR(50), gold_medals INT, silver_medals INT, bronze_medals INT)\n", - "Testing select query: SELECT SUM(silver_medals) AS total_silver_medals FROM country_medals WHERE gold_medals = 0 AND silver_medals > 0 AND bronze_medals = 0\n", + "Testing create query: CREATE TABLE olympic_medals (\n", + " country VARCHAR(100),\n", + " rank INT,\n", + " gold INT,\n", + " silver INT,\n", + " bronze INT,\n", + " total INT\n", + ");\n", + "Testing select query: SELECT SUM(silver) AS total_silver_medals \n", + "FROM olympic_medals \n", + "WHERE rank = 14 AND total < 1;\n", "[(None,)]\n", - "Testing create query: CREATE TABLE player_stats (player_id INT, tackles INT, fumble_recoveries INT, forced_fumbles INT)\n", - "Testing select query: SELECT tackles FROM player_stats WHERE fumble_recoveries > 0 AND forced_fumbles = 0\n", - "[]\n", - "Testing create query: CREATE TABLE player_stats (player_name VARCHAR(50), forced_fumbles INT, solo_tackles INT)\n", - "Testing select query: SELECT forced_fumbles FROM player_stats WHERE player_name = 'Jim Laney' AND solo_tackles < 2\n", - "[]\n", - "Testing create query: CREATE TABLE player_stats (player_id INT, solo_tackles INT, total INT)\n", - "Testing select query: SELECT MAX(total) AS high_total FROM player_stats WHERE solo_tackles > 15\n", - "[(None,)]\n", - "Testing create query: CREATE TABLE fumble_stats (player_name VARCHAR(50), fumble_recoveries INT, forced_fumbles INT, sacks INT, solo_tackles INT)\n", - "Testing select query: SELECT fumble_recoveries FROM fumble_stats WHERE player_name = 'scott gajos' AND forced_fumbles = 0 AND sacks = 0 AND solo_tackles < 2\n", - "[]\n", - "Testing create query: CREATE TABLE matches (id INT, home_team VARCHAR(50), away_team VARCHAR(50), match_time TIME, venue VARCHAR(50))\n", - "Testing select query: SELECT away_team FROM matches WHERE match_time = '20:00:00' AND venue = 'Camp Nou'\n", - "[]\n", - "Testing create query: CREATE TABLE matches (match_id INT, match_date DATE, match_time TIME, home_team VARCHAR(50), away_team VARCHAR(50), home_score INT, away_score INT)\n", - "Testing select query: SELECT match_time FROM matches WHERE home_score = 3 AND away_score = 2\n", - "[]\n", - "Testing create query: CREATE TABLE grounds (id INT, name VARCHAR(50))\n", - "Testing select query: SELECT name FROM grounds WHERE id = (SELECT ground_id FROM matches WHERE team = 'Aston Villa')\n", - "Error while executing select query: no such table: matches\n", - "Testing create query: No table creation needed for this request\n", - "Error while creating the SQLite table: near \"No\": syntax error\n", - "Testing select query: SELECT competition_type FROM competitions WHERE venue = 'San Siro' AND start_time = '18:30 GMT';\n", - "Error while executing select query: no such table: competitions\n", - "Testing create query: CREATE TABLE schools (school_id INT, school_name VARCHAR(50), locality VARCHAR(50), decile INT)\n", - "Testing select query: SELECT COUNT(decile) AS total_decile FROM schools WHERE locality = 'redwood school'\n", + "Testing create query: CREATE TABLE football_statistics (\n", + " player_id INT PRIMARY KEY,\n", + " player_name VARCHAR(255),\n", + " tackles INT,\n", + " fumble_recoveries INT,\n", + " forced_fumbles INT\n", + ");\n", + "Testing select query: SELECT tackles FROM football_statistics WHERE fumble_recoveries > 0 AND forced_fumbles > 0;\n", + "[]\n", + "Testing create query: CREATE TABLE player_stats (\n", + " id SERIAL PRIMARY KEY,\n", + " player_name VARCHAR(100),\n", + " solo_tackles INT,\n", + " forced_fumbles INT\n", + ");\n", + "Testing select query: SELECT COUNT(*) FROM player_stats \n", + "WHERE player_name = 'Jim Laney' AND solo_tackles < 2;\n", "[(0,)]\n", - "Testing create query: CREATE TABLE reports (id INT, report_name VARCHAR(255), circuit_name VARCHAR(255))\n", - "Testing select query: SELECT report_name FROM reports WHERE circuit_name = 'Tripoli'\n", + "Testing create query: CREATE TABLE players_tackles (\n", + " player_id INT PRIMARY KEY,\n", + " player_name VARCHAR(50),\n", + " solo_tackles INT,\n", + " total_tackles INT\n", + ");\n", + "Testing select query: SELECT MAX(total_tackles) as high_total\n", + "FROM players_tackles\n", + "WHERE solo_tackles > 15;\n", + "[(None,)]\n", + "Testing create query: CREATE TABLE FootballStats (\n", + " player_name VARCHAR(255),\n", + " fumble_recoveries INT,\n", + " forced_fumbles INT,\n", + " sacks INT,\n", + " solo_tackles INT\n", + ");\n", + "Testing select query: SELECT fumble_recoveries FROM FootballStats \n", + "WHERE player_name = 'Scott Gajos' AND forced_fumbles = 0 AND sacks = 0 AND solo_tackles < 2;\n", + "[]\n", + "Testing create query: CREATE TABLE matches (\n", + " match_id INT PRIMARY KEY,\n", + " date_time TIMESTAMP,\n", + " location VARCHAR(255),\n", + " home_team VARCHAR(255),\n", + " opponent VARCHAR(255)\n", + ");\n", + "Testing select query: SELECT opponent FROM matches WHERE date_time = '2023-10-20 20:00:00' AND location = 'Camp Nou';\n", + "[]\n", + "Testing create query: CREATE TABLE Matches (\n", + " match_id INT PRIMARY KEY,\n", + " date DATE,\n", + " time TIME,\n", + " home_team VARCHAR(100),\n", + " away_team VARCHAR(100),\n", + " home_score INT,\n", + " away_score INT\n", + ");\n", + "Testing select query: SELECT time \n", + "FROM Matches \n", + "WHERE home_score = 3 AND away_score = 2 OR home_score = 2 AND away_score = 3;\n", + "[]\n", + "Testing create query: CREATE TABLE matches (\n", + " match_id INT PRIMARY KEY,\n", + " home_team VARCHAR(50),\n", + " away_team VARCHAR(50),\n", + " ground VARCHAR(100),\n", + " match_date DATE\n", + ");\n", + "Testing select query: SELECT ground FROM matches WHERE away_team = 'Aston Villa';\n", + "[]\n", + "Testing create query: CREATE TABLE competitions (\n", + " id SERIAL PRIMARY KEY,\n", + " name VARCHAR(255),\n", + " location VARCHAR(255),\n", + " date DATE,\n", + " time TIME,\n", + " competition_type VARCHAR(255)\n", + ");\n", + "Testing select query: SELECT competition_type FROM competitions WHERE location = 'San Siro' AND time = '18:30:00' AND date = CURRENT_DATE;\n", + "[]\n", + "Testing create query: CREATE TABLE RedwoodSchoolLocality (\n", + " id INT PRIMARY KEY AUTO_INCREMENT,\n", + " name VARCHAR(255) NOT NULL,\n", + " decile INT NOT NULL,\n", + " locality VARCHAR(255) NOT NULL\n", + ");\n", + "Error while creating the SQLite table: near \"AUTO_INCREMENT\": syntax error\n", + "Testing select query: SELECT COUNT(DISTINCT decile) AS total_deciles FROM RedwoodSchoolLocality WHERE locality = 'Redwood School';\n", + "Error while executing select query: no such table: RedwoodSchoolLocality\n", + "Testing create query: CREATE TABLE Reports (\n", + " report_id INT PRIMARY KEY,\n", + " report_name VARCHAR(255),\n", + " details TEXT\n", + ");\n", + "Testing select query: SELECT report_name FROM Reports WHERE details LIKE '%Circuit of Tripoli%';\n", "[]\n" ] } @@ -1149,7 +1423,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 134, "id": "8fe18367", "metadata": {}, "outputs": [], @@ -1174,7 +1448,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 135, "id": "650e6159", "metadata": {}, "outputs": [ @@ -1187,7 +1461,7 @@ "Name: count, dtype: int64" ] }, - "execution_count": 31, + "execution_count": 135, "metadata": {}, "output_type": "execute_result" } @@ -1198,7 +1472,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 137, "id": "b3f98f81", "metadata": { "scrolled": true @@ -1208,14 +1482,13 @@ "data": { "text/plain": [ "evaluation_score\n", - "5 43\n", - "4 4\n", - "3 2\n", - "1 1\n", + "5 33\n", + "4 16\n", + "3 1\n", "Name: count, dtype: int64" ] }, - "execution_count": 32, + "execution_count": 137, "metadata": {}, "output_type": "execute_result" } @@ -1236,7 +1509,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 138, "id": "513a2da1", "metadata": {}, "outputs": [ @@ -1247,10 +1520,6 @@ "('Translate this natural language request into a JSON object containing two SQL queries. \\n'\n", " \"The first query should be a CREATE statement for a table answering the user's request, while the second should be a \"\n", " 'SELECT query answering their question. \\n'\n", - " 'This should be returned as a JSON with keys \"create\" and \"select\". \\n'\n", - " 'For example:\\n'\n", - " '\\n'\n", - " '{\"create\": \"CREATE_QUERY\",\"select\": \"SELECT_QUERY\"}\" \\n'\n", " 'Ensure the SQL is always generated on one line, never use \\n'\n", " ' to separate rows.')\n" ] @@ -1259,8 +1528,6 @@ "source": [ "system_prompt_2 = \"\"\"Translate this natural language request into a JSON object containing two SQL queries. \n", "The first query should be a CREATE statement for a table answering the user's request, while the second should be a SELECT query answering their question. \n", - "This should be returned as a JSON with keys \"create\" and \"select\". \n", - "For example:\\n\\n{\"create\": \"CREATE_QUERY\",\"select\": \"SELECT_QUERY\"}\" \n", "Ensure the SQL is always generated on one line, never use \\n to separate rows.\"\"\"\n", "\n", "pprint(system_prompt_2, width=120)" @@ -1268,7 +1535,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 139, "id": "70bd3e32", "metadata": {}, "outputs": [ @@ -1276,156 +1543,155 @@ "name": "stdout", "output_type": "stream", "text": [ - "Testing create query: CREATE TABLE partnerships (id INT, player1 VARCHAR(50), player2 VARCHAR(50), venue VARCHAR(100));\n", - "Testing select query: SELECT venue FROM partnerships WHERE player1 = 'shoaib malik' AND player2 = 'misbah-ul-haq';\n", + "Testing create query: CREATE TABLE partnerships (id INT PRIMARY KEY, player_one VARCHAR(255), player_two VARCHAR(255), venue VARCHAR(255));\n", + "Testing select query: SELECT venue FROM partnerships WHERE player_one = 'Shoaib Malik' AND player_two = 'Misbah-ul-Haq';\n", "[]\n", - "Testing create query: CREATE TABLE partnerships (id INT, player1 VARCHAR(50), player2 VARCHAR(50), venue VARCHAR(50))\n", - "Testing select query: SELECT venue FROM partnerships WHERE player1 = 'herschelle gibbs' AND player2 = 'justin kemp'\n", + "Testing create query: CREATE TABLE cricket_partnerships (id INT PRIMARY KEY, player1 VARCHAR(100), player2 VARCHAR(100), venue VARCHAR(100), match_date DATE, runs INT);\n", + "Testing select query: SELECT venue FROM cricket_partnerships WHERE player1 = 'Herschelle Gibbs' AND player2 = 'Justin Kemp';\n", "[]\n", - "Testing create query: CREATE TABLE games (Played INT, Points INT)\n", - "Testing select query: SELECT Played FROM games WHERE Points = 310\n", + "Testing create query: CREATE TABLE PointsTable (NumberPlayed INT, Points INT);\n", + "Testing select query: SELECT NumberPlayed FROM PointsTable WHERE Points = 310;\n", "[]\n", - "Testing create query: CREATE TABLE losing_bonuses (bonus_id INT, points_against INT)\n", - "Testing select query: SELECT * FROM losing_bonuses WHERE points_against = 588\n", + "Testing create query: CREATE TABLE TeamStandings (TeamID INT PRIMARY KEY, TeamName VARCHAR(100), PointsAgainst INT, LosingBonus INT);\n", + "Testing select query: SELECT LosingBonus FROM TeamStandings WHERE PointsAgainst = 588;\n", "[]\n", - "Testing create query: CREATE TABLE tries (team VARCHAR(50), against VARCHAR(50), losing_bonus INT)\n", - "Testing select query: SELECT * FROM tries WHERE against = 'Losing' AND losing_bonus = 7\n", + "Testing create query: CREATE TABLE RugbyMatches (MatchID INT PRIMARY KEY, TriesFor INT, TriesAgainst INT, LosingBonus INT);\n", + "Testing select query: SELECT TriesAgainst FROM RugbyMatches WHERE LosingBonus = 7;\n", "[]\n", - "Testing create query: CREATE TABLE try_bonus (id INT, points_against INT)\n", - "Testing select query: SELECT * FROM try_bonus WHERE points_against = 488\n", + "Testing create query: CREATE TABLE RugbyScores (TryBonus INT, PointsAgainst INT);\n", + "Testing select query: SELECT TryBonus FROM RugbyScores WHERE PointsAgainst = 488;\n", "[]\n", - "Testing create query: CREATE TABLE Points (Team VARCHAR(50), Try_Bonus INT)\n", - "Testing select query: SELECT Team FROM Points WHERE Try_Bonus = 140\n", + "Testing create query: CREATE TABLE Points (id INT PRIMARY KEY, description VARCHAR(255), try_bonus INT);\n", + "Testing select query: SELECT * FROM Points WHERE try_bonus = 140;\n", "[]\n", - "Testing create query: CREATE TABLE Drawn (Drawn_id INT, Tries_against INT)\n", - "Testing select query: SELECT * FROM Drawn WHERE Tries_against = 0\n", + "Testing create query: CREATE TABLE DrawnData (MatchID INT PRIMARY KEY, Team VARCHAR(100), TriesAgainst INT);\n", + "Testing select query: SELECT MatchID, Team FROM DrawnData WHERE TriesAgainst = 0;\n", "[]\n", - "Testing create query: CREATE TABLE champions (id INT, name VARCHAR(255), reign_days INT, defenses INT)\n", - "Testing select query: SELECT reign_days FROM champions WHERE reign_days > 3 AND defenses = 1\n", + "Testing create query: CREATE TABLE champions (id INT PRIMARY KEY, name VARCHAR(255), reign_days INT, defenses INT);\n", + "Testing select query: SELECT reign_days FROM champions WHERE reign_days > 3 AND defenses = 1;\n", "[]\n", - "Testing create query: CREATE TABLE champion_reigns (id INT, champion_name VARCHAR(255), days_held INT, defenses INT)\n", - "Testing select query: SELECT days_held FROM champion_reigns WHERE defenses < 1 AND days_held > 3\n", + "Testing create query: CREATE TABLE champions (id INT PRIMARY KEY, name VARCHAR(255), reign_duration INT, number_of_defenses INT);\n", + "Testing select query: SELECT reign_duration FROM champions WHERE reign_duration > 3 AND number_of_defenses < 1;\n", "[]\n", - "Testing create query: CREATE TABLE champion_defenses (champion_id INT, days_held INT, defenses INT)\n", - "Testing select query: SELECT AVG(defenses) FROM champion_defenses WHERE days_held = 404 AND defenses > 1\n", + "Testing create query: CREATE TABLE champions (id INT PRIMARY KEY, name VARCHAR(100), days_held INT, reign INT, defenses INT);\n", + "Testing select query: SELECT AVG(defenses) AS average_defenses FROM champions WHERE days_held = 404 AND reign > 1;\n", "[(None,)]\n", - "Testing create query: CREATE TABLE champions (name VARCHAR(50), days_held INT, defense INT)\n", - "Testing select query: SELECT MIN(defense) FROM champions WHERE days_held = 345\n", + "Testing create query: CREATE TABLE ChampionshipHistory (ChampionName VARCHAR(255), Defense INT, DaysHeld INT, PRIMARY KEY (ChampionName));\n", + "Testing select query: SELECT MIN(Defense) FROM ChampionshipHistory WHERE DaysHeld = 345;\n", "[(None,)]\n", - "Testing create query: CREATE TABLE records (date DATE, score VARCHAR(10))\n", - "Testing select query: SELECT date FROM records WHERE score = '76-72'\n", + "Testing create query: CREATE TABLE game_records (id INT PRIMARY KEY, score VARCHAR(7), date DATE);\n", + "Testing select query: SELECT date FROM game_records WHERE score = '76-72';\n", "[]\n", - "Testing create query: CREATE TABLE attendance_data (game_id INT, attendance INT, result VARCHAR(10))\n", - "Testing select query: SELECT attendance FROM attendance_data WHERE result = '1-5' AND loss = 'Ponson'\n", - "Error while executing select query: no such column: loss\n", - "Testing create query: CREATE TABLE records (id INT, day VARCHAR(20), value INT)\n", - "Testing select query: SELECT day FROM records WHERE value BETWEEN 36 AND 39\n", + "Testing create query: CREATE TABLE games (id INT PRIMARY KEY, player_name VARCHAR(50), outcome VARCHAR(10), attendance INT);\n", + "Testing select query: SELECT attendance FROM games WHERE player_name = 'Ponson' AND outcome = 'loss' AND id = 1;\n", "[]\n", - "Testing create query: CREATE TABLE records (record_id INT, record_date DATE);\n", - "Testing select query: SELECT record_date FROM records WHERE record_id = '30-31';\n", + "Testing create query: CREATE TABLE records (id INT PRIMARY KEY, date DATE, record_range VARCHAR(10));\n", + "Testing select query: SELECT date FROM records WHERE record_range = '36-39';\n", "[]\n", - "Testing create query: CREATE TABLE games (game_id INT, opponent VARCHAR(50), result VARCHAR(10))\n", - "Testing select query: SELECT opponent FROM games WHERE result = 'loss' AND game_id = 7\n", + "Testing create query: CREATE TABLE records (id INT PRIMARY KEY, result VARCHAR(255), date DATE);\n", + "Testing select query: SELECT date FROM records WHERE result = '30-31';\n", "[]\n", - "Testing create query: CREATE TABLE game_scores (game_id INT, home_team_score INT, away_team_score INT)\n", - "Testing select query: SELECT home_team_score, away_team_score FROM game_scores WHERE home_team_score = 18 AND away_team_score = 43\n", + "Testing create query: CREATE TABLE games (id INT PRIMARY KEY, player_name VARCHAR(255), record VARCHAR(10), opponent VARCHAR(255), result VARCHAR(10));\n", + "Testing select query: SELECT opponent FROM games WHERE player_name = 'Leonard' AND record = '7–8' AND result = 'loss';\n", "[]\n", - "Testing create query: CREATE TABLE game_scores (game_id INT, opponent VARCHAR(50), score INT, team_record VARCHAR(10))\n", - "Testing select query: SELECT score FROM game_scores WHERE opponent = 'Royals' AND team_record = '24-52'\n", + "Testing create query: CREATE TABLE GameScores (id INT PRIMARY KEY, team1_score INT, team2_score INT, record VARCHAR(5));\n", + "Testing select query: SELECT team1_score, team2_score FROM GameScores WHERE record = '18-43';\n", "[]\n", - "Testing create query: CREATE TABLE game_scores (game_id INT, home_team_score INT, away_team_score INT)\n", - "Testing select query: SELECT home_team_score, away_team_score FROM game_scores WHERE home_team_score = 22 AND away_team_score = 46\n", + "Testing create query: CREATE TABLE game_scores (id INT PRIMARY KEY, team1 VARCHAR(50), team2 VARCHAR(50), score1 INT, score2 INT, team1_record VARCHAR(10), team2_record VARCHAR(10));\n", + "Testing select query: SELECT score1, score2 FROM game_scores WHERE (team1 = 'Royals' AND team2_record = '24-52') OR (team2 = 'Royals' AND team1_record = '24-52');\n", "[]\n", - "Testing create query: CREATE TABLE military_personnel (id INT, code_name VARCHAR(50), real_name VARCHAR(50), primary_military_specialty VARCHAR(50))\n", - "Testing select query: SELECT real_name FROM military_personnel WHERE primary_military_specialty = 'shock paratrooper'\n", + "Testing create query: CREATE TABLE game_scores (record VARCHAR(255), score INT);\n", + "Testing select query: SELECT score FROM game_scores WHERE record = '22–46';\n", "[]\n", - "Testing create query: CREATE TABLE persons (id INT, name VARCHAR(255), birthplace VARCHAR(255))\n", - "Testing select query: SELECT birthplace FROM persons WHERE name = 'Pete Sanderson'\n", + "Testing create query: CREATE TABLE MilitarySpecialists (id INT PRIMARY KEY, real_name VARCHAR(255), primary_specialty VARCHAR(255));\n", + "Testing select query: SELECT real_name FROM MilitarySpecialists WHERE primary_specialty = 'shock paratrooper';\n", "[]\n", - "Testing create query: CREATE TABLE roles (id INT, name VARCHAR(255))\n", - "Testing select query: SELECT name FROM roles WHERE name = 'Jean-Luc Bouvier'\n", + "Testing create query: CREATE TABLE People (Name TEXT, Birthplace TEXT, PRIMARY KEY(Name));\n", + "Testing select query: SELECT Birthplace FROM People WHERE Name = 'Pete Sanderson';\n", "[]\n", - "Testing create query: CREATE TABLE pilots (id INT, real_name VARCHAR(255), callsign VARCHAR(255))\n", - "Testing select query: SELECT real_name FROM pilots WHERE callsign = 'silent attack kayak'\n", + "Testing create query: CREATE TABLE Roles (id INT PRIMARY KEY, name VARCHAR(255), person VARCHAR(255));\n", + "Testing select query: SELECT role FROM Roles WHERE person = 'Jean-Luc Bouvier';\n", + "Error while executing select query: no such column: role\n", + "Testing create query: CREATE TABLE Pilots (id INT PRIMARY KEY, real_name VARCHAR(100), role VARCHAR(100), vehicle VARCHAR(100));\n", + "Testing select query: SELECT real_name FROM Pilots WHERE role = 'pilot' AND vehicle = 'silent attack kayak';\n", "[]\n", - "Testing create query: CREATE TABLE persons (id INT, name VARCHAR(50), birthplace VARCHAR(50), code_name VARCHAR(50))\n", - "Testing select query: SELECT code_name FROM persons WHERE birthplace = 'Liverpool'\n", + "Testing create query: CREATE TABLE Persons (ID INT PRIMARY KEY, Name VARCHAR(100), CodeName VARCHAR(50), BirthPlace VARCHAR(100));\n", + "Testing select query: SELECT CodeName FROM Persons WHERE BirthPlace = 'Liverpool';\n", "[]\n", - "Testing create query: CREATE TABLE medalists (id INT, name VARCHAR(255), sport VARCHAR(255), medal VARCHAR(255))\n", - "Testing select query: SELECT name FROM medalists WHERE sport = 'canoeing'\n", + "Testing create query: CREATE TABLE CanoeingMedalists (ID INT PRIMARY KEY, Name VARCHAR(100), Country VARCHAR(50), MedalType VARCHAR(10));\n", + "Testing select query: SELECT Name FROM CanoeingMedalists;\n", "[]\n", - "Testing create query: CREATE TABLE events (event_id INT, event_name VARCHAR(50), event_type VARCHAR(50), gender VARCHAR(10), weight_class VARCHAR(50))\n", - "Testing select query: SELECT event_name FROM events WHERE gender = 'Women' AND weight_class = 'Half Middleweight'\n", + "Testing create query: CREATE TABLE WomensHalfMiddleweightGames (id SERIAL PRIMARY KEY, game_name VARCHAR(255) NOT NULL, year INT NOT NULL);\n", + "Testing select query: SELECT game_name, year FROM WomensHalfMiddleweightGames;\n", "[]\n", - "Testing create query: CREATE TABLE olympic_medals (athlete_id INT, athlete_name VARCHAR(255), event VARCHAR(255), year INT, city VARCHAR(255), medal VARCHAR(255))\n", - "Testing select query: SELECT athlete_name FROM olympic_medals WHERE year = 2000 AND city = 'Sydney' AND medal = 'Bronze'\n", + "Testing create query: CREATE TABLE OlympicMedals (Year INT, City VARCHAR(50), Medal VARCHAR(10), Event VARCHAR(100), Athlete VARCHAR(100));\n", + "Testing select query: SELECT Athlete FROM OlympicMedals WHERE Year = 2000 AND City = 'Sydney' AND Medal = 'Bronze';\n", "[]\n", - "Testing create query: CREATE TABLE attendance (id INT, opponent VARCHAR(50), attendees INT)\n", - "Testing select query: SELECT COUNT(*) FROM attendance WHERE opponent = 'twins'\n", + "Testing create query: CREATE TABLE GameAttendance (game_id INT PRIMARY KEY, opponent VARCHAR(255), attendees INT);\n", + "Testing select query: SELECT COUNT(*) FROM GameAttendance WHERE opponent = 'twins';\n", "[(0,)]\n", - "Testing create query: CREATE TABLE records (date DATE, record VARCHAR(10))\n", - "Testing select query: SELECT date FROM records WHERE record BETWEEN '41' AND '46'\n", + "Testing create query: CREATE TABLE Records (id INT PRIMARY KEY, date DATE, result VARCHAR(5));\n", + "Testing select query: SELECT date FROM Records WHERE result = '41-46';\n", "[]\n", - "Testing create query: CREATE TABLE scores (id INT, record VARCHAR(10), score INT)\n", - "Testing select query: SELECT score FROM scores WHERE record = '48-55'\n", + "Testing create query: CREATE TABLE Scores (Record VARCHAR(5), Score INT);\n", + "Testing select query: SELECT Score FROM Scores WHERE Record = '48-55';\n", "[]\n", - "Testing create query: CREATE TABLE scores (id INT, record VARCHAR(10), score INT)\n", - "Testing select query: SELECT score FROM scores WHERE record = '44-49'\n", + "Testing create query: CREATE TABLE Scores (Record VARCHAR(50));\n", + "Testing select query: SELECT * FROM Scores WHERE Record = '44-49';\n", "[]\n", - "Testing create query: CREATE TABLE scores (Opponent VARCHAR(50), Record VARCHAR(5), Score INT)\n", - "Testing select query: SELECT Score FROM scores WHERE Opponent = 'white sox' AND Record = '2-0'\n", + "Testing create query: CREATE TABLE games (id INT PRIMARY KEY, opponent VARCHAR(100), score VARCHAR(10), record VARCHAR(5));\n", + "Testing select query: SELECT score FROM games WHERE opponent = 'white sox' AND record = '2-0';\n", "[]\n", - "Testing create query: CREATE TABLE candidates (id INT, name VARCHAR(50), votes INT)\n", - "Testing select query: SELECT votes FROM candidates WHERE name = 'candice sjostrom'\n", + "Testing create query: CREATE TABLE election_votes (id INT PRIMARY KEY, candidate_name VARCHAR(255), votes INT);\n", + "Testing select query: SELECT votes FROM election_votes WHERE candidate_name = 'Candice Sjostrom';\n", "[]\n", - "Testing create query: CREATE TABLE percentages (name VARCHAR(50), percentage DECIMAL(5,2))\n", - "Testing select query: SELECT percentage FROM percentages WHERE name = 'chris wright'\n", + "Testing create query: CREATE TABLE results (id INT PRIMARY KEY, name VARCHAR(100), percentage DECIMAL(5,2));\n", + "Testing select query: SELECT percentage FROM results WHERE name = 'Chris Wright';\n", "[]\n", - "Testing create query: CREATE TABLE candidate_votes (year INT, candidate VARCHAR(50), vote_percentage DECIMAL(5,2), office VARCHAR(50))\n", - "Testing select query: SELECT COUNT(*) FROM candidate_votes WHERE year > 1992 AND vote_percentage = 1.59 AND office = 'US Representative 4'\n", - "[(0,)]\n", - "Testing create query: CREATE TABLE representatives (id INT, name VARCHAR(50), start_year INT, end_year INT)\n", - "Testing select query: SELECT start_year, end_year FROM representatives WHERE name = 'J. Smith Young'\n", + "Testing create query: CREATE TABLE votes (year INT, percentage FLOAT, office VARCHAR(50), candidate_id INT, vote_count INT);\n", + "Testing select query: SELECT SUM(vote_count) AS total_votes FROM votes WHERE year > 1992 AND percentage = 1.59 AND office = 'us representative' AND candidate_id = 4;\n", + "[(None,)]\n", + "Testing create query: CREATE TABLE Representatives (Name VARCHAR(50), StartYear INT, EndYear INT);\n", + "Testing select query: SELECT StartYear, EndYear FROM Representatives WHERE Name = 'J. Smith Young';\n", "[]\n", - "Testing create query: CREATE TABLE politicians (id INT, name VARCHAR(255), party VARCHAR(255))\n", - "Testing select query: SELECT party FROM politicians WHERE name = 'Thomas L. Young'\n", + "Testing create query: CREATE TABLE political_figures (id INT PRIMARY KEY, name VARCHAR(100), party VARCHAR(100));\n", + "Testing select query: SELECT party FROM political_figures WHERE name = 'Thomas L. Young';\n", "[]\n", - "Testing create query: CREATE TABLE country_medals (country_name VARCHAR(50), gold_medals INT, silver_medals INT, bronze_medals INT)\n", - "Testing select query: SELECT MIN(silver_medals + bronze_medals) AS lowest_total_medals FROM country_medals WHERE gold_medals = 0 AND silver_medals > 1 AND bronze_medals > 2\n", + "Testing create query: CREATE TABLE medals (country VARCHAR(50), gold INT, silver INT, bronze INT);\n", + "Testing select query: SELECT MIN(gold + silver + bronze) AS lowest_total_medals FROM medals WHERE gold = 0 AND bronze > 2 AND silver > 1;\n", "[(None,)]\n", - "Testing create query: CREATE TABLE country_medals (country_name VARCHAR(50), rank INT, total_medals INT, silver_medals INT)\n", - "Testing select query: SELECT SUM(silver_medals) AS total_silver_medals FROM country_medals WHERE rank = 14 AND total_medals < 1\n", + "Testing create query: CREATE TABLE Medals (CountryRank INT, TotalMedals INT, SilverMedals INT);\n", + "Testing select query: SELECT SUM(SilverMedals) FROM Medals WHERE CountryRank = 14 AND TotalMedals < 1;\n", "[(None,)]\n", - "Testing create query: CREATE TABLE player_stats (player_id INT, tackles INT, fumble_recoveries INT, forced_fumbles INT)\n", - "Testing select query: SELECT tackles FROM player_stats WHERE fumble_recoveries > 0 AND forced_fumbles = 0\n", - "[]\n", - "Testing create query: CREATE TABLE player_stats (player_name VARCHAR(50), solo_tackles INT, forced_fumbles INT)\n", - "Testing select query: SELECT forced_fumbles FROM player_stats WHERE player_name = 'Jim Laney' AND solo_tackles < 2\n", + "Testing create query: CREATE TABLE player_stats (player_id INT PRIMARY KEY, name VARCHAR(100), tackles INT, fumble_recoveries INT, forced_fumbles INT);\n", + "Testing select query: SELECT tackles FROM player_stats WHERE fumble_recoveries > 0 AND forced_fumbles > 0;\n", "[]\n", - "Testing create query: CREATE TABLE player_stats (player_id INT, solo_tackles INT, total INT)\n", - "Testing select query: SELECT MAX(total) AS high_total FROM player_stats WHERE solo_tackles > 15\n", + "Testing create query: CREATE TABLE PlayerStats (id INT PRIMARY KEY, playerName VARCHAR(100), forcedFumbles INT, soloTackles INT);\n", + "Testing select query: SELECT COUNT(forcedFumbles) FROM PlayerStats WHERE playerName = 'Jim Laney' AND soloTackles < 2;\n", + "[(0,)]\n", + "Testing create query: CREATE TABLE player_stats (player_id INT PRIMARY KEY, player_name VARCHAR(100), solo_tackles INT, total_tackles INT);\n", + "Testing select query: SELECT MAX(total_tackles) AS high_total FROM player_stats WHERE solo_tackles > 15;\n", "[(None,)]\n", - "Testing create query: CREATE TABLE fumble_stats (player_name VARCHAR(50), fumble_recoveries INT, forced_fumbles INT, sacks INT, solo_tackles INT);\n", - "Testing select query: SELECT fumble_recoveries FROM fumble_stats WHERE player_name = 'Scott Gajos' AND forced_fumbles = 0 AND sacks = 0 AND solo_tackles < 2;\n", + "Testing create query: CREATE TABLE player_stats (player_name VARCHAR(50), fumble_recoveries INT, forced_fumbles INT, sacks INT, solo_tackles INT);\n", + "Testing select query: SELECT fumble_recoveries FROM player_stats WHERE player_name = 'Scott Gajos' AND forced_fumbles = 0 AND sacks = 0 AND solo_tackles < 2;\n", + "[]\n", + "Testing create query: CREATE TABLE MatchSchedule (match_id INT PRIMARY KEY, opponent_name VARCHAR(100), match_time TIME, match_venue VARCHAR(100));\n", + "Testing select query: SELECT opponent_name FROM MatchSchedule WHERE match_time = '20:00:00' AND match_venue = 'Camp Nou';\n", + "[]\n", + "Testing create query: CREATE TABLE match_results (match_id INTEGER PRIMARY KEY, team_1 VARCHAR(50), team_2 VARCHAR(50), score_1 INTEGER, score_2 INTEGER, match_time TIME);\n", + "Testing select query: SELECT match_time FROM match_results WHERE score_1 = 3 AND score_2 = 2;\n", + "[]\n", + "Testing create query: CREATE TABLE Matches (match_id INT PRIMARY KEY, home_team VARCHAR(50), away_team VARCHAR(50), ground VARCHAR(100));\n", + "Testing select query: SELECT ground FROM Matches WHERE (home_team = 'Aston Villa' OR away_team = 'Aston Villa');\n", "[]\n", - "Testing create query: CREATE TABLE matches (match_id INT, match_time TIME, stadium VARCHAR(50), opponent VARCHAR(50))\n", - "Testing select query: SELECT opponent FROM matches WHERE match_time = '20:00:00' AND stadium = 'Camp Nou' AND match_time AT TIME ZONE 'GMT' = '20:00:00'\n", + "Testing create query: CREATE TABLE Competitions (id INT PRIMARY KEY, name VARCHAR(255), location VARCHAR(255), start_time TIME, time_zone VARCHAR(10), date DATE);\n", + "Testing select query: SELECT name FROM Competitions WHERE location = 'San Siro' AND TIME(start_time AT TIME ZONE time_zone AT TIME ZONE 'GMT') = '18:30';\n", "Error while executing select query: near \"AT\": syntax error\n", - "Testing create query: CREATE TABLE matches (match_id INT, match_date DATE, match_time TIME, home_team VARCHAR(50), away_team VARCHAR(50), home_score INT, away_score INT)\n", - "Testing select query: SELECT match_time FROM matches WHERE home_score = 3 AND away_score = 2\n", - "[]\n", - "Testing create query: CREATE TABLE grounds (id INT, name VARCHAR(50))\n", - "Testing select query: SELECT name FROM grounds WHERE id = (SELECT ground_id FROM matches WHERE team = 'Aston Villa')\n", - "Error while executing select query: no such table: matches\n", - "Testing create query: CREATE TABLE competitions (id INT, competition_type VARCHAR(50), venue VARCHAR(50), start_time TIME, timezone VARCHAR(10))\n", - "Testing select query: SELECT competition_type FROM competitions WHERE venue = 'San Siro' AND start_time = '18:30:00' AND timezone = 'GMT'\n", - "[]\n", - "Testing create query: No table creation needed for this question\n", - "Error while creating the SQLite table: near \"No\": syntax error\n", - "Testing select query: SELECT COUNT(*) AS total_decile FROM schools WHERE locality = 'redwood' AND type = 'decile'\n", - "Error while executing select query: no such table: schools\n", - "Testing create query: CREATE TABLE reports (id INT, report_name VARCHAR(255), circuit_name VARCHAR(255))\n", - "Testing select query: SELECT * FROM reports WHERE circuit_name = 'Tripoli'\n", + "Testing create query: CREATE TABLE LocalityDecile (LocalityID INT PRIMARY KEY, LocalityName VARCHAR(255), Decile INT);\n", + "Testing select query: SELECT SUM(Decile) AS TotalDecile FROM LocalityDecile WHERE LocalityName = 'redwood school locality';\n", + "[(None,)]\n", + "Testing create query: CREATE TABLE report (id INT, title VARCHAR(255), content TEXT, date DATE, PRIMARY KEY(id));\n", + "Testing select query: SELECT * FROM report WHERE content LIKE '%Circuit of Tripoli%';\n", "[]\n" ] } @@ -1439,7 +1705,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 140, "id": "04532d59", "metadata": {}, "outputs": [], @@ -1464,7 +1730,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 141, "id": "cbaa4bdf", "metadata": {}, "outputs": [ @@ -1472,12 +1738,12 @@ "data": { "text/plain": [ "unit_test_evaluation\n", - "SQL correct 46\n", - "SQL incorrect 4\n", + "SQL correct 48\n", + "SQL incorrect 2\n", "Name: count, dtype: int64" ] }, - "execution_count": 36, + "execution_count": 141, "metadata": {}, "output_type": "execute_result" } @@ -1488,7 +1754,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 142, "id": "1ada474e", "metadata": { "scrolled": true @@ -1498,13 +1764,13 @@ "data": { "text/plain": [ "evaluation_score\n", - "5 45\n", - "3 3\n", - "4 2\n", + "5 33\n", + "4 16\n", + "3 1\n", "Name: count, dtype: int64" ] }, - "execution_count": 37, + "execution_count": 142, "metadata": {}, "output_type": "execute_result" } @@ -1525,7 +1791,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 143, "id": "d277222d", "metadata": {}, "outputs": [], @@ -1539,7 +1805,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 144, "id": "6da35c99", "metadata": {}, "outputs": [], @@ -1549,7 +1815,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 145, "id": "4116cb37", "metadata": {}, "outputs": [ @@ -1588,7 +1854,7 @@ " \n", " 0\n", " What venue did the parntership of shoaib malik...\n", - " {\\n \"create\": \"CREATE TABLE partnerships (i...\n", + " {\"create\":\"CREATE TABLE partnerships (\\n id I...\n", " True\n", " True\n", " 5\n", @@ -1599,18 +1865,18 @@ " \n", " 1\n", " What venue did the partnership of herschelle g...\n", - " {\\n \"create\": \"No table creation needed for...\n", + " {\"create\":\"CREATE TABLE cricket_partnerships (...\n", + " True\n", " True\n", - " False\n", " 5\n", - " SQL incorrect\n", + " SQL correct\n", " 1\n", " gpt-4\n", " \n", " \n", " 2\n", " What is the number Played that has 310 Points ...\n", - " {\\n \"create\": \"CREATE TABLE games (Played I...\n", + " {\"create\":\"CREATE TABLE PointsTable (\\n Num...\n", " True\n", " True\n", " 5\n", @@ -1621,7 +1887,7 @@ " \n", " 3\n", " What Losing bonus has a Points against of 588?\n", - " {\\n \"create\": \"CREATE TABLE losing_bonuses ...\n", + " {\"create\":\"CREATE TABLE teams (\\n id INT PR...\n", " True\n", " True\n", " 5\n", @@ -1632,10 +1898,10 @@ " \n", " 4\n", " What Tries against has a Losing bonus of 7?\n", - " {\\n \"create\": \"CREATE TABLE tries_against (...\n", + " {\"create\":\"CREATE TABLE TriesAgainst (ID INT, ...\n", " True\n", " True\n", - " 5\n", + " 4\n", " SQL correct\n", " 1\n", " gpt-4\n", @@ -1652,22 +1918,22 @@ "3 What Losing bonus has a Points against of 588? \n", "4 What Tries against has a Losing bonus of 7? \n", "\n", - " response format sql \\\n", - "0 {\\n \"create\": \"CREATE TABLE partnerships (i... True True \n", - "1 {\\n \"create\": \"No table creation needed for... True False \n", - "2 {\\n \"create\": \"CREATE TABLE games (Played I... True True \n", - "3 {\\n \"create\": \"CREATE TABLE losing_bonuses ... True True \n", - "4 {\\n \"create\": \"CREATE TABLE tries_against (... True True \n", + " response format sql \\\n", + "0 {\"create\":\"CREATE TABLE partnerships (\\n id I... True True \n", + "1 {\"create\":\"CREATE TABLE cricket_partnerships (... True True \n", + "2 {\"create\":\"CREATE TABLE PointsTable (\\n Num... True True \n", + "3 {\"create\":\"CREATE TABLE teams (\\n id INT PR... True True \n", + "4 {\"create\":\"CREATE TABLE TriesAgainst (ID INT, ... True True \n", "\n", " evaluation_score unit_test_evaluation run Evaluating Model \n", "0 5 SQL correct 1 gpt-4 \n", - "1 5 SQL incorrect 1 gpt-4 \n", + "1 5 SQL correct 1 gpt-4 \n", "2 5 SQL correct 1 gpt-4 \n", "3 5 SQL correct 1 gpt-4 \n", - "4 5 SQL correct 1 gpt-4 " + "4 4 SQL correct 1 gpt-4 " ] }, - "execution_count": 40, + "execution_count": 145, "metadata": {}, "output_type": "execute_result" } @@ -1678,7 +1944,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 146, "id": "ed800f0c", "metadata": {}, "outputs": [ @@ -1725,11 +1991,11 @@ " \n", " 2\n", " SQL correct\n", - " 46\n", + " 48\n", " \n", " \n", " SQL incorrect\n", - " 4\n", + " 2\n", " \n", " \n", "\n", @@ -1740,11 +2006,11 @@ "run unit_test_evaluation \n", "1 SQL correct 42\n", " SQL incorrect 8\n", - "2 SQL correct 46\n", - " SQL incorrect 4" + "2 SQL correct 48\n", + " SQL incorrect 2" ] }, - "execution_count": 41, + "execution_count": 146, "metadata": {}, "output_type": "execute_result" } @@ -1769,13 +2035,13 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 147, "id": "e2b4aa03-42f5-4c30-a610-e553937bf160", "metadata": {}, "outputs": [ { "data": { - "image/png": "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98CBAzVo0CAdPnxYtWvXliRt2rRJH3zwgcaPH58zVQIAAABALrEZY8zNRnJzc5PNZtPNRrXZbEpOTs624rJDXFycAgICFBsbK39/f1eXI9vupa4uAXe6ak+4ugLc4TKx2QcA4K6U2WyQqSNJUVFR2VYYAAAAANzOMhWSSpYsmdN1AAAAAMBtIUs3kz116pTWrVunmJgYpaSkOAwbOHBgpuczbtw4LV68WPv375ePj4/q1q2rCRMmqFy5cvZxrl69queff17z589XQkKCmjZtqmnTpqlw4cJZKR0AAAAAbsjpkDRnzhw9++yz8vT0VIECBWSz2ezDbDabUyFpzZo16tevnx544AElJSXppZdeUpMmTfT777/L19dXkjRkyBD98MMPWrhwoQICAtS/f3+1bdtW69evd7Z0AAAAALipTHXcYFW8eHE999xzGjlypNzcnO5B/IbOnj2rQoUKac2aNapfv75iY2MVFBSkL774Qk8++aQkaf/+/apQoYI2btxo713PKiEhQQkJCfbncXFxKl68OB034O5Bxw24RXTcAAD4t8psxw1Op5z4+Hh16tQp2wOSJMXGxkqS8ufPL0navn27rl27prCwMPs45cuXV4kSJbRx48Z05zFu3DgFBATYH8WLF8/2OgEAAADcvZxOOj179tTChQuzvZCUlBQNHjxY9erVU+XKlSVJp0+flqenpwIDAx3GLVy4sE6fPp3ufEaOHKnY2Fj748SJE9leKwAAAIC7l9PXJI0bN06PP/64li1bpipVqsjDw8Nh+OTJk7NUSL9+/fTbb79p3bp1WZo+lZeXl7y8vG5pHgAAAAD+vbIUkpYvX27vge76jhuyon///vr++++1du1aFStWzN4eHBysxMREXbx40eFo0pkzZxQcHJylZQEAAADAjTgdkiZNmqRZs2YpPDz8lhdujNGAAQP0zTffaPXq1QoNDXUYXrNmTXl4eCgiIkLt2rWTJB04cEB//PGH6tSpc8vLBwAAAIDrOR2SvLy8VK9evWxZeL9+/fTFF1/o22+/Vb58+ezXGQUEBMjHx0cBAQHq2bOnhg4dqvz588vf318DBgxQnTp10u3ZDgAAAABuldMdNwwaNEjvvfdetix8+vTpio2NVcOGDVWkSBH746uvvrKPM2XKFD3++ONq166d6tevr+DgYC1evDhblg8AAAAA13P6Pklt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", + "image/png": "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3pn/HP7444/2tvT0dL3zzjtXXIYxJttuhjP/yb7S+nB3d1erVq305ZdfOnRJfeLECX388cdq0qSJw6mHuXHmzJks72fmkYHcnnJ3uXWd3ZEEZ+Z/qeeff14XLlzQlClTsgyrUKGCEhIStHPnTntbXFxcjt1AX62LFy9q9uzZ9udpaWmaPXu2goODVb9+fUn//sJ/9OhRvfvuu1mmP3/+vM6dO5enZUdERMjLy0uvv/66w/v3/vvvKyEhQffdd1+e5puTXr16qUyZMvbe4OrXr68KFSro1VdfdbgJdabMrqLd3NzUqVMnLVu2TFu3bs0yXmbt7dq10+bNm+2nbkr/Xsf3zjvvKDQ09IrXaZUqVUp169bV/PnzHU5lXbVqVZbrmS7tFtvNzc3e419ePpPt2rXT8ePHHXp9u3jxot544w35+/vbT7EtKNlta6R/bxBuldv3oqBc+hmS/v3Obty40aH78a+//jrLacPA9YAjScBVKlGihMaOHavnn39eTZs2VYcOHVSkSBGtX79en3zyiVq1aqX27dvny7J8fX1VvXp1ffbZZ6pcubKKFSummjVr5vqcdKsKFSropZde0ujRo3Xo0CF16tRJRYsWVWxsrL744gsNGDBAI0eO1A8//KDBgwera9euqly5si5evKgFCxbI3d1dkZGR9vnVr19f33//vaZNm6bSpUsrLCws26MDVtu3b9eHH36YbW3h4eH25+3atVPRokU1cuTILMuVpFatWtl/SX7ssceUlJSkd999VyVKlLji9S41atRQw4YNNXr0aJ0+fVrFihXTp59+miUYVq1aVRUqVNDIkSN19OhRBQQE6PPPP8/23PnMf6iHDh2q1q1by93d3f5L66Veeukl+32HnnjiCXl4eGj27NlKTU3NNjhcyfz58/XWW2+pc+fOqlChgv755x+9++67CggIULt27a44/ZXW9QsvvKAff/xR9913n8qXL6/4+Hi99dZbKlOmjMNF+rmVeTQpu9OievTooWeeeUadO3fW0KFDlZycrFmzZqly5cr2i9fzU+nSpTV58mQdOnRIlStX1meffaaYmBi988479hs7P/zww1q4cKEef/xxrV69Wo0bN1Z6err27NmjhQsXasWKFdleRH8lwcHBGj16tCZMmKA2bdqoQ4cO2rt3r9566y3deeed+X7zUU9PTw0bNkxPP/20li9f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Vark0B4TE6MSJUo4Na/4+Hj17t1bcXFxCgwMVO3atbVixQr70ajp06fLzc1NkZGRSk1NVevWrfXWW285WzIAAAAA5JrTIal///4aMGCADh48qEaNGkn695qkyZMnO3SYkBvvv//+ZYf7+Pho5syZmjlzprNlAgAAAECeOB2SxowZo6JFi2rq1KkaPXq0JKl06dIaP368hg4dmu8FAgAAAEBhspmruPX6P//8I0kqWrRovhWU33J7V93CYtu5zNUl4HpXp4OrK8B17io2+wAAXNdymw2cPpIUGxurixcvqlKlSg7haN++ffL09FRoaGieCgYAAACAa4GbsxNERUVp/fr1Wdo3bdqkqKio/KgJAAAAAFzG6ZC0Y8cO+01krRo2bKiYmJj8qAkAAAAAXMbpkGSz2ezXIlklJCQoPT09X4oCAAAAAFdxOiQ1bdpUEydOdAhE6enpmjhxopo0aZKvxQEAAABAYXO644bJkyeradOmqlKliu6++25J0k8//aTExET98MMP+V4gAAAAABQmp48kVa9eXTt37lS3bt0UHx+vf/75R71799aePXtUs2bNgqgRAAAAAAqN00eSpH9vHvvyyy/ndy0AAAAA4HJOH0mS/j297qGHHlKjRo109OhRSdKCBQv0888/52txAAAAAFDYnA5Jn3/+uVq3bi1fX19t375dqampkv7t3Y6jSwAAAACud06HpJdeeklvv/223n33XXl6etrbGzdurO3bt+drcQAAAABQ2JwOSXv37lXTpk2ztAcGBurs2bP5URMAAAAAuIzTISkkJET79+/P0v7zzz/r9ttvz5eiAAAAAMBVnA5J/fv317Bhw7Rp0ybZbDYdO3ZMH330kUaOHKmBAwcWRI0AAAAAUGic7gL82WefVUZGhlq2bKnk5GQ1bdpU3t7eGjlypIYMGVIQNQIAAABAobEZY0xeJkxLS9P+/fuVlJSk6tWry9/fX+fPn5evr29+13hVEhMTFRgYqISEBAUEBLi6HNl2LnN1Cbje1eng6gpwncvjZh8AgOtebrNBnu6TJEleXl6qXr26GjRoIE9PT02bNk1hYWF5nR0AAAAAXBNyHZJSU1M1evRo/ec//1GjRo20dOlSSdLcuXMVFham6dOna/jw4QVVJwAAAAAUilxfkzR27FjNnj1bERERWr9+vbp27aq+fftq48aNmjZtmrp2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Hn74YVO0aFHTp08fM3fuXBMYGGi+/PJLU61aNePu7m5iY2NNSkqKeeqpp0zp0qVNkSJFTIMGDczq1asd5vfzzz+bZs2aGV9fXxMUFGRatWplTp8+bfr06WMkOTxiY2Nz/ToB4GZyLexfrOPHxsYaSebzzz83zZs3N76+vqZ27dpm/fr1DtPktA8wxpiUlBQzZMgQExwcbLy9vU3jxo3N5s2b7dOuXr3aSDLffvutqVevnvH09DSrV682zZo1M4MGDTLDhg0zxYsXN82bNzfGGLNr1y7Tpk0b4+fnZ0qUKGEeeughc/LkSfv80tPTzeTJk02FChWMl5eXKVu2rHnppZfsr836aNasWa7XC3ApfkIGLuHv7y9/f38tXbpUqamp2Y6zcuVKnTp1SiNHjswyrH379qpcubI++eSTPC0/IyNDbdu21bp16/Thhx/q999/16RJk+Tu7i5J2rZtm7p166YePXpo165dGj9+vMaMGaN58+Y5zOfVV19VnTp1tGPHDo0ZM0aSlJycrMmTJ+u9997Tb7/9phIlSmjw4MHasGGDPv30U+3cuVNdu3ZVmzZttG/fPklSTEyMWrZsqerVq2vDhg36+eef1b59e6Wnp+u1115TeHi4+vfvr7i4OMXFxals2bJ5et0AcKNz9f4lJ88995xGjhypmJgYVa5cWT179tTFixclXX4fIEmjRo3S559/rvnz52v79u2qWLGiWrdurdOnTzss49lnn9WkSZO0e/du1a5dW5I0f/58eXl5ad26dXr77bd19uxZtWjRQnfccYe2bt2q5cuX68SJE+rWrZt9PqNHj9akSZM0ZswY/f777/r4449VsmRJSdLmzZslSd9//73i4uK0ZMmSfF1PuMm4OqUB16LFixebW265xfj4+JhGjRqZ0aNHm19++cU+fNKkSUaSOXPmTLbTd+jQwVSrVs3+XE780rdixQrj5uZm9u7dm+3wBx980Nx7770ObU8//bSpXr26/Xn58uVNp06dHMaZO3eukWRiYmLsbYcPHzbu7u7m6NGjDuO2bNnSjB492hhjTM+ePU3jxo1zrLdZs2Zm2LBhuXptAHCzc+X+5dLxM48kvffee/bhv/32m5Fkdu/ebYy5/D4gKSnJeHp6mo8++sjelpaWZkqXLm2mTJlijPm/I0lLly51mLZZs2bmjjvucGh78cUXTatWrRza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0OrVqzV//nzNmzdP8+bNy3bcLVu2SJLmzp2ruLg4+3NndO3aVfHx8fruu++0bds21atXTy1bttTp06clSb169VKZMmW0ZcsWbdu2Tc8++6w8PT3VqFEjzZgxQwEBAYqLi1NcXJxGjhyZp9fctWtXnTp1SqtXr7a3nT59WsuXL1evXr0kSUlJSWrXrp2io6O1Y8cOtWnTRu3bt9eff/6Zp2VKUkZGhsqUKaNFixbp999/19ixY/Xf//5XCxculCSNHDlS3bp1U5s2beyvsVGjRlnmc/ToUbVr10533nmnfvnlF82aNUvvv/++XnrpJYfx5s+fLz8/P23atElTpkzRCy+8oFWrVuW5fgC40XG6HQBAknTLLbfozTfflLu7u6pWrar77rtP0dHR6t+/f5ZxM0+TCwoKytPpXz///LM2b96s+Ph4eXt7S5JeffVVLV26VIsXL9aAAQP0559/6umnn1bVqlUlSZUqVbJPHxgYaD9CdCUJCQny9/d3aLv77rv13Xff6ZZbblHbtm318ccfq2XLlpKkxYsX69Zbb9U999wjSapTp47q1Kljn/bFF1/UF198oa+++kqDBw92+rVLkqenpyZMmGB/HhYWpg0bNmjhwoXq1q2b/P395evrq9TU1Mu+xrfeektly5bVm2++KZvNpqpVq+rYsWN65plnNHbsWLm5/ftbaO3atTVu3DhJ/67HN998U9HR0br33nvzVD8A3OgISQAASVKNGjXk7u5uf16qVCnt2rWrQJb1yy+/KCkpScWLF3doP3/+vA4cOCBJGjFihB599FEtWLBAERER6tq1qypUqOD0sooWLart27c7tPn6+tr/7tWrl/r376+33npL3t7e+uijj9SjRw97wEhKStL48eP1zTffKC4uThcvXtT58+ev6kiSJM2cOVNz5szRn3/+qfPnzystLU1169Z1ah67d+9WeHi4wzVWjRs3VlJSkv766y+VK1dO0r8hyapUqVKKj4+/qvoB4EZGSAKAG1hAQIASEhKytJ89e1aBgYEObZ6eng7PbTZblmt18ktSUpJKlSplv0bHKrPXuvHjx+vBBx/UN998o++++07jxo3Tp59+qs6dOzu1LDc3N1WsWDHH4e3bt5cxRt98843uvPNO/fTTT5o+fbp9+MiRI7Vq1Sq9+uqrqlixonx9ffXAAw8oLS0tx+VJkjHG3ma9tkuSPv30U40cOVJTp05VeHi4ihYtqldeeUWbNm1y6rXlVmG+twBwIyAkAcANrEqVKlq5cmWW9u3bt6ty5cpXNW9PT0+lp6fnadp69erp+PHj8vDwyLbTh0yVK1dW5cqVNXz4cPXs2VNz585V586d5eXlledlX8rHx0ddunTRRx99pP3796tKlSqqV6+effi6desUFRVlD2dJSUmX7bo881TEuLg43XHHHZKU5b5G69atU6NGjfTEE0/Y2zKPoGXKzWusVq2aPv/8cxlj7EeT1q1bp6JFi6pMmTKXf+EAgBzRcQMA3MAGDhyoP/74Q0OHDtXOnTu1d+9eTZs2TZ988omeeuqpq5p3aGiooqOjdfz4cZ05c8apaSMiIhQeHq5OnTpp5cqVOnTokNavX6/nnntOW7du1fnz5zV48GCtWbNGhw8f1rp167RlyxZVq1bNvuykpCRFR0fr77//VnJyco7LMsbo+PHjWR7WIym9evXSN998ozlz5tg7bMhUqVIlLVmyRDExMfrll1/04IMPXvYojK+vrxo2bKhJkyZp9+7dWrt2rZ5//vks89y6datWrFihP/74Q2PGjMnS+UVoaKj9Pfv777+zHI2SpCeeeEJHjhzRkCFDtGfPHn355ZcaN26cRowYYT+iBQBwHltQALiB3X777frxxx+1Z88eRURE6K677tLChQu1aNEih3sY5cXUqVO1atUqlS1b1n7EJLdsNpu+/fZbNW3aVH379lXlypXVo0cPHT58WCVLlpS7u7tOnTql3r17q3LlyurWrZvatm1r7+ygUaNGevzxx9W9e3cFBwdrypQpOS4rMTFRpUqVyvKwXpPTokULFStWTHv37tWDDz7oMP20adN0yy23qFGjRmrfvr1at27tcKQpO3PmzNHFixdVv359Pfnkk1l6m3vsscfUpUsXde/eXXfddZdOnTrlcFRJkvr3768qVaroP//5j4KDg7Vu3bosy7ntttv07bffavPmzapTp44ef/xx9evXL0soAwA4x2asJ00DAAAAwE2OI0kAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABY/D8R0vJ6QzLdZAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -1824,7 +2090,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 148, "id": "7228eac7-e0a9-473d-9432-e558bbc91841", "metadata": {}, "outputs": [ @@ -1860,34 +2126,30 @@ " \n", " \n", " \n", - " 1\n", - " 1\n", - " 1\n", - " \n", - " \n", + " 1\n", " 3\n", - " 2\n", + " 1\n", " \n", " \n", " 4\n", - " 4\n", + " 16\n", " \n", " \n", " 5\n", - " 43\n", + " 33\n", " \n", " \n", " 2\n", " 3\n", - " 3\n", + " 1\n", " \n", " \n", " 4\n", - " 2\n", + " 16\n", " \n", " \n", " 5\n", - " 45\n", + " 33\n", " \n", " \n", "\n", @@ -1896,16 +2158,15 @@ "text/plain": [ " Number of records\n", "run evaluation_score \n", - "1 1 1\n", - " 3 2\n", - " 4 4\n", - " 5 43\n", - "2 3 3\n", - " 4 2\n", - " 5 45" + "1 3 1\n", + " 4 16\n", + " 5 33\n", + "2 3 1\n", + " 4 16\n", + " 5 33" ] }, - "execution_count": 47, + "execution_count": 148, "metadata": {}, "output_type": "execute_result" } @@ -1930,13 +2191,13 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 149, "id": "b2a18a78-55ec-43f6-9d62-929707a94364", "metadata": {}, "outputs": [ { "data": { - "image/png": "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b18TFhaWocZx48aZK78iLly4kGG5Vq1aOdVijDFVqlQxjRs3zrDsl19+aSSZL7/80hhjTHJysilWrJipWrWquXjxomO5NWvWGElm7NixTnVKMhMnTnTq86677jI1atTIsK0r9enTx0gyBQsWNJ07dzbTp083e/fuzbDc2LFjjSSzfPnyDPPS0tKMMcbMmjXLSDLvvvuuY15ycrKpW7euCQgIMAkJCcYYY2JiYowkExQUZOLi4pz6at68ualWrZq5dOmSU//16tUzFStWdLRFR0eb++6777rP70pjxowx3t7e5vTp0462pKQkExIS4rRPBAcHm0GDBrncf/o+vH37dnPo0CHj5eVlBg8e7JjfuHFjU6VKFcd0+muxcOHCDH1duU+m73uPPPKIoy0lJcWUKlXK2Gw2M3XqVEf7mTNnjJ+fn+nbt6+jLX0/u+OOOxzvhTHGfPjhh0aSefXVV40x/7zeFStWNK1atXK8t8b8s5+XK1fOtGzZMkNNvXr1ytLrM3ToUCPJfP311462c+fOmXLlypmyZcua1NRUp+ef1fdAkhkwYIA5efKkiYuLMzt27DCtW7c2kszLL7/sWG7JkiXGw8PDafvGGDNv3jwjyWzZssUYY8yBAweMh4eH6dy5s1NNxvzf/h4XF2d8fHzMvffe67TMG2+8YSSZBQsWONoaN25sJJl58+Y59bVy5Uojybz00kuOtpSUFNOwYUOn/eLMmTMZnktWWffJdDfyHTN69GiXtne973FjMn53Jicnm6pVq5pmzZo52rLyXhhjTFhYmJFkNm/e7GiLi4szdrvdjBgx4rp1Z3UfSn9+MTExTutf+T1uzP+974sXL3a0JSUlmdDQUNO1a9fr1gTkRRxJAtxo9uzZWr9+vdPD+qtbs2bNVKRIES1dutTRdubMGa1fv97p12BPT0/HNS5paWk6ffq0UlJSVLNmzSyfNpUVfn5+jn+n/3rauHFj/f7774qPj3e5vx07diguLk5PPPGE07VK9913nyIiIjIdbemxxx5zmm7YsKF+//33625r4cKFeuONN1SuXDmtWLFCI0eOVOXKldW8eXOn024+/vhjRUdHq3Pnzhn6SD8V6tNPP1VoaKh69erlmOft7a3BgwcrMTFRmzZtclqva9euKlq0qGP69OnT2rhxo3r06KFz5845/frcqlUrHThwwFFTSEiIfv31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ZVOkSBGzePFixzq9evUyPXv2vGqfJ0+eNJLMzz//bIwxJiYmxkgyP/74ozHGmIULF5rg4GCndVasWGGu919TlSpVzOuvv+6YDgsLMzNnznRa5sq+69WrZwYOHOi0TPfu3U3btm0d05LM888/75hOTEw0kszatWuvWssbb7xhChQoYAIDA03Tpk3NxIkTzaFDhxzz58+fbwIDA82pU6cyXT+rdQ0dOtRpmebNm5vJkyc7tS1ZssSUKFHiqrUCALKOI0kAAElS06ZNtWvXLqfHY489Jkny8vJSjx499N5770n656jRJ598ot69ezvWP3DggHr16qXy5csrKChIZcuWlSTHUZ8bkZiYqJEjR6py5coKCQlRQECA9u7d63Kfe/fuVf369Z3a6tevr7179zq1RUVFOf7t7++voKAgxcXFXbXfQYMGKTY2Vu+9957q1q2rjz76SFWqVNH69eslSbt27dJdd92lQoUK3VRdNWvWdJr+6aefNHHiRAUEBDgeAwcO1PHjx3XhwoWr1gsAyBoGbgAASPonFISHh191fu/evdW4cWPFxcVp/fr18vPzcxr9rn379goLC9Nbb72lkiVLKi0tTVWrVlVycnKm/Xl4eMgY49R2+fJlp+mRI0dq/fr1mj59usLDw+Xn56du3bpdtc+bdeWACDab7bqnCwYGBqp9+/Zq3769Jk2apFatWmnSpElq2bJltg0e4e/v7zSdmJioCRMmqEuXLhmW9fX1zZZtAsDtjCNJAIAsqVevnkqXLq2lS5fqvffeU/fu3R2h4tSpU9q/f7+ef/55NW/eXJUrV9aZM2eu2V/RokV17tw5nT9/3tF25T2UtmzZon79+qlz586qVq2aQkND9ccffzgt4+Pjc9VrgtJVrlxZW7ZsydB3ZGTkdZ61a2w2myIiIhzPKSoqSrt27brqdU03Wtfdd9+t/fv3Kzw8PMPDw4P/2gHgZnEkCQAgSUpKSlJsbKxTm5eXl4oUKeKYfuCBBzRv3jz99ttvToMLFCxYUIULF9abb76pEiVK6M8//9To0aOvub3atWurQIECevbZZzV48GBt27ZNixYtclqmYsWKWr58udq3by+bzaYXXnghw5GdsmXLavPmzbr//vtlt9ud6k339NNPq0ePHrrrrrvUokULrV69WsuXL3caKc9Vu3bt0rhx4/TQQw8pMjJSPj4+2rRpkxYsWKBRo0ZJknr16qXJkyerU6dOmjJlikqUKKEff/xRJUuWVN26dW+4rrFjx6pdu3YqU6aMunXrJg8PD/3000/65ZdfNGnSpBt+TgCA/8/dF0UBANyvb9++RlKGR6VKlZyW27Nnj5FkwsLCTFpamtO89evXm8qVKxu73W6ioqLMV199ZSSZFStWGGMyDtxgzD8DNYSHhxs/Pz/Trl078+abbzoN3BATE2OaNm1q/Pz8TOnSpc0bb7xhGjdubIYMGeJYZuvWrSYqKsrY7XbHupkNCjFnzhxTvnx54+3tbe68806nQSiMMU61pgsODjYLFy7M9DU7efKkGTx4sKlataoJCAgwgYGBplq1amb69OkmNTXVsdwff/xhunbtaoKCgkyBAgVMzZo1zbZt226qLmOM+eyzz0y9evWMn5+fCQoKMrVq1TJvvvlmprUCAFxjM+aKE8IBAAAA4DbGicsAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABY/D/mvoRj+3Y9QgAAAABJRU5ErkJggg==", + "image/png": "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WKCoqCg98sgjmj17tiIjI3Xvvfdq3rx5jmXmzp2rypUrq1atWlq+fLmWL1+uRx99NN8+ly5dqv79+8vT01PTpk3T8OHDtWrVKrVs2TLXH1BZWVnq1KmTypUrp1mzZqlNmzaaPXt2rqND54qKipL03x9Kp0+fPu+yqampatWqlZ5//nndeOONevbZZ3X33Xdrz549OnjwoCTp33//Vdu2bbV8+XINGjRITz/9tIKDgxUXF6dnn302V59LlizR888/rzvvvFOzZ89WaGiofv75ZzVt2lS7d+/W+PHjNXv2bPn7+6tXr15avXq147mTJk3S5MmT1a5dO73wwgt69NFHdfXVV583xDRq1EjVqlXT22+/nWveihUrVLZsWcevxXfffbcWLFigvn37av78+Ro7dqz8/Py0e/fu875POapWrarBgwfrpZde0qFDhwr0nIIaMGCAsrOzNX36dDVp0kRTp07V3Llz1bFjR1111VWaMWOGoqOjNXbsWH322We5nv/kk0/q//7v/zRu3DiNHDlSmzZtUocOHfTvv/86lvn444/VunVrpaSkaOLEiXrqqad08uRJ3XDDDfr2229z9XnzzTfr9OnTeuqppzR8+PB8az969KiaN2+ujRs36t5779WTTz6pM2fOqEePHo7Pt3Xr1lq+fLmk/05/yvm+uCo5OVknTpxQ2bJlHW3Z2dnq0aOHZs2ape7du+v5559Xr169NGfOHA0YMMDp+ZMnT9btt98ub29vTZkyRZMnT1ZkZKQ+/vhjxzKTJk3SiBEjFBERodmzZ6tv375atGiRbrzxRmVmZjr1d+zYMXXp0kUNGjTQ3Llz1a5dOxlj1LNnTy1fvly33Xabpk6dqoMHDzqCjVXfvn21evVqDR06VPPnz9fIkSN16tQp/fHHH/m+B48++qjuvPNOSf+d/rZ8+XLdddddklzbx5w9e1adOnVSWFiYZs2apb59+xbo/c9vP57j2Wef1bXXXqspU6boqaeekpeXl26++eZc1wEV5LOQpP3796tfv37q2LGjZs+erbJlyyouLk4///zzBevN7zWcuw256sSJE+rcubNiY2M1e/Zs1apVS+PGjdP69esvuk/ArQyAYrdkyRIjKc+H3W53LLdx40Yjyaxdu9bp+V27djXVqlVzTJ89e9akp6c7LXPixAlTsWJFc8cddzi1SzITJ050TA8ZMsRERUXlqnHixInm3F3E6dOncy3XqVMnp1qMMaZu3bqmTZs2uZb95JNPjCTzySefGGOMycjIMGFhYaZevXrm33//dSy3bt06I8lMmDDBqU5JZsqUKU59XnvttaZhw4a51nWuwYMHG0mmbNmypnfv3mbWrFlm9+7duZabMGGCkWRWrVqVa152drYxxpi5c+caSea1115zzMvIyDDNmjUzAQEBJiUlxRhjTGJiopFkgoKCTFJSklNf7du3N/Xr1zdnzpxx6r958+amRo0ajrbY2Fhz0003XfD1nSs+Pt54e3ub48ePO9rS09NNSEiI0zYRHBxsRowY4XL/Odvwd999ZxISEoyXl5cZOXKkY36bNm1M3bp1HdM578WSJUty9XXuNpmz7d15552OtrNnz5rKlSsbm81mpk+f7mg/ceKE8fPzM0OGDHG05WxnV111leOzMMaYt99+20gyzz77rDHmv/e7Ro0aplOnTo7P1pj/tvOqVauajh075qpp4MCBBXp/Ro0aZSSZzz//3NF26tQpU7VqVVOlShWTlZXl9PoL+hlIMsOGDTN///23SUpKMtu2bTOdO3c2kszTTz/tWG758uXGw8PDaf3GGLNw4UIjyXz55ZfGGGP27dtnPDw8TO/evZ1qMub/be9JSUnGx8fH3HjjjU7LvPDCC0aSWbx4saOtTZs2RpJZuHChU19r1qwxkszMmTMdbWfPnjWtWrVy2i5OnDiR67UUlHWbzHEx+5jx48e7tL4L7ceNyb3vzMjIMPXq1TM33HCDo60gn4UxxkRFRRlJ5rPPPnO0JSUlGbvdbh588MEL1l3QbSjn9SUmJjo9/9z9uDH/73NftmyZoy09Pd2Eh4ebvn37XrAmoCTiSBLgRvPmzdOmTZucHtZf3W644QaVL19eK1ascLSdOHFCmzZtcvo12NPT03GNS3Z2to4fP66zZ8+qUaNGBT5tqiD8/Pwc/8759bRNmzb67bfflJyc7HJ/27ZtU1JSku69916na5Vuuukm1apVK8/Rlu6++26n6VatWum333674LqWLFmiF154QVWrVtXq1as1duxY1a5dW+3bt3c67ebdd99VbGysevfunauPnFOhPvjgA4WHh2vgwIGOed7e3ho5cqRSU1O1ZcsWp+f17dtXFSpUcEwfP35cH3/8sfr3769Tp045/frcqVMn7du3z1FTSEiIfv75Z+3bt++Cr9FqwIAByszM1KpVqxxtH374oU6ePOm07YSEhGjr1q2XdBSoWrVquv322/Xiiy/q8OHDF93Puf73v/85/u3p6alGjRrJGKNhw4Y52kNCQlSzZs08t4HBgwcrMDDQMd2vXz9VqlRJH3zwgSRp586d2rdvn2699VYdO3bM8TmkpaWpffv2+uyzz5Sdne3U57nbX34++OADNW7c2OmUvICAAN155536/fffHadcXoxXXnlFFSpUUFhYmBo1aqTNmzfr4Ycf1pgxYxzLvPPOO6pdu7Zq1arldITjhhtukCTHqbhr1qxRdna2JkyYIA8P5z8Jcrb3jz76SBkZGRo1apTTMsOHD1dQUFCu76ndbs91mvAHH3wgLy8v3XPPPY42T09P3X///U7L+fn5ycfHR59++qlOnDhxsW+Rw8XsY6w1FsSF9uOS877zxIkTSk5OVqtWrZz2zwX5LHLUqVNHrVq1ckxXqFAh3+9BXgqyDbkqICDA6TonHx8fNW7cuMA1ASUNAzcAbtS4cePzXvDr5eWlvn376o033lB6errsdrtWrVqlzMzMXKfMvPrqq5o9e7b27NnjdPpLXqMuXawvv/xSEydO1Ndff53rtLXk5GQFBwe71N+BAwckSTVr1sw1r1atWvriiy+c2nx9fZ3ChiSVLVu2QH9MeXh4aMSIERoxYoSOHTumL7/8UgsXLtT69et1yy236PPPP5ckJSQkXPAUmwMHDqhGjRq5/pCpXbu20+vKce5nsH//fhlj9Pjjj+vxxx/Pcx1JSUm66qqrNGXKFPXs2VPXXHON6tWrp86dO+v2229XTEzMeWuMjY1VrVq1tGLFCkeoWLFihcqXL+/4Q1mSZs6cqSFDhigyMlINGzZU165dNXjwYFWrVu28/Z/rscce0/LlyzV9+vQ8Tzm8GFdffbXTdHBwsHx9fVW+fPlc7eee3iRJNWrUcJq22WyKjo52XGOREzzzOuUrR3JystMpSAX9Ph04cEBNmjTJ1W7dRi52iPSePXvqvvvuU0ZGhr777js99dRTOn36tNP2uG/fPu3evTvX9yVHziAHCQkJ8vDwUJ06dc77WqTc31MfHx9Vq1Yt1/Z+1VVX5RqY5MCBA6pUqZICAgKc2s/t0263a8aMGXrwwQdVsWJFNW3aVN26ddPgwYMVHh6eb42u1i7lvY/x8vJS5cqVXVrHhfbjkrRu3TpNnTpVO3fudLomzBp+CvJZ5Dj3uyEVfF8oFWwbclXlypVzhbmyZctq165dF90n4E6EJKCEu+WWW7Ro0SKtX79evXr10ttvv61atWopNjbWscxrr72muLg49erVSw899JDCwsIc59+fezH3ufK7UPzcwRASEhLUvn171apVS88884wiIyPl4+OjDz74QHPmzMn1i3tR8PT0LJR+ypUrpx49eqhHjx5q27attmzZogMHDjiuXSps1l+RJTneq7Fjx+Y7klTO8MGtW7dWQkKC3nvvPX344Yd6+eWXNWfOHC1cuNDpSEteBgwYoCeffFL//POPAgMD9f7772vgwIHy8vp/u/7+/furVatWWr16tT788EM9/fTTmjFjhlatWqUuXboU+DVWq1ZNt912m1588UWNHz8+1/yCbmdWeX3e+W0DxpgCVvr/5HwOTz/9tBo0aJDnMuf+UX/uZ+kOlStXdgxx3bVrV5UvX1733Xef2rVrpz59+kj677XVr19fzzzzTJ59REZGFll9l/oejRo1St27d9eaNWu0ceNGPf7445o2bZo+/vhjXXvttYVUZd7sdvslBYW8fP755+rRo4dat26t+fPnq1KlSvL29taSJUv0xhtvXFSfl/o9KMg25Op3tjC/m0BJQEgCSrjWrVurUqVKWrFihVq2bKmPP/4410AIK1euVLVq1bRq1Sqn/9gmTpx4wf7Lli2b5whT5/46vHbtWqWnp+v99993+hUzrxH0CjpCV04o2bt3r9PRjZy2ogotVo0aNdKWLVt0+PBhRUVFqXr16vrpp5/O+5yoqCjt2rVL2dnZTn9Q7dmzxzH/fHKO0nh7exfofi45oxwOHTpUqampat26tSZNmlSgkDR58mS9++67qlixolJSUhyDfVhVqlRJ9957r+69914lJSXpuuuu05NPPulSSJL+O5r02muvacaMGbnm5RyNOXdbO3c7K0znnqJojNH+/fsdR+GqV68uSQoKCir0++pERUVp7969udoLuo244q677tKcOXP02GOPqXfv3rLZbKpevbp++OEHtW/f/rzfx+rVqys7O1u//PJLvkHR+j21HmHMyMhQYmJigd67qKgobd68WampqU7BM6/3KKeuBx98UA8++KD27dunBg0aaPbs2XrttdcuuK78anfXPubdd9+Vr6+vNm7cKLvd7mhfsmSJ03IF+SyKSl7bkDu+s0BJwjVJQAnn4eGhfv36ae3atVq+fLnOnj2b61S7nF/wrL/Ybd26VV9//fUF+69evbqSk5OdTok4fPiw0whr+a0jOTk513/0kuTv759n8DpXo0aNFBYWpoULFzqdgrJ+/Xrt3r1bN9100wX7KIgjR47keQ1IRkaGNm/eLA8PD8eRm759++qHH37I9fql//fau3btqiNHjjhdK3b27Fk9//zzCggIUJs2bc5bT1hYmNq2batFixbleQ2P9b5N555GFhAQoOjo6DyHcT5X7dq1Vb9+fa1YsUIrVqxQpUqV1Lp1a8f8rKysXNeShYWFKSIiokD9n6t69eq67bbbtGjRIh05csRpXlBQkMqXL59rFLr58+e7vJ6CWrZsmU6dOuWYXrlypQ4fPuwIfw0bNlT16tU1a9Yspaam5nr+pdw/q2vXrvr222+dvoNpaWl68cUXVaVKlQKdUlVQXl5eevDBB7V792699957kv47QvjXX3/ppZdeyrX8v//+q7S0NElSr1695OHhoSlTpuQ6GpyzvXfo0EE+Pj567rnnnL7/r7zyipKTkwv0Pe3atavOnj3rdMuArKysXDchPn36tM6cOePUVr16dQUGBl7UNllc+5jz8fT0lM1mczoC8/vvv2vNmjVOyxXksygqeW1DOT8iWL+zWVlZFxxNFCgtOJIEuNH69esdvyxbNW/e3OkX2wEDBuj555/XxIkTVb9+fcd1DTm6deumVatWqXfv3rrpppuUmJiohQsXqk6dOnn+8Wd1yy23aNy4cerdu7dGjhyp06dPa8GCBbrmmmucLiq+8cYb5ePjo+7du+uuu+5SamqqXnrpJYWFheX6Q79hw4ZasGCBpk6dqujoaIWFheX6FVf670jKjBkzNHToULVp00YDBw7U0aNH9eyzz6pKlSoaPXp0gd7HCzl48KAaN26sG264Qe3bt1d4eLiSkpL05ptv6ocfftCoUaMc17k89NBDWrlypW6++WbdcccdatiwoY4fP673339fCxcuVGxsrO68804tWrRIcXFx2r59u6pUqaKVK1fqyy+/1Ny5c50GC8jPvHnz1LJlS9WvX1/Dhw9XtWrVdPToUX399dc6ePCgfvjhB0n/XaDdtm1bNWzYUKGhodq2bZtWrlyp++67r0CvfcCAAZowYYJ8fX01bNgwpyNfp06dUuXKldWvXz/FxsYqICBAH330kb777rt87z10IY8++qiWL1+uvXv3qm7duk7z/ve//2n69On63//+p0aNGumzzz7Tr7/+elHrKYjQ0FC1bNlSQ4cO1dGjRzV37lxFR0c7hu728PDQyy+/rC5duqhu3boaOnSorrrqKv3111/65JNPFBQUpLVr117UusePH68333xTXbp00ciRIxUaGqpXX31ViYmJevfddwv9lK64uDhNmDBBM2bMUK9evXT77bfr7bff1t13361PPvlELVq0UFZWlvbs2aO3335bGzduVKNGjRQdHa1HH31UTzzxhFq1aqU+ffrIbrfru+++U0REhKZNm6YKFSooPj5ekydPVufOndWjRw/t3btX8+fP1/XXX+90sX5+unfvrhYtWmj8+PH6/fffVadOHa1atSpXSP/111/Vvn179e/fX3Xq1JGXl5dWr16to0eP5nkU9EKKYx9zof34TTfdpGeeeUadO3fWrbfeqqSkJM2bN0/R0dFOP04V5LMoSuduQ3Xr1lXTpk0VHx+v48ePKzQ0VG+99ZbOnj1bpHUAJYZ7BtUDrmznGzpWeQyTnJ2dbSIjI40kM3Xq1Fz9ZWdnm6eeespERUUZu91urr32WrNu3bo8h/fWOcMtG2PMhx9+aOrVq2d8fHxMzZo1zWuvvZbnEODvv/++iYmJMb6+vqZKlSpmxowZZvHixbmGiT1y5Ii56aabTGBgoJHkGA48r6FjjTFmxYoV5tprrzV2u92EhoaaQYMGmYMHDzotM2TIEOPv75/rtedV57lSUlLMs88+azp16mQqV65svL29TWBgoGnWrJl56aWXnIbXNcaYY8eOmfvuu89cddVVxsfHx1SuXNkMGTLE/PPPP45ljh49aoYOHWrKly9vfHx8TP369XN9bjnDXuc3nHFCQoIZPHiwCQ8PN97e3uaqq64y3bp1MytXrnQsM3XqVNO4cWMTEhJi/Pz8TK1atcyTTz5pMjIyzvuac+zbt8+xXX3xxRdO89LT081DDz1kYmNjTWBgoPH39zexsbFm/vz5F+w3r+GWc+QMpWwdAtyY/4ZBHjZsmAkODjaBgYGmf//+JikpKd8hwP/+++9c/ea1DZw73HjOdvbmm2+a+Ph4ExYWZvz8/MxNN91kDhw4kOv5O3bsMH369DHlypUzdrvdREVFmf79+5vNmzdfsKbzSUhIMP369TMhISHG19fXNG7c2Kxbty7XcnJxCPD8lp00aVKuIfZnzJhh6tata+x2uylbtqxp2LChmTx5sklOTnZ67uLFix3fwbJly5o2bdqYTZs2OS3zwgsvmFq1ahlvb29TsWJFc88995gTJ044LXPuZ2F17Ngxc/vtt5ugoCATHBxsbr/9drNjxw6nfd4///xjRowYYWrVqmX8/f1NcHCwadKkiXn77bcv+N6cb5u8lH3MhdZXkP34K6+8YmrUqGHsdrupVauWWbJkSb77rgt9FlFRUXneFqBNmzZ53nrhXK5sQwkJCaZDhw7GbrebihUrmkceecRs2rQpzyHA8/rc87vFBHA5sBnDFXUAAAAAkINrkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYFHqbyabnZ2tQ4cOKTAwUDabzd3lAAAAAHATY4xOnTqliIiI897Yu9SHpEOHDikyMtLdZQAAAAAoIf78809Vrlw53/mlPiQFBgZK+u+NCAoKcnM1AAAAANwlJSVFkZGRjoyQn1IfknJOsQsKCiIkAQAAALjgZTgM3AAAAAAAFoQkAAAAALAgJAEAAACARam/JqkgjDE6e/assrKy3F1KqePp6SkvLy+GXwcAAMBl44oPSRkZGTp8+LBOnz7t7lJKrTJlyqhSpUry8fFxdykAAADABV3RISk7O1uJiYny9PRURESEfHx8OOJRiIwxysjI0N9//63ExETVqFHjvDftAgAAAEqCKzokZWRkKDs7W5GRkSpTpoy7yymV/Pz85O3trQMHDigjI0O+vr7uLgkAAAA4L37Wlzi6UcR4fwEAAHA54a9XAAAAALAgJAEAAACAxRV9TVJ+bLvWFuv6TEz3Yl0fAAAAgPxxJOkyFBcXJ5vNJpvNJm9vb1WtWlUPP/ywzpw5U+TrXrVqlW688UaVK1dONptNO3fuLPJ1AgAAAMWJkHSZ6ty5sw4fPqzffvtNc+bM0aJFizRx4sQiX29aWppatmypGTNmFPm6AAAAAHcgJF2m7Ha7wsPDFRkZqV69eqlDhw7atGmTY36VKlU0d+5cp+c0aNBAkyZNckzbbDa9/PLL6t27t8qUKaMaNWro/fffP+96b7/9dk2YMEEdOnQozJcDAAAAlBiEpFLgp59+0ldffSUfHx+Xnzt58mT1799fu3btUteuXTVo0CAdP368CKoEAAAALg+EpMvUunXrFBAQIF9fX9WvX19JSUl66KGHXO4nLi5OAwcOVHR0tJ566imlpqbq22+/LYKKAQAAgMsDo9tdptq1a6cFCxYoLS1Nc+bMkZeXl/r27etyPzExMY5/+/v7KygoSElJSYVZKgAAAHBZ4UjSZcrf31/R0dGKjY3V4sWLtXXrVr3yyiuO+R4eHjLGOD0nMzMzVz/e3t5O0zabTdnZ2UVTNAAAAHAZICSVAh4eHnrkkUf02GOP6d9//5UkVahQQYcPH3Ysk5KSosTERHeVCAAAAFw2ON2ulLj55pv10EMPad68eRo7dqxuuOEGLV26VN27d1dISIgmTJggT0/PS17P8ePH9ccff+jQoUOSpL1790qSwsPDFR4efsn9AwBwJSvuG9pf0WJ7uLuCK8q5ZziVdISkPJiY7u4uwWVeXl667777NHPmTN1zzz2Kj49XYmKiunXrpuDgYD3xxBOFciTp/fff19ChQx3Tt9xyiyRp4sSJTsOLAwAAAJcrm7ncYp2LUlJSFBwcrOTkZAUFBTnNO3PmjBITE1W1alX5+vq6qcLSj/cZAICC4UhSMeJIUrEqKZHjfNnAimuSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwMLL3QWURDabrVjXV1LuQAwAAACAI0mXpbi4ONlsNtlsNnl7e6tq1ap6+OGHdebMmSJdb2ZmpsaNG6f69evL399fERERGjx4sA4dOlSk6wUAAACKEyHpMtW5c2cdPnxYv/32m+bMmaNFixZp4sSJRbrO06dP6/vvv9fjjz+u77//XqtWrdLevXvVo0ePIl0vAAAAUJwISZcpu92u8PBwRUZGqlevXurQoYM2bdrkmF+lShXNnTvX6TkNGjTQpEmTHNM2m00vv/yyevfurTJlyqhGjRp6//33811ncHCwNm3apP79+6tmzZpq2rSpXnjhBW3fvl1//PFHYb9EAAAAwC0ISaXATz/9pK+++ko+Pj4uP3fy5Mnq37+/du3apa5du2rQoEE6fvx4gZ+fnJwsm82mkJAQl9cNAAAAlESEpMvUunXrFBAQIF9fX9WvX19JSUl66KGHXO4nLi5OAwcOVHR0tJ566imlpqbq22+/LdBzz5w5o3HjxmngwIEKCgpyed0AAABAScTodpepdu3aacGCBUpLS9OcOXPk5eWlvn37utxPTEyM49/+/v4KCgpSUlLSBZ+XmZmp/v37yxijBQsWuLxeAAAAoKTiSNJlyt/fX9HR0YqNjdXixYu1detWvfLKK475Hh4euYYWz8zMzNWPt7e307TNZlN2dvZ5150TkA4cOKBNmzZxFAkAAAClCiGpFPDw8NAjjzyixx57TP/++68kqUKFCjp8+LBjmZSUFCUmJl7yunIC0r59+/TRRx+pXLlyl9wnAAAAUJIQkkqJm2++WZ6enpo3b54k6YYbbtDy5cv1+eef68cff9SQIUPk6el5SevIzMxUv379tG3bNr3++uvKysrSkSNHdOTIEWVkZBTGywAAAADcjmuS8nDuaWqXAy8vL913332aOXOm7rnnHsXHxysxMVHdunVTcHCwnnjiiUs+kvTXX385hghv0KCB07xPPvlEbdu2vaT+AQAAgJLAZi7HROCClJQUBQcHKzk5Ode1M2fOnFFiYqKqVq0qX19fN1VY+vE+AwBQMLZda91dwpUjtoe7K7iilJTIcb5sYMXpdgAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQpJJzIVlpxfsLAACAy8kVHZK8vb0lSadPn3ZzJaVbzvub834DAAAAJdkVfZ8kT09PhYSEKCkpSZJUpkwZ2Ww2N1dVehhjdPr0aSUlJSkkJOSSb2YLAAAAFIcrOiRJUnh4uCQ5ghIKX0hIiON9BgAAAEq6Kz4k2Ww2VapUSWFhYcrMzHR3OaWOt7c3R5AAAABwWbniQ1IOT09P/pgHAAAAcGUP3AAAAAAA5yIkAQAAAICFW0PSggULFBMTo6CgIAUFBalZs2Zav369Y/6ZM2c0YsQIlStXTgEBAerbt6+OHj3qxooBAAAAlHZuDUmVK1fW9OnTtX37dm3btk033HCDevbsqZ9//lmSNHr0aK1du1bvvPOOtmzZokOHDqlPnz7uLBkAAABAKWczxhh3F2EVGhqqp59+Wv369VOFChX0xhtvqF+/fpKkPXv2qHbt2vr666/VtGnTAvWXkpKi4OBgJScnKygoqChLBwAAuCS2XWvdXcKVI7aHuyu4opSUyFHQbFBirknKysrSW2+9pbS0NDVr1kzbt29XZmamOnTo4FimVq1auvrqq/X111/n2096erpSUlKcHgAAAABQUG4PST/++KMCAgJkt9t19913a/Xq1apTp46OHDkiHx8fhYSEOC1fsWJFHTlyJN/+pk2bpuDgYMcjMjKyiF8BAAAAgNLE7SGpZs2a2rlzp7Zu3ap77rlHQ4YM0S+//HLR/cXHxys5Odnx+PPPPwuxWgAAAAClndtvJuvj46Po6GhJUsOGDfXdd9/p2Wef1YABA5SRkaGTJ086HU06evSowsPD8+3PbrfLbrcXddkAAAAASim3H0k6V3Z2ttLT09WwYUN5e3tr8+bNjnl79+7VH3/8oWbNmrmxQgAAAAClmVuPJMXHx6tLly66+uqrderUKb3xxhv69NNPtXHjRgUHB2vYsGEaM2aMQkNDFRQUpPvvv1/NmjUr8Mh2AAAAAOAqt4akpKQkDR48WIcPH1ZwcLBiYmK0ceNGdezYUZI0Z84ceXh4qG/fvkpPT1enTp00f/58d5YMAAAAoJQrcfdJKmzcJwkAAFwuuE9SMeI+ScWqpESOy+4+SQAAAABQEhCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABg4daQNG3aNF1//fUKDAxUWFiYevXqpb179zot07ZtW9lsNqfH3Xff7aaKAQAAAJR2bg1JW7Zs0YgRI/TNN99o06ZNyszM1I033qi0tDSn5YYPH67Dhw87HjNnznRTxQAAAABKOy93rnzDhg1O00uXLlVYWJi2b9+u1q1bO9rLlCmj8PDw4i4PAAAAwBWoRF2TlJycLEkKDQ11an/99ddVvnx51atXT/Hx8Tp9+nS+faSnpyslJcXpAQAAAAAF5dYjSVbZ2dkaNWqUWrRooXr16jnab731VkVFRSkiIkK7du3SuHHjtHfvXq1atSrPfqZNm6bJkycXV9kAAAAAShmbMca4uwhJuueee7R+/Xp98cUXqly5cr7Lffzxx2rfvr3279+v6tWr55qfnp6u9PR0x3RKSooiIyOVnJysoKCgIqkdAACgMNh2rXV3CVeO2B7uruCKUkIih1JSUhQcHHzBbFAijiTdd999WrdunT777LPzBiRJatKkiSTlG5LsdrvsdnuR1AkAAACg9HNrSDLG6P7779fq1av16aefqmrVqhd8zs6dOyVJlSpVKuLqAAAAAFyJ3BqSRowYoTfeeEPvvfeeAgMDdeTIEUlScHCw/Pz8lJCQoDfeeENdu3ZVuXLltGvXLo0ePVqtW7dWTEyMO0sHAAAAUEq5NSQtWLBA0n83jLVasmSJ4uLi5OPjo48++khz585VWlqaIiMj1bdvXz322GNuqBYAAADAlcDtp9udT2RkpLZs2VJM1QAAAABACbtPEgAAAAC4GyEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWLoekf//9V6dPn3ZMHzhwQHPnztWHH35YqIUBAAAAgDu4HJJ69uypZcuWSZJOnjypJk2aaPbs2erZs6cWLFhQ6AUCAAAAQHFyOSR9//33atWqlSRp5cqVqlixog4cOKBly5bpueeeK/QCAQAAAKA4uRySTp8+rcDAQEnShx9+qD59+sjDw0NNmzbVgQMHCr1AAAAAAChOLoek6OhorVmzRn/++ac2btyoG2+8UZKUlJSkoKCgQi8QAAAAAIqTyyFpwoQJGjt2rKpUqaImTZqoWbNmkv47qnTttdcWeoEAAAAAUJy8XH1Cv3791LJlSx0+fFixsbGO9vbt26t3796FWhwAAAAAFDeXQ5IkhYeHKzw83KmtcePGhVIQAAAAALhTgUJSnz59CtzhqlWrLroYAAAAAHC3Al2TFBwc7HgEBQVp8+bN2rZtm2P+9u3btXnzZgUHBxdZoQAAAABQHAp0JGnJkiWOf48bN079+/fXwoUL5enpKUnKysrSvffey+h2AAAAAC57Lo9ut3jxYo0dO9YRkCTJ09NTY8aM0eLFiwu1OAAAAAAobi6HpLNnz2rPnj252vfs2aPs7OxCKQoAAAAA3MXl0e2GDh2qYcOGKSEhwTGi3datWzV9+nQNHTq00AsEAAAAgOLkckiaNWuWwsPDNXv2bB0+fFiSVKlSJT300EN68MEHC71AAAAAAChOLoWks2fP6o033tCQIUP08MMPKyUlRZIYsAEAAABAqeHSNUleXl66++67debMGUn/hSMCEgAAAIDSxOWBGxo3bqwdO3YURS0AAAAA4HYuX5N077336sEHH9TBgwfVsGFD+fv7O82PiYkptOIAAAAAoLi5HJJuueUWSdLIkSMdbTabTcYY2Ww2ZWVlFV51AAAAAFDMXA5JiYmJRVEHAAAAAJQILoekqKiooqgDAAAAAEoEl0OSJCUkJGju3LnavXu3JKlOnTp64IEHVL169UItDgAAAACKm8uj223cuFF16tTRt99+q5iYGMXExGjr1q2qW7euNm3aVBQ1AgAAAECxcflI0vjx4zV69GhNnz49V/u4cePUsWPHQisOAAAAAIqby0eSdu/erWHDhuVqv+OOO/TLL7+41Ne0adN0/fXXKzAwUGFhYerVq5f27t3rtMyZM2c0YsQIlStXTgEBAerbt6+OHj3qatkAAAAAUCAuh6QKFSpo586dudp37typsLAwl/rasmWLRowYoW+++UabNm1SZmambrzxRqWlpTmWGT16tNauXat33nlHW7Zs0aFDh9SnTx9XywYAAACAAnH5dLvhw4frzjvv1G+//abmzZtLkr788kvNmDFDY8aMcamvDRs2OE0vXbpUYWFh2r59u1q3bq3k5GS98soreuONN3TDDTdIkpYsWaLatWvrm2++UdOmTV0tHwAAAADOy+WQ9PjjjyswMFCzZ89WfHy8JCkiIkKTJk1yusHsxUhO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K1dO3bp1U0JCQr7ry+uUuDVr1shmszmmExIS1LNnT1WsWFEBAQG6/vrr9dFHHznmt23bVgcOHNDo0aMdR7/y63vBggWqXr26fHx8VLNmTS1fvtxpvs1m08svv6zevXurTJkyqlGjht5///186//555+VkJCg+fPnq2nTpoqKilKLFi00depUNW3a1LHcwYMHNXDgQIWGhsrf31+NGjXS1q1bXaprwYIF6tGjh/z9/fXkk09Kkt577z1dd9118vX1VbVq1TR58mSdPXs233oBAAVHSAIAXNCgQYO0du1apaamOto2btyo06dPq3fv3pKktLQ0jRkzRtu2bdPmzZvl4eGh3r17Kzs7+6LXm5qaqq5du2rz5s3asWOHOnfurO7du+uPP/6QJK1atUqVK1fWlClTdPjwYR0+fDjPflavXq0HHnhADz74oH766SfdddddGjp0qD755BOn5SZPnqz+/ftr165d6tq1qwYNGqTjx4/n2WeFChXk4eGhlStXKisrK9/627Rpo7/++kvvv/++fvjhBz388MOO96SgdU2aNEm9e/fWjz/+qDvuuEOff/65Bg8erAceeEC//PKLFi1apKVLlzoCFADgEhkAwBVvyJAhxtPT0/j7+zs9nnzySWOMMZmZmaZ8+fJm2bJljucMHDjQDBgwIN8+//77byPJ/Pjjj8YYYxITE40ks2PHDmOMMUuWLDHBwcFOz1m9erW50H9NdevWNc8//7xjOioqysyZM8dpmXP7bt68uRk+fLjTMjfffLPp2rWrY1qSeeyxxxzTqampRpJZv359vrW88MILpkyZMiYwMNC0a9fOTJkyxSQkJDjmL1q0yAQGBppjx47l+fyC1jVq1CinZdq3b2+eeuopp7bly5ebSpUq5VsrAKDgOJIEAJAktWvXTjt37nR63H333ZIkLy8v9e/fX6+//rqk/44avffeexo0aJDj+fv27dPAgQNVrVo1BQUFqUqVKpLkOOpzMVJTUzV27FjVrl1bISEhCggI0O7du13uc/fu3WrRooVTW4sWLbR7926ntpiYGMe//f39FRQUpKSkpHz7HTFihI4cOaLXX39dzZo10zvvvKO6detq06ZNkqSdO3fq2muvVWho6CXV1ahRI6fpH374QVOmTFFAQIDjMXz4cB0+fFinT5/Ot14AQMEwcAMAQNJ/oSA6Ojrf+YMGDVKbNm2UlJSkTZs2yc/Pz2n0u+7duysqKkovvfSSIiIilJ2drXr16ikjIyPP/jw8PGSMcWrLzMx0mh47dqw2bdqkWbNmKTo6Wn5+furXr1++fV6qcwdEsNlsFzxdMDAwUN27d1f37t01depUderUSVOnTlXHjh0LbfAIf39/p+nU1FRNnjxZffr0ybWsr69voawTAK5kHEkCABRI8+bNFRkZqRUrVuj111/XzTff7AgVx44d0969e/XYY4+pffv2ql27tk6cOHHe/ipUqKBTp04pLS3N0XbuPZS+/PJLxcXFqXfv3qpfv77Cw8P1+++/Oy3j4+OT7zVBOWrXrq0vv/wyV9916tS5wKt2jc1mU61atRyvKSYmRjt37sz3uqaLreu6667T3r17FR0dnevh4cF/7QBwqTiSBACQJKWnp+vIkSNObV5eXipfvrxj+tZbb9XChQv166+/Og0uULZsWZUrV04vvviiKlWqpD/++EPjx48/7/qaNGmiMmXK6JFHHtHIkSO1detWLV261GmZGjVqaNWqVerevbtsNpsef/zxXEd2qlSpos8++0y33HKL7Ha7U705HnroIfXv31/XXnutOnTooLVr12rVqlVOI+W5aufOnZo4caJuv/121alTRz4+PtqyZYsWL16scePGSZIGDhyop556Sr169dK0adNUqVIl7dixQxEREWrWrNlF1zVhwgR169ZNV199tfr16ycPDw/98MMP+umnnzR16tSLfk0AgP+fuy+KAgC435AhQ4ykXI+aNWs6LffLL78YSSYqKspkZ2c7zdu0aZOpXbu2sdvtJiYmxnz66adGklm9erUxJvfADcb8N1BDdHS08fPzM926dTMvvvii08ANiYmJpl27dsbPz89ERkaaF154wbRp08Y88MADjmW+/vprExMTY+x2u+O5eQ0KMX/+fFOtWjXj7e1trrnmGqdBKIwxTrXmCA4ONkuWLMnzPfv777/NyJEjTb169UxAQIAJDAw09evXN7NmzTJZWVmO5X7//XfTt29fExQUZMqUKWMaNWpktm7dekl1GWPMhg0bTPPmzY2fn58JCgoyjRs3Ni+++GKetQIAXGMz5pwTwgEAAADgCsaJywAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFj8f5YwCJGnaubMAAAAAElFTkSuQmCC", "text/plain": [ "
" ] From decf5eddc0c260ad2e2f8e57b3284b8be505084a Mon Sep 17 00:00:00 2001 From: Lee Spacagna Date: Fri, 10 Jan 2025 14:41:33 +0200 Subject: [PATCH 5/6] more interesting final results --- ..._to_evaluate_LLMs_for_SQL_generation.ipynb | 983 +++++++++--------- 1 file changed, 490 insertions(+), 493 deletions(-) diff --git a/examples/evaluation/How_to_evaluate_LLMs_for_SQL_generation.ipynb b/examples/evaluation/How_to_evaluate_LLMs_for_SQL_generation.ipynb index f569108f1f..7b0ede135d 100644 --- a/examples/evaluation/How_to_evaluate_LLMs_for_SQL_generation.ipynb +++ b/examples/evaluation/How_to_evaluate_LLMs_for_SQL_generation.ipynb @@ -49,7 +49,7 @@ }, { "cell_type": "code", - "execution_count": 94, + "execution_count": 150, "id": "245fcedb", "metadata": {}, "outputs": [ @@ -102,7 +102,7 @@ }, { "cell_type": "code", - "execution_count": 95, + "execution_count": 151, "id": "f8027115", "metadata": {}, "outputs": [ @@ -190,7 +190,7 @@ "4 CREATE TABLE department (num_employees INTEGER... " ] }, - "execution_count": 95, + "execution_count": 151, "metadata": {}, "output_type": "execute_result" } @@ -223,7 +223,7 @@ }, { "cell_type": "code", - "execution_count": 96, + "execution_count": 152, "id": "eb811101", "metadata": {}, "outputs": [], @@ -249,7 +249,7 @@ }, { "cell_type": "code", - "execution_count": 98, + "execution_count": 153, "id": "c2be3ba4", "metadata": {}, "outputs": [ @@ -274,7 +274,7 @@ }, { "cell_type": "code", - "execution_count": 99, + "execution_count": 154, "id": "3a20d712", "metadata": {}, "outputs": [ @@ -304,7 +304,7 @@ }, { "cell_type": "code", - "execution_count": 116, + "execution_count": 155, "id": "38b704b3-6f0e-4708-bc70-96723d69da6f", "metadata": {}, "outputs": [], @@ -336,7 +336,7 @@ }, { "cell_type": "code", - "execution_count": 117, + "execution_count": 156, "id": "2b057391-4f83-4b5a-8843-a9ee74bee871", "metadata": {}, "outputs": [ @@ -344,10 +344,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "('{\"create\":\"CREATE TABLE Departments (\\\\n DepartmentID INT PRIMARY '\n", - " 'KEY,\\\\n DepartmentName VARCHAR(255),\\\\n HeadName VARCHAR(255),\\\\n '\n", - " 'HeadAge INT\\\\n);\",\"select\":\"SELECT COUNT(*) AS NumberOfHeadsOlderThan56 FROM '\n", - " 'Departments WHERE HeadAge > 56;\"}')\n" + "('{\"create\":\"CREATE TABLE department_heads (\\\\n id INT PRIMARY KEY,\\\\n '\n", + " 'name VARCHAR(255),\\\\n age INT,\\\\n department '\n", + " 'VARCHAR(255)\\\\n);\",\"select\":\"SELECT COUNT(*) FROM department_heads WHERE age '\n", + " '> 56;\"}')\n" ] } ], @@ -370,7 +370,7 @@ }, { "cell_type": "code", - "execution_count": 118, + "execution_count": 157, "id": "4c7133f1-74d6-43f1-9443-09a3f8308c35", "metadata": {}, "outputs": [], @@ -388,7 +388,7 @@ }, { "cell_type": "code", - "execution_count": 119, + "execution_count": 158, "id": "6a9a9128", "metadata": {}, "outputs": [ @@ -398,7 +398,7 @@ "True" ] }, - "execution_count": 119, + "execution_count": 158, "metadata": {}, "output_type": "execute_result" } @@ -419,7 +419,7 @@ }, { "cell_type": "code", - "execution_count": 120, + "execution_count": 159, "id": "a0a26690", "metadata": {}, "outputs": [ @@ -438,7 +438,7 @@ "False" ] }, - "execution_count": 120, + "execution_count": 159, "metadata": {}, "output_type": "execute_result" } @@ -475,7 +475,7 @@ }, { "cell_type": "code", - "execution_count": 121, + "execution_count": 160, "id": "9cc95481", "metadata": {}, "outputs": [], @@ -518,7 +518,7 @@ }, { "cell_type": "code", - "execution_count": 122, + "execution_count": 161, "id": "c6d2573d", "metadata": {}, "outputs": [], @@ -584,7 +584,7 @@ }, { "cell_type": "code", - "execution_count": 123, + "execution_count": 162, "id": "a9266753-4646-4901-bc14-632d3bf47aaa", "metadata": {}, "outputs": [ @@ -592,13 +592,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "CREATE SQL is: CREATE TABLE Departments (\n", - " DepartmentID INT PRIMARY KEY,\n", - " DepartmentName VARCHAR(255),\n", - " HeadName VARCHAR(255),\n", - " HeadAge INT\n", + "CREATE SQL is: CREATE TABLE department_heads (\n", + " id INT PRIMARY KEY,\n", + " name VARCHAR(255),\n", + " age INT,\n", + " department VARCHAR(255)\n", ");\n", - "SELECT SQL is: SELECT COUNT(*) AS NumberOfHeadsOlderThan56 FROM Departments WHERE HeadAge > 56;\n" + "SELECT SQL is: SELECT COUNT(*) FROM department_heads WHERE age > 56;\n" ] } ], @@ -612,7 +612,7 @@ }, { "cell_type": "code", - "execution_count": 124, + "execution_count": 163, "id": "83bc1f1b", "metadata": {}, "outputs": [ @@ -620,13 +620,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "Testing create query: CREATE TABLE Departments (\n", - " DepartmentID INT PRIMARY KEY,\n", - " DepartmentName VARCHAR(255),\n", - " HeadName VARCHAR(255),\n", - " HeadAge INT\n", + "Testing create query: CREATE TABLE department_heads (\n", + " id INT PRIMARY KEY,\n", + " name VARCHAR(255),\n", + " age INT,\n", + " department VARCHAR(255)\n", ");\n", - "Testing select query: SELECT COUNT(*) AS NumberOfHeadsOlderThan56 FROM Departments WHERE HeadAge > 56;\n", + "Testing select query: SELECT COUNT(*) FROM department_heads WHERE age > 56;\n", "[(0,)]\n" ] }, @@ -636,7 +636,7 @@ "True" ] }, - "execution_count": 124, + "execution_count": 163, "metadata": {}, "output_type": "execute_result" } @@ -649,7 +649,7 @@ }, { "cell_type": "code", - "execution_count": 125, + "execution_count": 164, "id": "589c7cc7", "metadata": {}, "outputs": [ @@ -668,7 +668,7 @@ "False" ] }, - "execution_count": 125, + "execution_count": 164, "metadata": {}, "output_type": "execute_result" } @@ -695,7 +695,7 @@ }, { "cell_type": "code", - "execution_count": 126, + "execution_count": 165, "id": "029c8426", "metadata": {}, "outputs": [], @@ -748,7 +748,7 @@ }, { "cell_type": "code", - "execution_count": 127, + "execution_count": 166, "id": "85cfb78d", "metadata": {}, "outputs": [], @@ -779,7 +779,7 @@ }, { "cell_type": "code", - "execution_count": 128, + "execution_count": 167, "id": "607ee304", "metadata": {}, "outputs": [], @@ -797,7 +797,7 @@ }, { "cell_type": "code", - "execution_count": 129, + "execution_count": 168, "id": "bd1002c2", "metadata": {}, "outputs": [ @@ -866,7 +866,7 @@ }, { "cell_type": "code", - "execution_count": 115, + "execution_count": 169, "id": "85c44a17", "metadata": {}, "outputs": [ @@ -891,7 +891,7 @@ }, { "cell_type": "code", - "execution_count": 130, + "execution_count": 170, "id": "1244c44e", "metadata": {}, "outputs": [], @@ -925,7 +925,7 @@ }, { "cell_type": "code", - "execution_count": 131, + "execution_count": 171, "id": "a98afa30", "metadata": {}, "outputs": [], @@ -963,7 +963,7 @@ }, { "cell_type": "code", - "execution_count": 132, + "execution_count": 172, "id": "898e5069", "metadata": {}, "outputs": [], @@ -974,7 +974,7 @@ }, { "cell_type": "code", - "execution_count": 133, + "execution_count": 173, "id": "2baec278", "metadata": {}, "outputs": [ @@ -982,424 +982,427 @@ "name": "stdout", "output_type": "stream", "text": [ - "Testing create query: CREATE TABLE partnerships (\n", - " id INT AUTO_INCREMENT PRIMARY KEY,\n", - " player1 VARCHAR(255),\n", - " player2 VARCHAR(255),\n", - " venue VARCHAR(255),\n", - " date DATE\n", + "Testing create query: CREATE TABLE cricket_partnerships (\n", + " id INT PRIMARY KEY,\n", + " player1 VARCHAR(50),\n", + " player2 VARCHAR(50),\n", + " venue VARCHAR(100),\n", + " match_date DATE\n", ");\n", - "Testing select query: SELECT venue FROM partnerships WHERE player1 = 'shoaib malik' AND player2 = 'misbah-ul-haq';\n", + "Testing select query: SELECT venue FROM cricket_partnerships WHERE player1 = 'Shoaib Malik' AND player2 = 'Misbah-ul-Haq' OR player1 = 'Misbah-ul-Haq' AND player2 = 'Shoaib Malik';\n", "[]\n", - "Testing create query: CREATE TABLE cricket_partnerships (\n", + "Testing create query: CREATE TABLE CricketPartnerships (\n", " id INT PRIMARY KEY,\n", - " batsman_1 VARCHAR(100),\n", - " batsman_2 VARCHAR(100),\n", - " venue VARCHAR(255)\n", + " player1 VARCHAR(255),\n", + " player2 VARCHAR(255),\n", + " venue VARCHAR(255),\n", + " date DATE,\n", + " runs_scored INT\n", ");\n", - "Testing select query: SELECT venue FROM cricket_partnerships WHERE batsman_1 = 'Herschelle Gibbs' AND batsman_2 = 'Justin Kemp';\n", + "Testing select query: SELECT venue FROM CricketPartnerships WHERE player1 = 'Herschelle Gibbs' AND player2 = 'Justin Kemp';\n", "[]\n", "Testing create query: CREATE TABLE PointsTable (\n", - " Number INT NOT NULL,\n", - " Played INT NOT NULL,\n", - " Points INT NOT NULL\n", + " NumberPlayed INT,\n", + " Points INT\n", ");\n", - "Testing select query: SELECT Played FROM PointsTable WHERE Points = 310;\n", + "Testing select query: SELECT NumberPlayed FROM PointsTable WHERE Points = 310;\n", "[]\n", - "Testing create query: CREATE TABLE teams (\n", - " id INT PRIMARY KEY,\n", - " name VARCHAR(100),\n", - " losing_bonus INT,\n", - " points_against INT\n", + "Testing create query: CREATE TABLE sports_stats (\n", + " team_id INTEGER PRIMARY KEY,\n", + " team_name TEXT,\n", + " points_against INTEGER,\n", + " losing_bonus INTEGER\n", ");\n", - "Testing select query: SELECT losing_bonus FROM teams WHERE points_against = 588;\n", + "Testing select query: SELECT losing_bonus FROM sports_stats WHERE points_against = 588;\n", "[]\n", - "Testing create query: CREATE TABLE TriesAgainst (ID INT, TeamID INT, OpponentID INT, MatchDate DATE, TriesAgainst INT, LosingBonus INT);\n", - "Testing select query: SELECT * FROM TriesAgainst WHERE LosingBonus = 7;\n", + "Testing create query: CREATE TABLE rugby_points (\n", + " id SERIAL PRIMARY KEY,\n", + " team_name VARCHAR(100),\n", + " tries_against INT,\n", + " losing_bonus INT\n", + ");\n", + "Testing select query: SELECT * FROM rugby_points WHERE tries_against = 7 AND losing_bonus > 0;\n", "[]\n", - "Testing create query: CREATE TABLE RugbyTeamStats (\n", - " TeamName VARCHAR(255),\n", - " TryBonus INT,\n", - " PointsAgainst INT\n", + "Testing create query: CREATE TABLE rugby_stats (\n", + " team_name VARCHAR(50),\n", + " games_played INT,\n", + " tries_scored INT,\n", + " try_bonus INT,\n", + " points_against INT\n", ");\n", - "Testing select query: SELECT TryBonus FROM RugbyTeamStats WHERE PointsAgainst = 488;\n", + "Testing select query: SELECT try_bonus FROM rugby_stats WHERE points_against = 488;\n", "[]\n", "Testing create query: CREATE TABLE Points (\n", " id INT PRIMARY KEY,\n", - " try_bonus INT,\n", - " description VARCHAR(255)\n", + " description VARCHAR(255),\n", + " try_bonus INT\n", ");\n", "Testing select query: SELECT * FROM Points WHERE try_bonus = 140;\n", "[]\n", - "Testing create query: CREATE TABLE DrawnMatches (\n", + "Testing create query: CREATE TABLE Matches (\n", " MatchID INT PRIMARY KEY,\n", - " TriesAgainst INT,\n", - " Result VARCHAR(10)\n", + " TeamName VARCHAR(255),\n", + " Drawn INT,\n", + " TriesAgainst INT\n", ");\n", - "Testing select query: SELECT MatchID FROM DrawnMatches WHERE TriesAgainst = 0 AND Result = 'Drawn';\n", + "Testing select query: SELECT TeamName FROM Matches WHERE Drawn = 1 AND TriesAgainst = 0;\n", "[]\n", - "Testing create query: CREATE TABLE champions (\n", - " id INT PRIMARY KEY,\n", - " name VARCHAR(255),\n", - " reign_days INT,\n", - " defenses INT\n", - ");\n", - "Testing select query: SELECT reign_days FROM champions WHERE reign_days > 3 AND defenses = 1;\n", + "Testing create query: CREATE TABLE Champions (id INT PRIMARY KEY, name VARCHAR(100), reign_days INT, defenses INT);\n", + "Testing select query: SELECT reign_days FROM Champions WHERE reign_days > 3 AND defenses = 1;\n", "[]\n", "Testing create query: CREATE TABLE champions (\n", - " champion_id INT PRIMARY KEY,\n", - " name VARCHAR(255) NOT NULL,\n", - " days_held INT NOT NULL,\n", - " reign INT NOT NULL,\n", - " defenses INT NOT NULL\n", + " id INTEGER PRIMARY KEY,\n", + " name VARCHAR(255),\n", + " reign_days INTEGER,\n", + " defenses INTEGER\n", ");\n", - "Testing select query: SELECT days_held FROM champions WHERE reign > 3 AND defenses < 1;\n", + "Testing select query: SELECT reign_days FROM champions WHERE reign_days > 3 AND defenses < 1;\n", "[]\n", - "Testing create query: CREATE TABLE champions (\n", + "Testing create query: CREATE TABLE ChampionReigns (\n", + " id INT PRIMARY KEY,\n", + " champion_name VARCHAR(255) NOT NULL,\n", + " total_defenses INT NOT NULL,\n", + " days_held INT NOT NULL\n", + ");\n", + "Testing select query: SELECT AVG(total_defenses) AS average_defenses\n", + "FROM ChampionReigns\n", + "WHERE days_held = 404 AND TOTAL_REIGNS > 1;\n", + "Error while executing select query: no such column: TOTAL_REIGNS\n", + "Testing create query: CREATE TABLE Champions (\n", " id INT PRIMARY KEY,\n", " name VARCHAR(255),\n", " days_held INT,\n", - " reign INT,\n", - " defenses INT\n", + " defense INT\n", ");\n", - "Testing select query: SELECT AVG(defenses) AS average_defenses \n", - "FROM champions \n", - "WHERE days_held = 404 AND reign > 1;\n", + "Testing select query: SELECT MIN(defense) as lowest_defense FROM Champions WHERE days_held = 345;\n", "[(None,)]\n", - "Testing create query: CREATE TABLE champions (\n", - " id SERIAL PRIMARY KEY,\n", - " champion_name VARCHAR(255),\n", - " defense INT,\n", - " days_held INT\n", + "Testing create query: CREATE TABLE games_records (\n", + " id INTEGER PRIMARY KEY AUTOINCREMENT,\n", + " game_date DATE NOT NULL,\n", + " team1_score INTEGER NOT NULL,\n", + " team2_score INTEGER NOT NULL\n", ");\n", - "Testing select query: SELECT MIN(defense) AS lowest_defense\n", - "FROM champions\n", - "WHERE days_held = 345;\n", - "[(None,)]\n", - "Testing create query: CREATE TABLE GameScores (\n", - " game_id INT PRIMARY KEY,\n", - " score_team1 INT,\n", - " score_team2 INT,\n", - " match_date DATE\n", - ");\n", - "Testing select query: SELECT match_date FROM GameScores WHERE score_team1 = 76 AND score_team2 = 72;\n", + "Testing select query: SELECT game_date FROM games_records WHERE team1_score = 76 AND team2_score = 72;\n", "[]\n", "Testing create query: CREATE TABLE GameResults (\n", - " date DATE,\n", - " team VARCHAR(50),\n", - " opponent VARCHAR(50),\n", - " result VARCHAR(10),\n", - " pitcher VARCHAR(50),\n", - " record VARCHAR(10),\n", - " attendance INT\n", + " game_id INT PRIMARY KEY,\n", + " pitcher_name VARCHAR(50),\n", + " pitcher_record VARCHAR(10),\n", + " attendance INT,\n", + " result VARCHAR(50)\n", ");\n", - "Testing select query: SELECT attendance FROM GameResults WHERE pitcher = 'Ponson' AND record = '1-5' AND result = 'loss';\n", + "Testing select query: SELECT attendance FROM GameResults WHERE pitcher_name = 'Ponson' AND pitcher_record = '1-5' AND result LIKE '%loss%';\n", "[]\n", - "Testing create query: CREATE TABLE Records (\n", - " record_id INT PRIMARY KEY,\n", - " date DATE NOT NULL,\n", - " value VARCHAR(10) NOT NULL\n", + "Testing create query: CREATE TABLE records (\n", + " id SERIAL PRIMARY KEY,\n", + " event_date DATE NOT NULL,\n", + " record_type TEXT NOT NULL,\n", + " record_value TEXT NOT NULL\n", ");\n", - "Testing select query: SELECT date FROM Records WHERE value = '36-39';\n", + "Testing select query: SELECT event_date FROM records WHERE record_value = '36-39';\n", "[]\n", "Testing create query: CREATE TABLE records (\n", - " id INT AUTO_INCREMENT PRIMARY KEY,\n", - " record VARCHAR(10) NOT NULL,\n", - " record_date DATE NOT NULL\n", + " record_id INT PRIMARY KEY,\n", + " win_count INT,\n", + " loss_count INT,\n", + " record_date DATE\n", ");\n", - "Testing select query: SELECT record_date FROM records WHERE record = '30-31';\n", + "Testing select query: SELECT record_date FROM records WHERE win_count = 30 AND loss_count = 31;\n", "[]\n", "Testing create query: CREATE TABLE games (\n", - " id SERIAL PRIMARY KEY,\n", - " player_name TEXT,\n", - " outcome TEXT,\n", - " losses TEXT,\n", - " opponent TEXT\n", + " id INT PRIMARY KEY,\n", + " player_name VARCHAR(255),\n", + " opponent_name VARCHAR(255),\n", + " player_score INT,\n", + " opponent_score INT\n", ");\n", - "Testing select query: SELECT opponent FROM games WHERE player_name = 'Leonard' AND outcome = 'loss' AND losses = '7-8';\n", + "Testing select query: SELECT opponent_name FROM games WHERE player_name = 'Leonard' AND player_score = 7 AND opponent_score = 8;\n", "[]\n", "Testing create query: CREATE TABLE GameScores (\n", - " id INT PRIMARY KEY AUTO_INCREMENT,\n", - " game_number INT NOT NULL,\n", - " score VARCHAR(50) NOT NULL\n", + " id INT PRIMARY KEY,\n", + " record VARCHAR(10),\n", + " score VARCHAR(10),\n", + " date_played DATE\n", ");\n", - "Error while creating the SQLite table: near \"AUTO_INCREMENT\": syntax error\n", - "Testing select query: SELECT score FROM GameScores WHERE game_number = 61; -- 18-43 is the record of wins-losses, which indicates game 61\n", - "Error while executing select query: no such table: GameScores\n", - "Testing create query: CREATE TABLE games (id INT PRIMARY KEY, opponent VARCHAR(255), score VARCHAR(255), date DATE, season_record VARCHAR(10));\n", - "Testing select query: SELECT score FROM games WHERE opponent = 'Royals' AND season_record = '24-52';\n", + "Testing select query: SELECT score FROM GameScores WHERE record = '18–43';\n", "[]\n", "Testing create query: CREATE TABLE game_scores (\n", - " id SERIAL PRIMARY KEY,\n", + " id INT PRIMARY KEY AUTO_INCREMENT,\n", + " game_date DATE,\n", + " opposing_team VARCHAR(50),\n", + " team_score INT,\n", + " opponent_score INT,\n", + " season_record VARCHAR(10)\n", + ");\n", + "Error while creating the SQLite table: near \"AUTO_INCREMENT\": syntax error\n", + "Testing select query: SELECT team_score, opponent_score FROM game_scores WHERE opposing_team = 'Royals' AND season_record = '24-52';\n", + "Error while executing select query: no such table: game_scores\n", + "Testing create query: CREATE TABLE GameRecord (\n", + " id INT PRIMARY KEY,\n", " record VARCHAR(10),\n", - " score VARCHAR(10)\n", + " score VARCHAR(50),\n", + " date DATE\n", ");\n", - "Testing select query: SELECT score FROM game_scores WHERE record = '22-46';\n", + "Testing select query: SELECT score FROM GameRecord WHERE record = '22–46';\n", "[]\n", - "Testing create query: CREATE TABLE military_specialties (\n", - " id INT PRIMARY KEY AUTO_INCREMENT,\n", + "Testing create query: CREATE TABLE MilitaryPersonnel (\n", + " id INT PRIMARY KEY,\n", " real_name VARCHAR(255),\n", " primary_specialty VARCHAR(255)\n", ");\n", - "Error while creating the SQLite table: near \"AUTO_INCREMENT\": syntax error\n", - "Testing select query: SELECT real_name FROM military_specialties WHERE primary_specialty = 'shock paratrooper';\n", - "Error while executing select query: no such table: military_specialties\n", - "Testing create query: CREATE TABLE Persons (ID INT PRIMARY KEY, FirstName VARCHAR(50), LastName VARCHAR(50), Birthplace VARCHAR(100));\n", + "Testing select query: SELECT real_name FROM MilitaryPersonnel WHERE primary_specialty = 'shock paratrooper';\n", + "[]\n", + "Testing create query: CREATE TABLE Persons (\n", + " PersonID INT PRIMARY KEY,\n", + " FirstName VARCHAR(255) NOT NULL,\n", + " LastName VARCHAR(255) NOT NULL,\n", + " Birthplace VARCHAR(255) NOT NULL\n", + ");\n", "Testing select query: SELECT Birthplace FROM Persons WHERE FirstName = 'Pete' AND LastName = 'Sanderson';\n", "[]\n", - "Testing create query: CREATE TABLE Employees (\n", - " id INT PRIMARY KEY,\n", - " name VARCHAR(100) NOT NULL,\n", - " role VARCHAR(100) NOT NULL\n", + "Testing create query: CREATE TABLE roles (\n", + " id SERIAL PRIMARY KEY,\n", + " person_name VARCHAR(100) NOT NULL,\n", + " role_title VARCHAR(100) NOT NULL\n", ");\n", - "Testing select query: SELECT role FROM Employees WHERE name = 'Jean-Luc Bouvier';\n", + "Testing select query: SELECT role_title FROM roles WHERE person_name = 'Jean-Luc Bouvier';\n", "[]\n", - "Testing create query: CREATE TABLE silent_attack_kayak_pilot (\n", + "Testing create query: CREATE TABLE KayakPilots (\n", " id INT PRIMARY KEY,\n", " real_name VARCHAR(255),\n", - " nickname VARCHAR(255)\n", + " nickname VARCHAR(255),\n", + " vessel_type VARCHAR(100)\n", ");\n", - "Testing select query: SELECT real_name FROM silent_attack_kayak_pilot WHERE nickname = 'silent attack kayak';\n", + "Testing select query: SELECT real_name FROM KayakPilots WHERE vessel_type = 'silent attack kayak';\n", "[]\n", - "Testing create query: CREATE TABLE Persons (\n", - " ID INT PRIMARY KEY,\n", - " FirstName VARCHAR(255),\n", - " LastName VARCHAR(255),\n", - " BirthPlace VARCHAR(255),\n", - " CodeName VARCHAR(255)\n", + "Testing create query: CREATE TABLE people (\n", + " id INT PRIMARY KEY,\n", + " name VARCHAR(100),\n", + " code_name VARCHAR(100),\n", + " city_of_birth VARCHAR(100),\n", + " date_of_birth DATE\n", ");\n", - "Testing select query: SELECT CodeName FROM Persons WHERE BirthPlace = 'Liverpool';\n", + "Testing select query: SELECT code_name FROM people WHERE city_of_birth = 'Liverpool';\n", "[]\n", - "Testing create query: CREATE TABLE Canoeing_Medalists (\n", - " id INT PRIMARY KEY AUTO_INCREMENT,\n", - " name VARCHAR(255) NOT NULL,\n", - " country VARCHAR(100),\n", - " medal_type ENUM('gold', 'silver', 'bronze') NOT NULL,\n", - " event VARCHAR(255)\n", + "Testing create query: CREATE TABLE CanoeingMedalists (\n", + " id INT PRIMARY KEY,\n", + " name VARCHAR(100) NOT NULL,\n", + " event VARCHAR(100) NOT NULL,\n", + " medal_type VARCHAR(50) NOT NULL,\n", + " year INT NOT NULL\n", ");\n", - "Error while creating the SQLite table: near \"AUTO_INCREMENT\": syntax error\n", - "Testing select query: SELECT name FROM Canoeing_Medalists;\n", - "Error while executing select query: no such table: Canoeing_Medalists\n", - "Testing create query: CREATE TABLE WomensHalfMiddleweightEventGames (\n", - " EventID INT PRIMARY KEY,\n", - " GameName VARCHAR(255) NOT NULL,\n", - " Year INT NOT NULL\n", + "Testing select query: SELECT name FROM CanoeingMedalists WHERE event = 'Canoeing';\n", + "[]\n", + "Testing create query: CREATE TABLE HalfMiddleweightEvents (\n", + " GameID INT PRIMARY KEY,\n", + " GameName VARCHAR(255),\n", + " Event VARCHAR(50),\n", + " Year INT\n", + ");\n", + "Testing select query: SELECT GameName, Year FROM HalfMiddleweightEvents WHERE Event = 'Women\\'s Half Middleweight';\n", + "Error while executing select query: near \"s\": syntax error\n", + "Testing create query: CREATE TABLE OlympicMedalists2000 (\n", + " AthleteID INT PRIMARY KEY,\n", + " Name VARCHAR(255) NOT NULL,\n", + " MedalType VARCHAR(50) NOT NULL,\n", + " Event VARCHAR(255) NOT NULL,\n", + " Country VARCHAR(100) NOT NULL\n", ");\n", - "Testing select query: SELECT GameName, Year\n", - "FROM WomensHalfMiddleweightEventGames;\n", + "Testing select query: SELECT Name, Event, Country FROM OlympicMedalists2000 WHERE MedalType = 'Bronze' AND Event = 'Specific Event Name';\n", "[]\n", - "Testing create query: CREATE TABLE OlympicMedals (\n", - " id SERIAL PRIMARY KEY,\n", - " athlete_name VARCHAR(255),\n", - " event VARCHAR(255),\n", - " medal_type ENUM('Gold', 'Silver', 'Bronze'),\n", - " year INT,\n", - " city VARCHAR(255)\n", + "Testing create query: CREATE TABLE GameAttendance (\n", + " GameID INT PRIMARY KEY,\n", + " Opponent VARCHAR(50),\n", + " Attendance INT\n", ");\n", - "Error while creating the SQLite table: near \"'Gold'\": syntax error\n", - "Testing select query: SELECT athlete_name, event\n", - "FROM OlympicMedals\n", - "WHERE medal_type = 'Bronze' AND year = 2000 AND city = 'Sydney';\n", - "Error while executing select query: no such table: OlympicMedals\n", - "Testing create query: CREATE TABLE game_attendance (\n", - " game_id INT PRIMARY KEY,\n", - " opponent VARCHAR(255),\n", - " attendees INT\n", + "Testing select query: SELECT SUM(Attendance) AS Total_Attendance\n", + "FROM GameAttendance\n", + "WHERE Opponent = 'Twins';\n", + "[(None,)]\n", + "Testing create query: CREATE TABLE sports_records (\n", + " id SERIAL PRIMARY KEY,\n", + " date DATE NOT NULL,\n", + " record VARCHAR(255) NOT NULL\n", ");\n", - "Testing select query: SELECT COUNT(*) FROM game_attendance WHERE opponent = 'twins';\n", - "[(0,)]\n", - "Testing create query: CREATE TABLE Records (Date DATE, Record VARCHAR(5));\n", - "Testing select query: SELECT Date FROM Records WHERE Record = '41-46';\n", + "Testing select query: SELECT date FROM sports_records WHERE record = '41-46';\n", "[]\n", "Testing create query: CREATE TABLE Scores (\n", - " id INT PRIMARY KEY AUTO_INCREMENT,\n", - " score INT NOT NULL,\n", - " wins INT NOT NULL,\n", - " losses INT NOT NULL\n", - ");\n", - "Error while creating the SQLite table: near \"AUTO_INCREMENT\": syntax error\n", - "Testing select query: SELECT score FROM Scores WHERE wins = 48 AND losses = 55;\n", - "Error while executing select query: no such table: Scores\n", - "Testing create query: CREATE TABLE ScoresRecords (\n", " id INT PRIMARY KEY,\n", - " score INT NOT NULL,\n", - " record VARCHAR(20) NOT NULL\n", + " score_name VARCHAR(255),\n", + " score_value VARCHAR(10)\n", + ");\n", + "Testing select query: SELECT score_name FROM Scores WHERE score_value = '48-55';\n", + "[]\n", + "Testing create query: CREATE TABLE sports_records (\n", + " team_name VARCHAR(255),\n", + " games_won INT,\n", + " games_lost INT,\n", + " PRIMARY KEY (team_name)\n", ");\n", - "Testing select query: SELECT score FROM ScoresRecords WHERE record = '44-49';\n", + "Testing select query: SELECT team_name FROM sports_records WHERE games_won = 44 AND games_lost = 49;\n", "[]\n", "Testing create query: CREATE TABLE games (\n", - " id INT PRIMARY KEY,\n", - " score VARCHAR(10),\n", + " game_id INT PRIMARY KEY,\n", " opponent VARCHAR(50),\n", - " record VARCHAR(5)\n", + " record VARCHAR(10),\n", + " score VARCHAR(10)\n", ");\n", "Testing select query: SELECT score FROM games WHERE opponent = 'white sox' AND record = '2-0';\n", "[]\n", - "Testing create query: CREATE TABLE votes (\n", - " id INT PRIMARY KEY,\n", - " candidate_name VARCHAR(255),\n", - " vote_count INT\n", + "Testing create query: CREATE TABLE election_votes (\n", + " candidate_name VARCHAR(255),\n", + " votes_received INT\n", ");\n", - "Testing select query: SELECT vote_count FROM votes WHERE candidate_name = 'Candice Sjostrom';\n", + "Testing select query: SELECT votes_received FROM election_votes WHERE candidate_name = 'Candice Sjostrom';\n", "[]\n", "Testing create query: CREATE TABLE election_results (\n", " candidate_name VARCHAR(100),\n", " votes_received INT,\n", " total_votes INT\n", ");\n", - "Testing select query: SELECT (votes_received::FLOAT / total_votes) * 100 AS percentage_received\n", - "FROM election_results\n", + "Testing select query: SELECT (votes_received * 100.0) / total_votes AS percentage_received \n", + "FROM election_results \n", "WHERE candidate_name = 'Chris Wright';\n", - "Error while executing select query: unrecognized token: \":\"\n", + "[]\n", "Testing create query: CREATE TABLE election_results (\n", - " year INT,\n", + " election_year INT,\n", " candidate_name VARCHAR(255),\n", - " percentage_of_vote DECIMAL(5, 2),\n", + " vote_count INT,\n", + " vote_percentage DECIMAL(5, 2),\n", " office VARCHAR(255),\n", - " votes INT\n", + " office_district INT\n", ");\n", - "Testing select query: SELECT votes FROM election_results \n", - "WHERE year > 1992 AND \n", - " percentage_of_vote = 1.59 AND \n", - " office = 'us representative 4';\n", + "Testing select query: SELECT vote_count\n", + "FROM election_results\n", + "WHERE election_year > 1992 \n", + " AND vote_percentage = 1.59 \n", + " AND office = 'us representative' \n", + " AND office_district = 4;\n", "[]\n", "Testing create query: CREATE TABLE Representatives (\n", - " id INT PRIMARY KEY,\n", - " name VARCHAR(255),\n", - " start_year INT,\n", - " end_year INT\n", + " id SERIAL PRIMARY KEY,\n", + " first_name VARCHAR(50),\n", + " last_name VARCHAR(50),\n", + " start_year INT,\n", + " end_year INT\n", ");\n", - "\n", - "INSERT INTO Representatives (id, name, start_year, end_year) VALUES\n", - "(1, 'J. Smith Young', 2010, 2014),\n", - "(2, 'Another Representative', 2015, 2020);\n", - "Error while creating the SQLite table: You can only execute one statement at a time.\n", - "Testing select query: SELECT start_year, end_year FROM Representatives WHERE name = 'J. Smith Young';\n", - "Error while executing select query: no such table: Representatives\n", + "Testing select query: SELECT start_year, end_year FROM Representatives WHERE first_name = 'J.' AND last_name = 'Smith Young';\n", + "[]\n", "Testing create query: CREATE TABLE Politicians (\n", " id INT PRIMARY KEY,\n", - " name VARCHAR(255),\n", - " party VARCHAR(255)\n", + " name VARCHAR(100),\n", + " party VARCHAR(100)\n", ");\n", "Testing select query: SELECT party FROM Politicians WHERE name = 'Thomas L. Young';\n", "[]\n", - "Testing create query: CREATE TABLE country_medals (\n", - " country VARCHAR(100),\n", - " gold INT,\n", - " silver INT,\n", - " bronze INT,\n", - " total_medals INT GENERATED ALWAYS AS (gold + silver + bronze) STORED\n", + "Testing create query: CREATE TABLE MedalCounts (\n", + " Country VARCHAR(100),\n", + " Gold INT,\n", + " Silver INT,\n", + " Bronze INT,\n", + " Total INT\n", ");\n", - "Testing select query: SELECT MIN(total_medals) AS lowest_total_medals\n", - "FROM country_medals\n", - "WHERE gold = 0 AND bronze > 2 AND silver > 1;\n", + "Testing select query: SELECT MIN(Total) AS LowestMedalCount FROM MedalCounts \n", + "WHERE Gold = 0 AND Bronze > 2 AND Silver > 1;\n", "[(None,)]\n", - "Testing create query: CREATE TABLE olympic_medals (\n", - " country VARCHAR(100),\n", + "Testing create query: CREATE TABLE country_medals (\n", " rank INT,\n", - " gold INT,\n", - " silver INT,\n", - " bronze INT,\n", - " total INT\n", + " country_name VARCHAR(255),\n", + " gold_medals INT,\n", + " silver_medals INT,\n", + " bronze_medals INT,\n", + " total_medals INT\n", ");\n", - "Testing select query: SELECT SUM(silver) AS total_silver_medals \n", - "FROM olympic_medals \n", - "WHERE rank = 14 AND total < 1;\n", + "Testing select query: SELECT SUM(silver_medals) FROM country_medals WHERE rank = 14 AND total_medals < 1;\n", "[(None,)]\n", - "Testing create query: CREATE TABLE football_statistics (\n", + "Testing create query: CREATE TABLE player_stats (\n", " player_id INT PRIMARY KEY,\n", - " player_name VARCHAR(255),\n", + " player_name VARCHAR(100),\n", " tackles INT,\n", " fumble_recoveries INT,\n", " forced_fumbles INT\n", ");\n", - "Testing select query: SELECT tackles FROM football_statistics WHERE fumble_recoveries > 0 AND forced_fumbles > 0;\n", + "Testing select query: SELECT tackles FROM player_stats WHERE fumble_recoveries > 0 AND forced_fumbles > 0;\n", "[]\n", - "Testing create query: CREATE TABLE player_stats (\n", - " id SERIAL PRIMARY KEY,\n", - " player_name VARCHAR(100),\n", - " solo_tackles INT,\n", - " forced_fumbles INT\n", - ");\n", - "Testing select query: SELECT COUNT(*) FROM player_stats \n", - "WHERE player_name = 'Jim Laney' AND solo_tackles < 2;\n", - "[(0,)]\n", - "Testing create query: CREATE TABLE players_tackles (\n", + "Testing create query: CREATE TABLE DefensiveStats (\n", " player_id INT PRIMARY KEY,\n", - " player_name VARCHAR(50),\n", + " player_name VARCHAR(100),\n", " solo_tackles INT,\n", - " total_tackles INT\n", + " forced_fumbles INT\n", + ");\n", + "Testing select query: SELECT forced_fumbles FROM DefensiveStats WHERE player_name = 'jim laney' AND solo_tackles < 2;\n", + "[]\n", + "Testing create query: CREATE TABLE PlayersStats (\n", + " PlayerID INT PRIMARY KEY,\n", + " PlayerName VARCHAR(255),\n", + " SoloTackles INT,\n", + " Total INT\n", ");\n", - "Testing select query: SELECT MAX(total_tackles) as high_total\n", - "FROM players_tackles\n", - "WHERE solo_tackles > 15;\n", + "Testing select query: SELECT MAX(Total) AS HighTotal FROM PlayersStats WHERE SoloTackles > 15;\n", "[(None,)]\n", - "Testing create query: CREATE TABLE FootballStats (\n", - " player_name VARCHAR(255),\n", + "Testing create query: CREATE TABLE PlayerStats (\n", + " player_id INT PRIMARY KEY,\n", + " player_name VARCHAR(100),\n", " fumble_recoveries INT,\n", " forced_fumbles INT,\n", " sacks INT,\n", " solo_tackles INT\n", ");\n", - "Testing select query: SELECT fumble_recoveries FROM FootballStats \n", - "WHERE player_name = 'Scott Gajos' AND forced_fumbles = 0 AND sacks = 0 AND solo_tackles < 2;\n", - "[]\n", - "Testing create query: CREATE TABLE matches (\n", - " match_id INT PRIMARY KEY,\n", - " date_time TIMESTAMP,\n", - " location VARCHAR(255),\n", - " home_team VARCHAR(255),\n", - " opponent VARCHAR(255)\n", - ");\n", - "Testing select query: SELECT opponent FROM matches WHERE date_time = '2023-10-20 20:00:00' AND location = 'Camp Nou';\n", + "Testing select query: SELECT fumble_recoveries FROM PlayerStats WHERE player_name = 'Scott Gajos' AND forced_fumbles = 0 AND sacks = 0 AND solo_tackles < 2;\n", "[]\n", "Testing create query: CREATE TABLE Matches (\n", - " match_id INT PRIMARY KEY,\n", - " date DATE,\n", - " time TIME,\n", - " home_team VARCHAR(100),\n", - " away_team VARCHAR(100),\n", - " home_score INT,\n", - " away_score INT\n", + " MatchID INT PRIMARY KEY,\n", + " HomeTeam VARCHAR(255),\n", + " OpponentTeam VARCHAR(255),\n", + " MatchTime TIME,\n", + " Stadium VARCHAR(255)\n", ");\n", - "Testing select query: SELECT time \n", - "FROM Matches \n", - "WHERE home_score = 3 AND away_score = 2 OR home_score = 2 AND away_score = 3;\n", + "Testing select query: SELECT OpponentTeam FROM Matches WHERE MatchTime = '20:00:00' AND Stadium = 'Camp Nou';\n", "[]\n", "Testing create query: CREATE TABLE matches (\n", - " match_id INT PRIMARY KEY,\n", - " home_team VARCHAR(50),\n", - " away_team VARCHAR(50),\n", - " ground VARCHAR(100),\n", - " match_date DATE\n", - ");\n", - "Testing select query: SELECT ground FROM matches WHERE away_team = 'Aston Villa';\n", - "[]\n", - "Testing create query: CREATE TABLE competitions (\n", - " id SERIAL PRIMARY KEY,\n", - " name VARCHAR(255),\n", - " location VARCHAR(255),\n", + " id INT PRIMARY KEY,\n", " date DATE,\n", " time TIME,\n", - " competition_type VARCHAR(255)\n", + " score VARCHAR(5)\n", ");\n", - "Testing select query: SELECT competition_type FROM competitions WHERE location = 'San Siro' AND time = '18:30:00' AND date = CURRENT_DATE;\n", + "Testing select query: SELECT time FROM matches WHERE score = '3-2';\n", "[]\n", - "Testing create query: CREATE TABLE RedwoodSchoolLocality (\n", - " id INT PRIMARY KEY AUTO_INCREMENT,\n", - " name VARCHAR(255) NOT NULL,\n", - " decile INT NOT NULL,\n", - " locality VARCHAR(255) NOT NULL\n", + "Testing create query: CREATE TABLE Matches (\n", + " MatchID INT PRIMARY KEY,\n", + " HomeTeam VARCHAR(255),\n", + " AwayTeam VARCHAR(255),\n", + " Ground VARCHAR(255),\n", + " MatchDate DATE\n", + ");\n", + "Testing select query: SELECT Ground FROM Matches WHERE HomeTeam = 'Aston Villa' OR AwayTeam = 'Aston Villa';\n", + "[]\n", + "Testing create query: CREATE TABLE CompetitionEvents (\n", + " EventID INT PRIMARY KEY AUTO_INCREMENT,\n", + " CompetitionName VARCHAR(100),\n", + " Location VARCHAR(100),\n", + " EventTime TIME,\n", + " EventDate DATE\n", ");\n", "Error while creating the SQLite table: near \"AUTO_INCREMENT\": syntax error\n", - "Testing select query: SELECT COUNT(DISTINCT decile) AS total_deciles FROM RedwoodSchoolLocality WHERE locality = 'Redwood School';\n", - "Error while executing select query: no such table: RedwoodSchoolLocality\n", - "Testing create query: CREATE TABLE Reports (\n", - " report_id INT PRIMARY KEY,\n", - " report_name VARCHAR(255),\n", - " details TEXT\n", + "Testing select query: SELECT CompetitionName FROM CompetitionEvents \n", + "WHERE Location = 'San Siro' AND EventTime = '18:30:00' \n", + "ORDER BY EventDate DESC \n", + "LIMIT 1;\n", + "Error while executing select query: no such table: CompetitionEvents\n", + "Testing create query: CREATE TABLE school_locality_deciles (\n", + " locality_id INT PRIMARY KEY,\n", + " locality_name VARCHAR(255),\n", + " total_decile INT\n", + ");\n", + "Testing select query: SELECT locality_name, total_decile FROM school_locality_deciles WHERE locality_name = 'redwood';\n", + "[]\n", + "Testing create query: CREATE TABLE racing_reports (\n", + " report_id INT PRIMARY KEY,\n", + " report_name VARCHAR(255) NOT NULL,\n", + " track_name VARCHAR(255),\n", + " event_date DATE\n", ");\n", - "Testing select query: SELECT report_name FROM Reports WHERE details LIKE '%Circuit of Tripoli%';\n", + "Testing select query: SELECT report_name FROM racing_reports WHERE track_name = 'Circuit of Tripoli';\n", "[]\n" ] } @@ -1423,7 +1426,7 @@ }, { "cell_type": "code", - "execution_count": 134, + "execution_count": 174, "id": "8fe18367", "metadata": {}, "outputs": [], @@ -1448,7 +1451,7 @@ }, { "cell_type": "code", - "execution_count": 135, + "execution_count": 175, "id": "650e6159", "metadata": {}, "outputs": [ @@ -1456,12 +1459,12 @@ "data": { "text/plain": [ "unit_test_evaluation\n", - "SQL correct 42\n", - "SQL incorrect 8\n", + "SQL correct 46\n", + "SQL incorrect 4\n", "Name: count, dtype: int64" ] }, - "execution_count": 135, + "execution_count": 175, "metadata": {}, "output_type": "execute_result" } @@ -1472,7 +1475,7 @@ }, { "cell_type": "code", - "execution_count": 137, + "execution_count": 176, "id": "b3f98f81", "metadata": { "scrolled": true @@ -1483,12 +1486,12 @@ "text/plain": [ "evaluation_score\n", "5 33\n", - "4 16\n", - "3 1\n", + "4 15\n", + "3 2\n", "Name: count, dtype: int64" ] }, - "execution_count": 137, + "execution_count": 176, "metadata": {}, "output_type": "execute_result" } @@ -1509,7 +1512,7 @@ }, { "cell_type": "code", - "execution_count": 138, + "execution_count": 177, "id": "513a2da1", "metadata": {}, "outputs": [ @@ -1535,7 +1538,7 @@ }, { "cell_type": "code", - "execution_count": 139, + "execution_count": 178, "id": "70bd3e32", "metadata": {}, "outputs": [ @@ -1543,155 +1546,155 @@ "name": "stdout", "output_type": "stream", "text": [ - "Testing create query: CREATE TABLE partnerships (id INT PRIMARY KEY, player_one VARCHAR(255), player_two VARCHAR(255), venue VARCHAR(255));\n", - "Testing select query: SELECT venue FROM partnerships WHERE player_one = 'Shoaib Malik' AND player_two = 'Misbah-ul-Haq';\n", + "Testing create query: CREATE TABLE cricket_partnership (id INT PRIMARY KEY, player1 VARCHAR(50), player2 VARCHAR(50), venue VARCHAR(100));\n", + "Testing select query: SELECT venue FROM cricket_partnership WHERE (player1 = 'Shoaib Malik' AND player2 = 'Misbah-ul-Haq') OR (player1 = 'Misbah-ul-Haq' AND player2 = 'Shoaib Malik');\n", "[]\n", - "Testing create query: CREATE TABLE cricket_partnerships (id INT PRIMARY KEY, player1 VARCHAR(100), player2 VARCHAR(100), venue VARCHAR(100), match_date DATE, runs INT);\n", - "Testing select query: SELECT venue FROM cricket_partnerships WHERE player1 = 'Herschelle Gibbs' AND player2 = 'Justin Kemp';\n", + "Testing create query: CREATE TABLE cricket_partnerships (id INT PRIMARY KEY, player_a VARCHAR(50), player_b VARCHAR(50), venue VARCHAR(100), date DATE);\n", + "Testing select query: SELECT venue FROM cricket_partnerships WHERE (player_a = 'Herschelle Gibbs' AND player_b = 'Justin Kemp') OR (player_a = 'Justin Kemp' AND player_b = 'Herschelle Gibbs');\n", "[]\n", - "Testing create query: CREATE TABLE PointsTable (NumberPlayed INT, Points INT);\n", - "Testing select query: SELECT NumberPlayed FROM PointsTable WHERE Points = 310;\n", + "Testing create query: CREATE TABLE Points_Table (Number_Played INT, Points INT);\n", + "Testing select query: SELECT Number_Played FROM Points_Table WHERE Points = 310;\n", "[]\n", - "Testing create query: CREATE TABLE TeamStandings (TeamID INT PRIMARY KEY, TeamName VARCHAR(100), PointsAgainst INT, LosingBonus INT);\n", - "Testing select query: SELECT LosingBonus FROM TeamStandings WHERE PointsAgainst = 588;\n", + "Testing create query: CREATE TABLE TeamResults (TeamID INT PRIMARY KEY, TeamName VARCHAR(100), PointsFor INT, PointsAgainst INT, Wins INT, Losses INT, LosingBonus INT);\n", + "Testing select query: SELECT LosingBonus FROM TeamResults WHERE PointsAgainst = 588;\n", "[]\n", - "Testing create query: CREATE TABLE RugbyMatches (MatchID INT PRIMARY KEY, TriesFor INT, TriesAgainst INT, LosingBonus INT);\n", - "Testing select query: SELECT TriesAgainst FROM RugbyMatches WHERE LosingBonus = 7;\n", + "Testing create query: CREATE TABLE RugbyMatches (MatchID INT PRIMARY KEY, TriesAgainst INT, LosingBonus INT);\n", + "Testing select query: SELECT * FROM RugbyMatches WHERE LosingBonus = 7;\n", "[]\n", - "Testing create query: CREATE TABLE RugbyScores (TryBonus INT, PointsAgainst INT);\n", - "Testing select query: SELECT TryBonus FROM RugbyScores WHERE PointsAgainst = 488;\n", + "Testing create query: CREATE TABLE RugbyTeamStats (TeamID INT PRIMARY KEY, TeamName VARCHAR(255), TryBonus INT, PointsAgainst INT);\n", + "Testing select query: SELECT TryBonus FROM RugbyTeamStats WHERE PointsAgainst = 488;\n", "[]\n", - "Testing create query: CREATE TABLE Points (id INT PRIMARY KEY, description VARCHAR(255), try_bonus INT);\n", - "Testing select query: SELECT * FROM Points WHERE try_bonus = 140;\n", + "Testing create query: CREATE TABLE Points (id INT PRIMARY KEY, bonus_type VARCHAR(50), bonus_value INT);\n", + "Testing select query: SELECT * FROM Points WHERE bonus_type = 'Try' AND bonus_value = 140;\n", "[]\n", - "Testing create query: CREATE TABLE DrawnData (MatchID INT PRIMARY KEY, Team VARCHAR(100), TriesAgainst INT);\n", - "Testing select query: SELECT MatchID, Team FROM DrawnData WHERE TriesAgainst = 0;\n", + "Testing create query: CREATE TABLE Matches (Drawn BOOLEAN, Tries_Against INTEGER);\n", + "Testing select query: SELECT * FROM Matches WHERE Drawn = TRUE AND Tries_Against = 0;\n", "[]\n", - "Testing create query: CREATE TABLE champions (id INT PRIMARY KEY, name VARCHAR(255), reign_days INT, defenses INT);\n", - "Testing select query: SELECT reign_days FROM champions WHERE reign_days > 3 AND defenses = 1;\n", + "Testing create query: CREATE TABLE Champions (id INT PRIMARY KEY, name VARCHAR(50), days_held INT, reign INT, defenses INT);\n", + "Testing select query: SELECT days_held FROM Champions WHERE reign > 3 AND defenses = 1;\n", "[]\n", - "Testing create query: CREATE TABLE champions (id INT PRIMARY KEY, name VARCHAR(255), reign_duration INT, number_of_defenses INT);\n", - "Testing select query: SELECT reign_duration FROM champions WHERE reign_duration > 3 AND number_of_defenses < 1;\n", + "Testing create query: CREATE TABLE champions (id INT, name VARCHAR(255), days_held INT, reign_count INT, defenses INT);\n", + "Testing select query: SELECT days_held FROM champions WHERE reign_count > 3 AND defenses < 1;\n", "[]\n", - "Testing create query: CREATE TABLE champions (id INT PRIMARY KEY, name VARCHAR(100), days_held INT, reign INT, defenses INT);\n", + "Testing create query: CREATE TABLE champions (id INT PRIMARY KEY, name VARCHAR(255), days_held INT, reign INT, defenses INT);\n", "Testing select query: SELECT AVG(defenses) AS average_defenses FROM champions WHERE days_held = 404 AND reign > 1;\n", "[(None,)]\n", - "Testing create query: CREATE TABLE ChampionshipHistory (ChampionName VARCHAR(255), Defense INT, DaysHeld INT, PRIMARY KEY (ChampionName));\n", - "Testing select query: SELECT MIN(Defense) FROM ChampionshipHistory WHERE DaysHeld = 345;\n", + "Testing create query: CREATE TABLE champions (id INT PRIMARY KEY, name VARCHAR(255), defense INT, days_held INT);\n", + "Testing select query: SELECT MIN(defense) AS lowest_defense FROM champions WHERE days_held = 345;\n", "[(None,)]\n", - "Testing create query: CREATE TABLE game_records (id INT PRIMARY KEY, score VARCHAR(7), date DATE);\n", - "Testing select query: SELECT date FROM game_records WHERE score = '76-72';\n", + "Testing create query: CREATE TABLE games (date DATE, team1_score INT, team2_score INT);\n", + "Testing select query: SELECT date FROM games WHERE (team1_score = 76 AND team2_score = 72) OR (team1_score = 72 AND team2_score = 76);\n", "[]\n", - "Testing create query: CREATE TABLE games (id INT PRIMARY KEY, player_name VARCHAR(50), outcome VARCHAR(10), attendance INT);\n", - "Testing select query: SELECT attendance FROM games WHERE player_name = 'Ponson' AND outcome = 'loss' AND id = 1;\n", + "Testing create query: CREATE TABLE match_results (match_id INT, team_name VARCHAR(255), player_name VARCHAR(255), attendance INT, result VARCHAR(50));\n", + "Testing select query: SELECT attendance FROM match_results WHERE player_name = 'Ponson' AND result = 'loss' AND match_id = 1;\n", "[]\n", - "Testing create query: CREATE TABLE records (id INT PRIMARY KEY, date DATE, record_range VARCHAR(10));\n", - "Testing select query: SELECT date FROM records WHERE record_range = '36-39';\n", + "Testing create query: CREATE TABLE daily_records (id INT PRIMARY KEY, record_value INT, record_date DATE);\n", + "Testing select query: SELECT record_date FROM daily_records WHERE record_value BETWEEN 36 AND 39;\n", "[]\n", - "Testing create query: CREATE TABLE records (id INT PRIMARY KEY, result VARCHAR(255), date DATE);\n", - "Testing select query: SELECT date FROM records WHERE result = '30-31';\n", + "Testing create query: CREATE TABLE records (id INTEGER PRIMARY KEY, record VARCHAR(10), date DATE);\n", + "Testing select query: SELECT date FROM records WHERE record = '30-31';\n", "[]\n", - "Testing create query: CREATE TABLE games (id INT PRIMARY KEY, player_name VARCHAR(255), record VARCHAR(10), opponent VARCHAR(255), result VARCHAR(10));\n", - "Testing select query: SELECT opponent FROM games WHERE player_name = 'Leonard' AND record = '7–8' AND result = 'loss';\n", + "Testing create query: CREATE TABLE baseball_games (game_date DATE, opponent TEXT, player_name TEXT, record TEXT, outcome TEXT);\n", + "Testing select query: SELECT opponent FROM baseball_games WHERE player_name = 'Leonard' AND record = '7-8';\n", "[]\n", - "Testing create query: CREATE TABLE GameScores (id INT PRIMARY KEY, team1_score INT, team2_score INT, record VARCHAR(5));\n", - "Testing select query: SELECT team1_score, team2_score FROM GameScores WHERE record = '18-43';\n", + "Testing create query: CREATE TABLE Games (id INT PRIMARY KEY, record VARCHAR(10), score VARCHAR(10));\n", + "Testing select query: SELECT score FROM Games WHERE record = '18–43';\n", "[]\n", - "Testing create query: CREATE TABLE game_scores (id INT PRIMARY KEY, team1 VARCHAR(50), team2 VARCHAR(50), score1 INT, score2 INT, team1_record VARCHAR(10), team2_record VARCHAR(10));\n", - "Testing select query: SELECT score1, score2 FROM game_scores WHERE (team1 = 'Royals' AND team2_record = '24-52') OR (team2 = 'Royals' AND team1_record = '24-52');\n", + "Testing create query: CREATE TABLE baseball_games (id INT PRIMARY KEY, opponent VARCHAR(50), our_score INT, their_score INT, our_record VARCHAR(10));\n", + "Testing select query: SELECT our_score, their_score FROM baseball_games WHERE opponent = 'Royals' AND our_record = '24-52';\n", "[]\n", - "Testing create query: CREATE TABLE game_scores (record VARCHAR(255), score INT);\n", - "Testing select query: SELECT score FROM game_scores WHERE record = '22–46';\n", + "Testing create query: CREATE TABLE GameScores (id INTEGER PRIMARY KEY, record VARCHAR(10), score VARCHAR(10));\n", + "Testing select query: SELECT score FROM GameScores WHERE record = '22–46';\n", "[]\n", - "Testing create query: CREATE TABLE MilitarySpecialists (id INT PRIMARY KEY, real_name VARCHAR(255), primary_specialty VARCHAR(255));\n", - "Testing select query: SELECT real_name FROM MilitarySpecialists WHERE primary_specialty = 'shock paratrooper';\n", + "Testing create query: CREATE TABLE MilitarySpecialty (real_name VARCHAR(100), specialty VARCHAR(100));\n", + "Testing select query: SELECT real_name FROM MilitarySpecialty WHERE specialty = 'shock paratrooper';\n", "[]\n", - "Testing create query: CREATE TABLE People (Name TEXT, Birthplace TEXT, PRIMARY KEY(Name));\n", + "Testing create query: CREATE TABLE People (Name VARCHAR(255), Birthplace VARCHAR(255));\n", "Testing select query: SELECT Birthplace FROM People WHERE Name = 'Pete Sanderson';\n", "[]\n", - "Testing create query: CREATE TABLE Roles (id INT PRIMARY KEY, name VARCHAR(255), person VARCHAR(255));\n", - "Testing select query: SELECT role FROM Roles WHERE person = 'Jean-Luc Bouvier';\n", - "Error while executing select query: no such column: role\n", - "Testing create query: CREATE TABLE Pilots (id INT PRIMARY KEY, real_name VARCHAR(100), role VARCHAR(100), vehicle VARCHAR(100));\n", - "Testing select query: SELECT real_name FROM Pilots WHERE role = 'pilot' AND vehicle = 'silent attack kayak';\n", + "Testing create query: CREATE TABLE Roles (person_name VARCHAR(255), role VARCHAR(255));\n", + "Testing select query: SELECT role FROM Roles WHERE person_name = 'Jean-Luc Bouvier';\n", "[]\n", - "Testing create query: CREATE TABLE Persons (ID INT PRIMARY KEY, Name VARCHAR(100), CodeName VARCHAR(50), BirthPlace VARCHAR(100));\n", - "Testing select query: SELECT CodeName FROM Persons WHERE BirthPlace = 'Liverpool';\n", + "Testing create query: CREATE TABLE KayakPilots (PilotID INT PRIMARY KEY, RealName VARCHAR(255), Alias VARCHAR(255));\n", + "Testing select query: SELECT RealName FROM KayakPilots WHERE Alias = 'silent attack kayak';\n", "[]\n", - "Testing create query: CREATE TABLE CanoeingMedalists (ID INT PRIMARY KEY, Name VARCHAR(100), Country VARCHAR(50), MedalType VARCHAR(10));\n", + "Testing create query: CREATE TABLE people (id INT PRIMARY KEY, name VARCHAR(100), birth_city VARCHAR(100), code_name VARCHAR(100));\n", + "Testing select query: SELECT code_name FROM people WHERE birth_city = 'Liverpool';\n", + "[]\n", + "Testing create query: CREATE TABLE CanoeingMedalists (ID INT PRIMARY KEY, Name VARCHAR(100), Country VARCHAR(100), MedalType VARCHAR(50));\n", "Testing select query: SELECT Name FROM CanoeingMedalists;\n", "[]\n", - "Testing create query: CREATE TABLE WomensHalfMiddleweightGames (id SERIAL PRIMARY KEY, game_name VARCHAR(255) NOT NULL, year INT NOT NULL);\n", - "Testing select query: SELECT game_name, year FROM WomensHalfMiddleweightGames;\n", + "Testing create query: CREATE TABLE WomensHalfMiddleweightEvents (id INT PRIMARY KEY, game_name TEXT, year INT, location TEXT);\n", + "Testing select query: SELECT game_name, year, location FROM WomensHalfMiddleweightEvents WHERE game_name IS NOT NULL;\n", "[]\n", - "Testing create query: CREATE TABLE OlympicMedals (Year INT, City VARCHAR(50), Medal VARCHAR(10), Event VARCHAR(100), Athlete VARCHAR(100));\n", - "Testing select query: SELECT Athlete FROM OlympicMedals WHERE Year = 2000 AND City = 'Sydney' AND Medal = 'Bronze';\n", + "Testing create query: CREATE TABLE BronzeMedals (Year INT, Games VARCHAR(100), Sport VARCHAR(100), Event VARCHAR(100), Athlete VARCHAR(100), Country VARCHAR(100));\n", + "Testing select query: SELECT Athlete, Country FROM BronzeMedals WHERE Year = 2000 AND Games = 'Sydney';\n", "[]\n", - "Testing create query: CREATE TABLE GameAttendance (game_id INT PRIMARY KEY, opponent VARCHAR(255), attendees INT);\n", - "Testing select query: SELECT COUNT(*) FROM GameAttendance WHERE opponent = 'twins';\n", + "Testing create query: CREATE TABLE BaseballMatches (match_id INT PRIMARY KEY, date DATE, opponent VARCHAR(100), attendance INT);\n", + "Testing select query: SELECT COUNT(*) FROM BaseballMatches WHERE opponent = 'twins';\n", "[(0,)]\n", - "Testing create query: CREATE TABLE Records (id INT PRIMARY KEY, date DATE, result VARCHAR(5));\n", - "Testing select query: SELECT date FROM Records WHERE result = '41-46';\n", + "Testing create query: CREATE TABLE Records (Date DATE, WinCount INT, LossCount INT, PRIMARY KEY (Date));\n", + "Testing select query: SELECT Date FROM Records WHERE WinCount = 41 AND LossCount = 46;\n", "[]\n", - "Testing create query: CREATE TABLE Scores (Record VARCHAR(5), Score INT);\n", - "Testing select query: SELECT Score FROM Scores WHERE Record = '48-55';\n", + "Testing create query: CREATE TABLE team_records (id INTEGER PRIMARY KEY, team_name VARCHAR(100), wins INTEGER, losses INTEGER, score INTEGER);\n", + "Testing select query: SELECT score FROM team_records WHERE wins = 48 AND losses = 55;\n", "[]\n", - "Testing create query: CREATE TABLE Scores (Record VARCHAR(50));\n", - "Testing select query: SELECT * FROM Scores WHERE Record = '44-49';\n", + "Testing create query: CREATE TABLE Scores (record VARCHAR(10), score INT);\n", + "Testing select query: SELECT score FROM Scores WHERE record = '44-49';\n", "[]\n", - "Testing create query: CREATE TABLE games (id INT PRIMARY KEY, opponent VARCHAR(100), score VARCHAR(10), record VARCHAR(5));\n", - "Testing select query: SELECT score FROM games WHERE opponent = 'white sox' AND record = '2-0';\n", + "Testing create query: CREATE TABLE GameScores (Score INT, Opponent VARCHAR(50), Record VARCHAR(5));\n", + "Testing select query: SELECT Score FROM GameScores WHERE Opponent = 'white sox' AND Record = '2-0';\n", "[]\n", - "Testing create query: CREATE TABLE election_votes (id INT PRIMARY KEY, candidate_name VARCHAR(255), votes INT);\n", - "Testing select query: SELECT votes FROM election_votes WHERE candidate_name = 'Candice Sjostrom';\n", + "Testing create query: CREATE TABLE votes (id INT PRIMARY KEY, candidate_name VARCHAR(255), votes INT);\n", + "Testing select query: SELECT votes FROM votes WHERE candidate_name = 'candice sjostrom';\n", "[]\n", - "Testing create query: CREATE TABLE results (id INT PRIMARY KEY, name VARCHAR(100), percentage DECIMAL(5,2));\n", - "Testing select query: SELECT percentage FROM results WHERE name = 'Chris Wright';\n", + "Testing create query: CREATE TABLE Votes(candidate_name VARCHAR(255), received_percentage DECIMAL(5,2));\n", + "Testing select query: SELECT received_percentage FROM Votes WHERE candidate_name = 'Chris Wright';\n", "[]\n", - "Testing create query: CREATE TABLE votes (year INT, percentage FLOAT, office VARCHAR(50), candidate_id INT, vote_count INT);\n", - "Testing select query: SELECT SUM(vote_count) AS total_votes FROM votes WHERE year > 1992 AND percentage = 1.59 AND office = 'us representative' AND candidate_id = 4;\n", - "[(None,)]\n", - "Testing create query: CREATE TABLE Representatives (Name VARCHAR(50), StartYear INT, EndYear INT);\n", + "Testing create query: CREATE TABLE election_results (year INT, votes INT, percentage FLOAT, office VARCHAR(50), candidate_id INT);\n", + "Testing select query: SELECT votes FROM election_results WHERE year > 1992 AND percentage = 1.59 AND office = 'US Representative 4';\n", + "[]\n", + "Testing create query: CREATE TABLE Representatives (Name VARCHAR(100), StartYear INT, EndYear INT);\n", "Testing select query: SELECT StartYear, EndYear FROM Representatives WHERE Name = 'J. Smith Young';\n", "[]\n", - "Testing create query: CREATE TABLE political_figures (id INT PRIMARY KEY, name VARCHAR(100), party VARCHAR(100));\n", - "Testing select query: SELECT party FROM political_figures WHERE name = 'Thomas L. Young';\n", + "Testing create query: CREATE TABLE Politicians (id INT PRIMARY KEY, name VARCHAR(255), party VARCHAR(255), term_start DATE, term_end DATE);\n", + "Testing select query: SELECT party FROM Politicians WHERE name = 'Thomas L. Young';\n", "[]\n", - "Testing create query: CREATE TABLE medals (country VARCHAR(50), gold INT, silver INT, bronze INT);\n", - "Testing select query: SELECT MIN(gold + silver + bronze) AS lowest_total_medals FROM medals WHERE gold = 0 AND bronze > 2 AND silver > 1;\n", + "Testing create query: CREATE TABLE medals (country VARCHAR(100), gold INT, silver INT, bronze INT, total INT);\n", + "Testing select query: SELECT MIN(total) FROM medals WHERE gold = 0 AND bronze > 2 AND silver > 1;\n", "[(None,)]\n", - "Testing create query: CREATE TABLE Medals (CountryRank INT, TotalMedals INT, SilverMedals INT);\n", - "Testing select query: SELECT SUM(SilverMedals) FROM Medals WHERE CountryRank = 14 AND TotalMedals < 1;\n", + "Testing create query: CREATE TABLE OlympicStats (Country VARCHAR(100), Rank INT, GoldMedals INT, SilverMedals INT, BronzeMedals INT, TotalMedals INT);\n", + "Testing select query: SELECT SUM(SilverMedals) as TotalSilverMedals FROM OlympicStats WHERE Rank = 14 AND TotalMedals < 1;\n", "[(None,)]\n", - "Testing create query: CREATE TABLE player_stats (player_id INT PRIMARY KEY, name VARCHAR(100), tackles INT, fumble_recoveries INT, forced_fumbles INT);\n", - "Testing select query: SELECT tackles FROM player_stats WHERE fumble_recoveries > 0 AND forced_fumbles > 0;\n", + "Testing create query: CREATE TABLE player_statistics (player_id INT PRIMARY KEY, player_name VARCHAR(100), number_of_tackles INT, fumble_recoveries INT, forced_fumbles INT);\n", + "Testing select query: SELECT player_name, number_of_tackles FROM player_statistics WHERE fumble_recoveries > 0 AND forced_fumbles > 0;\n", "[]\n", - "Testing create query: CREATE TABLE PlayerStats (id INT PRIMARY KEY, playerName VARCHAR(100), forcedFumbles INT, soloTackles INT);\n", - "Testing select query: SELECT COUNT(forcedFumbles) FROM PlayerStats WHERE playerName = 'Jim Laney' AND soloTackles < 2;\n", - "[(0,)]\n", - "Testing create query: CREATE TABLE player_stats (player_id INT PRIMARY KEY, player_name VARCHAR(100), solo_tackles INT, total_tackles INT);\n", - "Testing select query: SELECT MAX(total_tackles) AS high_total FROM player_stats WHERE solo_tackles > 15;\n", + "Testing create query: CREATE TABLE ForcedFumbles (player_name VARCHAR(100), solo_tackles INT, forced_fumbles INT);\n", + "Testing select query: SELECT forced_fumbles FROM ForcedFumbles WHERE player_name = 'Jim Laney' AND solo_tackles < 2;\n", + "[]\n", + "Testing create query: CREATE TABLE PlayerStatistics (PlayerID INT PRIMARY KEY, PlayerName VARCHAR(100), SoloTackles INT, TotalTackles INT);\n", + "Testing select query: SELECT MAX(TotalTackles) AS HighTotal FROM PlayerStatistics WHERE SoloTackles > 15;\n", "[(None,)]\n", - "Testing create query: CREATE TABLE player_stats (player_name VARCHAR(50), fumble_recoveries INT, forced_fumbles INT, sacks INT, solo_tackles INT);\n", - "Testing select query: SELECT fumble_recoveries FROM player_stats WHERE player_name = 'Scott Gajos' AND forced_fumbles = 0 AND sacks = 0 AND solo_tackles < 2;\n", + "Testing create query: CREATE TABLE PlayerStats (player_name VARCHAR(50), fumble_recoveries INT, forced_fumbles INT, sacks INT, solo_tackles INT);\n", + "Testing select query: SELECT fumble_recoveries FROM PlayerStats WHERE player_name = 'Scott Gajos' AND forced_fumbles = 0 AND sacks = 0 AND solo_tackles < 2;\n", + "[]\n", + "Testing create query: CREATE TABLE matches (id INT PRIMARY KEY, home_team VARCHAR(100), opponent VARCHAR(100), date TIME, location VARCHAR(100));\n", + "Testing select query: SELECT opponent FROM matches WHERE date = '20:00:00' AND location = 'Camp Nou';\n", "[]\n", - "Testing create query: CREATE TABLE MatchSchedule (match_id INT PRIMARY KEY, opponent_name VARCHAR(100), match_time TIME, match_venue VARCHAR(100));\n", - "Testing select query: SELECT opponent_name FROM MatchSchedule WHERE match_time = '20:00:00' AND match_venue = 'Camp Nou';\n", + "Testing create query: CREATE TABLE matches (id INT PRIMARY KEY, match_time TIME, team1_score INT, team2_score INT);\n", + "Testing select query: SELECT match_time FROM matches WHERE team1_score = 3 AND team2_score = 2;\n", "[]\n", - "Testing create query: CREATE TABLE match_results (match_id INTEGER PRIMARY KEY, team_1 VARCHAR(50), team_2 VARCHAR(50), score_1 INTEGER, score_2 INTEGER, match_time TIME);\n", - "Testing select query: SELECT match_time FROM match_results WHERE score_1 = 3 AND score_2 = 2;\n", + "Testing create query: CREATE TABLE Matches (id INT PRIMARY KEY, home_team VARCHAR(255), away_team VARCHAR(255), ground VARCHAR(255), date DATE);\n", + "Testing select query: SELECT ground FROM Matches WHERE away_team = 'Aston Villa';\n", "[]\n", - "Testing create query: CREATE TABLE Matches (match_id INT PRIMARY KEY, home_team VARCHAR(50), away_team VARCHAR(50), ground VARCHAR(100));\n", - "Testing select query: SELECT ground FROM Matches WHERE (home_team = 'Aston Villa' OR away_team = 'Aston Villa');\n", + "Testing create query: CREATE TABLE Competitions (id INT PRIMARY KEY, name VARCHAR(255), location VARCHAR(255), start_time TIME, timezone VARCHAR(255));\n", + "Testing select query: SELECT name FROM Competitions WHERE location = 'San Siro' AND start_time = '18:30:00' AND timezone = 'GMT';\n", "[]\n", - "Testing create query: CREATE TABLE Competitions (id INT PRIMARY KEY, name VARCHAR(255), location VARCHAR(255), start_time TIME, time_zone VARCHAR(10), date DATE);\n", - "Testing select query: SELECT name FROM Competitions WHERE location = 'San Siro' AND TIME(start_time AT TIME ZONE time_zone AT TIME ZONE 'GMT') = '18:30';\n", - "Error while executing select query: near \"AT\": syntax error\n", - "Testing create query: CREATE TABLE LocalityDecile (LocalityID INT PRIMARY KEY, LocalityName VARCHAR(255), Decile INT);\n", - "Testing select query: SELECT SUM(Decile) AS TotalDecile FROM LocalityDecile WHERE LocalityName = 'redwood school locality';\n", + "Testing create query: CREATE TABLE locality_scores (locality_id INT PRIMARY KEY, decile INT NOT NULL, locality_name VARCHAR(100) NOT NULL);\n", + "Testing select query: SELECT SUM(decile) AS total_decile FROM locality_scores WHERE locality_name = 'redwood school';\n", "[(None,)]\n", - "Testing create query: CREATE TABLE report (id INT, title VARCHAR(255), content TEXT, date DATE, PRIMARY KEY(id));\n", - "Testing select query: SELECT * FROM report WHERE content LIKE '%Circuit of Tripoli%';\n", + "Testing create query: CREATE TABLE reports (report_id INT PRIMARY KEY, report_name VARCHAR(255), content TEXT);\n", + "Testing select query: SELECT report_name FROM reports WHERE content LIKE '%Circuit of Tripoli%';\n", "[]\n" ] } @@ -1705,7 +1708,7 @@ }, { "cell_type": "code", - "execution_count": 140, + "execution_count": 179, "id": "04532d59", "metadata": {}, "outputs": [], @@ -1730,7 +1733,7 @@ }, { "cell_type": "code", - "execution_count": 141, + "execution_count": 180, "id": "cbaa4bdf", "metadata": {}, "outputs": [ @@ -1738,12 +1741,11 @@ "data": { "text/plain": [ "unit_test_evaluation\n", - "SQL correct 48\n", - "SQL incorrect 2\n", + "SQL correct 50\n", "Name: count, dtype: int64" ] }, - "execution_count": 141, + "execution_count": 180, "metadata": {}, "output_type": "execute_result" } @@ -1754,7 +1756,7 @@ }, { "cell_type": "code", - "execution_count": 142, + "execution_count": 181, "id": "1ada474e", "metadata": { "scrolled": true @@ -1764,13 +1766,13 @@ "data": { "text/plain": [ "evaluation_score\n", - "5 33\n", - "4 16\n", + "5 34\n", + "4 15\n", "3 1\n", "Name: count, dtype: int64" ] }, - "execution_count": 142, + "execution_count": 181, "metadata": {}, "output_type": "execute_result" } @@ -1791,7 +1793,7 @@ }, { "cell_type": "code", - "execution_count": 143, + "execution_count": 182, "id": "d277222d", "metadata": {}, "outputs": [], @@ -1805,7 +1807,7 @@ }, { "cell_type": "code", - "execution_count": 144, + "execution_count": 183, "id": "6da35c99", "metadata": {}, "outputs": [], @@ -1815,7 +1817,7 @@ }, { "cell_type": "code", - "execution_count": 145, + "execution_count": 184, "id": "4116cb37", "metadata": {}, "outputs": [ @@ -1854,7 +1856,7 @@ " \n", " 0\n", " What venue did the parntership of shoaib malik...\n", - " {\"create\":\"CREATE TABLE partnerships (\\n id I...\n", + " {\"create\":\"CREATE TABLE cricket_partnerships (...\n", " True\n", " True\n", " 5\n", @@ -1865,7 +1867,7 @@ " \n", " 1\n", " What venue did the partnership of herschelle g...\n", - " {\"create\":\"CREATE TABLE cricket_partnerships (...\n", + " {\"create\":\"CREATE TABLE CricketPartnerships (\\...\n", " True\n", " True\n", " 5\n", @@ -1887,7 +1889,7 @@ " \n", " 3\n", " What Losing bonus has a Points against of 588?\n", - " {\"create\":\"CREATE TABLE teams (\\n id INT PR...\n", + " {\"create\":\"CREATE TABLE sports_stats (\\n te...\n", " True\n", " True\n", " 5\n", @@ -1898,7 +1900,7 @@ " \n", " 4\n", " What Tries against has a Losing bonus of 7?\n", - " {\"create\":\"CREATE TABLE TriesAgainst (ID INT, ...\n", + " {\"create\":\"CREATE TABLE rugby_points (\\n id S...\n", " True\n", " True\n", " 4\n", @@ -1919,11 +1921,11 @@ "4 What Tries against has a Losing bonus of 7? \n", "\n", " response format sql \\\n", - "0 {\"create\":\"CREATE TABLE partnerships (\\n id I... True True \n", - "1 {\"create\":\"CREATE TABLE cricket_partnerships (... True True \n", + "0 {\"create\":\"CREATE TABLE cricket_partnerships (... True True \n", + "1 {\"create\":\"CREATE TABLE CricketPartnerships (\\... True True \n", "2 {\"create\":\"CREATE TABLE PointsTable (\\n Num... True True \n", - "3 {\"create\":\"CREATE TABLE teams (\\n id INT PR... True True \n", - "4 {\"create\":\"CREATE TABLE TriesAgainst (ID INT, ... True True \n", + "3 {\"create\":\"CREATE TABLE sports_stats (\\n te... True True \n", + "4 {\"create\":\"CREATE TABLE rugby_points (\\n id S... True True \n", "\n", " evaluation_score unit_test_evaluation run Evaluating Model \n", "0 5 SQL correct 1 gpt-4 \n", @@ -1933,7 +1935,7 @@ "4 4 SQL correct 1 gpt-4 " ] }, - "execution_count": 145, + "execution_count": 184, "metadata": {}, "output_type": "execute_result" } @@ -1944,7 +1946,7 @@ }, { "cell_type": "code", - "execution_count": 146, + "execution_count": 185, "id": "ed800f0c", "metadata": {}, "outputs": [ @@ -1982,20 +1984,16 @@ " \n", " 1\n", " SQL correct\n", - " 42\n", + " 46\n", " \n", " \n", " SQL incorrect\n", - " 8\n", + " 4\n", " \n", " \n", - " 2\n", + " 2\n", " SQL correct\n", - " 48\n", - " \n", - " \n", - " SQL incorrect\n", - " 2\n", + " 50\n", " \n", " \n", "\n", @@ -2004,13 +2002,12 @@ "text/plain": [ " Number of records\n", "run unit_test_evaluation \n", - "1 SQL correct 42\n", - " SQL incorrect 8\n", - "2 SQL correct 48\n", - " SQL incorrect 2" + "1 SQL correct 46\n", + " SQL incorrect 4\n", + "2 SQL correct 50" ] }, - "execution_count": 146, + "execution_count": 185, "metadata": {}, "output_type": "execute_result" } @@ -2035,13 +2032,13 @@ }, { "cell_type": "code", - "execution_count": 147, + "execution_count": 186, "id": "e2b4aa03-42f5-4c30-a610-e553937bf160", "metadata": {}, "outputs": [ { "data": { - "image/png": "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3pn/HP7444/2tvT0dL3zzjtXXIYxJttuhjP/yb7S+nB3d1erVq305ZdfOnRJfeLECX388cdq0qSJw6mHuXHmzJks72fmkYHcnnJ3uXWd3ZEEZ+Z/qeeff14XLlzQlClTsgyrUKGCEhIStHPnTntbXFxcjt1AX62LFy9q9uzZ9udpaWmaPXu2goODVb9+fUn//sJ/9OhRvfvuu1mmP3/+vM6dO5enZUdERMjLy0uvv/66w/v3/vvvKyEhQffdd1+e5puTXr16qUyZMvbe4OrXr68KFSro1VdfdbgJdabMrqLd3NzUqVMnLVu2TFu3bs0yXmbt7dq10+bNm+2nbkr/Xsf3zjvvKDQ09IrXaZUqVUp169bV/PnzHU5lXbVqVZbrmS7tFtvNzc3e419ePpPt2rXT8ePHHXp9u3jxot544w35+/vbT7EtKNlta6R/bxBuldv3oqBc+hmS/v3Obty40aH78a+//jrLacPA9YAjScBVKlGihMaOHavnn39eTZs2VYcOHVSkSBGtX79en3zyiVq1aqX27dvny7J8fX1VvXp1ffbZZ6pcubKKFSummjVr5vqcdKsKFSropZde0ujRo3Xo0CF16tRJRYsWVWxsrL744gsNGDBAI0eO1A8//KDBgwera9euqly5si5evKgFCxbI3d1dkZGR9vnVr19f33//vaZNm6bSpUsrLCws26MDVtu3b9eHH36YbW3h4eH25+3atVPRokU1cuTILMuVpFatWtl/SX7ssceUlJSkd999VyVKlLji9S41atRQw4YNNXr0aJ0+fVrFihXTp59+miUYVq1aVRUqVNDIkSN19OhRBQQE6PPPP8/23PnMf6iHDh2q1q1by93d3f5L66Veeukl+32HnnjiCXl4eGj27NlKTU3NNjhcyfz58/XWW2+pc+fOqlChgv755x+9++67CggIULt27a44/ZXW9QsvvKAff/xR9913n8qXL6/4+Hi99dZbKlOmjMNF+rmVeTQpu9OievTooWeeeUadO3fW0KFDlZycrFmzZqly5cr2i9fzU+nSpTV58mQdOnRIlStX1meffaaYmBi988479hs7P/zww1q4cKEef/xxrV69Wo0bN1Z6err27NmjhQsXasWKFdleRH8lwcHBGj16tCZMmKA2bdqoQ4cO2rt3r9566y3deeed+X7zUU9PTw0bNkxPP/20li9f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Vark0B4TE6MSJUo4Na/4+Hj17t1bcXFxCgwMVO3atbVixQr70ajp06fLzc1NkZGRSk1NVevWrfXWW285WzIAAAAA5JrTIal///4aMGCADh48qEaNGkn695qkyZMnO3SYkBvvv//+ZYf7+Pho5syZmjlzprNlAgAAAECeOB2SxowZo6JFi2rq1KkaPXq0JKl06dIaP368hg4dmu8FAgAAAEBhspmruPX6P//8I0kqWrRovhWU33J7V93CYtu5zNUl4HpXp4OrK8B17io2+wAAXNdymw2cPpIUGxurixcvqlKlSg7haN++ffL09FRoaGieCgYAAACAa4GbsxNERUVp/fr1Wdo3bdqkqKio/KgJAAAAAFzG6ZC0Y8cO+01krRo2bKiYmJj8qAkAAAAAXMbpkGSz2ezXIlklJCQoPT09X4oCAAAAAFdxOiQ1bdpUEydOdAhE6enpmjhxopo0aZKvxQEAAABAYXO644bJkyeradOmqlKliu6++25J0k8//aTExET98MMP+V4gAAAAABQmp48kVa9eXTt37lS3bt0UHx+vf/75R71799aePXtUs2bNgqgRAAAAAAqN00eSpH9vHvvyyy/ndy0AAAAA4HJOH0mS/j297qGHHlKjRo109OhRSdKCBQv0888/52txAAAAAFDYnA5Jn3/+uVq3bi1fX19t375dqampkv7t3Y6jSwAAAACud06HpJdeeklvv/223n33XXl6etrbGzdurO3bt+drcQAAAABQ2JwOSXv37lXTpk2ztAcGBurs2bP5URMAAAAAuIzTISkkJET79+/P0v7zzz/r9ttvz5eiAAAAAMBVnA5J/fv317Bhw7Rp0ybZbDYdO3ZMH330kUaOHKmBAwcWRI0AAAAAUGic7gL82WefVUZGhlq2bKnk5GQ1bdpU3t7eGjlypIYMGVIQNQIAAABAobEZY0xeJkxLS9P+/fuVlJSk6tWry9/fX+fPn5evr29+13hVEhMTFRgYqISEBAUEBLi6HNl2LnN1Cbje1eng6gpwncvjZh8AgOtebrNBnu6TJEleXl6qXr26GjRoIE9PT02bNk1hYWF5nR0AAAAAXBNyHZJSU1M1evRo/ec//1GjRo20dOlSSdLcuXMVFham6dOna/jw4QVVJwAAAAAUilxfkzR27FjNnj1bERERWr9+vbp27aq+fftq48aNmjZtmrp2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Hn74YVO0aFHTp08fM3fuXBMYGGi+/PJLU61aNePu7m5iY2NNSkqKeeqpp0zp0qVNkSJFTIMGDczq1asd5vfzzz+bZs2aGV9fXxMUFGRatWplTp8+bfr06WMkOTxiY2Nz/ToB4GZyLexfrOPHxsYaSebzzz83zZs3N76+vqZ27dpm/fr1DtPktA8wxpiUlBQzZMgQExwcbLy9vU3jxo3N5s2b7dOuXr3aSDLffvutqVevnvH09DSrV682zZo1M4MGDTLDhg0zxYsXN82bNzfGGLNr1y7Tpk0b4+fnZ0qUKGEeeughc/LkSfv80tPTzeTJk02FChWMl5eXKVu2rHnppZfsr836aNasWa7XC3ApfkIGLuHv7y9/f38tXbpUqamp2Y6zcuVKnTp1SiNHjswyrH379qpcubI++eSTPC0/IyNDbdu21bp16/Thhx/q999/16RJk+Tu7i5J2rZtm7p166YePXpo165dGj9+vMaMGaN58+Y5zOfVV19VnTp1tGPHDo0ZM0aSlJycrMmTJ+u9997Tb7/9phIlSmjw4MHasGGDPv30U+3cuVNdu3ZVmzZttG/fPklSTEyMWrZsqerVq2vDhg36+eef1b59e6Wnp+u1115TeHi4+vfvr7i4OMXFxals2bJ5et0AcKNz9f4lJ88995xGjhypmJgYVa5cWT179tTFixclXX4fIEmjRo3S559/rvnz52v79u2qWLGiWrdurdOnTzss49lnn9WkSZO0e/du1a5dW5I0f/58eXl5ad26dXr77bd19uxZtWjRQnfccYe2bt2q5cuX68SJE+rWrZt9PqNHj9akSZM0ZswY/f777/r4449VsmRJSdLmzZslSd9//73i4uK0ZMmSfF1PuMm4OqUB16LFixebW265xfj4+JhGjRqZ0aNHm19++cU+fNKkSUaSOXPmTLbTd+jQwVSrVs3+XE780rdixQrj5uZm9u7dm+3wBx980Nx7770ObU8//bSpXr26/Xn58uVNp06dHMaZO3eukWRiYmLsbYcPHzbu7u7m6NGjDuO2bNnSjB492hhjTM+ePU3jxo1zrLdZs2Zm2LBhuXptAHCzc+X+5dLxM48kvffee/bhv/32m5Fkdu/ebYy5/D4gKSnJeHp6mo8++sjelpaWZkqXLm2mTJlijPm/I0lLly51mLZZs2bmjjvucGh78cUXTatWrRza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0OrVqzV//nzNmzdP8+bNy3bcLVu2SJLmzp2ruLg4+3NndO3aVfHx8fruu++0bds21atXTy1bttTp06clSb169VKZMmW0ZcsWbdu2Tc8++6w8PT3VqFEjzZgxQwEBAYqLi1NcXJxGjhyZp9fctWtXnTp1SqtXr7a3nT59WsuXL1evXr0kSUlJSWrXrp2io6O1Y8cOtWnTRu3bt9eff/6Zp2VKUkZGhsqUKaNFixbp999/19ixY/Xf//5XCxculCSNHDlS3bp1U5s2beyvsVGjRlnmc/ToUbVr10533nmnfvnlF82aNUvvv/++XnrpJYfx5s+fLz8/P23atElTpkzRCy+8oFWrVuW5fgC40XG6HQBAknTLLbfozTfflLu7u6pWrar77rtP0dHR6t+/f5ZxM0+TCwoKytPpXz///LM2b96s+Ph4eXt7S5JeffVVLV26VIsXL9aAAQP0559/6umnn1bVqlUlSZUqVbJPHxgYaD9CdCUJCQny9/d3aLv77rv13Xff6ZZbblHbtm318ccfq2XLlpKkxYsX69Zbb9U999wjSapTp47q1Kljn/bFF1/UF198oa+++kqDBw92+rVLkqenpyZMmGB/HhYWpg0bNmjhwoXq1q2b/P395evrq9TU1Mu+xrfeektly5bVm2++KZvNpqpVq+rYsWN65plnNHbsWLm5/ftbaO3atTVu3DhJ/67HN998U9HR0br33nvzVD8A3OgISQAASVKNGjXk7u5uf16qVCnt2rWrQJb1yy+/KCkpScWLF3doP3/+vA4cOCBJGjFihB599FEtWLBAERER6tq1qypUqOD0sooWLart27c7tPn6+tr/7tWrl/r376+33npL3t7e+uijj9SjRw97wEhKStL48eP1zTffKC4uThcvXtT58+ev6kiSJM2cOVNz5szRn3/+qfPnzystLU1169Z1ah67d+9WeHi4wzVWjRs3VlJSkv766y+VK1dO0r8hyapUqVKKj4+/qvoB4EZGSAKAG1hAQIASEhKytJ89e1aBgYEObZ6eng7PbTZblmt18ktSUpJKlSplv0bHKrPXuvHjx+vBBx/UN998o++++07jxo3Tp59+qs6dOzu1LDc3N1WsWDHH4e3bt5cxRt98843uvPNO/fTTT5o+fbp9+MiRI7Vq1Sq9+uqrqlixonx9ffXAAw8oLS0tx+VJkjHG3ma9tkuSPv30U40cOVJTp05VeHi4ihYtqldeeUWbNm1y6rXlVmG+twBwIyAkAcANrEqVKlq5cmWW9u3bt6ty5cpXNW9PT0+lp6fnadp69erp+PHj8vDwyLbTh0yVK1dW5cqVNXz4cPXs2VNz585V586d5eXlledlX8rHx0ddunTRRx99pP3796tKlSqqV6+effi6desUFRVlD2dJSUmX7bo881TEuLg43XHHHZKU5b5G69atU6NGjfTEE0/Y2zKPoGXKzWusVq2aPv/8cxlj7EeT1q1bp6JFi6pMmTKXf+EAgBzRcQMA3MAGDhyoP/74Q0OHDtXOnTu1d+9eTZs2TZ988omeeuqpq5p3aGiooqOjdfz4cZ05c8apaSMiIhQeHq5OnTpp5cqVOnTokNavX6/nnntOW7du1fnz5zV48GCtWbNGhw8f1rp167RlyxZVq1bNvuykpCRFR0fr77//VnJyco7LMsbo+PHjWR7WIym9evXSN998ozlz5tg7bMhUqVIlLVmyRDExMfrll1/04IMPXvYojK+vrxo2bKhJkyZp9+7dWrt2rZ5//vks89y6datWrFihP/74Q2PGjMnS+UVoaKj9Pfv777+zHI2SpCeeeEJHjhzRkCFDtGfPHn355ZcaN26cRowYYT+iBQBwHltQALiB3X777frxxx+1Z88eRURE6K677tLChQu1aNEih3sY5cXUqVO1atUqlS1b1n7EJLdsNpu+/fZbNW3aVH379lXlypXVo0cPHT58WCVLlpS7u7tOnTql3r17q3LlyurWrZvatm1r7+ygUaNGevzxx9W9e3cFBwdrypQpOS4rMTFRpUqVyvKwXpPTokULFStWTHv37tWDDz7oMP20adN0yy23qFGjRmrfvr1at27tcKQpO3PmzNHFixdVv359Pfnkk1l6m3vsscfUpUsXde/eXXfddZdOnTrlcFRJkvr3768qVaroP//5j4KDg7Vu3bosy7ntttv07bffavPmzapTp44ef/xx9evXL0soAwA4x2asJ00DAAAAwE2OI0kAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABY/D8R0vJ6QzLdZAAAAABJRU5ErkJggg==", + "image/png": "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7NmzRpIZO3as03W+8cYbRpKJjIw0xhhz7Ngx4+7ubv73v/85jLd3716TL18+e/vOnTuNJLN48eIbzt/X19f06tUrQ7VERkYaSek+Nm7caIwxJiYmxnh5eZlnn33WYfrJkycbm81mjh8/bm+Lj49PtZxWrVqZMmXKOLQ1adLE4f2YM2eOw3pJkfI+rV279obLmDBhQqpaBgwYYNLbvF7//rVv3954enqaI0eO2NtOnTplChQoYBo3bpyqzrCwMJOcnGxvHzZsmHF3dzcXL140xhjz1VdfGUlm69ataS4/PRld19OmTbvh5/1GSpcubR588EFjjDG9e/c23t7e5tSpU8aY/1vf1s/Z9Z//FCnfOStJxsvLy+F9nDVrlpFkgoODTWxsrL191KhRqd7zJk2aGElmypQp9raEhARTq1YtU6RIEZOYmGiMMWb+/PnGzc3N/PLLLw7Lf//9940ks379eoea3NzczO+//37TdRMdHW08PT1Ny5YtTVJSkr393XffNZLM7NmzU73+jLwHKeMeOHDAnD171hw7dszMnj3b+Pj4mKCgIHPp0iVjjDHJycmmfPnyplWrVg6fr/j4eBMaGmpatGhhb+vZs6dxc3NL8zOWMu3QoUONJIf19M8//5jQ0FATEhJif40p73uZMmVSfb9q1aplihUrZv9sG2PM6tWrjSSHz8WQIUOMv7+/uXbt2k3Xx/Wsn8kU06dPN5LMp59+am9LTEw09evXN35+fvbPUsp2zN/f30RHR2d4eelt9yZMmGAfL61tzeeff24kmZ9//tnelpH3IqPbjvRk9DOU8vrS2g9cv911Zj8IuAqn2wEu0rt3b4df+VJOXTh69Gi2LH/p0qVKTk5Wly5d9Pfff9sfwcHBKl++vNauXStJCggIkCStWrVK8fHxmVpDv379tGbNmlSPlGsE/P391aZNGy1atEjGGPt0X3zxherVq6dSpUrZ21J+gZWkmJgY/f3332rSpImOHj1qPy3wdlmXcenSJf39999q0KCBjDHauXOn0/NLSkrS6tWr1b59e4dT3YoVK6bHHntMv/76q/20oxT9+vVzONXs/vvvV1JSko4fPy7p/65T+fbbb3X16tUM15LRdZ0y/6+//tqhUxFnvfzyy7p27Vqm9mTYvHlzhyM1KUfhOnXqpAIFCqRqv/67li9fPj311FP2556ennrqqacUHR2t7du3S/r3aGLlypVVqVIlh+9Ns2bNJMn+vUnRpEmTDF3z8sMPPygxMVFDhw51uBanb9++8vf3T3WamrMqVqyooKAghYSE6IknnlC5cuX0/fffK3/+/JKkXbt26dChQ3rsscd07tw5++u6dOmSmjdvrp9//lnJyclKTk7WsmXL1K5dO4dTMFOkfDa/++471a1bV40aNbIP8/PzU79+/XTs2LFUp6T16tXL4fsVFRWlXbt2qVevXvZtkCS1aNEi1foMDAzUpUuXtGbNmttaRym+++47BQcHq3v37vY2Dw8PDR48WHFxcfrpp58cxu/UqZP9VOiMuO+++9Lc7lmXZ10XV65c0d9//6169epJknbs2CFJGX4vUtxs23EzN/sM3QpX7weBGyEkAdng+p2VJId/8KX/O2XhwoUL2VLToUOHZIxR+fLlFRQU5PDYt2+f/eLw0NBQDR8+XB999JEKFy6sVq1a6b333suU4FG+fHmFhYWlevj7+9vH6dq1q06ePKmNGzdK+vf89+3bt6tr164O81q/fr3CwsLk6+urwMBABQUF2a+TyayQdOLECYWHh6tgwYLy8/NTUFCQmjRpcsvLOHv2rOLj41WxYsVUwypXrqzk5ORU14fd7HPTpEkTderUSePHj1fhwoX1yCOPaM6cOamul0lLRtZ1165d1bBhQz355JMqWrSounXrpkWLFjkdmMqUKaP//ve/+uCDDxQVFeXUtOm5ft2k/HNdsmTJNNuv/64VL15cvr6+Dm0VKlSQ9H+nFh06dEi///57qu9Myngp35sUoaGhGao95R/V6z8Lnp6eKlOmTIb/kU3Pl19+qTVr1mjBggWqV6+eoqOjHf4RP3TokKR/w8r1r+2jjz5SQkKCYmJidPbsWcXGxt70nlLHjx9P93Ntfb0prl9PKcPLly+fah7Xz/eZZ55RhQoV1KZNG5UoUUJPPPHETa/9ulnt5cuXT9VxREZrv5nChQunud0rXbq0fZzz589ryJAhKlq0qHx8fBQUFGRfTsq2JqPvRYrb3efc7DN0K1y9HwRuhGuSgNuU0lOV9eJ9q/j4+DR7s3J3d09zfOuv+FkpOTlZNptN33//fZq1+Pn52f+eMmWKwsPD9fXXX2v16tUaPHiwJkyYoE2bNqW6PiCztWvXTvnz59eiRYvUoEEDLVq0SG5uburcubN9nCNHjqh58+aqVKmSpk6dqpIlS8rT01Pfffedpk2bdsN/4NMKsNK/R3muf96iRQudP39ezz//vCpVqiRfX1/99ddfCg8Pv62jKs642ecm5V5DmzZt0vLly7Vq1So98cQTmjJlijZt2uTwvl4vI+vax8dHP//8s9auXasVK1Zo5cqV+uKLL9SsWTOtXr063frS8tJLL2n+/PmaNGlSml3HZ/S9SZHesjPzu5acnKzq1atr6tSpaQ6/PpDd7j+RmaVx48b2nsnatWun6tWrq0ePHtq+fbvc3Nzsn9833nhDtWrVSnMefn5+On/+fJbUdzvrqUiRItq1a5dWrVql77//Xt9//73mzJmjnj17pupsIStkxXvcpUsXbdiwQc8995xq1aolPz8/JScnq3Xr1re8rbnd78HNPkPSjb+zaS3f1ftB4EYIScBtSvn178CBA6n+QYqPj9fJkyfVsmXLTFlWejugW1G2bFkZYxQaGmr/FfxGqlevrurVq+vll1/Whg0b1LBhQ73//vt67bXXMr02K19fXz300ENavHixpk6dqi+++EL333+/wz1Fli9froSEBH3zzTcOv0xef+pTWlJ+ubz+pojX/1q8d+9eHTx4UPPmzVPPnj3t7Wmd4pPRdREUFKT8+fPrwIEDqYbt379fbm5uqT5TGVWvXj3Vq1dP//vf/7RgwQL16NFDCxcu1JNPPpnuNBlZ15Lk5uam5s2bq3nz5po6dapef/11vfTSS1q7dq3CwsIyXGPZsmX1+OOPa9asWak6qJD+fW/Sulnl7R5VSc+pU6d06dIlh6NJBw8elCT7aXxly5bV7t271bx580z9zFu3I9ZTLxMTExUZGenUer0ZPz8/jR07Vr1799aiRYvUrVs3e0cr/v7+N1xWUFCQ/P399dtvv91wGaVLl073c50y/GbTS/93hMsqrfl6enqqXbt2ateunZKTk/XMM89o1qxZGj16dIbvJWVd9p49e5ScnOxwNCmjtd+uCxcuKCIiQuPHj9eYMWPs7devi4y+F1khrc+QdOPvbHq9ZwI5FafbAbepefPm8vT01MyZM1P9wvfBBx/o2rVratOmTaYsK+Xc78y4y3nHjh3l7u6u8ePHp/rVzhhj72o2NjZW165dcxhevXp1ubm5OZzC5evrm2V3X+/atatOnTqljz76SLt37051ql3Kr5HW1xETE6M5c+bcdN4p/xz+/PPP9rakpCR98MEHN12GMSbNboZT/sm+2fpwd3dXy5Yt9fXXXzt0SX3mzBktWLBAjRo1cjj1MCMuXLiQ6v1MOTKQ0VPubrSu0zqS4Mz8r/fyyy/r6tWrmjx5cqphZcuWVUxMjPbs2WNvi4qKSrcb6Nt17do1zZo1y/48MTFRs2bNUlBQkOrUqSPp31/4//rrL3344Yeppr98+bIuXbp0S8sOCwuTp6en3n77bYf37+OPP1ZMTIwefPDBW5pvenr06KESJUrYe4OrU6eOypYtqzfffNPhJtQpUrqKdnNzU/v27bV8+XJt27Yt1Xgptbdt21Zbtmyxn7op/Xsd3wcffKCQkJCbXqdVrFgx1apVS/PmzXM4lXXNmjWprme6vltsNzc3e49/t/KZbNu2rU6fPu3Q69u1a9f0zjvvyM/Pz36KbVZJa1sj/XuDcKuMvhdZ5frPkPTvd3bTpk0O3Y9/++23qU4bBnIDjiQBt6lIkSIaM2aMXn75ZTVu3FgPP/yw8ufPrw0bNujzzz9Xy5Yt1a5du0xZlo+Pj6pUqaIvvvhCFSpUUMGCBVWtWrUMn5NuVbZsWb322msaNWqUjh07pvbt26tAgQKKjIzUV199pX79+mnEiBH68ccfNXDgQHXu3FkVKlTQtWvXNH/+fLm7u6tTp072+dWpU0c//PCDpk6dquLFiys0NDTNowNWO3bs0KeffppmbfXr17c/b9u2rQoUKKARI0akWq4ktWzZ0v5L8lNPPaW4uDh9+OGHKlKkyE2vd6latarq1aunUaNG6fz58ypYsKAWLlyYKhhWqlRJZcuW1YgRI/TXX3/J399fX375ZZrnzqf8Qz148GC1atVK7u7u9l9ar/faa6/Z7zv0zDPPKF++fJo1a5YSEhLSDA43M2/ePM2YMUMdOnRQ2bJl9c8//+jDDz+Uv7+/2rZte9Ppb7auX3nlFf3888968MEHVbp0aUVHR2vGjBkqUaKEw0X6GZVyNCmt06K6deum559/Xh06dNDgwYMVHx+vmTNnqkKFCvaL1zNT8eLFNWnSJB07dkwVKlTQF198oV27dumDDz6w39j5v//9rxYtWqSnn35aa9euVcOGDZWUlKT9+/dr0aJFWrVqVZoX0d9MUFCQRo0apfHjx6t169Z6+OGHdeDAAc2YMUP33ntvpt981MPDQ0OGDNFzzz2nlStXqnXr1vroo4/Upk0bVa1aVb1799bdd9+tv/76S2vXrpW/v7+WL18uSXr99de1evVqNWnSxN4NelRUlBYvXqxff/1VgYGBeuGFF/T555+rTZs2Gjx4sAoWLKh58+YpMjJSX375ZYZuFDthwgQ9+OCDatSokZ544gmdP39e77zzjqpWreoQ5J588kmdP39ezZo1U4kSJXT8+HG98847qlWrlv06Imf069dPs2bNUnh4uLZv366QkBAtWbJE69ev1/Tp0x06AbkVf/31V5rbPT8/P7Vv317+/v5q3LixJk+erKtXr+ruu+/W6tWrFRkZmWqajLwXWSWtz9CTTz6pJUuWqHXr1urSpYuOHDmiTz/9NEO3hABynOztTA/Iuz799FNTr1494+vra7y8vEylSpXM+PHjzZUrVxzGS6urY2P+rzvZOXPm2NvS6gJ5w4YNpk6dOsbT09Op7sCv7wI8xZdffmkaNWpkfH19ja+vr6lUqZIZMGCAOXDggDHGmKNHj5onnnjClC1b1nh7e5uCBQuaBx54wPzwww8O89m/f79p3Lix8fHxMZJu2B34zboAT2vaHj162LuxTcs333xjatSoYby9vU1ISIiZNGmSmT17dppdPVu7ojXGmCNHjpiwsDDj5eVlihYtal588UWzZs2aVF2A//HHHyYsLMz4+fmZwoULm759+5rdu3enet+uXbtmBg0aZIKCgozNZnPorjqt92zHjh2mVatWxs/Pz+TPn9888MADZsOGDQ7jpHTje31Xv9d3Vb5jxw7TvXt3U6pUKePl5WWKFCliHnroIbNt27Y011tabrSuIyIizCOPPGKKFy9uPD09TfHixU337t3NwYMHbzrftLpbNsaYQ4cOGXd39zS/F6tXrzbVqlUznp6epmLFiubTTz9NtwvwAQMGOLSlfM7eeOMNh/a0voNNmjQxVatWNdu2bTP169c33t7epnTp0ubdd99NVW9iYqKZNGmSqVq1qvHy8jJ33XWXqVOnjhk/fryJiYm5YU038+6775pKlSoZDw8PU7RoUdO/f39z4cIFh3FupQvwtMaNiYkxAQEBDt+HnTt3mo4dO5pChQoZLy8vU7p0adOlSxcTERHhMO3x48dNz549TVBQkPHy8jJlypQxAwYMcOjO+ciRI+bRRx81gYGBxtvb29StW9d8++23DvNJb3uY4ssvvzSVK1c2Xl5epkqVKmbp0qWptotLliwxLVu2NEWKFDGenp6mVKlS5qmnnjJRUVE3XT/pfSbPnDljevfubQoXLmw8PT1N9erVHb7jxqT/+brZ8tLb7llf059//mk6dOhgAgMDTUBAgOncubM5depUmtuPm70XGd12pMfZz9CUKVPM3Xffbby8vEzDhg3Ntm3b0u0CPCP7QcBVbMZwdRwAAAAApOCaJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWOT5m8kmJyfr1KlTKlCggGw2m6vLAQAAAOAixhj9888/Kl68+A1vbJ3nQ9KpU6dUsmRJV5cBAAAAIIc4efKkSpQoke7wPB+SChQoIOnfFeHv7+/iagAAAAC4SmxsrEqWLGnPCOnJ8yEp5RQ7f39/QhIAAACAm16GQ8cNAAAAAGBBSAIAAAAAC0ISAAAAAFjk+WuSMsIYo2vXrikpKcnVpeQ57u7uypcvH92vAwAAINe440NSYmKioqKiFB8f7+pS8qz8+fOrWLFi8vT0dHUpAAAAwE3d0SEpOTlZkZGRcnd3V/HixeXp6ckRj0xkjFFiYqLOnj2ryMhIlS9f/oY37QIAAABygjs6JCUmJio5OVklS5ZU/vz5XV1OnuTj4yMPDw8dP35ciYmJ8vb2dnVJAAAAwA3xs77E0Y0sxvoFAABAbsJ/rwAAAABgQUgCAAAAAIs7+pqk9Nj2LM/W5Zka7bJ1eQAAAADSx5GkXCg8PFw2m002m00eHh4KDQ3VyJEjdeXKlSxf9tKlS9WyZUsVKlRINptNu3btyvJlAgAAANmJkJRLtW7dWlFRUTp69KimTZumWbNmaezYsVm+3EuXLqlRo0aaNGlSli8LAAAAcAVCUi7l5eWl4OBglSxZUu3bt1dYWJjWrFljHx4SEqLp06c7TFOrVi2NGzfO/txms+mjjz5Shw4dlD9/fpUvX17ffPPNDZf73//+V2PGjFFYWFhmvhwAAAAgxyAk5QG//fabNmzYIE9PT6enHT9+vLp06aI9e/aobdu26tGjh86fP58FVQIAAAC5g0tD0rhx4+zX1qQ8KlWqZB9+5coVDRgwQIUKFZKfn586deqkM2fOuLDinOPbb7+Vn5+fvL29Vb16dUVHR+u5555zej7h4eHq3r27ypUrp9dff11xcXHasmVLFlQMAAAA5A4u792uatWq+uGHH+zP8+X7v5KGDRumFStWaPHixQoICNDAgQPVsWNHrV+/3hWl5igPPPCAZs6cqUuXLmnatGnKly+fOnXq5PR8atSoYf/b19dX/v7+io6OzsxSAQAAgFzF5SEpX758Cg4OTtUeExOjjz/+WAsWLFCzZs0kSXPmzFHlypW1adMm1atXL7tLzVF8fX1Vrlw5SdLs2bNVs2ZNffzxx+rTp48kyc3NTcYYh2muXr2aaj4eHh4Oz202m5KTk7OoagAAACDnc/k1SYcOHVLx4sVVpkwZ9ejRQydOnJAkbd++XVevXnXoIKBSpUoqVaqUNm7cmO78EhISFBsb6/DI69zc3PTiiy/q5Zdf1uXLlyVJQUFBioqKso8TGxuryMhIV5UIAAAA5BouPZJ03333ae7cuapYsaKioqI0fvx43X///frtt990+vRpeXp6KjAw0GGaokWL6vTp0+nOc8KECRo/fnwWV57zdO7cWc8995zee+89jRgxQs2aNdPcuXPVrl07BQYGasyYMXJ3d7/t5Zw/f14nTpzQqVOnJEkHDhyQJAUHB6d5RBCZz2azuboE5HLXH2UGgJth34Pbldv2PS4NSW3atLH/XaNGDd13330qXbq0Fi1aJB8fn1ua56hRozR8+HD789jYWJUsWdKpeZga7W5p2a6UL18+DRw4UJMnT1b//v01atQoRUZG6qGHHlJAQIBeffXVTDmS9M0336h379725926dZMkjR071qF7cQAAACC3spkcFuvuvfdehYWFqUWLFmrevLkuXLjgcDSpdOnSGjp0qIYNG5ah+cXGxiogIEAxMTHy9/d3GHblyhVFRkYqNDRU3t7emfkyYMF6zlz8mofblcM2+wByAfY9uF05Zd9zo2xg5fJrkqzi4uJ05MgRFStWTHXq1JGHh4ciIiLsww8cOKATJ06ofv36LqwSAAAAQF7m0tPtRowYoXbt2ql06dI6deqUxo4dK3d3d3Xv3l0BAQHq06ePhg8froIFC8rf31+DBg1S/fr17/ie7QAAAABkHZeGpD///FPdu3fXuXPnFBQUpEaNGmnTpk0KCgqSJE2bNk1ubm7q1KmTEhIS1KpVK82YMcOVJQMAAADI43LcNUmZjWuSXI/1nLk4Lxy3K49v9gFkAfY9uF05Zd+TK69JAgAAAABXIyQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALl3YBnlNldw8uOaW3DwAAAAAcScqVwsPDZbPZZLPZ5OHhodDQUI0cOVJXrlzJ0uVevXpVzz//vKpXry5fX18VL15cPXv21KlTp7J0uQAAAEB2IiTlUq1bt1ZUVJSOHj2qadOmadasWRo7dmyWLjM+Pl47duzQ6NGjtWPHDi1dulQHDhzQww8/nKXLBQAAALITISmX8vLyUnBwsEqWLKn27dsrLCxMa9assQ8PCQnR9OnTHaapVauWxo0bZ39us9n00UcfqUOHDsqfP7/Kly+vb775Jt1lBgQEaM2aNerSpYsqVqyoevXq6d1339X27dt14sSJzH6JAAAAgEsQkvKA3377TRs2bJCnp6fT044fP15dunTRnj171LZtW/Xo0UPnz5/P8PQxMTGy2WwKDAx0etkAAABATkRIyqW+/fZb+fn5ydvbW9WrV1d0dLSee+45p+cTHh6u7t27q1y5cnr99dcVFxenLVu2ZGjaK1eu6Pnnn1f37t3l7+/v9LIBAACAnIje7XKpBx54QDNnztSlS5c0bdo05cuXT506dXJ6PjVq1LD/7evrK39/f0VHR990uqtXr6pLly4yxmjmzJlOLxcAAADIqTiSlEv5+vqqXLlyqlmzpmbPnq3Nmzfr448/tg93c3NL1bX41atXU83Hw8PD4bnNZlNycvINl50SkI4fP641a9ZwFAkAAAB5CiEpD3Bzc9OLL76ol19+WZcvX5YkBQUFKSoqyj5ObGysIiMjb3tZKQHp0KFD+uGHH1SoUKHbnicAAACQkxCS8ojOnTvL3d1d7733niSpWbNmmj9/vn755Rft3btXvXr1kru7+20t4+rVq3r00Ue1bds2ffbZZ0pKStLp06d1+vRpJSYmZsbLAAAAAFyOa5LScP1parlBvnz5NHDgQE2ePFn9+/fXqFGjFBkZqYceekgBAQF69dVXb/tI0l9//WXvIrxWrVoOw9auXaumTZve1vwBAACAnMBmcmMicEJsbKwCAgIUExOT6tqZK1euKDIyUqGhofL29nZRhXkf6zlz2Ww2V5eAXC6Pb/YBZAH2PbhdOWXfc6NsYMXpdgAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQpJxzIVlexfoFAABAbnJHhyQPDw9JUnx8vIsrydtS1m/K+gYAAABysjv6Pknu7u4KDAxUdHS0JCl//vx0cZmJjDGKj49XdHS0AgMDb/tmtgAAAEB2uKNDkiQFBwdLkj0oIfMFBgba1zMAAACQ093xIclms6lYsWIqUqSIrl696upy8hwPDw+OIAEAACBXueNDUgp3d3f+mQcAAABwZ3fcAAAAAADX40hSNrPtWe7qEgAAAADcAEeSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWOSYkDRx4kTZbDYNHTrU3nblyhUNGDBAhQoVkp+fnzp16qQzZ864rkgAAAAAeV6OCElbt27VrFmzVKNGDYf2YcOGafny5Vq8eLF++uknnTp1Sh07dnRRlQAAAADuBC4PSXFxcerRo4c+/PBD3XXXXfb2mJgYffzxx5o6daqaNWumOnXqaM6cOdqwYYM2bdrkwooBAAAA5GUuD0kDBgzQgw8+qLCwMIf27du36+rVqw7tlSpVUqlSpbRx48Z055eQkKDY2FiHBwAAAABkVD5XLnzhwoXasWOHtm7dmmrY6dOn5enpqcDAQIf2okWL6vTp0+nOc8KECRo/fnxmlwoAAADgDuGyI0knT57UkCFD9Nlnn8nb2zvT5jtq1CjFxMTYHydPnsy0eQMAAADI+1wWkrZv367o6GjVrl1b+fLlU758+fTTTz/p7bffVr58+VS0aFElJibq4sWLDtOdOXNGwcHB6c7Xy8tL/v7+Dg8AAAAAyCiXnW7XvHlz7d2716Gtd+/eqlSpkp5//nmVLFlSHh4eioiIUKdOnSRJBw4c0IkTJ1S/fn1XlAwAAADgDuCykFSgQAFVq1bNoc3X11eFChWyt/fp00fDhw9XwYIF5e/vr0GDBql+/fqqV6+eK0oGAAAAcAdwaccNNzNt2jS5ubmpU6dOSkhIUKtWrTRjxgxXlwUAAAAgD7MZY4yri8hKsbGxCggIUExMTI64Psm2Z7mrS0BuV/NhV1eAXC6Pb/YBZAGbzebqEpDL5ZR9T0azgcvvkwQAAAAAOQkhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgIXTIeny5cuKj4+3Pz9+/LimT5+u1atXZ2phAAAAAOAKToekRx55RJ988okk6eLFi7rvvvs0ZcoUPfLII5o5c2amFwgAAAAA2cnpkLRjxw7df//9kqQlS5aoaNGiOn78uD755BO9/fbbmV4gAAAAAGQnp0NSfHy8ChQoIElavXq1OnbsKDc3N9WrV0/Hjx/P9AIBAAAAIDs5HZLKlSunZcuW6eTJk1q1apVatmwpSYqOjpa/v3+mFwgAAAAA2cnpkDRmzBiNGDFCISEhuu+++1S/fn1J/x5VuueeezK9QAAAAADITvmcneDRRx9Vo0aNFBUVpZo1a9rbmzdvrg4dOmRqcQAAAACQ3ZwOSZIUHBys4OBgh7a6detmSkEAAAAA4EoZCkkdO3bM8AyXLl16y8UAAAAAgKtl6JqkgIAA+8Pf318RERHatm2bffj27dsVERGhgICALCsUAAAAALJDho4kzZkzx/73888/ry5duuj999+Xu7u7JCkpKUnPPPMMvdsBAAAAyPWc7t1u9uzZGjFihD0gSZK7u7uGDx+u2bNnZ2pxAAAAAJDdnA5J165d0/79+1O179+/X8nJyZlSFAAAAAC4itO92/Xu3Vt9+vTRkSNH7D3abd68WRMnTlTv3r0zvUAAAAAAyE5Oh6Q333xTwcHBmjJliqKioiRJxYoV03PPPadnn3020wsEAAAAgOzkVEi6du2aFixYoF69emnkyJGKjY2VJDpsAAAAAJBnOHVNUr58+fT000/rypUrkv4NRwQkAAAAAHmJ0x031K1bVzt37syKWgAAAADA5Zy+JumZZ57Rs88+qz///FN16tSRr6+vw/AaNWpkWnEAAAAAkN2cDkndunWTJA0ePNjeZrPZZIyRzWZTUlJS5lUHAAAAANnM6ZAUGRmZFXUAAAAAQI7gdEgqXbp0VtQBAAAAADmC0yFJko4cOaLp06dr3759kqQqVapoyJAhKlu2bKYWBwAAAADZzene7VatWqUqVapoy5YtqlGjhmrUqKHNmzeratWqWrNmTVbUCAAAAADZxukjSS+88IKGDRumiRMnpmp//vnn1aJFi0wrDgAAAACym9NHkvbt26c+ffqkan/iiSf0xx9/ZEpRAAAAAOAqToekoKAg7dq1K1X7rl27VKRIkcyoCQAAAABcxunT7fr27at+/frp6NGjatCggSRp/fr1mjRpkoYPH57pBQIAAABAdnL6SNLo0aM1ZswYvfPOO2rSpImaNGmid999V+PGjdPLL7/s1LxmzpypGjVqyN/fX/7+/qpfv76+//57+/ArV65owIABKlSokPz8/NSpUyedOXPG2ZIBAAAAIMNsxhhzqxP/888/kqQCBQrc0vTLly+Xu7u7ypcvL2OM5s2bpzfeeEM7d+5U1apV1b9/f61YsUJz585VQECABg4cKDc3N61fvz7Dy4iNjVVAQIBiYmLk7+9/S3VmJtue5a4uAbldzYddXQFyudvY7AO4Q9lsNleXgFwup+x7MpoNnA5JkZGRunbtmsqXL+/QfujQIXl4eCgkJOSWCk5RsGBBvfHGG3r00UcVFBSkBQsW6NFHH5Uk7d+/X5UrV9bGjRtVr169DM2PkIQ8h5CE25RTdlQAcg9CEm5XTtn3ZDQbOH26XXh4uDZs2JCqffPmzQoPD3d2dnZJSUlauHChLl26pPr162v79u26evWqwsLC7ONUqlRJpUqV0saNG9OdT0JCgmJjYx0eAAAAAJBRToeknTt3qmHDhqna69Wrl2avdzezd+9e+fn5ycvLS08//bS++uorValSRadPn5anp6cCAwMdxi9atKhOnz6d7vwmTJiggIAA+6NkyZJO1wQAAADgzuV0SLLZbPZrkaxiYmKUlJTkdAEVK1bUrl27tHnzZvXv31+9evW6rfstjRo1SjExMfbHyZMnb3leAAAAAO48Toekxo0ba8KECQ6BKCkpSRMmTFCjRo2cLsDT01PlypVTnTp1NGHCBNWsWVNvvfWWgoODlZiYqIsXLzqMf+bMGQUHB6c7Py8vL3tveSkPAAAAAMgop++TNGnSJDVu3FgVK1bU/fffL0n65ZdfFBsbqx9//PG2C0pOTlZCQoLq1KkjDw8PRUREqFOnTpKkAwcO6MSJE6pfv/5tLwcAAAAA0uJ0SKpSpYr27Nmjd999V7t375aPj4969uypgQMHqmDBgk7Na9SoUWrTpo1KlSqlf/75RwsWLNC6deu0atUqBQQEqE+fPho+fLgKFiwof39/DRo0SPXr189wz3YAAAAA4CynQ5IkFS9eXK+//vptLzw6Olo9e/ZUVFSUAgICVKNGDa1atUotWrSQJE2bNk1ubm7q1KmTEhIS1KpVK82YMeO2lwsAAAAA6bmlm8n+8ssvmjVrlo4eParFixfr7rvv1vz58xUaGnpL1yVlJe6ThDyH+yThNuWUe1UAyD24TxJuV07Z92TZfZK+/PJLtWrVSj4+PtqxY4cSEhIk/du7XWYcXQIAAAAAV3I6JL322mt6//339eGHH8rDw8Pe3rBhQ+3YsSNTiwMAAACA7OZ0SDpw4IAaN26cqj0gICBVd90AAAAAkNs4HZKCg4N1+PDhVO2//vqrypQpkylFAQAAAICrOB2S+vbtqyFDhmjz5s2y2Ww6deqUPvvsM40YMUL9+/fPihoBAAAAINs43QX4Cy+8oOTkZDVv3lzx8fFq3LixvLy8NGLECA0aNCgragQAAACAbHNLXYBLUmJiog4fPqy4uDhVqVJFfn5+unz5snx8fDK7xttCF+DIc+gCHLcpp3TDCiD3oAtw3K6csu/Jsi7AU3h6eqpKlSqqW7euPDw8NHXqVIWGht7q7AAAAAAgR8hwSEpISNCoUaP0n//8Rw0aNNCyZcskSXPmzFFoaKimTZumYcOGZVWdAAAAAJAtMnxN0pgxYzRr1iyFhYVpw4YN6ty5s3r37q1NmzZp6tSp6ty5s9zd3bOyVgAAAADIchkOSYsXL9Ynn3yihx9+WL/99ptq1Kiha9euaffu3ZynCgAAACDPyPDpdn/++afq1KkjSapWrZq8vLw0bNgwAhIAAACAPCXDISkpKUmenp725/ny5ZOfn1+WFAUAAAAArpLh0+2MMQoPD5eXl5ck6cqVK3r66afl6+vrMN7SpUszt0IAAAAAyEYZDkm9evVyeP74449nejEAAAAA4GoZDklz5szJyjoAAAAAIEe45ZvJAgAAAEBeREgCAAAAAAtCEgAAAABYEJIAAAAAwCJDIal27dq6cOGCJOmVV15RfHx8lhYFAAAAAK6SoZC0b98+Xbp0SZI0fvx4xcXFZWlRAAAAAOAqGeoCvFatWurdu7caNWokY4zefPNN+fn5pTnumDFjMrVAAAAAAMhOGQpJc+fO1dixY/Xtt9/KZrPp+++/V758qSe12WyEJAAAAAC5WoZCUsWKFbVw4UJJkpubmyIiIlSkSJEsLQwAAAAAXCFDIckqOTk5K+oAAAAAgBzB6ZAkSUeOHNH06dO1b98+SVKVKlU0ZMgQlS1bNlOLAwAAAIDs5vR9klatWqUqVapoy5YtqlGjhmrUqKHNmzeratWqWrNmTVbUCAAAAADZxukjSS+88IKGDRumiRMnpmp//vnn1aJFi0wrDgAAAACym9NHkvbt26c+ffqkan/iiSf0xx9/ZEpRAAAAAOAqToekoKAg7dq1K1X7rl276PEOAAAAQK7n9Ol2ffv2Vb9+/XT06FE1aNBAkrR+/XpNmjRJw4cPz/QCAQAAACA7OR2SRo8erQIFCmjKlCkaNWqUJKl48eIaN26cBg8enOkFAgAAAEB2shljzK1O/M8//0iSChQokGkFZbbY2FgFBAQoJiZG/v7+ri5Htj3LXV0CcruaD7u6AuRyt7HZB3CHstlsri4BuVxO2fdkNBvc0n2SUuTkcAQAAAAAt8LpjhsAAAAAIC8jJAEAAACABSEJAAAAACycCklXr15V8+bNdejQoayqBwAAAABcyqmQ5OHhoT179mRVLQAAAADgck6fbvf444/r448/zopaAAAAAMDlnO4C/Nq1a5o9e7Z++OEH1alTR76+vg7Dp06dmmnFAQAAAEB2czok/fbbb6pdu7Yk6eDBgw7DuNEYAAAAgNzO6ZC0du3arKgDAAAAAHKEW+4C/PDhw1q1apUuX74sSTLGZFpRAAAAAOAqToekc+fOqXnz5qpQoYLatm2rqKgoSVKfPn307LPPZnqBAAAAAJCdnA5Jw4YNk4eHh06cOKH8+fPb27t27aqVK1dmanEAAAAAkN2cviZp9erVWrVqlUqUKOHQXr58eR0/fjzTCgMAAAAAV3D6SNKlS5ccjiClOH/+vLy8vDKlKAAAAABwFadD0v33369PPvnE/txmsyk5OVmTJ0/WAw88kKnFAQAAAEB2c/p0u8mTJ6t58+batm2bEhMTNXLkSP3+++86f/681q9fnxU1AgAAAEC2cfpIUrVq1XTw4EE1atRIjzzyiC5duqSOHTtq586dKlu2bFbUCAAAAADZxukjSZIUEBCgl156KbNrAQAAAACXu6WQdOHCBX388cfat2+fJKlKlSrq3bu3ChYsmKnFAQAAAEB2c/p0u59//lkhISF6++23deHCBV24cEFvv/22QkND9fPPP2dFjQAAAACQbZw+kjRgwAB17dpVM2fOlLu7uyQpKSlJzzzzjAYMGKC9e/dmepEAAAAAkF2cPpJ0+PBhPfvss/aAJEnu7u4aPny4Dh8+nKnFAQAAAEB2czok1a5d234tktW+fftUs2bNTCkKAAAAAFwlQ6fb7dmzx/734MGDNWTIEB0+fFj16tWTJG3atEnvvfeeJk6cmDVVAgAAAEA2sRljzM1GcnNzk81m081GtdlsSkpKyrTiMkNsbKwCAgIUExMjf39/V5cj257lri4BuV3Nh11dAXK5DGz2AcCBzWZzdQnI5XLKviej2SBDR5IiIyMzrTAAAAAAyMkyFJJKly6d1XUAAAAAQI5wSzeTPXXqlH799VdFR0crOTnZYdjgwYMzpTAAAAAAcAWnQ9LcuXP11FNPydPTU4UKFXI4R9VmsxGSAAAAAORqToek0aNHa8yYMRo1apTc3JzuQRwAAAAAcjSnU058fLy6detGQAIAAACQJzmddPr06aPFixdnRS0AAAAA4HJOn243YcIEPfTQQ1q5cqWqV68uDw8Ph+FTp07NtOIAAAAAILvdUkhatWqVKlasKEmpOm4AAAAAgNzM6ZA0ZcoUzZ49W+Hh4VlQDgAAAAC4ltPXJHl5ealhw4ZZUQsAAAAAuJzTIWnIkCF65513sqIWAAAAAHA5p0+327Jli3788Ud9++23qlq1aqqOG5YuXZppxQEAAABAdnM6JAUGBqpjx45ZUQsAAAAAuJzTIWnOnDlZUQcAAAAA5AhOX5MEAAAAAHmZ00eSQkNDb3g/pKNHj95WQQAAAADgSk6HpKFDhzo8v3r1qnbu3KmVK1fqueeec2peEyZM0NKlS7V//375+PioQYMGmjRpkv1GtZJ05coVPfvss1q4cKESEhLUqlUrzZgxQ0WLFnW2dAAAAAC4KadD0pAhQ9Jsf++997Rt2zan5vXTTz9pwIABuvfee3Xt2jW9+OKLatmypf744w/5+vpKkoYNG6YVK1Zo8eLFCggI0MCBA9WxY0etX7/e2dIBAAAA4KZsxhiTGTM6evSoatWqpdjY2Fuex9mzZ1WkSBH99NNPaty4sWJiYhQUFKQFCxbo0UcflSTt379flStX1saNG1WvXr2bzjM2NlYBAQGKiYmRv7//LdeWWWx7lru6BOR2NR92dQXI5TJpsw/gDnKjSy2AjMgp+56MZoNM67hhyZIlKliw4G3NIyYmRpLs89m+fbuuXr2qsLAw+ziVKlVSqVKltHHjxjTnkZCQoNjYWIcHAAAAAGSU06fb3XPPPQ6/JhhjdPr0aZ09e1YzZsy45UKSk5M1dOhQNWzYUNWqVZMknT59Wp6engoMDHQYt2jRojp9+nSa85kwYYLGjx9/y3UAAAAAuLM5HZLat2/v8NzNzU1BQUFq2rSpKlWqdMuFDBgwQL/99pt+/fXXW56HJI0aNUrDhw+3P4+NjVXJkiVva54AAAAA7hxOh6SxY8dmehEDBw7Ut99+q59//lklSpSwtwcHBysxMVEXL150OJp05swZBQcHpzkvLy8veXl5ZXqNAAAAAO4MLr2ZrDFGAwcO1FdffaUff/xRoaGhDsPr1KkjDw8PRURE2NsOHDigEydOqH79+tldLgAAAIA7QIaPJLm5ud20ZxObzaZr165leOEDBgzQggUL9PXXX6tAgQL264wCAgLk4+OjgIAA9enTR8OHD1fBggXl7++vQYMGqX79+hnq2Q4AAAAAnJXhkPTVV1+lO2zjxo16++23lZyc7NTCZ86cKUlq2rSpQ/ucOXMUHh4uSZo2bZrc3NzUqVMnh5vJAgAAAEBWuK37JB04cEAvvPCCli9frh49euiVV15R6dKlM7O+28Z9kpDncJ8k3Kaccq8KALkH90nC7cop+54svU/SqVOn1LdvX1WvXl3Xrl3Trl27NG/evBwXkAAAAADAWU6FpJiYGD3//PMqV66cfv/9d0VERGj58uX2+xoBAAAAQG6X4WuSJk+erEmTJik4OFiff/65HnnkkaysCwAAAABcIsPXJLm5ucnHx0dhYWFyd3dPd7ylS5dmWnGZgWuSkOdwTRJuU045LxxA7sE1SbhdOWXfk9FskOEjST179uQLAgAAACDPy3BImjt3bhaWAQAAAAA5wy31bgcAAAAAeRUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABYuDUk///yz2rVrp+LFi8tms2nZsmUOw40xGjNmjIoVKyYfHx+FhYXp0KFDrikWAAAAwB3BpSHp0qVLqlmzpt577700h0+ePFlvv/223n//fW3evFm+vr5q1aqVrly5ks2VAgAAALhT5HPlwtu0aaM2bdqkOcwYo+nTp+vll1/WI488Ikn65JNPVLRoUS1btkzdunXLzlIBAAAA3CFy7DVJkZGROn36tMLCwuxtAQEBuu+++7Rx48Z0p0tISFBsbKzDAwAAAAAyKseGpNOnT0uSihYt6tBetGhR+7C0TJgwQQEBAfZHyZIls7ROAAAAAHlLjg1Jt2rUqFGKiYmxP06ePOnqkgAAAADkIjk2JAUHB0uSzpw549B+5swZ+7C0eHl5yd/f3+EBAAAAABmVY0NSaGiogoODFRERYW+LjY3V5s2bVb9+fRdWBgAAACAvc2nvdnFxcTp8+LD9eWRkpHbt2qWCBQuqVKlSGjp0qF577TWVL19eoaGhGj16tIoXL6727du7rmgAAAAAeZpLQ9K2bdv0wAMP2J8PHz5cktSrVy/NnTtXI0eO1KVLl9SvXz9dvHhRjRo10sqVK+Xt7e2qkgEAAADkcTZjjHF1EVkpNjZWAQEBiomJyRHXJ9n2LHd1Ccjtaj7s6gqQy+XxzT6ALGCz2VxdAnK5nLLvyWg2yLHXJAEAAACAKxCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAs8rm6AAAAkLVse5a7ugQAyFU4kgQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALAgJAEAAACABSEJAAAAACwISQAAAABgQUgCAAAAAItcEZLee+89hYSEyNvbW/fdd5+2bNni6pIAAAAA5FE5PiR98cUXGj58uMaOHasdO3aoZs2aatWqlaKjo11dGgAAAIA8KMeHpKlTp6pv377q3bu3qlSpovfff1/58+fX7NmzXV0aAAAAgDwon6sLuJHExERt375do0aNsre5ubkpLCxMGzduTHOahIQEJSQk2J/HxMRIkmJjY7O22IyKi3d1BQDucDlme4jsw74HgIvllH1PSh3GmBuOl6ND0t9//62kpCQVLVrUob1o0aLav39/mtNMmDBB48ePT9VesmTJLKkRAHKbgIAAV5cAALjD5LR9zz///HPDmnJ0SLoVo0aN0vDhw+3Pk5OTdf78eRUqVEg2m82FlQG3LzY2ViVLltTJkyfl7+/v6nIAAHcA9j3IS4wx+ueff1S8ePEbjpejQ1LhwoXl7u6uM2fOOLSfOXNGwcHBaU7j5eUlLy8vh7bAwMCsKhFwCX9/f3ZUAIBsxb4HeUVGjmrl6I4bPD09VadOHUVERNjbkpOTFRERofr167uwMgAAAAB5VY4+kiRJw4cPV69evfSf//xHdevW1fTp03Xp0iX17t3b1aUBAAAAyINyfEjq2rWrzp49qzFjxuj06dOqVauWVq5cmaozB+BO4OXlpbFjx6Y6pRQAgKzCvgd3Ipu5Wf93AAAAAHAHydHXJAEAAABAdiMkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAALhD2Gw2LVu2zNVlADkeIQlIw9mzZ9W/f3+VKlVKXl5eCg4OVqtWrbR+/XqH8TZs2KC2bdvqrrvukre3t6pXr66pU6cqKSnJYby8vFNq2rSphg4d6uoyACBXcPX+JSoqSm3atMmMl5LjHDt2TDabTbt27XJ1KcgDcvx9kgBX6NSpkxITEzVv3jyVKVNGZ86cUUREhM6dO2cf56uvvlKXLl3Uu3dvrV27VoGBgfrhhx80cuRIbdy4UYsWLZLNZnPhq/g/iYmJ8vT0dGhLSkqSzWaTmxu/lQBAdnH1/iU4ODizXsotMcYoKSlJ+fI5/gua1n4KcCkDwMGFCxeMJLNu3bp0x4mLizOFChUyHTt2TDXsm2++MZLMwoUL7W2SzFdffeVUDf369TNFihQxXl5epmrVqmb58uX24UuWLDFVqlQxnp6epnTp0ubNN990mL506dLmlVdeMf/9739NgQIFTK9evcycOXNMQECA+frrr03lypWNu7u7iYyMNFeuXDHPPvusKV68uMmfP7+pW7euWbt2rcP8fv31V9OkSRPj4+NjAgMDTcuWLc358+dNr169jCSHR2RkZIZfJwDcSXLC/sU6fmRkpJFkvvzyS9O0aVPj4+NjatSoYTZs2OAwTXr7AGOMuXLlihk0aJAJCgoyXl5epmHDhmbLli32adeuXWskme+++87Url3beHh4mLVr15omTZqYAQMGmCFDhphChQqZpk2bGmOM2bt3r2ndurXx9fU1RYoUMY8//rg5e/asfX5JSUlm0qRJpmzZssbT09OULFnSvPbaa/bXZn00adIkw+sFuB4/IQPX8fPzk5+fn5YtW6aEhIQ0x1m9erXOnTunESNGpBrWrl07VahQQZ9//vktLT85OVlt2rTR+vXr9emnn+qPP/7QxIkT5e7uLknavn27unTpom7dumnv3r0aN26cRo8erblz5zrM580331TNmjW1c+dOjR49WpIUHx+vSZMm6aOPPtLvv/+uIkWKaODAgdq4caMWLlyoPXv2qHPnzmrdurUOHTokSdq1a5eaN2+uKlWqaOPGjfr111/Vrl07JSUl6a233lL9+vXVt29fRUVFKSoqSiVLlryl1w0AeZ2r9y/peemllzRixAjt2rVLFSpUUPfu3XXt2jVJN94HSNLIkSP15Zdfat68edqxY4fKlSunVq1a6fz58w7LeOGFFzRx4kTt27dPNWrUkCTNmzdPnp6eWr9+vd5//31dvHhRzZo10z333KNt27Zp5cqVOnPmjLp06WKfz6hRozRx4kSNHj1af/zxhxYsWKCiRYtKkrZs2SJJ+uGHHxQVFaWlS5dm6nrCHcbVKQ3IiZYsWWLuuusu4+3tbRo0aGBGjRpldu/ebR8+ceJEI8lcuHAhzekffvhhU7lyZftzOfFL36pVq4ybm5s5cOBAmsMfe+wx06JFC4e25557zlSpUsX+vHTp0qZ9+/YO48yZM8dIMrt27bK3HT9+3Li7u5u//vrLYdzmzZubUaNGGWOM6d69u2nYsGG69TZp0sQMGTIkQ68NAO50rty/XD9+ypGkjz76yD78999/N5LMvn37jDE33gfExcUZDw8P89lnn9nbEhMTTfHixc3kyZONMf93JGnZ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I1WwYEEFBwffcH0BAAhJAID/b+3atTpy5IjWrl2refPmae7cuZo7d26a427dulWSNGfOHEVFRdmfO6Nz586Kjo7W999/r+3bt6t27dpq3ry5zp8/L0nq0aOHSpQooa1bt2r79u164YUX5OHhoQYNGmj69Ony9/dXVFSUoqKiNGLEiFt6zZ07d9a5c+e0du1ae9v58+e1cuVK9ejRQ5IUFxentm3bKiIiQjt37lTr1q3Vrl07nThx4paWKUnJyckqUaKEFi9erD/++ENjxozRiy++qEWLFkmSRowYoS5duqh169b219igQYNU8/nrr7/Utm1b3Xvvvdq9e7dmzpypjz/+WK+99prDePPmzZOvr682b96syZMn65VXXtGaNWtuuX4AyOs43Q4AIEm666679O6778rd3V2VKlXSgw8+qIiICPXt2zfVuCmnyQUGBt7S6V+//vqrtmzZoujoaHl5eUmS3nzzTS1btkxLlixRv379dOLECT333HOqVKmSJKl8+fL26QMCAuxHiG4mJiZGfn5+Dm3333+/vv/+e911111q06aNFixYoObNm0uSlixZosKFC+uBBx6QJNWsWVM1a9a0T/vqq6/qq6++0jfffKOBAwc6/dolycPDQ+PHj7c/Dw0N1caNG7Vo0SJ16dJFfn5+8vHxUUJCwg1f44wZM1SyZEm9++67stlsqlSpkk6dOqXnn39eY8aMkZvbv7+F1qhRQ2PHjpX073p89913FRERoRYtWtxS/QCQ1xGSAACSpKpVq8rd3d3+vFixYtq7d2+WLGv37t2Ki4tToUKFHNovX76sI0eOSJKGDx+uJ598UvPnz1dYWJg6d+6ssmXLOr2sAgUKaMeOHQ5tPj4+9r979Oihvn37asaMGfLy8tJnn32mbt262QNGXFycxo0bpxUrVigqKkrXrl3T5cuXb+tIkiS99957mj17tk6cOKHLly8rMTFRtWrVcmoe+/btU/369R2usWrYsKHi4uL0559/qlSpUpL+DUlWxYoVU3R09G3VDwB5GSEJAPIwf39/xcTEpGq/ePGiAgICHNo8PDwcnttstlTX6mSWuLg4FStWzH6NjlVKr3Xjxo3TY489phUrVuj777/X2LFjtXDhQnXo0MGpZbm5ualcuXLpDm/Xrp2MMVqxYoXuvfde/fLLL5o2bZp9+IgRI7RmzRq9+eabKleunHx8fPToo48qMTEx3eVJkjHG3ma9tkuSFi5cqBEjRmjKlCmqX7++ChQooDfeeEObN2926rVlVHa+twCQFxCSACAPq1ixolavXp2qfceOHapQocJtzdvDw0NJSUm3NG3t2rV1+vRp5cuXL81OH1JUqFBBFSpU0LBhw9S9e3fNmTNHHTp0kKen5y0v+3re3t7q2LGjPvvsMx0+fFgVK1ZU7dq17cPXr1+v8PBweziLi4u7YdflKaciRkVF6Z577pGkVPc1Wr9+vRo0aKBnnnnG3pZyBC1FRl5j5cqV9eWXX8oYYz+atH79ehUoUEAlSpS48QsHAKSLjhsAIA/r37+/Dh48qMGDB2vPnj06cOCApk6dqs8//1zPPvvsbc07JCREEREROn36tC5cuODUtGFhYapfv77at2+v1atX69ixY9qwYYNeeuklbdu2TZcvX9bAgQO1bt06HT9+XOvXr9fWrVtVuXJl+7Lj4uIUERGhv//+W/Hx8ekuyxij06dPp3pYj6T06NFDK1as0OzZs+0dNqQoX768li5dql27dmn37t167LHHbngUxsfHR/Xq1dPEiRO1b98+/fTTT3r55ZdTzXPbtm1atWqVDh48qNGjR6fq/CIkJMT+nv3999+pjkZJ0jPPPKOTJ09q0KBB2r9/v77++muNHTtWw4cPtx/RAgA4jy0oAORhZcqU0c8//6z9+/crLCxM9913nxYtWqTFixc73MPoVkyZMkVr1qxRyZIl7UdMMspms+m7775T48aN1bt3b1WoUEHdunXT8ePHVbRoUbm7u+vcuXPq2bOnKlSooC5duqhNmzb2zg4aNGigp59+Wl27dlVQUJAmT56c7rJiY2NVrFixVA/rNTnNmjVTwYIFdeDAAT322GMO00+dOlV33XWXGjRooHbt2qlVq1YOR5rSMnv2bF27dk116tTR0KFDU/U299RTT6ljx47q2rWr7rvvPp07d87hqJIk9e3bVxUrVtR//vMfBQUFaf369amWc/fdd+u7777Tli1bVLNmTT399NPq06dPqlAGAHCOzVhPmgYAAACAOxxHkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWBCSAAAAAMCCkAQAAAAAFoQkAAAAALD4fy3/LPmF6X12AAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -2090,7 +2087,7 @@ }, { "cell_type": "code", - "execution_count": 148, + "execution_count": 187, "id": "7228eac7-e0a9-473d-9432-e558bbc91841", "metadata": {}, "outputs": [ @@ -2128,11 +2125,11 @@ " \n", " 1\n", " 3\n", - " 1\n", + " 2\n", " \n", " \n", " 4\n", - " 16\n", + " 15\n", " \n", " \n", " 5\n", @@ -2145,11 +2142,11 @@ " \n", " \n", " 4\n", - " 16\n", + " 15\n", " \n", " \n", " 5\n", - " 33\n", + " 34\n", " \n", " \n", "\n", @@ -2158,15 +2155,15 @@ "text/plain": [ " Number of records\n", "run evaluation_score \n", - "1 3 1\n", - " 4 16\n", + "1 3 2\n", + " 4 15\n", " 5 33\n", "2 3 1\n", - " 4 16\n", - " 5 33" + " 4 15\n", + " 5 34" ] }, - "execution_count": 148, + "execution_count": 187, "metadata": {}, "output_type": "execute_result" } @@ -2191,13 +2188,13 @@ }, { "cell_type": "code", - "execution_count": 149, + "execution_count": 188, "id": "b2a18a78-55ec-43f6-9d62-929707a94364", "metadata": {}, "outputs": [ { "data": { - "image/png": "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WKCoqCg98sgjmj17tiIjI3Xvvfdq3rx5jmXmzp2rypUrq1atWlq+fLmWL1+uRx99NN8+ly5dqv79+8vT01PTpk3T8OHDtWrVKrVs2TLXH1BZWVnq1KmTypUrp1mzZqlNmzaaPXt2rqND54qKipL03x9Kp0+fPu+yqampatWqlZ5//nndeOONevbZZ3X33Xdrz549OnjwoCTp33//Vdu2bbV8+XINGjRITz/9tIKDgxUXF6dnn302V59LlizR888/rzvvvFOzZ89WaGiofv75ZzVt2lS7d+/W+PHjNXv2bPn7+6tXr15avXq147mTJk3S5MmT1a5dO73wwgt69NFHdfXVV583xDRq1EjVqlXT22+/nWveihUrVLZsWcevxXfffbcWLFigvn37av78+Ro7dqz8/Py0e/fu875POapWrarBgwfrpZde0qFDhwr0nIIaMGCAsrOzNX36dDVp0kRTp07V3Llz1bFjR1111VWaMWOGoqOjNXbsWH322We5nv/kk0/q//7v/zRu3DiNHDlSmzZtUocOHfTvv/86lvn444/VunVrpaSkaOLEiXrqqad08uRJ3XDDDfr2229z9XnzzTfr9OnTeuqppzR8+PB8az969KiaN2+ujRs36t5779WTTz6pM2fOqEePHo7Pt3Xr1lq+fLmk/05/yvm+uCo5OVknTpxQ2bJlHW3Z2dnq0aOHZs2ape7du+v5559Xr169NGfOHA0YMMDp+ZMnT9btt98ub29vTZkyRZMnT1ZkZKQ+/vhjxzKTJk3SiBEjFBERodmzZ6tv375atGiRbrzxRmVmZjr1d+zYMXXp0kUNGjTQ3Llz1a5dOxlj1LNnTy1fvly33Xabpk6dqoMHDzqCjVXfvn21evVqDR06VPPnz9fIkSN16tQp/fHHH/m+B48++qjuvPNOSf+d/rZ8+XLdddddklzbx5w9e1adOnVSWFiYZs2apb59+xbo/c9vP57j2Wef1bXXXqspU6boqaeekpeXl26++eZc1wEV5LOQpP3796tfv37q2LGjZs+erbJlyyouLk4///zzBevN7zWcuw256sSJE+rcubNiY2M1e/Zs1apVS+PGjdP69esvuk/ArQyAYrdkyRIjKc+H3W53LLdx40Yjyaxdu9bp+V27djXVqlVzTJ89e9akp6c7LXPixAlTsWJFc8cddzi1SzITJ050TA8ZMsRERUXlqnHixInm3F3E6dOncy3XqVMnp1qMMaZu3bqmTZs2uZb95JNPjCTzySefGGOMycjIMGFhYaZevXrm33//dSy3bt06I8lMmDDBqU5JZsqUKU59XnvttaZhw4a51nWuwYMHG0mmbNmypnfv3mbWrFlm9+7duZabMGGCkWRWrVqVa152drYxxpi5c+caSea1115zzMvIyDDNmjUzAQEBJiUlxRhjTGJiopFkgoKCTFJSklNf7du3N/Xr1zdnzpxx6r958+amRo0ajrbY2Fhz0003XfD1nSs+Pt54e3ub48ePO9rS09NNSEiI0zYRHBxsRowY4XL/Odvwd999ZxISEoyXl5cZOXKkY36bNm1M3bp1HdM578WSJUty9XXuNpmz7d15552OtrNnz5rKlSsbm81mpk+f7mg/ceKE8fPzM0OGDHG05WxnV111leOzMMaYt99+20gyzz77rDHmv/e7Ro0aplOnTo7P1pj/tvOqVauajh075qpp4MCBBXp/Ro0aZSSZzz//3NF26tQpU7VqVVOlShWTlZXl9PoL+hlIMsOGDTN///23SUpKMtu2bTOdO3c2kszTTz/tWG758uXGw8PDaf3GGLNw4UIjyXz55ZfGGGP27dtnPDw8TO/evZ1qMub/be9JSUnGx8fH3HjjjU7LvPDCC0aSWbx4saOtTZs2RpJZuHChU19r1qwxkszMmTMdbWfPnjWtWrVy2i5OnDiR67UUlHWbzHEx+5jx48e7tL4L7ceNyb3vzMjIMPXq1TM33HCDo60gn4UxxkRFRRlJ5rPPPnO0JSUlGbvdbh588MEL1l3QbSjn9SUmJjo9/9z9uDH/73NftmyZoy09Pd2Eh4ebvn37XrAmoCTiSBLgRvPmzdOmTZucHtZf3W644QaVL19eK1ascLSdOHFCmzZtcvo12NPT03GNS3Z2to4fP66zZ8+qUaNGBT5tqiD8/Pwc/8759bRNmzb67bfflJyc7HJ/27ZtU1JSku69916na5Vuuukm1apVK8/Rlu6++26n6VatWum333674LqWLFmiF154QVWrVtXq1as1duxY1a5dW+3bt3c67ebdd99VbGysevfunauPnFOhPvjgA4WHh2vgwIGOed7e3ho5cqRSU1O1ZcsWp+f17dtXFSpUcEwfP35cH3/8sfr3769Tp045/frcqVMn7du3z1FTSEiIfv75Z+3bt++Cr9FqwIAByszM1KpVqxxtH374oU6ePOm07YSEhGjr1q2XdBSoWrVquv322/Xiiy/q8OHDF93Puf73v/85/u3p6alGjRrJGKNhw4Y52kNCQlSzZs08t4HBgwcrMDDQMd2vXz9VqlRJH3zwgSRp586d2rdvn2699VYdO3bM8TmkpaWpffv2+uyzz5Sdne3U57nbX34++OADNW7c2OmUvICAAN155536/fffHadcXoxXXnlFFSpUUFhYmBo1aqTNmzfr4Ycf1pgxYxzLvPPOO6pdu7Zq1arldITjhhtukCTHqbhr1qxRdna2JkyYIA8P5z8Jcrb3jz76SBkZGRo1apTTMsOHD1dQUFCu76ndbs91mvAHH3wgLy8v3XPPPY42T09P3X///U7L+fn5ycfHR59++qlOnDhxsW+Rw8XsY6w1FsSF9uOS877zxIkTSk5OVqtWrZz2zwX5LHLUqVNHrVq1ckxXqFAh3+9BXgqyDbkqICDA6TonHx8fNW7cuMA1ASUNAzcAbtS4cePzXvDr5eWlvn376o033lB6errsdrtWrVqlzMzMXKfMvPrqq5o9e7b27NnjdPpLXqMuXawvv/xSEydO1Ndff53rtLXk5GQFBwe71N+BAwckSTVr1sw1r1atWvriiy+c2nx9fZ3ChiSVLVu2QH9MeXh4aMSIERoxYoSOHTumL7/8UgsXLtT69et1yy236PPPP5ckJSQkXPAUmwMHDqhGjRq5/pCpXbu20+vKce5nsH//fhlj9Pjjj+vxxx/Pcx1JSUm66qqrNGXKFPXs2VPXXHON6tWrp86dO+v2229XTEzMeWuMjY1VrVq1tGLFCkeoWLFihcqXL+/4Q1mSZs6cqSFDhigyMlINGzZU165dNXjwYFWrVu28/Z/rscce0/LlyzV9+vQ8Tzm8GFdffbXTdHBwsHx9fVW+fPlc7eee3iRJNWrUcJq22WyKjo52XGOREzzzOuUrR3JystMpSAX9Ph04cEBNmjTJ1W7dRi52iPSePXvqvvvuU0ZGhr777js99dRTOn36tNP2uG/fPu3evTvX9yVHziAHCQkJ8vDwUJ06dc77WqTc31MfHx9Vq1Yt1/Z+1VVX5RqY5MCBA6pUqZICAgKc2s/t0263a8aMGXrwwQdVsWJFNW3aVN26ddPgwYMVHh6eb42u1i7lvY/x8vJS5cqVXVrHhfbjkrRu3TpNnTpVO3fudLomzBp+CvJZ5Dj3uyEVfF8oFWwbclXlypVzhbmyZctq165dF90n4E6EJKCEu+WWW7Ro0SKtX79evXr10ttvv61atWopNjbWscxrr72muLg49erVSw899JDCwsIc59+fezH3ufK7UPzcwRASEhLUvn171apVS88884wiIyPl4+OjDz74QHPmzMn1i3tR8PT0LJR+ypUrpx49eqhHjx5q27attmzZogMHDjiuXSps1l+RJTneq7Fjx+Y7klTO8MGtW7dWQkKC3nvvPX344Yd6+eWXNWfOHC1cuNDpSEteBgwYoCeffFL//POPAgMD9f7772vgwIHy8vp/u/7+/furVatWWr16tT788EM9/fTTmjFjhlatWqUuXboU+DVWq1ZNt912m1588UWNHz8+1/yCbmdWeX3e+W0DxpgCVvr/5HwOTz/9tBo0aJDnMuf+UX/uZ+kOlStXdgxx3bVrV5UvX1733Xef2rVrpz59+kj677XVr19fzzzzTJ59REZGFll9l/oejRo1St27d9eaNWu0ceNGPf7445o2bZo+/vhjXXvttYVUZd7sdvslBYW8fP755+rRo4dat26t+fPnq1KlSvL29taSJUv0xhtvXFSfl/o9KMg25Op3tjC/m0BJQEgCSrjWrVurUqVKWrFihVq2bKmPP/4410AIK1euVLVq1bRq1Sqn/9gmTpx4wf7Lli2b5whT5/46vHbtWqWnp+v99993+hUzrxH0CjpCV04o2bt3r9PRjZy2ogotVo0aNdKWLVt0+PBhRUVFqXr16vrpp5/O+5yoqCjt2rVL2dnZTn9Q7dmzxzH/fHKO0nh7exfofi45oxwOHTpUqampat26tSZNmlSgkDR58mS9++67qlixolJSUhyDfVhVqlRJ9957r+69914lJSXpuuuu05NPPulSSJL+O5r02muvacaMGbnm5RyNOXdbO3c7K0znnqJojNH+/fsdR+GqV68uSQoKCir0++pERUVp7969udoLuo244q677tKcOXP02GOPqXfv3rLZbKpevbp++OEHtW/f/rzfx+rVqys7O1u//PJLvkHR+j21HmHMyMhQYmJigd67qKgobd68WampqU7BM6/3KKeuBx98UA8++KD27dunBg0aaPbs2XrttdcuuK78anfXPubdd9+Vr6+vNm7cKLvd7mhfsmSJ03IF+SyKSl7bkDu+s0BJwjVJQAnn4eGhfv36ae3atVq+fLnOnj2b61S7nF/wrL/Ybd26VV9//fUF+69evbqSk5OdTok4fPiw0whr+a0jOTk513/0kuTv759n8DpXo0aNFBYWpoULFzqdgrJ+/Xrt3r1bN9100wX7KIgjR47keQ1IRkaGNm/eLA8PD8eRm759++qHH37I9fql//fau3btqiNHjjhdK3b27Fk9//zzCggIUJs2bc5bT1hYmNq2batFixbleQ2P9b5N555GFhAQoOjo6DyHcT5X7dq1Vb9+fa1YsUIrVqxQpUqV1Lp1a8f8rKysXNeShYWFKSIiokD9n6t69eq67bbbtGjRIh05csRpXlBQkMqXL59rFLr58+e7vJ6CWrZsmU6dOuWYXrlypQ4fPuwIfw0bNlT16tU1a9Yspaam5nr+pdw/q2vXrvr222+dvoNpaWl68cUXVaVKlQKdUlVQXl5eevDBB7V792699957kv47QvjXX3/ppZdeyrX8v//+q7S0NElSr1695OHhoSlTpuQ6GpyzvXfo0EE+Pj567rnnnL7/r7zyipKTkwv0Pe3atavOnj3rdMuArKysXDchPn36tM6cOePUVr16dQUGBl7UNllc+5jz8fT0lM1mczoC8/vvv2vNmjVOyxXksygqeW1DOT8iWL+zWVlZFxxNFCgtOJIEuNH69esdvyxbNW/e3OkX2wEDBuj555/XxIkTVb9+fcd1DTm6deumVatWqXfv3rrpppuUmJiohQsXqk6dOnn+8Wd1yy23aNy4cerdu7dGjhyp06dPa8GCBbrmmmucLiq+8cYb5ePjo+7du+uuu+5SamqqXnrpJYWFheX6Q79hw4ZasGCBpk6dqujoaIWFheX6FVf670jKjBkzNHToULVp00YDBw7U0aNH9eyzz6pKlSoaPXp0gd7HCzl48KAaN26sG264Qe3bt1d4eLiSkpL05ptv6ocfftCoUaMc17k89NBDWrlypW6++WbdcccdatiwoY4fP673339fCxcuVGxsrO68804tWrRIcXFx2r59u6pUqaKVK1fqyy+/1Ny5c50GC8jPvHnz1LJlS9WvX1/Dhw9XtWrVdPToUX399dc6ePCgfvjhB0n/XaDdtm1bNWzYUKGhodq2bZtWrlyp++67r0CvfcCAAZowYYJ8fX01bNgwpyNfp06dUuXKldWvXz/FxsYqICBAH330kb777rt87z10IY8++qiWL1+uvXv3qm7duk7z/ve//2n69On63//+p0aNGumzzz7Tr7/+elHrKYjQ0FC1bNlSQ4cO1dGjRzV37lxFR0c7hu728PDQyy+/rC5duqhu3boaOnSorrrqKv3111/65JNPFBQUpLVr117UusePH68333xTXbp00ciRIxUaGqpXX31ViYmJevfddwv9lK64uDhNmDBBM2bMUK9evXT77bfr7bff1t13361PPvlELVq0UFZWlvbs2aO3335bGzduVKNGjRQdHa1HH31UTzzxhFq1aqU+ffrIbrfru+++U0REhKZNm6YKFSooPj5ekydPVufOndWjRw/t3btX8+fP1/XXX+90sX5+unfvrhYtWmj8+PH6/fffVadOHa1atSpXSP/111/Vvn179e/fX3Xq1JGXl5dWr16to0eP5nkU9EKKYx9zof34TTfdpGeeeUadO3fWrbfeqqSkJM2bN0/R0dFOP04V5LMoSuduQ3Xr1lXTpk0VHx+v48ePKzQ0VG+99ZbOnj1bpHUAJYZ7BtUDrmznGzpWeQyTnJ2dbSIjI40kM3Xq1Fz9ZWdnm6eeespERUUZu91urr32WrNu3bo8h/fWOcMtG2PMhx9+aOrVq2d8fHxMzZo1zWuvvZbnEODvv/++iYmJMb6+vqZKlSpmxowZZvHixbmGiT1y5Ii56aabTGBgoJHkGA48r6FjjTFmxYoV5tprrzV2u92EhoaaQYMGmYMHDzotM2TIEOPv75/rtedV57lSUlLMs88+azp16mQqV65svL29TWBgoGnWrJl56aWXnIbXNcaYY8eOmfvuu89cddVVxsfHx1SuXNkMGTLE/PPPP45ljh49aoYOHWrKly9vfHx8TP369XN9bjnDXuc3nHFCQoIZPHiwCQ8PN97e3uaqq64y3bp1MytXrnQsM3XqVNO4cWMTEhJi/Pz8TK1atcyTTz5pMjIyzvuac+zbt8+xXX3xxRdO89LT081DDz1kYmNjTWBgoPH39zexsbFm/vz5F+w3r+GWc+QMpWwdAtyY/4ZBHjZsmAkODjaBgYGmf//+JikpKd8hwP/+++9c/ea1DZw73HjOdvbmm2+a+Ph4ExYWZvz8/MxNN91kDhw4kOv5O3bsMH369DHlypUzdrvdREVFmf79+5vNmzdfsKbz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qaImTZqoWbNmkv47qnTttdcWeoEAAAAAUJy8XH1Cv3791LJlSx0+fFixsbGO9vbt26t3796FWhwAAAAAFDeXQ5IkhYeHKzw83KmtcePGhVIQAAAAALhTgUJSnz59CtzhqlWrLroYAAAAAHC3Al2TFBwc7HgEBQVp8+bN2rZtm2P+9u3btXnzZgUHBxdZoQAAAABQHAp0JGnJkiWOf48bN079+/fXwoUL5enpKUnKysrSvffey+h2AAAAAC57Lo9ut3jxYo0dO9YRkCTJ09NTY8aM0eLFiwu1OAAAAAAobi6HpLNnz2rPnj252vfs2aPs7OxCKQoAAAAA3MXl0e2GDh2qYcOGKSEhwTGi3datWzV9+nQNHTq00AsEAAAAgOLkckiaNWuWwsPDNXv2bB0+fFiSVKlSJT300EN68MEHC71AAAAAAChOLoWks2fP6o033tCQIUP08MMPKyUlRZIYsAEAAABAqeHSNUleXl66++67debMGUn/hSMCEgAAAIDSxOWBGxo3bqwdO3YURS0AAAAA4HYuX5N077336sEHH9TBgwfVsGFD+fv7O82PiYkptOIAAAAAoLi5HJJuueUWSdLIkSMdbTabTcYY2Ww2ZWVlFV51AAAAAFDMXA5JiYmJRVEHAAAAAJQILoekqKiooqgDAAAAAEoEl0OSJCUkJGju3LnavXu3JKlOnTp64IEHVL169UItDgAAAACKm8uj223cuFF16tTRt99+q5iYGMXExGjr1q2qW7euNm3aVBQ1AgAAAECxcflI0vjx4zV69GhNnz49V/u4cePUsWPHQisOAAAAAIqby0eSdu/erWHDhuVqv+OOO/TLL7+41Ne0adN0/fXXKzAwUGFhYerVq5f27t3rtMyZM2c0YsQIlStXTgEBAerbt6+OHj3qatkAAAAAUCAuh6QKFSpo586dudp37typsLAwl/rasmWLRowYoW+++UabNm1SZmambrzxRqWlpTmWGT16tNauXat33nlHW7Zs0aFDh9SnTx9XywYAAACAAnH5dLvhw4frzjvv1G+//abmzZtLkr788kvNmDFDY8aMcamvDRs2OE0vXbpUYWFh2r59u1q3bq3k5GS98soreuONN3TDDTdIkpYsWaLatWvrm2++UdOmTV0tHwAAAADOy+WQ9PjjjyswMFCzZ89WfHy8JCkiIkKTJk1yusHsxUhO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K1dO3bp1U0JCQr7ry+uUuDVr1shmszmmExIS1LNnT1WsWFEBAQG6/vrr9dFHHznmt23bVgcOHNDo0aMdR7/y63vBggWqXr26fHx8VLNmTS1fvtxpvs1m08svv6zevXurTJkyqlGjht5///186//555+VkJCg+fPnq2nTpoqKilKLFi00depUNW3a1LHcwYMHNXDgQIWGhsrf31+NGjXS1q1bXaprwYIF6tGjh/z9/fXkk09Kkt577z1dd9118vX1VbVq1TR58mSdPXs233oBAAVHSAIAXNCgQYO0du1apaamOto2btyo06dPq3fv3pKktLQ0jRkzRtu2bdPmzZvl4eGh3r17Kzs7+6LXm5qaqq5du2rz5s3asWOHOnfurO7du+uPP/6QJK1atUqVK1fWlClTdPjwYR0+fDjPflavXq0HHnhADz74oH766SfdddddGjp0qD755BOn5SZPnqz+/ftr165d6tq1qwYNGqTjx4/n2WeFChXk4eGhlStXKisrK9/627Rpo7/++kvvv/++fvjhBz388MOO96SgdU2aNEm9e/fWjz/+qDvuuEOff/65Bg8erAceeEC//PKLFi1apKVLlzoCFADgEhkAwBVvyJAhxtPT0/j7+zs9nnzySWOMMZmZmaZ8+fJm2bJljucMHDjQDBgwIN8+//77byPJ/Pjjj8YYYxITE40ks2PHDmOMMUuWLDHBwcFOz1m9erW50H9NdevWNc8//7xjOioqysyZM8dpmXP7bt68uRk+fLjTMjfffLPp2rWrY1qSeeyxxxzTqampRpJZv359vrW88MILpkyZMiYwMNC0a9fOTJkyxSQkJDjmL1q0yAQGBppjx47l+fyC1jVq1CinZdq3b2+eeuopp7bly5ebSpUq5VsrAKDgOJIEAJAktWvXTjt37nR63H333ZIkLy8v9e/fX6+//rqk/44avffeexo0aJDj+fv27dPAgQNVrVo1BQUFqUqVKpLkOOpzMVJTUzV27FjVrl1bISEhCggI0O7du13uc/fu3WrRooVTW4sWLbR7926ntpiYGMe//f39FRQUpKSkpHz7HTFihI4cOaLXX39dzZo10zvvvKO6detq06ZNkqSdO3fq2muvVWho6CXV1ahRI6fpH374QVOmTFFAQIDjMXz4cB0+fFinT5/Ot14AQMEwcAMAQNJ/oSA6Ojrf+YMGDVKbNm2UlJSkTZs2yc/Pz2n0u+7duysqKkovvfSSIiIilJ2drXr16ikjIyPP/jw8PGSMcWrLzMx0mh47dqw2bdqkWbNmKTo6Wn5+furXr1++fV6qcwdEsNlsFzxdMDAwUN27d1f37t01depUderUSVOnTlXHjh0LbfAIf39/p+nU1FRNnjxZffr0ybWsr69voawTAK5kHEkCABRI8+bNFRkZqRUrVuj111/XzTff7AgVx44d0969e/XYY4+pffv2ql27tk6cOHHe/ipUqKBTp04pLS3N0XbuPZS+/PJLxcXFqXfv3qpfv77Cw8P1+++/Oy3j4+OT7zVBOWrXrq0vv/wyV9916tS5wKt2jc1mU61atRyvKSYmRjt37sz3uqaLreu6667T3r17FR0dnevh4cF/7QBwqTiSBACQJKWnp+vIkSNObV5eXipfvrxj+tZbb9XChQv166+/Og0uULZsWZUrV04vvviiKlWqpD/++EPjx48/7/qaNGmiMmXK6JFHHtHIkSO1detWLV261GmZGjVqaNWqVerevbtsNpsef/zxXEd2qlSpos8++0y33HKL7Ha7U705HnroIfXv31/XXnutOnTooLVr12rVqlVOI+W5aufOnZo4caJuv/121alTRz4+PtqyZYsWL16scePGSZIGDhyop556Sr169dK0adNUqVIl7dixQxEREWrWrNlF1zVhwgR169ZNV199tfr16ycPDw/98MMP+umnnzR16tSLfk0AgP+fuy+KAgC435AhQ4ykXI+aNWs6LffLL78YSSYqKspkZ2c7zdu0aZOpXbu2sdvtJiYmxnz66adGklm9erUxJvfADcb8N1BDdHS08fPzM926dTMvvvii08ANiYmJpl27dsbPz89ERkaaF154wbRp08Y88MADjmW+/vprExMTY+x2u+O5eQ0KMX/+fFOtWjXj7e1trrnmGqdBKIwxTrXmCA4ONkuWLMnzPfv777/NyJEjTb169UxAQIAJDAw09evXN7NmzTJZWVmO5X7//XfTt29fExQUZMqUKWMaNWpktm7dekl1GWPMhg0bTPPmzY2fn58JCgoyjRs3Ni+++GKetQIAXGMz5pwTwgEAAADgCsaJywAAAABgQUgCAAAAAAtCEgAAAABYEJIAAAAAwIKQBAAAAAAWhCQAAAAAsCAkAQAAAIAFIQkAAAAALAhJAAAAAGBBSAIAAAAAC0ISAAAAAFj8f5YwCJGnaubMAAAAAElFTkSuQmCC", + "image/png": "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5eWlKlWquLSNyx3HJWnDhg2aMWOGEhMTne4Js4afgnwXF1z8syEV/FgoFWwfclWVKlVyhbmyZctqz549V9wn4E6EJKCEu/vuu7V48WJt3LhRPXv21FtvvaXatWurQYMGjmVee+01xcbGqmfPnnrkkUcUFhbmuP7+4pu5L5bfjeIXD4aQlJSk9u3bq3bt2nr22WcVEREhHx8fvf/++5o3b16uv7gXBU9Pz0Lpp1y5curevbu6d++utm3batu2bTp06JDj3qXCZv0rsiTHZzV+/Ph8R5K6MHxw69atlZSUpHfffVcffPCBXnnlFc2bN0+LFi1yOtOSlwEDBujJJ5/Un3/+qcDAQL333nsaOHCgvLz+36G/f//+atWqldauXasPPvhAzzzzjGbPnq01a9aoS5cuBX6P1atX17333quXXnpJEydOzDW/oPuZVV7fd377gDGmgJX+Pxe+h2eeeUY333xznstc/Ev9xd+lO1SpUsUxxHXXrl1Vvnx5PfTQQ2rXrp169+4t6e/3Vr9+fT377LN59hEREVFk9V3tZzR69Gh169ZN69atU0JCgiZNmqSZM2dq69atuuWWWwqpyrzZ7farCgp5+fTTT9W9e3e1bt1aCxcuVKVKleTt7a2lS5dq1apVV9Tn1f4cFGQfcvVntjB/NoGSgJAElHCtW7dWpUqV9Oabb6ply5baunVrroEQVq9ererVq2vNmjVO/7FNmTLlsv2XLVs2zxGmLv7r8Pr165WRkaH33nvP6a+YeY2gV9ARui6Ekv379zud3bjQVlShxapRo0batm2bjhw5osjISNWoUUPffffdJdeJjIzUnj17lJOT4/QL1b59+xzzL+XCWRpvb+8CPc/lwiiHQ4cO1ZkzZ9S6dWtNnTq1QCFp2rRpeuedd1SxYkWlpaU5BvuwqlSpkh588EE9+OCDSklJ0a233qonn3zSpZAk/X026bXXXtPs2bNzzbtwNubife3i/awwXXyJojFGBw8edJyFq1GjhiQpKCio0J+rExkZqf379+dqL+g+4op//vOfmjdvnp544gn16tVLNptNNWrU0DfffKP27dtf8uexRo0aysnJ0Q8//JBvULT+nFrPMGZmZio5OblAn11kZKS2bNmiM2fOOAXPvD6jC3WNGzdO48aN04EDB3TzzTdr7ty5eu211y67rfxqd9cx5p133pGvr68SEhJkt9sd7UuXLnVariDfRVHJax9yx88sUJJwTxJQwnl4eKhv375av369Vq5cqfPnz+e61O7CX/Csf7HbsWOHtm/fftn+a9SoodTUVKdLIo4cOeI0wlp+20hNTc31H70k+fv75xm8LtaoUSOFhYVp0aJFTpegbNy4UXv37tWdd9552T4K4ujRo3neA5KZmaktW7bIw8PDceamT58++uabb3K9f+n/vfeuXbvq6NGjTveKnT9/Xi+88IICAgLUpk2bS9YTFhamtm3bavHixXnew2N9btPFl5EFBAQoKioqz2GcL1anTh3Vr19fb775pt58801VqlRJrVu3dszPzs7OdS9ZWFiYKleuXKD+L1ajRg3de++9Wrx4sY4ePeo0LygoSOXLl881Ct3ChQtd3k5BrVixQqdPn3ZMr169WkeOHHGEv4YNG6pGjRqaM2eOzpw5k2v9q3l+VteuXfXll186/Qymp6frpZdeUtWqVQt0SVVBeXl5ady4cdq7d6/effddSX+fIfztt9/08ssv51r+r7/+Unp6uiSpZ8+e8vDw0PTp03OdDb6wv3fo0EE+Pj56/vnnnX7+X331VaWmphbo57Rr1646f/680yMDsrOzcz2E+OzZszp37pxTW40aNRQYGHhF+2RxHWMuxdPTUzabzekMzM8//6x169Y5LVeQ76Ko5LUPXfgjgvVnNjs7+7KjiQKlBWeSADfauHGj4y/LVs2bN3f6i+2AAQP0wgsvaMqUKapfv77jvoYL7rrrLq1Zs0a9evXSnXfeqeTkZC1atEjR0dF5/vJndffdd2vChAnq1auXRo0apbNnzyo+Pl433XST003Fd9xxh3x8fNStWzf985//1JkzZ/Tyyy8rLCws1y/6DRs2VHx8vGbMmKGoqCiFhYXl+iuu9PeZlNmzZ2vo0KFq06aNBg4cqGPHjum5555T1apVNWbMmAJ9jpdz+PBhNW7cWLfffrvat2+v8PBwpaSk6L///a+++eYbjR492nGfyyOPPKLVq1erX79+uv/++9WwYUOdOHFC7733nhYtWqQGDRrogQce0OLFixUbG6tdu3apatWqWr16tT7//HPNnz/fabCA/CxYsEAtW7ZU/fr1NXz4cFWvXl3Hjh3T9u3bdfjwYX3zzTeS/r5Bu23btmrYsKFCQ0O1c+dOrV69Wg899FCB3vuAAQM0efJk+fr6atiwYU5nvk6fPq0qVaqob9++atCggQICAvThhx/qq6++yvfZQ5fz+OOPa+XKldq/f7/q1q3rNO8f//iHZs2apX/84x9q1KiRPvnkE/34449XtJ2CCA0NVcuWLTV06FAdO3ZM8+fPV1RUlGPobg8PD73yyivq0qWL6tatq6FDh+qGG27Qb7/9po8++khBQUFav379FW174sSJ+u9//6suXbpo1KhRCg0N1fLly5WcnKx33nmn0C/pio2N1eTJkzV79mz17NlT9913n9566y2NGDFCH330kVq0aKHs7Gzt27dPb731lhISEtSoUSNFRUXp8ccf13/+8x+1atVKvXv3lt1u11dffaXKlStr5syZqlChguLi4jRt2jR17txZ3bt31/79+7Vw4ULddtttTjfr56dbt25q0aKFJk6cqJ9//lnR0dFas2ZNrpD+448/qn379urfv7+io6Pl5eWltWvX6tixY3meBb2c4jjGXO44fuedd+rZZ59V586ddc899yglJUULFixQVFSU0x+nCvJdFKWL96G6deuqadOmiouL04kTJxQaGqo33nhD58+fL9I6gBLDPYPqAde3Sw0dqzyGSc7JyTERERFGkpkxY0au/nJycsxTTz1lIiMjjd1uN7fccovZsGFDnsN766Lhlo0x5oMPPjD16tUzPj4+platWua1117Lcwjw9957z8TExBhfX19TtWpVM3v2bLNkyZJcw8QePXrU3HnnnSYwMNBIcgwHntfQscYY8+abb5pbbrnF2O12ExoaagYNGmQOHz7stMyQIUOMv79/rveeV50XS0tLM88995zp1KmTqVKlivH29jaBgYGmWbNm5uWXX3YaXtcYY44fP24eeughc8MNNxgfHx9TpUoVM2TIEPPnn386ljl27JgZOnSoKV++vPHx8TH169fP9b1dGPY6v+GMk5KSzODBg014eLjx9vY2N9xwg7nrrrvM6tWrHcvMmDHDNG7c2ISEhBg/Pz9Tu3Zt8+STT5rMzMxLvucLDhw44NivPvvsM6d5GRkZ5pFHHjENGjQwgYGBxt/f3zRo0MAsXLjwsv3mNdzyBReGUrYOAW7M38MgDxs2zAQHB5vAwEDTv39/k5KSku8Q4H/88UeufvPaBy4ebvzCfvbf//7XxMXFmbCwMOPn52fuvPNOc+jQoVzr79692/Tu3duUK1fO2O12ExkZ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jujIkSN59rN27Vo9/PDDGjdunL777jv985//1NChQ/XRRx85LTdt2jT1799fe/bsUdeuXTVo0CCdOHEizz4rVKggDw8PrV69WtnZ2fnW36ZNG/32229677339M033+jRRx91fCYFrWvq1Knq1auXvv32W91///369NNPNXjwYD388MP64YcftHjxYi1btswRoAAAV8kAAK57Q4YMMZ6ensbf39/p9eSTTxpjjMnKyjLly5c3K1ascKwzcOBAM2DAgHz7/OOPP4wk8+233xpjjElOTjaSzO7du40xxixdutQEBwc7rbN27Vpzuf+a6tata1544QXHdGRkpJk3b57TMhf33bx5czN8+HCnZfr162e6du3qmJZknnjiCcf0mTNnjCSzcePGfGt58cUXTZkyZUxgYKBp166dmT59uklKSnLMX7x4sQkMDDTHjx/Pc/2C1jV69GinZdq3b2+eeuopp7aVK1eaSpUq5VsrAKDgOJMEAJAktWvXTomJiU6vESNGSJK8vLzUv39/vf7665L+Pmv07rvvatCgQY71Dxw4oIEDB6p69eoKCgpS1apVJclx1udKnDlzRuPHj1edOnUUEhKigIAA7d271+U+9+7dqxYtWji1tWjRQnv37nVqi4mJcfzb399fQUFBSklJybffkSNH6ujRo3r99dfVrFkzvf3226pbt642b94sSUpMTNQtt9yi0NDQq6qrUaNGTtPffPONpk+froCAAMdr+PDhOnLkiM6ePZtvvQCAgmHgBgCApL9DQVRUVL7zBw0apDZt2iglJUWbN2+Wn5+f0+h33bp1U2RkpF5++WVVrlxZOTk5qlevnjIzM/Psz8PDQ8YYp7asrCyn6fHjx2vz5s2aM2eOoqKi5Ofnp759++bb59W6eEAEm8122csFAwMD1a1bN3Xr1k0zZsxQp06dNGPGDHXs2LHQBo/w9/d3mj5z5oymTZum3r1751rW19e3ULYJANczziQBAAqkefPmioiI0JtvvqnXX39d/fr1c4SK48ePa//+/XriiSfUvn171alTRydPnrxkfxUqVNDp06eVnp7uaLv4GUqff/65YmNj1atXL9WvX1/h4eH6+eefnZbx8fHJ956gC+rUqaPPP/88V9/R0dGXedeusdlsql27tuM9xcTEKDExMd/7mq60rltvvVX79+9XVFRUrpeHB/+1A8DV4kwSAECSlJGRoaNHjzq1eXl5qXz58o7pe+65R4sWLdKPP/7oNLhA2bJlVa5cOb300kuqVKmSfvnlF02cOPGS22vSpInKlCmjxx57TKNGjdKOHTu0bNkyp2Vq1qypNWvWqFu3brLZbJo0aVKuMztVq1bVJ598orvvvlt2u92p3gseeeQR9e/fX7fccos6dOig9evXa82aNU4j5bkqMTFRU6ZM0X333afo6Gj5+Pho27ZtWrJkiSZMmCBJGjhwoJ566in17NlTM2fOVKVKlbR7925VrlxZzZo1u+K6Jk+erLvuuks33nij+vbtKw8PD33zzTf67rvvNGPGjCt+TwCA/5+7b4oCALjfkCFDjKRcr1q1ajkt98MPPxhJJjIy0uTk5DjN27x5s6lTp46x2+0mJibGfPzxx0aSWbt2rTEm98ANxvw9UENUVJTx8/Mzd911l3nppZecBm5ITk427dq1M35+fiYiIsK8+OKLpk2bNubhhx92LLN9+3YTExNj7Ha7Y928BoVYuHChqV69uvH29jY33XST0yAUxhinWi8IDg42S5cuzfMz++OPP8yoUaNMvXr1TEBAgAkMDDT169c3c+bMMdnZ2Y7lfv75Z9OnTx8TFBRkypQpYxo1amR27NhxVXUZY8ymTZtM8+bNjZ+fnwkKCjKNGzc2L730Up61AgBcYzPmogvCAQAAAOA6xoXLAAAAAGBBSAIAAAAAC0ISAAAAAFgQkgAAAADAgpAEAAAAABaEJAAAAACwICQBAAAAgAUhCQAAAAAsCEkAAAAAYEFIAgAAAAALQhIAAAAAWPx/a+wIeqxATaYAAAAASUVORK5CYII=", "text/plain": [ "
" ] From e77d376686448bc3645e4a25a8789669b02ff336 Mon Sep 17 00:00:00 2001 From: Lee Spacagna Date: Fri, 10 Jan 2025 14:46:47 +0200 Subject: [PATCH 6/6] Add to registry --- registry.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/registry.yaml b/registry.yaml index 5d48a62582..6fffd9594b 100644 --- a/registry.yaml +++ b/registry.yaml @@ -1760,3 +1760,11 @@ - gpt-actions-library - chatgpt - chatgpt-middleware + +- title: How to evaluate LLMs for SQL generation + path: examples/evaluation/How_to_evaluate_LLMs_for_SQL_generation.ipynb + date: 2024-01-23 + authors: + - colin-jarvis + tags: + - guardrails \ No newline at end of file