diff --git a/finetune.py b/finetune.py new file mode 100644 index 0000000..5bdd34f --- /dev/null +++ b/finetune.py @@ -0,0 +1,306 @@ + +from trl import SFTTrainer +from peft import LoraConfig,TaskType +import wandb + +# Start a new wandb run to track this script +from transformers import TrainerCallback,EarlyStoppingCallback +import time +from functools import partial + +import torch +from typing import Any, Dict, List, Union, Optional +from transformers import DataCollatorForLanguageModeling +import random +import numpy as np +from dataclasses import dataclass, field +import transformers +from datasets import load_from_disk + +IGNORE_INDEX = -100 +EOT_TOKEN = "<|EOT|>" + +def set_global_seed(seed: int = 42): + """ + Фиксирует seed для обеспечения полной воспроизводимости экспериментов. + """ + # 1. Фиксация в стандартном Python + random.seed(seed) + + # 2. Фиксация в NumPy + np.random.seed(seed) + + # 3. Фиксация в PyTorch (CPU) + torch.manual_seed(seed) + + # 4. Фиксация в PyTorch (GPU) + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) # Важно, если используется несколько видеокарт (Multi-GPU) + + # 5. Настройки CuDNN (GPU backend) + # Детерминированные алгоритмы (может незначительно снизить скорость обучения) + #torch.backends.cudnn.deterministic = True + # Отключение автоматического поиска оптимальных алгоритмов свертки + #torch.backends.cudnn.benchmark = False + + # 6. Фиксация в Hugging Face Transformers + transformers.set_seed(seed) + +def build_instruction_prompt(table: str,query: str): + return """ +### Instruction: +You are a Python expert specializing in pandas. Your task is to translate the +given natural language query into a single-line pandas expression. This +expression must be valid and executable to verify the truth of the statement +using the provided table. Consider the following: +1. The table schema is represented in XML format. +2. The table is represented as a pandas DataFrame named df. +3. Do not include explanations, comments, or multiline outputs. +4. Ensure the output is concise, correct, and when run outputs either True or +False, and strictly in the following Json Format with a single key "PANDA": +"PANDA": "" + +### Table schema +{table} +### Query +{query} +### Response:\n +""".format(table=table, query=query).lstrip() + +@dataclass +class ModelArguments: + model_name_or_path: Optional[str] = field(default="deepseek-ai/deepseek-coder-6.7b-instruct") + expr_name: Optional[str] = field(default="test_run") + lora_rank: int = field(default=16 ) + lora_dropout: float = field(default=0.05) + + +@dataclass +class DataArguments: + data_path: str = field(default=None, metadata={"help": "Path to the training data."}) + table_col_name: str = field(default=None, metadata={"help": "Name column with table serialization."}) + num_proc_data: int = field(default=16, metadata={"help": "Num CPU process data"}) + + +@dataclass +class TrainingArguments(transformers.TrainingArguments): + optim: str = field(default="adamw_torch") + max_length: int = field( + default=512, + metadata={"help": "Maximum sequence length. Sequences will be right padded (and possibly truncated)."}, + ) + seed: int = field(default=42, metadata={"help": "Random seed for initialization."}) + + + +class CustomCompletionOnlyCollator(DataCollatorForLanguageModeling): + def __init__(self, response_template: str, tokenizer, *args, **kwargs): + # Обязательно выключаем Masked Language Modeling (mlm=False), так как у нас Causal LM + super().__init__(tokenizer=tokenizer, mlm=False, *args, **kwargs) + # Токенизируем шаблон ответа (без спецтокенов, чтобы избежать конфликтов с BOS) + self.response_template_ids = tokenizer.encode(response_template, add_special_tokens=False) + + def torch_call(self, examples: List[Union[List[int], Any, Dict[str, Any]]]) -> Dict[str, Any]: + # Стандартный коллатор соберет батч и создаст input_ids и labels + batch = super().torch_call(examples) + labels = batch["labels"].clone() + + for i in range(len(labels)): + label_list = labels[i].tolist() + template_len = len(self.response_template_ids) + match_idx = -1 + + # Ищем подпоследовательность токенов шаблона ответа + for j in range(len(label_list) - template_len + 1): + if label_list[j : j + template_len] == self.response_template_ids: + match_idx = j + template_len + break + + if match_idx != -1: + # Маскируем всё ДО конца шаблона (заменяем на -100) + labels[i, :match_idx] = -100 + else: + # Если шаблон почему-то не найден в тексте, маскируем всё, + # чтобы модель не училась на неверно размеченных данных + labels[i, :] = -100 + + batch["labels"] = labels + return batch + + +class WandbLoggingCallback(TrainerCallback): + # 2. Вызывается в начале обучения + def on_train_begin(self, args, state, control, **kwargs): + + if state.is_world_process_zero: + print("Обучение начинается") + # Здесь логируются train_loss, learning_rate и т.д. + run.log({"start_train": time.time()}) + + + + # 6. Вызывается после каждого логирования (по logging_steps) + def on_log(self, args, state, control, logs=None, **kwargs): + if state.is_world_process_zero: + # Здесь логируются train_loss, learning_rate и т.д. + run.log({'train_time':time.time(),**logs}) + print(f"Логирование на шаге {state.global_step}: {logs}") + # Здесь можно отправить метрики в wandb + + # 7. Вызывается после каждой валидации (по eval_steps) + def on_evaluate(self, args, state, control, metrics=None, **kwargs): + if state.is_world_process_zero: + # Здесь логируются train_loss, learning_rate и т.д. + run.log({'eval_time':time.time(),**metrics}) + print(f"Валидация на шаге {state.global_step}: {metrics}") + # Здесь можно обработать метрики валидации + + # 10. Вызывается в конце обучения + def on_train_end(self, args, state, control, **kwargs): + if state.is_world_process_zero: + # Здесь логируются train_loss, learning_rate и т.д. + run.log({"End_train": time.time()}) + print("Обучение закончено") + # 11. Вызывается в конце (для очистки ресурсов) + + + +# 1. Твоя функция подготовки промпта (немного адаптирован под батчи) +def formatting_prompts_func(example,table_col_name=''): + #output_texts = [] + #print(example) + # Важно: example содержит списки, так как SFTTrainer передает батчи + #for i in range(len(example['statement'])): + # prompt = build_instruction_prompt(example[table_col_name][i], example['statement'][i]) + # response = f'"PANDA": {example["pandas_code"][i]}\n{EOT_TOKEN}' + # output_texts.append(prompt + response) + #return output_texts + return build_instruction_prompt(example[table_col_name], example['statement'])+ f'"PANDA": {example["pandas_code"]}\n{EOT_TOKEN}' +def filter_long_examples(example,format_func = None,tokenizer=None): + full_text = format_func(example) + tokenized = tokenizer(full_text, truncation=False, add_special_tokens=False) + return len(tokenized["input_ids"]) <= tokenizer.model_max_length + + + + + +run = None + +def main(): + parser = transformers.HfArgumentParser((ModelArguments, DataArguments, TrainingArguments)) + model_args, data_args, training_args = parser.parse_args_into_dataclasses() + global run + run = wandb.init( + # Set the wandb entity where your project will be logged (generally your team name). + entity="ivan", + # Set the wandb project where this run will be logged. + project=model_args.expr_name, + # Track hyperparameters and run metadata. + config={ + **vars(model_args), + **vars(data_args), + **vars(training_args) + } + ) + if training_args.local_rank == 0: + print('='*100) + print(training_args) + + tokenizer = transformers.AutoTokenizer.from_pretrained( + model_args.model_name_or_path, + model_max_length=training_args.max_length, + padding_side="right", + use_fast=True, + trust_remote_code=True + ) + + + + if training_args.local_rank == 0: + print("PAD Token:", tokenizer.pad_token, tokenizer.pad_token_id) + print("BOS Token", tokenizer.bos_token, tokenizer.bos_token_id) + print("EOS Token", tokenizer.eos_token, tokenizer.eos_token_id) + print("Load tokenizer from {} over.".format(model_args.model_name_or_path)) + + model = transformers.AutoModelForCausalLM.from_pretrained( + model_args.model_name_or_path, + torch_dtype=torch.bfloat16 + ) + peft_config = LoraConfig( + task_type=TaskType.CAUSAL_LM, # Тип задачи + r=model_args.lora_rank, # Ранг матрицы (низкая размерность) + lora_alpha=2*model_args.lora_rank, # Масштабирующий коэффициент (обычно 2x от r) + lora_dropout=model_args.lora_dropout, # Dropout для регуляризации + bias="none", # Обычно bias не обучают + target_modules=[ # Куда встраиваем матрицы + "q_proj", + "k_proj", + "v_proj", + "o_proj", + "gate_proj", + "up_proj", + "down_proj" + ], + ) + formatting_prompts_func_loc = partial(formatting_prompts_func,table_col_name=data_args.table_col_name) + filter_long_examples_loc = partial(filter_long_examples,format_func=formatting_prompts_func_loc,tokenizer=tokenizer) + if training_args.local_rank == 0: + print("Load model from {} over.".format(model_args.model_name_or_path)) + + + #raw_train_datasets = load_dataset( + # 'json', + # data_files=data_args.data_path, + # split="train", + # cache_dir=training_args.cache_dir + #) + dataset = load_from_disk(data_args.data_path) + raw_train_dataset = dataset.get('train',None) + raw_eval_dataset = dataset.get('val',None) +# 2. Магия маскирования промпта (заменяет твой сложный preprocess) +# Модель не будет учиться генерировать инструкцию, только то, что после "### Response:\n" + if training_args.local_rank == 0: + print(f"Размер train ДО фильтрации: {len(raw_train_dataset)}") + print(f"Размер val ДО фильтрации: {len(raw_eval_dataset)}") + with training_args.main_process_first(desc="dataset filtering"): + if raw_train_dataset is not None: + raw_train_dataset = raw_train_dataset.filter(filter_long_examples_loc, num_proc=data_args.num_proc_data) + if raw_eval_dataset is not None: + raw_eval_dataset = raw_eval_dataset.filter(filter_long_examples_loc, num_proc=data_args.num_proc_data) + + # Выводим логи только на главном процессе, чтобы не дублировать текст в консоли + if training_args.local_rank == 0: + print(f"Размер train ПОСЛЕ фильтрации: {len(raw_train_dataset) if raw_train_dataset else 0}") + print(f"Размер val ПОСЛЕ фильтрации: {len(raw_eval_dataset) if raw_eval_dataset else 0}") + + response_template = "### Response:\n" + collator = CustomCompletionOnlyCollator( + response_template=response_template, + tokenizer=tokenizer + ) + + + # 3. Конфиг LoRA (передаем напрямую в Trainer) + + # 4. Инициализация SFTTrainer + trainer = SFTTrainer( + model=model, # Передаешь чистую загруженную модель (БЕЗ get_peft_model) + args=training_args, # Твои аргументы с deepspeed="config.json" работают здесь идеально! + train_dataset=raw_train_dataset, # Передаешь СЫРОЙ датасет, без .map() + eval_dataset = raw_eval_dataset, + formatting_func=formatting_prompts_func_loc, # Функция, которая склеивает вопрос и ответ + data_collator=collator, # Тот самый умный коллатор + peft_config=peft_config, # SFTTrainer сам применит LoRA + callbacks=[WandbLoggingCallback(),EarlyStoppingCallback(early_stopping_patience=3)] + ) + + # 5. Запуск + trainer.train() + trainer.save_state() + trainer.save_model(training_args.output_dir) + run.finish() + + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/finetune_tqa.py b/finetune_tqa.py new file mode 100644 index 0000000..4fc6083 --- /dev/null +++ b/finetune_tqa.py @@ -0,0 +1,304 @@ + +from trl import SFTTrainer +from peft import LoraConfig,TaskType +import wandb + +# Start a new wandb run to track this script +from transformers import TrainerCallback,EarlyStoppingCallback +import time +from functools import partial + +import torch +from typing import Any, Dict, List, Union, Optional +from transformers import DataCollatorForLanguageModeling +import random +import numpy as np +from dataclasses import dataclass, field +import transformers +from datasets import load_from_disk + +IGNORE_INDEX = -100 +EOT_TOKEN = "<|EOT|>" + +def set_global_seed(seed: int = 42): + """ + Фиксирует seed для обеспечения полной воспроизводимости экспериментов. + """ + # 1. Фиксация в стандартном Python + random.seed(seed) + + # 2. Фиксация в NumPy + np.random.seed(seed) + + # 3. Фиксация в PyTorch (CPU) + torch.manual_seed(seed) + + # 4. Фиксация в PyTorch (GPU) + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) # Важно, если используется несколько видеокарт (Multi-GPU) + + # 5. Настройки CuDNN (GPU backend) + # Детерминированные алгоритмы (может незначительно снизить скорость обучения) + #torch.backends.cudnn.deterministic = True + # Отключение автоматического поиска оптимальных алгоритмов свертки + #torch.backends.cudnn.benchmark = False + + # 6. Фиксация в Hugging Face Transformers + transformers.set_seed(seed) + +def build_instruction_prompt(table: str,query: str): + return """ +### Instruction: +You are a Python expert specializing in pandas. Your task is to translate the +given natural language query into a single-line pandas expression. This +# expression must be valid and executable to get answer on the question using the provided table. Consider the following: +1. The table schema is represented in XML format. +2. The table is represented as a pandas DataFrame named df. +3. Do not include explanations, comments, or multiline outputs. +4. Ensure the output is concise, correct, and strictly in the following Json Format with a single key "PANDA": +"PANDA": "" + +### Table schema +{table} +### Query +{query} +### Response:\n +""".format(table=table, query=query).lstrip() + +@dataclass +class ModelArguments: + model_name_or_path: Optional[str] = field(default="deepseek-ai/deepseek-coder-6.7b-instruct") + expr_name: Optional[str] = field(default="test_run") + lora_rank: int = field(default=16 ) + lora_dropout: float = field(default=0.05) + + +@dataclass +class DataArguments: + data_path: str = field(default=None, metadata={"help": "Path to the training data."}) + table_col_name: str = field(default=None, metadata={"help": "Name column with table serialization."}) + num_proc_data: int = field(default=16, metadata={"help": "Num CPU process data"}) + + +@dataclass +class TrainingArguments(transformers.TrainingArguments): + optim: str = field(default="adamw_torch") + max_length: int = field( + default=512, + metadata={"help": "Maximum sequence length. Sequences will be right padded (and possibly truncated)."}, + ) + seed: int = field(default=42, metadata={"help": "Random seed for initialization."}) + + + +class CustomCompletionOnlyCollator(DataCollatorForLanguageModeling): + def __init__(self, response_template: str, tokenizer, *args, **kwargs): + # Обязательно выключаем Masked Language Modeling (mlm=False), так как у нас Causal LM + super().__init__(tokenizer=tokenizer, mlm=False, *args, **kwargs) + # Токенизируем шаблон ответа (без спецтокенов, чтобы избежать конфликтов с BOS) + self.response_template_ids = tokenizer.encode(response_template, add_special_tokens=False) + + def torch_call(self, examples: List[Union[List[int], Any, Dict[str, Any]]]) -> Dict[str, Any]: + # Стандартный коллатор соберет батч и создаст input_ids и labels + batch = super().torch_call(examples) + labels = batch["labels"].clone() + + for i in range(len(labels)): + label_list = labels[i].tolist() + template_len = len(self.response_template_ids) + match_idx = -1 + + # Ищем подпоследовательность токенов шаблона ответа + for j in range(len(label_list) - template_len + 1): + if label_list[j : j + template_len] == self.response_template_ids: + match_idx = j + template_len + break + + if match_idx != -1: + # Маскируем всё ДО конца шаблона (заменяем на -100) + labels[i, :match_idx] = -100 + else: + # Если шаблон почему-то не найден в тексте, маскируем всё, + # чтобы модель не училась на неверно размеченных данных + labels[i, :] = -100 + + batch["labels"] = labels + return batch + + +class WandbLoggingCallback(TrainerCallback): + # 2. Вызывается в начале обучения + def on_train_begin(self, args, state, control, **kwargs): + + if state.is_world_process_zero: + print("Обучение начинается") + # Здесь логируются train_loss, learning_rate и т.д. + run.log({"start_train": time.time()}) + + + + # 6. Вызывается после каждого логирования (по logging_steps) + def on_log(self, args, state, control, logs=None, **kwargs): + if state.is_world_process_zero: + # Здесь логируются train_loss, learning_rate и т.д. + run.log({'train_time':time.time(),**logs}) + print(f"Логирование на шаге {state.global_step}: {logs}") + # Здесь можно отправить метрики в wandb + + # 7. Вызывается после каждой валидации (по eval_steps) + def on_evaluate(self, args, state, control, metrics=None, **kwargs): + if state.is_world_process_zero: + # Здесь логируются train_loss, learning_rate и т.д. + run.log({'eval_time':time.time(),**metrics}) + print(f"Валидация на шаге {state.global_step}: {metrics}") + # Здесь можно обработать метрики валидации + + # 10. Вызывается в конце обучения + def on_train_end(self, args, state, control, **kwargs): + if state.is_world_process_zero: + # Здесь логируются train_loss, learning_rate и т.д. + run.log({"End_train": time.time()}) + print("Обучение закончено") + # 11. Вызывается в конце (для очистки ресурсов) + + + +# 1. Твоя функция подготовки промпта (немного адаптирован под батчи) +def formatting_prompts_func(example,table_col_name=''): + #output_texts = [] + #print(example) + # Важно: example содержит списки, так как SFTTrainer передает батчи + #for i in range(len(example['statement'])): + # prompt = build_instruction_prompt(example[table_col_name][i], example['statement'][i]) + # response = f'"PANDA": {example["pandas_code"][i]}\n{EOT_TOKEN}' + # output_texts.append(prompt + response) + #return output_texts + return build_instruction_prompt(example[table_col_name], example['statement'])+ f'"PANDA": {example["code"]}\n{EOT_TOKEN}' +def filter_long_examples(example,format_func = None,tokenizer=None): + full_text = format_func(example) + tokenized = tokenizer(full_text, truncation=False, add_special_tokens=False) + return len(tokenized["input_ids"]) <= tokenizer.model_max_length + + + + + +run = None + +def main(): + parser = transformers.HfArgumentParser((ModelArguments, DataArguments, TrainingArguments)) + model_args, data_args, training_args = parser.parse_args_into_dataclasses() + global run + run = wandb.init( + # Set the wandb entity where your project will be logged (generally your team name). + entity="ivan", + # Set the wandb project where this run will be logged. + project=model_args.expr_name, + # Track hyperparameters and run metadata. + config={ + **vars(model_args), + **vars(data_args), + **vars(training_args) + } + ) + if training_args.local_rank == 0: + print('='*100) + print(training_args) + + tokenizer = transformers.AutoTokenizer.from_pretrained( + model_args.model_name_or_path, + model_max_length=training_args.max_length, + padding_side="right", + use_fast=True, + trust_remote_code=True + ) + + + + if training_args.local_rank == 0: + print("PAD Token:", tokenizer.pad_token, tokenizer.pad_token_id) + print("BOS Token", tokenizer.bos_token, tokenizer.bos_token_id) + print("EOS Token", tokenizer.eos_token, tokenizer.eos_token_id) + print("Load tokenizer from {} over.".format(model_args.model_name_or_path)) + + model = transformers.AutoModelForCausalLM.from_pretrained( + model_args.model_name_or_path, + torch_dtype=torch.bfloat16 + ) + peft_config = LoraConfig( + task_type=TaskType.CAUSAL_LM, # Тип задачи + r=model_args.lora_rank, # Ранг матрицы (низкая размерность) + lora_alpha=2*model_args.lora_rank, # Масштабирующий коэффициент (обычно 2x от r) + lora_dropout=model_args.lora_dropout, # Dropout для регуляризации + bias="none", # Обычно bias не обучают + target_modules=[ # Куда встраиваем матрицы + "q_proj", + "k_proj", + "v_proj", + "o_proj", + "gate_proj", + "up_proj", + "down_proj" + ], + ) + formatting_prompts_func_loc = partial(formatting_prompts_func,table_col_name=data_args.table_col_name) + filter_long_examples_loc = partial(filter_long_examples,format_func=formatting_prompts_func_loc,tokenizer=tokenizer) + if training_args.local_rank == 0: + print("Load model from {} over.".format(model_args.model_name_or_path)) + + + #raw_train_datasets = load_dataset( + # 'json', + # data_files=data_args.data_path, + # split="train", + # cache_dir=training_args.cache_dir + #) + dataset = load_from_disk(data_args.data_path) + raw_train_dataset = dataset.get('train',None) + raw_eval_dataset = dataset.get('val',None) +# 2. Магия маскирования промпта (заменяет твой сложный preprocess) +# Модель не будет учиться генерировать инструкцию, только то, что после "### Response:\n" + if training_args.local_rank == 0: + print(f"Размер train ДО фильтрации: {len(raw_train_dataset)}") + print(f"Размер val ДО фильтрации: {len(raw_eval_dataset)}") + with training_args.main_process_first(desc="dataset filtering"): + if raw_train_dataset is not None: + raw_train_dataset = raw_train_dataset.filter(filter_long_examples_loc, num_proc=data_args.num_proc_data) + if raw_eval_dataset is not None: + raw_eval_dataset = raw_eval_dataset.filter(filter_long_examples_loc, num_proc=data_args.num_proc_data) + + # Выводим логи только на главном процессе, чтобы не дублировать текст в консоли + if training_args.local_rank == 0: + print(f"Размер train ПОСЛЕ фильтрации: {len(raw_train_dataset) if raw_train_dataset else 0}") + print(f"Размер val ПОСЛЕ фильтрации: {len(raw_eval_dataset) if raw_eval_dataset else 0}") + + response_template = "### Response:\n" + collator = CustomCompletionOnlyCollator( + response_template=response_template, + tokenizer=tokenizer + ) + + + # 3. Конфиг LoRA (передаем напрямую в Trainer) + + # 4. Инициализация SFTTrainer + trainer = SFTTrainer( + model=model, # Передаешь чистую загруженную модель (БЕЗ get_peft_model) + args=training_args, # Твои аргументы с deepspeed="config.json" работают здесь идеально! + train_dataset=raw_train_dataset, # Передаешь СЫРОЙ датасет, без .map() + eval_dataset = raw_eval_dataset, + formatting_func=formatting_prompts_func_loc, # Функция, которая склеивает вопрос и ответ + data_collator=collator, # Тот самый умный коллатор + peft_config=peft_config, # SFTTrainer сам применит LoRA + callbacks=[WandbLoggingCallback(),EarlyStoppingCallback(early_stopping_patience=3)] + ) + + # 5. Запуск + trainer.train() + trainer.save_state() + trainer.save_model(training_args.output_dir) + run.finish() + + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/optimize.py b/optimize.py new file mode 100644 index 0000000..8207825 --- /dev/null +++ b/optimize.py @@ -0,0 +1,352 @@ +from transformers import Trainer, TrainerCallback # Заменили SFTTrainer на Trainer +from peft import LoraConfig,TaskType,get_peft_model +import wandb +import optuna +# Start a new wandb run to track this script +import time +from functools import partial + +import torch +from typing import Any, Dict, List, Union, Optional +from transformers import DataCollatorForLanguageModeling +import random +import numpy as np +from dataclasses import dataclass, field +import transformers +from datasets import load_from_disk + +IGNORE_INDEX = -100 +EOT_TOKEN = "<|EOT|>" +def optuna_hp_space(trial): + return { + "learning_rate": trial.suggest_float("learning_rate", 1e-5, 5e-4, log=True), + "per_device_train_batch_size": trial.suggest_categorical("per_device_train_batch_size", [8, 16, 32]), + "weight_decay": trial.suggest_float("weight_decay", 1e-4, 0.1, log=True), + "warmup_ratio": trial.suggest_float("warmup_ratio", 0.0, 0.15), + "lr_scheduler_type": trial.suggest_categorical("lr_scheduler_type", ["cosine", "linear"]) + + # Можно добавить weight_decay, warmup_steps и т.д. + } + +def model_init_(trial,model_name=None,lora_rank=None,lora_dropout=None): + if trial is not None: + lora_rank = trial.suggest_categorical("lora_rank", [ 16, 32,64 ]) + lora_dropout = trial.suggest_float("lora_dropout", 0.0, 0.1) + + model = transformers.AutoModelForCausalLM.from_pretrained( + model_name, + torch_dtype=torch.bfloat16 + ) + peft_config = LoraConfig( + task_type=TaskType.CAUSAL_LM, # Тип задачи + r=lora_rank, # Ранг матрицы (низкая размерность) + lora_alpha=2*lora_rank, # Масштабирующий коэффициент (обычно 2x от r) + lora_dropout=lora_dropout, # Dropout для регуляризации + bias="none", # Обычно bias не обучают + target_modules=[ # Куда встраиваем матрицы + "q_proj", + "k_proj", + "v_proj", + "o_proj", + "gate_proj", + "up_proj", + "down_proj" + ], + ) + return get_peft_model(model,peft_config) +def set_global_seed(seed: int = 42): + """ + Фиксирует seed для обеспечения полной воспроизводимости экспериментов. + """ + # 1. Фиксация в стандартном Python + random.seed(seed) + + # 2. Фиксация в NumPy + np.random.seed(seed) + + # 3. Фиксация в PyTorch (CPU) + torch.manual_seed(seed) + + # 4. Фиксация в PyTorch (GPU) + torch.cuda.manual_seed(seed) + torch.cuda.manual_seed_all(seed) # Важно, если используется несколько видеокарт (Multi-GPU) + + # 5. Настройки CuDNN (GPU backend) + # Детерминированные алгоритмы (может незначительно снизить скорость обучения) + #torch.backends.cudnn.deterministic = True + # Отключение автоматического поиска оптимальных алгоритмов свертки + #torch.backends.cudnn.benchmark = False + + # 6. Фиксация в Hugging Face Transformers + transformers.set_seed(seed) + +def build_instruction_prompt(table: str,query: str): + return """ +### Instruction: +You are a Python expert specializing in pandas. Your task is to translate the +given natural language query into a single-line pandas expression. This +expression must be valid and executable to verify the truth of the statement +using the provided table. Consider the following: +1. The table schema is represented in XML format. +2. The table is represented as a pandas DataFrame named df. +3. Do not include explanations, comments, or multiline outputs. +4. Ensure the output is concise, correct, and when run outputs either True or +False, and strictly in the following Json Format with a single key "PANDA": +"PANDA": "" + +### Table schema +{table} +### Query +{query} +### Response: +""".format(table=table, query=query).lstrip() + +@dataclass +class ModelArguments: + model_name_or_path: Optional[str] = field(default="deepseek-ai/deepseek-coder-6.7b-instruct") + expr_name: Optional[str] = field(default="test_run") + lora_rank: int = field(default=16 ) + lora_dropout: float = field(default=0.05) + + +@dataclass +class DataArguments: + data_path: str = field(default=None, metadata={"help": "Path to the training data."}) + table_col_name: str = field(default=None, metadata={"help": "Name column with table serialization."}) + + +@dataclass +class TrainingArguments(transformers.TrainingArguments): + optim: str = field(default="adamw_torch") + max_length: int = field( + default=512, + metadata={"help": "Maximum sequence length. Sequences will be right padded (and possibly truncated)."}, + ) + seed: int = field(default=42, metadata={"help": "Random seed for initialization."}) + + + +class CustomCompletionOnlyCollator(DataCollatorForLanguageModeling): + def __init__(self, response_template: str, tokenizer, *args, **kwargs): + # Обязательно выключаем Masked Language Modeling (mlm=False), так как у нас Causal LM + super().__init__(tokenizer=tokenizer, mlm=False, *args, **kwargs) + # Токенизируем шаблон ответа (без спецтокенов, чтобы избежать конфликтов с BOS) + self.response_template_ids = tokenizer.encode(response_template, add_special_tokens=False) + + def torch_call(self, examples: List[Union[List[int], Any, Dict[str, Any]]]) -> Dict[str, Any]: + # Стандартный коллатор соберет батч и создаст input_ids и labels + batch = super().torch_call(examples) + labels = batch["labels"].clone() + + for i in range(len(labels)): + label_list = labels[i].tolist() + template_len = len(self.response_template_ids) + match_idx = -1 + + # Ищем подпоследовательность токенов шаблона ответа + for j in range(len(label_list) - template_len + 1): + if label_list[j : j + template_len] == self.response_template_ids: + match_idx = j + template_len + break + + if match_idx != -1: + # Маскируем всё ДО конца шаблона (заменяем на -100) + labels[i, :match_idx] = -100 + else: + # Если шаблон почему-то не найден в тексте, маскируем всё, + # чтобы модель не училась на неверно размеченных данных + labels[i, :] = -100 + + batch["labels"] = labels + return batch + + +class WandbLoggingCallback(TrainerCallback): + def __init__(self, project_name: str, entity: str = None): + # Передаем настройки проекта при создании коллбека + self.project_name = project_name + self.entity = entity + + # 2. Вызывается в начале обучения (каждого отдельного Trial) + def on_train_begin(self, args, state, control, **kwargs): + if state.is_world_process_zero: + print(f"Обучение начинается. Запуск: {args.run_name}") + + # Инициализируем НОВЫЙ запуск для текущего trial + # Trainer сам подменяет args.run_name на уникальное имя при поиске + wandb.init( + project=self.project_name, + entity=self.entity, + name=args.run_name, # Уникальное имя (например, run-1, run-2) + reinit=True, # КРИТИЧЕСКИ ВАЖНО: разрешает перезапуск + config=args.to_dict() # Сохраняем гиперпараметры именно этого trial + ) + + wandb.log({"start_train": time.time()}) + + # 6. Вызывается после каждого логирования (по logging_steps) + def on_log(self, args, state, control, logs=None, **kwargs): + if state.is_world_process_zero and wandb.run is not None: + # Заменили run.log на wandb.log (пишет в текущий активный процесс) + wandb.log({'train_time': time.time(), **logs}) + print(f"Логирование на шаге {state.global_step}: {logs}") + + # 7. Вызывается после каждой валидации (по eval_steps) + def on_evaluate(self, args, state, control, metrics=None, **kwargs): + if state.is_world_process_zero and wandb.run is not None: + wandb.log({'eval_time': time.time(), **metrics}) + print(f"Валидация на шаге {state.global_step}: {metrics}") + + # 10. Вызывается в конце обучения (одного Trial) + def on_train_end(self, args, state, control, **kwargs): + if state.is_world_process_zero: + if wandb.run is not None: + wandb.log({"End_train": time.time()}) + print(f"Обучение {args.run_name} закончено. Закрываем сессию WandB.") + + # КРИТИЧЕСКИ ВАЖНО: закрываем сессию, чтобы следующий trial + # начал запись в новый чистый лог + wandb.finish() + + +# 1. Твоя функция подготовки промпта (немного адаптирован под батчи) +def formatting_prompts_func(example,table_col_name=''): + #output_texts = [] + #print(example) + # Важно: example содержит списки, так как SFTTrainer передает батчи + #for i in range(len(example['statement'])): + # prompt = build_instruction_prompt(example[table_col_name][i], example['statement'][i]) + # response = f'"PANDA": {example["pandas_code"][i]}\n{EOT_TOKEN}' + # output_texts.append(prompt + response) + #return output_texts + return build_instruction_prompt(example[table_col_name], example['statement'])+ f'"PANDA": {example["pandas_code"]}\n{EOT_TOKEN}' + +def preprocess_dataset(examples, tokenizer, table_col_name, max_length): + batch_texts = [] + # Так как мы используем batched=True, examples содержит списки + for i in range(len(examples['statement'])): + prompt = build_instruction_prompt(examples[table_col_name][i], examples['statement'][i]) + response = f'"PANDA": {examples["pandas_code"][i]}\n{EOT_TOKEN}' + batch_texts.append(prompt + response) + + # Токенизируем склеенный текст + model_inputs = tokenizer( + batch_texts, + truncation=True, + max_length=max_length, + padding=False # Паддинг будет делать DataCollator динамически! + ) + return model_inputs + + +def main(): + parser = transformers.HfArgumentParser((ModelArguments, DataArguments, TrainingArguments)) + model_args, data_args, training_args = parser.parse_args_into_dataclasses() + model_init = partial(model_init_,model_name=model_args.model_name_or_path, + lora_rank=model_args.lora_rank, + lora_dropout=model_args.lora_dropout) + + if training_args.local_rank == 0: + print('='*100) + print(training_args) + + tokenizer = transformers.AutoTokenizer.from_pretrained( + model_args.model_name_or_path, + model_max_length=training_args.max_length, + padding_side="right", + use_fast=True, + trust_remote_code=True + ) + + print("PAD Token:", tokenizer.pad_token, tokenizer.pad_token_id) + print("BOS Token", tokenizer.bos_token, tokenizer.bos_token_id) + print("EOS Token", tokenizer.eos_token, tokenizer.eos_token_id) + + if training_args.local_rank == 0: + print("Load tokenizer from {} over.".format(model_args.model_name_or_path)) + + + + formatting_prompts_func_loc = partial(formatting_prompts_func,table_col_name=data_args.table_col_name) + + + #raw_train_datasets = load_dataset( + # 'json', + # data_files=data_args.data_path, + # split="train", + # cache_dir=training_args.cache_dir + #) + dataset = load_from_disk(data_args.data_path) + raw_train_dataset = dataset.get('train',None) + raw_eval_dataset = dataset.get('val',None) +# 2. Магия маскирования промпта (заменяет твой сложный preprocess) +# Модель не будет учиться генерировать инструкцию, только то, что после "### Response:\n" + response_template = "### Response:\n" + collator = CustomCompletionOnlyCollator( + response_template=response_template, + tokenizer=tokenizer + ) + preprocess_func_with_args = partial( + preprocess_dataset, + tokenizer=tokenizer, + table_col_name=data_args.table_col_name, + max_length=training_args.max_length + ) + + if training_args.local_rank == 0: + tokenized_train_dataset = raw_train_dataset.map( + preprocess_func_with_args, + batched=True, + remove_columns=raw_train_dataset.column_names, + desc="Running tokenizer on train dataset" + ) + + tokenized_eval_dataset = raw_eval_dataset.map( + preprocess_func_with_args, + batched=True, + remove_columns=raw_eval_dataset.column_names, + desc="Running tokenizer on eval dataset" + ) + # 3. Конфиг LoRA (передаем напрямую в Trainer) + # 4. Инициализация SFTTrainer + trainer = Trainer( # <-- Заменили SFTTrainer на Trainer + model=None, + model_init=model_init, + args=training_args, + train_dataset=tokenized_train_dataset, # Передаем ТОКЕНИЗИРОВАННЫЙ датасет + eval_dataset=tokenized_eval_dataset, # Передаем ТОКЕНИЗИРОВАННЫЙ датасет + data_collator=collator, + callbacks=[WandbLoggingCallback(project_name=model_args.expr_name, entity="ivan")] + ) + best_run = trainer.hyperparameter_search( + direction="minimize", # Что делать с метрикой (минимизировать loss) + backend="optuna", # Используемый бэкенд + hp_space=optuna_hp_space, # Наше пространство параметров + n_trials=80, # Количество экспериментов + compute_objective=lambda metrics: metrics["eval_loss"], # Какую метрику оптимизироватьб + pruner=optuna.pruners.MedianPruner(n_warmup_steps=2) + ) + + if training_args.local_rank == 0: + print("="*50) + print("Лучшие параметры найдены!") + print(best_run.hyperparameters) + print(f"Лучший eval_loss: {best_run.objective}") + + # 3. ЭКСПОРТ В WANDB: Создаем финальный "итоговый" запуск + wandb.init( + project=model_args.expr_name, + entity="ivan", + name="BEST_MODEL_SUMMARY", # Яркое, привлекающее внимание имя + tags=["best-run", "summary"], # Теги для удобного поиска в интерфейсе + config=best_run.hyperparameters # Передаем только лучшие параметры! + ) + + # Логируем итоговую метрику победителя + wandb.log({"best_eval_loss": best_run.objective}) + + # Закрываем итоговую сессию + wandb.finish() + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/peft_finetune.py b/peft_finetune.py new file mode 100644 index 0000000..f416ee7 --- /dev/null +++ b/peft_finetune.py @@ -0,0 +1,213 @@ +import torch +from typing import Any, Dict, List, Union +from transformers import DataCollatorForLanguageModeling +from transformers import TrainerCallback +import time +from trl import SFTTrainer +from peft import LoraConfig,TaskType +import wandb + +class CustomCompletionOnlyCollator(DataCollatorForLanguageModeling): + def __init__(self, response_template: str, tokenizer, *args, **kwargs): + # Обязательно выключаем Masked Language Modeling (mlm=False), так как у нас Causal LM + super().__init__(tokenizer=tokenizer, mlm=False, *args, **kwargs) + # Токенизируем шаблон ответа (без спецтокенов, чтобы избежать конфликтов с BOS) + self.response_template_ids = tokenizer.encode(response_template, add_special_tokens=False) + + def torch_call(self, examples: List[Union[List[int], Any, Dict[str, Any]]]) -> Dict[str, Any]: + # Стандартный коллатор соберет батч и создаст input_ids и labels + batch = super().torch_call(examples) + labels = batch["labels"].clone() + + for i in range(len(labels)): + label_list = labels[i].tolist() + template_len = len(self.response_template_ids) + match_idx = -1 + + # Ищем подпоследовательность токенов шаблона ответа + for j in range(len(label_list) - template_len + 1): + if label_list[j : j + template_len] == self.response_template_ids: + match_idx = j + template_len + break + + if match_idx != -1: + # Маскируем всё ДО конца шаблона (заменяем на -100) + labels[i, :match_idx] = -100 + else: + # Если шаблон почему-то не найден в тексте, маскируем всё, + # чтобы модель не училась на неверно размеченных данных + labels[i, :] = -100 + + batch["labels"] = labels + return batch + + +class WandbLoggingCallback(TrainerCallback): + # 2. Вызывается в начале обучения + def on_train_begin(self, args, state, control, **kwargs): + + if state.is_world_process_zero: + print("Обучение начинается") + # Здесь логируются train_loss, learning_rate и т.д. + run.log({"start_train": time.time()}) + + + + # 6. Вызывается после каждого логирования (по logging_steps) + def on_log(self, args, state, control, logs=None, **kwargs): + if state.is_world_process_zero: + # Здесь логируются train_loss, learning_rate и т.д. + run.log({'train_time':time.time(),**logs}) + print(f"Логирование на шаге {state.global_step}: {logs}") + # Здесь можно отправить метрики в wandb + + # 7. Вызывается после каждой валидации (по eval_steps) + def on_evaluate(self, args, state, control, metrics=None, **kwargs): + if state.is_world_process_zero: + # Здесь логируются train_loss, learning_rate и т.д. + run.log({'eval_time':time.time(),**metrics}) + print(f"Валидация на шаге {state.global_step}: {metrics}") + # Здесь можно обработать метрики валидации + + # 10. Вызывается в конце обучения + def on_train_end(self, args, state, control, **kwargs): + if state.is_world_process_zero: + # Здесь логируются train_loss, learning_rate и т.д. + run.log({"End_train": time.time()}) + print("Обучение закончено") + # 11. Вызывается в конце (для очистки ресурсов) + + +# Start a new wandb run to track this script + + + +# 1. Твоя функция подготовки промпта (немного адаптирован под батчи) +def formatting_prompts_func(example,table_col_name=''): + output_texts = [] + # Важно: example содержит списки, так как SFTTrainer передает батчи + for i in range(len(example['statement'])): + prompt = build_instruction_prompt(example[table_col_name][i], example['statement'][i]) + response = f'"PANDA": {example["pandas_code"][i]}\n{EOT_TOKEN}' + output_texts.append(prompt + response) + return output_texts + + + +run = None + +def main(): + parser = transformers.HfArgumentParser((ModelArguments, DataArguments, TrainingArguments)) + model_args, data_args, training_args = parser.parse_args_into_dataclasses() + global run + run = wandb.init( + # Set the wandb entity where your project will be logged (generally your team name). + entity="ivan", + # Set the wandb project where this run will be logged. + project=model_args.run_name, + # Track hyperparameters and run metadata. + config={ + **model_args, + **data_args, + **data_args + }, +) + if training_args.local_rank == 0: + print('='*100) + print(training_args) + + tokenizer = transformers.AutoTokenizer.from_pretrained( + model_args.model_name_or_path, + model_max_length=training_args.model_max_length, + padding_side="right", + use_fast=True, + trust_remote_code=True + ) + + print("PAD Token:", tokenizer.pad_token, tokenizer.pad_token_id) + print("BOS Token", tokenizer.bos_token, tokenizer.bos_token_id) + print("EOS Token", tokenizer.eos_token, tokenizer.eos_token_id) + + if training_args.local_rank == 0: + print("Load tokenizer from {} over.".format(model_args.model_name_or_path)) + + model = transformers.AutoModelForCausalLM.from_pretrained( + model_args.model_name_or_path, + torch_dtype=torch.bfloat16 + ) + peft_config = LoraConfig( + task_type=TaskType.CAUSAL_LM, # Тип задачи + r=16, # Ранг матрицы (низкая размерность) + lora_alpha=32, # Масштабирующий коэффициент (обычно 2x от r) + lora_dropout=0.05, # Dropout для регуляризации + bias="none", # Обычно bias не обучают + target_modules=[ # Куда встраиваем матрицы + "q_proj", + "k_proj", + "v_proj", + "o_proj", + "gate_proj", + "up_proj", + "down_proj" + ], + ) + if training_args.local_rank == 0: + print("Load model from {} over.".format(model_args.model_name_or_path)) + + + #raw_train_datasets = load_dataset( + # 'json', + # data_files=data_args.data_path, + # split="train", + # cache_dir=training_args.cache_dir + #) + dataset = load_from_disk(data_path) + raw_train_datasets = dataset.get('train',None) + raw_val_dataset = dataset.get('val',None) +# 2. Магия маскирования промпта (заменяет твой сложный preprocess) +# Модель не будет учиться генерировать инструкцию, только то, что после "### Response:\n" + response_template = "### Response:\n" + collator = CustomCompletionOnlyCollator( + response_template=response_template, + tokenizer=tokenizer + ) + + + # 3. Конфиг LoRA (передаем напрямую в Trainer) + peft_config = LoraConfig( + task_type=TaskType.CAUSAL_LM, # Тип задачи + r=16, # Ранг матрицы (низкая размерность) + lora_alpha=32, # Масштабирующий коэффициент (обычно 2x от r) + lora_dropout=0.05, # Dropout для регуляризации + bias="none", # Обычно bias не обучают + target_modules=[ # Куда встраиваем матрицы + "q_proj", + "k_proj", + "v_proj", + "o_proj", + "gate_proj", + "up_proj", + "down_proj" + ], + ) + # 4. Инициализация SFTTrainer + trainer = SFTTrainer( + model=model, # Передаешь чистую загруженную модель (БЕЗ get_peft_model) + args=training_args, # Твои аргументы с deepspeed="config.json" работают здесь идеально! + train_dataset=raw_train_dataset, # Передаешь СЫРОЙ датасет, без .map() + eval_dataset = raw_eval_dataset, + formatting_func=formatting_prompts_func, # Функция, которая склеивает вопрос и ответ + data_collator=collator, # Тот самый умный коллатор + max_seq_length=training_args.model_max_length, # SFTTrainer сам обрежет длинные тексты + peft_config=peft_config, # SFTTrainer сам применит LoRA + callbacks=[WandbLoggingCallback()] + ) + + # 5. Запуск + trainer.train() + trainer.save_state() + trainer.save_model(training_args.output_dir) + run.finish() + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..85a5790 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,209 @@ +accelerate==1.13.0 +addict==2.4.0 +aiohappyeyeballs==2.6.1 +aiohttp==3.13.2 +aiosignal==1.4.0 +annotated-doc==0.0.4 +annotated-types==0.7.0 +anthropic==0.71.0 +anyio==4.11.0 +apache-tvm-ffi==0.1.4 +astor==0.8.1 +asttokens==3.0.0 +async-timeout==5.0.1 +attrs==25.4.0 +blake3==1.0.8 +cachetools==6.2.2 +cbor2==5.7.1 +certifi==2025.11.12 +charset-normalizer==3.4.4 +click==8.2.1 +cloudpickle==3.1.2 +comm==0.2.3 +compressed-tensors==0.12.2 +contourpy==1.3.2 +cuda-bindings==13.0.3 +cuda-pathfinder==1.3.2 +cuda-python==13.0.3 +cupy-cuda12x==13.6.0 +cycler==0.12.1 +datasets==4.4.1 +debugpy==1.8.17 +decorator==5.2.1 +depyf==0.20.0 +dill==0.4.0 +diskcache==5.6.3 +distro==1.9.0 +dnspython==2.8.0 +docstring_parser==0.17.0 +einops==0.8.1 +email-validator==2.3.0 +exceptiongroup==1.3.0 +executing==2.2.1 +faiss-cpu==1.13.2 +fastapi==0.122.0 +fastapi-cli==0.0.16 +fastapi-cloud-cli==0.5.2 +fastar==0.8.0 +fastrlock==0.8.3 +filelock==3.20.0 +flashinfer-python==0.5.2 +fonttools==4.61.0 +frozenlist==1.8.0 +fsspec==2025.10.0 +gguf==0.17.1 +gitdb==4.0.12 +GitPython==3.1.46 +h11==0.16.0 +hf-xet==1.2.0 +httpcore==1.0.9 +httptools==0.7.1 +httpx==0.28.1 +huggingface-hub==0.36.0 +idna==3.11 +interegular==0.3.3 +ipykernel==7.1.0 +ipython==8.37.0 +ipywidgets==8.1.8 +jedi==0.19.2 +Jinja2==3.1.6 +jiter==0.12.0 +jmespath==1.0.1 +joblib==1.5.2 +jsonschema==4.25.1 +jsonschema-specifications==2025.9.1 +jupyter_client==8.6.3 +jupyter_core==5.9.1 +jupyterlab_widgets==3.0.16 +kiwisolver==1.4.9 +lark==1.2.2 +llguidance==1.3.0 +llvmlite==0.44.0 +lm-format-enforcer==0.11.3 +loguru==0.7.3 +markdown-it-py==4.0.0 +MarkupSafe==3.0.3 +matplotlib==3.10.7 +matplotlib-inline==0.2.1 +mdurl==0.1.2 +mistral_common==1.8.5 +model-hosting-container-standards==0.1.9 +modelscope==1.31.0 +mpmath==1.3.0 +msgpack==1.1.2 +msgspec==0.20.0 +multidict==6.7.0 +multiprocess==0.70.18 +nest-asyncio==1.6.0 +networkx==3.4.2 +ninja==1.13.0 +numba==0.61.2 +numpy==2.2.6 +nvidia-cublas-cu12==12.8.4.1 +nvidia-cuda-cupti-cu12==12.8.90 +nvidia-cuda-nvrtc-cu12==12.8.93 +nvidia-cuda-runtime-cu12==12.8.90 +nvidia-cudnn-cu12==9.10.2.21 +nvidia-cudnn-frontend==1.16.0 +nvidia-cufft-cu12==11.3.3.83 +nvidia-cufile-cu12==1.13.1.3 +nvidia-curand-cu12==10.3.9.90 +nvidia-cusolver-cu12==11.7.3.90 +nvidia-cusparse-cu12==12.5.8.93 +nvidia-cusparselt-cu12==0.7.1 +nvidia-cutlass-dsl==4.3.1 +nvidia-ml-py==13.580.82 +nvidia-nccl-cu12==2.27.5 +nvidia-nvjitlink-cu12==12.8.93 +nvidia-nvshmem-cu12==3.3.20 +nvidia-nvtx-cu12==12.8.90 +openai==2.8.1 +openai-harmony==0.0.8 +opencv-python-headless==4.12.0.88 +outlines_core==0.2.11 +packaging==25.0 +pandas==2.3.3 +parso==0.8.5 +partial-json-parser==0.2.1.1.post7 +peft==0.18.1 +pexpect==4.9.0 +pillow==12.0.0 +platformdirs==4.5.0 +prometheus-fastapi-instrumentator==7.1.0 +prometheus_client==0.23.1 +prompt_toolkit==3.0.52 +propcache==0.4.1 +protobuf==6.33.1 +psutil==7.1.3 +ptyprocess==0.7.0 +pure_eval==0.2.3 +py-cpuinfo==9.0.0 +pyarrow==22.0.0 +pybase64==1.4.2 +pycountry==24.6.1 +pydantic==2.12.5 +pydantic-extra-types==2.10.6 +pydantic_core==2.41.5 +Pygments==2.19.2 +pyparsing==3.2.5 +python-dateutil==2.9.0.post0 +python-dotenv==1.2.1 +python-json-logger==4.0.0 +python-multipart==0.0.20 +pytz==2025.2 +PyYAML==6.0.3 +pyzmq==27.1.0 +ray==2.52.1 +referencing==0.37.0 +regex==2025.11.3 +requests==2.32.5 +rich==14.2.0 +rich-toolkit==0.17.0 +rignore==0.7.6 +rpds-py==0.29.0 +safetensors==0.6.2 +scikit-learn==1.7.2 +scipy==1.15.3 +seaborn==0.13.2 +sentencepiece==0.2.1 +sentry-sdk==2.46.0 +setproctitle==1.3.7 +shellingham==1.5.4 +six==1.17.0 +smmap==5.0.3 +sniffio==1.3.1 +stack-data==0.6.3 +starlette==0.50.0 +supervisor==4.3.0 +sympy==1.14.0 +tabulate==0.9.0 +threadpoolctl==3.6.0 +tiktoken==0.12.0 +tokenizers==0.22.1 +tomli==2.3.0 +torch==2.9.0 +torchaudio==2.9.0 +torchvision==0.24.0 +tornado==6.5.2 +tqdm==4.67.1 +traitlets==5.14.3 +transformers==4.57.1 +triton==3.5.0 +trl==0.29.1 +typer==0.20.0 +typing-inspection==0.4.2 +typing_extensions==4.15.0 +tzdata==2025.2 +urllib3==2.5.0 +uvicorn==0.38.0 +uvloop==0.22.1 +vllm==0.11.2 +wandb==0.25.1 +watchfiles==1.1.1 +wcwidth==0.2.14 +websockets==15.0.1 +widgetsnbextension==4.0.15 +xformers==0.0.33.post1 +xgrammar==0.1.25 +xxhash==3.6.0 +yarl==1.22.0 diff --git a/table_marker_app/README.md b/table_marker_app/README.md new file mode 100644 index 0000000..3ab902f --- /dev/null +++ b/table_marker_app/README.md @@ -0,0 +1,3 @@ +Запуск + +streamlit run table_mark_app.py \ No newline at end of file diff --git a/table_marker_app/requirements.txt b/table_marker_app/requirements.txt new file mode 100644 index 0000000..080504c --- /dev/null +++ b/table_marker_app/requirements.txt @@ -0,0 +1,62 @@ +aiohappyeyeballs==2.6.1 +aiohttp==3.13.3 +aiosignal==1.4.0 +altair==6.0.0 +anyio==4.12.1 +async-timeout==5.0.1 +attrs==25.4.0 +blinker==1.9.0 +cachetools==6.2.6 +certifi==2026.1.4 +charset-normalizer==3.4.4 +click==8.3.1 +datasets==4.5.0 +dill==0.4.0 +exceptiongroup==1.3.1 +filelock==3.20.3 +frozenlist==1.8.0 +fsspec==2025.10.0 +gitdb==4.0.12 +GitPython==3.1.46 +h11==0.16.0 +hf-xet==1.2.0 +httpcore==1.0.9 +httpx==0.28.1 +huggingface_hub==1.3.7 +idna==3.11 +Jinja2==3.1.6 +jsonschema==4.26.0 +jsonschema-specifications==2025.9.1 +MarkupSafe==3.0.3 +multidict==6.7.1 +multiprocess==0.70.18 +narwhals==2.16.0 +numpy==2.2.6 +packaging==26.0 +pandas==2.3.3 +pillow==12.1.0 +propcache==0.4.1 +protobuf==6.33.5 +pyarrow==23.0.0 +pydeck==0.9.1 +python-dateutil==2.9.0.post0 +pytz==2025.2 +PyYAML==6.0.3 +referencing==0.37.0 +requests==2.32.5 +rpds-py==0.30.0 +shellingham==1.5.4 +six==1.17.0 +smmap==5.0.2 +streamlit==1.53.1 +tenacity==9.1.2 +toml==0.10.2 +tornado==6.5.4 +tqdm==4.67.2 +typer-slim==0.21.1 +typing_extensions==4.15.0 +tzdata==2025.3 +urllib3==2.6.3 +watchdog==6.0.0 +xxhash==3.6.0 +yarl==1.22.0 diff --git a/table_marker_app/table_annotation_config.yaml b/table_marker_app/table_annotation_config.yaml new file mode 100644 index 0000000..baacf01 --- /dev/null +++ b/table_marker_app/table_annotation_config.yaml @@ -0,0 +1,7 @@ +autosave: true +autosave_interval: 5 +dataset_path: ../tests/tabfact_test_tables +default_start_index: 0 +hotkeys_enabled: true +results_file: ../tests/tab_fact_test_mark.csv +show_debug_info: false diff --git a/table_marker_app/table_mark_app.py b/table_marker_app/table_mark_app.py new file mode 100644 index 0000000..4749dc3 --- /dev/null +++ b/table_marker_app/table_mark_app.py @@ -0,0 +1,419 @@ +import streamlit as st +import pandas as pd +import numpy as np +from datasets import load_from_disk +import os +from io import StringIO + +# Минималистичная конфигурация страницы +st.set_page_config( + page_title="Разметка таблиц", + page_icon="📊", + layout="wide", + initial_sidebar_state="collapsed" +) + +# Константы для разметки +COLUMN_NAMES_MAPPING = {"Да": 1, "Нет": 0, "Схематичные": 2} +DESCRIPTION_MAPPING = {"Объемное": 2, "Нет": 0, "Скудное": 1} + +def load_dataset(path="dataset"): + """Минимальная загрузка датасета""" + if not os.path.exists(path): + return None + return load_from_disk(path) + +def load_or_create_results(path="results.csv"): + """Загрузка или создание результатов""" + if os.path.exists(path): + df = pd.read_csv(path) + if 'table_id' not in df.columns: + df['table_id'] = '' + if 'mark_columns' not in df.columns: + df['mark_columns'] = np.nan + if 'mark_description' not in df.columns: + df['mark_description'] = np.nan + return df + return pd.DataFrame(columns=['table_id', 'mark_columns', 'mark_description']) + +def save_results(df, path="results.csv"): + """Сохранение результатов""" + df.to_csv(path, index=False) + return True + +def parse_table(text): + """Парсинг таблицы с разделителем #""" + try: + return pd.read_csv(StringIO(text), sep='#', dtype=str, engine='python') + except: + # Альтернативный способ + lines = text.strip().split('\n') + if lines: + return pd.DataFrame([line.split('#') for line in lines]) + return pd.DataFrame() + +def save_current_annotation(results_df, table_id, col_value, desc_value, results_path): + """Сохраняет текущую аннотацию в DataFrame и файл""" + if 'table_id' not in results_df.columns: + results_df['table_id'] = '' + results_df['mark_columns'] = np.nan + results_df['mark_description'] = np.nan + + mask = results_df['table_id'] == table_id + if mask.any(): + idx = results_df.index[mask].tolist()[0] + if col_value is not None: + results_df.at[idx, 'mark_columns'] = col_value + if desc_value is not None: + results_df.at[idx, 'mark_description'] = desc_value + else: + results_df = pd.concat([results_df, pd.DataFrame([{ + 'table_id': table_id, + 'mark_columns': col_value, + 'mark_description': desc_value + }])], ignore_index=True) + + save_results(results_df, results_path) + return results_df + +def main(): + # Минимальный заголовок + st.title("📊 Разметка таблиц") + + # Настройки в компактном виде + with st.expander("Настройки", expanded=False): + col1, col2 = st.columns(2) + with col1: + dataset_path = st.text_input("Путь к датасету", "dataset") + with col2: + results_path = st.text_input("Файл результатов", "results.csv") + + if st.button("Загрузить", type="primary"): + st.rerun() + + # Загрузка данных + dataset = load_dataset(dataset_path) + if dataset is None: + st.error(f"Датасет не найден: {dataset_path}") + st.info("Создайте папку 'dataset' или укажите путь в настройках") + return + + results_df = load_or_create_results(results_path) + + # Инициализация состояния + if 'current_index' not in st.session_state: + st.session_state.current_index = 0 + if 'total_tables' not in st.session_state: + st.session_state.total_tables = len(dataset) + + # Функции навигации с сохранением + def go_prev(): + """Переход к предыдущей таблице с сохранением""" + current_idx = st.session_state.current_index + record = dataset[current_idx] + table_id = f"{current_idx}_{record['table']}" + + # Сохраняем текущие значения если они есть + current_cols = st.session_state.get(f"current_cols_{current_idx}") + current_desc = st.session_state.get(f"current_desc_{current_idx}") + + if current_cols is not None or current_desc is not None: + results_df = load_or_create_results(results_path) + save_current_annotation(results_df, table_id, current_cols, current_desc, results_path) + + # Переходим к предыдущей + st.session_state.current_index = max(0, current_idx - 1) + st.rerun() + + def go_next(): + """Переход к следующей таблице с сохранением""" + current_idx = st.session_state.current_index + record = dataset[current_idx] + table_id = f"{current_idx}_{record['table']}" + + # Сохраняем текущие значения если они есть + current_cols = st.session_state.get(f"current_cols_{current_idx}") + current_desc = st.session_state.get(f"current_desc_{current_idx}") + + if current_cols is not None or current_desc is not None: + results_df = load_or_create_results(results_path) + save_current_annotation(results_df, table_id, current_cols, current_desc, results_path) + + # Переходим к следующей + st.session_state.current_index = min(st.session_state.total_tables - 1, current_idx + 1) + st.rerun() + + def go_to_table(target_idx_input): + """Переход к указанной таблице с сохранением""" + current_idx = st.session_state.current_index + target_idx = target_idx_input - 1 # Пользователь вводит начиная с 1 + + if target_idx != current_idx and 0 <= target_idx < st.session_state.total_tables: + # Сохраняем текущие значения + record = dataset[current_idx] + table_id = f"{current_idx}_{record['table']}" + + current_cols = st.session_state.get(f"current_cols_{current_idx}") + current_desc = st.session_state.get(f"current_desc_{current_idx}") + + if current_cols is not None or current_desc is not None: + results_df = load_or_create_results(results_path) + save_current_annotation(results_df, table_id, current_cols, current_desc, results_path) + + # Переходим к целевой таблице + st.session_state.current_index = target_idx + st.rerun() + + # Компактная панель навигации + col1, col2, col3, col4 = st.columns([1, 2, 1, 2]) + + with col1: + if st.button("←", use_container_width=True, key="prev_btn"): + go_prev() + + with col2: + # Создаем состояние для целевого индекса + if 'target_index_input' not in st.session_state: + st.session_state.target_index_input = st.session_state.current_index + 1 + + # Поле ввода номера таблицы + target_index = st.number_input( + "Таблица", + min_value=1, + max_value=st.session_state.total_tables, + value=st.session_state.current_index + 1, + step=1, + label_visibility="collapsed", + key="table_input" + ) + + # Проверяем, изменилось ли значение + if target_index != st.session_state.target_index_input: + st.session_state.target_index_input = target_index + go_to_table(target_index) + + with col3: + if st.button("→", use_container_width=True, key="next_btn"): + go_next() + + with col4: + # Отображаем актуальный прогресс + current_idx = st.session_state.current_index + progress_text = f"Прогресс: {current_idx + 1}/{st.session_state.total_tables}" + st.caption(progress_text) + + # Текущая запись + current_idx = st.session_state.current_index + record = dataset[current_idx] + table_id = f"{current_idx}_{record['table']}" + + # Получение текущей разметки из файла + saved_mark = {'columns': None, 'description': None} + if 'table_id' in results_df.columns and not results_df.empty: + match = results_df[results_df['table_id'] == table_id] + if not match.empty: + saved_mark['columns'] = match.iloc[0]['mark_columns'] + saved_mark['description'] = match.iloc[0]['mark_description'] + + # Инициализация текущих значений в session_state + if f"current_cols_{current_idx}" not in st.session_state: + st.session_state[f"current_cols_{current_idx}"] = saved_mark['columns'] + + if f"current_desc_{current_idx}" not in st.session_state: + st.session_state[f"current_desc_{current_idx}"] = saved_mark['description'] + + # Получаем текущие значения + current_cols = st.session_state[f"current_cols_{current_idx}"] + current_desc = st.session_state[f"current_desc_{current_idx}"] + + # Основное содержание - две колонки + col_left, col_right = st.columns([7, 3]) + + with col_left: + # Таблица и ее описание + st.subheader("Таблица") + + # Отображаем описание таблицы (если есть) прямо под заголовком + if record.get('table_descr') and str(record['table_descr']).strip(): + # Создаем контейнер для описания с темным фоном и светлым текстом + description_html = f""" +
+ 📝 Описание таблицы:
+
+ {record['table_descr']} +
+
+ """ + st.markdown(description_html, unsafe_allow_html=True) + else: + # Если описания нет, показываем серую плашку + st.markdown( + """ +
+ Описание таблицы: отсутствует +
+ """, + unsafe_allow_html=True + ) + + # Сама таблица + table_df = parse_table(record['table_text']) + if not table_df.empty: + height = min(400, 35 * len(table_df) + 50) + st.dataframe(table_df, use_container_width=True, height=height) + else: + st.warning("Таблица не распознана") + preview = record['table_text'][:500] + "..." if len(record['table_text']) > 500 else record['table_text'] + st.code(preview) + + with col_right: + # Разметка + st.subheader("Разметка") + + # Названия столбцов + st.markdown("**Названия столбцов:**") + col_btn1, col_btn2, col_btn3 = st.columns(3) + + with col_btn1: + col_0_pressed = st.button("Нет", key=f"col_0_{current_idx}", use_container_width=True, + type="primary" if current_cols == 0 else "secondary") + if col_0_pressed: + st.session_state[f"current_cols_{current_idx}"] = 0 + results_df = load_or_create_results(results_path) + save_current_annotation(results_df, table_id, 0, current_desc, results_path) + st.rerun() + + with col_btn2: + col_1_pressed = st.button("Да", key=f"col_1_{current_idx}", use_container_width=True, + type="primary" if current_cols == 1 else "secondary") + if col_1_pressed: + st.session_state[f"current_cols_{current_idx}"] = 1 + results_df = load_or_create_results(results_path) + save_current_annotation(results_df, table_id, 1, current_desc, results_path) + st.rerun() + + with col_btn3: + col_2_pressed = st.button("Схем.", key=f"col_2_{current_idx}", use_container_width=True, + type="primary" if current_cols == 2 else "secondary") + if col_2_pressed: + st.session_state[f"current_cols_{current_idx}"] = 2 + results_df = load_or_create_results(results_path) + save_current_annotation(results_df, table_id, 2, current_desc, results_path) + st.rerun() + + # Описание таблицы (для разметки) + st.markdown("**Описание таблицы:**") + desc_btn1, desc_btn2, desc_btn3 = st.columns(3) + + with desc_btn1: + desc_0_pressed = st.button("Нет", key=f"desc_0_{current_idx}", use_container_width=True, + type="primary" if current_desc == 0 else "secondary") + if desc_0_pressed: + st.session_state[f"current_desc_{current_idx}"] = 0 + results_df = load_or_create_results(results_path) + save_current_annotation(results_df, table_id, current_cols, 0, results_path) + st.rerun() + + with desc_btn2: + desc_1_pressed = st.button("Скуд.", key=f"desc_1_{current_idx}", use_container_width=True, + type="primary" if current_desc == 1 else "secondary") + if desc_1_pressed: + st.session_state[f"current_desc_{current_idx}"] = 1 + results_df = load_or_create_results(results_path) + save_current_annotation(results_df, table_id, current_cols, 1, results_path) + st.rerun() + + with desc_btn3: + desc_2_pressed = st.button("Объем.", key=f"desc_2_{current_idx}", use_container_width=True, + type="primary" if current_desc == 2 else "secondary") + if desc_2_pressed: + st.session_state[f"current_desc_{current_idx}"] = 2 + results_df = load_or_create_results(results_path) + save_current_annotation(results_df, table_id, current_cols, 2, results_path) + st.rerun() + + # Показываем текущие значения разметки + st.markdown("---") + if current_cols is not None: + status_text = {0: "Нет", 1: "Да", 2: "Схематичные"}.get(current_cols, "Не выбрано") + st.info(f"**Столбцы:** {status_text}") + else: + st.warning("**Столбцы:** не размечены") + + if current_desc is not None: + status_text = {0: "Нет", 1: "Скудное", 2: "Объемное"}.get(current_desc, "Не выбрано") + st.info(f"**Описание:** {status_text}") + else: + st.warning("**Описание:** не размечено") + + # Статистика + st.markdown("---") + marked_count = results_df['mark_columns'].notna().sum() + st.caption(f"Всего размечено: {marked_count}/{st.session_state.total_tables}") + + # Кнопка сохранения (для перестраховки) + if st.button("💾 Сохранить", use_container_width=True, type="primary", key="save_btn"): + results_df = load_or_create_results(results_path) + save_current_annotation(results_df, table_id, current_cols, current_desc, results_path) + st.success("✓ Сохранено!") + st.rerun() + + # Скачивание результатов + if not results_df.empty: + csv = results_df.to_csv(index=False).encode('utf-8') + st.download_button( + label="📥 Скачать CSV", + data=csv, + file_name="results.csv", + mime="text/csv", + use_container_width=True, + key="download_btn" + ) + + # Горячие клавиши + js = """ + + """ + st.components.v1.html(js, height=0) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/ablation_experiments.py b/tests/ablation_experiments.py index b723c7c..42f97a5 100644 --- a/tests/ablation_experiments.py +++ b/tests/ablation_experiments.py @@ -43,7 +43,7 @@ ''' -def send_message(message,max_tokens=500,top_p=0.9,temperature=0.5,server_url="http://127.0.0.1:8800/v1",api_key="dummy", +def send_message(message,max_tokens=500,top_p=0.9,temperature=0.5,server_url="http://127.0.0.1:9092/v1",api_key="dummy", model_name='deepseek-ai/deepseek-coder-7b-instruct-v1.5',system_prompt='', stop = ["Observation:","\n\n\n\n","\n \n \n"]): client = OpenAI(base_url=server_url, api_key=api_key) model_input = [ @@ -117,7 +117,7 @@ def parse_panda_code(input_string): def correct_code(df, input_data, code_str, error_str, iter_id=0, system_correcting_prompt='', stop=["Observation:", "\n\n\n\n", "\n \n \n"], max_tokens=500, top_p=0.9, temperature=0.5, - server_url="http://127.0.0.1:8800/v1", api_key="dummy", + server_url="http://127.0.0.1:9092/v1", api_key="dummy", model_name='deepseek-ai/deepseek-coder-7b-instruct-v1.5', max_iter=5,add_df_info=False): """ Рекурсивно исправляет код с использованием LLM @@ -253,7 +253,7 @@ def main(): #if inputdata == outputdata: # shutil.rmtree(inputdata) dataset2.save_to_disk(outputdata) - + dataset = dataset2 if __name__ == "__main__": #python abation_experiments.py --inputdata tab_fact_test_semtab__html_ablation --outputdata tab_fact_test_semtab_html_ablation_correcring_first --conf-file semtab_html_config_answer.yaml --num_proc 16 > tab_fact_test_html_ablation_log2.txt diff --git a/tests/ablation_experiments_local_model.py b/tests/ablation_experiments_local_model.py new file mode 100644 index 0000000..334b6b4 --- /dev/null +++ b/tests/ablation_experiments_local_model.py @@ -0,0 +1,310 @@ + +# Добавляем корневую директорию проекта в sys.path +import argparse +from functools import partial +from datasets import load_from_disk +from openai import OpenAI +import sys +import os +import json +import pandas as pd +from io import StringIO +from tqdm import tqdm +import re +import time +import traceback +import shutil +import torch +from transformers import AutoModelForCausalLM, AutoTokenizer +from peft import PeftModel +# Добавляем корневую директорию проекта в sys.path +sys.path.append(os.path.dirname(os.path.abspath('/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/tests'))) + +from utils.utils import load_config + + +system_prompt = ''' +### Instruction: +You are a Python expert specializing in pandas. Your task is to translate the +given natural language query into a single-line pandas expression. This +expression must be valid and executable to verify the truth of the statement +using the provided table. Consider the following: +1. The table schema is represented in XML format. +2. The table is represented as a pandas DataFrame named df. +3. Do not include explanations, comments, or multiline outputs. +4. Ensure the output is concise, correct, and when run outputs either True or +False, and strictly in the following Json Format with a single key "PANDA": +"PANDA": "" + +### Table schema +{table} +### Query +{query} +### Response:\n +''' + +system_correcting_prompt = ''' +You are a Python expert specializing in pandas. Your task is to correct a pandas code that translates a given natural language query into a pandas expression. The input table schema,query, code, along with the specific error it contains, is provided. +Your corrected pandas_code must be valid and executable by running the code +snippet str(bool(eval(pandas_code))) ensuring it accurately evaluates the truth +of the statement using the provided table with no errors. +Make sure the pandas_code is of type boolean. Consider the following: +1. The table schema is represented in XML format. +2. The table is represented as a pandas DataFrame named df. +3. Do not include explanations, comments, or multiline outputs. +4. Ensure the output is concise, correct, and when run outputs either True or +False, and strictly in the following Json Format with a single key "CORRECT PANDA": +"CORRECT PANDA": "" + +### Table schema +{table} +### Query +{query} +### CODE +{code_str} +### ERROR +{error_str} +### Response:\n +''' + + +def send_message(message,max_tokens=500,top_p=0.9,temperature=0.5,server_url="http://127.0.0.1:9092/v1",api_key="dummy", + model_name='deepseek-ai/deepseek-coder-7b-instruct-v1.5', stop = ["Observation:","\n\n\n\n","\n \n \n"]): + client = OpenAI(base_url=server_url, api_key=api_key) + model_input = [ + #{ 'role': 'system', 'content': system_prompt}, + { 'role': 'user', 'content': message} + ] + try: + print(f"Generating content with model: {model_name}",) + + response = client.chat.completions.create( + model=model_name, + messages=model_input, + temperature=temperature, + max_tokens=max_tokens, + top_p=top_p, + stop = stop + ) + + return True, response.choices[0].message.content + + except Exception as e: + print("Failed to call LLM: " + str(e)) + print(message) + time.sleep(6) + if hasattr(e, 'response'): + error_info = e.response.json() + code_value = error_info['error']['code'] + else: + code_value = "context_length_exceeded" + print("Retrying ...") + return False, None + +def parse_panda_code(input_string): + """ + Парсит строку и извлекает код, который находится внутри конструкции "PANDA": <код> + Поддерживает различные форматы: JSON, простой текст, Markdown + + Args: + input_string (str): Входная строка для парсинга + + Returns: + str: Извлеченный код или пустая строка, если код не найден + """ + # Сначала попробуем найти JSON объект с PANDA + json_pattern = r'\{[^{}]*(?:CORRECT PANDA|PANDA)":\s*(.+?)(?:\n|$)?\}' + json_match = re.search(json_pattern, input_string, re.DOTALL) + code = None + pattern = r'"(?:CORRECT PANDA|PANDA)":\s*(.+?)(?:\n|$)' + if json_match: + code = json_match.group(1).strip() + else: + match = re.search(pattern, input_string, re.DOTALL) + if match: + # Извлекаем код и убираем лишние пробелы по краям + code = match.group(1).strip() + # Заменяем одинарные кавычки внутри строки для корректного парсинга JSON + + # Если JSON не найден или не распарсился, используем старый метод + # Паттерн для поиска кода после "PANDA": + # Ищет "PANDA": за которым следует пробел, затем код до конца строки или до следующего символа + if code != None: + # Убираем возможные кавычки вокруг кода + if code.startswith('"') and code.endswith('"'): + code = code[1:-1] + elif code.startswith("'") and code.endswith("'"): + code = code[1:-1] + + return code + + return "" + +def correct_code(df, table,query, code_str, error_str, iter_id=0, system_correcting_prompt='', + stop=["Observation:", "\n\n\n\n", "\n \n \n"], + max_tokens=500, top_p=0.9, temperature=0.5, + server_url="http://127.0.0.1:9092/v1", api_key="dummy", + model_name='deepseek-ai/deepseek-coder-7b-instruct-v1.5', max_iter=5,add_df_info=False): + """ + Рекурсивно исправляет код с использованием LLM + """ + if iter_id < max_iter: + if add_df_info : + df_info = df.dtypes.to_string() + df_info = f'DATAFRAME TABLE TYPES: {df_info}\n' + else: + df_info = '' + # Формируем запрос на исправление + prompt = system_correcting_prompt.format(table=table, query=query,code_str=code_str,error_str=error_str).lstrip() + success, response = send_message( + prompt, + stop=stop, + max_tokens=max_tokens, + top_p=top_p, + temperature=temperature, + server_url=server_url, + api_key=api_key, + model_name=model_name) + + if success: + code = parse_panda_code(response) + if not code: # Если не удалось извлечь код + print(f"Iteration {iter_id}: Failed to parse code from response",f"text: {response}") + return correct_code(df, table,query, code_str, error_str, iter_id=iter_id+1, + max_tokens=max_tokens, top_p=top_p, temperature=temperature, + server_url=server_url, api_key=api_key, model_name=model_name, + system_correcting_prompt=system_correcting_prompt, max_iter=max_iter,add_df_info=add_df_info) + + try: + # Пробуем выполнить исправленный код + pandas_eval = str(bool(eval(code))) + print(f"Iteration {iter_id}: Code corrected successfully") + return True, code, response,None + except Exception as e: + print(f"Iteration {iter_id}: Code execution failed with error: {e}") + # Рекурсивно пытаемся исправить новый код + return correct_code(df, table,query, code, f'{type(e).__name__}: {e}', iter_id=iter_id+1, + max_tokens=max_tokens, top_p=top_p, temperature=temperature, + server_url=server_url, api_key=api_key, model_name=model_name, + system_correcting_prompt=system_correcting_prompt, max_iter=max_iter,add_df_info=add_df_info) + else: + print(f'Iteration {iter_id}: LLM call failed') + # Если не удалось вызвать LLM, пробуем снова с теми же данными + return correct_code(df, table,query, code_str, error_str, iter_id=iter_id+1, + max_tokens=max_tokens, top_p=top_p, temperature=temperature, + server_url=server_url, api_key=api_key, model_name=model_name, + system_correcting_prompt=system_correcting_prompt, max_iter=max_iter,add_df_info=add_df_info) + else: + print(f'Max iterations ({max_iter}) reached without successful correction') + return False, code_str, None,error_str + + +def dataset_processing(entry,serialized_table_field=None,system_correcting_prompt='',system_prompt='',add_df_info=False,**kwargs): + df = pd.read_csv(StringIO(entry['table_text']), delimiter='#') + for col in df.columns: + try: + df[col] = pd.to_numeric(df[col]) + except ValueError: + # Если возникает ошибка, оставляем столбец как есть + continue + #query = entry[f"{query_field}_query"] + #query = entry['statement']+ ' ' + serialize_table(df,serialization_type='space') + query = system_prompt.format(table=entry[serialized_table_field], query=entry['statement']).lstrip() + success,response = send_message(query,model_name=kwargs.get('model_name','deepseek-ai/deepseek-coder-7b-instruct-v1.5'), + server_url=kwargs.get('server_url',"http://127.0.0.1:9092/v1"),max_tokens = None) + + + entry[f'{serialized_table_field}_answ'] = 'None' + entry[f'{serialized_table_field}_label'] = 'None' + entry[f'{serialized_table_field}_answ_correct'] = 'None' + entry[f'{serialized_table_field}_last_err'] = 'None' + + + if success: + entry[f'{serialized_table_field}_answ'] = response + try: + code = parse_panda_code(response) + try: + + pandas_eval = str(bool(eval(code))) + entry[f'{serialized_table_field}_label'] = str(pandas_eval) + except Exception as e: + print('EEEERRRRRRR', entry['id']) + print(e) + success_correcting, new_code, correcting_response,last_err = correct_code(df,entry[serialized_table_field], + entry['statement'], + code,f'{type(e).__name__}: {e}', + system_correcting_prompt=system_correcting_prompt,add_df_info=add_df_info, + model_name=kwargs.get('model_name','deepseek-ai/deepseek-coder-7b-instruct-v1.5'), + server_url=kwargs.get('server_url',"http://127.0.0.1:9092/v1")) + if success_correcting: + pandas_eval = str(bool(eval(new_code))) + entry[f'{serialized_table_field}_label'] = str(pandas_eval) + entry[f'{serialized_table_field}_answ_correct'] = correcting_response + else: + entry[f'{serialized_table_field}_last_err'] = str(last_err) + + + except Exception as e: + print (e) + + return entry + + + + +def main(): + parser = argparse.ArgumentParser(description='Скрипт с настраиваемыми параметрами') + parser.add_argument('--inputdata', type=str, default='./answer_gen_nlsep_none_filtered_new_dataset') + parser.add_argument('--outputdata', type=str, default='./answer_gen_nlsep_none_filtered_new_dataset_failran_clear') + parser.add_argument('--num_proc', type=int, default=16, + help='Количество процессов') + parser.add_argument('--conf-file', type=str, default='./convert_conf.yaml') + #parser.add_argument('--add-df-info', type=int, default=0, help='Добавлять ли доп инфо о типах и столбцах df') + + args = parser.parse_args() + + inputdata = args.inputdata + outputdata = args.outputdata + NUM_PROC = args.num_proc + #add_df_info = bool(args.add_df_info) + conf_file = args.conf_file + print(f"inputdata: {inputdata}") + print(f"outputdata: {outputdata}") + print(f"num-proc: {NUM_PROC}") + print(f"conf-file: {conf_file}") + + config_data = load_config(conf_file) + dataset = load_from_disk(inputdata) + previous_checkpoint_dir = None + + for config_name in config_data.keys(): + config = config_data[config_name] + print(config_name) + print(config) + dataset = dataset.map(partial(dataset_processing,serialized_table_field=config_name, + system_correcting_prompt=system_correcting_prompt, + system_prompt=system_prompt,**config),num_proc=NUM_PROC) + #if inputdata == outputdata: + # shutil.rmtree(inputdata) + current_checkpoint_dir = f"{outputdata}_temp_ckpt_{config_name}" + dataset.save_to_disk(current_checkpoint_dir) + if previous_checkpoint_dir and os.path.exists(previous_checkpoint_dir): + print(f"Removing previous checkpoint: {previous_checkpoint_dir}") + shutil.rmtree(previous_checkpoint_dir) + + # 4. Обновляем ссылку на предыдущий чекпоинт для следующей итерации + previous_checkpoint_dir = current_checkpoint_dir + if previous_checkpoint_dir and os.path.exists(previous_checkpoint_dir): + # Если целевая папка уже существует, удаляем ее во избежание конфликта + if os.path.exists(outputdata): + shutil.rmtree(outputdata) + + os.rename(previous_checkpoint_dir, outputdata) + print(f"\nSuccess! Final dataset saved to: {outputdata}") + +if __name__ == "__main__": + #python ablation_experiments_local_model.py --inputdata tab_fact_test_semtab_xml_ablation --outputdata tab_fact_test_semtab_xml_ablation_lora --conf-file semtab_xml_config_answer_lora.yaml --num_proc 16 &> tab_fact_test_xml_ablation_lora_log.txt + main() + +# features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_exampples_description_top1_tresh50', 'semtab_xml_attributes_description_top1_tresh50', 'semtab_xml_attributes_top1_tresh50', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_exampples_description_top1_tresh50', 'semtab_xml_elements_description_top1_tresh50', 'semtab_xml_elements_top1_tresh50'], \ No newline at end of file diff --git a/tests/ablation_experiments_local_model_wtq.py b/tests/ablation_experiments_local_model_wtq.py new file mode 100644 index 0000000..4bb2115 --- /dev/null +++ b/tests/ablation_experiments_local_model_wtq.py @@ -0,0 +1,325 @@ + +# Добавляем корневую директорию проекта в sys.path +import argparse +from functools import partial +from datasets import load_from_disk +from openai import OpenAI +import sys +import os +import json +import pandas as pd +from io import StringIO +from tqdm import tqdm +import re +import time +import traceback +import shutil +import torch +from transformers import AutoModelForCausalLM, AutoTokenizer +from peft import PeftModel +import numpy as np +''' +python ablation_experiments_local_model_wtq.py --inputdata WTQ_test_xml --outputdata wtq_test_xml_baseline --conf-file semtab_xml_config_wtq_baseline.yaml --num_proc 32 &> wtq_test_xml_baseline_log.txt + +''' +# Добавляем корневую директорию проекта в sys.path +sys.path.append(os.path.dirname(os.path.abspath('/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/tests'))) + +from utils.utils import load_config + +def convert_type(x): + return x + +def find_word(x): + return x +system_prompt = ''' +### Instruction: +You are a Python expert specializing in pandas. Your task is to translate the +given natural language query into a single-line pandas expression. This +# expression must be valid and executable to get answer on the question using the provided table. Consider the following: +1. The table schema is represented in XML format. +2. The table is represented as a pandas DataFrame named df. +3. Do not include explanations, comments, or multiline outputs. +4. Ensure the output is concise, correct, and strictly in the following Json Format with a single key "PANDA": +"PANDA": "" + +### Table schema +{table} +### Query +{query} +### Response:\n +''' + +system_correcting_prompt = ''' +You are a Python expert specializing in pandas. Your task is to correct a pandas code that translates a given natural language query into a pandas expression. The input table schema,query, code, along with the specific error it contains, is provided. +Your corrected pandas_code must be valid and executable by running the code +snippet eval(pandas_code) ensuring it accurately evaluates the answer using the provided table with no errors. Consider the following: +1. The table schema is represented in XML format. +2. The table is represented as a pandas DataFrame named df. +3. Do not include explanations, comments, or multiline outputs. +4. Ensure the output is concise, correct, and strictly in the following Json Format with a single key "PANDA": +"PANDA": "" + +### Table schema +{table} +### Query +{query} +### CODE +{code_str} +### ERROR +{error_str} +### Response:\n +''' + + + +def run_code_and_get_result(code_str, df): + """Выполняет код на нормализованной таблице и возвращает (результат, ошибка)""" + result = eval(code_str, { + 'df': df, + 'pd': pd, + 'np': np, + 'convert_type': convert_type, + 'find_word': find_word + }) + return result +def send_message(message,max_tokens=500,top_p=0.9,temperature=0.5,server_url="http://127.0.0.1:9092/v1",api_key="dummy", + model_name='deepseek-ai/deepseek-coder-7b-instruct-v1.5', stop = ["Observation:","\n\n\n\n","\n \n \n"]): + client = OpenAI(base_url=server_url, api_key=api_key) + model_input = [ + #{ 'role': 'system', 'content': system_prompt}, + { 'role': 'user', 'content': message} + ] + try: + print(f"Generating content with model: {model_name}",) + + response = client.chat.completions.create( + model=model_name, + messages=model_input, + temperature=temperature, + max_tokens=max_tokens, + top_p=top_p, + stop = stop + ) + + return True, response.choices[0].message.content + + except Exception as e: + print("Failed to call LLM: " + str(e)) + print(message) + time.sleep(6) + if hasattr(e, 'response'): + error_info = e.response.json() + code_value = error_info['error']['code'] + else: + code_value = "context_length_exceeded" + print("Retrying ...") + return False, None + +def parse_panda_code(input_string): + """ + Парсит строку и извлекает код, который находится внутри конструкции "PANDA": <код> + Поддерживает различные форматы: JSON, простой текст, Markdown + + Args: + input_string (str): Входная строка для парсинга + + Returns: + str: Извлеченный код или пустая строка, если код не найден + """ + # Сначала попробуем найти JSON объект с PANDA + json_pattern = r'\{[^{}]*(?:CORRECT PANDA|PANDA)":\s*(.+?)(?:\n|$)?\}' + json_match = re.search(json_pattern, input_string, re.DOTALL) + code = None + pattern = r'"(?:CORRECT PANDA|PANDA)":\s*(.+?)(?:\n|$)' + if json_match: + code = json_match.group(1).strip() + else: + match = re.search(pattern, input_string, re.DOTALL) + if match: + # Извлекаем код и убираем лишние пробелы по краям + code = match.group(1).strip() + # Заменяем одинарные кавычки внутри строки для корректного парсинга JSON + + # Если JSON не найден или не распарсился, используем старый метод + # Паттерн для поиска кода после "PANDA": + # Ищет "PANDA": за которым следует пробел, затем код до конца строки или до следующего символа + if code != None: + # Убираем возможные кавычки вокруг кода + if code.startswith('"') and code.endswith('"'): + code = code[1:-1] + elif code.startswith("'") and code.endswith("'"): + code = code[1:-1] + + return code + + return "" + +def correct_code(df, table,query, code_str, error_str, iter_id=0, system_correcting_prompt='', + stop=["Observation:", "\n\n\n\n", "\n \n \n"], + max_tokens=500, top_p=0.9, temperature=0.5, + server_url="http://127.0.0.1:9092/v1", api_key="dummy", + model_name='deepseek-ai/deepseek-coder-7b-instruct-v1.5', max_iter=5,add_df_info=False): + """ + Рекурсивно исправляет код с использованием LLM + """ + if iter_id < max_iter: + if add_df_info : + df_info = df.dtypes.to_string() + df_info = f'DATAFRAME TABLE TYPES: {df_info}\n' + else: + df_info = '' + # Формируем запрос на исправление + prompt = system_correcting_prompt.format(table=table, query=query,code_str=code_str,error_str=error_str).lstrip() + success, response = send_message( + prompt, + stop=stop, + max_tokens=max_tokens, + top_p=top_p, + temperature=temperature, + server_url=server_url, + api_key=api_key, + model_name=model_name) + + if success: + code = parse_panda_code(response) + if not code: # Если не удалось извлечь код + print(f"Iteration {iter_id}: Failed to parse code from response",f"text: {response}") + return correct_code(df, table,query, code_str, error_str, iter_id=iter_id+1, + max_tokens=max_tokens, top_p=top_p, temperature=temperature, + server_url=server_url, api_key=api_key, model_name=model_name, + system_correcting_prompt=system_correcting_prompt, max_iter=max_iter,add_df_info=add_df_info) + + try: + # Пробуем выполнить исправленный код + pandas_eval = run_code_and_get_result(code,df) + print(f"Iteration {iter_id}: Code corrected successfully") + return True, code, response,None + except Exception as e: + print(f"Iteration {iter_id}: Code execution failed with error: {e}") + # Рекурсивно пытаемся исправить новый код + return correct_code(df, table,query, code, f'{type(e).__name__}: {e}', iter_id=iter_id+1, + max_tokens=max_tokens, top_p=top_p, temperature=temperature, + server_url=server_url, api_key=api_key, model_name=model_name, + system_correcting_prompt=system_correcting_prompt, max_iter=max_iter,add_df_info=add_df_info) + else: + print(f'Iteration {iter_id}: LLM call failed') + # Если не удалось вызвать LLM, пробуем снова с теми же данными + return correct_code(df, table,query, code_str, error_str, iter_id=iter_id+1, + max_tokens=max_tokens, top_p=top_p, temperature=temperature, + server_url=server_url, api_key=api_key, model_name=model_name, + system_correcting_prompt=system_correcting_prompt, max_iter=max_iter,add_df_info=add_df_info) + else: + print(f'Max iterations ({max_iter}) reached without successful correction') + return False, code_str, None,error_str + + +def dataset_processing(entry,serialized_table_field=None,system_correcting_prompt='',system_prompt='',add_df_info=False,**kwargs): + df = pd.read_csv(StringIO(entry['table_text']), delimiter='#') + for col in df.columns: + try: + df[col] = pd.to_numeric(df[col]) + except ValueError: + # Если возникает ошибка, оставляем столбец как есть + continue + #query = entry[f"{query_field}_query"] + #query = entry['statement']+ ' ' + serialize_table(df,serialization_type='space') + query = system_prompt.format(table=entry[serialized_table_field], query=entry['statement']).lstrip() + success,response = send_message(query,model_name=kwargs.get('model_name','deepseek-ai/deepseek-coder-7b-instruct-v1.5'), + server_url=kwargs.get('server_url',"http://127.0.0.1:9092/v1"),max_tokens = None) + + + entry[f'{serialized_table_field}_answ'] = 'None' + entry[f'{serialized_table_field}_label'] = 'None' + entry[f'{serialized_table_field}_answ_correct'] = 'None' + entry[f'{serialized_table_field}_last_err'] = 'None' + + + if success: + entry[f'{serialized_table_field}_answ'] = response + try: + code = parse_panda_code(response) + try: + + pandas_eval = run_code_and_get_result(code,df) + entry[f'{serialized_table_field}_label'] = str(pandas_eval) + except Exception as e: + print('EEEERRRRRRR', entry['id']) + print(e) + success_correcting, new_code, correcting_response,last_err = correct_code(df,entry[serialized_table_field], + entry['statement'], + code,f'{type(e).__name__}: {e}', + system_correcting_prompt=system_correcting_prompt,add_df_info=add_df_info, + model_name=kwargs.get('model_name','deepseek-ai/deepseek-coder-7b-instruct-v1.5'), + server_url=kwargs.get('server_url',"http://127.0.0.1:9092/v1")) + if success_correcting: + pandas_eval = run_code_and_get_result(new_code,df) + entry[f'{serialized_table_field}_label'] = str(pandas_eval) + entry[f'{serialized_table_field}_answ_correct'] = correcting_response + else: + entry[f'{serialized_table_field}_last_err'] = str(last_err) + + + except Exception as e: + print (e) + + return entry + + + + +def main(): + parser = argparse.ArgumentParser(description='Скрипт с настраиваемыми параметрами') + parser.add_argument('--inputdata', type=str, default='./answer_gen_nlsep_none_filtered_new_dataset') + parser.add_argument('--outputdata', type=str, default='./answer_gen_nlsep_none_filtered_new_dataset_failran_clear') + parser.add_argument('--num_proc', type=int, default=16, + help='Количество процессов') + parser.add_argument('--conf-file', type=str, default='./convert_conf.yaml') + #parser.add_argument('--add-df-info', type=int, default=0, help='Добавлять ли доп инфо о типах и столбцах df') + + args = parser.parse_args() + + inputdata = args.inputdata + outputdata = args.outputdata + NUM_PROC = args.num_proc + #add_df_info = bool(args.add_df_info) + conf_file = args.conf_file + print(f"inputdata: {inputdata}") + print(f"outputdata: {outputdata}") + print(f"num-proc: {NUM_PROC}") + print(f"conf-file: {conf_file}") + + config_data = load_config(conf_file) + dataset = load_from_disk(inputdata) + previous_checkpoint_dir = None + + for config_name in config_data.keys(): + config = config_data[config_name] + print(config_name) + print(config) + dataset = dataset.map(partial(dataset_processing,serialized_table_field=config_name, + system_correcting_prompt=system_correcting_prompt, + system_prompt=system_prompt,**config),num_proc=NUM_PROC) + #if inputdata == outputdata: + # shutil.rmtree(inputdata) + current_checkpoint_dir = f"{outputdata}_temp_ckpt_{config_name}" + dataset.save_to_disk(current_checkpoint_dir) + if previous_checkpoint_dir and os.path.exists(previous_checkpoint_dir): + print(f"Removing previous checkpoint: {previous_checkpoint_dir}") + shutil.rmtree(previous_checkpoint_dir) + + # 4. Обновляем ссылку на предыдущий чекпоинт для следующей итерации + previous_checkpoint_dir = current_checkpoint_dir + if previous_checkpoint_dir and os.path.exists(previous_checkpoint_dir): + # Если целевая папка уже существует, удаляем ее во избежание конфликта + if os.path.exists(outputdata): + shutil.rmtree(outputdata) + + os.rename(previous_checkpoint_dir, outputdata) + print(f"\nSuccess! Final dataset saved to: {outputdata}") + +if __name__ == "__main__": + #python ablation_experiments_local_model.py --inputdata tab_fact_test_semtab_xml_ablation --outputdata tab_fact_test_semtab_xml_ablation_lora --conf-file semtab_xml_config_answer_lora.yaml --num_proc 16 &> tab_fact_test_xml_ablation_lora_log.txt + main() + +# features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_exampples_description_top1_tresh50', 'semtab_xml_attributes_description_top1_tresh50', 'semtab_xml_attributes_top1_tresh50', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_exampples_description_top1_tresh50', 'semtab_xml_elements_description_top1_tresh50', 'semtab_xml_elements_top1_tresh50'], \ No newline at end of file diff --git a/tests/add_column_defenition.py b/tests/add_column_defenition.py new file mode 100644 index 0000000..7173cb1 --- /dev/null +++ b/tests/add_column_defenition.py @@ -0,0 +1,230 @@ +import sys +import os +from datasets import load_from_disk + +# Добавляем корневую директорию проекта в sys.path +sys.path.append(os.path.dirname(os.path.abspath('/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/tests'))) +from datasets import Dataset +import json +import pandas as pd +from io import StringIO +from tqdm import tqdm +from utils.utils import serialize_table, load_config +from utils.doduo.doduo import Doduo +from utils.cossim.cossim import Qwen3EmbeddingMatcher +import argparse +from functools import partial +import torch +system_prompt = '''You're an expert linguist. You are provided with a table schema with a description in XML format. +Your task is to analyze the tabular context and, based on the information received, give a brief but semantically succinct definition for each HEADER, +its format features (how to interpret signs, abbreviations, or complex strings, such as "A - B"). +If there are units of measurement in the EXAMPLES, then include them in the answer. + +The output must be in json in the dictionary format {
:
}. + +###################### +-Examples- +###################### +Example 1: + +
+
+
+
+
+
+###################### +Output: +{ +"planet": "The proper name of a celestial body in the Solar system, presented in text format.", +"type": "Classification of a planet by its physical and chemical composition (for example, 'terrestrial' — rocky or 'gas giant' — gas giant).", +"moons": "Quantitative indicator indicating the total number of confirmed natural satellites of the planet (integer).", +"diameter_km""The equatorial diameter of a celestial body, expressed in numerical terms. Unit of measurement: kilometers (km).", +"gravity_ms2": "Acceleration of gravity on the surface of the planet. Unit of measurement: meters per second squared ($$m/s^2$$)." +} +###################### +Example 2: + +
+
+
+###################### +Output: +{ + "title": "The official name of a literary work, written in text form.", + "author": "The first and last name of the author (creator) of the work, presented as a string." +} +###################### +Example 3: + +
+
+
+
+
+
+###################### +Output: +{ + "model": "The commercial name of a specific device, including the series name and serial number.", +"brand": "The name of the manufacturing company (brand) responsible for the release of the device.", +"screen_size": "The diagonal size of the device's display, represented as a decimal. Unit of measurement: inches.", +"ram_gb": "The amount of RAM available for the system and applications. Unit of measurement: gigabytes (GB).", +"battery_mah": "The electrical capacity of the device's battery, which determines the battery life. Unit of measurement: milliampere-hours (mAh)." +} + +''' +prompt = ''' +###################### +-Real Data- +###################### +{input_text} +###################### +Output: +''' +from openai import OpenAI +import base64 +from typing import List,Dict,Any,Callable +import inspect +import re +def remove_think_tags(text: str) -> str: + """Удаляет тег ... из ответов моделей reasoning.""" + try: + match = re.search(r"<\/think>", text) + if match: + return text[match.end():].strip() + except Exception as e: + print(f"Error removing tags: {e}") + return text.strip() + +def get_kwargs(kwargs: Dict[str,Any],func: Callable) -> Dict[str,Any]: + ''' + Вытаскивает аргументы из kwargs по сигнатуре функции func. + ''' + sig = inspect.signature(func) + return {key:value for key,value in kwargs.items() if key in sig.parameters} + + +class ModelMessageDict(dict): + ''' + Класс - словарь для удобого форматирования запроса к модели. + Формирует словарь для передачи в клиента openia и в модель + ''' + def __init__(self,role:str='user'): + super().__init__() + self['role'] = role + self['content'] =[] + def add_text_content(self,content:str): + self['content'].append({'type':'text', + 'text':content}) + + def add_img_content(self, source:str = 'image_url',path_to_img : str = None, url: str = None): + match source: + case 'image_url': + if path_to_img != None: + with open(path_to_img, "rb") as f: + base64_image = base64.b64encode(f.read()).decode() + self['content'].append({'type':'image_url', + 'image_url':{'url':f"data:image/jpeg;base64,{base64_image}"}}) + elif url != None: + self['content'].append({'type':'image_url', + 'image_url':{'url':url}}) + +def send_messasge(messages:List[ModelMessageDict],base_url:str = "http://127.0.0.1:8880/v1", api_key:str = 'EMPTY', + model_name:str = 'Qwen/Qwen3-VL-30B-A3B-Thinking',**kwargs) -> List[str]: + ''' + Функция для отправки сообщениий в удаленную модель + ''' + client = OpenAI( api_key=api_key,base_url=base_url,**get_kwargs(kwargs,OpenAI)) + + try: + print(f"Generating content with model: {model_name}",) + + response = client.chat.completions.create( + messages=messages, + model=model_name, + **get_kwargs(kwargs,client.chat.completions.create) + ) + + cleaned_responses = [] + for answ in response.choices: + text = answ.message.content + if text: + # Вырезаем блок ... вместе с содержимым и переносами строк + # Флаг re.DOTALL нужен, чтобы точка (.) захватывала символы новой строки (\n) + text = remove_think_tags(text) + cleaned_responses.append(text.strip()) + else: + cleaned_responses.append("") + + return True, cleaned_responses + + except Exception as e: + print("Failed to call LLM: " + str(e)) + if hasattr(e, 'response'): + error_info = e.response.json() + code_value = error_info['error']['code'] + print(code_value) + else: + code_value = "context_length_exceeded" + print(code_value) + return False, None + +def extract_json_from_text(text): + # Ищем первую открывающую фигурную (объект) или квадратную (массив) скобку + match = re.search(r'\{|$$', text) + if not match: + return None + + # Отрезаем весь текст до начала JSON + json_start = match.start() + potential_json = text[json_start:] + + decoder = json.JSONDecoder() + try: + # raw_decode читает JSON и возвращает сам объект и индекс, где он закончился + obj, index = decoder.raw_decode(potential_json) + return obj + except json.JSONDecodeError as e: + print(f"Ошибка парсинга JSON: {e}") + return None + + +def add_to_dataset_column_def(data): + + user = ModelMessageDict(role='user') + user.add_text_content(system_prompt+prompt.format(input_text=data['semtab_xml_attributes_exampples_top1_tresh50'])) + + try: + sucs,res = send_messasge([user],model_name='Qwen/Qwen3-30B-A3B-Thinking-2507',base_url = "http://127.0.0.1:9124/v1") + + data['column_defenition'] = res[0] if sucs else 'None' + #try: + # data['semtab_query'] = data['statement'] + ' ' + serialize_table(df,model=model, description=data['table_caption'],basedir='../utils/doduo/') + except Exception as e: + print ('ERRORRRRRRRRRRRRRRRRRRRRRRRRR', e) + data['column_defenition'] = 'None' + return data + + + +def main(): + parser = argparse.ArgumentParser(description='Скрипт с настраиваемыми параметрами') + parser.add_argument('--inputdata', type=str, default='./tab_fact_test_unique_tables') + parser.add_argument('--outputdata', type=str, default='./tab_fact_test_unique_tables_def') + parser.add_argument('--num_proc', type=int, default=1, + help='Количество процессов') + + args = parser.parse_args() + + inputdata = args.inputdata + outputdata = args.outputdata + num_proc = args.num_proc + dataset = load_from_disk(inputdata) + dataset2 = dataset.map(add_to_dataset_column_def,num_proc=num_proc) + dataset2.save_to_disk(outputdata) + + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/add_to_tabfact_serialize_table.py b/tests/add_to_tabfact_serialize_table.py index 7e66c41..50e963b 100644 --- a/tests/add_to_tabfact_serialize_table.py +++ b/tests/add_to_tabfact_serialize_table.py @@ -11,9 +11,11 @@ from tqdm import tqdm from utils.utils import serialize_table, load_config from utils.doduo.doduo import Doduo +from utils.cossim.cossim import Qwen3EmbeddingMatcher +from utils.defgen.defgen import ColumnDefGenerator import argparse from functools import partial - +import torch def add_to_dataset_table_serialization(data,name=None,include_description=False,**kwargs): @@ -22,7 +24,9 @@ def add_to_dataset_table_serialization(data,name=None,include_description=False, df = pd.read_csv(StringIO(data['table_text']), delimiter='#') try: if include_description: - kwargs['description'] = data['table_caption'] + kwargs['description'] = data['table_caption'] + #print(type(data)) + kwargs['add_data'] = data data[name] = serialize_table(df,**kwargs) #try: # data['semtab_query'] = data['statement'] + ' ' + serialize_table(df,model=model, description=data['table_caption'],basedir='../utils/doduo/') @@ -55,12 +59,21 @@ def main(): print(config_name) print(f"num-proc: {num_proc}") print(config_data) + model = None num_proc = config.get('num_proc',None) if config['serialization_type']=='semtab': if config['include_semantic_types']: - model = Doduo(argparse.Namespace(**{'model': config['model_type'], 'device': config['device']}),basedir=config['model_base_dir'])#'../utils/doduo/') + if config['semantic_method'] == 'Doduo': + model = Doduo(argparse.Namespace(**{'model': config['model_type'], 'device': config['device']}),basedir=config['model_base_dir'])#'../utils/doduo/') + # Ваш основной код здесь - config['model'] = model + config['model'] = model + elif config['semantic_method'] == 'CosSim': + model = Qwen3EmbeddingMatcher(**config) + config['model'] = model + elif config['semantic_method'] == 'DefGen': + model = ColumnDefGenerator() + config['model'] = model num_proc = None add_to_dataset_table_serialization_partial = partial(add_to_dataset_table_serialization,name=config_name,**config) @@ -69,6 +82,11 @@ def main(): dataset2 = dataset.map(add_to_dataset_table_serialization_partial,num_proc=num_proc) dataset2.save_to_disk(outputdata) dataset = dataset2 + del model + del config + with torch.no_grad(): + torch.cuda.empty_cache() + if __name__ == "__main__": main() \ No newline at end of file diff --git a/tests/convert_config.yaml b/tests/convert_config.yaml index 973a052..081395a 100644 --- a/tests/convert_config.yaml +++ b/tests/convert_config.yaml @@ -1,6 +1,6 @@ semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50: model_type: viznet - device: cuda + device: 'cuda:1' serialization_type: semtab notation: html model_base_dir: ../utils/doduo/ @@ -14,7 +14,7 @@ semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50: semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50: model_type: viznet - device: cuda + device: 'cuda:1' serialization_type: semtab notation: xml param_position: attributes @@ -29,7 +29,7 @@ semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50: semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50: model_type: viznet - device: cuda + device: 'cuda:1' serialization_type: semtab notation: xml param_position: elements @@ -44,7 +44,7 @@ semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50: semtab_xml_elements_datatype_exampples_description_top1_tresh50: model_type: viznet - device: cuda + device: 'cuda:1' serialization_type: semtab notation: xml param_position: elements @@ -59,7 +59,7 @@ semtab_xml_elements_datatype_exampples_description_top1_tresh50: semtab_xml_elements_exampples_description_top1_tresh50: model_type: viznet - device: cuda + device: 'cuda:1' serialization_type: semtab notation: xml param_position: elements @@ -74,7 +74,7 @@ semtab_xml_elements_exampples_description_top1_tresh50: semtab_xml_elements_description_top1_tresh50: model_type: viznet - device: cuda + device: 'cuda:1' serialization_type: semtab notation: xml param_position: elements diff --git a/tests/convert_tabfact_to_xml_format.py b/tests/convert_tabfact_to_xml_format.py new file mode 100644 index 0000000..6aa043e --- /dev/null +++ b/tests/convert_tabfact_to_xml_format.py @@ -0,0 +1,66 @@ +import sys +import os +from datasets import load_from_disk + +# Добавляем корневую директорию проекта в sys.path +sys.path.append(os.path.dirname(os.path.abspath('/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/tests'))) +from datasets import Dataset +import json +import pandas as pd +from io import StringIO +from tqdm import tqdm +from utils.utils import serialize_table +from utils.doduo.doduo import Doduo +import argparse +from functools import partial + +def convert_dataset_to_nlsep_format(model,data): + df = pd.read_csv(StringIO(data['table_text']), delimiter='#') + data['nlsep_query'] = data['statement'] + ' ' + serialize_table_to_tapex_format(df) + try: + data['semtab_query'] = data['statement'] + ' ' + serialize_table(df,model=model, description=data['table_caption'],basedir='../utils/doduo/') + except Exception as e: + print ('ERRORRRRRRRRRRRRRRRRRRRRRRRRR', e) + data['semtab_query'] = 'None' + return data + +def serialize_table_to_tapex_format(df): + head_pattern = " col : " + row_pattern = " row {num} : " + coll_delimetr = " | " + + lin_table = head_pattern+coll_delimetr.join(df.columns) + for i,row in df.iterrows(): + #print(row_pattern.format(num=i+1)) + lin_table+=row_pattern.format(num=i+1)+coll_delimetr.join(str(r) for r in row.values) + + return lin_table + +def main(): + parser = argparse.ArgumentParser(description='Скрипт с настраиваемыми параметрами') + parser.add_argument('--inputdata', type=str, default='./tab_fact_test') + parser.add_argument('--outputdata', type=str, default='./tab_fact_test_xml') + #parser.add_argument('--num_proc', type=int, default=2, + # help='Количество процессов') + + args = parser.parse_args() + + inputdata = args.inputdata + outputdata = args.outputdata + #NUM_PROC = args.num_proc + model_type = "viznet" + device = 'cuda' + print(f"inputdata: {inputdata}") + print(f"outputdata: {outputdata}") + #print(f"num-proc: {NUM_PROC}") + model = Doduo(argparse.Namespace(**{'model': model_type, 'device': device}),basedir='../utils/doduo/') + # Ваш основной код здесь + doduo_convert_dataset_to_nlsep_format = partial(convert_dataset_to_nlsep_format,model) + + dataset = load_from_disk(inputdata) + dataset2 = dataset.map(doduo_convert_dataset_to_nlsep_format) + dataset2.save_to_disk(outputdata) + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/correctin_failrun_data.py b/tests/correctin_failrun_data.py new file mode 100644 index 0000000..60b976f --- /dev/null +++ b/tests/correctin_failrun_data.py @@ -0,0 +1,242 @@ + +# Добавляем корневую директорию проекта в sys.path +import argparse +from functools import partial +from datasets import load_from_disk +from openai import OpenAI +import sys +import os +import json +import pandas as pd +from io import StringIO +from tqdm import tqdm +import re +import time +# Добавляем корневую директорию проекта в sys.path +sys.path.append(os.path.dirname(os.path.abspath('/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/tests'))) + +system_prompt = '''You are a Python expert specializing in pandas. Your task is to translate the +given natural language statement into a single-line pandas expression. This +expression must be valid and executable to verify the truth of the statement +using the provided table. Consider the following: +1. The table is represented as a pandas DataFrame named df. +2. Do not include explanations, comments, or multiline outputs. +3. Ensure the output is concise, correct, and when run outputs either True or +False, and strictly in the following Json Format with a single key "PANDA": +"PANDA": "" +''' +system_correcting_prompt = ''' +You are a Python expert specializing in pandas. Your task is to correct a pandas code that translates a given natural language statement into a pandas expression. The input data, code, along with the specific error it contains, is provided. +Your corrected pandas_code must be valid and executable by running the code +snippet str(bool(eval(pandas_code))) ensuring it accurately evaluates the truth +of the statement using the provided table with no errors. +Make sure the pandas_code is of type boolean. Consider the following: +1. The table is represented as a pandas DataFrame named df. +2. Do not include explanations, comments, or multiline outputs. +3. Ensure the output is concise, correct, and when run outputs either True or +False, and strictly in the following Json Format with a single key "CORRECT PANDA": +"CORRECT PANDA": "" +''' + + +def send_message(message,max_tokens=500,top_p=0.9,temperature=0.5,server_url="http://127.0.0.1:8800/v1",api_key="dummy", + model_name='deepseek-ai/deepseek-coder-7b-instruct-v1.5',system_prompt='', stop = ["Observation:","\n\n\n\n","\n \n \n"]): + client = OpenAI(base_url=server_url, api_key=api_key) + model_input = [ + { 'role': 'system', 'content': system_prompt}, + { 'role': 'user', 'content': message} + ] + try: + print(f"Generating content with model: {model_name}",) + + response = client.chat.completions.create( + model=model_name, + messages=model_input, + temperature=temperature, + max_tokens=max_tokens, + top_p=top_p, + stop = stop + ) + + return True, response.choices[0].message.content + + except Exception as e: + print("Failed to call LLM: " + str(e)) + time.sleep(6) + if hasattr(e, 'response'): + error_info = e.response.json() + code_value = error_info['error']['code'] + else: + code_value = "context_length_exceeded" + print("Retrying ...") + return False, None + +def parse_panda_code(input_string): + """ + Парсит строку и извлекает код, который находится внутри конструкции "PANDA": <код> + Поддерживает различные форматы: JSON, простой текст, Markdown + + Args: + input_string (str): Входная строка для парсинга + + Returns: + str: Извлеченный код или пустая строка, если код не найден + """ + # Сначала попробуем найти JSON объект с PANDA + json_pattern = r'\{[^{}]*(?:CORRECT PANDA|PANDA)":\s*(.+?)(?:\n|$)?\}' + json_match = re.search(json_pattern, input_string, re.DOTALL) + code = None + pattern = r'"(?:CORRECT PANDA|PANDA)":\s*(.+?)(?:\n|$)' + if json_match: + code = json_match.group(1).strip() + else: + match = re.search(pattern, input_string, re.DOTALL) + if match: + # Извлекаем код и убираем лишние пробелы по краям + code = match.group(1).strip() + # Заменяем одинарные кавычки внутри строки для корректного парсинга JSON + + # Если JSON не найден или не распарсился, используем старый метод + # Паттерн для поиска кода после "PANDA": + # Ищет "PANDA": за которым следует пробел, затем код до конца строки или до следующего символа + if code != None: + # Убираем возможные кавычки вокруг кода + if code.startswith('"') and code.endswith('"'): + code = code[1:-1] + elif code.startswith("'") and code.endswith("'"): + code = code[1:-1] + + return code + + return "" + +def correct_code(df, input_data, code_str, error_str, iter_id=0, system_correcting_prompt='', + stop=["Observation:", "\n\n\n\n", "\n \n \n"], + max_tokens=500, top_p=0.9, temperature=0.5, + server_url="http://127.0.0.1:8800/v1", api_key="dummy", + model_name='deepseek-ai/deepseek-coder-7b-instruct-v1.5', max_iter=5): + """ + Рекурсивно исправляет код с использованием LLM + """ + if iter_id < max_iter: + # Формируем запрос на исправление + success, response = send_message( + f'INPUT DATA: {input_data}\nCODE: {code_str}\nERROR: {error_str}', + stop=stop, + max_tokens=max_tokens, + top_p=top_p, + temperature=temperature, + server_url=server_url, + api_key=api_key, + model_name=model_name, + system_prompt=system_correcting_prompt + ) + + if success: + code = parse_panda_code(response) + if not code: # Если не удалось извлечь код + print(f"Iteration {iter_id}: Failed to parse code from response",f"text: {response}") + return correct_code(df, input_data, code_str, error_str, iter_id=iter_id+1, + max_tokens=max_tokens, top_p=top_p, temperature=temperature, + server_url=server_url, api_key=api_key, model_name=model_name, + system_correcting_prompt=system_correcting_prompt, max_iter=max_iter) + + try: + # Пробуем выполнить исправленный код + pandas_eval = str(bool(eval(code))) + print(f"Iteration {iter_id}: Code corrected successfully") + return True, code, response + except Exception as e: + print(f"Iteration {iter_id}: Code execution failed with error: {e}") + # Рекурсивно пытаемся исправить новый код + return correct_code(df, input_data, code, str(e), iter_id=iter_id+1, + max_tokens=max_tokens, top_p=top_p, temperature=temperature, + server_url=server_url, api_key=api_key, model_name=model_name, + system_correcting_prompt=system_correcting_prompt, max_iter=max_iter) + else: + print(f'Iteration {iter_id}: LLM call failed') + # Если не удалось вызвать LLM, пробуем снова с теми же данными + return correct_code(df, input_data, code_str, error_str, iter_id=iter_id+1, + max_tokens=max_tokens, top_p=top_p, temperature=temperature, + server_url=server_url, api_key=api_key, model_name=model_name, + system_correcting_prompt=system_correcting_prompt, max_iter=max_iter) + else: + print(f'Max iterations ({max_iter}) reached without successful correction') + return False, code_str, None + + +def dataset_processing(entry,query_field=None,system_correcting_prompt='',system_prompt=''): + df = pd.read_csv(StringIO(entry['table_text']), delimiter='#') + for col in df.columns: + try: + df[col] = pd.to_numeric(df[col]) + except ValueError: + # Если возникает ошибка, оставляем столбец как есть + continue + + success,response = send_message(entry[f"{query_field}_query"], + system_prompt=system_prompt) + + entry[f'{query_field}_answ'] = 'None' + entry[f'{query_field}_label'] = 'None' + entry[f'{query_field}_answ_correct'] = 'None' + + + if success: + entry[f'{query_field}_answ'] = response + try: + code = parse_panda_code(response) + try: + + pandas_eval = str(bool(eval(code))) + entry[f'{query_field}_label'] = str(pandas_eval) + except Exception as e: + print('EEEERRRRRRR', entry['id']) + print(e) + success_correcting, new_code, correcting_response = correct_code(df,entry[f"{query_field}_query"], + code,str(e), + system_correcting_prompt=system_correcting_prompt) + if success_correcting: + pandas_eval = str(bool(eval(new_code))) + entry[f'{query_field}_label'] = str(pandas_eval) + entry[f'{query_field}_answ_correct'] = correcting_response + except Exception as e: + print (e) + + return entry + + + + +def main(): + parser = argparse.ArgumentParser(description='Скрипт с настраиваемыми параметрами') + parser.add_argument('--inputdata', type=str, default='./answer_gen_nlsep_none_filtered_new_dataset') + parser.add_argument('--outputdata', type=str, default='./answer_gen_nlsep_none_filtered_new_dataset_failran_clear') + parser.add_argument('--num_proc', type=int, default=16, + help='Количество процессов') + parser.add_argument('--query-field', type=str, default='nlsep', + choices=['semtab', 'nlsep','proto'], help='Тип query field') + + args = parser.parse_args() + + inputdata = args.inputdata + outputdata = args.outputdata + query_field = args.query_field + NUM_PROC = args.num_proc + + print(f"inputdata: {inputdata}") + print(f"outputdata: {outputdata}") + print(f"query_field: {query_field}") + print(f"num-proc: {NUM_PROC}") + # Ваш основной код здесь + dataset = load_from_disk(inputdata) + #dataset = dataset.filter(lambda x: True if x[f'{query_field}_answ']!='None' else False,num_proc=17) + #dataset = dataset.filter(lambda x: True if x[f'{query_field}_label']=='None' else False,num_proc=17) + dataset = dataset.map(partial(dataset_processing,query_field=query_field, + system_correcting_prompt=system_correcting_prompt, + system_prompt=system_prompt),num_proc=NUM_PROC) + dataset.save_to_disk(outputdata) + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/correctin_failrun_data_modify.py b/tests/correctin_failrun_data_modify.py new file mode 100644 index 0000000..efc237f --- /dev/null +++ b/tests/correctin_failrun_data_modify.py @@ -0,0 +1,249 @@ + +# Добавляем корневую директорию проекта в sys.path +import argparse +from functools import partial +from datasets import load_from_disk +from openai import OpenAI +import sys +import os +import json +import pandas as pd +from io import StringIO +from tqdm import tqdm +import re +import time +import traceback +# Добавляем корневую директорию проекта в sys.path +sys.path.append(os.path.dirname(os.path.abspath('/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/tests'))) + +system_prompt = '''You are a Python expert specializing in pandas. Your task is to translate the +given natural language statement into a single-line pandas expression. This +expression must be valid and executable to verify the truth of the statement +using the provided table. Consider the following: +1. The table is represented as a pandas DataFrame named df. +2. Do not include explanations, comments, or multiline outputs. +3. Ensure the output is concise, correct, and when run outputs either True or +False, and strictly in the following Json Format with a single key "PANDA": +"PANDA": "" +''' +system_correcting_prompt = ''' +You are a Python expert specializing in pandas. Your task is to correct a pandas code that translates a given natural language statement into a pandas expression. The input data, code, along with the specific error it contains, is provided. +Your corrected pandas_code must be valid and executable by running the code +snippet str(bool(eval(pandas_code))) ensuring it accurately evaluates the truth +of the statement using the provided table with no errors. +Make sure the pandas_code is of type boolean. Consider the following: +1. The table is represented as a pandas DataFrame named df. +2. Do not include explanations, comments, or multiline outputs. +3. Ensure the output is concise, correct, and when run outputs either True or +False, and strictly in the following Json Format with a single key "CORRECT PANDA": +"CORRECT PANDA": "" +''' + + +def send_message(message,max_tokens=500,top_p=0.9,temperature=0.5,server_url="http://127.0.0.1:8800/v1",api_key="dummy", + model_name='deepseek-ai/deepseek-coder-7b-instruct-v1.5',system_prompt='', stop = ["Observation:","\n\n\n\n","\n \n \n"]): + client = OpenAI(base_url=server_url, api_key=api_key) + model_input = [ + { 'role': 'system', 'content': system_prompt}, + { 'role': 'user', 'content': message} + ] + try: + print(f"Generating content with model: {model_name}",) + + response = client.chat.completions.create( + model=model_name, + messages=model_input, + temperature=temperature, + max_tokens=max_tokens, + top_p=top_p, + stop = stop + ) + + return True, response.choices[0].message.content + + except Exception as e: + print("Failed to call LLM: " + str(e)) + time.sleep(6) + if hasattr(e, 'response'): + error_info = e.response.json() + code_value = error_info['error']['code'] + else: + code_value = "context_length_exceeded" + print("Retrying ...") + return False, None + +def parse_panda_code(input_string): + """ + Парсит строку и извлекает код, который находится внутри конструкции "PANDA": <код> + Поддерживает различные форматы: JSON, простой текст, Markdown + + Args: + input_string (str): Входная строка для парсинга + + Returns: + str: Извлеченный код или пустая строка, если код не найден + """ + # Сначала попробуем найти JSON объект с PANDA + json_pattern = r'\{[^{}]*(?:CORRECT PANDA|PANDA)":\s*(.+?)(?:\n|$)?\}' + json_match = re.search(json_pattern, input_string, re.DOTALL) + code = None + pattern = r'"(?:CORRECT PANDA|PANDA)":\s*(.+?)(?:\n|$)' + if json_match: + code = json_match.group(1).strip() + else: + match = re.search(pattern, input_string, re.DOTALL) + if match: + # Извлекаем код и убираем лишние пробелы по краям + code = match.group(1).strip() + # Заменяем одинарные кавычки внутри строки для корректного парсинга JSON + + # Если JSON не найден или не распарсился, используем старый метод + # Паттерн для поиска кода после "PANDA": + # Ищет "PANDA": за которым следует пробел, затем код до конца строки или до следующего символа + if code != None: + # Убираем возможные кавычки вокруг кода + if code.startswith('"') and code.endswith('"'): + code = code[1:-1] + elif code.startswith("'") and code.endswith("'"): + code = code[1:-1] + + return code + + return "" + +def correct_code(df, input_data, code_str, error_str, iter_id=0, system_correcting_prompt='', + stop=["Observation:", "\n\n\n\n", "\n \n \n"], + max_tokens=500, top_p=0.9, temperature=0.5, + server_url="http://127.0.0.1:8800/v1", api_key="dummy", + model_name='deepseek-ai/deepseek-coder-7b-instruct-v1.5', max_iter=5,add_df_info=False): + """ + Рекурсивно исправляет код с использованием LLM + """ + if iter_id < max_iter: + if add_df_info : + df_info = df.dtypes.to_string() + df_info = f'DATAFRAME TABLE TYPES: {df_info}\n' + else: + df_info = '' + # Формируем запрос на исправление + success, response = send_message( + f'INPUT DATA: {input_data}\n{df_info} CODE: {code_str}\nERROR: {error_str}', + stop=stop, + max_tokens=max_tokens, + top_p=top_p, + temperature=temperature, + server_url=server_url, + api_key=api_key, + model_name=model_name, + system_prompt=system_correcting_prompt + ) + + if success: + code = parse_panda_code(response) + if not code: # Если не удалось извлечь код + print(f"Iteration {iter_id}: Failed to parse code from response",f"text: {response}") + return correct_code(df, input_data, code_str, error_str, iter_id=iter_id+1, + max_tokens=max_tokens, top_p=top_p, temperature=temperature, + server_url=server_url, api_key=api_key, model_name=model_name, + system_correcting_prompt=system_correcting_prompt, max_iter=max_iter,add_df_info=add_df_info) + + try: + # Пробуем выполнить исправленный код + pandas_eval = str(bool(eval(code))) + print(f"Iteration {iter_id}: Code corrected successfully") + return True, code, response + except Exception as e: + print(f"Iteration {iter_id}: Code execution failed with error: {e}") + # Рекурсивно пытаемся исправить новый код + return correct_code(df, input_data, code, f'{type(e).__name__}: {e}', iter_id=iter_id+1, + max_tokens=max_tokens, top_p=top_p, temperature=temperature, + server_url=server_url, api_key=api_key, model_name=model_name, + system_correcting_prompt=system_correcting_prompt, max_iter=max_iter,add_df_info=add_df_info) + else: + print(f'Iteration {iter_id}: LLM call failed') + # Если не удалось вызвать LLM, пробуем снова с теми же данными + return correct_code(df, input_data, code_str, error_str, iter_id=iter_id+1, + max_tokens=max_tokens, top_p=top_p, temperature=temperature, + server_url=server_url, api_key=api_key, model_name=model_name, + system_correcting_prompt=system_correcting_prompt, max_iter=max_iter,add_df_info=add_df_info) + else: + print(f'Max iterations ({max_iter}) reached without successful correction') + return False, code_str, None + + +def dataset_processing(entry,query_field=None,system_correcting_prompt='',system_prompt='',add_df_info=False,): + df = pd.read_csv(StringIO(entry['table_text']), delimiter='#') + for col in df.columns: + try: + df[col] = pd.to_numeric(df[col]) + except ValueError: + # Если возникает ошибка, оставляем столбец как есть + continue + #query = entry[f"{query_field}_query"] + #query = entry['statement']+ ' ' + serialize_table(df,serialization_type='space') + query = entry['statement']+ ' ' + entry[query_field] + success,response = send_message(query, system_prompt=system_prompt) + + entry[f'{query_field}_answ'] = 'None' + entry[f'{query_field}_label'] = 'None' + entry[f'{query_field}_answ_correct'] = 'None' + + + if success: + entry[f'{query_field}_answ'] = response + try: + code = parse_panda_code(response) + try: + + pandas_eval = str(bool(eval(code))) + entry[f'{query_field}_label'] = str(pandas_eval) + except Exception as e: + print('EEEERRRRRRR', entry['id']) + print(e) + success_correcting, new_code, correcting_response = correct_code(df,query,code,f'{type(e).__name__}: {e}', + system_correcting_prompt=system_correcting_prompt,add_df_info=add_df_info) + if success_correcting: + pandas_eval = str(bool(eval(new_code))) + entry[f'{query_field}_label'] = str(pandas_eval) + entry[f'{query_field}_answ_correct'] = correcting_response + except Exception as e: + print (e) + + return entry + + + + +def main(): + parser = argparse.ArgumentParser(description='Скрипт с настраиваемыми параметрами') + parser.add_argument('--inputdata', type=str, default='./answer_gen_nlsep_none_filtered_new_dataset') + parser.add_argument('--outputdata', type=str, default='./answer_gen_nlsep_none_filtered_new_dataset_failran_clear') + parser.add_argument('--num_proc', type=int, default=16, + help='Количество процессов') + parser.add_argument('--query-field', type=str, default='nlsep', help='Тип query field') + parser.add_argument('--add-df-info', type=int, default=0, help='Добавлять ли доп инфо о типах и столбцах df') + + args = parser.parse_args() + + inputdata = args.inputdata + outputdata = args.outputdata + query_field = args.query_field + NUM_PROC = args.num_proc + add_df_info = bool(args.add_df_info) + print(f"inputdata: {inputdata}") + print(f"outputdata: {outputdata}") + print(f"query_field: {query_field}") + print(f"num-proc: {NUM_PROC}") + print(f'add_df_info: {add_df_info}') + # Ваш основной код здесь + dataset = load_from_disk(inputdata) + #dataset = dataset.filter(lambda x: True if x[f'{query_field}_answ']!='None' else False,num_proc=17) + #dataset = dataset.filter(lambda x: True if x[f'{query_field}_label']=='None' else False,num_proc=17) + dataset = dataset.map(partial(dataset_processing,query_field=query_field, + system_correcting_prompt=system_correcting_prompt, + system_prompt=system_prompt,add_df_info=add_df_info),num_proc=NUM_PROC) + dataset.save_to_disk(outputdata) + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/tests/correctin_failrun_data_only.py b/tests/correctin_failrun_data_only.py new file mode 100644 index 0000000..d7e23c3 --- /dev/null +++ b/tests/correctin_failrun_data_only.py @@ -0,0 +1,207 @@ + +# Добавляем корневую директорию проекта в sys.path +import argparse +from functools import partial +from datasets import load_from_disk +from openai import OpenAI +import sys +import os +import json +import pandas as pd +from io import StringIO +from tqdm import tqdm +import re +# Добавляем корневую директорию проекта в sys.path +sys.path.append(os.path.dirname(os.path.abspath('/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/tests'))) + +system_prompt = '''You are a Python expert specializing in pandas. Your task is to translate the +given natural language statement into a single-line pandas expression. This +expression must be valid and executable to verify the truth of the statement +using the provided table. Consider the following: +1. The table is represented as a pandas DataFrame named df. +2. Do not include explanations, comments, or multiline outputs. +3. Ensure the output is concise, correct, and when run outputs either True or +False, and strictly in the following Json Format with a single key "PANDA": +"PANDA": "" +''' +system_correcting_prompt = ''' +You are a Python expert specializing in pandas. Your task is to correct a pandas code that translates +a given natural language statement into a pandas +expression. The input data, code, along with the specific error it contains, is provided. +Your corrected pandas_code must be valid and executable by running the code +snippet str(bool(eval(pandas_code))) ensuring it accurately evaluates the truth +of the statement using the provided table with no errors. +Make sure the pandas_code is of type boolean. Consider the following: +1. The table is represented as a pandas DataFrame named df. +2. Do not include explanations, comments, or multiline outputs. +3. Ensure the output is concise, correct, and when run outputs either True or +False, and strictly in the following Json Format with a single key "CORRECT PANDA": +"CORRECT PANDA": "" +''' + + +def send_message(message,max_tokens=500,top_p=0.9,temperature=0.5,server_url="http://127.0.0.1:8800/v1",api_key="dummy", + model_name='deepseek-ai/deepseek-coder-7b-instruct-v1.5',system_prompt='', stop = ["Observation:","\n\n\n\n","\n \n \n"]): + client = OpenAI(base_url=server_url, api_key=api_key) + model_input = [ + { 'role': 'system', 'content': system_prompt}, + { 'role': 'user', 'content': message} + ] + try: + print(f"Generating content with model: {model_name}",) + + response = client.chat.completions.create( + model=model_name, + messages=model_input, + temperature=temperature, + max_tokens=max_tokens, + top_p=top_p, + stop = stop + ) + + return True, response.choices[0].message.content + + except Exception as e: + print("Failed to call LLM: " + str(e)) + time.sleep(6) + if hasattr(e, 'response'): + error_info = e.response.json() + code_value = error_info['error']['code'] + else: + code_value = "context_length_exceeded" + print("Retrying ...") + return False, None + +def parse_panda_code(input_string): + """ + Парсит строку и извлекает код, который находится внутри конструкции "PANDA": <код> + Поддерживает различные форматы: JSON, простой текст, Markdown + + Args: + input_string (str): Входная строка для парсинга + + Returns: + str: Извлеченный код или пустая строка, если код не найден + """ + # Сначала попробуем найти JSON объект с PANDA + json_pattern = r'\{[^{}]*PANDA":\s*(.+?)(?:\n|$)?\}' + json_match = re.search(json_pattern, input_string, re.DOTALL) + code = None + pattern = r'"PANDA":\s*(.+?)(?:\n|$)' + if json_match: + code = json_match.group(1).strip() + else: + match = re.search(pattern, input_string, re.DOTALL) + if match: + # Извлекаем код и убираем лишние пробелы по краям + code = match.group(1).strip() + # Заменяем одинарные кавычки внутри строки для корректного парсинга JSON + + # Если JSON не найден или не распарсился, используем старый метод + # Паттерн для поиска кода после "PANDA": + # Ищет "PANDA": за которым следует пробел, затем код до конца строки или до следующего символа + if code != None: + # Убираем возможные кавычки вокруг кода + if code.startswith('"') and code.endswith('"'): + code = code[1:-1] + elif code.startswith("'") and code.endswith("'"): + code = code[1:-1] + + return code + + return "" + +def correct_code(df,input_data,code_str,error_str,iter_id=0,system_correcting_prompt='',stop= ["Observation:","\n\n\n\n","\n \n \n"], + max_tokens=500,top_p=0.9,temperature=0.5,server_url="http://127.0.0.1:8800/v1",api_key="dummy", + model_name='deepseek-ai/deepseek-coder-7b-instruct-v1.5',max_iter=5): + if iter_id defgen_test_log.txt\n", + "\n", + "\n", + "python ablation_experiments.py --inputdata tab_fact_test_semtab_xml_ablation --outputdata tab_fact_test_semtab_xml_repanda --conf-file semtab_xml_config_answer_local_model.yaml --num_proc 16 > tab_fact_test_xml_ablation_log_repanda.txt" ] }, { - "cell_type": "code", - "execution_count": 2, - "id": "6adf47a7-4b6b-4513-a7dc-561208e3825b", + "cell_type": "markdown", + "id": "9d64a11d-48a6-4fbe-bfd1-b148716da902", "metadata": {}, - "outputs": [], "source": [ - "import sys\n", - "import os\n", - "\n", - "# Добавляем корневую директорию проекта в sys.path\n", - "sys.path.append(os.path.dirname(os.path.abspath('/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/tests')))" + "# Definition test" ] }, { "cell_type": "code", - "execution_count": 4, - "id": "b60f3ad1-64be-4707-b605-26205badfd56", + "execution_count": 132, + "id": "1349c891-dc09-4df5-b21e-9f71e5189db6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Dataset({\n", - " features: ['id', 'statement', 'label', 'table_caption', 'table_text', 'pandas_code', 'pandas_eval', 'nlsep_query', 'semtab_query'],\n", - " num_rows: 88116\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50'],\n", + " num_rows: 12779\n", "})" ] }, - "execution_count": 4, + "execution_count": 132, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "dataset = load_from_disk('none_filtered_new_dataset/')\n", + "from datasets import load_from_disk\n", + "from datasets import Dataset\n", + "dataset = load_from_disk('tab_fact_test_semtab_xml_ablation_new_continue/')\n", "dataset" ] }, { "cell_type": "code", - "execution_count": 9, - "id": "a817e960-131b-48c1-bd77-8243d1148668", + "execution_count": 133, + "id": "07644b54-714a-4f46-a0b5-14f098f28041", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{'id': 0,\n", - " 'statement': 'haroldo be mention as a brazil scorer for 2 different game',\n", - " 'label': 1,\n", - " 'table_caption': '1919 in brazilian football',\n", - " 'table_text': 'date#result#score#brazil scorers#competition\\nmay 11 , 1919#w#6 - 0#friedenreich (3) , neco (2) , haroldo#south american championship\\nmay 18 , 1919#w#3 - 1#heitor , amílcar , millon#south american championship\\nmay 26 , 1919#d#2 - 2#neco (2)#south american championship\\nmay 29 , 1919#w#1 - 0#friedenreich#south american championship\\njune 1 , 1919#d#3 - 3#haroldo , arlindo (2)#taça roberto cherry\\n',\n", - " 'pandas_code': \"df['brazil scorers'].apply(lambda x: 'haroldo' in x).sum() == 2\",\n", - " 'pandas_eval': 'True',\n", - " 'nlsep_query': 'haroldo be mention as a brazil scorer for 2 different game col : date | result | score | brazil scorers | competition row 1 : may 11 , 1919 | w | 6 - 0 | friedenreich (3) , neco (2) , haroldo | south american championship row 2 : may 18 , 1919 | w | 3 - 1 | heitor , amílcar , millon | south american championship row 3 : may 26 , 1919 | d | 2 - 2 | neco (2) | south american championship row 4 : may 29 , 1919 | w | 1 - 0 | friedenreich | south american championship row 5 : june 1 , 1919 | d | 3 - 3 | haroldo , arlindo (2) | taça roberto cherry',\n", - " 'semtab_query': 'haroldo be mention as a brazil scorer for 2 different game 1919 in brazilian football
datebirthDate - 1.0\"str\"0[\"may 26 , 1919\", \"may 29 , 1919\", \"june 1 , 1919\"]
resultcode - 0.6\"str\"0[\"d\", \"d\", \"w\"]
score\"str\"0[\"3 - 3\", \"6 - 0\", \"3 - 1\"]
brazil scorersresult - 1.0\"str\"0[\"neco (2)\", \"heitor , am\\\\u00edlcar , millon\", \"friedenreich (3) , neco (2) , haroldo\"]
competitionnotes - 0.98\"str\"0[\"south american championship\", \"south american championship\", \"ta\\\\u00e7a roberto cherry\"]
'}" + "'
'" ] }, - "execution_count": 9, + "execution_count": 133, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "dataset[0]" + "data = load_from_disk('tab_fact_test_defgen_new')\n", + "data[0]['semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50']" ] }, { "cell_type": "code", - "execution_count": 5, - "id": "bf7d5707-8b9d-493f-9859-b22df71c0f1d", + "execution_count": 145, + "id": "c52df2e6-6278-4fa1-b19c-c1449368fc50", "metadata": {}, "outputs": [], "source": [ - "\n", - "system_prompt = '''You are a Python expert specializing in pandas. Your task is to translate the\n", - "given natural language statement into a single-line pandas expression. This\n", - "expression must be valid and executable to verify the truth of the statement\n", - "using the provided table. Consider the following:\n", - "1. The table is represented as a pandas DataFrame named df.\n", - "2. Do not include explanations, comments, or multiline outputs.\n", - "3. Ensure the output is concise, correct, and when run outputs either True or\n", - "False, and strictly in the following Json Format with a single key \"PANDA\":\n", - "\"PANDA\": \"\"\n", - "'''\n" + "p = dataset.unique('table_csv')" ] }, { "cell_type": "code", - "execution_count": 6, - "id": "730a7ee1-017c-4e1f-ba34-884619081578", + "execution_count": 148, + "id": "d5de4334-00af-494e-bc81-f4c7ccac465d", + "metadata": {}, + "outputs": [], + "source": [ + "df = dataset.to_pandas()\n", + "df_unique = df.drop_duplicates(subset=['table_csv'])\n", + "dataset_unique = Dataset.from_pandas(df_unique)" + ] + }, + { + "cell_type": "code", + "execution_count": 150, + "id": "f5288514-c290-4474-8f32-27817616261b", "metadata": {}, "outputs": [ { - "name": "stdout", + "name": "stderr", "output_type": "stream", "text": [ - "You are a Python expert specializing in pandas. Your task is to translate the\n", - "given natural language statement into a single-line pandas expression. This\n", - "expression must be valid and executable to verify the truth of the statement\n", - "using the provided table. Consider the following:\n", - "1. The table is represented as a pandas DataFrame named df.\n", - "2. Do not include explanations, comments, or multiline outputs.\n", - "3. Ensure the output is concise, correct, and when run outputs either True or\n", - "False, and strictly in the following Json Format with a single key \"PANDA\":\n", - "\"PANDA\": \"\"\n", - "\n" + "Saving the dataset (1/1 shards): 100%|██████████| 1695/1695 [00:00<00:00, 61870.43 examples/s]\n" ] } ], "source": [ - "print(system_prompt)" + "dataset_unique.save_to_disk('tab_fact_test_unique_tables')" ] }, { "cell_type": "code", - "execution_count": 7, - "id": "9e1c03a2-a140-409c-af6a-1d9f628da2d9", + "execution_count": 136, + "id": "9ff11684-afaf-4746-9592-155ebfdfaeb7", + "metadata": {}, + "outputs": [], + "source": [ + "p = set(c)" + ] + }, + { + "cell_type": "code", + "execution_count": 138, + "id": "815faa2a-febb-4e52-9053-1e4c63ed3dae", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "ename": "TypeError", + "evalue": "list indices must be integers or slices, not list", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[138], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mc\u001b[49m\u001b[43m[\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mtable_text\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mtable_caption\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m]\u001b[49m\n", + "\u001b[0;31mTypeError\u001b[0m: list indices must be integers or slices, not list" + ] + } + ], + "source": [ + "c[['table_text','table_caption']]" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "78cdd188-cedb-4c2e-8c45-f1cdcb9885ad", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'\\n######################\\n-Real Data-\\n######################\\n------------------------\\n######################\\nOutput:\\n'" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "system_prompt = '''You're an expert linguist. You are provided with a table schema with a description in XML format.\n", + "Your task is to analyze the tabular context and, based on the information received, give a brief but semantically succinct definition for each HEADER, \n", + "its format features (how to interpret signs, abbreviations, or complex strings, such as \"A - B\"). \n", + "If there are units of measurement in the EXAMPLES, then include them in the answer. \n", + "\n", + "The output must be in json in the dictionary format {
:
}.\n", + "\n", + "######################\n", + "-Examples-\n", + "######################\n", + "Example 1:\n", + "\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "######################\n", + "Output:\n", + "{\n", + "\"planet\": \"The proper name of a celestial body in the Solar system, presented in text format.\",\n", + "\"type\": \"Classification of a planet by its physical and chemical composition (for example, 'terrestrial' — rocky or 'gas giant' — gas giant).\",\n", + "\"moons\": \"Quantitative indicator indicating the total number of confirmed natural satellites of the planet (integer).\",\n", + "\"diameter_km\"\"The equatorial diameter of a celestial body, expressed in numerical terms. Unit of measurement: kilometers (km).\",\n", + "\"gravity_ms2\": \"Acceleration of gravity on the surface of the planet. Unit of measurement: meters per second squared ($$m/s^2$$).\"\n", + "}\n", + "######################\n", + "Example 2:\n", + "\n", + "
\n", + "
\n", + "
\n", + "######################\n", + "Output:\n", + "{\n", + " \"title\": \"The official name of a literary work, written in text form.\",\n", + " \"author\": \"The first and last name of the author (creator) of the work, presented as a string.\"\n", + "}\n", + "######################\n", + "Example 3:\n", + "\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "
\n", + "######################\n", + "Output:\n", + "{\n", + " \"model\": \"The commercial name of a specific device, including the series name and serial number.\",\n", + "\"brand\": \"The name of the manufacturing company (brand) responsible for the release of the device.\",\n", + "\"screen_size\": \"The diagonal size of the device's display, represented as a decimal. Unit of measurement: inches.\",\n", + "\"ram_gb\": \"The amount of RAM available for the system and applications. Unit of measurement: gigabytes (GB).\",\n", + "\"battery_mah\": \"The electrical capacity of the device's battery, which determines the battery life. Unit of measurement: milliampere-hours (mAh).\"\n", + "}\n", + "\n", + "'''\n", + "prompt = '''\n", + "######################\n", + "-Real Data-\n", + "######################\n", + "{input_text}\n", + "######################\n", + "Output:\n", + "'''\n", + "prompt.format(input_text='------------------------')\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6ea78383-4760-405d-aa82-dfd14a98e0de", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 121, + "id": "dbd27da5-ccbe-46f6-997c-8668d8de9073", "metadata": {}, "outputs": [], "source": [ "from openai import OpenAI\n", - "def send_message(message,max_tokens=2000,top_p=0.9,temperature=0.5,server_url=\"http://127.0.0.1:8800/v1\",api_key=\"dummy\",\n", - " model_name='deepseek-ai/deepseek-coder-7b-instruct-v1.5',system_prompt='', stop = [\"Observation:\",\"\\n\\n\\n\\n\",\"\\n \\n \\n\"]):\n", - " client = OpenAI(base_url=server_url, api_key=api_key)\n", - " model_input = [\n", - " { 'role': 'system', 'content': system_prompt},\n", - " { 'role': 'user', 'content': message}\n", - " ]\n", + "import base64\n", + "from typing import List,Dict,Any,Callable\n", + "import inspect\n", + "import re\n", + "def get_kwargs(kwargs: Dict[str,Any],func: Callable) -> Dict[str,Any]:\n", + " '''\n", + " Вытаскивает аргументы из kwargs по сигнатуре функции func.\n", + " '''\n", + " sig = inspect.signature(func)\n", + " return {key:value for key,value in kwargs.items() if key in sig.parameters}\n", + "\n", + "\n", + "class ModelMessageDict(dict):\n", + " '''\n", + " Класс - словарь для удобого форматирования запроса к модели.\n", + " Формирует словарь для передачи в клиента openia и в модель\n", + " '''\n", + " def __init__(self,role:str='user'):\n", + " super().__init__()\n", + " self['role'] = role\n", + " self['content'] =[]\n", + " def add_text_content(self,content:str):\n", + " self['content'].append({'type':'text',\n", + " 'text':content})\n", + "\n", + " def add_img_content(self, source:str = 'image_url',path_to_img : str = None, url: str = None):\n", + " match source:\n", + " case 'image_url':\n", + " if path_to_img != None:\n", + " with open(path_to_img, \"rb\") as f:\n", + " base64_image = base64.b64encode(f.read()).decode()\n", + " self['content'].append({'type':'image_url',\n", + " 'image_url':{'url':f\"data:image/jpeg;base64,{base64_image}\"}})\n", + " elif url != None:\n", + " self['content'].append({'type':'image_url',\n", + " 'image_url':{'url':url}})\n", + "\n", + "def send_messasge(messages:List[ModelMessageDict],base_url:str = \"http://127.0.0.1:8880/v1\", api_key:str = 'EMPTY',\n", + " model_name:str = 'Qwen/Qwen3-VL-30B-A3B-Thinking',**kwargs) -> List[str]:\n", + " '''\n", + " Функция для отправки сообщениий в удаленную модель\n", + " '''\n", + " client = OpenAI( api_key=api_key,base_url=base_url,**get_kwargs(kwargs,OpenAI))\n", + " \n", " try:\n", " print(f\"Generating content with model: {model_name}\",)\n", " \n", " response = client.chat.completions.create(\n", - " model=model_name,\n", - " messages=model_input,\n", - " temperature=temperature,\n", - " max_tokens=max_tokens,\n", - " top_p=top_p,\n", - " stop = stop\n", - " )\n", + " messages=messages,\n", + " model=model_name,\n", + " **get_kwargs(kwargs,client.chat.completions.create)\n", + " )\n", " \n", - " return True, response.choices[0].message.content\n", + " cleaned_responses = []\n", + " for answ in response.choices:\n", + " text = answ.message.content\n", + " if text:\n", + " # Вырезаем блок ... вместе с содержимым и переносами строк\n", + " # Флаг re.DOTALL нужен, чтобы точка (.) захватывала символы новой строки (\\n)\n", + " text = re.sub(r'.*?\\n*', '', text, flags=re.DOTALL)\n", + " cleaned_responses.append(text.strip())\n", + " else:\n", + " cleaned_responses.append(\"\")\n", + " \n", + " return True, cleaned_responses\n", "\n", " except Exception as e:\n", " print(\"Failed to call LLM: \" + str(e))\n", - " time.sleep(6)\n", " if hasattr(e, 'response'):\n", " error_info = e.response.json() \n", " code_value = error_info['error']['code']\n", + " print(code_value)\n", " else:\n", " code_value = \"context_length_exceeded\"\n", - " print(\"Retrying ...\")\n", + " print(code_value)\n", " return False, None" ] }, { "cell_type": "code", - "execution_count": 8, - "id": "2465bb75-3e3a-4236-ba60-f8a9db70e9d8", + "execution_count": 116, + "id": "0a9eb0d3-dfa5-4219-ad95-35d0b87d2f53", "metadata": {}, "outputs": [], "source": [ - "import json\n", - "import pandas as pd\n", - "from io import StringIO\n", - "from tqdm import tqdm" + "repanda\n" ] }, { "cell_type": "code", - "execution_count": null, - "id": "c8a5c61e-f3b6-4e62-ba85-7324422d0d31", + "execution_count": 119, + "id": "d9bcbded-b951-47a2-8c58-8db9381fd2e2", "metadata": {}, "outputs": [], "source": [ - "\n", - "count = 0\n", - "corrects_sep = 0\n", - "corrects_sem = 0\n", - "for entry in tqdm(dataset):\n", - " total += 1\n", - " df = pd.read_csv(StringIO(entry['table_text']), delimiter='#')\n", - " success,response_sep = send_message(f'{entry[\"statement\"]} {entry[\"nlsep_query\"]}',\n", - " system_prompt=system_prompt)\n", - " if success:\n", - " pandas_eval = str(bool(eval(response_sep)))\n", - " if str(bool(entry['label'])) == str(pandas_eval):\n", - " corrects_sep += 1\n", - " else:\n", - " print(response_sep)\n", - "\n", - " success,response_sem = send_message(f'{entry[\"statement\"]} {entry[\"semtab_query\"]}',\n", - " system_prompt=system_prompt)\n", - " if success:\n", - " pandas_eval = str(bool(eval(response_sem)))\n", - " if str(bool(entry['label'])) == str(pandas_eval):\n", - " response_sem += 1\n", - " else:\n", - " print(corrects_sem)\n", - "\n", - "print(corrects, total, corrects / total)" + "import requests\n", + "x = requests.get('http://localhost:9123/v1/models')" ] }, { "cell_type": "code", - "execution_count": 76, - "id": "620fb46c-42bb-4e30-b273-5a5621cd0dcb", + "execution_count": 120, + "id": "1b2cd94c-87b8-41ea-beba-c93a0e614d9c", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'object': 'list',\n", + " 'data': [{'id': 'deepseek-ai/deepseek-coder-7b-instruct-v1.5',\n", + " 'object': 'model',\n", + " 'created': 1775223863,\n", + " 'owned_by': 'vllm',\n", + " 'root': 'deepseek-ai/deepseek-coder-7b-instruct-v1.5',\n", + " 'parent': None,\n", + " 'max_model_len': 4096,\n", + " 'permission': [{'id': 'modelperm-93d9af1cabe94e79b47505d7f31b4e92',\n", + " 'object': 'model_permission',\n", + " 'created': 1775223863,\n", + " 'allow_create_engine': False,\n", + " 'allow_sampling': True,\n", + " 'allow_logprobs': True,\n", + " 'allow_search_indices': False,\n", + " 'allow_view': True,\n", + " 'allow_fine_tuning': False,\n", + " 'organization': '*',\n", + " 'group': None,\n", + " 'is_blocking': False}]},\n", + " {'id': 'repanda',\n", + " 'object': 'model',\n", + " 'created': 1775223863,\n", + " 'owned_by': 'vllm',\n", + " 'root': '/home/mikhailov_a/semtab_serializer/model/pantabfact2/checkpoint-8000',\n", + " 'parent': 'deepseek-ai/deepseek-coder-7b-instruct-v1.5',\n", + " 'max_model_len': None,\n", + " 'permission': [{'id': 'modelperm-86e232d4693a4da8807375634c63ab81',\n", + " 'object': 'model_permission',\n", + " 'created': 1775223863,\n", + " 'allow_create_engine': False,\n", + " 'allow_sampling': True,\n", + " 'allow_logprobs': True,\n", + " 'allow_search_indices': False,\n", + " 'allow_view': True,\n", + " 'allow_fine_tuning': False,\n", + " 'organization': '*',\n", + " 'group': None,\n", + " 'is_blocking': False}]}]}" + ] + }, + "execution_count": 120, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "import re\n", - "\n", - "def parse_panda_code(input_string):\n", - " \"\"\"\n", - " Парсит строку и извлекает код, который находится внутри конструкции \"PANDA\": <код>\n", - " Поддерживает различные форматы: JSON, простой текст, Markdown\n", - " \n", - " Args:\n", - " input_string (str): Входная строка для парсинга\n", - " \n", - " Returns:\n", - " str: Извлеченный код или пустая строка, если код не найден\n", - " \"\"\"\n", - " # Сначала попробуем найти JSON объект с PANDA\n", - " json_pattern = r'\\{[^{}]*PANDA\":\\s*(.+?)(?:\\n|$)?\\}'\n", - " json_match = re.search(json_pattern, input_string, re.DOTALL)\n", - " code = None\n", - " pattern = r'\"PANDA\":\\s*(.+?)(?:\\n|$)'\n", - " if json_match:\n", - " code = json_match.group(1).strip()\n", - " else:\n", - " match = re.search(pattern, input_string, re.DOTALL)\n", - " if match:\n", - " # Извлекаем код и убираем лишние пробелы по краям\n", - " code = match.group(1).strip()\n", - " # Заменяем одинарные кавычки внутри строки для корректного парсинга JSON\n", - "\n", - " # Если JSON не найден или не распарсился, используем старый метод\n", - " # Паттерн для поиска кода после \"PANDA\": \n", - " # Ищет \"PANDA\": за которым следует пробел, затем код до конца строки или до следующего символа\n", - " if code != None:\n", - " # Убираем возможные кавычки вокруг кода\n", - " if code.startswith('\"') and code.endswith('\"'):\n", - " code = code[1:-1]\n", - " elif code.startswith(\"'\") and code.endswith(\"'\"):\n", - " code = code[1:-1]\n", - " \n", - " return code\n", - " \n", - " return \"\"" + "x.json()" ] }, { "cell_type": "code", - "execution_count": 81, - "id": "efdca526-99b9-4e16-bbde-6b1efc5514a8", + "execution_count": 111, + "id": "8f9de72e-5e72-43b7-90fe-789bfac356bf", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Here is a single-line pandas expression that checks if Haroldo is mentioned as a Brazil scorer for two different games:\n", - "\n", - "```json\n", - "\"PANDA\": \"df['brazil scorers'].apply(lambda x: 'haroldo' in x.split(', ')).sum() >= 2\"\n", - "```\n", - "\n", - "This expression splits the 'brazil scorers' column into a list of scorers for each game, checks if 'haroldo' is in the list, and then sums up the True values to see if he is mentioned as a scorer for at least two games.\n", - "\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" - ] - } - ], - "source": [ - "corrects_sep = 0\n", - "\n", - "df = pd.read_csv(StringIO(dataset[0]['table_text']), delimiter='#')\n", - "success,response_sep = send_message(f'{dataset[0][\"statement\"]} {dataset[0][\"nlsep_query\"]}',\n", - " system_prompt=system_prompt)\n", - "if success:\n", - " pandas_eval = str(bool(eval(parse_panda_code(response_sep))))\n", - " if str(bool(dataset[0]['label'])) == str(pandas_eval):\n", - " corrects_sep += 1\n", - " else:\n", - " print(response_sep)\n", - "\n", - "success,response_sem = send_message(f'{dataset[0][\"statement\"]} {dataset[0][\"semtab_query\"]}',\n", - " system_prompt=system_prompt)" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "id": "f118aad5-82e2-4fc2-ae51-de2c86a29a9b", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "```json\n", - "\"PANDA\": \"df['brazil scorers'].str.contains('haroldo', na=False).sum() > 1\"\n", - "```\n", - "This code checks if 'haroldo' is mentioned as a Brazil scorer for more than 1 game. It uses the str.contains method to check if 'haroldo' is present in the 'brazil scorers' column and then sums up the number of True values, indicating how many games 'haroldo' scored for Brazil.\n", - "\n" - ] - } - ], + "outputs": [], "source": [ - "print(response_sep)" + "arr = [ModelMessageDict(role='system').add_text_content(system_prompt),\n", + " ModelMessageDict(role='user').add_text_content(prompt.format(input_text=dataset[14]['semtab_xml_attributes_exampples_description_top1_tresh50'])+'/nothink')]" ] }, { "cell_type": "code", - "execution_count": 43, - "id": "a32f7bcc-3a89-4aeb-9475-319bb6bb5bf4", - "metadata": {}, + "execution_count": 122, + "id": "fc42cd74-09ef-4c29-9bdd-5996decbb8fa", + "metadata": { + "scrolled": true + }, "outputs": [ { "data": { "text/plain": [ - "1" + "[{'role': 'user',\n", + " 'content': [{'type': 'text',\n", + " 'text': 'You\\'re an expert linguist. You are provided with a table schema with a description in XML format.\\nYour task is to analyze the tabular context and, based on the information received, give a brief but semantically succinct definition for each HEADER, \\nits format features (how to interpret signs, abbreviations, or complex strings, such as \"A - B\"). \\nIf there are units of measurement in the EXAMPLES, then include them in the answer. \\n\\nThe output must be in json in the dictionary format {
:
}.\\n\\n######################\\n-Examples-\\n######################\\nExample 1:\\n\\n
\\n
\\n
\\n
\\n
\\n
\\n######################\\nOutput:\\n{\\n\"planet\": \"The proper name of a celestial body in the Solar system, presented in text format.\",\\n\"type\": \"Classification of a planet by its physical and chemical composition (for example, \\'terrestrial\\' — rocky or \\'gas giant\\' — gas giant).\",\\n\"moons\": \"Quantitative indicator indicating the total number of confirmed natural satellites of the planet (integer).\",\\n\"diameter_km\"\"The equatorial diameter of a celestial body, expressed in numerical terms. Unit of measurement: kilometers (km).\",\\n\"gravity_ms2\": \"Acceleration of gravity on the surface of the planet. Unit of measurement: meters per second squared ($$m/s^2$$).\"\\n}\\n######################\\nExample 2:\\n\\n
\\n
\\n
\\n######################\\nOutput:\\n{\\n \"title\": \"The official name of a literary work, written in text form.\",\\n \"author\": \"The first and last name of the author (creator) of the work, presented as a string.\"\\n}\\n######################\\nExample 3:\\n\\n
\\n
\\n
\\n
\\n
\\n
\\n######################\\nOutput:\\n{\\n \"model\": \"The commercial name of a specific device, including the series name and serial number.\",\\n\"brand\": \"The name of the manufacturing company (brand) responsible for the release of the device.\",\\n\"screen_size\": \"The diagonal size of the device\\'s display, represented as a decimal. Unit of measurement: inches.\",\\n\"ram_gb\": \"The amount of RAM available for the system and applications. Unit of measurement: gigabytes (GB).\",\\n\"battery_mah\": \"The electrical capacity of the device\\'s battery, which determines the battery life. Unit of measurement: milliampere-hours (mAh).\"\\n}\\n\\n\\n######################\\n-Real Data-\\n######################\\n
\\n######################\\nOutput:\\n'}]}]" ] }, - "execution_count": 43, + "execution_count": 122, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "dataset[0]['label']" + "system = ModelMessageDict(role='system')\n", + "system.add_text_content(system_prompt)\n", + "user = ModelMessageDict(role='user')\n", + "user.add_text_content(system_prompt+prompt.format(input_text=dataset[14]['semtab_xml_attributes_exampples_description_top1_tresh50']))\n", + "arr = [user]\n", + "arr" ] }, { "cell_type": "code", - "execution_count": 44, - "id": "0586c6e6-6dc8-4f9c-a06b-75da101ab92f", + "execution_count": null, + "id": "8730577e-d5e1-4aff-a851-45201521c90d", + "metadata": {}, + "outputs": [], + "source": [ + "python add_to_tabfact_serialize_table.py --inputdata pantab_fact_train --outputdata pantab_fact_train_defgen --conf-file convert_config_semantic_test.yaml > pantabfact_defgen_log.txt" + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "id": "ce24284d-0654-4441-93a3-8cc04e7d9350", + "metadata": {}, + "outputs": [], + "source": [ + "import re\n", + "import json\n", + "\n", + "def extract_json_from_text(text):\n", + " # Ищем первую открывающую фигурную (объект) или квадратную (массив) скобку\n", + " match = re.search(r'\\{|$$', text)\n", + " if not match:\n", + " return None\n", + "\n", + " # Отрезаем весь текст до начала JSON\n", + " json_start = match.start()\n", + " potential_json = text[json_start:]\n", + "\n", + " decoder = json.JSONDecoder()\n", + " try:\n", + " # raw_decode читает JSON и возвращает сам объект и индекс, где он закончился\n", + " obj, index = decoder.raw_decode(potential_json)\n", + " return obj\n", + " except json.JSONDecodeError as e:\n", + " print(f\"Ошибка парсинга JSON: {e}\")\n", + " return None\n", + "\n", + "\n", + "def extract_json_from_text(text: str):\n", + " \"\"\"\n", + " Извлекает и парсит JSON из текстового ответа модели.\n", + " \"\"\"\n", + " # 1. Сначала ищем внутри блоков ```json ... ``` или просто ``` ... ```\n", + " # Используем нежадный поиск (.*?), чтобы найти первый закрывающий блок\n", + " match = re.search(r\"<\\/think>\",text)\n", + " json_start = match.start()\n", + " potential_json = text[json_start:]\n", + " match = re.search(r\"```(?:json)?\\s*(.*?)\\s*```\", potential_json, re.DOTALL | re.IGNORECASE)\n", + " #print(potential_json)\n", + " if match:\n", + " json_str = match.group(1)\n", + " else:\n", + " # 2. Если блоков нет, ищем просто от первой { или [ до последней } или ]\n", + " # Используем жадный поиск (.*), чтобы захватить весь объект целиком\n", + " match = re.search(r\"(\\{.*\\}|$$.*$$)\", potential_json, re.DOTALL)\n", + " if match:\n", + " json_str = match.group(1)\n", + " else:\n", + " raise ValueError(\"JSON не найден в тексте.\")\n", + "\n", + " # Пытаемся распарсить найденную строку\n", + " try:\n", + " #print(json_str)\n", + " return json.loads(json_str)\n", + " except json.JSONDecodeError as e:\n", + " raise ValueError(f\"Найден текст, похожий на JSON, но он не валиден: {e}\\nТекст: {json_str[:100]}...\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "id": "0ae8946e-4e5f-4e9a-a821-fda17a360d7b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'True'" + "SyncPage[Model](data=[Model(id='deepseek-ai/deepseek-coder-7b-instruct-v1.5', created=1774417960, object='model', owned_by='vllm', root='deepseek-ai/deepseek-coder-7b-instruct-v1.5', parent=None, max_model_len=4096, permission=[{'id': 'modelperm-7dab0988f92746fbb9b3aa09e568215b', 'object': 'model_permission', 'created': 1774417960, 'allow_create_engine': False, 'allow_sampling': True, 'allow_logprobs': True, 'allow_search_indices': False, 'allow_view': True, 'allow_fine_tuning': False, 'organization': '*', 'group': None, 'is_blocking': False}])], object='list')" ] }, - "execution_count": 44, + "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "str(bool(eval(parse_panda_code(response_sep))))" + "base_url = \"http://127.0.0.1:9123/v1\"\n", + "api_key = \"EMPTY\"\n", + "client = OpenAI(api_key=api_key, base_url=base_url)\n", + "client.models.list()" ] }, { "cell_type": "code", - "execution_count": 45, - "id": "98ade5a1-b7ca-47b8-86ad-57c4ce108f41", + "execution_count": 90, + "id": "aae9eadb-fc26-423b-ab6a-b6748076751a", + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "\n", + "response = requests.post(\n", + " \"http://localhost:9092/tokenize\",\n", + " json={\n", + " \"model\": \"deepseek-ai/deepseek-coder-7b-instruct-v1.5\", # e.g., \"meta-llama/Llama-2-7b-chat-hf\"\n", + " \"prompt\": \"This is a test prompt to tokenize.\"\n", + " }\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 91, + "id": "27ccc44d-c2e6-418e-a3d6-b3d108216616", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "\"df['brazil scorers'].str.contains('haroldo', na=False).sum() > 1\"" + "{'count': 11,\n", + " 'max_model_len': 4096,\n", + " 'tokens': [100000, 1567, 317, 1418, 245, 1727, 9137, 276, 10728, 945, 13],\n", + " 'token_strs': None}" ] }, - "execution_count": 45, + "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "parse_panda_code(response_sep)" + "response.json()" ] }, { "cell_type": "code", - "execution_count": 90, - "id": "1d2be3be-9d74-4492-9b80-27253c56c4c9", - "metadata": {}, + "execution_count": 197, + "id": "83a89b45-4f13-454e-801c-3b6399f2fa89", + "metadata": { + "scrolled": true + }, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "{\n", + " \"player\": \"The proper name of a rugby player, presented as a text string.\",\n", + " \"span\": \"Time period of player participation, indicated by a hyphen separating start and end years (e.g., '2002 - 2009'; trailing dash denotes ongoing period).\",\n", + " \"start\": \"Number of matches started by the player (integer).\",\n", + " \"tries\": \"Number of tries scored by the player (integer).\",\n", + " \"conv\": \"Number of successful conversion kicks (integer).\",\n", + " \"pens\": \"Number of penalty kicks scored (integer).\",\n", + " \"drop\": \"Number of drop goals scored (integer).\"\n", + "}\n", + "{\n", + " \"player\": \"The proper name of a rugby player, presented as a text string.\",\n", + " \"span\": \"Time period of player participation, indicated by a hyphen separating start and end years (e.g., '2002 - 2009'; trailing dash denotes ongoing period).\",\n", + " \"start\": \"Number of matches started by the player (integer).\",\n", + " \"tries\": \"Number of tries scored by the player (integer).\",\n", + " \"conv\": \"Number of successful conversion kicks (integer).\",\n", + " \"pens\": \"Number of penalty kicks scored (integer).\",\n", + " \"drop\": \"Number of drop goals scored (integer).\"\n", + "}\n" + ] + }, { "data": { "text/plain": [ - "np.False_" + "{'player': 'The proper name of a rugby player, presented as a text string.',\n", + " 'span': \"Time period of player participation, indicated by a hyphen separating start and end years (e.g., '2002 - 2009'; trailing dash denotes ongoing period).\",\n", + " 'start': 'Number of matches started by the player (integer).',\n", + " 'tries': 'Number of tries scored by the player (integer).',\n", + " 'conv': 'Number of successful conversion kicks (integer).',\n", + " 'pens': 'Number of penalty kicks scored (integer).',\n", + " 'drop': 'Number of drop goals scored (integer).'}" ] }, - "execution_count": 90, + "execution_count": 197, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df['brazil scorers'].apply(lambda x: 'haroldo' in x.split(', ')).sum() >= 2" + "extract_json_from_text(res[0])" ] }, { "cell_type": "code", - "execution_count": 82, - "id": "ac5ce16e-9647-4c24-aa90-8b6214e43950", - "metadata": {}, + "execution_count": 130, + "id": "5d3422ab-4c55-4724-9683-86976b9a07fe", + "metadata": { + "scrolled": true + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "```json\n", - "\"PANDA\": \"df['brazil scorers'].apply(lambda x: 'haroldo' in x.split(',')).sum() > 1\"\n", - "```\n", - "This code checks if 'haroldo' is mentioned as a scorer for more than one game in the 'brazil scorers' column of the DataFrame.\n", - "\n" + "Generating content with model: repanda\n" ] } ], "source": [ - "print(response_sem)" + "suc,res = send_messasge(arr,model_name='repanda',base_url = \"http://127.0.0.1:9123/v1\")\n", + "#extract_json_from_text(res[0])" ] }, { "cell_type": "code", - "execution_count": 83, - "id": "856f16fe-9337-4aa4-acdb-927131a15e74", + "execution_count": 131, + "id": "d4b088a0-abaf-49dd-b950-f731d37d9c9a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "0\n" + "{\n", + " \"player\": \"The name of a player.\",\n", + " \"position\": \"The position the player holds in a sports team (for example, 'goalkeeper', 'defender', 'midfielder', 'forward').\",\n", + " \"ekstraklasa\": \"The number of cups won in the Ekstraklasa (Polish football division) by the player's team.\",\n", + " \"polish cup\": \"The number of cups won in the Polish Cup by the player's team (for example, 0 - not won, 0 - won).\",\n", + " \"uefa cup\": \"The number of cups won in the UEFA Cup by the player's team (for example, 0 - not won, 0 - won).\",\n", + " \"total\": \"The total number of cups won by the player's team in both the Ekstraklasa and Polish Cup.\"\n", + "}\n" ] } ], "source": [ - "corrects_sem = 0\n", - "if success:\n", - " pandas_eval = str(bool(eval(parse_panda_code(response_sem))))\n", - " if str(bool(dataset[0]['label'])) == str(parse_panda_code(pandas_eval)):\n", - " corrects_sem += 1\n", - " else:\n", - " print(corrects_sem)" + "print(res[0])" ] }, { "cell_type": "code", - "execution_count": 77, - "id": "1ac4255a-9303-4b33-a7c6-73bab5846f85", + "execution_count": null, + "id": "d3400f6d-62c9-43a3-b365-ae101b97d607", + "metadata": {}, + "outputs": [], + "source": [ + "import re" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "id": "86e36dc2-e575-45b2-a6fa-4300e4f39e9d", "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "\"df['brazil scorers'].str.contains('haroldo', na=False).sum() > 1\"" - ] - }, - "execution_count": 77, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "Количество токенов: 21\n" + ] } ], "source": [ - "parse_panda_code(response_sem)" + "import requests\n", + "\n", + "class VLLMTokenizerWrapper:\n", + " \"\"\"\n", + " Обертка для подсчета токенов через VLLM OpenAPI endpoint.\n", + " Эмулирует метод num_tokens() стандартного tokenizer.\n", + " \"\"\"\n", + " \n", + " def __init__(\n", + " self,\n", + " base_url: str = \"http://127.0.0.1:9092/tokenize\",\n", + " api_key: str = \"EMPTY\",\n", + " model_name: str = \"deepseek-ai/deepseek-coder-7b-instruct-v1.5\"\n", + " ):\n", + " self.base_url = base_url\n", + " self.model_name = model_name\n", + " \n", + " \n", + " def num_tokens(self, text: str) -> int:\n", + " \"\"\"\n", + " Подсчитывает количество токенов в тексте через VLLM tokenize endpoint.\n", + " \"\"\"\n", + " try:\n", + " response = requests.post(\n", + " self.base_url,\n", + " json={\n", + " \"model\": self.model_name, # e.g., \"meta-llama/Llama-2-7b-chat-hf\"\n", + " \"prompt\": text\n", + " }\n", + " )\n", + " # vLLM возвращает список токенов в ключе 'tokens' или 'token_ids'\n", + " # В зависимости от версии vLLM структура может немного отличаться,\n", + " # но token_ids надежнее, так как это всегда список ID.\n", + " \n", + " return response.json()['count']\n", + " \n", + " except Exception as e:\n", + " print(f\"Ошибка подсчета токенов: {str(e)}\")\n", + " # Fallback: грубая оценка (4 символа ≈ 1 токен)\n", + " return len(text) // 4 + 1\n", + "\n", + "# Проверка\n", + "tokenizer = VLLMTokenizerWrapper()\n", + "count = tokenizer.num_tokens(\"Привет, это тестовый текст для проверки токенизации!\")\n", + "print(f\"Количество токенов: {count}\")\n" ] }, { "cell_type": "code", - "execution_count": 65, - "id": "7be4007e-50f2-4b3e-95da-646d82fd145f", + "execution_count": 64, + "id": "d6808dbd-679d-431d-b8ca-0418d69fd73e", "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Ошибка подсчета токенов: Error code: 404 - {'detail': 'Not Found'}\n" + ] + }, { "data": { "text/plain": [ - "'Here is the single-line pandas expression based on the given statement:\\n\\n```json\\n{\"PANDA\": \"df[\\'brazil scorers\\'].str.contains(\\'haroldo\\', na=False).sum() > 1\"}\\n```\\n\\nThis expression checks if \\'haroldo\\' is mentioned as a Brazil scorer for more than 1 game in the \\'brazil scorers\\' column of the DataFrame df.\\n'" + "2" ] }, - "execution_count": 65, + "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "response_sem" + "tokenizer = VLLMTokenizerWrapper()\n", + "tokenizer.num_tokens('text')" ] }, { "cell_type": "code", - "execution_count": 66, - "id": "6f513eeb-8a61-4994-8e97-fb9fd174d2a4", - "metadata": {}, - "outputs": [], + "execution_count": 102, + "id": "a6cac5f8-f02c-44a8-9734-3a2b67b62f81", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: Qwen/Qwen3-VL-32B-Instruct\n", + "Failed to call LLM: Error code: 422 - {'detail': [{'type': 'list_type', 'loc': ['body', 'messages', 'content'], 'msg': 'Input should be a valid list', 'input': 'You\\'re an expert linguist. You are provided with a table schema with a description in XML format.\\nYour task is to analyze the tabular context and, based on the information received, give a brief but semantically succinct definition for each HEADER, \\nits format features (how to interpret signs, abbreviations, or complex strings, such as \"A - B\"). \\nIf there are units of measurement in the EXAMPLES, then include them in the answer. \\n\\nThe output must be in json in the dictionary format {
:
}.\\n\\n######################\\n-Examples-\\n######################\\nExample 1:\\n\\n
\\n
\\n
\\n
\\n
\\n
\\n######################\\nOutput:\\n{\\n \"planet\": \"Имя собственное небесного тела в Солнечной системе, представленное в текстовом формате.\",\\n \"type\": \"Классификация планеты по ее физическому и химическому составу (например, \\'terrestrial\\' — каменистая или \\'gas giant\\' — газовый гигант).\",\\n \"moons\": \"Количественный показатель, обозначающий общее число подтвержденных естественных спутников планеты (целое число).\",\\n \"diameter_km\": \"Экваториальный диаметр небесного тела, выраженный в числовом значении. Единица измерения: километры (км).\",\\n \"gravity_ms2\": \"Ускорение свободного падения на поверхности планеты. Единица измерения: метры на секунду в квадрате ($$m/s^2$$).\"\\n}\\n######################\\nExample 2:\\n\\n
\\n
\\n
\\n######################\\nOutput:\\n{\\n \"title\": \"Официальное название литературного произведения, записанное в текстовом виде.\",\\n \"author\": \"Имя и фамилия автора (создателя) произведения, представленные в виде строки.\",\\n}\\n######################\\nExample 3:\\n\\n
\\n
\\n
\\n
\\n
\\n
\\n######################\\nOutput:\\n{\\n \"model\": \"Коммерческое наименование конкретного устройства, включающее название серии и порядковый номер.\",\\n \"brand\": \"Название компании-производителя (бренда), ответственной за выпуск устройства.\",\\n \"screen_size\": \"Размер диагонали дисплея устройства, представленный в виде десятичной дроби. Единица измерения: дюймы.\",\\n \"ram_gb\": \"Объем оперативной памяти, доступной для работы системы и приложений. Единица измерения: гигабайты (GB).\",\\n \"battery_mah\": \"Электрическая емкость аккумулятора устройства, определяющая время автономной работы. Единица измерения: миллиампер-часы (mAh).\"\\n}\\n\\n\\n######################\\n-Real Data-\\n######################\\n
\\n######################\\nOutput:\\n'}]}\n" + ] + }, + { + "ename": "KeyError", + "evalue": "'error'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mUnprocessableEntityError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[94], line 49\u001b[0m, in \u001b[0;36msend_messasge\u001b[0;34m(messages, base_url, api_key, model_name, **kwargs)\u001b[0m\n\u001b[1;32m 47\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mGenerating content with model: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mmodel_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m,)\n\u001b[0;32m---> 49\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[43mclient\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mchat\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcompletions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 50\u001b[0m \u001b[43m \u001b[49m\u001b[43mmessages\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmessages\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 51\u001b[0m \u001b[43m \u001b[49m\u001b[43mmodel\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmodel_name\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 52\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mget_kwargs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\u001b[43mclient\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mchat\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcompletions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 53\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 55\u001b[0m cleaned_responses \u001b[38;5;241m=\u001b[39m []\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/openai/_utils/_utils.py:286\u001b[0m, in \u001b[0;36mrequired_args..inner..wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 285\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(msg)\n\u001b[0;32m--> 286\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/openai/resources/chat/completions/completions.py:1189\u001b[0m, in \u001b[0;36mCompletions.create\u001b[0;34m(self, messages, model, audio, frequency_penalty, function_call, functions, logit_bias, logprobs, max_completion_tokens, max_tokens, metadata, modalities, n, parallel_tool_calls, prediction, presence_penalty, prompt_cache_key, prompt_cache_retention, reasoning_effort, response_format, safety_identifier, seed, service_tier, stop, store, stream, stream_options, temperature, tool_choice, tools, top_logprobs, top_p, user, verbosity, web_search_options, extra_headers, extra_query, extra_body, timeout)\u001b[0m\n\u001b[1;32m 1188\u001b[0m validate_response_format(response_format)\n\u001b[0;32m-> 1189\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_post\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1190\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m/chat/completions\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1191\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmaybe_transform\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1192\u001b[0m \u001b[43m \u001b[49m\u001b[43m{\u001b[49m\n\u001b[1;32m 1193\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmessages\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmessages\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1194\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmodel\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1195\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43maudio\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43maudio\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1196\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mfrequency_penalty\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mfrequency_penalty\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1197\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mfunction_call\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mfunction_call\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1198\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mfunctions\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mfunctions\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1199\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mlogit_bias\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mlogit_bias\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1200\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mlogprobs\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mlogprobs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1201\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmax_completion_tokens\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmax_completion_tokens\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1202\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmax_tokens\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmax_tokens\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1203\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmetadata\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmetadata\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1204\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmodalities\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmodalities\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1205\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mn\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1206\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mparallel_tool_calls\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mparallel_tool_calls\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1207\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mprediction\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mprediction\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1208\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mpresence_penalty\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mpresence_penalty\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1209\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mprompt_cache_key\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mprompt_cache_key\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1210\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mprompt_cache_retention\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mprompt_cache_retention\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1211\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mreasoning_effort\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mreasoning_effort\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1212\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mresponse_format\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mresponse_format\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1213\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43msafety_identifier\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43msafety_identifier\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1214\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mseed\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mseed\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1215\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mservice_tier\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mservice_tier\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1216\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mstop\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mstop\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1217\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mstore\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mstore\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1218\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mstream\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1219\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mstream_options\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1220\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtemperature\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtemperature\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1221\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtool_choice\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtool_choice\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1222\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtools\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtools\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1223\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtop_logprobs\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtop_logprobs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1224\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtop_p\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtop_p\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1225\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43muser\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43muser\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1226\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mverbosity\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mverbosity\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1227\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mweb_search_options\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mweb_search_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1228\u001b[0m \u001b[43m \u001b[49m\u001b[43m}\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1229\u001b[0m \u001b[43m \u001b[49m\u001b[43mcompletion_create_params\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mCompletionCreateParamsStreaming\u001b[49m\n\u001b[1;32m 1230\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\n\u001b[1;32m 1231\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01melse\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mcompletion_create_params\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mCompletionCreateParamsNonStreaming\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1232\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1233\u001b[0m \u001b[43m \u001b[49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmake_request_options\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1234\u001b[0m \u001b[43m \u001b[49m\u001b[43mextra_headers\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextra_headers\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mextra_query\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextra_query\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mextra_body\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextra_body\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\n\u001b[1;32m 1235\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1236\u001b[0m \u001b[43m \u001b[49m\u001b[43mcast_to\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mChatCompletion\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1237\u001b[0m \u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 1238\u001b[0m \u001b[43m \u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mStream\u001b[49m\u001b[43m[\u001b[49m\u001b[43mChatCompletionChunk\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1239\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/openai/_base_client.py:1259\u001b[0m, in \u001b[0;36mSyncAPIClient.post\u001b[0;34m(self, path, cast_to, body, options, files, stream, stream_cls)\u001b[0m\n\u001b[1;32m 1256\u001b[0m opts \u001b[38;5;241m=\u001b[39m FinalRequestOptions\u001b[38;5;241m.\u001b[39mconstruct(\n\u001b[1;32m 1257\u001b[0m method\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpost\u001b[39m\u001b[38;5;124m\"\u001b[39m, url\u001b[38;5;241m=\u001b[39mpath, json_data\u001b[38;5;241m=\u001b[39mbody, files\u001b[38;5;241m=\u001b[39mto_httpx_files(files), \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39moptions\n\u001b[1;32m 1258\u001b[0m )\n\u001b[0;32m-> 1259\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m cast(ResponseT, \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcast_to\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mopts\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream_cls\u001b[49m\u001b[43m)\u001b[49m)\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/openai/_base_client.py:1047\u001b[0m, in \u001b[0;36mSyncAPIClient.request\u001b[0;34m(self, cast_to, options, stream, stream_cls)\u001b[0m\n\u001b[1;32m 1046\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mRe-raising status error\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m-> 1047\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_make_status_error_from_response(err\u001b[38;5;241m.\u001b[39mresponse) \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1049\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n", + "\u001b[0;31mUnprocessableEntityError\u001b[0m: Error code: 422 - {'detail': [{'type': 'list_type', 'loc': ['body', 'messages', 'content'], 'msg': 'Input should be a valid list', 'input': 'You\\'re an expert linguist. You are provided with a table schema with a description in XML format.\\nYour task is to analyze the tabular context and, based on the information received, give a brief but semantically succinct definition for each HEADER, \\nits format features (how to interpret signs, abbreviations, or complex strings, such as \"A - B\"). \\nIf there are units of measurement in the EXAMPLES, then include them in the answer. \\n\\nThe output must be in json in the dictionary format {
:
}.\\n\\n######################\\n-Examples-\\n######################\\nExample 1:\\n\\n
\\n
\\n
\\n
\\n
\\n
\\n######################\\nOutput:\\n{\\n \"planet\": \"Имя собственное небесного тела в Солнечной системе, представленное в текстовом формате.\",\\n \"type\": \"Классификация планеты по ее физическому и химическому составу (например, \\'terrestrial\\' — каменистая или \\'gas giant\\' — газовый гигант).\",\\n \"moons\": \"Количественный показатель, обозначающий общее число подтвержденных естественных спутников планеты (целое число).\",\\n \"diameter_km\": \"Экваториальный диаметр небесного тела, выраженный в числовом значении. Единица измерения: километры (км).\",\\n \"gravity_ms2\": \"Ускорение свободного падения на поверхности планеты. Единица измерения: метры на секунду в квадрате ($$m/s^2$$).\"\\n}\\n######################\\nExample 2:\\n\\n
\\n
\\n
\\n######################\\nOutput:\\n{\\n \"title\": \"Официальное название литературного произведения, записанное в текстовом виде.\",\\n \"author\": \"Имя и фамилия автора (создателя) произведения, представленные в виде строки.\",\\n}\\n######################\\nExample 3:\\n\\n
\\n
\\n
\\n
\\n
\\n
\\n######################\\nOutput:\\n{\\n \"model\": \"Коммерческое наименование конкретного устройства, включающее название серии и порядковый номер.\",\\n \"brand\": \"Название компании-производителя (бренда), ответственной за выпуск устройства.\",\\n \"screen_size\": \"Размер диагонали дисплея устройства, представленный в виде десятичной дроби. Единица измерения: дюймы.\",\\n \"ram_gb\": \"Объем оперативной памяти, доступной для работы системы и приложений. Единица измерения: гигабайты (GB).\",\\n \"battery_mah\": \"Электрическая емкость аккумулятора устройства, определяющая время автономной работы. Единица измерения: миллиампер-часы (mAh).\"\\n}\\n\\n\\n######################\\n-Real Data-\\n######################\\n
\\n######################\\nOutput:\\n'}]}", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[102], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43msend_messasge\u001b[49m\u001b[43m(\u001b[49m\u001b[43m{\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mrole\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43muser\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mcontent\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43msystem_prompt\u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43mprompt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mformat\u001b[49m\u001b[43m(\u001b[49m\u001b[43minput_text\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdataset\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m14\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43msemtab_xml_attributes_exampples_description_top1_tresh50\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[43m}\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2\u001b[0m \u001b[43m \u001b[49m\u001b[43mmodel_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mQwen/Qwen3-VL-32B-Instruct\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43mbase_url\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mhttp://127.0.0.1:8888/v1\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n", + "Cell \u001b[0;32mIn[94], line 72\u001b[0m, in \u001b[0;36msend_messasge\u001b[0;34m(messages, base_url, api_key, model_name, **kwargs)\u001b[0m\n\u001b[1;32m 70\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(e, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mresponse\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[1;32m 71\u001b[0m error_info \u001b[38;5;241m=\u001b[39m e\u001b[38;5;241m.\u001b[39mresponse\u001b[38;5;241m.\u001b[39mjson() \n\u001b[0;32m---> 72\u001b[0m code_value \u001b[38;5;241m=\u001b[39m \u001b[43merror_info\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43merror\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcode\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[1;32m 73\u001b[0m \u001b[38;5;28mprint\u001b[39m(code_value)\n\u001b[1;32m 74\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", + "\u001b[0;31mKeyError\u001b[0m: 'error'" + ] + } + ], "source": [ - "pattern = r'\"PANDA\":\\s*(.+?)(?:\\n|$)'\n", - " \n", - " # Используем поиск с флагом re.DOTALL для работы с многострочным кодом\n", - "match = re.search(pattern, '''Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Here is a Python pandas code snippet that checks if Haroldo is mentioned as a Brazil scorer for more than one game:\n", - "```json\n", - "\"PANDA\": \"df['brazil scorers'].str.contains('Haroldo', na=False).sum() > 1\"\n", - "```\n", - "This code uses the pandas `str.contains` method to check if 'Haroldo' is in the 'brazil scorers' column. The `na=False` parameter ensures that NaN values are not considered as matches. The `sum()` method is then used to count the number of True values returned by the `contains` method, which corresponds to the number of times 'Haroldo' is mentioned as a Brazil scorer. The result is checked if it's greater than 1.''',\n", - " re.DOTALL)" + "send_messasge({\"role\": \"user\",\"content\": system_prompt+prompt.format(input_text=dataset[14]['semtab_xml_attributes_exampples_description_top1_tresh50'])},\n", + " model_name='Qwen/Qwen3-VL-32B-Instruct',base_url = \"http://127.0.0.1:8888/v1\")" ] }, { "cell_type": "code", - "execution_count": 67, - "id": "93406b43-2aca-4032-981a-45694798cb58", - "metadata": {}, - "outputs": [], + "execution_count": 106, + "id": "fc55cb5a-5edc-4a45-aec4-0a55cc432220", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: Qwen/Qwen3-VL-32B-Instruct\n" + ] + } + ], "source": [ - "code = match.group(1).strip()" + "# 1. Склеиваем весь текст в одну большую строку\n", + "final_text = system_prompt + prompt.format(\n", + " input_text=dataset[14]['semtab_xml_attributes_exampples_description_top1_tresh50']\n", + ")\n", + "\n", + "# 2. НЕСТАНДАРТНЫЙ ФОРМАТ СПЕЦИАЛЬНО ДЛЯ ТВОЕГО СЕРВЕРА\n", + "# messages - это СЛОВАРЬ (без квадратных скобок снаружи)\n", + "# content - это СПИСОК (с квадратными скобками внутри)\n", + "custom_messages = {\n", + " \"role\": \"user\",\n", + " \"content\": [\n", + " {\n", + " \"type\": \"text\",\n", + " \"text\": final_text\n", + " }\n", + " ]\n", + "}\n", + "\n", + "# 3. Отправляем запрос\n", + "success, responses = send_messasge(\n", + " messages=custom_messages, # Передаем словарь, как того требует сервер\n", + " model_name='Qwen/Qwen3-VL-32B-Instruct',\n", + " base_url=\"http://127.0.0.1:8888/v1\"\n", + ")" ] }, { "cell_type": "code", - "execution_count": 68, - "id": "1cc3b8b0-cf12-439f-8f3f-d8e6b39cc13d", - "metadata": {}, + "execution_count": 109, + "id": "27e1247f-1438-4f84-88b8-ce3f4e98ff7d", + "metadata": { + "scrolled": true + }, "outputs": [ { - "data": { - "text/plain": [ - "'\"df[\\'brazil scorers\\'].str.contains(\\'Haroldo\\', na=False).sum() > 1\"'" - ] - }, - "execution_count": 68, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "We are given a table description: \"united states national rugby union team\"\n", + " The headers and examples are:\n", + " player: examples = [\"todd clever\", \"philip eloff\", \"mike hercus\"]\n", + " span: examples = [\"2002 - 2009\", \"2003 -\", \"1992 - 2000\"]\n", + " start: examples = [28, 34, 45]\n", + " tries: examples = [9, 10, 11]\n", + " conv: examples = [0, 0, 0]\n", + " pens: examples = [0, 0, 0]\n", + " drop: examples = [1, 0, 0]\n", + "\n", + " We are to define each header in Russian, with:\n", + " - a brief but semantically succinct definition\n", + " - format features (if any, such as how to interpret signs, abbreviations, complex strings)\n", + " - if there are units of measurement in the examples, include them\n", + "\n", + " Steps for each header:\n", + "\n", + " 1. \"player\":\n", + " - Examples: names of players (in lowercase, but that's just representation; they are proper names)\n", + " - Definition: The name of the rugby player (first and last name) who is a member of the US national team.\n", + " - Format: Text string, typically in the format \"first name last name\" (as seen in the examples).\n", + "\n", + " 2. \"span\":\n", + " - Examples: \"2002 - 2009\", \"2003 -\", \"1992 - 2000\"\n", + " - This represents the time period during which the player was active on the national team.\n", + " - Format: A string in the format \"start_year - end_year\", where end_year might be omitted (as in \"2003 -\") to indicate the player is still active (or the data was current up to the time of the table).\n", + " - Note: The dash is a separator and the years are in the format of four-digit years.\n", + "\n", + " 3. \"start\":\n", + " - Examples: [28, 34, 45] (all integers)\n", + " - In rugby, \"start\" likely refers to the number of matches started (i.e., the number of games the player started as a starter).\n", + " - Unit: Count (no specific unit, but it's a count of matches). However, note that in the context of rugby, it is a count of appearances as a starter? But the header is \"start\", so we must be cautious.\n", + "\n", + " However, looking at rugby statistics:\n", + " - \"Starts\" in rugby usually means the number of matches in which the player started (i.e., was in the starting lineup).\n", + "\n", + " But note: in the examples, the values are 28, 34, 45. So we can say:\n", + " \"Количество матчей, в которых игрок начинал игру (т.е. был в стартовой линейке).\"\n", + "\n", + " However, let's check the other headers: tries, conv, pens, drop are all known rugby statistics.\n", + "\n", + " 4. \"tries\":\n", + " - Examples: [9, 10, 11] (integers)\n", + " - In rugby, a \"try\" is a method of scoring (4 points). So this is the total number of tries scored by the player.\n", + " - Definition: \"Количество заработанных очков за счет 'tries' (в рэгби 'try' — это вид гола, который приносит 5 очков? Actually, note: in rugby union, a try is worth 5 points, but the term \"try\" refers to the action). However, the header is \"tries\", so it's the count of tries (the scoring action).\"\n", + "\n", + " But wait: the value is the count of tries (the number of times the player scored a try). So we say:\n", + " \"Количество забитых 'tries' (в рэгби 'try' — это действие, при котором игрок перебрасывает мяч через линию ворот соперника, принося 5 очков).\"\n", + "\n", + " However, note that the problem says \"brief but semantically succinct\". So we can say:\n", + " \"Количество забитых 'tries' (вид гола в рэгби, оцениваемый в 5 очков).\"\n", + "\n", + " But actually, the header is \"tries\", meaning the count. So the unit is the count (no physical unit, but we can say \"количество\").\n", + "\n", + " 5. \"conv\":\n", + " - Examples: [0, 0, 0] (integers)\n", + " - In rugby, \"conv\" is short for \"conversion\" (a kick after a try to score 2 points). \n", + " - Definition: \"Количество конверсий (после 'try' игрок может попытаться забить конверсионный удар, который приносит 2 очка).\"\n", + "\n", + " 6. \"pens\":\n", + " - Examples: [0, 0, 0] (integers)\n", + " - \"pens\" is short for \"penalties\" (a kick for a penalty, worth 3 points).\n", + " - Definition: \"Количество пенальти (ударов по воротам за нарушение, приносящих 3 очка).\"\n", + "\n", + " 7. \"drop\":\n", + " - Examples: [1, 0, 0] (integers)\n", + " - \"drop\" is short for \"drop goal\" (a drop kick for goal, worth 3 points).\n", + " - Definition: \"Количество дроп-голов (ударов, выполненных после падения мяча, приносящих 3 очка).\"\n", + "\n", + " Now, note: the problem says to write the definition in Russian and to include units if present.\n", + "\n", + " For the headers that are counts (start, tries, conv, pens, drop), the unit is \"count\" (количество) and we don't have a physical unit (like meters, seconds) but we are counting events. However, we can note that they are integer counts.\n", + "\n", + " But note the examples: they are integers. So we can say \"целое число\" (integer number) for the format.\n", + "\n", + " However, the instructions say: \"if there are units of measurement in the EXAMPLES, then include them\". In the examples, the numbers for start, tries, etc. are just counts, so no physical unit (like km, m/s^2). But in the context of rugby, we can say that the values are counts (without a physical unit, but they are numbers of events).\n", + "\n", + " But looking at the examples in the provided examples (like Example 3: \"screen_size\" has unit \"inches\"), we see that when the unit is clear from the context (e.g., in the header name) we state it. However, for counts, we don't have a unit. So we just say \"количество\".\n", + "\n", + " However, note that in the output of Example 1, for \"moons\" it says \"целое число\" and for \"diameter_km\" it says \"Единица измерения: километры (км)\".\n", + "\n", + " For the count headers, we don't have a unit in the examples (they are just numbers) but we know they are counts. So we can write:\n", + "\n", + " \"start\": \"Количество матчей, в которых игрок начинал игру (стартовал). Целое число.\"\n", + "\n", + " But note: the problem says \"if there are units of measurement in the EXAMPLES\". Since the examples for \"start\" are just numbers (28, 34, 45) without any unit symbol (like \"28 matches\"), then we don't have a unit. However, the context (the header name) implies a count. So we don't need to specify a unit (like \"matches\") because the examples don't have a unit. But the problem says: \"if there are units of measurement in the EXAMPLES\" — meaning if the example string includes the unit, then we include it. In this case, the examples for the count headers are just numbers without unit.\n", + "\n", + " How did Example 1 handle \"moons\"? \n", + " \"moons\": \"Количественный показатель, обозначающий общее число подтвержденных естественных спутников планеты (целое число).\"\n", + "\n", + " So we can do similarly: for the count headers, we say \"целое число\" (which is the format feature) but without a unit (because the example doesn't have a unit).\n", + "\n", + " However, note: the example for \"diameter_km\" in Example 1 had the unit in the header name (with the suffix \"_km\") and the examples were numbers. So we had to state the unit. For \"moons\", the header name is \"moons\" and the examples are numbers without a unit, so we don't state a unit (we just say \"целое число\").\n", + "\n", + " Therefore, for our count headers:\n", + "\n", + " We will say: \"Количество [что-то]. Целое число.\"\n", + "\n", + " But note: the header name \"start\" is a bit ambiguous. In rugby, \"start\" in the context of a player's career usually means the number of matches started (i.e., the number of times the player was in the starting lineup). So:\n", + "\n", + " \"start\": \"Количество матчей, в которых игрок стартовал (был в стартовой линейке). Целое число.\"\n", + "\n", + " However, the problem says: \"brief but semantically succinct\". So we should be as concise as possible.\n", + "\n", + " Let's write the definitions:\n", + "\n", + " player: \n", + " \"Имя игрока (имя и фамилия) в формате текстовой строки.\"\n", + "\n", + " span:\n", + " \"Период участия игрока в составе национальной сборной. Формат: 'ГГГГ - ГГГГ' (где первая дата — начало, вторая — конец; если конец отсутствует, то игрок продолжает выступать).\"\n", + "\n", + " start:\n", + " \"Количество матчей, в которых игрок стартовал (был в стартовой линейке). Целое число.\"\n", + "\n", + " tries:\n", + " \"Количество забитых 'tries' (действие в рэгби, приносящее 5 очков). Целое число.\"\n", + "\n", + " conv:\n", + " \"Количество конверсий (ударов после 'try', приносящих 2 очка). Целое число.\"\n", + "\n", + " pens:\n", + " \"Количество пенальти (ударов за нарушение, приносящих 3 очка). Целое число.\"\n", + "\n", + " drop:\n", + " \"Количество дроп-голов (ударов после падения мяча, приносящих 3 очка). Целое число.\"\n", + "\n", + " But note: the examples for conv, pens, drop are 0,0,0 and 1,0,0. So the format is integer and non-negative.\n", + "\n", + " However, the problem says: \"if there are units of measurement in the EXAMPLES\" — in the examples for these headers, the numbers are without units (so no unit to include). But the context (the sport) tells us what they are. We don't have to state the points because the examples don't have the unit (they are just numbers). However, the definition of the statistic (like \"try\") is part of the description.\n", + "\n", + " But note: in the examples of the problem (Example 1) for \"diameter_km\", the unit was included because the header name had a suffix (and the examples were numbers without the unit, but the unit was known from the header). Similarly, in Example 3, the unit was taken from the header name (e.g., \"ram_gb\" -> \"гигабайты (GB)\").\n", + "\n", + " In our case, for the count headers, we don't have a unit (it's a count) and the examples are just numbers. So we don't include a unit (like \"matches\" or \"points\") because the examples don't have it. However, the problem says: \"if there are units of measurement in the EXAMPLES\" — meaning if the example string (like \"12756\" in the diameter example) is without the unit, but the context (the header name) implies a unit, then we include it? But in Example 1, for \"moons\", the header name is \"moons\" and the example is [1,2,95] — no unit. So they didn't include a unit for \"moons\". Similarly, for \"diameter_km\", the example was [12756, ...] without the unit, but the header name had \"km\", so they included the unit in the description.\n", + "\n", + " How about for \"start\"? The header name is \"start\" — it doesn't have a unit suffix. But we know from context that it's a count of matches. However, the examples are numbers without a unit. So we don't state a unit. We just say \"целое число\" (which is the format feature) and the definition is in terms of the event.\n", + "\n", + " So we stick to:\n", + "\n", + " For \"start\", \"tries\", etc.: we don't state a unit (because the examples are just numbers) but we describe the event.\n", + "\n", + " Now, let's write the definitions in Russian.\n", + "\n", + " Important: the output must be in a JSON dictionary in the format: {
:
}\n", + "\n", + " We'll write the descriptions in Russian, as in the examples.\n", + "\n", + " Let's do it:\n", + "\n", + " \"player\": \"Имя игрока (имя и фамилия) в формате текстовой строки.\",\n", + " \"span\": \"Период участия игрока в составе национальной сборной. Формат: 'ГГГГ - ГГГГ' (где первая дата — начало, вторая — конец; если конец отсутствует, то игрок продолжает выступать).\",\n", + " \"start\": \"Количество матчей, в которых игрок стартовал (был в стартовой линейке). Целое число.\",\n", + " \"tries\": \"Количество забитых 'tries' (действие в рэгби, приносящее 5 очков). Целое число.\",\n", + " \"conv\": \"Количество конверсий (ударов после 'try', приносящих 2 очка). Целое число.\",\n", + " \"pens\": \"Количество пенальти (ударов за нарушение, приносящих 3 очка). Целое число.\",\n", + " \"drop\": \"Количество дроп-голов (ударов после падения мяча, приносящих 3 очка). Целое число.\"\n", + "\n", + " However, note: the examples for \"span\" are in the format \"2002 - 2009\", so we describe the format.\n", + "\n", + " But wait: in the examples, the second example for span is \"2003 -\" (without the end year). So we note that.\n", + "\n", + " But note: the problem says to be brief. We can make the format description a bit shorter? But the example 1 for \"diameter_km\" had a detailed format description? Actually, for \"diameter_km\", they didn't have a format description (it was just a number). For \"span\", we have a complex string, so we describe the format.\n", + "\n", + " How about:\n", + "\n", + " \"span\": \"Период выступлений игрока за национальную сборную в формате 'ГГГГ - ГГГГ' (например, '2002 - 2009'); если дата окончания отсутствует, это означает, что игрок продолжает выступать.\"\n", + "\n", + " But note: the example 1 for \"type\" had: \"Классификация планеты по ее физическому и химическому составу (например, 'terrestrial' — каменистая или 'gas giant' — газовый гигант).\"\n", + "\n", + " So we can use a similar structure for \"span\": \n", + "\n", + " \"span\": \"Период выступлений игрока за национальную сборную (например, '2002 - 2009' — с 2002 по 2009 год; '2003 -' — с 2003 года по настоящее время).\"\n", + "\n", + " However, the problem says: \"brief but semantically succinct\". We don't need to give the example in the description? The examples in the description of the header (as in the XML) are provided, but we are to write a definition. The example 1 for \"type\" included an example in the definition. So we can do that.\n", + "\n", + " But note: the problem says \"based on the information received\". We have the examples. So we can use them to illustrate.\n", + "\n", + " However, the output examples (like Example 1) did not use the examples from the input in the definition (they used the examples in the input to form the definition, but not by repeating the example string). In Example 1, for \"type\", they wrote: (например, 'terrestrial' — каменистая или 'gas giant' — газовый гигант). So they used the examples to explain the meaning.\n", + "\n", + " Similarly, for \"span\", we can do:\n", + "\n", + " \"span\": \"Период выступлений игрока за национальную сборную, представленный в формате 'ГГГГ - ГГГГ', где отсутствие года окончания (например, '2003 -') означает, что игрок продолжает выступать.\"\n", + "\n", + " But note: we don't have to use the exact example string? We can just describe the format.\n", + "\n", + " Since the problem says \"semantically succinct\", we can write:\n", + "\n", + " \"span\": \"Период выступлений игрока за национальную сборную в формате 'начальный год - конечный год' (конечный год может отсутствовать, что указывает на текущее участие).\"\n", + "\n", + " Now, let's write the final definitions.\n", + "\n", + " We'll make them as concise as possible.\n", + "\n", + " Final:\n", + "\n", + " player: \"Имя игрока (имя и фамилия) в текстовом формате.\"\n", + " span: \"Период выступлений игрока за национальную сборную в формате 'ГГГГ - ГГГГ' (если конечный год отсутствует, то игрок продолжает выступать).\"\n", + " start: \"Количество матчей, в которых игрок стартовал (был в стартовой линейке). Целое число.\"\n", + " tries: \"Количество забитых 'tries' (действие в рэгби, приносящее 5 очков). Целое число.\"\n", + " conv: \"Количество конверсий (ударов после 'try', приносящих 2 очка). Целое число.\"\n", + " pens: \"Количество пенальти (ударов за нарушение, приносящих 3 очка). Целое число.\"\n", + " drop: \"Количество дроп-голов (ударов после падения мяча, приносящих 3 очка). Целое число.\"\n", + "\n", + " However, note: the examples for \"start\" are [28, 34, 45] — these are the number of starts. The term \"start\" in rugby for a player's career is the number of times the player started a match (i.e., was in the starting 15). So we are correct.\n", + "\n", + " But wait: in rugby, the term \"start\" is used for the starting lineup? Yes.\n", + "\n", + " However, note: the header is named \"start\", which is a bit ambiguous. But in the context of the table (US national rugby team) and the other headers (which are all statistics), it is standard.\n", + "\n", + " Let's write the JSON.\n", + "\n", + "\n", + "{\n", + " \"player\": \"Имя игрока (имя и фамилия) в текстовом формате.\",\n", + " \"span\": \"Период выступлений игрока за национальную сборную в формате 'ГГГГ - ГГГГ' (отсутствие конечного года, например, '2003 -', указывает на текущее участие).\",\n", + " \"start\": \"Количество матчей, в которых игрок стартовал (был в стартовой линейке). Целое число.\",\n", + " \"tries\": \"Количество забитых 'tries' (действие в рэгби, приносящее 5 очков). Целое число.\",\n", + " \"conv\": \"Количество конверсий (ударов после 'try', приносящих 2 очка). Целое число.\",\n", + " \"pens\": \"Количество пенальти (ударов за нарушение, приносящих 3 очка). Целое число.\",\n", + " \"drop\": \"Количество дроп-голов (ударов после падения мяча, приносящих 3 очка). Целое число.\"\n", + "}\n" + ] } ], "source": [ - "code" + "print(responses[0])" ] }, { "cell_type": "code", - "execution_count": 73, - "id": "ad438ab7-8c4a-4d5b-ac87-321e210c5c69", + "execution_count": 91, + "id": "690bb801-262a-4454-8fd3-9aa37ff07744", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "We are given a table description: \"united states national rugby union team\"\n", + " The headers and examples are:\n", + " player: examples: [\"todd clever\", \"philip eloff\", \"mike hercus\"]\n", + " span: examples: [\"2002 - 2009\", \"2003 -\", \"1992 - 2000\"]\n", + " start: examples: [28, 34, 45]\n", + " tries: examples: [9, 10, 11]\n", + " conv: examples: [0, 0, 0]\n", + " pens: examples: [0, 0, 0]\n", + " drop: examples: [1, 0, 0]\n", + "\n", + " We need to define each header in Russian, including:\n", + " - A brief but semantically succinct definition.\n", + " - Format features (how to interpret signs, abbreviations, or complex strings, e.g., \"A - B\")\n", + " - If there are units of measurement in the examples, include them.\n", + "\n", + " Steps for each header:\n", + "\n", + " 1. \"player\":\n", + " - Examples: names of players (in lowercase, but note: in the examples they are in title case? Actually, the examples are in lowercase with first letter of each word capital? But in the example string it's given as \"todd clever\", which is actually \"Todd Clever\" but written in lowercase in the example? However, in the XML it's in quotes and in lowercase. But note: the examples are given as strings in the XML, and they are in the format of the actual data. We see that the examples are: \"todd clever\", \"philip eloff\", \"mike hercus\". So we have to describe that it's the name of the player, in text format.\n", + "\n", + " Definition: \n", + " \"Имя и фамилия игрока, представленные в виде строки (в нижнем регистре, но с заглавной буквой у первого символа каждого слова).\"\n", + "\n", + " However, note: the examples are in lowercase? Actually, the XML example: \"todd clever\" - but in reality, names are usually capitalized. But the example string is given as is. So we can say: \n", + " \"Имя и фамилия игрока, записанные в текстовом формате (в нижнем регистре, но с заглавной буквой у первого символа каждого слова).\"\n", + "\n", + " But wait, the example \"todd clever\" is actually written with a lowercase 't'? That might be a data issue, but we have to describe what we see.\n", + "\n", + " Alternatively, we can say: \"Имя и фамилия игрока, представленные в виде строки (в формате: имя_в_нижнем_регистре, фамилия_в_нижнем_регистре).\"\n", + "\n", + " However, the problem says: \"brief but semantically succinct\". So:\n", + "\n", + " \"Имя и фамилия игрока, записанные в текстовом виде (в формате: имя фамилия, все буквы в нижнем регистре).\"\n", + "\n", + " But note: the example \"todd clever\" is two words, so we can say: \"Имя и фамилия игрока, разделенные пробелом, в нижнем регистре (без заглавных букв).\"\n", + "\n", + " However, the example \"todd clever\" - the first letter of each word is lowercase? Actually, the example string is given as \"todd\" (with t in lower) and \"clever\" (with c in lower). So it's all lowercase.\n", + "\n", + " But in reality, names are written with capital letters. However, the data is provided in lowercase. So we describe as is.\n", + "\n", + " Let's look at the examples: \n", + " \"todd clever\", \"philip eloff\", \"mike hercus\"\n", + "\n", + " So: \n", + " \"Имя и фамилия игрока, представленные в виде строки, состоящей из двух слов (имя и фамилия), разделенных пробелом, в нижнем регистре.\"\n", + "\n", + " 2. \"span\":\n", + " - Examples: \"2002 - 2009\", \"2003 -\", \"1992 - 2000\"\n", + " - Format: This is a string that represents a time period. The pattern is: \n", + " [start_year] - [end_year] \n", + " but if the player is still active, the end year is missing (e.g., \"2003 -\" meaning from 2003 to present).\n", + "\n", + " Definition:\n", + " \"Период времени, в течение которого игрок выступал за национальную сборную. Формат: 'год_начала - год_окончания' (если игрок больше не выступает) или 'год_начала -' (если игрок все еще в составе). Годы представлены в формате четырехзначного числа.\"\n", + "\n", + " But note: the examples have a space after the dash? Actually, in the example: \"2002 - 2009\" -> there is a space on both sides of the dash? But the example string in the XML is \"2002 - 2009\" (with a space after the 2002 and before the 2009? Actually, the string is: \"2002 - 2009\" -> which is \"2002\" then space, then dash, then space, then \"2009\". So the pattern is: [year] [space] - [space] [year] or [year] [space] - [space] (for the current active).\n", + "\n", + " However, the example \"2003 -\" has a space after the dash? Actually, in the example: \"2003 -\" -> it's \"2003\" then space, then dash, then nothing? But in the XML it's written as \"2003 -\" (with a space after the dash? Actually, the string is \"2003 -\", meaning: 2003 followed by a space and then a dash and then a space? But wait, the example string is \"2003 -\" (with a space after the 2003 and then a dash and then nothing? But in the XML it's written as \"2003 -\" -> which in the string would be \"2003 -\", so it's 2003, space, dash, and then no space at the end? Actually, the example: \"2003 -\" has a space after the 2003? But the dash is followed by a space? The example string is: \"2003 -\" -> it's 2003, then a space, then a dash, and then the string ends? Or is it 2003, space, dash, and then a space? The example string in the XML is: \"2003 -\" (without a trailing space) but the example \"2002 - 2009\" has a space after the dash? Actually, the example string for the first is: \"2002 - 2009\" -> that has a space after the 2002, then a dash, then a space, then 2009. So the pattern is: [year] [space] - [space] [year] (if end year is present) or [year] [space] - (if end year is not present).\n", + "\n", + " However, note the example \"2003 -\" -> it's \"2003 -\" meaning: 2003, space, then dash, and then no space? But the example string in the XML is written as \"2003 -\" (which in the string would be 2003 followed by a space and then a dash, and then the string ends? So it's two characters: space and dash? Actually, the string is \"2003 -\", which is 6 characters: '2','0','0','3',' ','-'. So the dash is the last character? But then the example \"1992 - 2000\" is 11 characters? \n", + "\n", + " We can describe it as: \n", + " \"Период выступлений игрока за сборную, представленный в формате: 'YYYY - YYYY' (если игрок завершил выступления) или 'YYYY -' (если игрок все еще в составе). Годы указаны в четырехзначном формате.\"\n", + "\n", + " 3. \"start\":\n", + " - Examples: [28, 34, 45] -> integers\n", + " - What does this mean? In rugby, \"start\" might refer to the number of starts (i.e., the number of games in which the player started). But note: the context is the national rugby team. So:\n", + "\n", + " \"Количество матчей, в которых игрок вышел в стартовом составе.\"\n", + "\n", + " And the unit: it's a count (no unit, but it's a number). So we say: \"Целое число, обозначающее количество стартовых игр.\"\n", + "\n", + " 4. \"tries\":\n", + " - Examples: [9, 10, 11] -> integers\n", + " - In rugby, a \"try\" is a way of scoring (4 points). So:\n", + " \"Количество заработанных 'tries' (попыток) в матче, при которых игрок касается мяча в зоне соперника. Целое число.\"\n", + "\n", + " 5. \"conv\":\n", + " - Examples: [0, 0, 0] -> integers\n", + " - In rugby, \"conv\" likely stands for \"conversions\". A conversion is a kick after a try (2 points). So:\n", + " \"Количество конверсий (после попытки), выполненных игроком. Целое число.\"\n", + "\n", + " 6. \"pens\":\n", + " - Examples: [0, 0, 0] -> integers\n", + " - \"pens\" likely stands for \"penalties\". A penalty kick (3 points). So:\n", + " \"Количество пенальти (пенальти-киков), выполненных игроком. Целое число.\"\n", + "\n", + " 7. \"drop\":\n", + " - Examples: [1, 0, 0] -> integers\n", + " - \"drop\" likely stands for \"drop goals\" (a kick from the ground, 3 points). So:\n", + " \"Количество дроп-голов (дополнительных киков), выполненных игроком. Целое число.\"\n", + "\n", + " Now, let's write the definitions in Russian, as per the examples.\n", + "\n", + " Important: The output must be in JSON dictionary with the header name as key and the string as value.\n", + "\n", + " Let's write for each:\n", + "\n", + " \"player\": \"Имя и фамилия игрока, представленные в виде строки, состоящей из двух слов (имя и фамилия), разделенных пробелом, в нижнем регистре.\"\n", + " \"span\": \"Период выступлений игрока за национальную сборную, представленный в формате: 'YYYY - YYYY' (если игрок завершил выступления) или 'YYYY -' (если игрок все еще в составе). Годы указаны в четырехзначном формате.\"\n", + " \"start\": \"Количество матчей, в которых игрок вышел в стартовом составе. Целое число.\"\n", + " \"tries\": \"Количество заработанных попыток (tries) в матче. Целое число.\"\n", + " \"conv\": \"Количество конверсий (после попытки), выполненных игроком. Целое число.\"\n", + " \"pens\": \"Количество пенальти (пенальти-киков), выполненных игроком. Целое число.\"\n", + " \"drop\": \"Количество дроп-голов (дополнительных киков), выполненных игроком. Целое число.\"\n", + "\n", + " But note: the examples for \"start\", \"tries\", etc. are integers without units. So we don't have to specify a unit (like in Example 1 for \"diameter_km\" we had to say \"км\"). However, for the rugby statistics, the unit is \"count\" (which is a number) so we can say \"Целое число\" (integer number) but note: the examples are non-negative integers.\n", + "\n", + " However, the problem says: \"If there are units of measurement in the EXAMPLES, then include them in the answer.\" Since the examples are just numbers (without any unit symbol), we don't have a unit. But the meaning is a count (so we can say it's a count, but the problem doesn't require to say \"count\" as a unit? Actually, in the examples, the numbers are counts. But in the output examples, for \"moons\" they said \"целое число\" and for \"diameter_km\" they said \"Единица измерения: километры (км)\". So for the rugby stats, since the numbers are counts (without a physical unit), we can say \"Целое число\" but without a unit? However, the examples in the problem for \"moons\" did not have a unit (it was just a count) and they wrote: \"Количественный показатель, обозначающий общее число подтвержденных естественных спутников планеты (целое число).\"\n", + "\n", + " So we can write for \"start\": \"Количество матчей, в которых игрок вышел в стартовом составе (целое число).\"\n", + "\n", + " But note: the example for \"moons\" in Example 1: \"Количественный показатель, обозначающий общее число подтвержденных естественных спутников планеты (целое число).\"\n", + "\n", + " So we can follow the same pattern.\n", + "\n", + " Let's adjust:\n", + "\n", + " \"player\": \"Имя и фамилия игрока, представленные в виде строки (имя и фамилия в нижнем регистре, разделенные пробелом).\"\n", + " \"span\": \"Период выступлений игрока за сборную, представленный в формате: 'YYYY - YYYY' (если игрок завершил выступления) или 'YYYY -' (если игрок все еще в составе), где YYYY — четырехзначный год.\"\n", + " \"start\": \"Количество матчей, в которых игрок вышел в стартовом составе (целое число).\"\n", + " \"tries\": \"Количество заработанных попыток (tries) в матче (целое число).\"\n", + " \"conv\": \"Количество конверсий (после попытки), выполненных игроком (целое число).\"\n", + " \"pens\": \"Количество пенальти (пенальти-киков), выполненных игроком (целое число).\"\n", + " \"drop\": \"Количество дроп-голов (дополнительных киков), выполненных игроком (целое число).\"\n", + "\n", + " However, note the example for \"moons\" in Example 1: they didn't say \"целое число\" in the middle, but at the end in parentheses. But in the example output for \"moons\" it was: \"Количественный показатель, обозначающий общее число подтвержденных естественных спутников планеты (целое число).\"\n", + "\n", + " So we can do the same.\n", + "\n", + " But note: the problem says \"semantically succinct\". We don't need to over-explain, but we must be clear.\n", + "\n", + " Now, let's write the JSON.\n", + "\n", + " Important: The keys must be exactly the header names (in English, as given: \"player\", \"span\", etc.)\n", + "\n", + " Let's write the dictionary:\n", + "\n", + "{\n", + " \"player\": \"Имя и фамилия игрока, представленные в виде строки (имя и фамилия в нижнем регистре, разделенные пробелом).\",\n", + " \"span\": \"Период выступлений игрока за сборную, представленный в формате: 'YYYY - YYYY' (если игрок завершил выступления) или 'YYYY -' (если игрок все еще в составе), где YYYY — четырехзначный год.\",\n", + " \"start\": \"Количество матчей, в которых игрок вышел в стартовом составе (целое число).\",\n", + " \"tries\": \"Количество заработанных попыток (tries) в матче (целое число).\",\n", + " \"conv\": \"Количество конверсий (после попытки), выполненных игроком (целое число).\",\n", + " \"pens\": \"Количество пенальти (пенальти-киков), выполненных игроком (целое число).\",\n", + " \"drop\": \"Количество дроп-голов (дополнительных киков), выполненных игроком (целое число).\"\n", + "}\n", + "\n", + " However, note: the problem says \"If there are units of measurement in the EXAMPLES, then include them in the answer.\" \n", + " - In \"player\", \"span\", there are no units (they are strings). \n", + " - In \"start\", \"tries\", \"conv\", \"pens\", \"drop\", the examples are numbers without units (they are counts). So we don't have a unit to specify (like \"m/s^2\" in Example 1). But note: the examples in the problem for \"moons\" (in Example 1) were just numbers and they said \"(целое число)\" which is a type, not a unit. The problem says \"units of measurement\", so we only add if the examples show a unit (like \"12756\" for \"diameter_km\" and then we see \"км\" in the output). \n", + "\n", + " But in our case, the examples for \"start\", etc. are just numbers (without a unit symbol). So we don't have a unit to write. We only note that the value is an integer.\n", + "\n", + " Therefore, the above is acceptable.\n", + "\n", + " Let's check the format for \"span\" in the examples: \n", + " The examples: \"2002 - 2009\", \"2003 -\", \"1992 - 2000\"\n", + "\n", + " We have to note that the dash is used to separate the years and that the end year may be absent (meaning current). Also, the years are four-digit.\n", + "\n", + " Now, we output the JSON.\n", + "\n", + "\n", + "{\n", + " \"player\": \"Имя и фамилия игрока, представленные в виде строки (имя и фамилия в нижнем регистре, разделенные пробелом).\",\n", + " \"span\": \"Период выступлений игрока за сборную в формате: 'YYYY - YYYY' (завершенный период) или 'YYYY -' (актуальный период), где YYYY — четырехзначный год.\",\n", + " \"start\": \"Количество матчей, в которых игрок вышел в стартовом составе (целое число).\",\n", + " \"tries\": \"Количество заработанных попыток (tries) в матче (целое число).\",\n", + " \"conv\": \"Количество конверсий (после попытки), выполненных игроком (целое число).\",\n", + " \"pens\": \"Количество пенальти (пенальти-киков), выполненных игроком (целое число).\",\n", + " \"drop\": \"Количество дроп-голов (дополнительных киков), выполненных игроком (целое число).\"\n", + "}\n" + ] + } + ], + "source": [ + "print('We are given a table description: \"united states national rugby union team\"\\n The headers and examples are:\\n player: examples: [\"todd clever\", \"philip eloff\", \"mike hercus\"]\\n span: examples: [\"2002 - 2009\", \"2003 -\", \"1992 - 2000\"]\\n start: examples: [28, 34, 45]\\n tries: examples: [9, 10, 11]\\n conv: examples: [0, 0, 0]\\n pens: examples: [0, 0, 0]\\n drop: examples: [1, 0, 0]\\n\\n We need to define each header in Russian, including:\\n - A brief but semantically succinct definition.\\n - Format features (how to interpret signs, abbreviations, or complex strings, e.g., \"A - B\")\\n - If there are units of measurement in the examples, include them.\\n\\n Steps for each header:\\n\\n 1. \"player\":\\n - Examples: names of players (in lowercase, but note: in the examples they are in title case? Actually, the examples are in lowercase with first letter of each word capital? But in the example string it\\'s given as \"todd clever\", which is actually \"Todd Clever\" but written in lowercase in the example? However, in the XML it\\'s in quotes and in lowercase. But note: the examples are given as strings in the XML, and they are in the format of the actual data. We see that the examples are: \"todd clever\", \"philip eloff\", \"mike hercus\". So we have to describe that it\\'s the name of the player, in text format.\\n\\n Definition: \\n \"Имя и фамилия игрока, представленные в виде строки (в нижнем регистре, но с заглавной буквой у первого символа каждого слова).\"\\n\\n However, note: the examples are in lowercase? Actually, the XML example: \"todd clever\" - but in reality, names are usually capitalized. But the example string is given as is. So we can say: \\n \"Имя и фамилия игрока, записанные в текстовом формате (в нижнем регистре, но с заглавной буквой у первого символа каждого слова).\"\\n\\n But wait, the example \"todd clever\" is actually written with a lowercase \\'t\\'? That might be a data issue, but we have to describe what we see.\\n\\n Alternatively, we can say: \"Имя и фамилия игрока, представленные в виде строки (в формате: имя_в_нижнем_регистре, фамилия_в_нижнем_регистре).\"\\n\\n However, the problem says: \"brief but semantically succinct\". So:\\n\\n \"Имя и фамилия игрока, записанные в текстовом виде (в формате: имя фамилия, все буквы в нижнем регистре).\"\\n\\n But note: the example \"todd clever\" is two words, so we can say: \"Имя и фамилия игрока, разделенные пробелом, в нижнем регистре (без заглавных букв).\"\\n\\n However, the example \"todd clever\" - the first letter of each word is lowercase? Actually, the example string is given as \"todd\" (with t in lower) and \"clever\" (with c in lower). So it\\'s all lowercase.\\n\\n But in reality, names are written with capital letters. However, the data is provided in lowercase. So we describe as is.\\n\\n Let\\'s look at the examples: \\n \"todd clever\", \"philip eloff\", \"mike hercus\"\\n\\n So: \\n \"Имя и фамилия игрока, представленные в виде строки, состоящей из двух слов (имя и фамилия), разделенных пробелом, в нижнем регистре.\"\\n\\n 2. \"span\":\\n - Examples: \"2002 - 2009\", \"2003 -\", \"1992 - 2000\"\\n - Format: This is a string that represents a time period. The pattern is: \\n [start_year] - [end_year] \\n but if the player is still active, the end year is missing (e.g., \"2003 -\" meaning from 2003 to present).\\n\\n Definition:\\n \"Период времени, в течение которого игрок выступал за национальную сборную. Формат: \\'год_начала - год_окончания\\' (если игрок больше не выступает) или \\'год_начала -\\' (если игрок все еще в составе). Годы представлены в формате четырехзначного числа.\"\\n\\n But note: the examples have a space after the dash? Actually, in the example: \"2002 - 2009\" -> there is a space on both sides of the dash? But the example string in the XML is \"2002 - 2009\" (with a space after the 2002 and before the 2009? Actually, the string is: \"2002 - 2009\" -> which is \"2002\" then space, then dash, then space, then \"2009\". So the pattern is: [year] [space] - [space] [year] or [year] [space] - [space] (for the current active).\\n\\n However, the example \"2003 -\" has a space after the dash? Actually, in the example: \"2003 -\" -> it\\'s \"2003\" then space, then dash, then nothing? But in the XML it\\'s written as \"2003 -\" (with a space after the dash? Actually, the string is \"2003 -\", meaning: 2003 followed by a space and then a dash and then a space? But wait, the example string is \"2003 -\" (with a space after the 2003 and then a dash and then nothing? But in the XML it\\'s written as \"2003 -\" -> which in the string would be \"2003 -\", so it\\'s 2003, space, dash, and then no space at the end? Actually, the example: \"2003 -\" has a space after the 2003? But the dash is followed by a space? The example string is: \"2003 -\" -> it\\'s 2003, then a space, then a dash, and then the string ends? Or is it 2003, space, dash, and then a space? The example string in the XML is: \"2003 -\" (without a trailing space) but the example \"2002 - 2009\" has a space after the dash? Actually, the example string for the first is: \"2002 - 2009\" -> that has a space after the 2002, then a dash, then a space, then 2009. So the pattern is: [year] [space] - [space] [year] (if end year is present) or [year] [space] - (if end year is not present).\\n\\n However, note the example \"2003 -\" -> it\\'s \"2003 -\" meaning: 2003, space, then dash, and then no space? But the example string in the XML is written as \"2003 -\" (which in the string would be 2003 followed by a space and then a dash, and then the string ends? So it\\'s two characters: space and dash? Actually, the string is \"2003 -\", which is 6 characters: \\'2\\',\\'0\\',\\'0\\',\\'3\\',\\' \\',\\'-\\'. So the dash is the last character? But then the example \"1992 - 2000\" is 11 characters? \\n\\n We can describe it as: \\n \"Период выступлений игрока за сборную, представленный в формате: \\'YYYY - YYYY\\' (если игрок завершил выступления) или \\'YYYY -\\' (если игрок все еще в составе). Годы указаны в четырехзначном формате.\"\\n\\n 3. \"start\":\\n - Examples: [28, 34, 45] -> integers\\n - What does this mean? In rugby, \"start\" might refer to the number of starts (i.e., the number of games in which the player started). But note: the context is the national rugby team. So:\\n\\n \"Количество матчей, в которых игрок вышел в стартовом составе.\"\\n\\n And the unit: it\\'s a count (no unit, but it\\'s a number). So we say: \"Целое число, обозначающее количество стартовых игр.\"\\n\\n 4. \"tries\":\\n - Examples: [9, 10, 11] -> integers\\n - In rugby, a \"try\" is a way of scoring (4 points). So:\\n \"Количество заработанных \\'tries\\' (попыток) в матче, при которых игрок касается мяча в зоне соперника. Целое число.\"\\n\\n 5. \"conv\":\\n - Examples: [0, 0, 0] -> integers\\n - In rugby, \"conv\" likely stands for \"conversions\". A conversion is a kick after a try (2 points). So:\\n \"Количество конверсий (после попытки), выполненных игроком. Целое число.\"\\n\\n 6. \"pens\":\\n - Examples: [0, 0, 0] -> integers\\n - \"pens\" likely stands for \"penalties\". A penalty kick (3 points). So:\\n \"Количество пенальти (пенальти-киков), выполненных игроком. Целое число.\"\\n\\n 7. \"drop\":\\n - Examples: [1, 0, 0] -> integers\\n - \"drop\" likely stands for \"drop goals\" (a kick from the ground, 3 points). So:\\n \"Количество дроп-голов (дополнительных киков), выполненных игроком. Целое число.\"\\n\\n Now, let\\'s write the definitions in Russian, as per the examples.\\n\\n Important: The output must be in JSON dictionary with the header name as key and the string as value.\\n\\n Let\\'s write for each:\\n\\n \"player\": \"Имя и фамилия игрока, представленные в виде строки, состоящей из двух слов (имя и фамилия), разделенных пробелом, в нижнем регистре.\"\\n \"span\": \"Период выступлений игрока за национальную сборную, представленный в формате: \\'YYYY - YYYY\\' (если игрок завершил выступления) или \\'YYYY -\\' (если игрок все еще в составе). Годы указаны в четырехзначном формате.\"\\n \"start\": \"Количество матчей, в которых игрок вышел в стартовом составе. Целое число.\"\\n \"tries\": \"Количество заработанных попыток (tries) в матче. Целое число.\"\\n \"conv\": \"Количество конверсий (после попытки), выполненных игроком. Целое число.\"\\n \"pens\": \"Количество пенальти (пенальти-киков), выполненных игроком. Целое число.\"\\n \"drop\": \"Количество дроп-голов (дополнительных киков), выполненных игроком. Целое число.\"\\n\\n But note: the examples for \"start\", \"tries\", etc. are integers without units. So we don\\'t have to specify a unit (like in Example 1 for \"diameter_km\" we had to say \"км\"). However, for the rugby statistics, the unit is \"count\" (which is a number) so we can say \"Целое число\" (integer number) but note: the examples are non-negative integers.\\n\\n However, the problem says: \"If there are units of measurement in the EXAMPLES, then include them in the answer.\" Since the examples are just numbers (without any unit symbol), we don\\'t have a unit. But the meaning is a count (so we can say it\\'s a count, but the problem doesn\\'t require to say \"count\" as a unit? Actually, in the examples, the numbers are counts. But in the output examples, for \"moons\" they said \"целое число\" and for \"diameter_km\" they said \"Единица измерения: километры (км)\". So for the rugby stats, since the numbers are counts (without a physical unit), we can say \"Целое число\" but without a unit? However, the examples in the problem for \"moons\" did not have a unit (it was just a count) and they wrote: \"Количественный показатель, обозначающий общее число подтвержденных естественных спутников планеты (целое число).\"\\n\\n So we can write for \"start\": \"Количество матчей, в которых игрок вышел в стартовом составе (целое число).\"\\n\\n But note: the example for \"moons\" in Example 1: \"Количественный показатель, обозначающий общее число подтвержденных естественных спутников планеты (целое число).\"\\n\\n So we can follow the same pattern.\\n\\n Let\\'s adjust:\\n\\n \"player\": \"Имя и фамилия игрока, представленные в виде строки (имя и фамилия в нижнем регистре, разделенные пробелом).\"\\n \"span\": \"Период выступлений игрока за сборную, представленный в формате: \\'YYYY - YYYY\\' (если игрок завершил выступления) или \\'YYYY -\\' (если игрок все еще в составе), где YYYY — четырехзначный год.\"\\n \"start\": \"Количество матчей, в которых игрок вышел в стартовом составе (целое число).\"\\n \"tries\": \"Количество заработанных попыток (tries) в матче (целое число).\"\\n \"conv\": \"Количество конверсий (после попытки), выполненных игроком (целое число).\"\\n \"pens\": \"Количество пенальти (пенальти-киков), выполненных игроком (целое число).\"\\n \"drop\": \"Количество дроп-голов (дополнительных киков), выполненных игроком (целое число).\"\\n\\n However, note the example for \"moons\" in Example 1: they didn\\'t say \"целое число\" in the middle, but at the end in parentheses. But in the example output for \"moons\" it was: \"Количественный показатель, обозначающий общее число подтвержденных естественных спутников планеты (целое число).\"\\n\\n So we can do the same.\\n\\n But note: the problem says \"semantically succinct\". We don\\'t need to over-explain, but we must be clear.\\n\\n Now, let\\'s write the JSON.\\n\\n Important: The keys must be exactly the header names (in English, as given: \"player\", \"span\", etc.)\\n\\n Let\\'s write the dictionary:\\n\\n{\\n \"player\": \"Имя и фамилия игрока, представленные в виде строки (имя и фамилия в нижнем регистре, разделенные пробелом).\",\\n \"span\": \"Период выступлений игрока за сборную, представленный в формате: \\'YYYY - YYYY\\' (если игрок завершил выступления) или \\'YYYY -\\' (если игрок все еще в составе), где YYYY — четырехзначный год.\",\\n \"start\": \"Количество матчей, в которых игрок вышел в стартовом составе (целое число).\",\\n \"tries\": \"Количество заработанных попыток (tries) в матче (целое число).\",\\n \"conv\": \"Количество конверсий (после попытки), выполненных игроком (целое число).\",\\n \"pens\": \"Количество пенальти (пенальти-киков), выполненных игроком (целое число).\",\\n \"drop\": \"Количество дроп-голов (дополнительных киков), выполненных игроком (целое число).\"\\n}\\n\\n However, note: the problem says \"If there are units of measurement in the EXAMPLES, then include them in the answer.\" \\n - In \"player\", \"span\", there are no units (they are strings). \\n - In \"start\", \"tries\", \"conv\", \"pens\", \"drop\", the examples are numbers without units (they are counts). So we don\\'t have a unit to specify (like \"m/s^2\" in Example 1). But note: the examples in the problem for \"moons\" (in Example 1) were just numbers and they said \"(целое число)\" which is a type, not a unit. The problem says \"units of measurement\", so we only add if the examples show a unit (like \"12756\" for \"diameter_km\" and then we see \"км\" in the output). \\n\\n But in our case, the examples for \"start\", etc. are just numbers (without a unit symbol). So we don\\'t have a unit to write. We only note that the value is an integer.\\n\\n Therefore, the above is acceptable.\\n\\n Let\\'s check the format for \"span\" in the examples: \\n The examples: \"2002 - 2009\", \"2003 -\", \"1992 - 2000\"\\n\\n We have to note that the dash is used to separate the years and that the end year may be absent (meaning current). Also, the years are four-digit.\\n\\n Now, we output the JSON.\\n\\n\\n{\\n \"player\": \"Имя и фамилия игрока, представленные в виде строки (имя и фамилия в нижнем регистре, разделенные пробелом).\",\\n \"span\": \"Период выступлений игрока за сборную в формате: \\'YYYY - YYYY\\' (завершенный период) или \\'YYYY -\\' (актуальный период), где YYYY — четырехзначный год.\",\\n \"start\": \"Количество матчей, в которых игрок вышел в стартовом составе (целое число).\",\\n \"tries\": \"Количество заработанных попыток (tries) в матче (целое число).\",\\n \"conv\": \"Количество конверсий (после попытки), выполненных игроком (целое число).\",\\n \"pens\": \"Количество пенальти (пенальти-киков), выполненных игроком (целое число).\",\\n \"drop\": \"Количество дроп-голов (дополнительных киков), выполненных игроком (целое число).\"\\n}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f04afca2-d179-4dc7-ae9e-d706cfa9aadd", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "d044ca9c-2a91-48be-a46e-78d7f69274f3", + "metadata": {}, + "source": [ + "# Make col def WTQ train" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "id": "8d3236d7-f03e-404a-8ee2-f92265866387", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'\"PANDA\": \"df[\\'brazil scorers\\'].str.contains(\\'Haroldo\\', na=False).sum() > 1\"\\n'" + "{'object': 'list',\n", + " 'data': [{'id': 'Qwen/Qwen3-30B-A3B-Thinking-2507',\n", + " 'object': 'model',\n", + " 'created': 1779597767,\n", + " 'owned_by': 'vllm',\n", + " 'root': 'Qwen/Qwen3-30B-A3B-Thinking-2507',\n", + " 'parent': None,\n", + " 'max_model_len': 25000,\n", + " 'permission': [{'id': 'modelperm-998253c3281ce54f',\n", + " 'object': 'model_permission',\n", + " 'created': 1779597767,\n", + " 'allow_create_engine': False,\n", + " 'allow_sampling': True,\n", + " 'allow_logprobs': True,\n", + " 'allow_search_indices': False,\n", + " 'allow_view': True,\n", + " 'allow_fine_tuning': False,\n", + " 'organization': '*',\n", + " 'group': None,\n", + " 'is_blocking': False}]}]}" ] }, - "execution_count": 73, + "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "match.group()" + "import requests\n", + "x = requests.get('http://127.0.0.1:9124/v1/models')\n", + "x.json()" ] }, { "cell_type": "code", - "execution_count": 85, - "id": "4d9a0e32-2cc5-4bb6-9cae-f60c702da4f1", + "execution_count": 1, + "id": "1daa69ac-7698-40ca-8cd1-c8625e2f4c0c", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from io import StringIO\n", + "import json\n", + "from datasets import Dataset,load_from_disk" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "b2226b03-c431-4b2a-aa75-bdd21328a5ec", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "False" + "{'id_x': '0',\n", + " 'table': 'csv/204-csv/590.csv',\n", + " 'code': '{\"PANDA\": \"df[df[\\'League\\'] == find_word(\\'USL A-League\\')][\\'Year\\'].max()\"}',\n", + " 'result': '2004',\n", + " 'error': '',\n", + " 'is_correct': 'True',\n", + " 'target_value': '2004',\n", + " 'nt_id': 'nt-0',\n", + " 'sql_code': \"select max ( c1_number ) from w where c3 = 'usl a-league'\",\n", + " 'query': 'what was the last year where this team was a part of the usl a-league?'}" ] }, - "execution_count": 85, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "bool(eval(parse_panda_code(response_sem)))" + "data = load_from_disk('../datasets/wtq/wtq-sql-pandas/')\n", + "data[0]" ] }, { "cell_type": "code", - "execution_count": 86, - "id": "b2a66aa7-0c14-487d-b47b-9206ee66ce41", + "execution_count": 3, + "id": "8998b342-aacc-41e4-aeee-d57eb63643fb", + "metadata": {}, + "outputs": [], + "source": [ + "data = data.rename_column(\"table\", \"context\")\n", + "data = data.rename_column(\"query\", \"statement\")\n", + "data = data.rename_column(\"target_value\", \"label\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "58d83502-0d55-4a09-867c-967039a7c98f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "True" + "Dataset({\n", + " features: ['id_x', 'context', 'code', 'result', 'error', 'is_correct', 'label', 'nt_id', 'sql_code', 'statement'],\n", + " num_rows: 14149\n", + "})" ] }, - "execution_count": 86, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "bool(dataset[0]['label'])" + "data" ] }, { "cell_type": "code", - "execution_count": 167, - "id": "feca60af-e739-4114-a5bc-9a8be7b6088a", + "execution_count": 5, + "id": "4356b657-e129-4134-a70d-17054a849cd4", "metadata": {}, "outputs": [], "source": [ - "from datasets import load_from_disk\n", - "from openai import OpenAI\n", - "import sys\n", - "import os\n", - "import json\n", + "WTQ_DIR = '/home/poddubny/datasets/WikiTableQuestions/'" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "7d8ffe1c-9f17-42bc-a56f-b2451ad6fd6f", + "metadata": {}, + "outputs": [], + "source": [ + "from pathlib import Path\n", "import pandas as pd\n", - "from io import StringIO\n", - "from tqdm import tqdm\n", - "import re\n", - "# Добавляем корневую директорию проекта в sys.path\n", - "sys.path.append(os.path.dirname(os.path.abspath('/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/tests')))\n", - "\n", - "system_prompt = '''You are a Python expert specializing in pandas. Your task is to translate the\n", - "given natural language statement into a single-line pandas expression. This\n", - "expression must be valid and executable to verify the truth of the statement\n", - "using the provided table. Consider the following:\n", - "1. The table is represented as a pandas DataFrame named df.\n", - "2. Do not include explanations, comments, or multiline outputs.\n", - "3. Ensure the output is concise, correct, and when run outputs either True or\n", - "False, and strictly in the following Json Format with a single key \"PANDA\":\n", - "\"PANDA\": \"\"\n", - "'''\n", - "system_correcting_prompt = '''\n", - "You are a Python expert specializing in pandas. Your task is to correct a pandas code that translates \n", - "a given natural language statement into a pandas\n", - "expression. The input data, code, along with the specific error it contains, is provided.\n", - "Your corrected pandas_code must be valid and executable by running the code\n", - "snippet str(bool(eval(pandas_code))) ensuring it accurately evaluates the truth\n", - "of the statement using the provided table with no errors.\n", - "Make sure the pandas_code is of type boolean. Consider the following:\n", - "1. The table is represented as a pandas DataFrame named df.\n", - "2. Do not include explanations, comments, or multiline outputs.\n", - "3. Ensure the output is concise, correct, and when run outputs either True or\n", - "False, and strictly in the following Json Format with a single key \"CORRECT PANDA\": \n", - "\"CORRECT PANDA\": \"\"\n", - "'''\n", "\n", - "\n", - "def send_message(message,max_tokens=500,top_p=0.9,temperature=0.5,server_url=\"http://127.0.0.1:8800/v1\",api_key=\"dummy\",\n", - " model_name='deepseek-ai/deepseek-coder-7b-instruct-v1.5',system_prompt='', stop = [\"Observation:\",\"\\n\\n\\n\\n\",\"\\n \\n \\n\"]):\n", - " client = OpenAI(base_url=server_url, api_key=api_key)\n", - " model_input = [\n", - " { 'role': 'system', 'content': system_prompt},\n", - " { 'role': 'user', 'content': message}\n", - " ]\n", - " try:\n", - " print(f\"Generating content with model: {model_name}\",)\n", - " \n", - " response = client.chat.completions.create(\n", - " model=model_name,\n", - " messages=model_input,\n", - " temperature=temperature,\n", - " max_tokens=max_tokens,\n", - " top_p=top_p,\n", - " stop = stop\n", - " )\n", - " \n", - " return True, response.choices[0].message.content\n", - "\n", - " except Exception as e:\n", - " print(\"Failed to call LLM: \" + str(e))\n", - " time.sleep(6)\n", - " if hasattr(e, 'response'):\n", - " error_info = e.response.json() \n", - " code_value = error_info['error']['code']\n", - " else:\n", - " code_value = \"context_length_exceeded\"\n", - " print(\"Retrying ...\")\n", - " return False, None\n", - "\n", - "def parse_panda_code(input_string):\n", - " \"\"\"\n", - " Парсит строку и извлекает код, который находится внутри конструкции \"PANDA\": <код>\n", - " Поддерживает различные форматы: JSON, простой текст, Markdown\n", - " \n", - " Args:\n", - " input_string (str): Входная строка для парсинга\n", - " \n", - " Returns:\n", - " str: Извлеченный код или пустая строка, если код не найден\n", - " \"\"\"\n", - " # Сначала попробуем найти JSON объект с PANDA\n", - " json_pattern = r'\\{[^{}]*PANDA\":\\s*(.+?)(?:\\n|$)?\\}'\n", - " json_match = re.search(json_pattern, input_string, re.DOTALL)\n", - " code = None\n", - " pattern = r'\"PANDA\":\\s*(.+?)(?:\\n|$)'\n", - " if json_match:\n", - " code = json_match.group(1).strip()\n", - " else:\n", - " match = re.search(pattern, input_string, re.DOTALL)\n", - " if match:\n", - " # Извлекаем код и убираем лишние пробелы по краям\n", - " code = match.group(1).strip()\n", - " # Заменяем одинарные кавычки внутри строки для корректного парсинга JSON\n", - "\n", - " # Если JSON не найден или не распарсился, используем старый метод\n", - " # Паттерн для поиска кода после \"PANDA\": \n", - " # Ищет \"PANDA\": за которым следует пробел, затем код до конца строки или до следующего символа\n", - " if code != None:\n", - " # Убираем возможные кавычки вокруг кода\n", - " if code.startswith('\"') and code.endswith('\"'):\n", - " code = code[1:-1]\n", - " elif code.startswith(\"'\") and code.endswith(\"'\"):\n", - " code = code[1:-1]\n", - " \n", - " return code\n", + "filepath = Path(WTQ_DIR) / 'csv/203-csv/733.html'\n", + "tables = pd.read_html(filepath.open(encoding='utf-8'))[0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0745bee1-e133-47a8-b301-51b1394a0ef6", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "c55a6fe1-b405-40e1-97b3-22786b6bdaf5", + "metadata": {}, + "outputs": [], + "source": [ + "def read_md_table(md_table):\n", + " dd = pd.read_table(StringIO(md_table), sep=\"|\", header=0, skipinitialspace=True).dropna(axis=1, how='all').iloc[1:]\n", + " dd.columns = dd.columns.str.strip()\n", + " dd = dd.apply(lambda x: x.str.strip() if x.dtype == \"object\" else x)\n", + " return dd\n", + "def read_html_table(html_table,WTQ_DIR = '/home/poddubny/datasets/WikiTableQuestions/'):\n", " \n", - " return \"\"\n", - "\n", - "def correct_code(df,input_data,code_str,error_str,iter_id=0,system_correcting_prompt='',stop= [\"Observation:\",\"\\n\\n\\n\\n\",\"\\n \\n \\n\"],\n", - " max_tokens=500,top_p=0.9,temperature=0.5,server_url=\"http://127.0.0.1:8800/v1\",api_key=\"dummy\",\n", - " model_name='deepseek-ai/deepseek-coder-7b-instruct-v1.5',max_iter=3):\n", - " if iter_id
\n" ] } ], "source": [ - "true = dd.filter(lambda x : True if x['semtab_label']==str(bool(x['label'])) else False,num_proc=17)" + "print(dataset['semtab_xml_attributes_exampples_top1_tresh50'][41])" ] }, { "cell_type": "code", - "execution_count": 132, - "id": "a3f5585f-9d8c-408e-a5da-809154fe9f80", + "execution_count": 76, + "id": "3573a3a4-7a47-4030-affe-1a2be96bf3a0", "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "40.90176585410141" - ] - }, - "execution_count": 132, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "State\\n(linked to\\nsummaries below)#Incumbent\\nSenator#Incumbent\\nParty#Incumbent\\nElectoral\\nhistory#Most recent election results#2018 intent#Candidates\n", + "Arizona#Jeff Flake#Republican#Jeff Flake (R) 49.2%\\nRichard Carmona (D) 46.1%\\nMarc Victor (L) 4.6%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "California#Dianne Feinstein#Democratic#Dianne Feinstein (D) 62.5%\\nElizabeth Emken (R) 37.5%#1992 (special)\\n1994\\n2000\\n2006\\n2012#Running#[Data unknown/missing. You can help!]\n", + "Connecticut#Chris Murphy#Democratic#Chris Murphy (D) 54.8%\\nLinda McMahon (R) 43.1%\\nPaul Passarelli (L) 1.7%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Delaware#Tom Carper#Democratic#Tom Carper (D) 66.4%\\nKevin L. Wade (R) 29.0%\\nAlex Pires (I) 3.8%#2000\\n2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Florida#Bill Nelson#Democratic#Bill Nelson (D) 55.2%\\nConnie Mack IV (R) 42.2%#2000\\n2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Hawaii#Mazie Hirono#Democratic#Mazie Hirono (D) 62.6%\\nLinda Lingle (R) 37.4%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Indiana#Joe Donnelly#Democratic#Joe Donnelly (D) 50.0%\\nRichard Mourdock (R) 44.2%\\nAndrew Horning (L) 5.7%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Maine#Angus King#Independent#Angus King (I) 52.9%\\nCharles E. Summers, Jr. (R) 30.7%\\nCynthia Dill (D) 13.3%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Maryland#Ben Cardin#Democratic#Ben Cardin (D) 56.0%\\nDan Bongino (R) 26.3%\\nS. Rob Sobhani (I) 16.4%#2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Massachusetts#Elizabeth Warren#Democratic#Elizabeth Warren (D) 53.7%\\nScott Brown (R) 46.3%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Michigan#Debbie Stabenow#Democratic#Debbie Stabenow (D) 58.8%\\nPete Hoekstra (R) 38.0%\\nScotty Boman (L) 1.8%#2000\\n2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Minnesota#Amy Klobuchar#Democratic#Amy Klobuchar (D) 65.2%\\nKurt Bills (R) 30.5%\\nStephen Williams (Independence) 2.6%#2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Mississippi#Roger Wicker#Republican#Roger Wicker (R) 57.2%\\nAlbert N. Gore, Jr. (D) 40.6%\\nThomas Cramer (C) 1.2%\\nShawn O'Hara (Reform) 1%#2008 (special)\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Missouri#Claire McCaskill#Democratic#Claire McCaskill (D) 54.8%\\nTodd Akin (R) 39.0%\\nJonathan Dine (L) 6.1%#2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Montana#Jon Tester#Democratic#Jon Tester (D) 48.6%\\nDenny Rehberg (R) 44.9%\\nDan Cox (L) 6.6%#2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Nebraska#Deb Fischer#Republican#Deb Fischer (R) 57.8%\\nBob Kerrey (D) 42.2%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Nevada#Dean Heller#Republican#Dean Heller (R) 45.9%\\nShelley Berkley (D) 44.7%\\nDavid Lory VanderBeek (C) 4.9%\\nNone of These Candidates 4.5%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "New Jersey#Bob Menendez#Democratic#Bob Menendez (D) 58.9%\\nJoe Kyrillos (R) 39.4%#2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "New Mexico#Martin Heinrich#Democratic#Martin Heinrich (D) 51.0%\\nHeather Wilson (R) 45.3%\\nJon Barrie (IAP) 3.6%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "New York#Kirsten Gillibrand#Democratic#Kirsten Gillibrand (D) 71.6%\\nWendy E. Long (R) 26.0%#2010 (special)\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "North Dakota#Heidi Heitkamp#Democratic#Heidi Heitkamp (D) 50.2%\\nRick Berg (R) 49.3%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Ohio#Sherrod Brown#Democratic#Sherrod Brown (D) 50.7%\\nJosh Mandel (R) 44.7%\\nScott A. Rupert (I) 4.6%#2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Pennsylvania#Bob Casey, Jr.#Democratic#Bob Casey, Jr. (D) 53.7%\\nTom Smith (R) 44.6%\\nRayburn Douglas Smith (L) 1.7%#2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Rhode Island#Sheldon Whitehouse#Democratic#Sheldon Whitehouse (D) 64.8%\\nBarry Hinckley (R) 35.0%#2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Tennessee#Bob Corker#Republican#Bob Corker (R) 64.9%\\nMark E. Clayton (D) 30.4%\\nMartin Pleasant (G) 1.7%#2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Texas#Ted Cruz#Republican#Ted Cruz (R) 56.5%\\nPaul Sadler (D) 40.7%\\nJohn Jay Myers (L) 2.1%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Utah#Orrin Hatch#Republican#Orrin Hatch (R) 65.3%\\nScott Howell (D) 30.0%\\nShaun McCausland (C) 3.2%#1976\\n1982\\n1988\\n1994\\n2000\\n2006\\n2012#Retiring#[Data unknown/missing. You can help!]\n", + "Vermont#Bernie Sanders#Independent#Bernie Sanders (I) 71%\\nJohn MacGovern (R) 24.9%\\nCris Ericson (Marijuana Party) 2%#2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Virginia#Tim Kaine#Democratic#Tim Kaine (D) 52.9%\\nGeorge Allen (R) 47%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Washington#Maria Cantwell#Democratic#Maria Cantwell (D) 60.5%\\nMichael Baumgartner (R) 39.5%#2000\\n2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "West Virginia#Joe Manchin#Democratic#Joe Manchin (D) 60.6%\\nJohn Raese (R) 36.5%\\nBob Henry Baber (G) 3.0%#2010\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Wisconsin#Tammy Baldwin#Democratic#Tammy Baldwin (D) 51.4%\\nTommy Thompson (R) 45.5%\\nJoseph Kexel (L) 2.1%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Wyoming#John Barrasso#Republican#John Barrasso (R) 75.7%\\nTim Chestnut (D) 21.7%\\nJoel Otto (Wyoming Country) 2.6%#2008 (special)\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "State\\n(linked to\\nsummaries below)#Incumbent#Incumbent#Incumbent#Most recent election results#2018 intent#Candidates\n", + "State\\n(linked to\\nsummaries below)#Senator#Party#Electoral\\nhistory#Most recent election results#2018 intent#Candidates\n", + "\n" + ] } ], "source": [ - "true.shape[0]/process_data.shape[0]*100\n" + "print(dataset['table_text'][41])" ] }, { "cell_type": "code", - "execution_count": 131, - "id": "8b46093c-c5c3-4349-b407-b94b3db744e7", + "execution_count": 3, + "id": "7909d573-aa82-4bb3-86ce-81fba4ee1fe2", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "58.11939624588789" - ] - }, - "execution_count": 131, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "true.shape[0]/dd.shape[0]*100\n" + "import re\n", + "def remove_think_tags(text: str) -> str:\n", + " \"\"\"Удаляет тег ... из ответов моделей reasoning.\"\"\"\n", + " try:\n", + " match = re.search(r\"<\\/think>\", text)\n", + " if match:\n", + " return text[match.end():].strip()\n", + " except Exception as e:\n", + " print(f\"Error removing tags: {e}\")\n", + " return text.strip()\n", + " \n", + "def extract_json_from_text(text):\n", + " # Ищем первую открывающую фигурную (объект) или квадратную (массив) скобку\n", + " match = re.search(r'\\{|$$', text)\n", + " if not match:\n", + " return None\n", + "\n", + " # Отрезаем весь текст до начала JSON\n", + " json_start = match.start()\n", + " potential_json = text[json_start:]\n", + "\n", + " decoder = json.JSONDecoder()\n", + " try:\n", + " # raw_decode читает JSON и возвращает сам объект и индекс, где он закончился\n", + " obj, index = decoder.raw_decode(potential_json)\n", + " return obj\n", + " except json.JSONDecodeError as e:\n", + " print(f\"Ошибка парсинга JSON: {e}\")\n", + " return None" ] }, { "cell_type": "code", - "execution_count": 134, - "id": "73f5a0b1-2f7c-447b-96b6-63d242f4c43b", + "execution_count": 4, + "id": "c6d426f0-8210-430b-ae43-0976a33c24f1", + "metadata": {}, + "outputs": [], + "source": [ + "def correct_def(ex):\n", + " ex['column_defenition_raw'] = ex['column_defenition']\n", + " ex['column_defenition'] = remove_think_tags(ex['column_defenition'])\n", + " return ex" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "639a50e3-bab0-4cbe-b2a7-a83451aa6aa7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Dataset({\n", - " features: ['id', 'statement', 'label', 'table_caption', 'table_text', 'pandas_code', 'pandas_eval', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label'],\n", - " num_rows: 88116\n", + " features: ['id_x', 'context', 'code', 'result', 'error', 'is_correct', 'label', 'nt_id', 'sql_code', 'statement', 'table_text', 'table_caption', 'semtab_xml_attributes_exampples_top1_tresh50', 'column_defenition'],\n", + " num_rows: 1678\n", "})" ] }, - "execution_count": 134, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "process_data = load_from_disk('answer_gen_nlsep_none_filtered_new_dataset/')\n", - "process_data" + "dataset = load_from_disk('WTQ_train_unique_tables_serialize_def')\n", + "dataset" ] }, { "cell_type": "code", - "execution_count": 135, - "id": "79eebf32-1119-4e87-b783-1479f99e3711", + "execution_count": 21, + "id": "4b466779-771a-4faf-ac83-c2dc1faf173c", "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Filter (num_proc=17): 100%|██████████| 88116/88116 [00:00<00:00, 156255.01 examples/s]\n" - ] - }, { "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "87283befaa1340709b87aacbac7a0669", + "version_major": 2, + "version_minor": 0 + }, "text/plain": [ - "Dataset({\n", - " features: ['id', 'statement', 'label', 'table_caption', 'table_text', 'pandas_code', 'pandas_eval', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label'],\n", - " num_rows: 88007\n", - "})" + "Map (num_proc=16): 0%| | 0/1678 [00:00\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", + " \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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
id_xcontextcoderesulterroris_correctlabelnt_idsql_codestatementtable_texttable_captionsemtab_xml_attributes_exampples_top1_tresh50column_defenitioncolumn_defenition_rawcolumn_defenition_json
00csv/204-csv/590.csv{\"PANDA\": \"df[df['League'] == find_word('USL A...2004True2004nt-0select max ( c1_number ) from w where c3 = 'us...what was the last year where this team was a p...Year#Division#League#Regular Season#Playoffs#O...<TABLE><HEADER NAME=\"Year\" EXAMPLES=\"[2002, 20...{\\n \"Year\": \"The calendar year of the season ...{\\n \"Year\": \"The calendar year of the season ...{\"Year\": \"The calendar year of the season or e...
11csv/204-csv/622.csv{\"PANDA\": \"df[df['Position'] == '1st'].iloc[-1...Bangkok, ThailandTrueBangkok, Thailandnt-1select c3 from w where c4_first_number = 1 ord...in what city did piotr's last 1st place finish...Year#Competition#Venue#Position#Event#Notes\\n2...<TABLE><HEADER NAME=\"Year\" EXAMPLES=\"[2007, 20...{\\n \"Year\": \"The year in which the competitio...{\\n \"Year\": \"The year in which the competitio...{\"Year\": \"The year in which the competition wa...
22csv/204-csv/772.csv{\"PANDA\": \"df[df['Years won'] < convert_type('...Wolfe TonesTrueWolfe Tonesnt-2select c1 from w where c4_number < ( select c4...which team won previous to crettyard?Team#County#Wins#Years won\\nGreystones#Wicklow...<TABLE><HEADER NAME=\"Team\" EXAMPLES=\"[&quot;Du...{\\n \"Team\": \"The name of a sports team, typic...{\\n \"Team\": \"The name of a sports team, typic...{\"Team\": \"The name of a sports team, typically...
33csv/203-csv/515.csv{\"PANDA\": \"df[df['City'] == 'United States, Lo...12467True12,467nt-3select ( select c3_number from w where c2_addr...how many more passengers flew to los angeles t...Rank#City#Passengers#Ranking#Airline\\n1#United...<TABLE><HEADER NAME=\"Rank\" EXAMPLES=\"[4, 8, 9]...{\\n \"Rank\": \"The ordinal position of a city i...{\\n \"Rank\": \"The ordinal position of a city i...{\"Rank\": \"The ordinal position of a city in a ...
44csv/204-csv/495.csv{\"PANDA\": \"df.loc[df['Date'].idxmin(), 'Oppone...Derby CountyTrueDerby Countynt-4select c2 from w order by c1_parsed asc limit 1who was the opponent in the first game of the ...Date#Opponent#Venue#Result#Attendance#Scorers\\...<TABLE><HEADER NAME=\"Date\" EXAMPLES=\"[&quot;28...{\\n \"Date\": \"Match date in day-month-year for...{\\n \"Date\": \"Match date in day-month-year for...{\"Date\": \"Match date in day-month-year format,...
...................................................
167113442csv/202-csv/83.csv{\"PANDA\": \"df[(df['PPG'] > convert_type('20'))...10False11nt-13445select count ( * ) from w where c13_number >= 20how many seasons did webber average over 20 po...Year#Team#GP#GS#MPG#FG%#3P%#FT%#RPG#APG#SPG#BP...<TABLE><HEADER NAME=\"Year\" EXAMPLES=\"[&quot;19...{\\n \"Year\": \"Season year range, denoted by th...{\\n \"Year\": \"Season year range, denoted by th...{\"Year\": \"Season year range, denoted by the st...
167213635csv/202-csv/143.csv{\"PANDA\": \"df[df['Driver'] == find_word('Micha...1:34:45.026False1:34:45.026nt-13638select c6 from w where c3 = 'michael schumacher'how long did it take michael schumacher to fin...Pos#No#Driver#Constructor#Laps#Time/Retired#Gr...<TABLE><HEADER NAME=\"Pos\" EXAMPLES=\"[&quot;Ret...{\\n \"Pos\": \"Race finishing position; 'Ret' in...{\\n \"Pos\": \"Race finishing position; 'Ret' in...{\"Pos\": \"Race finishing position; 'Ret' indica...
167313673csv/202-csv/117.csv{\"PANDA\": \"df[df['Fate'] == 'Sunk']['Nationali...United KingdomTrueUnited Kingdomnt-13676select c3 from w where c5 = 'sunk' group by c3...who was sunk the most?Date#Ship#Nationality#Tonnage#Fate\\n19 August ...<TABLE><HEADER NAME=\"Date\" EXAMPLES=\"[&quot;19...{\\n \"Date\": \"The date of the event, formatted...{\\n \"Date\": \"The date of the event, formatted...{\"Date\": \"The date of the event, formatted as ...
167413809csv/202-csv/277.csv{\"PANDA\": \"df.apply(lambda row: sum(1 for col ...5True5nt-13812nanhow many german women won medals?Event#Gold#Gold.1#Silver#Silver.1#Bronze#Bronz...<TABLE><HEADER NAME=\"Event\" EXAMPLES=\"[&quot;1...{\\n \"Event\": \"The name of the athletic event,...{\\n \"Event\": \"The name of the athletic event,...{\"Event\": \"The name of the athletic event, whi...
167513949csv/202-csv/278.csv{\"PANDA\": \"convert_type('2001') - convert_type...12True12nt-13952nanhow many years after \"i can't get no... edelwe...Year#Single#Peak chart positions\\nAT#Peak char...<TABLE><HEADER NAME=\"Year\" EXAMPLES=\"[&quot;19...{\\n \"Year\": \"The calendar year or year range ...{\\n \"Year\": \"The calendar year or year range ...{\"Year\": \"The calendar year or year range of t...
\n", + "

1676 rows × 16 columns

\n", + "" + ], + "text/plain": [ + " id_x context \\\n", + "0 0 csv/204-csv/590.csv \n", + "1 1 csv/204-csv/622.csv \n", + "2 2 csv/204-csv/772.csv \n", + "3 3 csv/203-csv/515.csv \n", + "4 4 csv/204-csv/495.csv \n", + "... ... ... \n", + "1671 13442 csv/202-csv/83.csv \n", + "1672 13635 csv/202-csv/143.csv \n", + "1673 13673 csv/202-csv/117.csv \n", + "1674 13809 csv/202-csv/277.csv \n", + "1675 13949 csv/202-csv/278.csv \n", + "\n", + " code result \\\n", + "0 {\"PANDA\": \"df[df['League'] == find_word('USL A... 2004 \n", + "1 {\"PANDA\": \"df[df['Position'] == '1st'].iloc[-1... Bangkok, Thailand \n", + "2 {\"PANDA\": \"df[df['Years won'] < convert_type('... Wolfe Tones \n", + "3 {\"PANDA\": \"df[df['City'] == 'United States, Lo... 12467 \n", + "4 {\"PANDA\": \"df.loc[df['Date'].idxmin(), 'Oppone... Derby County \n", + "... ... ... \n", + "1671 {\"PANDA\": \"df[(df['PPG'] > convert_type('20'))... 10 \n", + "1672 {\"PANDA\": \"df[df['Driver'] == find_word('Micha... 1:34:45.026 \n", + "1673 {\"PANDA\": \"df[df['Fate'] == 'Sunk']['Nationali... United Kingdom \n", + "1674 {\"PANDA\": \"df.apply(lambda row: sum(1 for col ... 5 \n", + "1675 {\"PANDA\": \"convert_type('2001') - convert_type... 12 \n", + "\n", + " error is_correct label nt_id \\\n", + "0 True 2004 nt-0 \n", + "1 True Bangkok, Thailand nt-1 \n", + "2 True Wolfe Tones nt-2 \n", + "3 True 12,467 nt-3 \n", + "4 True Derby County nt-4 \n", + "... ... ... ... ... \n", + "1671 False 11 nt-13445 \n", + "1672 False 1:34:45.026 nt-13638 \n", + "1673 True United Kingdom nt-13676 \n", + "1674 True 5 nt-13812 \n", + "1675 True 12 nt-13952 \n", + "\n", + " sql_code \\\n", + "0 select max ( c1_number ) from w where c3 = 'us... \n", + "1 select c3 from w where c4_first_number = 1 ord... \n", + "2 select c1 from w where c4_number < ( select c4... \n", + "3 select ( select c3_number from w where c2_addr... \n", + "4 select c2 from w order by c1_parsed asc limit 1 \n", + "... ... \n", + "1671 select count ( * ) from w where c13_number >= 20 \n", + "1672 select c6 from w where c3 = 'michael schumacher' \n", + "1673 select c3 from w where c5 = 'sunk' group by c3... \n", + "1674 nan \n", + "1675 nan \n", + "\n", + " statement \\\n", + "0 what was the last year where this team was a p... \n", + "1 in what city did piotr's last 1st place finish... \n", + "2 which team won previous to crettyard? \n", + "3 how many more passengers flew to los angeles t... \n", + "4 who was the opponent in the first game of the ... \n", + "... ... \n", + "1671 how many seasons did webber average over 20 po... \n", + "1672 how long did it take michael schumacher to fin... \n", + "1673 who was sunk the most? \n", + "1674 how many german women won medals? \n", + "1675 how many years after \"i can't get no... edelwe... \n", + "\n", + " table_text table_caption \\\n", + "0 Year#Division#League#Regular Season#Playoffs#O... \n", + "1 Year#Competition#Venue#Position#Event#Notes\\n2... \n", + "2 Team#County#Wins#Years won\\nGreystones#Wicklow... \n", + "3 Rank#City#Passengers#Ranking#Airline\\n1#United... \n", + "4 Date#Opponent#Venue#Result#Attendance#Scorers\\... \n", + "... ... ... \n", + "1671 Year#Team#GP#GS#MPG#FG%#3P%#FT%#RPG#APG#SPG#BP... \n", + "1672 Pos#No#Driver#Constructor#Laps#Time/Retired#Gr... \n", + "1673 Date#Ship#Nationality#Tonnage#Fate\\n19 August ... \n", + "1674 Event#Gold#Gold.1#Silver#Silver.1#Bronze#Bronz... \n", + "1675 Year#Single#Peak chart positions\\nAT#Peak char... \n", + "\n", + " semtab_xml_attributes_exampples_top1_tresh50 \\\n", + "0
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
contexttable_textcolumn_defenition_json
0csv/204-csv/590.csvYear#Division#League#Regular Season#Playoffs#O...{\"Year\": \"The calendar year of the season or e...
1csv/204-csv/622.csvYear#Competition#Venue#Position#Event#Notes\\n2...{\"Year\": \"The year in which the competition wa...
2csv/204-csv/772.csvTeam#County#Wins#Years won\\nGreystones#Wicklow...{\"Team\": \"The name of a sports team, typically...
3csv/203-csv/515.csvRank#City#Passengers#Ranking#Airline\\n1#United...{\"Rank\": \"The ordinal position of a city in a ...
4csv/204-csv/495.csvDate#Opponent#Venue#Result#Attendance#Scorers\\...{\"Date\": \"Match date in day-month-year format,...
............
1671csv/202-csv/83.csvYear#Team#GP#GS#MPG#FG%#3P%#FT%#RPG#APG#SPG#BP...{\"Year\": \"Season year range, denoted by the st...
1672csv/202-csv/143.csvPos#No#Driver#Constructor#Laps#Time/Retired#Gr...{\"Pos\": \"Race finishing position; 'Ret' indica...
1673csv/202-csv/117.csvDate#Ship#Nationality#Tonnage#Fate\\n19 August ...{\"Date\": \"The date of the event, formatted as ...
1674csv/202-csv/277.csvEvent#Gold#Gold.1#Silver#Silver.1#Bronze#Bronz...{\"Event\": \"The name of the athletic event, whi...
1675csv/202-csv/278.csvYear#Single#Peak chart positions\\nAT#Peak char...{\"Year\": \"The calendar year or year range of t...
\n", + "

1676 rows × 3 columns

\n", + "" + ], + "text/plain": [ + " context table_text \\\n", + "0 csv/204-csv/590.csv Year#Division#League#Regular Season#Playoffs#O... \n", + "1 csv/204-csv/622.csv Year#Competition#Venue#Position#Event#Notes\\n2... \n", + "2 csv/204-csv/772.csv Team#County#Wins#Years won\\nGreystones#Wicklow... \n", + "3 csv/203-csv/515.csv Rank#City#Passengers#Ranking#Airline\\n1#United... \n", + "4 csv/204-csv/495.csv Date#Opponent#Venue#Result#Attendance#Scorers\\... \n", + "... ... ... \n", + "1671 csv/202-csv/83.csv Year#Team#GP#GS#MPG#FG%#3P%#FT%#RPG#APG#SPG#BP... \n", + "1672 csv/202-csv/143.csv Pos#No#Driver#Constructor#Laps#Time/Retired#Gr... \n", + "1673 csv/202-csv/117.csv Date#Ship#Nationality#Tonnage#Fate\\n19 August ... \n", + "1674 csv/202-csv/277.csv Event#Gold#Gold.1#Silver#Silver.1#Bronze#Bronz... \n", + "1675 csv/202-csv/278.csv Year#Single#Peak chart positions\\nAT#Peak char... \n", + "\n", + " column_defenition_json \n", + "0 {\"Year\": \"The calendar year of the season or e... \n", + "1 {\"Year\": \"The year in which the competition wa... \n", + "2 {\"Team\": \"The name of a sports team, typically... \n", + "3 {\"Rank\": \"The ordinal position of a city in a ... \n", + "4 {\"Date\": \"Match date in day-month-year format,... \n", + "... ... \n", + "1671 {\"Year\": \"Season year range, denoted by the st... \n", + "1672 {\"Pos\": \"Race finishing position; 'Ret' indica... \n", + "1673 {\"Date\": \"The date of the event, formatted as ... \n", + "1674 {\"Event\": \"The name of the athletic event, whi... \n", + "1675 {\"Year\": \"The calendar year or year range of t... \n", + "\n", + "[1676 rows x 3 columns]" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "process_data = load_from_disk('./tab_fact_test_xml_nlsep/')\n", - "print(process_data)\n", - "dd = process_data.filter(lambda x: True if x['nlsep_answ']!='None' else False,num_proc=17)\n", - "print(dd)\n", - "dd = process_data.filter(lambda x: True if x['nlsep_label']!='None' else False,num_proc=17)\n", - "print(dd)\n", - "print(dd.shape[0]/process_data.shape[0]*100)\n", - "true = dd.filter(lambda x : True if x['nlsep_label']==str(bool(x['label'])) else False,num_proc=17)\n", - "print(true.shape[0]/process_data.shape[0]*100)" + "df = df_data[['context','table_text','column_defenition_json']]\n", + "df" ] }, { "cell_type": "code", - "execution_count": 161, - "id": "8188730d-4c0f-4d0a-bd84-c87cf5a55e8b", + "execution_count": 23, + "id": "934eb892-aa2f-4e86-84fe-bacf6a73ce25", "metadata": {}, "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 27883.23 examples/s]\n" - ] - } - ], - "source": [ - "dont_run = process_data.filter(lambda x: True if x['nlsep_label']=='None' else False,num_proc=17)" - ] + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
contexttable_textcolumn_defenition_json
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [context, table_text, column_defenition_json]\n", + "Index: []" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[df['column_defenition_json'] == 'None']" + ] }, { "cell_type": "code", - "execution_count": 162, - "id": "db2d4147-3de0-4b28-8c62-c3bdd8e688b0", + "execution_count": 24, + "id": "d5fdca1f-7569-4366-9e84-9adf71289b62", + "metadata": {}, + "outputs": [], + "source": [ + "from io import StringIO\n", + "import re" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "3aea4268-eb0a-464e-be52-2e2fcac3fe45", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "----------\n", + "{'ethnicity', 'judaism', 'n/a', 'other', 'buddhism', 'none\\xa0/atheism', 'christianity', 'islam'}\n", + "{'ethnicity', 'judaism', 'n/a', 'other', 'buddhism', 'none/atheism', 'christianity', 'islam'}\n", + "{'none\\xa0/atheism'}\n", + "----------\n", + "{'u.s.', 'song', 'album', 'year', 'u.s.ac', 'uk', 'u.s.r&b'}\n", + "{'song', 'album', 'year', 'u.s.ac', 'uk', 'u.s.r&b'}\n", + "{'u.s.'}\n", + "----------\n", + "{'squadrons', 'helipads', 'location\\xa0served', 'name', 'coordinates', 'governorate', 'utilization', 'shelters', 'runways'}\n", + "{'squadrons', 'helipads', 'name', 'coordinates', 'locationserved', 'governorate', 'utilization', 'shelters', 'runways'}\n", + "{'location\\xa0served'}\n", + "----------\n", + "{'gdppercapita(us$,ppp)', 'totalgdp(nominal)(billionus$)', 'country', 'gdpgrowth,2007-2011(in\\xa0%)', 'hdi'}\n", + "{'gdppercapita(us$,ppp)', 'totalgdp(nominal)(billionus$)', 'gdpgrowth,2007-2011(in%)', 'country', 'hdi'}\n", + "{'gdpgrowth,2007-2011(in\\xa0%)'}\n", + "----------\n", + "{'stateoftheart', \"hardness(mohs'scale)\", 'density(g/cm3)', 'refractiveindex(es)589.3\\xa0nm', 'thermalcond.', 'dispersion431–687\\xa0nm', 'formula', 'material'}\n", + "{'refractiveindex(es)589.3nm', 'stateoftheart', \"hardness(mohs'scale)\", 'density(g/cm3)', 'dispersion431–687nm', 'thermalcond.', 'formula', 'material'}\n", + "{'dispersion431–687\\xa0nm', 'refractiveindex(es)589.3\\xa0nm'}\n", + "----------\n", + "{'heightofpylons', 'tramway', 'notes', 'spanwidth,horizontalmeasurement', 'city', 'country', 'yearofinauguration', 'heightofcableoverground', 'span\\xa0width,leaningstraightline'}\n", + "{'heightofpylons', 'tramway', 'notes', 'spanwidth,horizontalmeasurement', 'city', 'country', 'heightofcableoverground', 'yearofinauguration', 'spanwidth,leaningstraightline'}\n", + "{'span\\xa0width,leaningstraightline'}\n", + "----------\n", + "{'dimensionsw(mm)×h(mm)×d(mm)', 'weight', 'features', 'releasedate', 'model', 'screensize,\\xa0pixels', 'sensorres.,size', 'lens\\xa0(35\\xa0mm\\xa0equiv.)zoom,aperture'}\n", + "{'dimensionsw(mm)×h(mm)×d(mm)', 'weight', 'features', 'releasedate', 'model', 'screensize,pixels', 'lens(35mmequiv.)zoom,aperture', 'sensorres.,size'}\n", + "{'screensize,\\xa0pixels', 'lens\\xa0(35\\xa0mm\\xa0equiv.)zoom,aperture'}\n", + "----------\n", + "{'188kg', 'akakioskakiasvilis\\xa0(gre)', 'athens,greece', 'snatch', 'worldrecord', '27november1999'}\n", + "{'188kg', 'akakioskakiasvilis(gre)', 'athens,greece', 'snatch', 'worldrecord', '27november1999'}\n", + "{'akakioskakiasvilis\\xa0(gre)'}\n", + "----------\n", + "{'whitworthsize(in)', 'tappingdrillsize', 'pitch(in)', 'corediameter(in)', 'threadsper\\xa0inch'}\n", + "{'whitworthsize(in)', 'threadsperinch', 'tappingdrillsize', 'pitch(in)', 'corediameter(in)'}\n", + "{'threadsper\\xa0inch'}\n", + "----------\n", + "{'township', 'landareakm²(sq\\xa0mi)', 'water\\xa0%', 'populationdensity/km²(/sq\\xa0mi)', 'population', 'populationcenter', 'fips', 'waterareakm²(sq\\xa0mi)', 'geographiccoordinates'}\n", + "{'township', 'waterareakm²(sqmi)', 'population', 'landareakm²(sqmi)', 'populationcenter', 'populationdensity/km²(/sqmi)', 'fips', 'water%', 'geographiccoordinates'}\n", + "{'landareakm²(sq\\xa0mi)', 'waterareakm²(sq\\xa0mi)', 'water\\xa0%', 'populationdensity/km²(/sq\\xa0mi)'}\n", + "----------\n", + "{'touristarrivalsper1000inhab(estimated)2007', 'receiptspercapita2005usd', 'averagereceiptpervisitor2009(usd/turista)', 'internl.tourismreceipts.2010(usd(x1000)', 'worldrankingtourismcompetitiv.ttci2011', 'internl.tourismarrivals2010(x1000)', 'revenuesas\\xa0%exportsofgoodsandservices2003', '%directandindirectemploymentintourism2005', 'selectedlatinamericancountries', 'tourismincome\\xa0%gdp2003', '2011ttciindex'}\n", + "{'revenuesas%exportsofgoodsandservices2003', 'tourismincome%gdp2003', 'touristarrivalsper1000inhab(estimated)2007', 'receiptspercapita2005usd', 'averagereceiptpervisitor2009(usd/turista)', 'internl.tourismreceipts.2010(usd(x1000)', 'worldrankingtourismcompetitiv.ttci2011', 'internl.tourismarrivals2010(x1000)', '%directandindirectemploymentintourism2005', 'selectedlatinamericancountries', '2011ttciindex'}\n", + "{'revenuesas\\xa0%exportsofgoodsandservices2003', 'tourismincome\\xa0%gdp2003'}\n", + "----------\n", + "{'totalcaps', 'win\\xa0%', 'player', 'span', 'caps', '#'}\n", + "{'totalcaps', 'player', 'span', 'win%', 'caps', '#'}\n", + "{'win\\xa0%'}\n", + "----------\n", + "{'year', 'usdollarexchange', 'inflationindex(2000=100)', 'percapitaincome(as\\xa0%ofusa)', 'grossdomesticproduct'}\n", + "{'year', 'usdollarexchange', 'inflationindex(2000=100)', 'percapitaincome(as%ofusa)', 'grossdomesticproduct'}\n", + "{'percapitaincome(as\\xa0%ofusa)'}\n", + "----------\n", + "{'rankin2011', 'profit(thou.\\xa0pln)', 'locationofheadquarters', 'revenue(thou.\\xa0pln)', 'employees', 'nameofconcern'}\n", + "{'rankin2011', 'profit(thou.pln)', 'revenue(thou.pln)', 'locationofheadquarters', 'employees', 'nameofconcern'}\n", + "{'profit(thou.\\xa0pln)', 'revenue(thou.\\xa0pln)'}\n", + "----------\n", + "{'heightft\\xa0(m)', 'notes', 'name', 'year', 'coordinates', 'rank', 'floors'}\n", + "{'notes', 'name', 'year', 'coordinates', 'rank', 'floors', 'heightft(m)'}\n", + "{'heightft\\xa0(m)'}\n", + "----------\n", + "{'gamesplayed', 'assistspergame', '3-point\\xa0%', 'rebounds', 'fieldgoal\\xa0%', 'assists', 'freethrow\\xa0%', 'minutesplayedpergame', 'pointspergame', 'reboundspergame', 'player', 'minutesplayed', 'points'}\n", + "{'gamesplayed', 'assistspergame', 'freethrow%', 'rebounds', 'assists', 'fieldgoal%', '3-point%', 'minutesplayedpergame', 'pointspergame', 'reboundspergame', 'player', 'minutesplayed', 'points'}\n", + "{'3-point\\xa0%', 'freethrow\\xa0%', 'fieldgoal\\xa0%'}\n", + "----------\n", + "{'2010armssales(us$m.)', '2009rank', 'company(country)', '2011rank', 'armssalesasshareofcompany’stotalsales(%),', '2008rank', '2010rank', '2009armssales(us$m.)', '2008armssales(us$m.)', '2007armssales(us$m.)', '2007rank', '2011armssales(us$m.)'}\n", + "{'2010armssales(us$m.)', '2009rank', 'company(country)', '2011rank', '2008rank', '2010rank', '2009armssales(us$m.)', '2008armssales(us$m.)', '2007armssales(us$m.)', '2007rank', 'armssalesasshareofcompany’stotalsales(%)', '2011armssales(us$m.)'}\n", + "{'armssalesasshareofcompany’stotalsales(%),'}\n", + "----------\n", + "{'year', 'unemploymentrate\\xa0%', 'outputgrowthrate\\xa0%', 'inflationrate\\xa0%'}\n", + "{'unemploymentrate%', 'inflationrate%', 'outputgrowthrate%', 'year'}\n", + "{'inflationrate\\xa0%', 'unemploymentrate\\xa0%', 'outputgrowthrate\\xa0%'}\n", + "----------\n", + "{'record', 'win\\xa0%', 'conference', 'champions', 'final', 'semifinals', 'quarterfinals', 'bids'}\n", + "{'record', 'conference', 'champions', 'final', 'semifinals', 'win%', 'quarterfinals', 'bids'}\n", + "{'win\\xa0%'}\n", + "----------\n", + "{'township', 'landareakm²(sq\\xa0mi)', 'water\\xa0%', 'populationdensity/km²(/sq\\xa0mi)', 'population', 'populationcenter', 'fips', 'waterareakm²(sq\\xa0mi)', 'geographiccoordinates'}\n", + "{'township', 'waterareakm²(sqmi)', 'population', 'landareakm²(sqmi)', 'populationcenter', 'populationdensity/km²(/sqmi)', 'fips', 'water%', 'geographiccoordinates'}\n", + "{'landareakm²(sq\\xa0mi)', 'waterareakm²(sq\\xa0mi)', 'water\\xa0%', 'populationdensity/km²(/sq\\xa0mi)'}\n", + "----------\n", + "{'place', 'seats', 'place.1', 'year', 'cabinet', 'vote\\xa0%'}\n", + "{'place', 'seats', 'place.1', 'year', 'cabinet', 'vote%'}\n", + "{'vote\\xa0%'}\n", + "----------\n", + "{'win\\xa0%', 'losses', 'team', 'gb', 'wins'}\n", + "{'losses', 'team', 'win%', 'gb', 'wins'}\n", + "{'win\\xa0%'}\n", + "----------\n", + "{'stations', 'firstsectionopened', 'lastex-tension', 'name.1', 'name', 'color&icon', 'length', 'mark'}\n", + "{'stations', 'firstsectionopened', 'name.1', 'name', 'lastex-extension', 'color&icon', 'length', 'mark'}\n", + "{'lastex-tension'}\n", + "----------\n", + "{'place,theatre', 'premièredate', 'title', 'sub\\xaddivisions', 'libretto', 'opus', 'genre', 'composition'}\n", + "{'subdivisions', 'place,theatre', 'premièredate', 'title', 'libretto', 'opus', 'genre', 'composition'}\n", + "{'sub\\xaddivisions'}\n", + "----------\n", + "{'landarea(km2,2011)', 'population1996', 'province', 'change\\xa0in\\xa0%2006–2011', 'population2011', 'rank', 'population2001', 'population2006', 'type', 'change\\xa0in\\xa0%1996–2011', 'censussubdivision'}\n", + "{'changein%1996–2011', 'landarea(km2,2011)', 'population1996', 'province', 'population2011', 'changein%2006–2011', 'rank', 'population2001', 'population2006', 'type', 'censussubdivision'}\n", + "{'change\\xa0in\\xa0%1996–2011', 'change\\xa0in\\xa0%2006–2011'}\n", + "----------\n", + "{'galaxy', 'year', 'chivas', 'derbywinner', 'draw'}\n", + "{'galaxy', 'derby_winner', 'year', 'chivas', 'draw'}\n", + "{'derbywinner'}\n", + "----------\n", + "{'township', 'landareakm²(sq\\xa0mi)', 'water\\xa0%', 'populationdensity/km²(/sq\\xa0mi)', 'population', 'fips', 'waterareakm²(sq\\xa0mi)', 'geographiccoordinates'}\n", + "{'fips', 'township', 'waterareakm²(sqmi)', 'population', 'populationdensity/km²(/sqmi)', 'landareakm²(sqmi)', 'water%', 'geographiccoordinates'}\n", + "{'landareakm²(sq\\xa0mi)', 'waterareakm²(sq\\xa0mi)', 'water\\xa0%', 'populationdensity/km²(/sq\\xa0mi)'}\n", + "----------\n", + "{'60\\xa0yd(55\\xa0m)', '100\\xa0yd(91\\xa0m)', '50\\xa0yd(46\\xa0m)', 'round', '40\\xa0yd(37\\xa0m)', '80\\xa0yd(73\\xa0m)'}\n", + "{'50yd(46m)', 'round', '80yd(73m)', '40yd(37m)', '100yd(91m)', '60yd(55m)'}\n", + "{'60\\xa0yd(55\\xa0m)', '100\\xa0yd(91\\xa0m)', '50\\xa0yd(46\\xa0m)', '40\\xa0yd(37\\xa0m)', '80\\xa0yd(73\\xa0m)'}\n", + "----------\n", + "{'against', 'win\\xa0%', 'lost', 'won', 'played', 'drawn'}\n", + "{'against', 'lost', 'won', 'win%', 'played', 'drawn'}\n", + "{'win\\xa0%'}\n", + "----------\n", + "{'pct', 'w', 'centraldivisionvte', 'div', 'gb', 'road', 'home', 'l'}\n", + "{'pct', 'w', 'road', 'div', 'gb', 'centraldivision', 'home', 'l'}\n", + "{'centraldivisionvte'}\n", + "----------\n", + "{'postseasonwon', 'postseasonwin\\xa0%', 'year', 'team', 'regularseasonwon', 'regularseasonwin\\xa0%', 'regularseasonfinish', 'postseasonresult', 'postseasonlost', 'regularseasonlost'}\n", + "{'regularseasonwin%', 'postseasonwin%', 'postseasonwon', 'year', 'team', 'regularseasonwon', 'regularseasonfinish', 'postseasonresult', 'postseasonlost', 'regularseasonlost'}\n", + "{'regularseasonwin\\xa0%', 'postseasonwin\\xa0%'}\n", + "----------\n", + "{'candidate', '∆%', 'votes', '%', 'party'}\n", + "{'candidate', 'delta_percentage', 'votes', 'party', 'percentage'}\n", + "{'%', '∆%'}\n", + "----------\n", + "{'postseasonwon', 'postseasonwin\\xa0%', 'year', 'team', 'regularseasonwon', 'regularseasonwin\\xa0%', 'regularseasonfinish', 'postseasonresult', 'regularseasonties', 'postseasonlost', 'regularseasonlost'}\n", + "{'regularseasonwin%', 'postseasonwin%', 'postseasonwon', 'year', 'team', 'regularseasonwon', 'regularseasonfinish', 'postseasonresult', 'regularseasonties', 'postseasonlost', 'regularseasonlost'}\n", + "{'regularseasonwin\\xa0%', 'postseasonwin\\xa0%'}\n" + ] + } + ], + "source": [ + "for i,data in df.iterrows():\n", + " ddd = pd.read_csv(StringIO(data['table_text']), delimiter='#')\n", + " col = set([re.sub('\\\\n','',re.sub('\\\\\\\\n','',re.sub(' ','',k))).lower() for k in ddd.columns])\n", + " defgen_key = set([re.sub('\\\\n','',re.sub('\\\\\\\\n','',re.sub(' ','',k))).lower() for k in json.loads(data['column_defenition_json']).keys()])\n", + " \n", + " if len(col-defgen_key)>0:\n", + " print('-'*10)\n", + " print(col)\n", + " print(defgen_key)\n", + " print(col-defgen_key)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "7541a829-2882-487b-972a-d223c7e9765e", + "metadata": {}, + "outputs": [], + "source": [ + "df.to_parquet(\"df_wtq_train.parquet.gzip\", compression=\"gzip\")" + ] + }, + { + "cell_type": "code", + "execution_count": 131, + "id": "87acfaa6-666d-4123-8c50-347bb188b633", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
contexttable_textcolumn_defenition_json
0csv/203-csv/733.csvRank#Cyclist#Team#Time#UCI ProTour\\nPoints\\n1#...{\"Rank\": \"The position of the cyclist in the c...
1csv/204-csv/149.csvDescription Losses#1939/40#1940/41#1941/42#194...{\"Description Losses\": \"The category or type o...
2csv/203-csv/435.csvYear#Division#League#Reg. Season#Playoffs#Nati...{\"Year\": \"The season year or year range (e.g.,...
3csv/204-csv/803.csv\"Series #\"#\"Season #\"#Title#Notes#Original air...{\"Series #\": \"The sequential episode number wi...
4csv/204-csv/272.csvDate#Competition#Location#Country#Event#Placin...{\"Date\": \"The date of the event in 'Day Month ...
............
415csv/202-csv/268.csv\\nReading#Year 1\\n2013, 2016, 2019, 2022 . . ....{\"Reading\": \"The sequential reading number (in...
416csv/203-csv/225.csvNo.#Year#Name#Held at#Number of teams#Winner#R...{\"No.\": \"The sequential identifier or position...
417csv/202-csv/180.csvRailroad#Qty.#Road numbers#Notes\\nBurlington N...{\"Railroad\": \"The name of the railroad company...
418csv/202-csv/17.csvDate#Label#Format#Country#Catalog#Notes\\nNovem...{\"Date\": \"Release date formatted as 'Month Day...
419csv/202-csv/273.csvParty#Candidate#Votes#%#∆%#Expenditures\\nNew D...{\"Party\": \"The political party or vote categor...
\n", + "

420 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " context table_text \\\n", + "0 csv/203-csv/733.csv Rank#Cyclist#Team#Time#UCI ProTour\\nPoints\\n1#... \n", + "1 csv/204-csv/149.csv Description Losses#1939/40#1940/41#1941/42#194... \n", + "2 csv/203-csv/435.csv Year#Division#League#Reg. Season#Playoffs#Nati... \n", + "3 csv/204-csv/803.csv \"Series #\"#\"Season #\"#Title#Notes#Original air... \n", + "4 csv/204-csv/272.csv Date#Competition#Location#Country#Event#Placin... \n", + ".. ... ... \n", + "415 csv/202-csv/268.csv \\nReading#Year 1\\n2013, 2016, 2019, 2022 . . .... \n", + "416 csv/203-csv/225.csv No.#Year#Name#Held at#Number of teams#Winner#R... \n", + "417 csv/202-csv/180.csv Railroad#Qty.#Road numbers#Notes\\nBurlington N... \n", + "418 csv/202-csv/17.csv Date#Label#Format#Country#Catalog#Notes\\nNovem... \n", + "419 csv/202-csv/273.csv Party#Candidate#Votes#%#∆%#Expenditures\\nNew D... \n", + "\n", + " column_defenition_json \n", + "0 {\"Rank\": \"The position of the cyclist in the c... \n", + "1 {\"Description Losses\": \"The category or type o... \n", + "2 {\"Year\": \"The season year or year range (e.g.,... \n", + "3 {\"Series #\": \"The sequential episode number wi... \n", + "4 {\"Date\": \"The date of the event in 'Day Month ... \n", + ".. ... \n", + "415 {\"Reading\": \"The sequential reading number (in... \n", + "416 {\"No.\": \"The sequential identifier or position... \n", + "417 {\"Railroad\": \"The name of the railroad company... \n", + "418 {\"Date\": \"Release date formatted as 'Month Day... \n", + "419 {\"Party\": \"The political party or vote categor... \n", + "\n", + "[420 rows x 3 columns]" + ] + }, + "execution_count": 131, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "dd = pd.read_parquet(\"df_wtq_test.parquet.gzip\")\n", + "dd" + ] + }, + { + "cell_type": "code", + "execution_count": 147, + "id": "feb2005e-0867-4401-abbd-e6ee3ca5aa5c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label'],\n", - " num_rows: 4257\n", + " features: ['id', 'statement', 'context', 'label', 'table', 'table_text', 'semtab_xml_attributes_semantic_datatype_exampples_top1_tresh50'],\n", + " num_rows: 4339\n", "})" ] }, - "execution_count": 162, + "execution_count": 147, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "dont_run\n" + "dataset = load_from_disk('WTQ_test_xml')\n", + "dataset" ] }, { "cell_type": "code", - "execution_count": null, - "id": "d41074f4-f166-4ddd-9383-2de54fca4e5a", - "metadata": { - "scrolled": true - }, + "execution_count": 140, + "id": "b17101b2-edb0-4ea9-819b-7ee388904226", + "metadata": {}, "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 0%| | 0/4257 [00:00, line 1)\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1538\n", - "Can only use .dt accessor with datetimelike values\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 0%| | 3/4257 [00:01<36:14, 1.96 examples/s] " - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 0%| | 4/4257 [00:01<27:44, 2.56 examples/s]" - ] - }, + "data": { + "text/plain": [ + "'
'" + ] + }, + "execution_count": 140, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset['semtab_xml_elements_semantic_datatype_exampples_top1_tresh50'][0]" + ] + }, + { + "cell_type": "code", + "execution_count": 144, + "id": "d3476678-91cb-46c8-be72-661439c6b599", + "metadata": {}, + "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR" - ] - }, + "data": { + "text/plain": [ + "[2, 3, 4]" + ] + }, + "execution_count": 144, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sorted([3,2,4])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "14ac5518-6e01-4d9a-bb71-81bd91eaabdb", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a6cdd6cc-9d84-465a-9a9e-d673e19d6efd", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3e2616af-19bf-4a23-b878-64ba201bb595", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ea3ef706-94a0-4cfb-9a85-822976d14e1e", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "06068db6-20c2-4333-aa0d-4105277fe603", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "423049f3-88ae-4739-847d-99706ccb10ab", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b0b2ce5c-b963-4dd1-b460-dfa02ff045f1", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ff08008f-984a-4bf5-bf83-a9ada7311ebf", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b9348354-7637-49ed-8567-6f8e4edf5c78", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "885870d9-ae8c-4e47-8436-9cf0ab0b12ad", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dbc32841-bb97-486e-bfd2-1ddff4895ca2", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "726c6089-381e-4310-8864-86f269cbc22d", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4881618c-a2af-4c4b-b767-43a43f72061a", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "558fc42b-c0eb-4ad6-af84-0e671ee0e31c", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a704be2c-963d-497a-b841-5a74dfa623f3", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fb88bc9b-e4bb-4b9c-a30d-571f9f018e66", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "18f1c96e-69f3-4a4b-8f0f-617bc6c577c4", + "metadata": {}, + "source": [ + "# Make col def WTQ test" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "id": "80c8036e-86bc-470d-9447-449cc9615816", + "metadata": {}, + "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 0%| | 6/4257 [00:02<18:35, 3.81 examples/s]" - ] - }, + "data": { + "text/plain": [ + "{'object': 'list',\n", + " 'data': [{'id': 'Qwen/Qwen3-30B-A3B-Thinking-2507',\n", + " 'object': 'model',\n", + " 'created': 1779597767,\n", + " 'owned_by': 'vllm',\n", + " 'root': 'Qwen/Qwen3-30B-A3B-Thinking-2507',\n", + " 'parent': None,\n", + " 'max_model_len': 25000,\n", + " 'permission': [{'id': 'modelperm-998253c3281ce54f',\n", + " 'object': 'model_permission',\n", + " 'created': 1779597767,\n", + " 'allow_create_engine': False,\n", + " 'allow_sampling': True,\n", + " 'allow_logprobs': True,\n", + " 'allow_search_indices': False,\n", + " 'allow_view': True,\n", + " 'allow_fine_tuning': False,\n", + " 'organization': '*',\n", + " 'group': None,\n", + " 'is_blocking': False}]}]}" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import requests\n", + "x = requests.get('http://127.0.0.1:9124/v1/models')\n", + "x.json()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "2af56ae5-4f97-4c24-b415-35396f967f55", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from io import StringIO\n", + "from datasets import Dataset,load_from_disk" + ] + }, + { + "cell_type": "code", + "execution_count": 142, + "id": "1e139a7f-35bf-427f-9267-ba32f3e8c1a8", + "metadata": {}, + "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - " 0\n", - "The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1054\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" - ] - }, + "data": { + "text/plain": [ + "{'id': 0,\n", + " 'table': 'csv/204-csv/590.csv',\n", + " 'code': '{\"PANDA\": \"df[df[\\'League\\'] == find_word(\\'USL A-League\\')][\\'Year\\'].max()\"}',\n", + " 'result': '2004',\n", + " 'error': None,\n", + " 'is_correct': True,\n", + " 'target_value': '2004'}" + ] + }, + "execution_count": 142, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = load_from_disk('../datasets/wtq/wtq_train_correct_pandas')\n", + "data[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 363, + "id": "3c9e53c4-b5ae-4b02-8648-a341c98ca892", + "metadata": {}, + "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 0%| | 7/4257 [00:02<24:28, 2.89 examples/s]" - ] - }, + "data": { + "text/plain": [ + "'/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/tests'" + ] + }, + "execution_count": 363, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pwd" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "e0748439-4a9e-40cc-bf81-19d0db9574eb", + "metadata": {}, + "outputs": [], + "source": [ + "WTQ_DIR = '/home/poddubny/datasets/WikiTableQuestions/'" + ] + }, + { + "cell_type": "code", + "execution_count": 371, + "id": "2f59b21a-7364-4072-8c9b-56c975bd2027", + "metadata": {}, + "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 789\n", - "cannot do positional indexing on RangeIndex with these indexers [nan] of type float\n", - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 148\n", - "The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Requirement already satisfied: lxml in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (6.1.1)\n", + "Requirement already satisfied: html5lib in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (1.1)\n", + "Collecting beautifulsoup4\n", + " Downloading beautifulsoup4-4.14.3-py3-none-any.whl (107 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m107.7/107.7 KB\u001b[0m \u001b[31m740.5 kB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: webencodings in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from html5lib) (0.5.1)\n", + "Requirement already satisfied: six>=1.9 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from html5lib) (1.17.0)\n", + "Collecting soupsieve>=1.6.1\n", + " Downloading soupsieve-2.8.3-py3-none-any.whl (37 kB)\n", + "Requirement already satisfied: typing-extensions>=4.0.0 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from beautifulsoup4) (4.15.0)\n", + "Installing collected packages: soupsieve, beautifulsoup4\n", + "Successfully installed beautifulsoup4-4.14.3 soupsieve-2.8.3\n", + "Note: you may need to restart the kernel to use updated packages.\n" ] - }, + } + ], + "source": [ + "pip install lxml html5lib beautifulsoup4" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "8c523954-e050-4e8d-bcb0-20d81117afb6", + "metadata": {}, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "import pandas as pd\n", + "\n", + "filepath = Path(WTQ_DIR) / 'csv/203-csv/733.html'\n", + "tables = pd.read_html(filepath.open(encoding='utf-8'))[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "77fdce27-e960-4045-b405-799a9897b3d6", + "metadata": {}, + "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 0%| | 9/4257 [00:03<21:58, 3.22 examples/s]" - ] + "data": { + "text/plain": [ + "['Â\\xa0Alejandro ValverdeÂ\\xa0(ESP)',\n", + " 'Â\\xa0Alexandr KolobnevÂ\\xa0(RUS)',\n", + " 'Â\\xa0Davide RebellinÂ\\xa0(ITA)',\n", + " 'Â\\xa0Paolo BettiniÂ\\xa0(ITA)',\n", + " 'Â\\xa0Franco PellizottiÂ\\xa0(ITA)',\n", + " 'Â\\xa0Denis MenchovÂ\\xa0(RUS)',\n", + " 'Â\\xa0Samuel SánchezÂ\\xa0(ESP)',\n", + " 'Â\\xa0Stéphane GoubertÂ\\xa0(FRA)',\n", + " 'Â\\xa0Haimar ZubeldiaÂ\\xa0(ESP)',\n", + " 'Â\\xa0David MoncoutiéÂ\\xa0(FRA)']" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tables['Cyclist'].to_list()" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "b43affd6-43b7-40d0-9e9d-363695934c8b", + "metadata": {}, + "outputs": [], + "source": [ + "def read_md_table(md_table):\n", + " dd = pd.read_table(StringIO(md_table), sep=\"|\", header=0, skipinitialspace=True).dropna(axis=1, how='all').iloc[1:]\n", + " dd.columns = dd.columns.str.strip()\n", + " dd = dd.apply(lambda x: x.str.strip() if x.dtype == \"object\" else x)\n", + " return dd\n", + "def read_html_table(html_table,WTQ_DIR = '/home/poddubny/datasets/WikiTableQuestions/'):\n", + " \n", + " filepath = Path(WTQ_DIR) / html_table\n", + " return pd.read_html(filepath.open(encoding='utf-8'))[0]\n", + "\n", + "def read_csv_table(html_table,WTQ_DIR = '/home/poddubny/datasets/WikiTableQuestions/',sep = '\\t'):\n", + " \n", + " filepath = Path(WTQ_DIR) / html_table\n", + " return pd.read_csv(filepath,sep=sep)\n", + "def convert_to_repanda_table_text(obj):\n", + " try:\n", + " #df = read_html_table(obj['context'][:-3]+'html')\n", + " df = read_csv_table(obj['context'][:-3]+'tsv')\n", + " obj['table_text'] = df.to_csv(sep='#',index=False)\n", + " except Exception as e:\n", + " print (e)\n", + " obj['table_text'] = 'None'\n", + " obj['table_caption'] = ''\n", + " return obj" + ] + }, + { + "cell_type": "code", + "execution_count": 132, + "id": "139858ed-bc2f-4e4b-8b2f-216521257b06", + "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", + " \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", + "
idquerycontexttargetValuetable
0nu-0which country had the most cyclists finish wit...csv/203-csv/733.csvItaly| Rank | Cyclist | Team ...
1nu-1how many people were murdered in 1940/41?csv/204-csv/149.csv100,000| Description Losses | 1939/4...
2nu-2how long did it take for the new york american...csv/203-csv/435.csv17 years| Year | Division | League | Reg. S...
3nu-3alfie's birthday party aired on january 19. wh...csv/204-csv/803.csvJanuary 26, 1995| Series # | Season # | Title ...
4nu-4what is the number of 1st place finishes acros...csv/204-csv/272.csv17| Date | Competition ...
..................
4339nu-4339what is the total amount of attendance from ga...csv/203-csv/575.csv5532| Iteration | Dates | Location ...
4340nu-4340how many drivers are listed as \"did not qualif...csv/204-csv/953.csv5| Pos | No | Driver | Constr...
4341nu-4341who was the only person from the us to earn le...csv/204-csv/900.csvBob Tway| Place | Player | Country | S...
4342nu-4342how long did it take the 5th place swimmer to ...csv/204-csv/65.csv43.12| Rank | Lane | Name ...
4343nu-4343how many more awards did she win in 2009 than ...csv/203-csv/63.csv6| Year | Award ...
\n", + "

4344 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " id query \\\n", + "0 nu-0 which country had the most cyclists finish wit... \n", + "1 nu-1 how many people were murdered in 1940/41? \n", + "2 nu-2 how long did it take for the new york american... \n", + "3 nu-3 alfie's birthday party aired on january 19. wh... \n", + "4 nu-4 what is the number of 1st place finishes acros... \n", + "... ... ... \n", + "4339 nu-4339 what is the total amount of attendance from ga... \n", + "4340 nu-4340 how many drivers are listed as \"did not qualif... \n", + "4341 nu-4341 who was the only person from the us to earn le... \n", + "4342 nu-4342 how long did it take the 5th place swimmer to ... \n", + "4343 nu-4343 how many more awards did she win in 2009 than ... \n", + "\n", + " context targetValue \\\n", + "0 csv/203-csv/733.csv Italy \n", + "1 csv/204-csv/149.csv 100,000 \n", + "2 csv/203-csv/435.csv 17 years \n", + "3 csv/204-csv/803.csv January 26, 1995 \n", + "4 csv/204-csv/272.csv 17 \n", + "... ... ... \n", + "4339 csv/203-csv/575.csv 5532 \n", + "4340 csv/204-csv/953.csv 5 \n", + "4341 csv/204-csv/900.csv Bob Tway \n", + "4342 csv/204-csv/65.csv 43.12 \n", + "4343 csv/203-csv/63.csv 6 \n", + "\n", + " table \n", + "0 | Rank | Cyclist | Team ... \n", + "1 | Description Losses | 1939/4... \n", + "2 | Year | Division | League | Reg. S... \n", + "3 | Series # | Season # | Title ... \n", + "4 | Date | Competition ... \n", + "... ... \n", + "4339 | Iteration | Dates | Location ... \n", + "4340 | Pos | No | Driver | Constr... \n", + "4341 | Place | Player | Country | S... \n", + "4342 | Rank | Lane | Name ... \n", + "4343 | Year | Award ... \n", + "\n", + "[4344 rows x 5 columns]" + ] + }, + "execution_count": 132, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = pd.read_json('../wtq_test.jsonl',lines=True)\n", + "data" + ] + }, + { + "cell_type": "code", + "execution_count": 134, + "id": "9f0afcc9-b355-4a3d-87a6-47e990dec01a", + "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", + " \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", + "
idstatementcontextlabeltable
0nu-0which country had the most cyclists finish wit...csv/203-csv/733.csvItaly| Rank | Cyclist | Team ...
1nu-1how many people were murdered in 1940/41?csv/204-csv/149.csv100,000| Description Losses | 1939/4...
2nu-2how long did it take for the new york american...csv/203-csv/435.csv17 years| Year | Division | League | Reg. S...
3nu-3alfie's birthday party aired on january 19. wh...csv/204-csv/803.csvJanuary 26, 1995| Series # | Season # | Title ...
4nu-4what is the number of 1st place finishes acros...csv/204-csv/272.csv17| Date | Competition ...
..................
4339nu-4339what is the total amount of attendance from ga...csv/203-csv/575.csv5532| Iteration | Dates | Location ...
4340nu-4340how many drivers are listed as \"did not qualif...csv/204-csv/953.csv5| Pos | No | Driver | Constr...
4341nu-4341who was the only person from the us to earn le...csv/204-csv/900.csvBob Tway| Place | Player | Country | S...
4342nu-4342how long did it take the 5th place swimmer to ...csv/204-csv/65.csv43.12| Rank | Lane | Name ...
4343nu-4343how many more awards did she win in 2009 than ...csv/203-csv/63.csv6| Year | Award ...
\n", + "

4344 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " id statement \\\n", + "0 nu-0 which country had the most cyclists finish wit... \n", + "1 nu-1 how many people were murdered in 1940/41? \n", + "2 nu-2 how long did it take for the new york american... \n", + "3 nu-3 alfie's birthday party aired on january 19. wh... \n", + "4 nu-4 what is the number of 1st place finishes acros... \n", + "... ... ... \n", + "4339 nu-4339 what is the total amount of attendance from ga... \n", + "4340 nu-4340 how many drivers are listed as \"did not qualif... \n", + "4341 nu-4341 who was the only person from the us to earn le... \n", + "4342 nu-4342 how long did it take the 5th place swimmer to ... \n", + "4343 nu-4343 how many more awards did she win in 2009 than ... \n", + "\n", + " context label \\\n", + "0 csv/203-csv/733.csv Italy \n", + "1 csv/204-csv/149.csv 100,000 \n", + "2 csv/203-csv/435.csv 17 years \n", + "3 csv/204-csv/803.csv January 26, 1995 \n", + "4 csv/204-csv/272.csv 17 \n", + "... ... ... \n", + "4339 csv/203-csv/575.csv 5532 \n", + "4340 csv/204-csv/953.csv 5 \n", + "4341 csv/204-csv/900.csv Bob Tway \n", + "4342 csv/204-csv/65.csv 43.12 \n", + "4343 csv/203-csv/63.csv 6 \n", + "\n", + " table \n", + "0 | Rank | Cyclist | Team ... \n", + "1 | Description Losses | 1939/4... \n", + "2 | Year | Division | League | Reg. S... \n", + "3 | Series # | Season # | Title ... \n", + "4 | Date | Competition ... \n", + "... ... \n", + "4339 | Iteration | Dates | Location ... \n", + "4340 | Pos | No | Driver | Constr... \n", + "4341 | Place | Player | Country | S... \n", + "4342 | Rank | Lane | Name ... \n", + "4343 | Year | Award ... \n", + "\n", + "[4344 rows x 5 columns]" + ] + }, + "execution_count": 134, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.columns = ['id','statement','context','label','table']\n", + "data" + ] + }, + { + "cell_type": "code", + "execution_count": 136, + "id": "675259c7-3926-47ba-99ad-8f35060333b2", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "6bdda256f58f40b09f70b55cf9fbf033", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Map (num_proc=16): 0%| | 0/4344 [00:00, line 1)\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 0%| | 20/4257 [00:06<19:55, 3.55 examples/s]" + "
\n" ] - }, + } + ], + "source": [ + "print(dataset['semtab_xml_attributes_exampples_top1_tresh50'][41])" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "id": "1e072931-814a-4f25-a8e2-8c4827004fc9", + "metadata": {}, + "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "State\\n(linked to\\nsummaries below)#Incumbent\\nSenator#Incumbent\\nParty#Incumbent\\nElectoral\\nhistory#Most recent election results#2018 intent#Candidates\n", + "Arizona#Jeff Flake#Republican#Jeff Flake (R) 49.2%\\nRichard Carmona (D) 46.1%\\nMarc Victor (L) 4.6%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "California#Dianne Feinstein#Democratic#Dianne Feinstein (D) 62.5%\\nElizabeth Emken (R) 37.5%#1992 (special)\\n1994\\n2000\\n2006\\n2012#Running#[Data unknown/missing. You can help!]\n", + "Connecticut#Chris Murphy#Democratic#Chris Murphy (D) 54.8%\\nLinda McMahon (R) 43.1%\\nPaul Passarelli (L) 1.7%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Delaware#Tom Carper#Democratic#Tom Carper (D) 66.4%\\nKevin L. Wade (R) 29.0%\\nAlex Pires (I) 3.8%#2000\\n2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Florida#Bill Nelson#Democratic#Bill Nelson (D) 55.2%\\nConnie Mack IV (R) 42.2%#2000\\n2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Hawaii#Mazie Hirono#Democratic#Mazie Hirono (D) 62.6%\\nLinda Lingle (R) 37.4%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Indiana#Joe Donnelly#Democratic#Joe Donnelly (D) 50.0%\\nRichard Mourdock (R) 44.2%\\nAndrew Horning (L) 5.7%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Maine#Angus King#Independent#Angus King (I) 52.9%\\nCharles E. Summers, Jr. (R) 30.7%\\nCynthia Dill (D) 13.3%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Maryland#Ben Cardin#Democratic#Ben Cardin (D) 56.0%\\nDan Bongino (R) 26.3%\\nS. Rob Sobhani (I) 16.4%#2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Massachusetts#Elizabeth Warren#Democratic#Elizabeth Warren (D) 53.7%\\nScott Brown (R) 46.3%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Michigan#Debbie Stabenow#Democratic#Debbie Stabenow (D) 58.8%\\nPete Hoekstra (R) 38.0%\\nScotty Boman (L) 1.8%#2000\\n2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Minnesota#Amy Klobuchar#Democratic#Amy Klobuchar (D) 65.2%\\nKurt Bills (R) 30.5%\\nStephen Williams (Independence) 2.6%#2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Mississippi#Roger Wicker#Republican#Roger Wicker (R) 57.2%\\nAlbert N. Gore, Jr. (D) 40.6%\\nThomas Cramer (C) 1.2%\\nShawn O'Hara (Reform) 1%#2008 (special)\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Missouri#Claire McCaskill#Democratic#Claire McCaskill (D) 54.8%\\nTodd Akin (R) 39.0%\\nJonathan Dine (L) 6.1%#2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Montana#Jon Tester#Democratic#Jon Tester (D) 48.6%\\nDenny Rehberg (R) 44.9%\\nDan Cox (L) 6.6%#2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Nebraska#Deb Fischer#Republican#Deb Fischer (R) 57.8%\\nBob Kerrey (D) 42.2%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Nevada#Dean Heller#Republican#Dean Heller (R) 45.9%\\nShelley Berkley (D) 44.7%\\nDavid Lory VanderBeek (C) 4.9%\\nNone of These Candidates 4.5%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "New Jersey#Bob Menendez#Democratic#Bob Menendez (D) 58.9%\\nJoe Kyrillos (R) 39.4%#2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "New Mexico#Martin Heinrich#Democratic#Martin Heinrich (D) 51.0%\\nHeather Wilson (R) 45.3%\\nJon Barrie (IAP) 3.6%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "New York#Kirsten Gillibrand#Democratic#Kirsten Gillibrand (D) 71.6%\\nWendy E. Long (R) 26.0%#2010 (special)\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "North Dakota#Heidi Heitkamp#Democratic#Heidi Heitkamp (D) 50.2%\\nRick Berg (R) 49.3%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Ohio#Sherrod Brown#Democratic#Sherrod Brown (D) 50.7%\\nJosh Mandel (R) 44.7%\\nScott A. Rupert (I) 4.6%#2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Pennsylvania#Bob Casey, Jr.#Democratic#Bob Casey, Jr. (D) 53.7%\\nTom Smith (R) 44.6%\\nRayburn Douglas Smith (L) 1.7%#2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Rhode Island#Sheldon Whitehouse#Democratic#Sheldon Whitehouse (D) 64.8%\\nBarry Hinckley (R) 35.0%#2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Tennessee#Bob Corker#Republican#Bob Corker (R) 64.9%\\nMark E. Clayton (D) 30.4%\\nMartin Pleasant (G) 1.7%#2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Texas#Ted Cruz#Republican#Ted Cruz (R) 56.5%\\nPaul Sadler (D) 40.7%\\nJohn Jay Myers (L) 2.1%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Utah#Orrin Hatch#Republican#Orrin Hatch (R) 65.3%\\nScott Howell (D) 30.0%\\nShaun McCausland (C) 3.2%#1976\\n1982\\n1988\\n1994\\n2000\\n2006\\n2012#Retiring#[Data unknown/missing. You can help!]\n", + "Vermont#Bernie Sanders#Independent#Bernie Sanders (I) 71%\\nJohn MacGovern (R) 24.9%\\nCris Ericson (Marijuana Party) 2%#2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Virginia#Tim Kaine#Democratic#Tim Kaine (D) 52.9%\\nGeorge Allen (R) 47%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Washington#Maria Cantwell#Democratic#Maria Cantwell (D) 60.5%\\nMichael Baumgartner (R) 39.5%#2000\\n2006\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "West Virginia#Joe Manchin#Democratic#Joe Manchin (D) 60.6%\\nJohn Raese (R) 36.5%\\nBob Henry Baber (G) 3.0%#2010\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Wisconsin#Tammy Baldwin#Democratic#Tammy Baldwin (D) 51.4%\\nTommy Thompson (R) 45.5%\\nJoseph Kexel (L) 2.1%#2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "Wyoming#John Barrasso#Republican#John Barrasso (R) 75.7%\\nTim Chestnut (D) 21.7%\\nJoel Otto (Wyoming Country) 2.6%#2008 (special)\\n2012#[Data unknown/missing. You can help!]#[Data unknown/missing. You can help!]\n", + "State\\n(linked to\\nsummaries below)#Incumbent#Incumbent#Incumbent#Most recent election results#2018 intent#Candidates\n", + "State\\n(linked to\\nsummaries below)#Senator#Party#Electoral\\nhistory#Most recent election results#2018 intent#Candidates\n", + "\n" ] - }, + } + ], + "source": [ + "print(dataset['table_text'][41])" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "cc5709bf-85ec-40b4-97b2-998199d2de38", + "metadata": {}, + "outputs": [], + "source": [ + "import re\n", + "def remove_think_tags(text: str) -> str:\n", + " \"\"\"Удаляет тег ... из ответов моделей reasoning.\"\"\"\n", + " try:\n", + " match = re.search(r\"<\\/think>\", text)\n", + " if match:\n", + " return text[match.end():].strip()\n", + " except Exception as e:\n", + " print(f\"Error removing tags: {e}\")\n", + " return text.strip()\n", + " \n", + "def extract_json_from_text(text):\n", + " # Ищем первую открывающую фигурную (объект) или квадратную (массив) скобку\n", + " match = re.search(r'\\{|$$', text)\n", + " if not match:\n", + " return None\n", + "\n", + " # Отрезаем весь текст до начала JSON\n", + " json_start = match.start()\n", + " potential_json = text[json_start:]\n", + "\n", + " decoder = json.JSONDecoder()\n", + " try:\n", + " # raw_decode читает JSON и возвращает сам объект и индекс, где он закончился\n", + " obj, index = decoder.raw_decode(potential_json)\n", + " return obj\n", + " except json.JSONDecodeError as e:\n", + " print(f\"Ошибка парсинга JSON: {e}\")\n", + " return None" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "217cf949-b4ed-4501-bf6d-996907d4be7b", + "metadata": {}, + "outputs": [], + "source": [ + "def correct_def(ex):\n", + " ex['column_defenition_raw'] = ex['column_defenition']\n", + " ex['column_defenition'] = remove_think_tags(ex['column_defenition'])\n", + " return ex" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "77cbb75d-5361-47f5-98c6-3397a439c0c7", + "metadata": {}, + "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 0%| | 21/4257 [00:06<18:00, 3.92 examples/s]" - ] - }, + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['id', 'query', 'context', 'targetValue', 'table', 'table_text', 'semtab_xml_attributes_exampples_top1_tresh50', 'column_defenition'],\n", + " num_rows: 420\n", + "})" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset = load_from_disk('WTQ_test_unique_tables_serialize_def')\n", + "dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "7fc6aa83-90c3-4b6e-94f0-881de255e743", + "metadata": {}, + "outputs": [], + "source": [ + "dataset = dataset.map(lambda x : correct_def(x),num_proc=16)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "4f082a7e-6b33-4344-b2d6-20924237def8", + "metadata": {}, + "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 148\n", - "'numpy.int64' object has no attribute 'isin'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" - ] - }, + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "04a2bd74999a4f788691122483df582c", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Saving the dataset (0/1 shards): 0%| | 0/420 [00:00\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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idquerycontexttargetValuetabletable_textsemtab_xml_attributes_exampples_top1_tresh50column_defenitioncolumn_defenition_rawcolumn_defenition_json
0nu-0which country had the most cyclists finish wit...csv/203-csv/733.csvItaly| Rank | Cyclist | Team ...Rank#Cyclist#Team#Time#UCI ProTour\\nPoints\\n1#...<TABLE><HEADER NAME=\"Rank\" EXAMPLES=\"[9, 2, 3]...{\\n \"Rank\": \"The position of the cyclist in t...We are given a table with the following header...{\"Rank\": \"The position of the cyclist in the c...
1nu-1how many people were murdered in 1940/41?csv/204-csv/149.csv100,000| Description Losses | 1939/4...Description Losses#1939/40#1940/41#1941/42#194...<TABLE><HEADER NAME=\"Description Losses\" EXAMP...{\\n \"Description Losses\": \"The category or ty...We are given a table with the following header...{\"Description Losses\": \"The category or type o...
2nu-2how long did it take for the new york american...csv/203-csv/435.csv17 years| Year | Division | League | Reg. S...Year#Division#League#Reg. Season#Playoffs#Nati...<TABLE><HEADER NAME=\"Year\" EXAMPLES=\"[&quot;19...{\\n \"Year\": \"The season year or year range (e...Okay, let's tackle this problem. So, I need to...{\"Year\": \"The season year or year range (e.g.,...
3nu-3alfie's birthday party aired on january 19. wh...csv/204-csv/803.csvJanuary 26, 1995| Series # | Season # | Title ...\"Series #\"#\"Season #\"#Title#Notes#Original air...<TABLE><HEADER NAME=\"Series #\" EXAMPLES=\"[13, ...{\\n \"Series #\": \"The sequential episode numbe...We are given a table with the following header...{\"Series #\": \"The sequential episode number wi...
4nu-4what is the number of 1st place finishes acros...csv/204-csv/272.csv17| Date | Competition ...Date#Competition#Location#Country#Event#Placin...<TABLE><HEADER NAME=\"Date\" EXAMPLES=\"[&quot;1 ...{\\n \"Date\": \"The date of the event in 'Day Mo...We are given a table description about \"famous...{\"Date\": \"The date of the event in 'Day Month ...
.................................
415nu-2901when will 8:12-15 of the torah be read?csv/202-csv/268.csvYear 2| \\nReading | Year 1\\n2013, 2016, 2019, 2022...\\nReading#Year 1\\n2013, 2016, 2019, 2022 . . ....<TABLE><HEADER NAME=\"\\nReading\" EXAMPLES=\"[&qu...{\\n \"Reading\": \"The sequential reading number...We are given a table with the following header...{\"Reading\": \"The sequential reading number (in...
416nu-2935who won the tournament after the palangandas' ...csv/203-csv/225.csvAnjaparavanda| No. | Year | Name | Held at ...No.#Year#Name#Held at#Number of teams#Winner#R...<TABLE><HEADER NAME=\"No.\" EXAMPLES=\"[6, 11, 16...{\\n \"No.\": \"The sequential identifier or posi...Okay, let me tackle this linguistics task. The...{\"No.\": \"The sequential identifier or position...
417nu-3112burlington northern ordered 3 emd sd60s. what ...csv/202-csv/180.csv8300-8302| Railroad | Qty. | Road numb...Railroad#Qty.#Road numbers#Notes\\nBurlington N...<TABLE><HEADER NAME=\"Railroad\" EXAMPLES=\"[&quo...{\\n \"Railroad\": \"The name of the railroad com...Okay, let's tackle this problem. So, I need to...{\"Railroad\": \"The name of the railroad company...
418nu-3440how long as this band been releasing albums?csv/202-csv/17.csv34 years| Date | Label | Format...Date#Label#Format#Country#Catalog#Notes\\nNovem...<TABLE><HEADER NAME=\"Date\" EXAMPLES=\"[&quot;Ma...{\\n \"Date\": \"Release date formatted as 'Month...We are given a table description: \"high-end sm...{\"Date\": \"Release date formatted as 'Month Day...
419nu-3523how many more votes did daryl reid than bryan ...csv/202-csv/273.csv3090| Party | Candidate ...Party#Candidate#Votes#%#∆%#Expenditures\\nNew D...<TABLE><HEADER NAME=\"Party\" EXAMPLES=\"[&quot;R...{\\n \"Party\": \"The political party or vote cat...We are given a table with the following header...{\"Party\": \"The political party or vote categor...
\n", + "

420 rows × 10 columns

\n", + "" + ], + "text/plain": [ + " id query \\\n", + "0 nu-0 which country had the most cyclists finish wit... \n", + "1 nu-1 how many people were murdered in 1940/41? \n", + "2 nu-2 how long did it take for the new york american... \n", + "3 nu-3 alfie's birthday party aired on january 19. wh... \n", + "4 nu-4 what is the number of 1st place finishes acros... \n", + ".. ... ... \n", + "415 nu-2901 when will 8:12-15 of the torah be read? \n", + "416 nu-2935 who won the tournament after the palangandas' ... \n", + "417 nu-3112 burlington northern ordered 3 emd sd60s. what ... \n", + "418 nu-3440 how long as this band been releasing albums? \n", + "419 nu-3523 how many more votes did daryl reid than bryan ... \n", + "\n", + " context targetValue \\\n", + "0 csv/203-csv/733.csv Italy \n", + "1 csv/204-csv/149.csv 100,000 \n", + "2 csv/203-csv/435.csv 17 years \n", + "3 csv/204-csv/803.csv January 26, 1995 \n", + "4 csv/204-csv/272.csv 17 \n", + ".. ... ... \n", + "415 csv/202-csv/268.csv Year 2 \n", + "416 csv/203-csv/225.csv Anjaparavanda \n", + "417 csv/202-csv/180.csv 8300-8302 \n", + "418 csv/202-csv/17.csv 34 years \n", + "419 csv/202-csv/273.csv 3090 \n", + "\n", + " table \\\n", + "0 | Rank | Cyclist | Team ... \n", + "1 | Description Losses | 1939/4... \n", + "2 | Year | Division | League | Reg. S... \n", + "3 | Series # | Season # | Title ... \n", + "4 | Date | Competition ... \n", + ".. ... \n", + "415 | \\nReading | Year 1\\n2013, 2016, 2019, 2022... \n", + "416 | No. | Year | Name | Held at ... \n", + "417 | Railroad | Qty. | Road numb... \n", + "418 | Date | Label | Format... \n", + "419 | Party | Candidate ... \n", + "\n", + " table_text \\\n", + "0 Rank#Cyclist#Team#Time#UCI ProTour\\nPoints\\n1#... \n", + "1 Description Losses#1939/40#1940/41#1941/42#194... \n", + "2 Year#Division#League#Reg. Season#Playoffs#Nati... \n", + "3 \"Series #\"#\"Season #\"#Title#Notes#Original air... \n", + "4 Date#Competition#Location#Country#Event#Placin... \n", + ".. ... \n", + "415 \\nReading#Year 1\\n2013, 2016, 2019, 2022 . . .... \n", + "416 No.#Year#Name#Held at#Number of teams#Winner#R... \n", + "417 Railroad#Qty.#Road numbers#Notes\\nBurlington N... \n", + "418 Date#Label#Format#Country#Catalog#Notes\\nNovem... \n", + "419 Party#Candidate#Votes#%#∆%#Expenditures\\nNew D... \n", + "\n", + " semtab_xml_attributes_exampples_top1_tresh50 \\\n", + "0
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
contexttable_textcolumn_defenition_json
0csv/203-csv/733.csvRank#Cyclist#Team#Time#UCI ProTour\\nPoints\\n1#...{\"Rank\": \"The position of the cyclist in the c...
1csv/204-csv/149.csvDescription Losses#1939/40#1940/41#1941/42#194...{\"Description Losses\": \"The category or type o...
2csv/203-csv/435.csvYear#Division#League#Reg. Season#Playoffs#Nati...{\"Year\": \"The season year or year range (e.g.,...
3csv/204-csv/803.csv\"Series #\"#\"Season #\"#Title#Notes#Original air...{\"Series #\": \"The sequential episode number wi...
4csv/204-csv/272.csvDate#Competition#Location#Country#Event#Placin...{\"Date\": \"The date of the event in 'Day Month ...
............
415csv/202-csv/268.csv\\nReading#Year 1\\n2013, 2016, 2019, 2022 . . ....{\"Reading\": \"The sequential reading number (in...
416csv/203-csv/225.csvNo.#Year#Name#Held at#Number of teams#Winner#R...{\"No.\": \"The sequential identifier or position...
417csv/202-csv/180.csvRailroad#Qty.#Road numbers#Notes\\nBurlington N...{\"Railroad\": \"The name of the railroad company...
418csv/202-csv/17.csvDate#Label#Format#Country#Catalog#Notes\\nNovem...{\"Date\": \"Release date formatted as 'Month Day...
419csv/202-csv/273.csvParty#Candidate#Votes#%#∆%#Expenditures\\nNew D...{\"Party\": \"The political party or vote categor...
\n", + "

420 rows × 3 columns

\n", + "" + ], + "text/plain": [ + " context table_text \\\n", + "0 csv/203-csv/733.csv Rank#Cyclist#Team#Time#UCI ProTour\\nPoints\\n1#... \n", + "1 csv/204-csv/149.csv Description Losses#1939/40#1940/41#1941/42#194... \n", + "2 csv/203-csv/435.csv Year#Division#League#Reg. Season#Playoffs#Nati... \n", + "3 csv/204-csv/803.csv \"Series #\"#\"Season #\"#Title#Notes#Original air... \n", + "4 csv/204-csv/272.csv Date#Competition#Location#Country#Event#Placin... \n", + ".. ... ... \n", + "415 csv/202-csv/268.csv \\nReading#Year 1\\n2013, 2016, 2019, 2022 . . .... \n", + "416 csv/203-csv/225.csv No.#Year#Name#Held at#Number of teams#Winner#R... \n", + "417 csv/202-csv/180.csv Railroad#Qty.#Road numbers#Notes\\nBurlington N... \n", + "418 csv/202-csv/17.csv Date#Label#Format#Country#Catalog#Notes\\nNovem... \n", + "419 csv/202-csv/273.csv Party#Candidate#Votes#%#∆%#Expenditures\\nNew D... \n", + "\n", + " column_defenition_json \n", + "0 {\"Rank\": \"The position of the cyclist in the c... \n", + "1 {\"Description Losses\": \"The category or type o... \n", + "2 {\"Year\": \"The season year or year range (e.g.,... \n", + "3 {\"Series #\": \"The sequential episode number wi... \n", + "4 {\"Date\": \"The date of the event in 'Day Month ... \n", + ".. ... \n", + "415 {\"Reading\": \"The sequential reading number (in... \n", + "416 {\"No.\": \"The sequential identifier or position... \n", + "417 {\"Railroad\": \"The name of the railroad company... \n", + "418 {\"Date\": \"Release date formatted as 'Month Day... \n", + "419 {\"Party\": \"The political party or vote categor... \n", + "\n", + "[420 rows x 3 columns]" + ] + }, + "execution_count": 122, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = df_data[['context','table_text','column_defenition_json']]\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "id": "daeca5e0-96fb-44de-8d81-6044d7189571", + "metadata": {}, + "outputs": [], + "source": [ + "from io import StringIO\n", + "import re" + ] + }, + { + "cell_type": "code", + "execution_count": 129, + "id": "93f19f55-d6fd-47b3-9186-ac0e38d9363b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "----------\n", + "{'position', 'loa(metres)', 'sailnumber', 'state/country', 'skipper', 'yacht', 'yachttype', 'elapsedtimed:hh:mm:ss'}\n", + "{'position', 'elapsedtime(d:hh:mm:ss)', 'loa(metres)', 'sailnumber', 'state/country', 'skipper', 'yacht', 'yachttype'}\n", + "{'elapsedtimed:hh:mm:ss'}\n", + "----------\n", + "{'reigns:', 'place:', 'notes:', 'wrestler:', 'date:'}\n", + "{'place', 'reigns', 'date', 'notes', 'wrestler'}\n", + "{'reigns:', 'place:', 'notes:', 'wrestler:', 'date:'}\n", + "----------\n", + "{'#ofbids', 'finalfour', 'championshipgame', 'record', 'roundof32', 'eliteeight', 'conference', 'win\\xa0%', 'sweetsixteen'}\n", + "{'#ofbids', 'finalfour', 'championshipgame', 'record', 'roundof32', 'eliteeight', 'conference', 'win%', 'sweetsixteen'}\n", + "{'win\\xa0%'}\n", + "----------\n", + "{'opus', 'title', 'premièredate', 'place,theatre', 'compo-sition', 'sub\\xaddivisions'}\n", + "{'opus', 'title', 'premièredate', 'place,theatre', 'composition', 'subdivisions'}\n", + "{'compo-sition', 'sub\\xaddivisions'}\n", + "----------\n", + "{'times:', 'notes:', 'wrestler:', 'date:', 'location:'}\n", + "{'date', 'notes', 'location', 'times', 'wrestler'}\n", + "{'times:', 'notes:', 'wrestler:', 'date:', 'location:'}\n", + "----------\n", + "{'oddsofwinning(1\\xa0in)', 'prize(eur)', 'inordertowin', 'divisions', 'numberofwinningtickets'}\n", + "{'prize(eur)', 'oddsofwinning(1in)', 'inordertowin', 'divisions', 'numberofwinningtickets'}\n", + "{'oddsofwinning(1\\xa0in)'}\n", + "----------\n", + "{'l/100\\xa0km', 'mpg(usgallons)', 'fueltype', 'model', 'nzrating(stars)'}\n", + "{'l/100km', 'mpg(usgallons)', 'fueltype', 'model', 'nzrating(stars)'}\n", + "{'l/100\\xa0km'}\n", + "----------\n", + "{'allnurses', 'hew\\xa0:populationratio', 'region', 'physician\\xa0:populationratio', 'ho\\xa0:populationratio', 'mid-wives', 'nurse\\xa0:populationratio', 'physician(gp&specialist)', 'midwife:populationratio', 'healthofficer', 'hew*'}\n", + "{'allnurses', 'physician:populationratio', 'hew:populationratio', 'region', 'nurse:populationratio', 'mid-wives', 'ho:populationratio', 'physician(gp&specialist)', 'midwife:populationratio', 'healthofficer', 'hew*'}\n", + "{'physician\\xa0:populationratio', 'hew\\xa0:populationratio', 'nurse\\xa0:populationratio', 'ho\\xa0:populationratio'}\n", + "----------\n", + "{'year32015,2018,2021,2024...8:16–9:35', 'year12013,2016,2019,2022...6:2–7:7', 'year22014,2017,2020,2023...7:8–8:15', 'reading'}\n", + "{'year3', 'year1', 'year2', 'reading'}\n", + "{'year32015,2018,2021,2024...8:16–9:35', 'year12013,2016,2019,2022...6:2–7:7', 'year22014,2017,2020,2023...7:8–8:15'}\n" + ] + } + ], + "source": [ + "for i,data in df.iterrows():\n", + " ddd = pd.read_csv(StringIO(data['table_text']), delimiter='#')\n", + " col = set([re.sub('\\\\n','',re.sub('\\\\\\\\n','',re.sub(' ','',k))).lower() for k in ddd.columns])\n", + " defgen_key = set([re.sub('\\\\n','',re.sub('\\\\\\\\n','',re.sub(' ','',k))).lower() for k in json.loads(data['column_defenition_json']).keys()])\n", + " \n", + " if len(col-defgen_key)>0:\n", + " print('-'*10)\n", + " print(col)\n", + " print(defgen_key)\n", + " print(col-defgen_key)" + ] + }, + { + "cell_type": "code", + "execution_count": 130, + "id": "fb72990f-1d72-43c8-b8da-50c99e338968", + "metadata": {}, + "outputs": [], + "source": [ + "df.to_parquet(\"df_wtq_test.parquet.gzip\", compression=\"gzip\")" + ] + }, + { + "cell_type": "code", + "execution_count": 131, + "id": "2e337706-dd0a-4070-9e67-1e5eb07e58b7", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
contexttable_textcolumn_defenition_json
0csv/203-csv/733.csvRank#Cyclist#Team#Time#UCI ProTour\\nPoints\\n1#...{\"Rank\": \"The position of the cyclist in the c...
1csv/204-csv/149.csvDescription Losses#1939/40#1940/41#1941/42#194...{\"Description Losses\": \"The category or type o...
2csv/203-csv/435.csvYear#Division#League#Reg. Season#Playoffs#Nati...{\"Year\": \"The season year or year range (e.g.,...
3csv/204-csv/803.csv\"Series #\"#\"Season #\"#Title#Notes#Original air...{\"Series #\": \"The sequential episode number wi...
4csv/204-csv/272.csvDate#Competition#Location#Country#Event#Placin...{\"Date\": \"The date of the event in 'Day Month ...
............
415csv/202-csv/268.csv\\nReading#Year 1\\n2013, 2016, 2019, 2022 . . ....{\"Reading\": \"The sequential reading number (in...
416csv/203-csv/225.csvNo.#Year#Name#Held at#Number of teams#Winner#R...{\"No.\": \"The sequential identifier or position...
417csv/202-csv/180.csvRailroad#Qty.#Road numbers#Notes\\nBurlington N...{\"Railroad\": \"The name of the railroad company...
418csv/202-csv/17.csvDate#Label#Format#Country#Catalog#Notes\\nNovem...{\"Date\": \"Release date formatted as 'Month Day...
419csv/202-csv/273.csvParty#Candidate#Votes#%#∆%#Expenditures\\nNew D...{\"Party\": \"The political party or vote categor...
\n", + "

420 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " context table_text \\\n", + "0 csv/203-csv/733.csv Rank#Cyclist#Team#Time#UCI ProTour\\nPoints\\n1#... \n", + "1 csv/204-csv/149.csv Description Losses#1939/40#1940/41#1941/42#194... \n", + "2 csv/203-csv/435.csv Year#Division#League#Reg. Season#Playoffs#Nati... \n", + "3 csv/204-csv/803.csv \"Series #\"#\"Season #\"#Title#Notes#Original air... \n", + "4 csv/204-csv/272.csv Date#Competition#Location#Country#Event#Placin... \n", + ".. ... ... \n", + "415 csv/202-csv/268.csv \\nReading#Year 1\\n2013, 2016, 2019, 2022 . . .... \n", + "416 csv/203-csv/225.csv No.#Year#Name#Held at#Number of teams#Winner#R... \n", + "417 csv/202-csv/180.csv Railroad#Qty.#Road numbers#Notes\\nBurlington N... \n", + "418 csv/202-csv/17.csv Date#Label#Format#Country#Catalog#Notes\\nNovem... \n", + "419 csv/202-csv/273.csv Party#Candidate#Votes#%#∆%#Expenditures\\nNew D... \n", + "\n", + " column_defenition_json \n", + "0 {\"Rank\": \"The position of the cyclist in the c... \n", + "1 {\"Description Losses\": \"The category or type o... \n", + "2 {\"Year\": \"The season year or year range (e.g.,... \n", + "3 {\"Series #\": \"The sequential episode number wi... \n", + "4 {\"Date\": \"The date of the event in 'Day Month ... \n", + ".. ... \n", + "415 {\"Reading\": \"The sequential reading number (in... \n", + "416 {\"No.\": \"The sequential identifier or position... \n", + "417 {\"Railroad\": \"The name of the railroad company... \n", + "418 {\"Date\": \"Release date formatted as 'Month Day... \n", + "419 {\"Party\": \"The political party or vote categor... \n", + "\n", + "[420 rows x 3 columns]" + ] + }, + "execution_count": 131, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "dd = pd.read_parquet(\"df_wtq_test.parquet.gzip\")\n", + "dd" + ] + }, + { + "cell_type": "code", + "execution_count": 147, + "id": "e1cf2fbd-9f36-4a28-a57e-e99970772ac1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['id', 'statement', 'context', 'label', 'table', 'table_text', 'semtab_xml_attributes_semantic_datatype_exampples_top1_tresh50'],\n", + " num_rows: 4339\n", + "})" + ] + }, + "execution_count": 147, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset = load_from_disk('WTQ_test_xml')\n", + "dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 140, + "id": "e1b4ff8e-df68-4060-9005-f4f725b537a8", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'
'" + ] + }, + "execution_count": 140, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset['semtab_xml_elements_semantic_datatype_exampples_top1_tresh50'][0]" + ] + }, + { + "cell_type": "code", + "execution_count": 144, + "id": "58018b78-f3b5-421c-97a2-54b9ed2f6470", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[2, 3, 4]" + ] + }, + "execution_count": 144, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sorted([3,2,4])" + ] + }, + { + "cell_type": "markdown", + "id": "5b2c45d6-aec6-4a9e-b297-d41586e5da87", + "metadata": {}, + "source": [ + "# Make colum defenition dataset tab fact" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "a7516c05-328b-4921-bf3e-ab3ab5031841", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_exampples_description_top1_tresh50', 'semtab_xml_attributes_description_top1_tresh50', 'semtab_xml_attributes_top1_tresh50', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_exampples_description_top1_tresh50', 'semtab_xml_elements_description_top1_tresh50', 'semtab_xml_elements_top1_tresh50', 'semtab_xml_attributes_top1_tresh50_answ', 'semtab_xml_attributes_top1_tresh50_label', 'semtab_xml_attributes_top1_tresh50_answ_correct', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50_answ', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50_label', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50_answ_correct', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50_answ', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50_label', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50_answ_correct', 'semtab_xml_elements_exampples_description_top1_tresh50_answ', 'semtab_xml_elements_exampples_description_top1_tresh50_label', 'semtab_xml_elements_exampples_description_top1_tresh50_answ_correct', 'semtab_xml_elements_description_top1_tresh50_answ', 'semtab_xml_elements_description_top1_tresh50_label', 'semtab_xml_elements_description_top1_tresh50_answ_correct', 'semtab_xml_elements_top1_tresh50_answ', 'semtab_xml_elements_top1_tresh50_label', 'semtab_xml_elements_top1_tresh50_answ_correct', '__index_level_0__', 'column_defenition'],\n", + " num_rows: 1695\n", + "})" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset = load_from_disk('tab_fact_test_unique_tables_def')\n", + "dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "31bab864-2bce-4c8b-914e-fe9f4a73458c", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Okay, let's tackle this problem. So, I need to analyze the given table schema and create a JSON dictionary where each key is a header name and the value is a semantic definition including format features and units if present.\n", + "\n", + "First, I'll look at the real data example provided. The table description is \"wyfk\", which seems to be a typo or maybe an acronym I don't recognize. But maybe it's not important. The headers are: call sign, frequency mhz, city of license, erp w, class, fcc info.\n", + "\n", + "Starting with \"call sign\". The examples are strings like \"w230av\", \"w273ae\", \"w282ae\". So it's a unique identifier for a radio station, probably a combination of letters and numbers. I should note the format here, like starting with a letter followed by numbers and letters. But the examples show \"w\" as the first letter, which is common for US radio stations (like W for east of the Mississippi). So the definition should mention it's a unique identifier, text format, possibly following FCC naming conventions.\n", + "\n", + "Next, \"frequency mhz\". The examples are \"93.9 fm\", \"101.7 fm\", \"104.3 fm\". So the format is a decimal number followed by \"fm\", which is short for frequency modulation. The unit is megahertz, but the example includes \"fm\" as part of the string. Wait, the header says \"frequency mhz\", so the actual value is in MHz, but the example includes \"fm\" as part of the string. So the unit here is MHz, but the example uses \"fm\" which stands for frequency modulation. So the definition should mention that the value is in MHz, but the string includes \"fm\" as part of the presentation.\n", + "\n", + "\"city of license\" examples are \"gadsden , alabama\", \"albany , georgia\", etc. So it's a city and state name, comma separated. The format is \"city, state\". Need to note that it's a location, written as city followed by state abbreviation.\n", + "\n", + "\"erp w\" examples are 10, 27, 27. The header says \"erp w\", which probably stands for Effective Radiated Power in watts. So the unit is watts (W). The examples are integers, so it's a numerical value with unit watts.\n", + "\n", + "\"class\" examples are \"d\", \"d\", \"d\". So it's a single letter code. In radio, class D is a common class for FM stations. So the format is a single-letter code, likely indicating the station's operational class as per FCC regulations.\n", + "\n", + "\"fcc info\" examples are all \"fcc\". So this is probably a reference to the Federal Communications Commission information, maybe indicating that the station is licensed by the FCC. The example is the string \"fcc\", so the header is a constant string here, but maybe in other cases it could be different. But based on the examples, it's a fixed string \"fcc\".\n", + "\n", + "Now, for each header:\n", + "\n", + "1. call sign: As per examples, it's a text string with format like \"letter + number + letter\" (e.g., w230av). It's the station's unique identifier.\n", + "\n", + "2. frequency mhz: The examples have numbers followed by \"fm\", but the header specifies MHz. So the value is numerical in MHz, and the \"fm\" is part of the display format. However, the example shows \"93.9 fm\" which is a string. Wait, the header's name is \"frequency mhz\", so the value is the frequency in MHz, but in the examples it's written as \"93.9 fm\". Wait, maybe the frequency is 93.9 MHz, and \"fm\" is the band. So the header might be the frequency value in MHz, but the example includes the band. However, the example shows the entire string as the example. Wait, the problem states that if units are in examples, include them. So in the example, it's \"93.9 fm\", so the unit is MHz but written as part of the string. Wait, the actual value is 93.9 MHz, but the example shows \"93.9 fm\", so the format is \"X.X fm\" where X.X is the frequency in MHz. So the unit is MHz, but presented as a string with \"fm\" attached.\n", + "\n", + "Wait, the problem says: \"If there are units of measurement in the EXAMPLES, then include them in the answer.\"\n", + "\n", + "So in the example for frequency mhz, the examples include \"93.9 fm\", so the unit is MHz but the string includes \"fm\" as part of the example. Wait, the header is named \"frequency mhz\", so it's clear that the unit is MHz. However, the examples show the value as \"93.9 fm\", so the actual value is the number followed by \"fm\", which is the modulation type. So the unit here is MHz, but the example includes the \"fm\" as part of the string. Wait, but MHz is the unit of frequency, and \"fm\" stands for frequency modulation. So the frequency is 93.9 MHz, and it's an FM station. So the value is the frequency in MHz, but the example shows it as \"93.9 fm\", so the string includes both the numeric value and the modulation type.\n", + "\n", + "But the header is called \"frequency mhz\", so the numeric part is the frequency in MHz. However, the example shows \"93.9 fm\", which is not just the number. So perhaps the example includes the modulation type as part of the value. So the correct way is to note that the value is presented as a decimal number followed by \"fm\", indicating the frequency in MHz and the modulation type.\n", + "\n", + "Wait, but the header name says \"frequency mhz\", so the unit is MHz. However, the example shows \"93.9 fm\", which is a common way to write the frequency (e.g., 93.9 FM). So the format is \"X.X fm\" where X.X is the frequency in MHz. Therefore, the unit is MHz but the string includes \"fm\" as part of the presentation.\n", + "\n", + "But the task says: \"If there are units of measurement in the EXAMPLES, then include them in the answer.\"\n", + "\n", + "So in the example, the unit is implicitly MHz, but the string includes \"fm\". Wait, maybe the unit here is \"MHz\" but the example includes \"fm\" as part of the label. Hmm, this is a bit confusing.\n", + "\n", + "Wait, let's look back at example 1: \"diameter_km\" has examples like [12756, 6792, 142984], but the header includes \"_km\", so the unit is kilometers. The example doesn't include the unit in the value, but the header name does. Wait, no: in the example 1, the header is \"diameter_km\", and examples are just numbers. So the unit is in the header name. But in example 3, the header is \"screen_size\" with examples as numbers, and the output says \"Unit of measurement: inches.\" So even if the header name doesn't include the unit, the example might have it.\n", + "\n", + "Wait, in the problem statement: \"If there are units of measurement in the EXAMPLES, then include them in the answer.\"\n", + "\n", + "So if the example has a unit in the string, like \"93.9 fm\", then the unit is part of the example. However, the unit for frequency is MHz, but \"fm\" is a modulation type. So the \"fm\" is not the unit but the type of radio station. So the frequency value is in MHz, but the example includes \"fm\" as part of the display. So the value is the numerical part (93.9) in MHz, but the example shows it as \"93.9 fm\".\n", + "\n", + "Therefore, in the definition, we should note that the value is the frequency in MHz, presented as a decimal followed by \"fm\" to indicate the FM band. So the unit is MHz, but the string includes \"fm\" as part of the format.\n", + "\n", + "Wait, the problem says to include units of measurement in the examples. So in the examples, if the value includes a unit (like \"93.9 fm\"), then the unit is part of the example. However, \"fm\" here is not the unit for the frequency but the modulation type. The actual unit is MHz. But the example's string includes \"fm\", which might be a separate part. So perhaps the example shows both the frequency value and the band.\n", + "\n", + "So the correct way is to state that the frequency is given in MHz, and the format includes the band (FM). So the definition would be: \"The frequency of the radio station in megahertz (MHz), presented as a decimal number followed by 'fm' to indicate the modulation band.\"\n", + "\n", + "But according to the problem statement: if units of measurement are in the examples, include them. So \"fm\" is part of the example, but is it a unit? Maybe not. The unit is MHz, but the example shows the value as \"93.9 fm\", which is the standard way to write it. So perhaps the example includes the unit as \"fm\", but actually, the unit is MHz. Wait, no. 93.9 MHz is the frequency, and \"fm\" is the broadcast band. So \"fm\" is not a unit but a label.\n", + "\n", + "Wait, looking at example 3: \"screen_size\" has examples like 6.1, 6.2, 6.7, and the output says \"Unit of measurement: inches.\" So even though the example doesn't include the unit, the header name doesn't either. But the problem says \"If there are units of measurement in the EXAMPLES, then include them in the answer.\"\n", + "\n", + "In example 3's screen_size, the examples are numbers, no units. So the output includes the unit because it's known from the context (inches), but maybe the problem is that the examples don't have units, but the problem says to include them if they are in the examples.\n", + "\n", + "Wait, no: the problem says \"If there are units of measurement in the EXAMPLES, then include them in the answer.\"\n", + "\n", + "So in example 3, the examples are just numbers, so no units in the examples. But the output still says \"Unit of measurement: inches.\" Hmm, maybe there's a misunderstanding here.\n", + "\n", + "Wait, looking back at the examples provided:\n", + "\n", + "In Example 1, the header is \"diameter_km\", and the examples are numbers like [12756, 6792, 142984]. But the output says \"Unit of measurement: kilometers (km).\"\n", + "\n", + "But the header name includes \"_km\", so perhaps the unit is derived from the header name. But the problem statement says: \"If there are units of measurement in the EXAMPLES, then include them in the answer.\"\n", + "\n", + "So if the examples have the unit, like in Example 1's \"diameter_km\", the examples don't have \"km\" in the numbers. But the header name does. So perhaps the problem is that when the example has the unit (like in example 3, which doesn't), but the output includes units because of the header. However, the problem states to include units from the examples.\n", + "\n", + "Wait, in example 3's output, the screen_size has \"Unit of measurement: inches.\" But the examples are 6.1, etc. So maybe the examples don't include the unit, but the problem expects you to know it's inches. But the problem statement says \"If there are units of measurement in the EXAMPLES, then include them in the answer.\"\n", + "\n", + "So if the examples contain the unit (like \"93.9 fm\"), then include it. In Example 1's \"diameter_km\", the examples don't have \"km\" but the header does. So the unit is inferred from the header. But the problem says to look at the examples.\n", + "\n", + "Wait, perhaps the problem is that the examples are in the format that includes the unit. For example, if the example is \"93.9 fm\", then the unit is \"fm\", but that's not the case. The unit for frequency is MHz, but \"fm\" is the modulation type.\n", + "\n", + "Wait, perhaps in this problem, the examples might have the unit as part of the string. For example, in example 1's diameter_km, the example shows numbers without units, but the header name includes the unit. However, in the real data case for frequency mhz, the examples have \"93.9 fm\", so the unit here is MHz but the example shows \"fm\". This is confusing.\n", + "\n", + "Let me re-read the problem statement:\n", + "\n", + "\"If there are units of measurement in the EXAMPLES, then include them in the answer.\"\n", + "\n", + "So if the examples contain units (like \"10W\", \"50m\"), then include the unit. So in the frequency mhz example, the examples are \"93.9 fm\", so \"fm\" is part of the example. But \"fm\" is not the unit of measurement here; the unit is MHz. However, in common usage, radio frequencies are stated as \"93.9 FM\" where FM is the broadcast band. So the unit here is MHz, but the string includes \"FM\" as part of the label. However, the problem says to include units from examples if present. So if the example string contains the unit, like \"93.9 MHz\", then the unit is MHz. But here it's \"93.9 fm\", so the unit is not explicitly given in the string. Wait, but \"fm\" is not a unit. The unit is MHz, but the example uses \"fm\" as a label.\n", + "\n", + "This is tricky. Let's check the examples given.\n", + "\n", + "In Example 1: \"diameter_km\" has examples as numbers (12756, etc.), but the header name has \"_km\". The output says \"Unit of measurement: kilometers (km).\"\n", + "\n", + "In Example 3: \"screen_size\" examples are numbers, but output says \"Unit of measurement: inches.\"\n", + "\n", + "So the problem expects the unit to be derived from the header name or context. However, the problem statement says \"If there are units of measurement in the EXAMPLES, then include them in the answer.\" So in cases where the example includes the unit (e.g., \"93.9 fm\" would have \"fm\" as the unit?), but in reality, \"fm\" is not the unit. The unit is MHz, but the example string includes \"fm\" as a suffix.\n", + "\n", + "Wait, maybe \"fm\" here is a typo and should be MHz. But it's written as \"fm\". Alternatively, maybe the unit is \"MHz\" but the example shows it as \"93.9 fm\" where \"fm\" is the abbreviation for the band. But in radio, frequency is measured in MHz, so the unit is MHz. However, the example shows \"93.9 fm\", which is the way you say it on the radio.\n", + "\n", + "In that case, the example has \"fm\" as part of the string, but the unit is MHz. So according to the problem statement, we need to include the unit from the example. But the example string has \"fm\", which isn't the unit. This is a problem.\n", + "\n", + "Alternatively, maybe \"fm\" is the unit here, but that's incorrect because the standard unit for frequency is hertz (Hz), so MHz. But in radio contexts, FM refers to Frequency Modulation, not the unit. So the value is 93.9 MHz, and \"fm\" is the broadcast type.\n", + "\n", + "Given this confusion, perhaps the correct approach is to look at the header name. The header is \"frequency mhz\", so the unit is MHz. The examples show the value as \"93.9 fm\", which is a common way to write it. So the format is a decimal number followed by \"fm\", and the unit is MHz. But how to convey this in the definition?\n", + "\n", + "The output in example 3 for screen_size says \"Unit of measurement: inches.\" So even though the examples are numbers without units, the unit is inferred from context. But according to the problem statement, we should only include units from the examples. So if the examples do not have units (like the numbers), then we don't include units. However, the examples in the real data case have \"93.9 fm\", so the unit here is part of the example.\n", + "\n", + "Wait, the problem states: \"If there are units of measurement in the EXAMPLES, then include them in the answer.\"\n", + "\n", + "In the real data's frequency mhz examples, the examples are \"93.9 fm\", etc. So the \"fm\" is part of the example. But \"fm\" here is not a unit of measurement. The unit is MHz. However, in radio, \"93.9 FM\" is the standard notation where FM stands for Frequency Modulation. So the example is written as \"frequency in MHz followed by 'fm'\". So the unit is MHz, but the example string includes \"fm\" as part of the label.\n", + "\n", + "Given that, the correct way would be to note that the value is presented as a decimal number followed by \"fm\", and the unit is MHz. So the unit should be included as \"MHz\", but the example includes \"fm\" as part of the presentation.\n", + "\n", + "Wait, the problem says: \"If there are units of measurement in the EXAMPLES, then include them in the answer.\"\n", + "\n", + "So if the example string contains a unit (like \"10W\"), then include it. In the case of \"93.9 fm\", \"fm\" is not a unit, but \"MHz\" is. However, the example string doesn't have \"MHz\" in it. So according to the problem statement, since the examples don't have the unit (MHz), but have \"fm\", which is not a unit, perhaps we don't include any unit here. But that seems odd.\n", + "\n", + "Alternatively, maybe the problem considers \"fm\" as part of the unit. But that's incorrect. The correct unit is MHz. So perhaps the problem's instruction is that if the example contains a unit (like \"10W\" has 'W'), then include it. In our case, \"fm\" isn't a unit. So we don't include units from the examples here.\n", + "\n", + "Wait, but example 1 has the header \"diameter_km\", which has the unit in the header name, but the examples are numbers. The output includes the unit. So maybe the problem is that even if the examples don't have the unit, if the header name has it, we include it. But the problem statement says to check the examples.\n", + "\n", + "This is confusing. Let's look at the provided examples again.\n", + "\n", + "In Example 1, the header is \"diameter_km\", and the examples are numbers. The output includes \"Unit of measurement: kilometers (km).\" So even though the examples don't have \"km\", the unit is included. But according to the problem statement: \"If there are units of measurement in the EXAMPLES, then include them in the answer.\"\n", + "\n", + "But in Example 1, the examples don't have units (they're just numbers), yet the output includes the unit. So the problem statement might be misworded, or perhaps the unit is inferred from the header name.\n", + "\n", + "Wait, the problem says: \"If there are units of measurement in the EXAMPLES, then include them in the answer.\"\n", + "\n", + "But in Example 1, the examples don't have units. So maybe the problem is that the unit is part of the header name, and the examples don't include it. But the output includes it.\n", + "\n", + "Hmm, perhaps the problem statement is not perfectly clear. But given the examples, when the header name includes a unit (like \"diameter_km\"), then the output includes it. So even if the examples don't have it, we include it because the header name does.\n", + "\n", + "Wait, no. In Example 3, the header is \"screen_size\", which doesn't include units in the name. But the output includes \"inches\" as the unit. So perhaps the unit is derived from context, not the header name.\n", + "\n", + "This is a bit of a mess. Let's proceed with the real data.\n", + "\n", + "For \"call sign\": examples are strings like \"w230av\", so definition is a unique identifier, text format, likely following FCC conventions (starts with W, followed by numbers and letters).\n", + "\n", + "\"frequency mhz\": examples are \"93.9 fm\", etc. So the value is the frequency in MHz, presented with \"fm\" as the modulation band. The unit is MHz, but the examples include \"fm\". However, since the header name is \"frequency mhz\", we can say the unit is MHz, but the example shows \"X.X fm\" where X.X is the frequency. So the definition should mention the format includes \"fm\".\n", + "\n", + "\"city of license\": examples are \"gadsden , alabama\", which is city followed by comma and state. So format is city, state.\n", + "\n", + "\"erp w\": examples are integers 10, 27, etc. Header name includes \"w\", so unit is watts. The examples are numbers, so unit is watts.\n", + "\n", + "\"class\": examples are \"d\", so single letter code indicating station class.\n", + "\n", + "\"fcc info\": examples are \"fcc\", which is a constant string, probably indicating FCC licensing.\n", + "\n", + "Now, for each header:\n", + "\n", + "call sign: \"The unique identifier of a radio station, typically starting with a letter (e.g., 'W') followed by numbers and letters, presented in text format.\"\n", + "\n", + "frequency mhz: \"The broadcast frequency of the station in megahertz (MHz), presented as a decimal number followed by 'fm' to indicate frequency modulation. Example: '93.9 fm'.\"\n", + "\n", + "Wait, but the problem says to include units from examples. Since examples have \"fm\", but the unit is MHz, perhaps the definition should say \"Unit of measurement: MHz.\"\n", + "\n", + "Wait, in example 1's output, \"diameter_km\" has unit kilometers. The header name has _km. Similarly, \"screen_size\" has unit inches even though header name doesn't have it. So perhaps the unit is included in the definition regardless of the header name, as long as it's clear.\n", + "\n", + "But according to the problem statement: if units are in examples, include them. So in the frequency example, the example has \"93.9 fm\", which is a bit confusing. But since the header is \"frequency mhz\", the unit is MHz. So maybe the definition should include \"Unit of measurement: megahertz (MHz)\".\n", + "\n", + "However, the example shows \"fm\" as part of the string. So the format is decimal followed by \"fm\". Therefore, the description should mention that the value is presented as a decimal number followed by \"fm\", with unit MHz.\n", + "\n", + "For \"erp w\", examples are integers, and header name has \"w\", so unit is watts.\n", + "\n", + "Let's structure each header:\n", + "\n", + "call sign: text format, unique identifier.\n", + "\n", + "frequency mhz: format is number + \" fm\", unit MHz.\n", + "\n", + "city of license: comma-separated city and state.\n", + "\n", + "erp w: numerical value in watts.\n", + "\n", + "class: single-letter code.\n", + "\n", + "fcc info: constant \"fcc\" string.\n", + "\n", + "Now, applying to the real data:\n", + "\n", + "\"call sign\": The unique identifier of a radio station in the United States, typically starting with the letter 'W' (for stations east of the Mississippi River) followed by numbers and letters. Presented as a text string. Example: \"w230av\".\n", + "\n", + "\"frequency mhz\": The broadcast frequency in megahertz (MHz), presented as a decimal number followed by 'fm' to indicate the modulation band. Example: \"93.9 fm\".\n", + "\n", + "\"city of license\": The city and state where the station is licensed to operate, formatted as \"city, state\". Example: \"gadsden, alabama\".\n", + "\n", + "\"erp w\": The Effective Radiated Power of the station, measured in watts (W). Example: 10 W.\n", + "\n", + "\"class\": The operational class of the radio station as defined by the FCC, indicated by a single-letter code. Example: \"d\".\n", + "\n", + "\"fcc info\": A reference to the Federal Communications Commission (FCC) licensing information. Example: \"fcc\".\n", + "\n", + "Wait, but for \"erp w\", the examples are numbers like 10, 27. So the unit is watts, so in the definition, it's \"The Effective Radiated Power (ERP) of the station, measured in watts (W).\"\n", + "\n", + "Similarly, for \"frequency mhz\", the unit is MHz.\n", + "\n", + "But the problem states: \"If there are units of measurement in the EXAMPLES, then include them in the answer.\"\n", + "\n", + "In the frequency examples, the examples include \"fm\" as part of the string, but the unit is MHz. So the unit should be mentioned as MHz. The \"fm\" is part of the format, not the unit. So the definition should say \"Unit of measurement: megahertz (MHz).\"\n", + "\n", + "But the example string has \"93.9 fm\", so the format includes both the number and \"fm\". So the description would be \"The broadcast frequency in megahertz (MHz), presented as a decimal number followed by 'fm' to indicate frequency modulation.\"\n", + "\n", + "Similarly, for \"screen_size\" in example 3, the output says \"Unit of measurement: inches.\" So even though the example doesn't have inches in the data, the unit is stated. So likely, the unit is derived from the context.\n", + "\n", + "In the real data, the \"frequency mhz\" header has \"mhz\" in the name, so it's clear that the unit is MHz. But the examples include \"fm\", which is a separate part.\n", + "\n", + "Wait, the problem says to look at the examples for units. If the examples contain units (e.g., \"93.9 fm\" has \"fm\"), but \"fm\" isn't the unit. So maybe the problem expects us to note that the unit is MHz based on the header name.\n", + "\n", + "But according to the problem statement, the units should be included if they're in the examples. Since the example string has \"fm\", but \"fm\" is not a unit, perhaps we don't include it. However, the header name says \"mhz\", so we should include MHz as the unit.\n", + "\n", + "This is tricky. Given the examples provided in the problem statement, for instance example 1, the header is \"diameter_km\", and the output includes \"Unit of measurement: kilometers (km).\", even though the examples are just numbers without units. So the problem expects the unit to be derived from the header name.\n", + "\n", + "Similarly, in example 3, \"screen_size\" header, the output includes \"inches\" as the unit, which isn't in the header name. So perhaps the unit is derived from context, not the header name.\n", + "\n", + "Wait, example 3 is about smartphones, and screen size is typically in inches. So context matters.\n", + "\n", + "In our problem, \"frequency mhz\" header includes \"mhz\", so the unit is MHz. Similarly, \"erp w\" includes \"w\", so the unit is watts.\n", + "\n", + "Therefore, for each header:\n", + "\n", + "- call sign: no unit, text format.\n", + "\n", + "- frequency mhz: unit MHz.\n", + "\n", + "- city of license: text.\n", + "\n", + "- erp w: unit W.\n", + "\n", + "- class: text.\n", + "\n", + "- fcc info: text.\n", + "\n", + "So the definitions should include the units when they are indicated by the header name or context.\n", + "\n", + "Thus:\n", + "\n", + "\"call sign\": The unique identifier of a radio station, typically in the format of a letter followed by numbers and letters (e.g., 'w230av'), presented as a text string.\n", + "\n", + "\"frequency mhz\": The broadcast frequency in megahertz (MHz), presented as a decimal number followed by 'fm' to denote the modulation band.\n", + "\n", + "\"city of license\": The city and state where the radio station is licensed to operate, formatted as \"city, state\" (e.g., \"gadsden, alabama\").\n", + "\n", + "\"erp w\": The effective radiated power of the radio station, measured in watts (W).\n", + "\n", + "\"class\": The operational class of the radio station as defined by the FCC, represented by a single-letter code (e.g., 'd').\n", + "\n", + "\"fcc info\": A reference to the Federal Communications Commission licensing information, presented as the string 'fcc'.\n", + "\n", + "Wait, but the examples for \"fcc info\" are all \"fcc\", so it's a constant string. So the definition would be \"Indicates FCC licensing information, presented as the string 'fcc'.\"\n", + "\n", + "But the problem says \"brief but semantically succinct definition\". So need to be concise.\n", + "\n", + "Let me check example 1's output: \"The proper name of a celestial body in the Solar system, presented in text format.\"\n", + "\n", + "So for \"call sign\", maybe \"The unique identifier of a radio station, presented as a text string following FCC naming conventions (e.g., 'w230av').\"\n", + "\n", + "But the problem says \"brief but semantically succinct\".\n", + "\n", + "Also, for \"frequency mhz\", include the unit.\n", + "\n", + "So:\n", + "\n", + "\"frequency mhz\": \"The broadcast frequency in megahertz (MHz), presented as a decimal number followed by 'fm' (e.g., '93.9 fm').\"\n", + "\n", + "But the problem says to include units from the examples. However, the unit is MHz, which is part of the header name. Since the example string includes \"fm\", but the actual unit is MHz, the definition should state the unit as MHz.\n", + "\n", + "Now, compiling all:\n", + "\n", + "call sign: The unique identifier of a radio station, presented as a text string (e.g., 'w230av').\n", + "\n", + "frequency mhz: The broadcast frequency in megahertz (MHz), presented as a decimal number followed by 'fm' (e.g., '93.9 fm').\n", + "\n", + "city of license: The licensed city and state of the radio station, formatted as \"city, state\" (e.g., 'gadsden, alabama').\n", + "\n", + "erp w: The effective radiated power of the station, measured in watts (W) (e.g., 10 W).\n", + "\n", + "class: The operational class of the radio station as defined by the FCC, represented by a single-letter code (e.g., 'd').\n", + "\n", + "fcc info: A reference to FCC licensing information, presented as the string 'fcc'.\n", + "\n", + "But the problem says to include units if they are in the examples. In the examples for frequency mhz, the example is \"93.9 fm\", so the unit is not directly present, but the header name has \"mhz\". So according to example 1, even if the examples don't have the unit, it's included. So the unit should be included in the definition.\n", + "\n", + "Therefore, the final definitions:\n", + "\n", + "call sign: The unique identifier of a radio station, presented as a text string (e.g., 'w230av').\n", + "\n", + "frequency mhz: The broadcast frequency in megahertz (MHz), presented as a decimal number followed by 'fm' (e.g., '93.9 fm').\n", + "\n", + "city of license: The city and state where the radio station is licensed, formatted as \"city, state\" (e.g., 'gadsden, alabama').\n", + "\n", + "erp w: The effective radiated power of the station, measured in watts (W) (e.g., 10 W).\n", + "\n", + "class: The operational class of the radio station as defined by the FCC, indicated by a single-letter code (e.g., 'd').\n", + "\n", + "fcc info: The Federal Communications Commission (FCC) licensing reference, presented as the string 'fcc'.\n", + "\n", + "Now, check if units are included as per the problem's instruction. For frequency mhz and erp w, the unit is included. The examples for erp w are numbers, but the header has \"w\", so unit is watts. Similarly, frequency mhz has \"mhz\" in the header name. So the unit is included in the definition.\n", + "
\n", + "\n", + "{\n", + " \"call sign\": \"The unique identifier of a radio station, typically starting with 'W' (east of Mississippi) followed by numbers and letters, presented as a text string.\",\n", + " \"frequency mhz\": \"The broadcast frequency in megahertz (MHz), presented as a decimal number followed by 'fm' to indicate frequency modulation (e.g., '93.9 fm').\",\n", + " \"city of license\": \"The city and state where the radio station is licensed to operate, formatted as 'city, state' (e.g., 'gadsden, alabama').\",\n", + " \"erp w\": \"The effective radiated power of the station, measured in watts (W) (e.g., 10 W).\",\n", + " \"class\": \"The operational class of the radio station as defined by the FCC, indicated by a single-letter code (e.g., 'd').\",\n", + " \"fcc info\": \"A reference to the Federal Communications Commission licensing information, presented as the constant string 'fcc'.\"\n", + "}\n" + ] + } + ], + "source": [ + "print(dataset['column_defenition'][44])" + ] + }, + { + "cell_type": "code", + "execution_count": 199, + "id": "13b0356c-761f-4389-81cc-60fec1b1d73b", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=16): 100%|██████████| 1695/1695 [00:00<00:00, 1709.69 examples/s]\n" + ] + } + ], + "source": [ + "p = dataset.filter(lambda x: True if x['column_defenition']!='None' else False,num_proc=16)" + ] + }, + { + "cell_type": "code", + "execution_count": 200, + "id": "d49a1584-a266-4094-8dd7-8bfb1c45f9e0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_exampples_description_top1_tresh50', 'semtab_xml_attributes_description_top1_tresh50', 'semtab_xml_attributes_top1_tresh50', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_exampples_description_top1_tresh50', 'semtab_xml_elements_description_top1_tresh50', 'semtab_xml_elements_top1_tresh50', 'semtab_xml_attributes_top1_tresh50_answ', 'semtab_xml_attributes_top1_tresh50_label', 'semtab_xml_attributes_top1_tresh50_answ_correct', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50_answ', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50_label', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50_answ_correct', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50_answ', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50_label', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50_answ_correct', 'semtab_xml_elements_exampples_description_top1_tresh50_answ', 'semtab_xml_elements_exampples_description_top1_tresh50_label', 'semtab_xml_elements_exampples_description_top1_tresh50_answ_correct', 'semtab_xml_elements_description_top1_tresh50_answ', 'semtab_xml_elements_description_top1_tresh50_label', 'semtab_xml_elements_description_top1_tresh50_answ_correct', 'semtab_xml_elements_top1_tresh50_answ', 'semtab_xml_elements_top1_tresh50_label', 'semtab_xml_elements_top1_tresh50_answ_correct', '__index_level_0__', 'column_defenition'],\n", + " num_rows: 1695\n", + "})" + ] + }, + "execution_count": 200, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "4350c129-8f8c-459d-8c62-cc9c955ce0fd", + "metadata": {}, + "outputs": [], + "source": [ + "def extract_json(data):\n", + " try:\n", + " data['column_defenition_json'] = json.dumps(extract_json_from_text(data['column_defenition']))\n", + " except Exception as e:\n", + " print (e)\n", + " data['column_defenition_json'] = 'None'\n", + " return data" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "f9827b5d-5301-4e47-a57b-dccbb9ecdec7", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 100%|██████████| 1695/1695 [00:00<00:00, 3789.01 examples/s]\n" + ] + } + ], + "source": [ + "data2 = dataset.map(extract_json,num_proc=16)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "547e9781-106a-40ae-bf78-319d0d7add73", + "metadata": {}, + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'dict' object has no attribute 'to_json'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[41], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mdata2\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mto_json\u001b[49m()\n", + "\u001b[0;31mAttributeError\u001b[0m: 'dict' object has no attribute 'to_json'" + ] + } + ], + "source": [ + "data2[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "d68bd032-d024-4fc3-b5cc-a16b7cfcbee0", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Saving the dataset (1/1 shards): 100%|██████████| 1695/1695 [00:00<00:00, 14522.32 examples/s]\n" + ] + } + ], + "source": [ + "data2.save_to_disk('tab_fact_test_unique_tables_def_parse_json')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "54c712eb-865e-4411-a306-38f413fd643b", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=16): 100%|██████████| 1695/1695 [00:00<00:00, 4125.43 examples/s]\n" + ] + }, + { + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_exampples_description_top1_tresh50', 'semtab_xml_attributes_description_top1_tresh50', 'semtab_xml_attributes_top1_tresh50', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_exampples_description_top1_tresh50', 'semtab_xml_elements_description_top1_tresh50', 'semtab_xml_elements_top1_tresh50', 'semtab_xml_attributes_top1_tresh50_answ', 'semtab_xml_attributes_top1_tresh50_label', 'semtab_xml_attributes_top1_tresh50_answ_correct', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50_answ', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50_label', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50_answ_correct', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50_answ', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50_label', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50_answ_correct', 'semtab_xml_elements_exampples_description_top1_tresh50_answ', 'semtab_xml_elements_exampples_description_top1_tresh50_label', 'semtab_xml_elements_exampples_description_top1_tresh50_answ_correct', 'semtab_xml_elements_description_top1_tresh50_answ', 'semtab_xml_elements_description_top1_tresh50_label', 'semtab_xml_elements_description_top1_tresh50_answ_correct', 'semtab_xml_elements_top1_tresh50_answ', 'semtab_xml_elements_top1_tresh50_label', 'semtab_xml_elements_top1_tresh50_answ_correct', '__index_level_0__', 'column_defenition', 'column_defenition_json'],\n", + " num_rows: 1695\n", + "})" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data2.filter(lambda x: True if x['column_defenition_json']!= 'None' else False,num_proc=16)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "2e216202-352e-4b1b-82c3-9b603f2f8cfd", + "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", + " \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", + " \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", + " \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", + " \n", + " \n", + " \n", + "
idtable_csvtable_textlabelstatementtable_captionsemtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50semtab_xml_attributes_datatype_exampples_description_top1_tresh50semtab_xml_attributes_exampples_description_top1_tresh50semtab_xml_attributes_description_top1_tresh50...semtab_xml_elements_exampples_description_top1_tresh50_answ_correctsemtab_xml_elements_description_top1_tresh50_answsemtab_xml_elements_description_top1_tresh50_labelsemtab_xml_elements_description_top1_tresh50_answ_correctsemtab_xml_elements_top1_tresh50_answsemtab_xml_elements_top1_tresh50_labelsemtab_xml_elements_top1_tresh50_answ_correct__index_level_0__column_defenitioncolumn_defenition_json
002-1570274-4.html.csvtournament#wins#top - 5#top - 10#top - 25#even...1tony lema be in the top 5 for the master tourn...tony lema<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t......The error is due to the incorrect key used in ...Here is the single-line pandas expression that...FalseThe error is due to the fact that the column n...Here's a single-line pandas expression that ch...NoneNone0Okay, let's tackle this problem. So, I need to...{\"tournament\": \"The proper name of a golf tour...
112-1145226-5.html.csvplayer#span#start#tries#conv#pens#drop\\nvaea a...1paul emerick do not have the greatest number o...united states national rugby union team<TABLE DESCRIPTION=\"united states national rug...<TABLE DESCRIPTION=\"united states national rug...<TABLE DESCRIPTION=\"united states national rug...<TABLE DESCRIPTION=\"united states national rug......NoneHere's the single-line pandas expression that ...FalseNone```json\\n\"PANDA\": \"df[df['player'] == 'Paul Em...TrueNone10Okay, let's tackle this problem. So, I need to...{\"player\": \"The name of a rugby player on the ...
221-29063233-1.html.csvno overall#no for series#title#directed by#wri...1the sweet dream episode happen later in the se...merlin (series 2)<TABLE DESCRIPTION=\"merlin (series 2)\"><HEADER...<TABLE DESCRIPTION=\"merlin (series 2)\"><HEADER...<TABLE DESCRIPTION=\"merlin (series 2)\"><HEADER...<TABLE DESCRIPTION=\"merlin (series 2)\"><HEADER......Here is the corrected pandas code:\\n\\n```pytho...Here is a single-line pandas expression that c...NoneNone```json\\n\"PANDA\": \"df.loc[df['title'].str.cont...FalseNone20Okay, let's tackle this problem. So, I need to...{\"no overall\": \"The sequential episode number ...
332-17200019-10.html.csvplayer#league#title playoff#super cup#total\\nm...04 player score 3 goal total , and all 4 be in ...2008 - 09 r.s.c. anderlecht season<TABLE DESCRIPTION=\"2008 - 09 r.s.c. anderlech...<TABLE DESCRIPTION=\"2008 - 09 r.s.c. anderlech...<TABLE DESCRIPTION=\"2008 - 09 r.s.c. anderlech...<TABLE DESCRIPTION=\"2008 - 09 r.s.c. anderlech......NoneHere is the single-line pandas expression to c...FalseNone```json\\n\"PANDA\": \"df[(df['player']=='4 player...FalseNone30Okay, let's tackle this problem. So, I need to...{\"player\": \"The proper name of a football play...
442-1127788-3.html.csvgoal#date#score#result#competition\\n1#5 februa...1rafael márquez score 3 goal in his career at i...rafael márquez<TABLE DESCRIPTION=\"rafael márquez\"><HEADER NA...<TABLE DESCRIPTION=\"rafael márquez\"><HEADER NA...<TABLE DESCRIPTION=\"rafael márquez\"><HEADER NA...<TABLE DESCRIPTION=\"rafael márquez\"><HEADER NA......The error is due to the fact that the code is ...Here is the Python code that verifies whether ...NoneNoneHere is the single-line pandas expression that...FalseThe error is due to the fact that the keys in ...40Okay, let's tackle this problem. So, I need to...{\"goal\": \"Quantitative indicator representing ...
..................................................................
169016901-18365784-3.html.csvdeparture#going to#calling at#arrival#operator...1the train that arrive on 21.26 have depart on ...none<TABLE DESCRIPTION=\"none\"><HEADER NAME=\"depart...<TABLE DESCRIPTION=\"none\"><HEADER NAME=\"depart...<TABLE DESCRIPTION=\"none\"><HEADER NAME=\"depart...<TABLE DESCRIPTION=\"none\"><HEADER NAME=\"depart......NoneHere is the single-line pandas expression that...FalseNone```json\\n\"PANDA\": \"df['arrival'] <= df['depart...NoneNone12750Okay, let's tackle this problem. So, I need to...{\"departure\": \"Scheduled departure time of the...
169116911-28819393-1.html.csvyear#candidates#total votes#average votes per ...1for each candidate with a 3.29% average , the ...green party of england and wales election results<TABLE DESCRIPTION=\"green party of england and...<TABLE DESCRIPTION=\"green party of england and...<TABLE DESCRIPTION=\"green party of england and...<TABLE DESCRIPTION=\"green party of england and......NoneHere is the single-line pandas expression that...FalseNoneHere is the single-line pandas expression that...FalseNone12760Okay, let's tackle this problem. So, I need to...{\"year\": \"The election year, presented as a fo...
169216921-22355-5.html.csvrank#athlete#nation#olympics#gold#silver#bronz...1rank numer 1 be the best ranking of all the at...list of olympic medalists in athletics (men)<TABLE DESCRIPTION=\"list of olympic medalists ...<TABLE DESCRIPTION=\"list of olympic medalists ...<TABLE DESCRIPTION=\"list of olympic medalists ...<TABLE DESCRIPTION=\"list of olympic medalists ......NoneHere is the single-line pandas expression that...TrueThe error is due to the fact that the pandas_c...Here is the Python code that translates the gi...TrueNone12767Okay, let's tackle this problem. So, I need to...{\"rank\": \"The athlete's competitive position i...
169316931-182499-1.html.csvenzyme#location#substrate#product#chromosome#e...1the substrate for enzyme ala dehydratase be δ ...porphyrin<TABLE DESCRIPTION=\"porphyrin\"><HEADER NAME=\"e...<TABLE DESCRIPTION=\"porphyrin\"><HEADER NAME=\"e...<TABLE DESCRIPTION=\"porphyrin\"><HEADER NAME=\"e...<TABLE DESCRIPTION=\"porphyrin\"><HEADER NAME=\"e......NoneHere is the single-line pandas expression that...TrueNoneThe following is the single-line pandas expres...TrueNone12769Okay, I need to analyze the given table schema...{\"enzyme\": \"Biochemical name of the enzyme, fo...
169416942-14418812-1.html.csvweek#date#opponent#time ( et )#result#record#g...1the new york jet play at 1:00 pm on sunday , n...1977 pittsburgh steelers season<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...<TABLE DESCRIPTION=\"1977 pittsburgh steelers s......NoneHere is a Python pandas code that checks if th...FalseNoneHere is the pandas code to verify the given st...TrueThe error is due to the fact that the code is ...12775Okay, let me tackle this problem. So, I need t...{\"week\": \"The sequential week number in the se...
\n", + "

1695 rows × 37 columns

\n", + "
" + ], + "text/plain": [ + " id table_csv \\\n", + "0 0 2-1570274-4.html.csv \n", + "1 1 2-1145226-5.html.csv \n", + "2 2 1-29063233-1.html.csv \n", + "3 3 2-17200019-10.html.csv \n", + "4 4 2-1127788-3.html.csv \n", + "... ... ... \n", + "1690 1690 1-18365784-3.html.csv \n", + "1691 1691 1-28819393-1.html.csv \n", + "1692 1692 1-22355-5.html.csv \n", + "1693 1693 1-182499-1.html.csv \n", + "1694 1694 2-14418812-1.html.csv \n", + "\n", + " table_text label \\\n", + "0 tournament#wins#top - 5#top - 10#top - 25#even... 1 \n", + "1 player#span#start#tries#conv#pens#drop\\nvaea a... 1 \n", + "2 no overall#no for series#title#directed by#wri... 1 \n", + "3 player#league#title playoff#super cup#total\\nm... 0 \n", + "4 goal#date#score#result#competition\\n1#5 februa... 1 \n", + "... ... ... \n", + "1690 departure#going to#calling at#arrival#operator... 1 \n", + "1691 year#candidates#total votes#average votes per ... 1 \n", + "1692 rank#athlete#nation#olympics#gold#silver#bronz... 1 \n", + "1693 enzyme#location#substrate#product#chromosome#e... 1 \n", + "1694 week#date#opponent#time ( et )#result#record#g... 1 \n", + "\n", + " statement \\\n", + "0 tony lema be in the top 5 for the master tourn... \n", + "1 paul emerick do not have the greatest number o... \n", + "2 the sweet dream episode happen later in the se... \n", + "3 4 player score 3 goal total , and all 4 be in ... \n", + "4 rafael márquez score 3 goal in his career at i... \n", + "... ... \n", + "1690 the train that arrive on 21.26 have depart on ... \n", + "1691 for each candidate with a 3.29% average , the ... \n", + "1692 rank numer 1 be the best ranking of all the at... \n", + "1693 the substrate for enzyme ala dehydratase be δ ... \n", + "1694 the new york jet play at 1:00 pm on sunday , n... \n", + "\n", + " table_caption \\\n", + "0 tony lema \n", + "1 united states national rugby union team \n", + "2 merlin (series 2) \n", + "3 2008 - 09 r.s.c. anderlecht season \n", + "4 rafael márquez \n", + "... ... \n", + "1690 none \n", + "1691 green party of england and wales election results \n", + "1692 list of olympic medalists in athletics (men) \n", + "1693 porphyrin \n", + "1694 1977 pittsburgh steelers season \n", + "\n", + " semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50 \\\n", + "0
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
table_csvtable_textcolumn_defenition_json
02-1570274-4.html.csvtournament#wins#top - 5#top - 10#top - 25#even...{\"tournament\": \"The proper name of a golf tour...
12-1145226-5.html.csvplayer#span#start#tries#conv#pens#drop\\nvaea a...{\"player\": \"The name of a rugby player on the ...
21-29063233-1.html.csvno overall#no for series#title#directed by#wri...{\"no overall\": \"The sequential episode number ...
32-17200019-10.html.csvplayer#league#title playoff#super cup#total\\nm...{\"player\": \"The proper name of a football play...
42-1127788-3.html.csvgoal#date#score#result#competition\\n1#5 februa...{\"goal\": \"Quantitative indicator representing ...
............
16901-18365784-3.html.csvdeparture#going to#calling at#arrival#operator...{\"departure\": \"Scheduled departure time of the...
16911-28819393-1.html.csvyear#candidates#total votes#average votes per ...{\"year\": \"The election year, presented as a fo...
16921-22355-5.html.csvrank#athlete#nation#olympics#gold#silver#bronz...{\"rank\": \"The athlete's competitive position i...
16931-182499-1.html.csvenzyme#location#substrate#product#chromosome#e...{\"enzyme\": \"Biochemical name of the enzyme, fo...
16942-14418812-1.html.csvweek#date#opponent#time ( et )#result#record#g...{\"week\": \"The sequential week number in the se...
\n", + "

1695 rows × 3 columns

\n", + "" + ], + "text/plain": [ + " table_csv \\\n", + "0 2-1570274-4.html.csv \n", + "1 2-1145226-5.html.csv \n", + "2 1-29063233-1.html.csv \n", + "3 2-17200019-10.html.csv \n", + "4 2-1127788-3.html.csv \n", + "... ... \n", + "1690 1-18365784-3.html.csv \n", + "1691 1-28819393-1.html.csv \n", + "1692 1-22355-5.html.csv \n", + "1693 1-182499-1.html.csv \n", + "1694 2-14418812-1.html.csv \n", + "\n", + " table_text \\\n", + "0 tournament#wins#top - 5#top - 10#top - 25#even... \n", + "1 player#span#start#tries#conv#pens#drop\\nvaea a... \n", + "2 no overall#no for series#title#directed by#wri... \n", + "3 player#league#title playoff#super cup#total\\nm... \n", + "4 goal#date#score#result#competition\\n1#5 februa... \n", + "... ... \n", + "1690 departure#going to#calling at#arrival#operator... \n", + "1691 year#candidates#total votes#average votes per ... \n", + "1692 rank#athlete#nation#olympics#gold#silver#bronz... \n", + "1693 enzyme#location#substrate#product#chromosome#e... \n", + "1694 week#date#opponent#time ( et )#result#record#g... \n", + "\n", + " column_defenition_json \n", + "0 {\"tournament\": \"The proper name of a golf tour... \n", + "1 {\"player\": \"The name of a rugby player on the ... \n", + "2 {\"no overall\": \"The sequential episode number ... \n", + "3 {\"player\": \"The proper name of a football play... \n", + "4 {\"goal\": \"Quantitative indicator representing ... \n", + "... ... \n", + "1690 {\"departure\": \"Scheduled departure time of the... \n", + "1691 {\"year\": \"The election year, presented as a fo... \n", + "1692 {\"rank\": \"The athlete's competitive position i... \n", + "1693 {\"enzyme\": \"Biochemical name of the enzyme, fo... \n", + "1694 {\"week\": \"The sequential week number in the se... \n", + "\n", + "[1695 rows x 3 columns]" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = df_data[['table_csv','table_text','column_defenition_json']]\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "13068c06-5274-486e-9dda-144591465632", + "metadata": {}, + "outputs": [], + "source": [ + "from io import StringIO\n", + "import re" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "137c065f-4d57-4254-aa07-2c9851573e14", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "----------\n", + "{'sopachuymunicipality', 'elvillarmunicipality', 'language', 'tominamunicipality', 'padillamunicipality', 'villaalcalámunicipality'}\n", + "{'sopachuymunicipality', 'elvillarmunicipality', 'language', 'tominaprovincemunicipality', 'padillamunicipality', 'villaalcalámunicipality'}\n", + "{'tominamunicipality'}\n", + "----------\n", + "{'title', 'director', 'studio', 'worldwidegross', 'rank'}\n", + "{'title', 'director', 'studio', 'rank', 'worldwide_gross'}\n", + "{'worldwidegross'}\n", + "----------\n", + "{'tujiapopulation', 'province', 'county', '%ofchinastujiapopulation', 'prefecture'}\n", + "{'tujiapopulation', 'province', 'county', \"%ofchina'stujiapopulation\", 'prefecture'}\n", + "{'%ofchinastujiapopulation'}\n" + ] + } + ], + "source": [ + "for i,data in df.iterrows():\n", + " ddd = pd.read_csv(StringIO(data['table_text']), delimiter='#')\n", + " col = set([re.sub(' ','',k).lower() for k in ddd.columns])\n", + " defgen_key = set([re.sub(' ','',k).lower() for k in json.loads(data['column_defenition_json']).keys()])\n", + " \n", + " if len(col-defgen_key)>0:\n", + " print('-'*10)\n", + " print(col)\n", + " print(defgen_key)\n", + " print(col-defgen_key)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "ca0d7d32-cfab-4a18-a857-6d37ef8d429e", + "metadata": {}, + "outputs": [], + "source": [ + "df.to_parquet(\"df.parquet.gzip\", compression=\"gzip\")" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "090b8d5c-f9b6-4031-a953-cb05ea61e352", + "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", + "
table_csvcolumn_defenition_json
02-1570274-4.html.csv{\"tournament\": \"The proper name of a golf tour...
12-1145226-5.html.csv{\"player\": \"The name of a rugby player on the ...
21-29063233-1.html.csv{\"no overall\": \"The sequential episode number ...
32-17200019-10.html.csv{\"player\": \"The proper name of a football play...
42-1127788-3.html.csv{\"goal\": \"Quantitative indicator representing ...
.........
16901-18365784-3.html.csv{\"departure\": \"Scheduled departure time of the...
16911-28819393-1.html.csv{\"year\": \"The election year, presented as a fo...
16921-22355-5.html.csv{\"rank\": \"The athlete's competitive position i...
16931-182499-1.html.csv{\"enzyme\": \"Biochemical name of the enzyme, fo...
16942-14418812-1.html.csv{\"week\": \"The sequential week number in the se...
\n", + "

1695 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " table_csv \\\n", + "0 2-1570274-4.html.csv \n", + "1 2-1145226-5.html.csv \n", + "2 1-29063233-1.html.csv \n", + "3 2-17200019-10.html.csv \n", + "4 2-1127788-3.html.csv \n", + "... ... \n", + "1690 1-18365784-3.html.csv \n", + "1691 1-28819393-1.html.csv \n", + "1692 1-22355-5.html.csv \n", + "1693 1-182499-1.html.csv \n", + "1694 2-14418812-1.html.csv \n", + "\n", + " column_defenition_json \n", + "0 {\"tournament\": \"The proper name of a golf tour... \n", + "1 {\"player\": \"The name of a rugby player on the ... \n", + "2 {\"no overall\": \"The sequential episode number ... \n", + "3 {\"player\": \"The proper name of a football play... \n", + "4 {\"goal\": \"Quantitative indicator representing ... \n", + "... ... \n", + "1690 {\"departure\": \"Scheduled departure time of the... \n", + "1691 {\"year\": \"The election year, presented as a fo... \n", + "1692 {\"rank\": \"The athlete's competitive position i... \n", + "1693 {\"enzyme\": \"Biochemical name of the enzyme, fo... \n", + "1694 {\"week\": \"The sequential week number in the se... \n", + "\n", + "[1695 rows x 2 columns]" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "dd = pd.read_parquet(\"df.parquet.gzip\")\n", + "dd" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "e45d9197-8b13-4d11-84f8-310da24036ae", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'player': 'The proper name of a football player from R.S.C. Anderlecht, presented in text format.',\n", + " 'league': 'Quantitative indicator of the number of goals scored by the player in the league competition (integer).',\n", + " 'title playoff': 'Quantitative indicator of the number of goals scored by the player in the title playoff competition (integer).',\n", + " 'super cup': 'Quantitative indicator of the number of goals scored by the player in the super cup competition (integer).',\n", + " 'total': 'The total number of goals scored by the player across all competitions (integer).'}" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "json.loads(dd[dd['table_csv']=='2-17200019-10.html.csv']['column_defenition_json'].to_list()[0])" + ] + }, + { + "cell_type": "markdown", + "id": "411a1d9c-fc98-457d-8b36-24568fa33712", + "metadata": {}, + "source": [ + "# Make colum defenition dataset Pan tabfact" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e1678c89-6c95-4c7e-b56b-589febe12ef5", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 98, + "id": "70933002-1b0b-4328-802e-ae04eb7799f4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['statement', 'table_text', 'pandas_code', 'pandas_eval', 'table_csv', 'label', 'table_caption', '__index_level_0__', 'semtab_xml_attributes_exampples_description_top1_tresh50', 'column_defenition'],\n", + " num_rows: 13167\n", + "})" + ] + }, + "execution_count": 98, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset = load_from_disk('pantab_fact_train_unique_tables_def')\n", + "dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "id": "720a1efc-4b86-488a-a436-6f834c4a36d1", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Okay, let's tackle this problem. So, I need to analyze the given table schema and create a JSON dictionary where each header has a semantically succinct definition. The task is to look at each header, figure out what it represents, and include any necessary format details or units from the examples.\n", + "\n", + "First, I'll start by understanding the structure of the input. The table description is about the Canadian TV series \"Who Do You Think You Are?\". The headers are: total no, celebrity, director, original air date, and viewers.\n", + "\n", + "Looking at Example 1 from the problem statement, they included units when present in the examples. For instance, diameter_km had units in the examples (km), so the definition included \"Unit of measurement: kilometers (km).\" Similarly, gravity_ms2 included m/s².\n", + "\n", + "In Example 2, there were no units, so the definitions were straightforward text descriptions.\n", + "\n", + "Example 3 had units like inches, GB, mAh, so those were included.\n", + "\n", + "Now, for the real data provided:\n", + "\n", + "- total no: examples are [8, 10, 1]. These are numbers. The name is \"total no\", which probably stands for \"total number\". So it's likely the count of something, maybe episodes? But the description isn't clear. Wait, the table is about the TV series. The \"total no\" could be the total number of episodes in a season or something. Since the examples are numbers (8, 10, 1), the definition should mention it's an integer representing the count.\n", + "\n", + "- celebrity: examples are names like \"sonja smits\". So it's the name of the celebrity featured in the episode.\n", + "\n", + "- director: examples are names like \"margaret slaght\", so the director of the episode.\n", + "\n", + "- original air date: examples are dates like \"17 january 2008\". Need to note the format here. It's written as \"day month year\", but in the examples, it's \"17 january 2008\", so the format is day followed by lowercase month name (not abbreviated) and year. So the definition should mention the date format.\n", + "\n", + "- viewers: examples are \"n / a\". This stands for \"not available\" or \"not applicable\". So the header is the number of viewers, but in the examples, they're marked as \"n / a\", which is a common abbreviation. So the definition should state that it's the number of viewers, with \"n / a\" indicating no data.\n", + "\n", + "Wait, the problem says if there are units in the examples, include them. But in this case, viewers has \"n / a\" as examples, which isn't a unit. However, the example entries are \"n / a\", which is a placeholder. So the viewers header's example isn't a unit but a specific indicator that data isn't available. So perhaps the definition should mention that the value is the number of viewers, but if data isn't available, it's marked as \"n / a\".\n", + "\n", + "Let's check the examples given in the problem. In Example 1, the moons header had examples [1, 2, 95], which are integers. So the definition says it's a quantitative indicator as an integer. Similarly, for viewers, the example is \"n / a\", which is a string. So the definition would have to state that it's the number of viewers, and if data is unavailable, it's marked as \"n / a\".\n", + "\n", + "Wait, the problem says: \"If there are units of measurement in the EXAMPLES, then include them in the answer.\" In the examples provided for viewers, there are no units (they are \"n / a\"), so we don't include units here. But in the examples given in the problem statement, for instance, in Example 1, the examples have units (km, m/s²), so we included those. So in this real data case, for viewers, since the examples are \"n / a\", which is not a unit but a placeholder, there's no unit to include.\n", + "\n", + "Let me proceed step by step.\n", + "\n", + "First header: total no. The examples are integers (8, 10, 1). So the definition should be the total number of something (probably episodes), as an integer.\n", + "\n", + "Second: celebrity. Examples are names of people. So the proper name of the celebrity featured.\n", + "\n", + "Third: director. Examples are names of directors.\n", + "\n", + "Fourth: original air date. Examples are in \"day month year\" format (e.g., \"17 january 2008\"). So the format is day (number), lowercase month name, year. But the problem says to describe how to interpret signs, abbreviations, etc. So the definition should note that the date is in the format \"DD month YYYY\", with the month written out in lowercase.\n", + "\n", + "Fifth: viewers. The examples are \"n / a\", which is a standard abbreviation for \"not available\" or \"not applicable\". So the definition should state that it's the number of viewers, but if unavailable, marked as \"n / a\".\n", + "\n", + "Wait, but the problem says: \"If there are units of measurement in the EXAMPLES, then include them in the answer.\" Since the examples here are \"n / a\", which isn't a unit, we don't include any units. So the viewers definition would mention that the value is the number of viewers, but if data isn't available, it's marked as \"n / a\".\n", + "\n", + "Let me check the examples again. In Example 1, the \"moons\" header's examples are numbers (1, 2, 95), which are integers. The definition states that it's the count as an integer. Similarly, here \"total no\" is a count, so integer. So the definition for \"total no\" would be \"The total number of episodes (integer)\".\n", + "\n", + "Wait, but the problem says to make it semantically succinct. Let's see:\n", + "\n", + "For \"total no\": The examples are numbers (8, 10, 1). The header is \"total no\", which is likely \"total number\" of something. Since the table is about a TV series, maybe the number of episodes. So the definition would be \"The total number of episodes in the series (integer).\"\n", + "\n", + "For \"celebrity\": The examples are names, so \"The proper name of a celebrity featured in the episode.\"\n", + "\n", + "For \"director\": \"The name of the director responsible for the episode.\"\n", + "\n", + "For \"original air date\": The examples are dates in \"17 january 2008\" format. So \"The date when the episode was first broadcast, formatted as 'DD month YYYY' (e.g., '17 january 2008').\"\n", + "\n", + "For \"viewers\": The examples are \"n / a\", which means \"not available\". So \"The number of viewers for the episode, with 'n / a' indicating data not available.\"\n", + "\n", + "Wait, but the problem says: \"how to interpret signs, abbreviations, or complex strings, such as 'A - B'\". In this case, \"n / a\" is an abbreviation. So the definition should explain that \"n / a\" stands for \"not available\".\n", + "\n", + "So for viewers: \"The number of viewers for the episode. Unit of measurement: N/A (not available) when data is not provided.\"\n", + "\n", + "Wait, but \"n / a\" is not a unit. Units are things like kg, m/s², etc. So the problem says if there are units in the examples, include them. Since \"n / a\" is not a unit but a placeholder, there's no unit here. So the definition should mention that \"n / a\" is used when data isn't available.\n", + "\n", + "So the viewers definition would be: \"The number of viewers for the episode. The value 'n / a' indicates that data is not available.\"\n", + "\n", + "But the problem says: \"If there are units of measurement in the EXAMPLES, then include them in the answer.\" Since the examples don't have units (they have \"n / a\"), we don't add units. So just the description.\n", + "\n", + "Let me verify with Example 1: The diameter_km has units in the examples (km), so we include them. In Example 3, battery_mah has mAh, so we include units. So in this case, viewers has \"n / a\" in examples, which is not a unit. So we don't include a unit, but mention that \"n / a\" is used when data is not available.\n", + "\n", + "Putting it all together:\n", + "\n", + "total no: \"The total number of episodes in the series (integer).\"\n", + "\n", + "celebrity: \"The proper name of a celebrity featured in the episode (string).\"\n", + "\n", + "director: \"The name of the director responsible for the episode (string).\"\n", + "\n", + "original air date: \"The date of the episode's original broadcast, formatted as 'DD month YYYY' (e.g., '17 january 2008').\"\n", + "\n", + "viewers: \"The number of viewers for the episode, with 'n / a' indicating unavailable data.\"\n", + "\n", + "Wait, but in Example 1, the \"type\" header had \"terrestrial\" and \"gas giant\" as examples, which are specific terms. The definition explained what those terms mean. So for \"original air date\", maybe it's not necessary to explain the date format in the definition, but the problem says to describe format features.\n", + "\n", + "The problem states: \"its format features (how to interpret signs, abbreviations, or complex strings, such as 'A - B')\". So for the date, the format is part of the header description. So the example format is \"DD month YYYY\", which is written with the month name in lowercase, no abbreviation. So the definition should mention that.\n", + "\n", + "Also, the \"viewers\" header's example uses \"n / a\", which is an abbreviation. So the definition should explain that \"n / a\" stands for \"not available\".\n", + "\n", + "Now, checking Example 3: \"screen_size\" is described as \"The diagonal size of the device's display, represented as a decimal. Unit of measurement: inches.\" So the format for the value (decimal) and the unit (inches) are included.\n", + "\n", + "So for the original air date, since it's a date, we need to mention how it's formatted. The examples are \"17 january 2008\", so day (number), month name (lowercase), year. So the definition should include that format.\n", + "\n", + "Similarly, for viewers, since the examples are \"n / a\", the definition should state that \"n / a\" is used when data isn't available.\n", + "\n", + "So finalizing each header:\n", + "\n", + "total no: \"Total number of episodes in the series (integer).\"\n", + "\n", + "celebrity: \"Name of the celebrity featured in the episode (string).\"\n", + "\n", + "director: \"Name of the director responsible for the episode (string).\"\n", + "\n", + "original air date: \"Date when the episode was first broadcast, formatted as 'DD month YYYY' (e.g., '17 january 2008').\"\n", + "\n", + "viewers: \"Number of viewers for the episode, with 'n / a' indicating unavailable data.\"\n", + "\n", + "Wait, but the problem says \"semantically succinct\". So maybe \"The number of viewers, with 'n / a' indicating unavailable data.\"\n", + "\n", + "But in the examples, the output for \"gravity_ms2\" includes the unit as \"meters per second squared ($$m/s^2$$)\". So units are included when present. But here, for viewers, the examples have \"n / a\", which is a placeholder. So there's no unit here, so just the description.\n", + "\n", + "Now, checking the examples from the problem statement again. In Example 2, there are no units, so the definitions are straightforward.\n", + "\n", + "So, for the output, the JSON should have each header's name as key, and the description as value. Let's structure each definition.\n", + "\n", + "For \"total no\":\n", + "\n", + "The examples are integers (8, 10, 1), so it's a count. The header is \"total no\", likely \"total number\". The definition should state it's the total number of something. Given the context of a TV series, it's probably the total number of episodes. So:\n", + "\n", + "\"total no\": \"The total number of episodes in the series (integer).\"\n", + "\n", + "But the problem says \"semantically succinct\". Maybe \"Total number of episodes (integer).\"\n", + "\n", + "Similarly, celebrity is \"The name of the celebrity featured in the episode (string).\"\n", + "\n", + "director: \"The director of the episode (string).\"\n", + "\n", + "original air date: \"The date of original broadcast in format 'DD month YYYY' (e.g., '17 january 2008').\"\n", + "\n", + "viewers: \"Number of viewers, with 'n / a' indicating unavailable data.\"\n", + "\n", + "Wait, but the problem says to include units if present in examples. Since viewers examples are \"n / a\", which isn't a unit, we don't add units. So the viewers definition is as above.\n", + "\n", + "Now, check if any headers have units. None of the examples for viewers have units. The others are numbers (total no), names (celebrity, director), date (original air date). So only total no is a number, but it's a count, not a measurement with units (like km or m/s²).\n", + "\n", + "Wait, total no is a count, so it's just an integer. So in the definition, it's \"integer\".\n", + "\n", + "Let me look back at Example 1. The moons header was \"Quantitative indicator indicating the total number of confirmed natural satellites of the planet (integer).\"\n", + "\n", + "So similar here, total no would be a quantitative indicator (integer) representing the count of episodes.\n", + "\n", + "So the definition for total no: \"Quantitative indicator of the total number of episodes (integer).\"\n", + "\n", + "But the problem says \"semantically succinct\", so maybe \"Total number of episodes (integer).\"\n", + "\n", + "Yes, that's more concise.\n", + "\n", + "Okay, I think that's all. Now, let's write the JSON.\n", + "
\n", + "\n", + "{\n", + " \"total no\": \"Total number of episodes in the series (integer).\",\n", + " \"celebrity\": \"Proper name of the celebrity featured in the episode (string).\",\n", + " \"director\": \"Name of the director responsible for the episode (string).\",\n", + " \"original air date\": \"Date of first broadcast in format 'DD month YYYY' (e.g., '17 january 2008').\",\n", + " \"viewers\": \"Number of viewers for the episode, with 'n / a' indicating unavailable data.\"\n", + "}\n" + ] + } + ], + "source": [ + "print(dataset['column_defenition'][44])" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "id": "d6c8b549-badf-40ff-b2a7-95b3f0cac923", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=16): 100%|██████████| 13167/13167 [00:00<00:00, 22458.64 examples/s]\n" + ] + } + ], + "source": [ + "p = dataset.filter(lambda x: True if x['column_defenition']!='None' else False,num_proc=16)" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "id": "cd630cdd-96d8-4ed7-8c93-84c4abc2102c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['statement', 'table_text', 'pandas_code', 'pandas_eval', 'table_csv', 'label', 'table_caption', '__index_level_0__', 'semtab_xml_attributes_exampples_description_top1_tresh50', 'column_defenition'],\n", + " num_rows: 13167\n", + "})" + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "id": "4a5c6627-9416-4a32-812d-9f7858c482c4", + "metadata": {}, + "outputs": [], + "source": [ + "def extract_json(data):\n", + " try:\n", + " data['column_defenition_json'] = json.dumps(extract_json_from_text(data['column_defenition']))\n", + " except Exception as e:\n", + " print (e)\n", + " data['column_defenition_json'] = 'None'\n", + " return data" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "id": "e8dac7e5-d582-420a-a282-6f0b37eadf84", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 100%|██████████| 13167/13167 [00:00<00:00, 15343.98 examples/s]\n" + ] + } + ], + "source": [ + "data2 = dataset.map(extract_json,num_proc=16)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "id": "32d92ff4-7fb1-4e66-8c01-a33927154051", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'statement': 'haroldo be mention as a brazil scorer for 2 different game',\n", + " 'table_text': 'date#result#score#brazil scorers#competition\\nmay 11 , 1919#w#6 - 0#friedenreich (3) , neco (2) , haroldo#south american championship\\nmay 18 , 1919#w#3 - 1#heitor , amílcar , millon#south american championship\\nmay 26 , 1919#d#2 - 2#neco (2)#south american championship\\nmay 29 , 1919#w#1 - 0#friedenreich#south american championship\\njune 1 , 1919#d#3 - 3#haroldo , arlindo (2)#taça roberto cherry\\n',\n", + " 'pandas_code': \"df['brazil scorers'].apply(lambda x: 'haroldo' in x).sum() == 2\",\n", + " 'pandas_eval': 'True',\n", + " 'table_csv': '2-15401676-3.html.csv',\n", + " 'label': 1,\n", + " 'table_caption': '1919 in brazilian football',\n", + " '__index_level_0__': 0,\n", + " 'semtab_xml_attributes_exampples_description_top1_tresh50': '
',\n", + " 'column_defenition': 'Okay, let\\'s tackle this problem. So, I need to analyze the given table schema for Brazilian football in 1919 and create a JSON dictionary where each header has a semantically succinct definition. The output should include format features and units if present in examples.\\n\\nFirst, looking at the table description: \"1919 in brazilian football\". The headers are date, result, score, brazil scorers, and competition.\\n\\nStarting with \"date\". The examples are dates like \"may 11, 1919\". So it\\'s a date string in the format of month day, year. Need to note the format here. The examples are in lowercase month names followed by day and year, separated by commas. So the definition should mention the date format.\\n\\nNext, \"result\" has examples like \"d\", \"w\", \"w\". Those are probably abbreviations for game outcomes. In football, \"d\" might stand for draw, \"w\" for win. So the definition should explain that these are single-letter codes for result types.\\n\\n\"score\" examples are \"2 - 2\", \"3 - 1\", \"3 - 3\". This is a score format with two numbers separated by a dash, representing goals scored by each team. The example shows two numbers with a dash, so the format is \"goals scored by home team - goals scored by away team\".\\n\\n\"Brazil scorers\" has examples with names and parentheses, like \"friedenreich (3), neco (2), haroldo\". The numbers in parentheses probably indicate the number of goals scored by each player. So this header lists players who scored for Brazil, with their goal counts in parentheses. Some entries have multiple players separated by commas, and some have no numbers if they didn\\'t score multiple times.\\n\\n\"competition\" examples are \"south american championship\" and \"taça roberto cherry\". These are the names of the tournaments. No units here, just text.\\n\\nNow, checking for units. None of the headers have units except maybe \"score\" which is a numerical value but no unit specified. The examples for score are just numbers separated by a dash, so no unit needed there. Similarly, \"date\" is a date, \"result\" is a code, \"brazil scorers\" is a list of names with numbers in parentheses, and \"competition\" is a name.\\n\\nWait, the problem says if there are units of measurement in the EXAMPLES, then include them. Looking at the examples for each header:\\n\\n- date: \"may 11, 1919\" – no units here.\\n- result: \"d\", \"w\" – abbreviations, no units.\\n- score: \"2 - 2\" – numbers without units (just goals).\\n- brazil scorers: names with numbers in parentheses (goal counts), but no units specified. The numbers are just counts.\\n- competition: just names.\\n\\nSo none of these have units of measurement in the examples. But wait, in example 1, diameter_km had km units. In example 3, screen_size had inches, ram_gb had GB, battery_mah had mAh. So the presence of units in the examples is key.\\n\\nIn this current problem, none of the headers have units in the examples. For instance, \"score\" is \"2 - 2\", but there\\'s no unit like goals; it\\'s just numbers. Similarly, \"brazil scorers\" has numbers in parentheses, but those are counts (number of goals), so maybe units are implied as goals. However, the examples don\\'t explicitly state a unit. The problem says if units are in the examples, include them. Since the examples don\\'t have units written out (e.g., \"2 goals\" is not present), we shouldn\\'t add units. So in this case, the headers don\\'t have units to include.\\n\\nNow, crafting the definitions:\\n\\ndate: Should specify the format as month day, year with comma. Examples show \"may 11, 1919\", so the format is \"Month day, year\".\\n\\nresult: The examples are single letters. In football, common abbreviations are \"d\" for draw, \"w\" for win, and possibly \"l\" for loss. But the examples here have \"d\" and \"w\", so the definition should say it\\'s a result code where \"d\" is draw and \"w\" is win.\\n\\nscore: The format is two numbers separated by a dash, e.g., \"2 - 2\", representing goals scored by each team.\\n\\nbrazil scorers: The example shows a list of players, some with goal counts in parentheses. So this is a list of Brazilian players who scored, with the number of goals they scored in parentheses (e.g., \"(3)\" for 3 goals).\\n\\ncompetition: Just the name of the tournament.\\n\\nNow, the output must be in JSON with each header\\'s definition. Let\\'s check the examples given in the problem.\\n\\nExample 1: The definitions include format features like \"integer\", \"units of measurement\". Example 3 specifies units for screen_size, ram_gb, battery_mah.\\n\\nSo for each header here:\\n\\ndate: The format is month (lowercase), day, comma, year. So the definition should mention the format: \"Date in the format \\'Month day, year\\' (e.g., \\'may 11, 1919\\')\".\\n\\nresult: Single-letter code where \\'d\\' = draw, \\'w\\' = win.\\n\\nscore: Format is \"A - B\" where A and B are goal counts.\\n\\nbrazil scorers: Names of players, with goal counts in parentheses (e.g., \"friedenreich (3)\"), separated by commas.\\n\\ncompetition: Name of the tournament.\\n\\nNow, checking the example outputs. For instance, in example 1, the \"diameter_km\" includes the unit. Since there are no units here, we don\\'t need to add units.\\n\\nLet me structure each header:\\n\\ndate: \"The date of a football match, formatted as \\'Month day, year\\' (e.g., \\'may 11, 1919\\').\"\\n\\nresult: \"The match result indicated by a single-letter code where \\'d\\' stands for draw and \\'w\\' stands for win.\"\\n\\nscore: \"The final goal score of the match in the format \\'A - B\\', where A is the number of goals scored by the home team and B is the number of goals scored by the away team.\"\\n\\nbrazil scorers: \"Names of Brazilian players who scored goals, with the number of goals scored by each player in parentheses (e.g., \\'friedenreich (3)\\').\"\\n\\ncompetition: \"The name of the tournament or competition in which the match was played.\"\\n\\nWait, but in the example 3 output, \"ram_gb\" is defined with \"Unit of measurement: gigabytes (GB)\", but in this problem, there are no units. So the answer shouldn\\'t include units here.\\n\\nCheck the problem statement again: \"If there are units of measurement in the EXAMPLES, then include them in the answer.\"\\n\\nIn the examples for this problem, the score is \"2 - 2\", which are numbers but no units. So the definition for score should not mention units. Similarly, the examples for \"brazil scorers\" have numbers in parentheses but no units, so those are counts, not units. So the description would be about the format with the numbers in parentheses indicating goal counts.\\n\\nNow, making sure the definitions are semantically succinct and cover format features.\\n\\nFor \"brazil scorers\", the example is \"friedenreich (3), neco (2), haroldo\". So the format is: player name, possibly followed by goal count in parentheses (number), separated by commas. If a player scored only once, it\\'s not in parentheses. Wait, the example shows \"friedenreich (3), neco (2), haroldo\" where \"haroldo\" has no number. So the number in parentheses is the count of goals. So the definition should explain that the number in parentheses indicates the number of goals scored by that player.\\n\\nIn the output, it\\'s important to note the format of the example strings.\\n\\nLet\\'s finalize each definition:\\n\\ndate: \"The date of a match in the format \\'Month day, year\\' (e.g., \\'may 11, 1919\\').\"\\n\\nresult: \"Match result code where \\'d\\' = draw and \\'w\\' = win.\"\\n\\nscore: \"Final score in the format \\'A - B\\', where A is home team goals and B is away team goals.\"\\n\\nbrazil scorers: \"List of Brazilian players who scored, with goal counts in parentheses (e.g., \\'friedenreich (3)\\')\"\\n\\ncompetition: \"Name of the football competition or tournament.\"\\n\\nWait, the competition example includes \"taça roberto cherry\", which has a special character (taça). So the description should note that it\\'s the name of the competition.\\n\\nNow, checking the examples given in the problem. For example 1, the \"moons\" header is defined as \"Quantitative indicator indicating the total number of confirmed natural satellites of the planet (integer).\"\\n\\nSo for \"brazil scorers\", the definition should mention what the data represents (players and their goal counts), and the format.\\n\\nThe problem says \"format features (how to interpret signs, abbreviations, or complex strings, such as \"A - B\").\"\\n\\nSo for \"score\", since it\\'s \"A - B\", need to explain that it\\'s two numbers separated by a dash.\\n\\nFor \"brazil scorers\", the complex string is names with parentheses for goal counts.\\n\\nLet me check the provided examples again to see the style.\\n\\nIn example 1, \"diameter_km\" is defined with the unit included. For \"gravity_ms2\", the unit is meters per second squared.\\n\\nIn example 3, \"screen_size\" has \"inches\" as unit.\\n\\nIn this problem, none of the headers have units in the examples, so the definitions won\\'t include units.\\n\\nSo, the final definitions:\\n\\ndate: Date of the football match in the format \"Month day, year\" (e.g., \"may 11, 1919\").\\n\\nresult: Single-letter result code where \\'d\\' = draw and \\'w\\' = win.\\n\\nscore: Match score in the format \"A - B\" where A is goals scored by the home team and B by the away team.\\n\\nbrazil scorers: Names of Brazilian players who scored, with number of goals in parentheses (e.g., \"friedenreich (3)\"), separated by commas.\\n\\ncompetition: Name of the football competition (e.g., \"south american championship\").\\n\\nNow, check if \"brazil scorers\" should be written as \"Brazilian players who scored goals\" instead of \"Brazilians players\".\\n\\nAlso, ensure that the format features are mentioned.\\n\\nFor the \"brazil scorers\", the example shows \"friedenreich (3), neco (2), haroldo\" – so it\\'s a list of players, each with optional parentheses indicating goals scored. So the definition should mention that the numbers in parentheses indicate the count of goals scored by each player.\\n\\nLet\\'s write each definition precisely.\\n\\ndate: \"Date of the match in the format \\'Month day, year\\' (e.g., \\'may 11, 1919\\').\"\\n\\nresult: \"Result code where \\'d\\' denotes a draw and \\'w\\' denotes a win.\"\\n\\nscore: \"Final score in the format \\'A - B\\', representing goals scored by home team (A) and away team (B).\"\\n\\nbrazil scorers: \"List of Brazilian players who scored goals, with the number of goals scored by each player indicated in parentheses (e.g., \\'friedenreich (3)\\').\"\\n\\ncompetition: \"Name of the football tournament or competition (e.g., \\'south american championship\\').\"\\n\\nThis should cover all the requirements. Now, convert this into the JSON structure as specified.\\n\\n\\n{\\n \"date\": \"Date of the football match in the format \\'Month day, year\\' (e.g., \\'may 11, 1919\\').\",\\n \"result\": \"Match outcome code where \\'d\\' = draw and \\'w\\' = win.\",\\n \"score\": \"Final goal tally in the format \\'A - B\\', where A = home team goals and B = away team goals.\",\\n \"brazil scorers\": \"List of Brazilian players who scored, with goal counts in parentheses (e.g., \\'friedenreich (3)\\'), separated by commas.\",\\n \"competition\": \"Name of the football tournament or competition (e.g., \\'south american championship\\').\"\\n}',\n", + " 'column_defenition_json': '{\"date\": \"Date of the football match in the format \\'Month day, year\\' (e.g., \\'may 11, 1919\\').\", \"result\": \"Match outcome code where \\'d\\' = draw and \\'w\\' = win.\", \"score\": \"Final goal tally in the format \\'A - B\\', where A = home team goals and B = away team goals.\", \"brazil scorers\": \"List of Brazilian players who scored, with goal counts in parentheses (e.g., \\'friedenreich (3)\\'), separated by commas.\", \"competition\": \"Name of the football tournament or competition (e.g., \\'south american championship\\').\"}'}" + ] + }, + "execution_count": 104, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data2[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "id": "c6d694c0-0a73-4e6e-9daf-7902777fbda8", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Saving the dataset (1/1 shards): 100%|██████████| 13167/13167 [00:00<00:00, 32846.33 examples/s]\n" + ] + } + ], + "source": [ + "data2.save_to_disk('pantab_fact_train_unique_tables_def_parse_json')" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "id": "9059a234-ad5d-4aa6-98e0-b0d0b92c9981", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=16): 100%|██████████| 13167/13167 [00:00<00:00, 20409.56 examples/s]\n" + ] + }, + { + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['statement', 'table_text', 'pandas_code', 'pandas_eval', 'table_csv', 'label', 'table_caption', '__index_level_0__', 'semtab_xml_attributes_exampples_description_top1_tresh50', 'column_defenition', 'column_defenition_json'],\n", + " num_rows: 13167\n", + "})" + ] + }, + "execution_count": 108, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data2.filter(lambda x: True if x['column_defenition_json']!= 'None' else False,num_proc=16)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 109, + "id": "99e869fa-f8e3-4654-8f57-aebe721d0e46", + "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", + " \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", + " \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", + "
statementtable_textpandas_codepandas_evaltable_csvlabeltable_caption__index_level_0__semtab_xml_attributes_exampples_description_top1_tresh50column_defenitioncolumn_defenition_json
0haroldo be mention as a brazil scorer for 2 di...date#result#score#brazil scorers#competition\\n...df['brazil scorers'].apply(lambda x: 'haroldo'...True2-15401676-3.html.csv11919 in brazilian football0<TABLE DESCRIPTION=\"1919 in brazilian football...Okay, let's tackle this problem. So, I need to...{\"date\": \"Date of the football match in the fo...
1racing like a pro be the most viewed episodeno in series#no in season#title#directed by#wr...df.loc[df['title'] == 'racing like a pro', 'us...True1-11820086-1.html.csv1one tree hill (season 5)10<TABLE DESCRIPTION=\"one tree hill (season 5)\">...Okay, let's tackle this problem. So, I need to...{\"no in series\": \"Sequential episode number in...
2in 1957 formula one season , jean behra win mo...race name#circuit#date#winning driver#construc...df['winning driver'].value_counts().max() == 4...True1-1140111-5.html.csv11957 formula one season15<TABLE DESCRIPTION=\"1957 formula one season\"><...Okay, let me tackle this problem step by step....{\"race name\": \"The official title of the Formu...
3the n be from 861 - 869n degree#television service#country#language#c...all(df['n degree'].between(861, 869))True1-15887683-16.html.csv1television in italy19<TABLE DESCRIPTION=\"television in italy\"><HEAD...Okay, I need to analyze this table schema for ...{\"n degree\": \"Numerical identifier for a telev...
4most of the player be americanplayer#no#nationality#position#years for grizz...df['nationality'].value_counts(normalize=True)...True1-16494599-1.html.csv1memphis grizzlies all - time roster24<TABLE DESCRIPTION=\"memphis grizzlies all - ti...Okay, let's tackle this problem. So, I need to...{\"player\": \"The full name of a basketball play...
....................................
13162tamarine tanasugarn zhang shuai and partner ja...outcome#date#surface#partner#opponents#score\\n...((df['opponents'] == 'tamarine tanasugarn zhan...True2-15272343-4.html.csv1monica niculescu87951<TABLE DESCRIPTION=\"monica niculescu\"><HEADER ...Okay, let me tackle this problem step by step....{\"outcome\": \"Tournament result classification ...
13163guest of madame guillotine have a shorter run ...episode#broadcast date#run time#viewers (in mi...df.loc[df['episode'] == 'guests of madame guil...True1-1776943-1.html.csv1none87962<TABLE DESCRIPTION=\"none\"><HEADER NAME=\"episod...Okay, let's tackle this problem. So, I need to...{\"episode\": \"The title of a television episode...
13164alfred university be not found in 1836institution#location#nickname#founded#enrollme...df[df['institution'] == 'alfred university']['...False1-262476-3.html.csv0presidents' athletic conference87963<TABLE DESCRIPTION=\"presidents' athletic confe...Okay, let's tackle this problem. I need to ana...{\"institution\": \"The official name of an educa...
13165the weight of choice player 56 be 303lb (137 kg)round#choice#player#position#height#weight#col...df[df['choice'] == 56]['weight'].values[0] == ...True1-20861261-4.html.csv12009 indianapolis colts season87964<TABLE DESCRIPTION=\"2009 indianapolis colts se...Okay, let's tackle this problem. I need to ana...{\"round\": \"The draft round number (integer) in...
13166for 2007 / 08 , metal - volume (thousand tons)...ime exchange (including spot , credit and forw...df.loc[df['ime exchange (including spot , cred...True1-28578233-1.html.csv1iran mercantile exchange87973<TABLE DESCRIPTION=\"iran mercantile exchange\">...Okay, let me tackle this problem step by step....{\"ime exchange (including spot , credit and fo...
\n", + "

13167 rows × 11 columns

\n", + "
" + ], + "text/plain": [ + " statement \\\n", + "0 haroldo be mention as a brazil scorer for 2 di... \n", + "1 racing like a pro be the most viewed episode \n", + "2 in 1957 formula one season , jean behra win mo... \n", + "3 the n be from 861 - 869 \n", + "4 most of the player be american \n", + "... ... \n", + "13162 tamarine tanasugarn zhang shuai and partner ja... \n", + "13163 guest of madame guillotine have a shorter run ... \n", + "13164 alfred university be not found in 1836 \n", + "13165 the weight of choice player 56 be 303lb (137 kg) \n", + "13166 for 2007 / 08 , metal - volume (thousand tons)... \n", + "\n", + " table_text \\\n", + "0 date#result#score#brazil scorers#competition\\n... \n", + "1 no in series#no in season#title#directed by#wr... \n", + "2 race name#circuit#date#winning driver#construc... \n", + "3 n degree#television service#country#language#c... \n", + "4 player#no#nationality#position#years for grizz... \n", + "... ... \n", + "13162 outcome#date#surface#partner#opponents#score\\n... \n", + "13163 episode#broadcast date#run time#viewers (in mi... \n", + "13164 institution#location#nickname#founded#enrollme... \n", + "13165 round#choice#player#position#height#weight#col... \n", + "13166 ime exchange (including spot , credit and forw... \n", + "\n", + " pandas_code pandas_eval \\\n", + "0 df['brazil scorers'].apply(lambda x: 'haroldo'... True \n", + "1 df.loc[df['title'] == 'racing like a pro', 'us... True \n", + "2 df['winning driver'].value_counts().max() == 4... True \n", + "3 all(df['n degree'].between(861, 869)) True \n", + "4 df['nationality'].value_counts(normalize=True)... True \n", + "... ... ... \n", + "13162 ((df['opponents'] == 'tamarine tanasugarn zhan... True \n", + "13163 df.loc[df['episode'] == 'guests of madame guil... True \n", + "13164 df[df['institution'] == 'alfred university']['... False \n", + "13165 df[df['choice'] == 56]['weight'].values[0] == ... True \n", + "13166 df.loc[df['ime exchange (including spot , cred... True \n", + "\n", + " table_csv label table_caption \\\n", + "0 2-15401676-3.html.csv 1 1919 in brazilian football \n", + "1 1-11820086-1.html.csv 1 one tree hill (season 5) \n", + "2 1-1140111-5.html.csv 1 1957 formula one season \n", + "3 1-15887683-16.html.csv 1 television in italy \n", + "4 1-16494599-1.html.csv 1 memphis grizzlies all - time roster \n", + "... ... ... ... \n", + "13162 2-15272343-4.html.csv 1 monica niculescu \n", + "13163 1-1776943-1.html.csv 1 none \n", + "13164 1-262476-3.html.csv 0 presidents' athletic conference \n", + "13165 1-20861261-4.html.csv 1 2009 indianapolis colts season \n", + "13166 1-28578233-1.html.csv 1 iran mercantile exchange \n", + "\n", + " __index_level_0__ \\\n", + "0 0 \n", + "1 10 \n", + "2 15 \n", + "3 19 \n", + "4 24 \n", + "... ... \n", + "13162 87951 \n", + "13163 87962 \n", + "13164 87963 \n", + "13165 87964 \n", + "13166 87973 \n", + "\n", + " semtab_xml_attributes_exampples_description_top1_tresh50 \\\n", + "0 ... \n", + "2
<... \n", + "3
... \n", + "\n", + " column_defenition \\\n", + "0 Okay, let's tackle this problem. So, I need to... \n", + "1 Okay, let's tackle this problem. So, I need to... \n", + "2 Okay, let me tackle this problem step by step.... \n", + "3 Okay, I need to analyze this table schema for ... \n", + "4 Okay, let's tackle this problem. So, I need to... \n", + "... ... \n", + "13162 Okay, let me tackle this problem step by step.... \n", + "13163 Okay, let's tackle this problem. So, I need to... \n", + "13164 Okay, let's tackle this problem. I need to ana... \n", + "13165 Okay, let's tackle this problem. I need to ana... \n", + "13166 Okay, let me tackle this problem step by step.... \n", + "\n", + " column_defenition_json \n", + "0 {\"date\": \"Date of the football match in the fo... \n", + "1 {\"no in series\": \"Sequential episode number in... \n", + "2 {\"race name\": \"The official title of the Formu... \n", + "3 {\"n degree\": \"Numerical identifier for a telev... \n", + "4 {\"player\": \"The full name of a basketball play... \n", + "... ... \n", + "13162 {\"outcome\": \"Tournament result classification ... \n", + "13163 {\"episode\": \"The title of a television episode... \n", + "13164 {\"institution\": \"The official name of an educa... \n", + "13165 {\"round\": \"The draft round number (integer) in... \n", + "13166 {\"ime exchange (including spot , credit and fo... \n", + "\n", + "[13167 rows x 11 columns]" + ] + }, + "execution_count": 109, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_data = data2.to_pandas()\n", + "df_data" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "id": "2cc54f5c-ecc2-4041-9bde-b36da80c9ec7", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
table_csvtable_textcolumn_defenition_json
02-15401676-3.html.csvdate#result#score#brazil scorers#competition\\n...{\"date\": \"Date of the football match in the fo...
11-11820086-1.html.csvno in series#no in season#title#directed by#wr...{\"no in series\": \"Sequential episode number in...
21-1140111-5.html.csvrace name#circuit#date#winning driver#construc...{\"race name\": \"The official title of the Formu...
31-15887683-16.html.csvn degree#television service#country#language#c...{\"n degree\": \"Numerical identifier for a telev...
41-16494599-1.html.csvplayer#no#nationality#position#years for grizz...{\"player\": \"The full name of a basketball play...
............
131622-15272343-4.html.csvoutcome#date#surface#partner#opponents#score\\n...{\"outcome\": \"Tournament result classification ...
131631-1776943-1.html.csvepisode#broadcast date#run time#viewers (in mi...{\"episode\": \"The title of a television episode...
131641-262476-3.html.csvinstitution#location#nickname#founded#enrollme...{\"institution\": \"The official name of an educa...
131651-20861261-4.html.csvround#choice#player#position#height#weight#col...{\"round\": \"The draft round number (integer) in...
131661-28578233-1.html.csvime exchange (including spot , credit and forw...{\"ime exchange (including spot , credit and fo...
\n", + "

13167 rows × 3 columns

\n", + "" + ], + "text/plain": [ + " table_csv \\\n", + "0 2-15401676-3.html.csv \n", + "1 1-11820086-1.html.csv \n", + "2 1-1140111-5.html.csv \n", + "3 1-15887683-16.html.csv \n", + "4 1-16494599-1.html.csv \n", + "... ... \n", + "13162 2-15272343-4.html.csv \n", + "13163 1-1776943-1.html.csv \n", + "13164 1-262476-3.html.csv \n", + "13165 1-20861261-4.html.csv \n", + "13166 1-28578233-1.html.csv \n", + "\n", + " table_text \\\n", + "0 date#result#score#brazil scorers#competition\\n... \n", + "1 no in series#no in season#title#directed by#wr... \n", + "2 race name#circuit#date#winning driver#construc... \n", + "3 n degree#television service#country#language#c... \n", + "4 player#no#nationality#position#years for grizz... \n", + "... ... \n", + "13162 outcome#date#surface#partner#opponents#score\\n... \n", + "13163 episode#broadcast date#run time#viewers (in mi... \n", + "13164 institution#location#nickname#founded#enrollme... \n", + "13165 round#choice#player#position#height#weight#col... \n", + "13166 ime exchange (including spot , credit and forw... \n", + "\n", + " column_defenition_json \n", + "0 {\"date\": \"Date of the football match in the fo... \n", + "1 {\"no in series\": \"Sequential episode number in... \n", + "2 {\"race name\": \"The official title of the Formu... \n", + "3 {\"n degree\": \"Numerical identifier for a telev... \n", + "4 {\"player\": \"The full name of a basketball play... \n", + "... ... \n", + "13162 {\"outcome\": \"Tournament result classification ... \n", + "13163 {\"episode\": \"The title of a television episode... \n", + "13164 {\"institution\": \"The official name of an educa... \n", + "13165 {\"round\": \"The draft round number (integer) in... \n", + "13166 {\"ime exchange (including spot , credit and fo... \n", + "\n", + "[13167 rows x 3 columns]" + ] + }, + "execution_count": 110, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = df_data[['table_csv','table_text','column_defenition_json']]\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "id": "6b8cd00c-1aaf-418e-b327-61e1c4344a46", + "metadata": {}, + "outputs": [], + "source": [ + "from io import StringIO\n", + "import re" + ] + }, + { + "cell_type": "code", + "execution_count": 112, + "id": "65ab0bb8-947b-41d5-8837-0eed83534078", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "----------\n", + "{'title', 'type', 'board(inches)', 'board(cm)', 'start', 'pieces', 'playablepowers', 'newunitsnewunitswhencomparedtotheoriginala&a:classicversionofthegame', 'release'}\n", + "{'title', 'type', 'board(inches)', 'board(cm)', 'start', 'newunitsnewunitswhencomparedtotheoriginala&a:classicversionofthegame', 'pieces', 'playablepowers', 'release'}\n", + "{'newunitsnewunitswhencomparedtotheoriginala&a:classicversionofthegame'}\n", + "----------\n", + "{'record', 'team', 'highrebounds', 'date', 'highpoints', 'locationattendance', 'score', 'game', 'highassists'}\n", + "{'record', 'high_assists', 'team', 'location_attendance', 'date', 'high_points', 'score', 'high_rebounds', 'game'}\n", + "{'highassists', 'highpoints', 'locationattendance', 'highrebounds'}\n", + "----------\n", + "{'nationality', 'college/junior/clubteam', 'player', 'round', 'position'}\n", + "{'nationality', 'player', '\"college/junior/clubteam\"', 'round', 'position'}\n", + "{'college/junior/clubteam'}\n", + "----------\n", + "{'netcapacity(mw)', 'reactortype', 'locationchernobyl1chernobyl2chernobyl3chernobyl4chernobyl5ignalina1ignalina2ignalina3kursk1kursk2kursk3kursk4kursk5kursk6leningrad1leningrad2leningrad3leningrad4smolensk1smolensk2smolensk3smolensk4directorateforconstructionofkostomanpp(forkostroma1and2)table31.technologyandsovietenergyavailability-november1981-ntisorderpb82-133455(forignalina4)', 'status', 'grosscapacity(mw)'}\n", + "{'netcapacity(mw)', 'reactortype', 'location', 'status', 'grosscapacity(mw)'}\n", + "{'locationchernobyl1chernobyl2chernobyl3chernobyl4chernobyl5ignalina1ignalina2ignalina3kursk1kursk2kursk3kursk4kursk5kursk6leningrad1leningrad2leningrad3leningrad4smolensk1smolensk2smolensk3smolensk4directorateforconstructionofkostomanpp(forkostroma1and2)table31.technologyandsovietenergyavailability-november1981-ntisorderpb82-133455(forignalina4)'}\n", + "----------\n", + "{'numberofpowiats', 'yearestablished', 'capital', 'voivodeshipafter1569', 'area(kmsquare)in1590(lithuanian)category:articleswithlithuanian-languageexternallinks'}\n", + "{'area(kmsquare)in1590', 'numberofpowiats', 'yearestablished', 'capital', 'voivodeshipafter1569'}\n", + "{'area(kmsquare)in1590(lithuanian)category:articleswithlithuanian-languageexternallinks'}\n", + "----------\n", + "{'federalstate', 'representativeness(inhabitants/mr)', '%oftotalmembers', 'population(onthecensusalsocalledcenso2010)', 'deputiesrequiredignoringthelimits', '%ofthepopulation(censo2010)', 'numberofmembers', 'representativesofnationalaverage'}\n", + "{'federalstate', 'representativeness(inhabitants/mr)', '%oftotalmembers', 'population(onthecensusalsocalledcenso2010)', 'deputiesrequiredignoringthelimits', '%ofthepopulation(censo2010)', 'numberofmembers', 'representativesofnationalaverage'}\n", + "{'%oftotalmembers'}\n", + "----------\n", + "{'copalibertadores1998', 'team', 'intercontinentalcup1998', 'recopasudamericana1998', 'copaconmebol1998', 'copainteramericana1998', 'copamercosur1998'}\n", + "{'copalibertadores1998', 'team', 'recopasudamericana1998', 'copaconmebol1998', 'copainteramericana1998', 'copamercosur1998'}\n", + "{'intercontinentalcup1998'}\n", + "----------\n", + "{'ppgrank', 'appearancespercetages', 'club', 'appearancesvsseasons', 'ptsrank'}\n", + "{'ppgrank', 'appearancespercentages', 'club', 'appearancesvsseasons', 'ptsrank'}\n", + "{'appearancespercetages'}\n", + "----------\n", + "{'☲離líflame', '☴巽xùnwind', '☶艮gènmountain', 'upper→lower↓', '☰乾qiánheaven', '☷坤kūnearth', '☱兌duìlake', '☵坎kǎnwater', '☳震zhènthunder'}\n", + "{'☱兑duìlake', '☲離líflame', '☴巽xùnwind', '☶艮gènmountain', 'upper→lower↓', '☰乾qiánheaven', '☷坤kūnearth', '☵坎kǎnwater', '☳震zhènthunder'}\n", + "{'☱兌duìlake'}\n", + "----------\n", + "{'laps', 'team', 'classpos', 'co-drivers', 'year', 'class', 'pos'}\n", + "{'laps', 'team', 'year', 'class_pos', 'co_drivers', 'class', 'pos'}\n", + "{'co-drivers', 'classpos'}\n", + "----------\n", + "{'season', 'drawn', 'coach', 'penalties', 'pointsfor', 'order', 'played', 'lost', 'pointsagainst', 'pointsdiff'}\n", + "{'season', 'drawn', 'penalties', 'pointsfor', 'order', 'played', 'lost', 'pointsagainst', 'pointsdiff'}\n", + "{'coach'}\n", + "----------\n", + "{'facup', 'total', 'league', 'play-offs', 'leaguecup', 'name'}\n", + "{'fa_cup', 'total', 'league', 'play-offs', 'league_cup', 'name'}\n", + "{'facup', 'leaguecup'}\n", + "----------\n", + "{'speciesworldwide', 'speciesonrãunion', 'species', 'family', 'order'}\n", + "{'speciesworldwide', 'species', 'family', 'order', 'speciesonréunion'}\n", + "{'speciesonrãunion'}\n", + "----------\n", + "{'gicssector', 'bsecode', 'company', 'indexweighting(%', 'city', 'freefloat'}\n", + "{'gicssector', 'bsecode', 'company', 'indexweighting(%)', 'city', 'freefloat'}\n", + "{'indexweighting(%'}\n", + "----------\n", + "{'2005', 'güzelçamlıslostpanther', 'güzelçamlıninkayıppanteri', 'canyayınları', 'collectionofshortstories'}\n", + "{'güzelçamlınınkayıppanteri', '2005', 'güzelçamlıslostpanther', 'canyayınları', 'collectionofshortstories'}\n", + "{'güzelçamlıninkayıppanteri'}\n", + "----------\n", + "{'band', 'role', 'year', 'memebrship', 'albumorsong'}\n", + "{'band', 'role', 'year', 'membership', 'albumorsong'}\n", + "{'memebrship'}\n", + "----------\n", + "{'mar3', 'pre-season', 'poll', 'mar31', 'may26', 'final', 'april7', 'may19', 'may5', 'april28', 'mar24', 'mar17', 'may12', 'april21', 'april14'}\n", + "{'mar3', 'pre-season', 'poll', 'may26', 'final', 'april7', 'may19', 'may5', 'april28', 'mar24', 'mar17', 'may12', 'april21', 'april14'}\n", + "{'mar31'}\n", + "----------\n", + "{'lastmeeting', 'team', 'loss', 'firstplayed', 'draw', 'pontsagainst', 'pointsfor', 'played', 'win'}\n", + "{'lastmeeting', 'team', 'loss', 'firstplayed', 'draw', 'pointsfor', 'pointsagainst', 'played', 'win'}\n", + "{'pontsagainst'}\n", + "----------\n", + "{'owner(s)', 'number&name', 'date', 'description', 'livery'}\n", + "{'number&name', 'owner(s)', 'date', 'description', 'livery'}\n", + "{'number&name'}\n", + "----------\n", + "{'wins', 'centralmurray', 'against', 'draws', 'byes', 'losses'}\n", + "{'wins', 'central_murray', 'against', 'draws', 'byes', 'losses'}\n", + "{'centralmurray'}\n", + "----------\n", + "{'ont', 'ns', 'normaltotal', 'ยง26total', 'nb', 'dateenacted', 'que'}\n", + "{'ont', 'ns', 'normaltotal', 'ย§26total', 'nb', 'dateenacted', 'que'}\n", + "{'ยง26total'}\n", + "----------\n", + "{'fourthplace', 'fifthplace', 'sixthplace', 'host', 'winner', 'thirdplace', 'year', 'runner-up', 'series'}\n", + "{'third_place', 'host', 'winner', 'year', 'series', 'fourth_place', 'sixth_place', 'fifth_place', 'runner_up'}\n", + "{'fourthplace', 'sixthplace', 'fifthplace', 'thirdplace', 'runner-up'}\n", + "----------\n", + "{'season', 'seasonfinale', 'network', 'ratingratingisthepercentageofallhouseholdstunedintotheprogram', 'viewersinmillions', 'timeslot', 'rankrankdenotestherelativepositionofthetelevisionserieswithrespecttootherprimetimeshowsonthecw,fox,nbc,cbs,andabc', 'seasonpremiere', 'tvseason'}\n", + "{'season', 'seasonfinale', 'network', 'viewersinmillions', 'timeslot', 'seasonpremiere', 'rating', 'rank', 'tvseason'}\n", + "{'ratingratingisthepercentageofallhouseholdstunedintotheprogram', 'rankrankdenotestherelativepositionofthetelevisionserieswithrespecttootherprimetimeshowsonthecw,fox,nbc,cbs,andabc'}\n", + "----------\n", + "{'episodenoepisodenoreferstotheepisodesnumberintheoverallseries,whereasseriesnoreferstotheepisodesnumberinthisparticularseries', 'director', 'episode', 'writer(s)', 'originalairdate', 'seriesno'}\n", + "{'director', 'episodeno', 'episode', 'writer(s)', 'originalairdate', 'seriesno'}\n", + "{'episodenoepisodenoreferstotheepisodesnumberintheoverallseries,whereasseriesnoreferstotheepisodesnumberinthisparticularseries'}\n", + "----------\n", + "{'episodenoepisodenoreferstotheepisodesnumberintheoverallseries,whereasseriesnoreferstotheepisodesnumberinthisparticularseries', 'director', 'episode', 'originalairdate', 'writer', 'seriesno'}\n", + "{'director', 'episodeno', 'episode', 'originalairdate', 'writer', 'seriesno'}\n", + "{'episodenoepisodenoreferstotheepisodesnumberintheoverallseries,whereasseriesnoreferstotheepisodesnumberinthisparticularseries'}\n", + "----------\n", + "{'laps', 'team', 'classpos', 'co-drivers', 'year', 'class', 'pos'}\n", + "{'laps', 'class-pos', 'team', 'co-drivers', 'year', 'class', 'pos'}\n", + "{'classpos'}\n", + "----------\n", + "{'arqb', 'pol', 'transmitter', 'bbcb', 'ag', 'bbca', 'arqa', 'd3&4'}\n", + "{'arqb', 'pol', 'd3&4', 'transmitter', 'bbcb', 'ag', 'bbca', 'arqa'}\n", + "{'d3&4'}\n", + "----------\n", + "{'matchtype', 'opponenent', 'location', 'date', 'result'}\n", + "{'matchtype', 'location', 'date', 'opponent', 'result'}\n", + "{'opponenent'}\n", + "----------\n", + "{'season', 'driver', 'team', 'governingbody', 'tuner', 'co-driver'}\n", + "{'season', 'driver', 'team', 'tuner', 'governing_body', 'co_driver'}\n", + "{'co-driver', 'governingbody'}\n", + "----------\n", + "{'player', 'hometown', 'college', 'height', 'school', 'nbadraft'}\n", + "{'player', 'nba_draft', 'hometown', 'college', 'height', 'school'}\n", + "{'nbadraft'}\n", + "----------\n", + "{'owner(s)', 'number&name', 'date', 'description', 'livery'}\n", + "{'number&name', 'owner(s)', 'date', 'description', 'livery'}\n", + "{'number&name'}\n", + "----------\n", + "{'playername', 'round', 'college', 'choice', 'height', 'position', 'weight'}\n", + "{'playername', 'round', 'choice', 'height', 'position', 'weight'}\n", + "{'college'}\n", + "----------\n", + "{'electricanorthtransylvania', 'satumare', 'zalau', 'bistrita', 'cluj', 'baiamare', 'installation', 'oradea'}\n", + "{'satumare', 'zalau', 'bistrita', 'cluj', 'baiamare', 'electricarnorthtransylvania', 'installation', 'oradea'}\n", + "{'electricanorthtransylvania'}\n", + "----------\n", + "{'ihsaaclass', 'enrollment08-09', 'yearjoined', 'county', 'previouscounference', 'school', 'city', 'teamname'}\n", + "{'ihsaaclass', 'enrollment08-09', 'yearjoined', 'county', 'school', 'city', 'previousconference', 'teamname'}\n", + "{'previouscounference'}\n" + ] + } + ], + "source": [ + "for i,data in df.iterrows():\n", + " ddd = pd.read_csv(StringIO(data['table_text']), delimiter='#')\n", + " col = set([re.sub(' ','',k).lower() for k in ddd.columns])\n", + " defgen_key = set([re.sub(' ','',k).lower() for k in json.loads(data['column_defenition_json']).keys()])\n", + " \n", + " if len(col-defgen_key)>0:\n", + " print('-'*10)\n", + " print(col)\n", + " print(defgen_key)\n", + " print(col-defgen_key)" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "id": "32c31644-8bd9-4e4a-9983-f9a0813b1973", + "metadata": {}, + "outputs": [], + "source": [ + "df.to_parquet(\"df_pantabfact_train.parquet.gzip\", compression=\"gzip\")" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "bdf16a72-35ac-4108-91b8-428c6ce3f494", + "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", + "
table_csvcolumn_defenition_json
02-1570274-4.html.csv{\"tournament\": \"The proper name of a golf tour...
12-1145226-5.html.csv{\"player\": \"The name of a rugby player on the ...
21-29063233-1.html.csv{\"no overall\": \"The sequential episode number ...
32-17200019-10.html.csv{\"player\": \"The proper name of a football play...
42-1127788-3.html.csv{\"goal\": \"Quantitative indicator representing ...
.........
16901-18365784-3.html.csv{\"departure\": \"Scheduled departure time of the...
16911-28819393-1.html.csv{\"year\": \"The election year, presented as a fo...
16921-22355-5.html.csv{\"rank\": \"The athlete's competitive position i...
16931-182499-1.html.csv{\"enzyme\": \"Biochemical name of the enzyme, fo...
16942-14418812-1.html.csv{\"week\": \"The sequential week number in the se...
\n", + "

1695 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " table_csv \\\n", + "0 2-1570274-4.html.csv \n", + "1 2-1145226-5.html.csv \n", + "2 1-29063233-1.html.csv \n", + "3 2-17200019-10.html.csv \n", + "4 2-1127788-3.html.csv \n", + "... ... \n", + "1690 1-18365784-3.html.csv \n", + "1691 1-28819393-1.html.csv \n", + "1692 1-22355-5.html.csv \n", + "1693 1-182499-1.html.csv \n", + "1694 2-14418812-1.html.csv \n", + "\n", + " column_defenition_json \n", + "0 {\"tournament\": \"The proper name of a golf tour... \n", + "1 {\"player\": \"The name of a rugby player on the ... \n", + "2 {\"no overall\": \"The sequential episode number ... \n", + "3 {\"player\": \"The proper name of a football play... \n", + "4 {\"goal\": \"Quantitative indicator representing ... \n", + "... ... \n", + "1690 {\"departure\": \"Scheduled departure time of the... \n", + "1691 {\"year\": \"The election year, presented as a fo... \n", + "1692 {\"rank\": \"The athlete's competitive position i... \n", + "1693 {\"enzyme\": \"Biochemical name of the enzyme, fo... \n", + "1694 {\"week\": \"The sequential week number in the se... \n", + "\n", + "[1695 rows x 2 columns]" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "dd = pd.read_parquet(\"df.parquet.gzip\")\n", + "dd" + ] + }, + { + "cell_type": "markdown", + "id": "b4c4c438-ea2d-4044-b6a9-9efac4a597f5", + "metadata": {}, + "source": [ + "# Coder tests" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "ccd8fb55-94be-4b87-9e83-edec5f4325a9", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from .autonotebook import tqdm as notebook_tqdm\n" + ] + } + ], + "source": [ + "from datasets import load_from_disk\n", + "from openai import AzureOpenAI\n" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "6adf47a7-4b6b-4513-a7dc-561208e3825b", + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "import os\n", + "\n", + "# Добавляем корневую директорию проекта в sys.path\n", + "sys.path.append(os.path.dirname(os.path.abspath('/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/tests')))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "b60f3ad1-64be-4707-b605-26205badfd56", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['id', 'statement', 'label', 'table_caption', 'table_text', 'pandas_code', 'pandas_eval', 'nlsep_query', 'semtab_query'],\n", + " num_rows: 88116\n", + "})" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset = load_from_disk('none_filtered_new_dataset/')\n", + "dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "a817e960-131b-48c1-bd77-8243d1148668", + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'dataset' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[42], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mdataset\u001b[49m[\u001b[38;5;241m9\u001b[39m]\n", + "\u001b[0;31mNameError\u001b[0m: name 'dataset' is not defined" + ] + } + ], + "source": [ + "dataset[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "bf7d5707-8b9d-493f-9859-b22df71c0f1d", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "system_prompt = '''You are a Python expert specializing in pandas. Your task is to translate the\n", + "given natural language statement into a single-line pandas expression. This\n", + "expression must be valid and executable to verify the truth of the statement\n", + "using the provided table. Consider the following:\n", + "1. The table is represented as a pandas DataFrame named df.\n", + "2. Do not include explanations, comments, or multiline outputs.\n", + "3. Ensure the output is concise, correct, and when run outputs either True or\n", + "False, and strictly in the following Json Format with a single key \"PANDA\":\n", + "\"PANDA\": \"\"\n", + "'''\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "730a7ee1-017c-4e1f-ba34-884619081578", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "You are a Python expert specializing in pandas. Your task is to translate the\n", + "given natural language statement into a single-line pandas expression. This\n", + "expression must be valid and executable to verify the truth of the statement\n", + "using the provided table. Consider the following:\n", + "1. The table is represented as a pandas DataFrame named df.\n", + "2. Do not include explanations, comments, or multiline outputs.\n", + "3. Ensure the output is concise, correct, and when run outputs either True or\n", + "False, and strictly in the following Json Format with a single key \"PANDA\":\n", + "\"PANDA\": \"\"\n", + "\n" + ] + } + ], + "source": [ + "print(system_prompt)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "dbe75ed1-b719-4b90-b58f-72a36618ff39", + "metadata": {}, + "outputs": [], + "source": [ + "from openai import OpenAI" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "8c84608d-aafd-4151-9dad-d3b2bac1370b", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "ename": "APIConnectionError", + "evalue": "Connection error.", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mConnectError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/httpx/_transports/default.py:101\u001b[0m, in \u001b[0;36mmap_httpcore_exceptions\u001b[0;34m()\u001b[0m\n\u001b[1;32m 100\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 101\u001b[0m \u001b[38;5;28;01myield\u001b[39;00m\n\u001b[1;32m 102\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m exc:\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/httpx/_transports/default.py:250\u001b[0m, in \u001b[0;36mHTTPTransport.handle_request\u001b[0;34m(self, request)\u001b[0m\n\u001b[1;32m 249\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m map_httpcore_exceptions():\n\u001b[0;32m--> 250\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_pool\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhandle_request\u001b[49m\u001b[43m(\u001b[49m\u001b[43mreq\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 252\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(resp\u001b[38;5;241m.\u001b[39mstream, typing\u001b[38;5;241m.\u001b[39mIterable)\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/httpcore/_sync/connection_pool.py:256\u001b[0m, in \u001b[0;36mConnectionPool.handle_request\u001b[0;34m(self, request)\u001b[0m\n\u001b[1;32m 255\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_close_connections(closing)\n\u001b[0;32m--> 256\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m exc \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 258\u001b[0m \u001b[38;5;66;03m# Return the response. Note that in this case we still have to manage\u001b[39;00m\n\u001b[1;32m 259\u001b[0m \u001b[38;5;66;03m# the point at which the response is closed.\u001b[39;00m\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/httpcore/_sync/connection_pool.py:236\u001b[0m, in \u001b[0;36mConnectionPool.handle_request\u001b[0;34m(self, request)\u001b[0m\n\u001b[1;32m 234\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 235\u001b[0m \u001b[38;5;66;03m# Send the request on the assigned connection.\u001b[39;00m\n\u001b[0;32m--> 236\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[43mconnection\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhandle_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 237\u001b[0m \u001b[43m \u001b[49m\u001b[43mpool_request\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\n\u001b[1;32m 238\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 239\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m ConnectionNotAvailable:\n\u001b[1;32m 240\u001b[0m \u001b[38;5;66;03m# In some cases a connection may initially be available to\u001b[39;00m\n\u001b[1;32m 241\u001b[0m \u001b[38;5;66;03m# handle a request, but then become unavailable.\u001b[39;00m\n\u001b[1;32m 242\u001b[0m \u001b[38;5;66;03m#\u001b[39;00m\n\u001b[1;32m 243\u001b[0m \u001b[38;5;66;03m# In this case we clear the connection and try again.\u001b[39;00m\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/httpcore/_sync/connection.py:101\u001b[0m, in \u001b[0;36mHTTPConnection.handle_request\u001b[0;34m(self, request)\u001b[0m\n\u001b[1;32m 100\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_connect_failed \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[0;32m--> 101\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m exc\n\u001b[1;32m 103\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_connection\u001b[38;5;241m.\u001b[39mhandle_request(request)\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/httpcore/_sync/connection.py:78\u001b[0m, in \u001b[0;36mHTTPConnection.handle_request\u001b[0;34m(self, request)\u001b[0m\n\u001b[1;32m 77\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_connection \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m---> 78\u001b[0m stream \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_connect\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 80\u001b[0m ssl_object \u001b[38;5;241m=\u001b[39m stream\u001b[38;5;241m.\u001b[39mget_extra_info(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mssl_object\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/httpcore/_sync/connection.py:124\u001b[0m, in \u001b[0;36mHTTPConnection._connect\u001b[0;34m(self, request)\u001b[0m\n\u001b[1;32m 123\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m Trace(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mconnect_tcp\u001b[39m\u001b[38;5;124m\"\u001b[39m, logger, request, kwargs) \u001b[38;5;28;01mas\u001b[39;00m trace:\n\u001b[0;32m--> 124\u001b[0m stream \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_network_backend\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect_tcp\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 125\u001b[0m trace\u001b[38;5;241m.\u001b[39mreturn_value \u001b[38;5;241m=\u001b[39m stream\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/httpcore/_backends/sync.py:207\u001b[0m, in \u001b[0;36mSyncBackend.connect_tcp\u001b[0;34m(self, host, port, timeout, local_address, socket_options)\u001b[0m\n\u001b[1;32m 202\u001b[0m exc_map: ExceptionMapping \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 203\u001b[0m socket\u001b[38;5;241m.\u001b[39mtimeout: ConnectTimeout,\n\u001b[1;32m 204\u001b[0m \u001b[38;5;167;01mOSError\u001b[39;00m: ConnectError,\n\u001b[1;32m 205\u001b[0m }\n\u001b[0;32m--> 207\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m map_exceptions(exc_map):\n\u001b[1;32m 208\u001b[0m sock \u001b[38;5;241m=\u001b[39m socket\u001b[38;5;241m.\u001b[39mcreate_connection(\n\u001b[1;32m 209\u001b[0m address,\n\u001b[1;32m 210\u001b[0m timeout,\n\u001b[1;32m 211\u001b[0m source_address\u001b[38;5;241m=\u001b[39msource_address,\n\u001b[1;32m 212\u001b[0m )\n", + "File \u001b[0;32m/usr/lib/python3.10/contextlib.py:153\u001b[0m, in \u001b[0;36m_GeneratorContextManager.__exit__\u001b[0;34m(self, typ, value, traceback)\u001b[0m\n\u001b[1;32m 152\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 153\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgen\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mthrow\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtyp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtraceback\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 154\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mStopIteration\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m exc:\n\u001b[1;32m 155\u001b[0m \u001b[38;5;66;03m# Suppress StopIteration *unless* it's the same exception that\u001b[39;00m\n\u001b[1;32m 156\u001b[0m \u001b[38;5;66;03m# was passed to throw(). This prevents a StopIteration\u001b[39;00m\n\u001b[1;32m 157\u001b[0m \u001b[38;5;66;03m# raised inside the \"with\" statement from being suppressed.\u001b[39;00m\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/httpcore/_exceptions.py:14\u001b[0m, in \u001b[0;36mmap_exceptions\u001b[0;34m(map)\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(exc, from_exc):\n\u001b[0;32m---> 14\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m to_exc(exc) \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mexc\u001b[39;00m\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m\n", + "\u001b[0;31mConnectError\u001b[0m: [Errno 111] Connection refused", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mConnectError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/openai/_base_client.py:982\u001b[0m, in \u001b[0;36mSyncAPIClient.request\u001b[0;34m(self, cast_to, options, stream, stream_cls)\u001b[0m\n\u001b[1;32m 981\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 982\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_client\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 983\u001b[0m \u001b[43m \u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 984\u001b[0m \u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_should_stream_response_body\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 985\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 986\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 987\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m httpx\u001b[38;5;241m.\u001b[39mTimeoutException \u001b[38;5;28;01mas\u001b[39;00m err:\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/httpx/_client.py:914\u001b[0m, in \u001b[0;36mClient.send\u001b[0;34m(self, request, stream, auth, follow_redirects)\u001b[0m\n\u001b[1;32m 912\u001b[0m auth \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_build_request_auth(request, auth)\n\u001b[0;32m--> 914\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_send_handling_auth\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 915\u001b[0m \u001b[43m \u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 916\u001b[0m \u001b[43m \u001b[49m\u001b[43mauth\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mauth\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 917\u001b[0m \u001b[43m \u001b[49m\u001b[43mfollow_redirects\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfollow_redirects\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 918\u001b[0m \u001b[43m \u001b[49m\u001b[43mhistory\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m[\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 919\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 920\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/httpx/_client.py:942\u001b[0m, in \u001b[0;36mClient._send_handling_auth\u001b[0;34m(self, request, auth, follow_redirects, history)\u001b[0m\n\u001b[1;32m 941\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m--> 942\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_send_handling_redirects\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 943\u001b[0m \u001b[43m \u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 944\u001b[0m \u001b[43m \u001b[49m\u001b[43mfollow_redirects\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfollow_redirects\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 945\u001b[0m \u001b[43m \u001b[49m\u001b[43mhistory\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mhistory\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 946\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 947\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/httpx/_client.py:979\u001b[0m, in \u001b[0;36mClient._send_handling_redirects\u001b[0;34m(self, request, follow_redirects, history)\u001b[0m\n\u001b[1;32m 977\u001b[0m hook(request)\n\u001b[0;32m--> 979\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_send_single_request\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 980\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/httpx/_client.py:1014\u001b[0m, in \u001b[0;36mClient._send_single_request\u001b[0;34m(self, request)\u001b[0m\n\u001b[1;32m 1013\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m request_context(request\u001b[38;5;241m=\u001b[39mrequest):\n\u001b[0;32m-> 1014\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[43mtransport\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mhandle_request\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1016\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(response\u001b[38;5;241m.\u001b[39mstream, SyncByteStream)\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/httpx/_transports/default.py:249\u001b[0m, in \u001b[0;36mHTTPTransport.handle_request\u001b[0;34m(self, request)\u001b[0m\n\u001b[1;32m 237\u001b[0m req \u001b[38;5;241m=\u001b[39m httpcore\u001b[38;5;241m.\u001b[39mRequest(\n\u001b[1;32m 238\u001b[0m method\u001b[38;5;241m=\u001b[39mrequest\u001b[38;5;241m.\u001b[39mmethod,\n\u001b[1;32m 239\u001b[0m url\u001b[38;5;241m=\u001b[39mhttpcore\u001b[38;5;241m.\u001b[39mURL(\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 247\u001b[0m extensions\u001b[38;5;241m=\u001b[39mrequest\u001b[38;5;241m.\u001b[39mextensions,\n\u001b[1;32m 248\u001b[0m )\n\u001b[0;32m--> 249\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m map_httpcore_exceptions():\n\u001b[1;32m 250\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_pool\u001b[38;5;241m.\u001b[39mhandle_request(req)\n", + "File \u001b[0;32m/usr/lib/python3.10/contextlib.py:153\u001b[0m, in \u001b[0;36m_GeneratorContextManager.__exit__\u001b[0;34m(self, typ, value, traceback)\u001b[0m\n\u001b[1;32m 152\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 153\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgen\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mthrow\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtyp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvalue\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtraceback\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 154\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mStopIteration\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m exc:\n\u001b[1;32m 155\u001b[0m \u001b[38;5;66;03m# Suppress StopIteration *unless* it's the same exception that\u001b[39;00m\n\u001b[1;32m 156\u001b[0m \u001b[38;5;66;03m# was passed to throw(). This prevents a StopIteration\u001b[39;00m\n\u001b[1;32m 157\u001b[0m \u001b[38;5;66;03m# raised inside the \"with\" statement from being suppressed.\u001b[39;00m\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/httpx/_transports/default.py:118\u001b[0m, in \u001b[0;36mmap_httpcore_exceptions\u001b[0;34m()\u001b[0m\n\u001b[1;32m 117\u001b[0m message \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mstr\u001b[39m(exc)\n\u001b[0;32m--> 118\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m mapped_exc(message) \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mexc\u001b[39;00m\n", + "\u001b[0;31mConnectError\u001b[0m: [Errno 111] Connection refused", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mAPIConnectionError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[46], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m client \u001b[38;5;241m=\u001b[39m OpenAI(base_url\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhttp://127.0.0.1:8800/v1\u001b[39m\u001b[38;5;124m\"\u001b[39m, api_key\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdummy\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m----> 2\u001b[0m \u001b[43mclient\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmodels\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlist\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/openai/resources/models.py:91\u001b[0m, in \u001b[0;36mModels.list\u001b[0;34m(self, extra_headers, extra_query, extra_body, timeout)\u001b[0m\n\u001b[1;32m 77\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21mlist\u001b[39m(\n\u001b[1;32m 78\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 79\u001b[0m \u001b[38;5;241m*\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 85\u001b[0m timeout: \u001b[38;5;28mfloat\u001b[39m \u001b[38;5;241m|\u001b[39m httpx\u001b[38;5;241m.\u001b[39mTimeout \u001b[38;5;241m|\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;241m|\u001b[39m NotGiven \u001b[38;5;241m=\u001b[39m not_given,\n\u001b[1;32m 86\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m SyncPage[Model]:\n\u001b[1;32m 87\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 88\u001b[0m \u001b[38;5;124;03m Lists the currently available models, and provides basic information about each\u001b[39;00m\n\u001b[1;32m 89\u001b[0m \u001b[38;5;124;03m one such as the owner and availability.\u001b[39;00m\n\u001b[1;32m 90\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m---> 91\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_api_list\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 92\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m/models\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 93\u001b[0m \u001b[43m \u001b[49m\u001b[43mpage\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mSyncPage\u001b[49m\u001b[43m[\u001b[49m\u001b[43mModel\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 94\u001b[0m \u001b[43m \u001b[49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmake_request_options\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 95\u001b[0m \u001b[43m \u001b[49m\u001b[43mextra_headers\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextra_headers\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mextra_query\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextra_query\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mextra_body\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextra_body\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\n\u001b[1;32m 96\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 97\u001b[0m \u001b[43m \u001b[49m\u001b[43mmodel\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mModel\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 98\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/openai/_base_client.py:1308\u001b[0m, in \u001b[0;36mSyncAPIClient.get_api_list\u001b[0;34m(self, path, model, page, body, options, method)\u001b[0m\n\u001b[1;32m 1297\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21mget_api_list\u001b[39m(\n\u001b[1;32m 1298\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 1299\u001b[0m path: \u001b[38;5;28mstr\u001b[39m,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1305\u001b[0m method: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mget\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 1306\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m SyncPageT:\n\u001b[1;32m 1307\u001b[0m opts \u001b[38;5;241m=\u001b[39m FinalRequestOptions\u001b[38;5;241m.\u001b[39mconstruct(method\u001b[38;5;241m=\u001b[39mmethod, url\u001b[38;5;241m=\u001b[39mpath, json_data\u001b[38;5;241m=\u001b[39mbody, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39moptions)\n\u001b[0;32m-> 1308\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_request_api_list\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpage\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mopts\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/openai/_base_client.py:1159\u001b[0m, in \u001b[0;36mSyncAPIClient._request_api_list\u001b[0;34m(self, model, page, options)\u001b[0m\n\u001b[1;32m 1155\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m resp\n\u001b[1;32m 1157\u001b[0m options\u001b[38;5;241m.\u001b[39mpost_parser \u001b[38;5;241m=\u001b[39m _parser\n\u001b[0;32m-> 1159\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpage\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43moptions\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/openai/_base_client.py:1014\u001b[0m, in \u001b[0;36mSyncAPIClient.request\u001b[0;34m(self, cast_to, options, stream, stream_cls)\u001b[0m\n\u001b[1;32m 1011\u001b[0m \u001b[38;5;28;01mcontinue\u001b[39;00m\n\u001b[1;32m 1013\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mRaising connection error\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m-> 1014\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m APIConnectionError(request\u001b[38;5;241m=\u001b[39mrequest) \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01merr\u001b[39;00m\n\u001b[1;32m 1016\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\n\u001b[1;32m 1017\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mHTTP Response: \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m%i\u001b[39;00m\u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 1018\u001b[0m request\u001b[38;5;241m.\u001b[39mmethod,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 1022\u001b[0m response\u001b[38;5;241m.\u001b[39mheaders,\n\u001b[1;32m 1023\u001b[0m )\n\u001b[1;32m 1024\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrequest_id: \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, response\u001b[38;5;241m.\u001b[39mheaders\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mx-request-id\u001b[39m\u001b[38;5;124m\"\u001b[39m))\n", + "\u001b[0;31mAPIConnectionError\u001b[0m: Connection error." + ] + } + ], + "source": [ + "client = OpenAI(base_url=\"http://127.0.0.1:8800/v1\", api_key=\"dummy\")\n", + "client.models.list()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "9e1c03a2-a140-409c-af6a-1d9f628da2d9", + "metadata": {}, + "outputs": [], + "source": [ + "from openai import OpenAI\n", + "def send_message(message,max_tokens=2000,top_p=0.9,temperature=0.5,server_url=\"http://127.0.0.1:8800/v1\",api_key=\"dummy\",\n", + " model_name='deepseek-ai/deepseek-coder-7b-instruct-v1.5',system_prompt='', stop = [\"Observation:\",\"\\n\\n\\n\\n\",\"\\n \\n \\n\"]):\n", + " client = OpenAI(base_url=server_url, api_key=api_key)\n", + " model_input = [\n", + " { 'role': 'system', 'content': system_prompt},\n", + " { 'role': 'user', 'content': message}\n", + " ]\n", + " try:\n", + " print(f\"Generating content with model: {model_name}\",)\n", + " \n", + " response = client.chat.completions.create(\n", + " model=model_name,\n", + " messages=model_input,\n", + " temperature=temperature,\n", + " max_tokens=max_tokens,\n", + " top_p=top_p,\n", + " stop = stop\n", + " )\n", + " \n", + " return True, response.choices[0].message.content\n", + "\n", + " except Exception as e:\n", + " print(\"Failed to call LLM: \" + str(e))\n", + " time.sleep(6)\n", + " if hasattr(e, 'response'):\n", + " error_info = e.response.json() \n", + " code_value = error_info['error']['code']\n", + " else:\n", + " code_value = \"context_length_exceeded\"\n", + " print(\"Retrying ...\")\n", + " return False, None" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "2465bb75-3e3a-4236-ba60-f8a9db70e9d8", + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "import pandas as pd\n", + "from io import StringIO\n", + "from tqdm import tqdm" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c8a5c61e-f3b6-4e62-ba85-7324422d0d31", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "count = 0\n", + "corrects_sep = 0\n", + "corrects_sem = 0\n", + "for entry in tqdm(dataset):\n", + " total += 1\n", + " df = pd.read_csv(StringIO(entry['table_text']), delimiter='#')\n", + " success,response_sep = send_message(f'{entry[\"statement\"]} {entry[\"nlsep_query\"]}',\n", + " system_prompt=system_prompt)\n", + " if success:\n", + " pandas_eval = str(bool(eval(response_sep)))\n", + " if str(bool(entry['label'])) == str(pandas_eval):\n", + " corrects_sep += 1\n", + " else:\n", + " print(response_sep)\n", + "\n", + " success,response_sem = send_message(f'{entry[\"statement\"]} {entry[\"semtab_query\"]}',\n", + " system_prompt=system_prompt)\n", + " if success:\n", + " pandas_eval = str(bool(eval(response_sem)))\n", + " if str(bool(entry['label'])) == str(pandas_eval):\n", + " response_sem += 1\n", + " else:\n", + " print(corrects_sem)\n", + "\n", + "print(corrects, total, corrects / total)" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "id": "620fb46c-42bb-4e30-b273-5a5621cd0dcb", + "metadata": {}, + "outputs": [], + "source": [ + "import re\n", + "\n", + "def parse_panda_code(input_string):\n", + " \"\"\"\n", + " Парсит строку и извлекает код, который находится внутри конструкции \"PANDA\": <код>\n", + " Поддерживает различные форматы: JSON, простой текст, Markdown\n", + " \n", + " Args:\n", + " input_string (str): Входная строка для парсинга\n", + " \n", + " Returns:\n", + " str: Извлеченный код или пустая строка, если код не найден\n", + " \"\"\"\n", + " # Сначала попробуем найти JSON объект с PANDA\n", + " json_pattern = r'\\{[^{}]*PANDA\":\\s*(.+?)(?:\\n|$)?\\}'\n", + " json_match = re.search(json_pattern, input_string, re.DOTALL)\n", + " code = None\n", + " pattern = r'\"PANDA\":\\s*(.+?)(?:\\n|$)'\n", + " if json_match:\n", + " code = json_match.group(1).strip()\n", + " else:\n", + " match = re.search(pattern, input_string, re.DOTALL)\n", + " if match:\n", + " # Извлекаем код и убираем лишние пробелы по краям\n", + " code = match.group(1).strip()\n", + " # Заменяем одинарные кавычки внутри строки для корректного парсинга JSON\n", + "\n", + " # Если JSON не найден или не распарсился, используем старый метод\n", + " # Паттерн для поиска кода после \"PANDA\": \n", + " # Ищет \"PANDA\": за которым следует пробел, затем код до конца строки или до следующего символа\n", + " if code != None:\n", + " # Убираем возможные кавычки вокруг кода\n", + " if code.startswith('\"') and code.endswith('\"'):\n", + " code = code[1:-1]\n", + " elif code.startswith(\"'\") and code.endswith(\"'\"):\n", + " code = code[1:-1]\n", + " \n", + " return code\n", + " \n", + " return \"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 81, + "id": "efdca526-99b9-4e16-bbde-6b1efc5514a8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Here is a single-line pandas expression that checks if Haroldo is mentioned as a Brazil scorer for two different games:\n", + "\n", + "```json\n", + "\"PANDA\": \"df['brazil scorers'].apply(lambda x: 'haroldo' in x.split(', ')).sum() >= 2\"\n", + "```\n", + "\n", + "This expression splits the 'brazil scorers' column into a list of scorers for each game, checks if 'haroldo' is in the list, and then sums up the True values to see if he is mentioned as a scorer for at least two games.\n", + "\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + } + ], + "source": [ + "corrects_sep = 0\n", + "\n", + "df = pd.read_csv(StringIO(dataset[0]['table_text']), delimiter='#')\n", + "success,response_sep = send_message(f'{dataset[0][\"statement\"]} {dataset[0][\"nlsep_query\"]}',\n", + " system_prompt=system_prompt)\n", + "if success:\n", + " pandas_eval = str(bool(eval(parse_panda_code(response_sep))))\n", + " if str(bool(dataset[0]['label'])) == str(pandas_eval):\n", + " corrects_sep += 1\n", + " else:\n", + " print(response_sep)\n", + "\n", + "success,response_sem = send_message(f'{dataset[0][\"statement\"]} {dataset[0][\"semtab_query\"]}',\n", + " system_prompt=system_prompt)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "f118aad5-82e2-4fc2-ae51-de2c86a29a9b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "```json\n", + "\"PANDA\": \"df['brazil scorers'].str.contains('haroldo', na=False).sum() > 1\"\n", + "```\n", + "This code checks if 'haroldo' is mentioned as a Brazil scorer for more than 1 game. It uses the str.contains method to check if 'haroldo' is present in the 'brazil scorers' column and then sums up the number of True values, indicating how many games 'haroldo' scored for Brazil.\n", + "\n" + ] + } + ], + "source": [ + "print(response_sep)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "a32f7bcc-3a89-4aeb-9475-319bb6bb5bf4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset[0]['label']" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "0586c6e6-6dc8-4f9c-a06b-75da101ab92f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'True'" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "str(bool(eval(parse_panda_code(response_sep))))" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "98ade5a1-b7ca-47b8-86ad-57c4ce108f41", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "\"df['brazil scorers'].str.contains('haroldo', na=False).sum() > 1\"" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "parse_panda_code(response_sep)" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "id": "1d2be3be-9d74-4492-9b80-27253c56c4c9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "np.False_" + ] + }, + "execution_count": 90, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['brazil scorers'].apply(lambda x: 'haroldo' in x.split(', ')).sum() >= 2" + ] + }, + { + "cell_type": "code", + "execution_count": 82, + "id": "ac5ce16e-9647-4c24-aa90-8b6214e43950", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "```json\n", + "\"PANDA\": \"df['brazil scorers'].apply(lambda x: 'haroldo' in x.split(',')).sum() > 1\"\n", + "```\n", + "This code checks if 'haroldo' is mentioned as a scorer for more than one game in the 'brazil scorers' column of the DataFrame.\n", + "\n" + ] + } + ], + "source": [ + "print(response_sem)" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "id": "856f16fe-9337-4aa4-acdb-927131a15e74", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0\n" + ] + } + ], + "source": [ + "corrects_sem = 0\n", + "if success:\n", + " pandas_eval = str(bool(eval(parse_panda_code(response_sem))))\n", + " if str(bool(dataset[0]['label'])) == str(parse_panda_code(pandas_eval)):\n", + " corrects_sem += 1\n", + " else:\n", + " print(corrects_sem)" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "id": "1ac4255a-9303-4b33-a7c6-73bab5846f85", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "\"df['brazil scorers'].str.contains('haroldo', na=False).sum() > 1\"" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "parse_panda_code(response_sem)" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "id": "7be4007e-50f2-4b3e-95da-646d82fd145f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Here is the single-line pandas expression based on the given statement:\\n\\n```json\\n{\"PANDA\": \"df[\\'brazil scorers\\'].str.contains(\\'haroldo\\', na=False).sum() > 1\"}\\n```\\n\\nThis expression checks if \\'haroldo\\' is mentioned as a Brazil scorer for more than 1 game in the \\'brazil scorers\\' column of the DataFrame df.\\n'" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "response_sem" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "6f513eeb-8a61-4994-8e97-fb9fd174d2a4", + "metadata": {}, + "outputs": [], + "source": [ + "pattern = r'\"PANDA\":\\s*(.+?)(?:\\n|$)'\n", + " \n", + " # Используем поиск с флагом re.DOTALL для работы с многострочным кодом\n", + "match = re.search(pattern, '''Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Here is a Python pandas code snippet that checks if Haroldo is mentioned as a Brazil scorer for more than one game:\n", + "```json\n", + "\"PANDA\": \"df['brazil scorers'].str.contains('Haroldo', na=False).sum() > 1\"\n", + "```\n", + "This code uses the pandas `str.contains` method to check if 'Haroldo' is in the 'brazil scorers' column. The `na=False` parameter ensures that NaN values are not considered as matches. The `sum()` method is then used to count the number of True values returned by the `contains` method, which corresponds to the number of times 'Haroldo' is mentioned as a Brazil scorer. The result is checked if it's greater than 1.''',\n", + " re.DOTALL)" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "93406b43-2aca-4032-981a-45694798cb58", + "metadata": {}, + "outputs": [], + "source": [ + "code = match.group(1).strip()" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "1cc3b8b0-cf12-439f-8f3f-d8e6b39cc13d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'\"df[\\'brazil scorers\\'].str.contains(\\'Haroldo\\', na=False).sum() > 1\"'" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "code" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "ad438ab7-8c4a-4d5b-ac87-321e210c5c69", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'\"PANDA\": \"df[\\'brazil scorers\\'].str.contains(\\'Haroldo\\', na=False).sum() > 1\"\\n'" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "match.group()" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "id": "4d9a0e32-2cc5-4bb6-9cae-f60c702da4f1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 85, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bool(eval(parse_panda_code(response_sem)))" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "id": "b2a66aa7-0c14-487d-b47b-9206ee66ce41", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bool(dataset[0]['label'])" + ] + }, + { + "cell_type": "code", + "execution_count": 167, + "id": "feca60af-e739-4114-a5bc-9a8be7b6088a", + "metadata": {}, + "outputs": [], + "source": [ + "from datasets import load_from_disk\n", + "from openai import OpenAI\n", + "import sys\n", + "import os\n", + "import json\n", + "import pandas as pd\n", + "from io import StringIO\n", + "from tqdm import tqdm\n", + "import re\n", + "# Добавляем корневую директорию проекта в sys.path\n", + "sys.path.append(os.path.dirname(os.path.abspath('/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/tests')))\n", + "\n", + "system_prompt = '''You are a Python expert specializing in pandas. Your task is to translate the\n", + "given natural language statement into a single-line pandas expression. This\n", + "expression must be valid and executable to verify the truth of the statement\n", + "using the provided table. Consider the following:\n", + "1. The table is represented as a pandas DataFrame named df.\n", + "2. Do not include explanations, comments, or multiline outputs.\n", + "3. Ensure the output is concise, correct, and when run outputs either True or\n", + "False, and strictly in the following Json Format with a single key \"PANDA\":\n", + "\"PANDA\": \"\"\n", + "'''\n", + "system_correcting_prompt = '''\n", + "You are a Python expert specializing in pandas. Your task is to correct a pandas code that translates \n", + "a given natural language statement into a pandas\n", + "expression. The input data, code, along with the specific error it contains, is provided.\n", + "Your corrected pandas_code must be valid and executable by running the code\n", + "snippet str(bool(eval(pandas_code))) ensuring it accurately evaluates the truth\n", + "of the statement using the provided table with no errors.\n", + "Make sure the pandas_code is of type boolean. Consider the following:\n", + "1. The table is represented as a pandas DataFrame named df.\n", + "2. Do not include explanations, comments, or multiline outputs.\n", + "3. Ensure the output is concise, correct, and when run outputs either True or\n", + "False, and strictly in the following Json Format with a single key \"CORRECT PANDA\": \n", + "\"CORRECT PANDA\": \"\"\n", + "'''\n", + "\n", + "\n", + "def send_message(message,max_tokens=500,top_p=0.9,temperature=0.5,server_url=\"http://127.0.0.1:8800/v1\",api_key=\"dummy\",\n", + " model_name='deepseek-ai/deepseek-coder-7b-instruct-v1.5',system_prompt='', stop = [\"Observation:\",\"\\n\\n\\n\\n\",\"\\n \\n \\n\"]):\n", + " client = OpenAI(base_url=server_url, api_key=api_key)\n", + " model_input = [\n", + " { 'role': 'system', 'content': system_prompt},\n", + " { 'role': 'user', 'content': message}\n", + " ]\n", + " try:\n", + " print(f\"Generating content with model: {model_name}\",)\n", + " \n", + " response = client.chat.completions.create(\n", + " model=model_name,\n", + " messages=model_input,\n", + " temperature=temperature,\n", + " max_tokens=max_tokens,\n", + " top_p=top_p,\n", + " stop = stop\n", + " )\n", + " \n", + " return True, response.choices[0].message.content\n", + "\n", + " except Exception as e:\n", + " print(\"Failed to call LLM: \" + str(e))\n", + " time.sleep(6)\n", + " if hasattr(e, 'response'):\n", + " error_info = e.response.json() \n", + " code_value = error_info['error']['code']\n", + " else:\n", + " code_value = \"context_length_exceeded\"\n", + " print(\"Retrying ...\")\n", + " return False, None\n", + "\n", + "def parse_panda_code(input_string):\n", + " \"\"\"\n", + " Парсит строку и извлекает код, который находится внутри конструкции \"PANDA\": <код>\n", + " Поддерживает различные форматы: JSON, простой текст, Markdown\n", + " \n", + " Args:\n", + " input_string (str): Входная строка для парсинга\n", + " \n", + " Returns:\n", + " str: Извлеченный код или пустая строка, если код не найден\n", + " \"\"\"\n", + " # Сначала попробуем найти JSON объект с PANDA\n", + " json_pattern = r'\\{[^{}]*PANDA\":\\s*(.+?)(?:\\n|$)?\\}'\n", + " json_match = re.search(json_pattern, input_string, re.DOTALL)\n", + " code = None\n", + " pattern = r'\"PANDA\":\\s*(.+?)(?:\\n|$)'\n", + " if json_match:\n", + " code = json_match.group(1).strip()\n", + " else:\n", + " match = re.search(pattern, input_string, re.DOTALL)\n", + " if match:\n", + " # Извлекаем код и убираем лишние пробелы по краям\n", + " code = match.group(1).strip()\n", + " # Заменяем одинарные кавычки внутри строки для корректного парсинга JSON\n", + "\n", + " # Если JSON не найден или не распарсился, используем старый метод\n", + " # Паттерн для поиска кода после \"PANDA\": \n", + " # Ищет \"PANDA\": за которым следует пробел, затем код до конца строки или до следующего символа\n", + " if code != None:\n", + " # Убираем возможные кавычки вокруг кода\n", + " if code.startswith('\"') and code.endswith('\"'):\n", + " code = code[1:-1]\n", + " elif code.startswith(\"'\") and code.endswith(\"'\"):\n", + " code = code[1:-1]\n", + " \n", + " return code\n", + " \n", + " return \"\"\n", + "\n", + "def correct_code(df,input_data,code_str,error_str,iter_id=0,system_correcting_prompt='',stop= [\"Observation:\",\"\\n\\n\\n\\n\",\"\\n \\n \\n\"],\n", + " max_tokens=500,top_p=0.9,temperature=0.5,server_url=\"http://127.0.0.1:8800/v1\",api_key=\"dummy\",\n", + " model_name='deepseek-ai/deepseek-coder-7b-instruct-v1.5',max_iter=3):\n", + " if iter_id, line 1)\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1538\n", + "Can only use .dt accessor with datetimelike values\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 0%| | 3/4257 [00:01<36:14, 1.96 examples/s] " + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 0%| | 4/4257 [00:01<27:44, 2.56 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 0%| | 6/4257 [00:02<18:35, 3.81 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0\n", + "The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1054\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 0%| | 7/4257 [00:02<24:28, 2.89 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "EEEERRRRRRR 789\n", + "cannot do positional indexing on RangeIndex with these indexers [nan] of type float\n", + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 148\n", + "The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 0%| | 9/4257 [00:03<21:58, 3.22 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callableEEEERRRRRRR\n", + " 229\n", + "Can only compare identically-labeled Series objects" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 0%| | 11/4257 [00:03<20:42, 3.42 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", + "EEEERRRRRRR 1390\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR " + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 0%| | 12/4257 [00:04<26:34, 2.66 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "308\n", + "Can only use .dt accessor with datetimelike values\n", + "EEEERRRRRRR 625\n", + "\"['2q'] not in index\"\n", + "'brazil scorers'Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", + "'str' object is not callable\n", + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRREEEERRRRRRR 0\n", + "1226\n", + "'participant'Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 76\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 550\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callableGenerating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 0%| | 16/4257 [00:05<23:28, 3.01 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 0%| | 17/4257 [00:05<21:34, 3.27 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 0%| | 18/4257 [00:06<20:32, 3.44 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "EEEERRRRRRR 1538\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 472\n", + "unterminated string literal (detected at line 1) (, line 1)\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 0%| | 20/4257 [00:06<19:55, 3.55 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 0%| | 21/4257 [00:06<18:00, 3.92 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 148\n", + "'numpy.int64' object has no attribute 'isin'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%| | 22/4257 [00:07<22:06, 3.19 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%| | 24/4257 [00:07<15:22, 4.59 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "EEEERRRRRRR 880\n", + "single positional indexer is out-of-bounds\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%| | 25/4257 [00:07<20:30, 3.44 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%| | 26/4257 [00:08<18:08, 3.89 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%| | 28/4257 [00:08<12:40, 5.56 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1056\n", + "'score'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%| | 30/4257 [00:08<09:59, 7.05 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5'str' object is not callable\n", + "\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 790\n", + "'best row 1'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%| | 32/4257 [00:08<08:53, 7.92 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1390\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%| | 34/4257 [00:09<11:56, 5.89 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 550\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%| | 35/4257 [00:09<14:14, 4.94 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 395\n", + "invalid literal for int() with base 10: 'fernandez '\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%| | 36/4257 [00:09<14:45, 4.77 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "EEEERRRRRRR 231\n", + "Can only use .dt accessor with datetimelike values\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 76\n", + "Can only compare identically-labeled Series objects\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 625\n", + "'2q | loans received , 2q'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1539\n", + "'age'\n", + "'brazil scorers'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5'str' object is not callable\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%| | 37/4257 [00:10<22:28, 3.13 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%| | 38/4257 [00:10<22:00, 3.20 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRRGenerating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5 \n", + "308\n", + "invalid literal for int() with base 10: ' 3 (11)'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%| | 40/4257 [00:10<16:29, 4.26 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%| | 42/4257 [00:11<14:19, 4.90 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "EEEERRRRRRR 472\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1227\n", + "single positional indexer is out-of-bounds\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%| | 43/4257 [00:11<20:43, 3.39 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 706\n", + "'p 2008'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%| | 44/4257 [00:12<20:48, 3.38 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%| | 45/4257 [00:12<19:33, 3.59 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "'brazil scorers'Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%| | 48/4257 [00:12<12:59, 5.40 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%| | 50/4257 [00:12<10:10, 6.90 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%| | 52/4257 [00:12<08:18, 8.44 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 790\n", + "'best row 1'\n", + "EEEERRRRRRR 1390\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%|▏ | 54/4257 [00:13<11:59, 5.85 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1539\n", + "'age'\n", + "EEEERRRRRRR 76\n", + "Can only compare identically-labeled Series objects\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%|▏ | 55/4257 [00:14<16:51, 4.15 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 881\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 149\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%|▏ | 56/4257 [00:14<18:55, 3.70 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%|▏ | 57/4257 [00:14<16:56, 4.13 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%|▏ | 58/4257 [00:14<19:37, 3.57 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%|▏ | 60/4257 [00:15<13:56, 5.02 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%|▏ | 62/4257 [00:15<16:00, 4.37 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 396\n", + "Can only use .dt accessor with datetimelike values\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 1%|▏ | 63/4257 [00:15<15:20, 4.56 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable'brazil scorers'\n", + "\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 231\n", + "single positional indexer is out-of-bounds\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 67/4257 [00:16<09:43, 7.18 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "EEEERRRRRRR 309\n", + "Can only use .dt accessor with datetimelike values\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 551\n", + "'>' not supported between instances of 'str' and 'float'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 472\n", + "'retired'\n", + "EEEERRRRRRR 625\n", + "'money raised'\n", + "EEEERRRRRRR 1390\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 68/4257 [00:17<19:28, 3.59 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1539\n", + "'>' not supported between instances of 'str' and 'int'\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 70/4257 [00:17<14:54, 4.68 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 71/4257 [00:18<22:10, 3.15 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 72/4257 [00:18<19:42, 3.54 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "EEEERRRRRRR 790\n", + "'best row 1'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1060\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 73/4257 [00:18<20:18, 3.43 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 706\n", + "'p 2008'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 74/4257 [00:18<18:29, 3.77 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 75/4257 [00:18<17:15, 4.04 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1391\n", + "could not convert string to float: '15.14 (104)'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 76/4257 [00:19<21:43, 3.21 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "EEEERRRRRRR 149\n", + "could not convert string to float: '19.8 (122)'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 78/4257 [00:19<17:39, 3.94 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 79/4257 [00:19<16:17, 4.27 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 81/4257 [00:20<15:06, 4.61 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 551\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 84/4257 [00:20<09:41, 7.18 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 85/4257 [00:20<09:41, 7.17 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1228\n", + "single positional indexer is out-of-bounds\n", + "EEEERRRRRRR 4\n", + "Can only use .dt accessor with datetimelike values\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 77\n", + "'2001-04-14'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 86/4257 [00:21<22:22, 3.11 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 87/4257 [00:21<21:04, 3.30 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "EEEERRRRRRR 882\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 88/4257 [00:22<18:25, 3.77 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 89/4257 [00:22<15:30, 4.48 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 91/4257 [00:22<15:09, 4.58 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 473\n", + "'brice feillu ( fra )'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 628\n", + "'berlin'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 396\n", + "Can only use .dt accessor with datetimelike values\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 309\n", + "'col'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", "'str' object is not callable\n" ] }, @@ -1961,7 +10658,78 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 1%| | 34/4257 [00:09<11:56, 5.89 examples/s]" + "Map (num_proc=16): 2%|▏ | 93/4257 [00:23<25:19, 2.74 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 94/4257 [00:24<23:46, 2.92 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'brazil scorers'\n", + "'str' object is not callableGenerating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 96/4257 [00:24<16:20, 4.24 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'brazil scorers'\n", + "'str' object is not callableGenerating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 99/4257 [00:24<12:21, 5.61 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 100/4257 [00:24<11:50, 5.85 examples/s]" ] }, { @@ -1969,9 +10737,30 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1542\n", + "'DataFrame' object has no attribute 'gcm'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 550\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 77\n", + "unsupported operand type(s) for -: 'str' and 'str'\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 101/4257 [00:25<15:57, 4.34 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 790\n", + "'best row 1'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -1979,66 +10768,175 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 1%| | 35/4257 [00:09<14:14, 4.94 examples/s]" + "Map (num_proc=16): 2%|▏ | 102/4257 [00:25<17:53, 3.87 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 2%|▏ | 104/4257 [00:25<12:17, 5.63 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 395\n", - "invalid literal for int() with base 10: 'fernandez '\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 706\n", + "'p 2008'\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 1%| | 36/4257 [00:09<14:45, 4.77 examples/s]" + ":1: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 231\n", - "Can only use .dt accessor with datetimelike values\n", + "EEEERRRRRRR 1391\n", + "'<=' not supported between instances of 'str' and 'float'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 76\n", - "Can only compare identically-labeled Series objects\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 3%|▎ | 110/4257 [00:26<10:29, 6.59 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 4\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 625\n", - "'2q | loans received , 2q'\n", + "EEEERRRRRRR 149\n", + "unsupported operand type(s) for -: 'str' and 'str'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1539\n", - "'age'\n", "'brazil scorers'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5'str' object is not callable\n", - "\n" + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 1%| | 37/4257 [00:10<22:28, 3.13 examples/s]" + "Map (num_proc=16): 3%|▎ | 111/4257 [00:27<15:53, 4.35 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "EEEERRRRRRR 1062\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR'brazil scorers'\n", + " 'str' object is not callable309\n", + "\n", + "'str' object has no attribute 'month'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 3%|▎ | 112/4257 [00:27<16:49, 4.10 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 629\n", + "Can only compare identically-labeled Series objects\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 3%|▎ | 113/4257 [00:27<16:49, 4.10 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "EEEERRRRRRR 232\n", + "attempt to get argmax of an empty sequence\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 884\n", + "invalid syntax (, line 0)\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 3%|▎ | 114/4257 [00:27<17:55, 3.85 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5'brazil scorers'\n", + "\n", + "'str' object is not callable\n", + "EEEERRRRRRR 552\n", + "Can only use .dt accessor with datetimelike values\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 1%| | 38/4257 [00:10<22:00, 3.20 examples/s]" + "Map (num_proc=16): 3%|▎ | 116/4257 [00:28<20:26, 3.38 examples/s]" ] }, { @@ -2046,26 +10944,34 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRRGenerating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5 \n", - "308\n", - "invalid literal for int() with base 10: ' 3 (11)'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR EEEERRRRRRR790 \n", + "77'best row 1'\n", + "\n", + "'>' not supported between instances of 'str' and 'int'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1229\n", + "name 'datetime' is not defined\n", + "EEEERRRRRRR 396\n", + "Can only use .dt accessor with datetimelike values\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 1%| | 40/4257 [00:10<16:29, 4.26 examples/s]" + "Map (num_proc=16): 3%|▎ | 118/4257 [00:29<21:46, 3.17 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -2075,38 +10981,28 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 1%| | 42/4257 [00:11<14:19, 4.90 examples/s]" + "Map (num_proc=16): 3%|▎ | 119/4257 [00:29<23:29, 2.94 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 472\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1227\n", - "single positional indexer is out-of-bounds\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 1%| | 43/4257 [00:11<20:43, 3.39 examples/s]" + "Map (num_proc=16): 3%|▎ | 121/4257 [00:30<17:30, 3.94 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 706\n", - "'p 2008'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -2116,13 +11012,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 1%| | 44/4257 [00:12<20:48, 3.38 examples/s]" + "Map (num_proc=16): 3%|▎ | 122/4257 [00:30<21:28, 3.21 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 149\n", + "unsupported operand type(s) for -: 'str' and 'str'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -2132,43 +11031,49 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 1%| | 45/4257 [00:12<19:33, 3.59 examples/s]" + "Map (num_proc=16): 3%|▎ | 123/4257 [00:30<21:49, 3.16 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "'brazil scorers'Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n", - "'str' object is not callable\n", + "EEEERRRRRRR 474\n", + "unsupported operand type(s) for -: 'str' and 'str'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 5\n", + "Could not convert string '70 + 71 + 68 + 72 = 281' to numeric\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR'brazil scorers' \n", + "707'str' object is not callable\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 1%| | 48/4257 [00:12<12:59, 5.40 examples/s]" + "Map (num_proc=16): 3%|▎ | 124/4257 [00:31<22:27, 3.07 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "unsupported operand type(s) for -: 'str' and 'int'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", + "EEEERRRRRRR 1391\n", + "invalid syntax (, line 0)\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 1%| | 50/4257 [00:12<10:10, 6.90 examples/s]" + "Map (num_proc=16): 3%|▎ | 125/4257 [00:31<24:03, 2.86 examples/s]" ] }, { @@ -2179,14 +11084,15 @@ "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 1%| | 52/4257 [00:12<08:18, 8.44 examples/s]" + "Map (num_proc=16): 3%|▎ | 127/4257 [00:31<17:46, 3.87 examples/s]" ] }, { @@ -2194,20 +11100,15 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 790\n", - "'best row 1'\n", - "EEEERRRRRRR 1390\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 1%|▏ | 54/4257 [00:13<11:59, 5.85 examples/s]" + "Map (num_proc=16): 3%|▎ | 128/4257 [00:32<15:24, 4.47 examples/s]" ] }, { @@ -2215,11 +11116,11 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1539\n", - "'age'\n", - "EEEERRRRRRR 76\n", - "Can only compare identically-labeled Series objects\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 884\n", + "'amt 3.0'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -2229,26 +11130,24 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 1%|▏ | 55/4257 [00:14<16:51, 4.15 examples/s]" + "Map (num_proc=16): 3%|▎ | 130/4257 [00:32<19:26, 3.54 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 881\n", - "index 0 is out of bounds for axis 0 with size 0\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 149\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 1%|▏ | 56/4257 [00:14<18:55, 3.70 examples/s]" + "Map (num_proc=16): 3%|▎ | 132/4257 [00:33<15:10, 4.53 examples/s]" ] }, { @@ -2256,28 +11155,34 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 1%|▏ | 57/4257 [00:14<16:56, 4.13 examples/s]" + "Map (num_proc=16): 3%|▎ | 133/4257 [00:33<13:50, 4.97 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 1%|▏ | 58/4257 [00:14<19:37, 3.57 examples/s]" + "Map (num_proc=16): 3%|▎ | 136/4257 [00:33<09:27, 7.26 examples/s]" ] }, { @@ -2285,22 +11190,22 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 1%|▏ | 60/4257 [00:15<13:56, 5.02 examples/s]" + "Map (num_proc=16): 3%|▎ | 138/4257 [00:33<09:40, 7.10 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 552\n", + "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -2311,7 +11216,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 1%|▏ | 62/4257 [00:15<16:00, 4.37 examples/s]" + "Map (num_proc=16): 3%|▎ | 140/4257 [00:33<07:50, 8.76 examples/s]" ] }, { @@ -2319,8 +11224,16 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 396\n", - "Can only use .dt accessor with datetimelike values\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 790\n", + "'best row 1'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1391\n", + "unsupported operand type(s) for &: 'str' and 'bool'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -2329,26 +11242,19 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 1%|▏ | 63/4257 [00:15<15:20, 4.56 examples/s]" + "Map (num_proc=16): 3%|▎ | 142/4257 [00:34<14:59, 4.58 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1542\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable'brazil scorers'\n", + "EEEERRRRRRR 309Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 231\n", - "single positional indexer is out-of-bounds\n", + "unsupported operand type(s) for -: 'str' and 'str'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -2356,27 +11262,15 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 67/4257 [00:16<09:43, 7.18 examples/s]" + "Map (num_proc=16): 3%|▎ | 143/4257 [00:35<17:07, 4.01 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 309\n", - "Can only use .dt accessor with datetimelike values\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 551\n", - "'>' not supported between instances of 'str' and 'float'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 472\n", - "'retired'\n", - "EEEERRRRRRR 625\n", - "'money raised'\n", - "EEEERRRRRRR 1390\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1230\n", + "invalid syntax (, line 0)\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] @@ -2385,7 +11279,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 68/4257 [00:17<19:28, 3.59 examples/s]" + "Map (num_proc=16): 3%|▎ | 144/4257 [00:35<15:31, 4.42 examples/s]" ] }, { @@ -2394,8 +11288,6 @@ "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1539\n", - "'>' not supported between instances of 'str' and 'int'\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -2404,7 +11296,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 70/4257 [00:17<14:54, 4.68 examples/s]" + "Map (num_proc=16): 3%|▎ | 146/4257 [00:35<13:10, 5.20 examples/s]" ] }, { @@ -2412,7 +11304,8 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 149\n", + "'<' not supported between instances of 'str' and 'int'\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -2421,13 +11314,20 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 71/4257 [00:18<22:10, 3.15 examples/s]" + "Map (num_proc=16): 3%|▎ | 147/4257 [00:35<16:20, 4.19 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 77\n", + "Can only use .dt accessor with datetimelike values\n", + "EEEERRRRRRR 629\n", + "'event'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -2437,60 +11337,62 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 72/4257 [00:18<19:42, 3.54 examples/s]" + "Map (num_proc=16): 3%|▎ | 148/4257 [00:36<20:28, 3.35 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 790\n", - "'best row 1'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 234\n", + "int() argument must be a string, a bytes-like object or a real number, not 'NoneType'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1060\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 73/4257 [00:18<20:18, 3.43 examples/s]" + "Map (num_proc=16): 4%|▎ | 149/4257 [00:36<20:31, 3.34 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 706\n", - "'p 2008'\n" + "EEEERRRRRRR 1066\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 74/4257 [00:18<18:29, 3.77 examples/s]" + "Map (num_proc=16): 4%|▎ | 151/4257 [00:37<16:39, 4.11 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 75/4257 [00:18<17:15, 4.04 examples/s]" + "Map (num_proc=16): 4%|▎ | 152/4257 [00:37<15:34, 4.39 examples/s]" ] }, { @@ -2498,30 +11400,26 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1391\n", - "could not convert string to float: '15.14 (104)'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 76/4257 [00:19<21:43, 3.21 examples/s]" + "Map (num_proc=16): 4%|▎ | 154/4257 [00:37<14:53, 4.59 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "EEEERRRRRRR 149\n", - "could not convert string to float: '19.8 (122)'\n", + "EEEERRRRRRR 474\n", + "unsupported operand type(s) for -: 'str' and 'str'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 790\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -2531,7 +11429,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 78/4257 [00:19<17:39, 3.94 examples/s]" + "Map (num_proc=16): 4%|▎ | 155/4257 [00:38<21:46, 3.14 examples/s]" ] }, { @@ -2545,35 +11443,39 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 79/4257 [00:19<16:17, 4.27 examples/s]" + "Map (num_proc=16): 4%|▎ | 156/4257 [00:38<19:38, 3.48 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 81/4257 [00:20<15:06, 4.61 examples/s]" + "Map (num_proc=16): 4%|▎ | 159/4257 [00:38<12:57, 5.27 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 397\n", + "unterminated string literal (detected at line 1) (, line 1)\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 551\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 151\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -2582,14 +11484,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 84/4257 [00:20<09:41, 7.18 examples/s]" + "Map (num_proc=16): 4%|▍ | 161/4257 [00:39<18:31, 3.69 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -2599,22 +11500,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 85/4257 [00:20<09:41, 7.17 examples/s]" + "Map (num_proc=16): 4%|▍ | 162/4257 [00:39<17:33, 3.89 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1228\n", - "single positional indexer is out-of-bounds\n", - "EEEERRRRRRR 4\n", - "Can only use .dt accessor with datetimelike values\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 77\n", - "'2001-04-14'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -2624,13 +11516,17 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 86/4257 [00:21<22:22, 3.11 examples/s]" + "Map (num_proc=16): 4%|▍ | 163/4257 [00:39<16:00, 4.26 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 1542\n", + "'>=' not supported between instances of 'str' and 'int'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -2638,30 +11534,36 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 87/4257 [00:21<21:04, 3.30 examples/s]" + "Map (num_proc=16): 4%|▍ | 165/4257 [00:40<14:11, 4.81 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 882\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 709\n", "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 88/4257 [00:22<18:25, 3.77 examples/s]" + "Map (num_proc=16): 4%|▍ | 167/4257 [00:40<16:44, 4.07 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 1066\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -2669,44 +11571,37 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 89/4257 [00:22<15:30, 4.48 examples/s]" + "Map (num_proc=16): 4%|▍ | 168/4257 [00:41<17:53, 3.81 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 91/4257 [00:22<15:09, 4.58 examples/s]" + "Map (num_proc=16): 4%|▍ | 170/4257 [00:41<15:05, 4.51 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 1230\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 473\n", - "'brice feillu ( fra )'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 628\n", - "'berlin'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 396\n", + "EEEERRRRRRR 552\n", "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 309\n", - "'col'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -2715,68 +11610,75 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 93/4257 [00:23<25:19, 2.74 examples/s]" + "Map (num_proc=16): 4%|▍ | 171/4257 [00:42<18:10, 3.75 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 94/4257 [00:24<23:46, 2.92 examples/s]" + "Map (num_proc=16): 4%|▍ | 173/4257 [00:42<13:24, 5.08 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 5\n", + "name 'average_score' is not defined\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callableGenerating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n" + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 96/4257 [00:24<16:20, 4.24 examples/s]" + "Map (num_proc=16): 4%|▍ | 174/4257 [00:42<14:46, 4.61 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callableGenerating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 888\n", + "The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 309\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5unsupported operand type(s) for -: 'str' and 'str'\n", "\n", - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "'brazil scorers'EEEERRRRRRR\n", + " 'str' object is not callable397\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 99/4257 [00:24<12:21, 5.61 examples/s]" + "Map (num_proc=16): 4%|▍ | 176/4257 [00:42<14:31, 4.68 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -2786,7 +11688,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 100/4257 [00:24<11:50, 5.85 examples/s]" + "Map (num_proc=16): 4%|▍ | 177/4257 [00:43<14:40, 4.64 examples/s]" ] }, { @@ -2794,11 +11696,6 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1542\n", - "'DataFrame' object has no attribute 'gcm'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 77\n", - "unsupported operand type(s) for -: 'str' and 'str'\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -2807,7 +11704,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 101/4257 [00:25<15:57, 4.34 examples/s]" + "Map (num_proc=16): 4%|▍ | 178/4257 [00:43<17:26, 3.90 examples/s]" ] }, { @@ -2815,67 +11712,57 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 790\n", - "'best row 1'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 102/4257 [00:25<17:53, 3.87 examples/s]" + "Map (num_proc=16): 4%|▍ | 179/4257 [00:43<15:20, 4.43 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 2%|▏ | 104/4257 [00:25<12:17, 5.63 examples/s]" + "Map (num_proc=16): 4%|▍ | 180/4257 [00:43<13:30, 5.03 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", + " 790\n", + "'best row 1'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 706\n", - "'p 2008'\n" + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - ":1: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n" + "Map (num_proc=16): 4%|▍ | 181/4257 [00:44<16:17, 4.17 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1391\n", - "'<=' not supported between instances of 'str' and 'float'\n", + "EEEERRRRRRR 234\n", + "Can only compare identically-labeled Series objects\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -2886,19 +11773,27 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 110/4257 [00:26<10:29, 6.59 examples/s]" + "Map (num_proc=16): 4%|▍ | 182/4257 [00:44<16:47, 4.05 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 4%|▍ | 183/4257 [00:44<17:04, 3.98 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 4\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 149\n", - "unsupported operand type(s) for -: 'str' and 'str'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -2908,137 +11803,107 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 111/4257 [00:27<15:53, 4.35 examples/s]" + "Map (num_proc=16): 4%|▍ | 184/4257 [00:44<15:01, 4.52 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1062\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR'brazil scorers'\n", - " 'str' object is not callable309\n", - "\n", - "'str' object has no attribute 'month'\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 112/4257 [00:27<16:49, 4.10 examples/s]" + "Map (num_proc=16): 4%|▍ | 185/4257 [00:44<14:57, 4.54 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 631\n", + "invalid literal for int() with base 10: 'w 14'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 629\n", - "Can only compare identically-labeled Series objects\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 113/4257 [00:27<16:49, 4.10 examples/s]" + "Map (num_proc=16): 4%|▍ | 186/4257 [00:45<16:32, 4.10 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 232\n", - "attempt to get argmax of an empty sequence\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 884\n", - "invalid syntax (, line 0)\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 114/4257 [00:27<17:55, 3.85 examples/s]" + "Map (num_proc=16): 4%|▍ | 187/4257 [00:45<15:47, 4.30 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5'brazil scorers'\n", - "\n", - "'str' object is not callable\n", - "EEEERRRRRRR 552\n", - "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 1542\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 116/4257 [00:28<20:26, 3.38 examples/s]" + "Map (num_proc=16): 4%|▍ | 188/4257 [00:45<20:45, 3.27 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR EEEERRRRRRR790 \n", - "77'best row 1'\n", - "\n", - "'>' not supported between instances of 'str' and 'int'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1229\n", - "name 'datetime' is not defined\n", - "EEEERRRRRRR 396\n", - "Can only use .dt accessor with datetimelike values\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "'str' object is not callableGenerating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 118/4257 [00:29<21:46, 3.17 examples/s]" + "Map (num_proc=16): 5%|▍ | 192/4257 [00:46<09:14, 7.33 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 119/4257 [00:29<23:29, 2.94 examples/s]" + "Map (num_proc=16): 5%|▍ | 194/4257 [00:46<15:34, 4.35 examples/s]" ] }, { @@ -3046,14 +11911,15 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 889\n", + "'director(s)'\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 121/4257 [00:30<17:30, 3.94 examples/s]" + "Map (num_proc=16): 5%|▍ | 195/4257 [00:47<15:46, 4.29 examples/s]" ] }, { @@ -3061,68 +11927,52 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 122/4257 [00:30<21:28, 3.21 examples/s]" + "Map (num_proc=16): 5%|▍ | 197/4257 [00:47<11:54, 5.68 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 149\n", - "unsupported operand type(s) for -: 'str' and 'str'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 123/4257 [00:30<21:49, 3.16 examples/s]" + "Map (num_proc=16): 5%|▍ | 198/4257 [00:47<12:56, 5.23 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 474\n", - "unsupported operand type(s) for -: 'str' and 'str'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 5\n", - "Could not convert string '70 + 71 + 68 + 72 = 281' to numeric\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR'brazil scorers' \n", - "707'str' object is not callable\n", - "\n" + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 124/4257 [00:31<22:27, 3.07 examples/s]" + "Map (num_proc=16): 5%|▍ | 200/4257 [00:47<12:01, 5.62 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "unsupported operand type(s) for -: 'str' and 'int'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n", - "EEEERRRRRRR 1391\n", - "invalid syntax (, line 0)\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -3130,16 +11980,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 125/4257 [00:31<24:03, 2.86 examples/s]" + "Map (num_proc=16): 5%|▍ | 201/4257 [00:48<14:05, 4.80 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -3149,54 +11996,71 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 127/4257 [00:31<17:46, 3.87 examples/s]" + "Map (num_proc=16): 5%|▍ | 202/4257 [00:48<12:26, 5.44 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 128/4257 [00:32<15:24, 4.47 examples/s]" + "Map (num_proc=16): 5%|▍ | 204/4257 [00:48<12:59, 5.20 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 78\n", + "'grand slam tournaments'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", + "EEEERRRRRRR 790\n", + "'best row 1'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 884\n", - "'amt 3.0'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 477\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 130/4257 [00:32<19:26, 3.54 examples/s]" + "Map (num_proc=16): 5%|▍ | 205/4257 [00:49<15:16, 4.42 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 6\n", + "closing parenthesis ']' does not match opening parenthesis '(' (, line 1)\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 151\n", + "unterminated string literal (detected at line 1) (, line 1)\n", + "EEEERRRRRRR 397\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRRGenerating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + " 631\n", + "'score'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1398\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -3204,7 +12068,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 132/4257 [00:33<15:10, 4.53 examples/s]" + "Map (num_proc=16): 5%|▍ | 207/4257 [00:50<24:55, 2.71 examples/s]" ] }, { @@ -3212,23 +12076,30 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'" + "EEEERRRRRRR 552\n", + "Can only use .dt accessor with datetimelike values\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1068\n", + "unterminated string literal (detected at line 1) (, line 1)\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 133/4257 [00:33<13:50, 4.97 examples/s]" + "Map (num_proc=16): 5%|▍ | 208/4257 [00:51<30:36, 2.21 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n", + "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -3239,14 +12110,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 136/4257 [00:33<09:27, 7.26 examples/s]" + "Map (num_proc=16): 5%|▍ | 211/4257 [00:51<23:09, 2.91 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -3254,17 +12124,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 138/4257 [00:33<09:40, 7.10 examples/s]" + "Map (num_proc=16): 5%|▍ | 212/4257 [00:51<21:45, 3.10 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 552\n", - "Can only use .dt accessor with datetimelike values\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 310\n", + "'minnesota'\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -3273,7 +12142,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 140/4257 [00:33<07:50, 8.76 examples/s]" + "Map (num_proc=16): 5%|▌ | 213/4257 [00:52<18:47, 3.59 examples/s]" ] }, { @@ -3282,68 +12151,66 @@ "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 790\n", - "'best row 1'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1391\n", - "unsupported operand type(s) for &: 'str' and 'bool'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 711\n", + "unterminated string literal (detected at line 1) (, line 1)\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 142/4257 [00:34<14:59, 4.58 examples/s]" + "Map (num_proc=16): 5%|▌ | 214/4257 [00:52<18:51, 3.57 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1542\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 309Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n", - "unsupported operand type(s) for -: 'str' and 'str'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 143/4257 [00:35<17:07, 4.01 examples/s]" + "Map (num_proc=16): 5%|▌ | 215/4257 [00:52<16:05, 4.19 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1230\n", - "invalid syntax (, line 0)\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 78\n", + "'win - loss'\n", + "EEEERRRRRRR 235\n", + "'merja rantanen'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 889\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 144/4257 [00:35<15:31, 4.42 examples/s]" + "Map (num_proc=16): 5%|▌ | 217/4257 [00:53<22:23, 3.01 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -3353,38 +12220,39 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 146/4257 [00:35<13:10, 5.20 examples/s]" + "Map (num_proc=16): 5%|▌ | 218/4257 [00:53<19:34, 3.44 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 791\n", + "Can only use .dt accessor with datetimelike values\n", + "EEEERRRRRRR 151\n", + "'no'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 149\n", - "'<' not supported between instances of 'str' and 'int'\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1239\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 477\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 147/4257 [00:35<16:20, 4.19 examples/s]" + "Map (num_proc=16): 5%|▌ | 219/4257 [00:54<29:07, 2.31 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 77\n", - "Can only use .dt accessor with datetimelike values\n", - "EEEERRRRRRR 629\n", - "'event'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -3394,7 +12262,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 3%|▎ | 148/4257 [00:36<20:28, 3.35 examples/s]" + "Map (num_proc=16): 5%|▌ | 220/4257 [00:54<23:53, 2.82 examples/s]" ] }, { @@ -3402,8 +12270,8 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 234\n", - "int() argument must be a string, a bytes-like object or a real number, not 'NoneType'\n", + "EEEERRRRRRR 1543\n", + "'McLaren M23'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -3413,7 +12281,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▎ | 149/4257 [00:36<20:31, 3.34 examples/s]" + "Map (num_proc=16): 5%|▌ | 221/4257 [00:55<26:02, 2.58 examples/s]" ] }, { @@ -3423,9 +12291,9 @@ "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1066\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -3435,21 +12303,23 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▎ | 151/4257 [00:37<16:39, 4.11 examples/s]" + "Map (num_proc=16): 5%|▌ | 224/4257 [00:55<16:51, 3.99 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▎ | 152/4257 [00:37<15:34, 4.39 examples/s]" + "Map (num_proc=16): 5%|▌ | 225/4257 [00:55<16:09, 4.16 examples/s]" ] }, { @@ -3457,50 +12327,57 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 1069\n", + "'no'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▎ | 154/4257 [00:37<14:53, 4.59 examples/s]" + "Map (num_proc=16): 5%|▌ | 226/4257 [00:55<16:20, 4.11 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 474\n", - "unsupported operand type(s) for -: 'str' and 'str'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 790\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▎ | 155/4257 [00:38<21:46, 3.14 examples/s]" + "Map (num_proc=16): 5%|▌ | 228/4257 [00:56<13:50, 4.85 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 553\n", + "'designation'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▎ | 156/4257 [00:38<19:38, 3.48 examples/s]" + "Map (num_proc=16): 5%|▌ | 230/4257 [00:56<13:52, 4.84 examples/s]" ] }, { @@ -3508,56 +12385,56 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 6\n", + "Can only use .dt accessor with datetimelike values\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▎ | 159/4257 [00:38<12:57, 5.27 examples/s]" + "Map (num_proc=16): 5%|▌ | 231/4257 [00:56<14:04, 4.76 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 397\n", - "unterminated string literal (detected at line 1) (, line 1)\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 151\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", + "EEEERRRRRRR 1239\n", + "'Series' object has no attribute 'vfl_club'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▍ | 161/4257 [00:39<18:31, 3.69 examples/s]" + "Map (num_proc=16): 5%|▌ | 233/4257 [00:57<14:57, 4.49 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 889\n", + "'director(s)'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 78\n", + "'year end ranking'\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▍ | 162/4257 [00:39<17:33, 3.89 examples/s]" + "Map (num_proc=16): 6%|▌ | 235/4257 [00:57<14:20, 4.67 examples/s]" ] }, { @@ -3565,24 +12442,20 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▍ | 163/4257 [00:39<16:00, 4.26 examples/s]" + "Map (num_proc=16): 6%|▌ | 236/4257 [00:58<19:18, 3.47 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1542\n", - "'>=' not supported between instances of 'str' and 'int'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] @@ -3591,7 +12464,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▍ | 165/4257 [00:40<14:11, 4.81 examples/s]" + "Map (num_proc=16): 6%|▌ | 238/4257 [00:58<15:03, 4.45 examples/s]" ] }, { @@ -3599,27 +12472,23 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 709\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR'brazil scorers' \n", + "398'str' object is not callable\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▍ | 167/4257 [00:40<16:44, 4.07 examples/s]" + "Map (num_proc=16): 6%|▌ | 239/4257 [00:58<14:07, 4.74 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1066\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "'12-11'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] @@ -3628,15 +12497,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▍ | 168/4257 [00:41<17:53, 3.81 examples/s]" + "Map (num_proc=16): 6%|▌ | 240/4257 [00:59<16:27, 4.07 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n", + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -3645,19 +12515,20 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▍ | 170/4257 [00:41<15:05, 4.51 examples/s]" + "Map (num_proc=16): 6%|▌ | 242/4257 [00:59<11:25, 5.86 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1230\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 552\n", - "Can only use .dt accessor with datetimelike values\n", + "EEEERRRRRRR 237\n", + "'>' not supported between instances of 'str' and 'int'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 312\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -3667,16 +12538,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▍ | 171/4257 [00:42<18:10, 3.75 examples/s]" + "Map (num_proc=16): 6%|▌ | 243/4257 [00:59<19:56, 3.36 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -3684,7 +12552,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▍ | 173/4257 [00:42<13:24, 5.08 examples/s]" + "Map (num_proc=16): 6%|▌ | 244/4257 [01:00<17:06, 3.91 examples/s]" ] }, { @@ -3692,34 +12560,32 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 5\n", - "name 'average_score' is not defined\n", + "EEEERRRRRRR 711\n", + "can't multiply sequence by non-int of type 'float'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▍ | 174/4257 [00:42<14:46, 4.61 examples/s]" + "Map (num_proc=16): 6%|▌ | 245/4257 [01:00<21:36, 3.09 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 888\n", - "The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "EEEERRRRRRR 309\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5unsupported operand type(s) for -: 'str' and 'str'\n", - "\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + " 152\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'EEEERRRRRRR\n", - " 'str' object is not callable397\n", + "EEEERRRRRRR 631\n", + "Can only use .dt accessor with datetimelike values\n", + "'brazil scorers''brazil scorers'\n", + "\n", + "'str' object is not callable'str' object is not callable\n", "\n" ] }, @@ -3727,25 +12593,26 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▍ | 176/4257 [00:42<14:31, 4.68 examples/s]" + "Map (num_proc=16): 6%|▌ | 246/4257 [01:00<20:13, 3.30 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▍ | 177/4257 [00:43<14:40, 4.64 examples/s]" + "Map (num_proc=16): 6%|▌ | 249/4257 [01:01<16:55, 3.95 examples/s]" ] }, { @@ -3753,6 +12620,17 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1545\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1401\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1239\n", + "'location of death'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 553\n", + "'designation'\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -3761,7 +12639,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▍ | 178/4257 [00:43<17:26, 3.90 examples/s]" + "Map (num_proc=16): 6%|▌ | 250/4257 [01:02<28:32, 2.34 examples/s]" ] }, { @@ -3769,15 +12647,16 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 477\n", + "'Timestamp' object has no attribute 'isna'\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▍ | 179/4257 [00:43<15:20, 4.43 examples/s]" + "Map (num_proc=16): 6%|▌ | 251/4257 [01:03<32:29, 2.05 examples/s]" ] }, { @@ -3785,22 +12664,27 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1069\n", + "'no'\n", + "EEEERRRRRRR 78\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▍ | 180/4257 [00:43<13:30, 5.03 examples/s]" + "Map (num_proc=16): 6%|▌ | 252/4257 [01:03<31:40, 2.11 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " 790\n", - "'best row 1'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -3811,16 +12695,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▍ | 181/4257 [00:44<16:17, 4.17 examples/s]" + "Map (num_proc=16): 6%|▌ | 253/4257 [01:03<28:10, 2.37 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 234\n", - "Can only compare identically-labeled Series objects\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -3830,21 +12711,23 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▍ | 182/4257 [00:44<16:47, 4.05 examples/s]" + "Map (num_proc=16): 6%|▌ | 254/4257 [01:04<27:38, 2.41 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▍ | 183/4257 [00:44<17:04, 3.98 examples/s]" + "Map (num_proc=16): 6%|▌ | 255/4257 [01:04<24:40, 2.70 examples/s]" ] }, { @@ -3860,7 +12743,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▍ | 184/4257 [00:44<15:01, 4.52 examples/s]" + "Map (num_proc=16): 6%|▌ | 256/4257 [01:04<22:17, 2.99 examples/s]" ] }, { @@ -3874,47 +12757,55 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▍ | 185/4257 [00:44<14:57, 4.54 examples/s]" + "Map (num_proc=16): 6%|▌ | 257/4257 [01:04<18:30, 3.60 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 631\n", - "invalid literal for int() with base 10: 'w 14'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 312\n", + "single positional indexer is out-of-bounds\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▍ | 186/4257 [00:45<16:32, 4.10 examples/s]" + "Map (num_proc=16): 6%|▌ | 259/4257 [01:05<15:05, 4.42 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▍ | 187/4257 [00:45<15:47, 4.30 examples/s]" + "Map (num_proc=16): 6%|▌ | 260/4257 [01:05<15:57, 4.17 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1542\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", + "EEEERRRRRRR 153\n", + "'int' object has no attribute 'sum'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -3922,7 +12813,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 4%|▍ | 188/4257 [00:45<20:45, 3.27 examples/s]" + "Map (num_proc=16): 6%|▌ | 262/4257 [01:06<21:32, 3.09 examples/s]" ] }, { @@ -3933,80 +12824,112 @@ "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callableGenerating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n" + "'brazil scorers'EEEERRRRRRR\n", + " 1239'str' object is not callable\n", + "'new guinea host 9 vfl game'\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▍ | 192/4257 [00:46<09:14, 7.33 examples/s]" + "Map (num_proc=16): 6%|▌ | 264/4257 [01:06<15:40, 4.24 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 5%|▍ | 194/4257 [00:46<15:34, 4.35 examples/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 889\n", - "'director(s)'\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▍ | 195/4257 [00:47<15:46, 4.29 examples/s]" + "Map (num_proc=16): 6%|▋ | 267/4257 [01:07<12:56, 5.14 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 792\n", + "Cannot perform 'rand_' with a dtyped [int64] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 6\n", + "Can only use .dt accessor with datetimelike values\n", + "'brazil scorers'EEEERRRRRRR\n", + " 'str' object is not callable398\n", + "\n", + "single positional indexer is out-of-bounds" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▍ | 197/4257 [00:47<11:54, 5.68 examples/s]" + "Map (num_proc=16): 6%|▋ | 268/4257 [01:07<14:45, 4.51 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 889\n", + "unterminated string literal (detected at line 1) (, line 1)\n", + "EEEERRRRRRR 78\n", + "'Australian open'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 477\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 711\n", + "ufunc 'less_equal' did not contain a loop with signature matching types (, ) -> None\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 237\n", + "EEEERRRRRRR'2008-09 Real Madrid CF season' \n", + "1402\n", + "'loss'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 553\n", + "'designation'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1546\n", + "'lap-by-lap'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1070\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 631\n", + "invalid literal for int() with base 10: 'w'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▍ | 198/4257 [00:47<12:56, 5.23 examples/s]" + "Map (num_proc=16): 6%|▋ | 269/4257 [01:09<42:10, 1.58 examples/s]" ] }, { @@ -4015,15 +12938,14 @@ "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▍ | 200/4257 [00:47<12:01, 5.62 examples/s]" + "Map (num_proc=16): 6%|▋ | 270/4257 [01:09<34:39, 1.92 examples/s]" ] }, { @@ -4037,7 +12959,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▍ | 201/4257 [00:48<14:05, 4.80 examples/s]" + "Map (num_proc=16): 6%|▋ | 271/4257 [01:10<41:44, 1.59 examples/s]" ] }, { @@ -4053,79 +12975,45 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▍ | 202/4257 [00:48<12:26, 5.44 examples/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 5%|▍ | 204/4257 [00:48<12:59, 5.20 examples/s]" + "Map (num_proc=16): 6%|▋ | 272/4257 [01:11<38:52, 1.71 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 78\n", - "'grand slam tournaments'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 790\n", - "'best row 1'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 477\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▍ | 205/4257 [00:49<15:16, 4.42 examples/s]" + "Map (num_proc=16): 6%|▋ | 273/4257 [01:11<31:10, 2.13 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 6\n", - "closing parenthesis ']' does not match opening parenthesis '(' (, line 1)\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 151\n", - "unterminated string literal (detected at line 1) (, line 1)\n", - "EEEERRRRRRR 397\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "EEEERRRRRRRGenerating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - " 631\n", - "'score'\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1398\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▍ | 207/4257 [00:50<24:55, 2.71 examples/s]" + "Map (num_proc=16): 6%|▋ | 276/4257 [01:11<16:05, 4.12 examples/s]" ] }, { @@ -4133,31 +13021,21 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 552\n", - "Can only use .dt accessor with datetimelike values\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1068\n", - "unterminated string literal (detected at line 1) (, line 1)\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▍ | 208/4257 [00:51<30:36, 2.21 examples/s]" + "Map (num_proc=16): 7%|▋ | 277/4257 [01:11<16:46, 3.96 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -4167,21 +13045,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▍ | 211/4257 [00:51<23:09, 2.91 examples/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 5%|▍ | 212/4257 [00:51<21:45, 3.10 examples/s]" + "Map (num_proc=16): 7%|▋ | 278/4257 [01:12<16:07, 4.11 examples/s]" ] }, { @@ -4189,8 +13053,6 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 310\n", - "'minnesota'\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -4199,7 +13061,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▌ | 213/4257 [00:52<18:47, 3.59 examples/s]" + "Map (num_proc=16): 7%|▋ | 280/4257 [01:12<11:06, 5.97 examples/s]" ] }, { @@ -4208,16 +13070,17 @@ "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 711\n", - "unterminated string literal (detected at line 1) (, line 1)\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▌ | 214/4257 [00:52<18:51, 3.57 examples/s]" + "Map (num_proc=16): 7%|▋ | 282/4257 [01:12<10:21, 6.39 examples/s]" ] }, { @@ -4225,49 +13088,52 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1240\n", + "'samba / young hearts run free'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▌ | 215/4257 [00:52<16:05, 4.19 examples/s]" + "Map (num_proc=16): 7%|▋ | 283/4257 [01:13<16:49, 3.94 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 312\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 78\n", - "'win - loss'\n", - "EEEERRRRRRR 235\n", - "'merja rantanen'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 889\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "EEEERRRRRRR 711\n", + "single positional indexer is out-of-bounds\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 1073\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 157\n", + "name 'datetime' is not defined\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▌ | 217/4257 [00:53<22:23, 3.01 examples/s]" + "Map (num_proc=16): 7%|▋ | 285/4257 [01:13<19:41, 3.36 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -4277,25 +13143,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▌ | 218/4257 [00:53<19:34, 3.44 examples/s]" + "Map (num_proc=16): 7%|▋ | 286/4257 [01:14<18:16, 3.62 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 791\n", - "Can only use .dt accessor with datetimelike values\n", - "EEEERRRRRRR 151\n", - "'no'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1239\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "EEEERRRRRRR 477\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -4303,23 +13157,28 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▌ | 219/4257 [00:54<29:07, 2.31 examples/s]" + "Map (num_proc=16): 7%|▋ | 287/4257 [01:14<15:50, 4.18 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 632\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", + "EEEERRRRRRR 'brazil scorers'6\n", + "\n", + "'str' object is not callableCan only use .dt accessor with datetimelike values\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▌ | 220/4257 [00:54<23:53, 2.82 examples/s]" + "Map (num_proc=16): 7%|▋ | 288/4257 [01:14<17:31, 3.77 examples/s]" ] }, { @@ -4327,9 +13186,11 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1543\n", - "'McLaren M23'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1546\n", + "\"['lap-by-lap'] not in index\"\n", + "EEEERRRRRRR 479\n", + "invalid literal for int() with base 10: 'w 96'\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -4338,54 +13199,64 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▌ | 221/4257 [00:55<26:02, 2.58 examples/s]" + "Map (num_proc=16): 7%|▋ | 289/4257 [01:14<18:23, 3.60 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5EEEERRRRRRR\n", + " 237\n", + "'>=' not supported between instances of 'str' and 'int'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 553\n", + "'designation'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "'str' object is not callable\n", + "EEEERRRRRRR" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▌ | 224/4257 [00:55<16:51, 3.99 examples/s]" + "Map (num_proc=16): 7%|▋ | 290/4257 [01:16<36:46, 1.80 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + " 890\n", + "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 793\n", + "unmatched ']' (, line 1)\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1405\n", + "no units specified\n", + "EEEERRRRRRR 78\n", + "invalid syntax (, line 0)\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▌ | 225/4257 [00:55<16:09, 4.16 examples/s]" + "Map (num_proc=16): 7%|▋ | 291/4257 [01:16<42:47, 1.54 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1069\n", - "'no'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -4395,24 +13266,23 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▌ | 226/4257 [00:55<16:20, 4.11 examples/s]" + "Map (num_proc=16): 7%|▋ | 292/4257 [01:17<33:34, 1.97 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▌ | 228/4257 [00:56<13:50, 4.85 examples/s]" + "Map (num_proc=16): 7%|▋ | 293/4257 [01:17<28:24, 2.33 examples/s]" ] }, { @@ -4423,9 +13293,6 @@ "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 553\n", - "'designation'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -4434,7 +13301,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▌ | 230/4257 [00:56<13:52, 4.84 examples/s]" + "Map (num_proc=16): 7%|▋ | 295/4257 [01:17<21:15, 3.11 examples/s]" ] }, { @@ -4442,15 +13309,14 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 6\n", - "Can only use .dt accessor with datetimelike values\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▌ | 231/4257 [00:56<14:04, 4.76 examples/s]" + "Map (num_proc=16): 7%|▋ | 297/4257 [01:18<19:34, 3.37 examples/s]" ] }, { @@ -4458,10 +13324,8 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n", - "EEEERRRRRRR 1239\n", - "'Series' object has no attribute 'vfl_club'\n", + "EEEERRRRRRR 634\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -4469,36 +13333,29 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 5%|▌ | 233/4257 [00:57<14:57, 4.49 examples/s]" + "Map (num_proc=16): 7%|▋ | 298/4257 [01:18<21:22, 3.09 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 889\n", - "'director(s)'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 78\n", - "'year end ranking'\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▌ | 235/4257 [00:57<14:20, 4.67 examples/s]" + "Map (num_proc=16): 7%|▋ | 299/4257 [01:19<22:01, 3.00 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -4506,7 +13363,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▌ | 236/4257 [00:58<19:18, 3.47 examples/s]" + "Map (num_proc=16): 7%|▋ | 300/4257 [01:19<22:34, 2.92 examples/s]" ] }, { @@ -4514,14 +13371,22 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 398\n", + "'Rattlers'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▌ | 238/4257 [00:58<15:03, 4.45 examples/s]" + "Map (num_proc=16): 7%|▋ | 303/4257 [01:19<15:27, 4.26 examples/s]" ] }, { @@ -4529,40 +13394,39 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR'brazil scorers' \n", - "398'str' object is not callable\n", - "\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▌ | 239/4257 [00:58<14:07, 4.74 examples/s]" + "Map (num_proc=16): 7%|▋ | 304/4257 [01:20<15:14, 4.32 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'12-11'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▌ | 240/4257 [00:59<16:27, 4.07 examples/s]" + "Map (num_proc=16): 7%|▋ | 305/4257 [01:20<16:22, 4.02 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", + "EEEERRRRRRR 712\n", + "single positional indexer is out-of-bounds\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -4572,7 +13436,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▌ | 242/4257 [00:59<11:25, 5.86 examples/s]" + "Map (num_proc=16): 7%|▋ | 307/4257 [01:20<11:25, 5.76 examples/s]" ] }, { @@ -4581,11 +13445,12 @@ "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 237\n", - "'>' not supported between instances of 'str' and 'int'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 312\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 1240\n", + "'samba / young hearts run free'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 314\n", + "'retired'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -4595,21 +13460,23 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▌ | 243/4257 [00:59<19:56, 3.36 examples/s]" + "Map (num_proc=16): 7%|▋ | 308/4257 [01:21<19:48, 3.32 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▌ | 244/4257 [01:00<17:06, 3.91 examples/s]" + "Map (num_proc=16): 7%|▋ | 309/4257 [01:21<18:55, 3.48 examples/s]" ] }, { @@ -4617,77 +13484,68 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 711\n", - "can't multiply sequence by non-int of type 'float'\n", + "EEEERRRRRRR 157\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR" + "EEEERRRRRRR 1549\n", + "'year'\n", + "EEEERRRRRRR 479\n", + "invalid literal for int() with base 10: 'w 96'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▌ | 245/4257 [01:00<21:36, 3.09 examples/s]" + "Map (num_proc=16): 7%|▋ | 310/4257 [01:22<24:23, 2.70 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " 152\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 631\n", - "Can only use .dt accessor with datetimelike values\n", - "'brazil scorers''brazil scorers'\n", - "\n", - "'str' object is not callable'str' object is not callable\n", - "\n" + "EEEERRRRRRR 1075\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▌ | 246/4257 [01:00<20:13, 3.30 examples/s]" + "Map (num_proc=16): 7%|▋ | 311/4257 [01:22<24:14, 2.71 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▌ | 249/4257 [01:01<16:55, 3.95 examples/s]" + "Map (num_proc=16): 7%|▋ | 312/4257 [01:22<22:37, 2.91 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1545\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1401\n", + "EEEERRRRRRR 793\n", "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1239\n", - "'location of death'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "EEEERRRRRRR 553\n", "'designation'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -4696,45 +13554,49 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▌ | 250/4257 [01:02<28:32, 2.34 examples/s]" + "Map (num_proc=16): 7%|▋ | 313/4257 [01:23<26:32, 2.48 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers''brazil scorers'\n", + "\n", + "'str' object is not callable'str' object is not callable\n", + "\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 477\n", - "'Timestamp' object has no attribute 'isna'\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▌ | 251/4257 [01:03<32:29, 2.05 examples/s]" + "Map (num_proc=16): 7%|▋ | 316/4257 [01:23<16:49, 3.90 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 6\n", + "'str' object has no attribute 'str'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1069\n", - "'no'\n", - "EEEERRRRRRR 78\n", + "EEEERRRRRRR 1405\n", "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▌ | 252/4257 [01:03<31:40, 2.11 examples/s]" + "Map (num_proc=16): 7%|▋ | 317/4257 [01:24<24:31, 2.68 examples/s]" ] }, { @@ -4742,17 +13604,14 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▌ | 253/4257 [01:03<28:10, 2.37 examples/s]" + "Map (num_proc=16): 7%|▋ | 319/4257 [01:24<19:29, 3.37 examples/s]" ] }, { @@ -4768,7 +13627,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▌ | 254/4257 [01:04<27:38, 2.41 examples/s]" + "Map (num_proc=16): 8%|▊ | 320/4257 [01:24<16:49, 3.90 examples/s]" ] }, { @@ -4784,47 +13643,52 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▌ | 255/4257 [01:04<24:40, 2.70 examples/s]" + "Map (num_proc=16): 8%|▊ | 321/4257 [01:25<16:56, 3.87 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 892\n", + "invalid literal for int() with base 10: '68 + 68 + 71 = 207'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 314\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▌ | 256/4257 [01:04<22:17, 2.99 examples/s]" + "Map (num_proc=16): 8%|▊ | 322/4257 [01:25<19:08, 3.43 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 78\n", + "'>=' not supported between instances of 'str' and 'int'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▌ | 257/4257 [01:04<18:30, 3.60 examples/s]" + "Map (num_proc=16): 8%|▊ | 323/4257 [01:25<19:58, 3.28 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 312\n", - "single positional indexer is out-of-bounds\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -4834,7 +13698,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▌ | 259/4257 [01:05<15:05, 4.42 examples/s]" + "Map (num_proc=16): 8%|▊ | 324/4257 [01:26<17:45, 3.69 examples/s]" ] }, { @@ -4850,19 +13714,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▌ | 260/4257 [01:05<15:57, 4.17 examples/s]" + "Map (num_proc=16): 8%|▊ | 325/4257 [01:26<17:08, 3.82 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n", - "EEEERRRRRRR 153\n", - "'int' object has no attribute 'sum'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -4870,41 +13728,30 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▌ | 262/4257 [01:06<21:32, 3.09 examples/s]" + "Map (num_proc=16): 8%|▊ | 326/4257 [01:26<16:19, 4.01 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'EEEERRRRRRR\n", - " 1239'str' object is not callable\n", - "'new guinea host 9 vfl game'\n" + "EEEERRRRRRR 237\n", + "'ends row'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▌ | 264/4257 [01:06<15:40, 4.24 examples/s]" + "Map (num_proc=16): 8%|▊ | 327/4257 [01:26<19:23, 3.38 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n", - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -4914,69 +13761,38 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▋ | 267/4257 [01:07<12:56, 5.14 examples/s]" + "Map (num_proc=16): 8%|▊ | 328/4257 [01:27<17:26, 3.75 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 792\n", - "Cannot perform 'rand_' with a dtyped [int64] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 6\n", - "Can only use .dt accessor with datetimelike values\n", - "'brazil scorers'EEEERRRRRRR\n", - " 'str' object is not callable398\n", - "\n", - "single positional indexer is out-of-bounds" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▋ | 268/4257 [01:07<14:45, 4.51 examples/s]" + "Map (num_proc=16): 8%|▊ | 330/4257 [01:27<13:15, 4.94 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 889\n", - "unterminated string literal (detected at line 1) (, line 1)\n", - "EEEERRRRRRR 78\n", - "'Australian open'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 477\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "EEEERRRRRRR 711\n", - "ufunc 'less_equal' did not contain a loop with signature matching types (, ) -> None\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 237\n", - "EEEERRRRRRR'2008-09 Real Madrid CF season' \n", - "1402\n", - "'loss'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 634\n", + "'<' not supported between instances of 'str' and 'int'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 553\n", - "'designation'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1546\n", - "'lap-by-lap'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1070\n", + "EEEERRRRRRR 712\n", "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 631\n", - "invalid literal for int() with base 10: 'w'\n", + "EEEERRRRRRR 399\n", + "single positional indexer is out-of-bounds\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -4986,29 +13802,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▋ | 269/4257 [01:09<42:10, 1.58 examples/s]" + "Map (num_proc=16): 8%|▊ | 332/4257 [01:28<22:19, 2.93 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 6%|▋ | 270/4257 [01:09<34:39, 1.92 examples/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -5016,29 +13819,18 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▋ | 271/4257 [01:10<41:44, 1.59 examples/s]" + "Map (num_proc=16): 8%|▊ | 334/4257 [01:28<17:41, 3.69 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 6%|▋ | 272/4257 [01:11<38:52, 1.71 examples/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "'str' object is not callable\n", + "EEEERRRRRRR 157\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -5048,19 +13840,21 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▋ | 273/4257 [01:11<31:10, 2.13 examples/s]" + "Map (num_proc=16): 8%|▊ | 336/4257 [01:28<12:58, 5.04 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1243\n", + "The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()\n", + "EEEERRRRRRR EEEERRRRRRR1077 \n", + "554The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "\n", + "'club team'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -5070,13 +13864,15 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 6%|▋ | 276/4257 [01:11<16:05, 4.12 examples/s]" + "Map (num_proc=16): 8%|▊ | 337/4257 [01:29<15:47, 4.14 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -5086,39 +13882,38 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 277/4257 [01:11<16:46, 3.96 examples/s]" + "Map (num_proc=16): 8%|▊ | 338/4257 [01:29<18:15, 3.58 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 278/4257 [01:12<16:07, 4.11 examples/s]" + "Map (num_proc=16): 8%|▊ | 340/4257 [01:30<16:58, 3.85 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 280/4257 [01:12<11:06, 5.97 examples/s]" + "Map (num_proc=16): 8%|▊ | 341/4257 [01:30<17:44, 3.68 examples/s]" ] }, { @@ -5126,10 +13921,10 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1550\n", + "'best row 1'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n", - "'brazil scorers'\n", "'str' object is not callable\n" ] }, @@ -5137,17 +13932,19 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 282/4257 [01:12<10:21, 6.39 examples/s]" + "Map (num_proc=16): 8%|▊ | 342/4257 [01:31<23:58, 2.72 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 237\n", + "'>=' not supported between instances of 'str' and 'int'\n", + "EEEERRRRRRR 1407\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1240\n", - "'samba / young hearts run free'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -5155,41 +13952,43 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 283/4257 [01:13<16:49, 3.94 examples/s]" + "Map (num_proc=16): 8%|▊ | 343/4257 [01:31<27:32, 2.37 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 312\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 479\n", + "invalid literal for int() with base 10: 'w 96'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", + "EEEERRRRRRR 712\n", + "single positional indexer is out-of-bounds\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 711\n", - "single positional indexer is out-of-bounds\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1073\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "EEEERRRRRRR 157\n", - "name 'datetime' is not defined\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 285/4257 [01:13<19:41, 3.36 examples/s]" + "Map (num_proc=16): 8%|▊ | 345/4257 [01:32<21:48, 2.99 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "\n", + "'brazil scorers'\n", + "'str' object is not callable\n", + "'brazil scorers'Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -5200,7 +13999,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 286/4257 [01:14<18:16, 3.62 examples/s]" + "Map (num_proc=16): 8%|▊ | 349/4257 [01:32<13:53, 4.69 examples/s]" ] }, { @@ -5214,28 +14013,24 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 287/4257 [01:14<15:50, 4.18 examples/s]" + "Map (num_proc=16): 8%|▊ | 350/4257 [01:32<13:45, 4.73 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 632\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n", - "EEEERRRRRRR 'brazil scorers'6\n", - "\n", - "'str' object is not callableCan only use .dt accessor with datetimelike values\n", - "\n" + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 288/4257 [01:14<17:31, 3.77 examples/s]" + "Map (num_proc=16): 8%|▊ | 352/4257 [01:33<12:40, 5.13 examples/s]" ] }, { @@ -5243,11 +14038,6 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1546\n", - "\"['lap-by-lap'] not in index\"\n", - "EEEERRRRRRR 479\n", - "invalid literal for int() with base 10: 'w 96'\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -5256,64 +14046,55 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 289/4257 [01:14<18:23, 3.60 examples/s]" + "Map (num_proc=16): 8%|▊ | 353/4257 [01:33<12:27, 5.23 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5EEEERRRRRRR\n", - " 237\n", - "'>=' not supported between instances of 'str' and 'int'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 553\n", - "'designation'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n", - "EEEERRRRRRR" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 290/4257 [01:16<36:46, 1.80 examples/s]" + "Map (num_proc=16): 8%|▊ | 355/4257 [01:33<11:56, 5.45 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " 890\n", - "Can only use .dt accessor with datetimelike values\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 793\n", - "unmatched ']' (, line 1)\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1405\n", - "no units specified\n", - "EEEERRRRRRR 78\n", - "invalid syntax (, line 0)\n", + "EEEERRRRRRR 634\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable'brazil scorers'\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 291/4257 [01:16<42:47, 1.54 examples/s]" + "Map (num_proc=16): 8%|▊ | 356/4257 [01:34<14:29, 4.49 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 554\n", + "'club team'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -5323,48 +14104,56 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 292/4257 [01:17<33:34, 1.97 examples/s]" + "Map (num_proc=16): 8%|▊ | 358/4257 [01:34<14:20, 4.53 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 293/4257 [01:17<28:24, 2.33 examples/s]" + "Map (num_proc=16): 8%|▊ | 361/4257 [01:34<09:07, 7.11 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 793\n", + "0\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'EEEERRRRRRR\n", + " 'str' object is not callable1077\n", + "\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()." ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 295/4257 [01:17<21:15, 3.11 examples/s]" + "Map (num_proc=16): 9%|▊ | 363/4257 [01:35<14:13, 4.56 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "\n", + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] @@ -5373,7 +14162,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 297/4257 [01:18<19:34, 3.37 examples/s]" + "Map (num_proc=16): 9%|▊ | 366/4257 [01:35<12:11, 5.32 examples/s]" ] }, { @@ -5381,8 +14170,6 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 634\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -5390,29 +14177,17 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 298/4257 [01:18<21:22, 3.09 examples/s]" + "Map (num_proc=16): 9%|▊ | 368/4257 [01:36<12:03, 5.38 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 7%|▋ | 299/4257 [01:19<22:01, 3.00 examples/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -5420,20 +14195,17 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 300/4257 [01:19<22:34, 2.92 examples/s]" + "Map (num_proc=16): 9%|▊ | 371/4257 [01:36<11:55, 5.43 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 398\n", - "'Rattlers'\n", + "EEEERRRRRRR 1407\n", + "unterminated string literal (detected at line 1) (, line 1)\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -5443,7 +14215,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 303/4257 [01:19<15:27, 4.26 examples/s]" + "Map (num_proc=16): 9%|▉ | 373/4257 [01:37<12:07, 5.34 examples/s]" ] }, { @@ -5451,104 +14223,88 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 78\n", + "'year end ranking'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 304/4257 [01:20<15:14, 4.32 examples/s]" + "Map (num_proc=16): 9%|▉ | 374/4257 [01:37<15:03, 4.30 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 305/4257 [01:20<16:22, 4.02 examples/s]" + "Map (num_proc=16): 9%|▉ | 375/4257 [01:37<14:26, 4.48 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 712\n", - "single positional indexer is out-of-bounds\n", + "EEEERRRRRRR 479\n", + "invalid literal for int() with base 10: 'w 96'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 307/4257 [01:20<11:25, 5.76 examples/s]" + "Map (num_proc=16): 9%|▉ | 380/4257 [01:38<09:18, 6.94 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1240\n", - "'samba / young hearts run free'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 314\n", - "'retired'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 308/4257 [01:21<19:48, 3.32 examples/s]" + "Map (num_proc=16): 9%|▉ | 381/4257 [01:38<11:09, 5.79 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 309/4257 [01:21<18:55, 3.48 examples/s]" + "Map (num_proc=16): 9%|▉ | 382/4257 [01:38<10:30, 6.14 examples/s]" ] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 157\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1549\n", - "'year'\n", - "EEEERRRRRRR 479\n", - "invalid literal for int() with base 10: 'w 96'\n", + "name": "stdout", + "output_type": "stream", + "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 554\n", + "'team'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -5556,7 +14312,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 310/4257 [01:22<24:23, 2.70 examples/s]" + "Map (num_proc=16): 9%|▉ | 383/4257 [01:39<12:24, 5.20 examples/s]" ] }, { @@ -5564,15 +14320,19 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1075\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n" + "EEEERRRRRRR 157\n", + "The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 634\n", + "could not convert string to float: '17.20 (122)'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 311/4257 [01:22<24:14, 2.71 examples/s]" + "Map (num_proc=16): 9%|▉ | 384/4257 [01:39<15:58, 4.04 examples/s]" ] }, { @@ -5580,72 +14340,60 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 315\n", + "Can only use .dt accessor with datetimelike values\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 312/4257 [01:22<22:37, 2.91 examples/s]" + "Map (num_proc=16): 9%|▉ | 385/4257 [01:39<19:16, 3.35 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 793\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 553\n", - "'designation'\n", + "EEEERRRRRRR 8\n", + "The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 313/4257 [01:23<26:32, 2.48 examples/s]" + "Map (num_proc=16): 9%|▉ | 386/4257 [01:40<19:07, 3.37 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers''brazil scorers'\n", - "\n", - "'str' object is not callable'str' object is not callable\n", - "\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 895\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 316/4257 [01:23<16:49, 3.90 examples/s]" + "Map (num_proc=16): 9%|▉ | 387/4257 [01:40<19:13, 3.36 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 6\n", - "'str' object has no attribute 'str'\n", + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1405\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -5653,7 +14401,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 317/4257 [01:24<24:31, 2.68 examples/s]" + "Map (num_proc=16): 9%|▉ | 390/4257 [01:41<15:26, 4.17 examples/s]" ] }, { @@ -5661,20 +14409,27 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 1245\n", + "invalid literal for int() with base 10: ' 3 ot'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 713\n", + "'no'\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 7%|▋ | 319/4257 [01:24<19:29, 3.37 examples/s]" + "Map (num_proc=16): 9%|▉ | 391/4257 [01:41<16:52, 3.82 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -5684,13 +14439,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 320/4257 [01:24<16:49, 3.90 examples/s]" + "Map (num_proc=16): 9%|▉ | 392/4257 [01:41<17:25, 3.70 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -5700,46 +14458,38 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 321/4257 [01:25<16:56, 3.87 examples/s]" + "Map (num_proc=16): 9%|▉ | 394/4257 [01:42<13:58, 4.61 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 892\n", - "invalid literal for int() with base 10: '68 + 68 + 71 = 207'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 314\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 322/4257 [01:25<19:08, 3.43 examples/s]" + "Map (num_proc=16): 9%|▉ | 395/4257 [01:42<13:06, 4.91 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 78\n", - "'>=' not supported between instances of 'str' and 'int'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 1554Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", + "\"'rating'\"\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 323/4257 [01:25<19:58, 3.28 examples/s]" + "Map (num_proc=16): 9%|▉ | 396/4257 [01:42<17:12, 3.74 examples/s]" ] }, { @@ -5748,44 +14498,56 @@ "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR'str' object is not callable 794\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 324/4257 [01:26<17:45, 3.69 examples/s]" + "Map (num_proc=16): 9%|▉ | 397/4257 [01:43<23:56, 2.69 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "unsupported operand type(s) for -: 'str' and 'str'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 402\n", + "'best row 1'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR EEEERRRRRRR554 \n", + "238'DataFrame' object has no attribute 'college'\n", + "\n", + "() got an unexpected keyword argument 'axis'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 325/4257 [01:26<17:08, 3.82 examples/s]" + "Map (num_proc=16): 9%|▉ | 398/4257 [01:43<23:35, 2.73 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 326/4257 [01:26<16:19, 4.01 examples/s]" + "Map (num_proc=16): 9%|▉ | 399/4257 [01:43<20:21, 3.16 examples/s]" ] }, { @@ -5793,23 +14555,28 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 237\n", - "'ends row'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 327/4257 [01:26<19:23, 3.38 examples/s]" + "Map (num_proc=16): 9%|▉ | 401/4257 [01:44<16:29, 3.90 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 479\n", + "'location'\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -5818,7 +14585,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 328/4257 [01:27<17:26, 3.75 examples/s]" + "Map (num_proc=16): 9%|▉ | 403/4257 [01:44<13:27, 4.78 examples/s]" ] }, { @@ -5826,6 +14593,9 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 9\n", + "'attendance'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -5833,23 +14603,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 330/4257 [01:27<13:15, 4.94 examples/s]" + "Map (num_proc=16): 9%|▉ | 404/4257 [01:45<20:29, 3.13 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 634\n", - "'<' not supported between instances of 'str' and 'int'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 712\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 399\n", - "single positional indexer is out-of-bounds\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -5859,16 +14619,17 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 332/4257 [01:28<22:19, 2.93 examples/s]" + "Map (num_proc=16): 10%|▉ | 405/4257 [01:45<21:48, 2.94 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 78\n", + "unterminated string literal (detected at line 1) (, line 1)\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -5876,18 +14637,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 334/4257 [01:28<17:41, 3.69 examples/s]" + "Map (num_proc=16): 10%|▉ | 407/4257 [01:46<17:57, 3.57 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n", - "EEEERRRRRRR 157\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -5897,7 +14656,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 336/4257 [01:28<12:58, 5.04 examples/s]" + "Map (num_proc=16): 10%|▉ | 409/4257 [01:46<14:44, 4.35 examples/s]" ] }, { @@ -5906,12 +14665,11 @@ "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1243\n", - "The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()\n", - "EEEERRRRRRR EEEERRRRRRR1077 \n", - "554The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "\n", - "'club team'\n", + "EEEERRRRRRR 1554\n", + "could not convert string to float: 'viewers'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 713\n", + "'[7, 8] not in index'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -5921,48 +14679,55 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 337/4257 [01:29<15:47, 4.14 examples/s]" + "Map (num_proc=16): 10%|▉ | 411/4257 [01:46<16:45, 3.83 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "'brazil scorers''brazil scorers'\n", + "\n", + "'str' object is not callable'str' object is not callable\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 338/4257 [01:29<18:15, 3.58 examples/s]" + "Map (num_proc=16): 10%|▉ | 412/4257 [01:47<17:55, 3.57 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5EEEERRRRRRR\n", + " 1407\n", + "'no'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 340/4257 [01:30<16:58, 3.85 examples/s]" + "Map (num_proc=16): 10%|▉ | 415/4257 [01:47<13:27, 4.76 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5'str' object is not callable\n", + "\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -5970,7 +14735,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 341/4257 [01:30<17:44, 3.68 examples/s]" + "Map (num_proc=16): 10%|▉ | 417/4257 [01:47<12:00, 5.33 examples/s]" ] }, { @@ -5978,9 +14743,8 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1550\n", + "EEEERRRRRRR 402\n", "'best row 1'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -5989,19 +14753,20 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 342/4257 [01:31<23:58, 2.72 examples/s]" + "Map (num_proc=16): 10%|▉ | 418/4257 [01:48<11:24, 5.61 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 237\n", - "'>=' not supported between instances of 'str' and 'int'\n", - "EEEERRRRRRR 1407\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1081\n", + "'retired'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 9\n", + "'location'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -6009,60 +14774,55 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 343/4257 [01:31<27:32, 2.37 examples/s]" + "Map (num_proc=16): 10%|▉ | 419/4257 [01:49<22:12, 2.88 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 479\n", - "invalid literal for int() with base 10: 'w 96'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 712\n", - "single positional indexer is out-of-bounds\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable" + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 345/4257 [01:32<21:48, 2.99 examples/s]" + "Map (num_proc=16): 10%|▉ | 420/4257 [01:49<19:40, 3.25 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n", - "'brazil scorers'\n", - "'str' object is not callable\n", - "'brazil scorers'Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n", - "'str' object is not callable\n", + "EEEERRRRRRR 479\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 896\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 159\n", + "Can only use .dt accessor with datetimelike values'brazil scorers'\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 349/4257 [01:32<13:53, 4.69 examples/s]" + "Map (num_proc=16): 10%|▉ | 421/4257 [01:49<21:39, 2.95 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -6070,16 +14830,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 350/4257 [01:32<13:45, 4.73 examples/s]" + "Map (num_proc=16): 10%|▉ | 423/4257 [01:49<15:14, 4.19 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -6087,13 +14844,19 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 352/4257 [01:33<12:40, 5.13 examples/s]" + "Map (num_proc=16): 10%|▉ | 424/4257 [01:50<17:13, 3.71 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1245\n", + "invalid literal for int() with base 10: ' 3 ot'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 636\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -6103,24 +14866,34 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 353/4257 [01:33<12:27, 5.23 examples/s]" + "Map (num_proc=16): 10%|▉ | 425/4257 [01:51<25:23, 2.51 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", + "EEEERRRRRRR 238\n", + "unterminated string literal (detected at line 1) (, line 1)\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 794\n", + "unsupported operand type(s) for -: 'str' and 'str'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1554\n", + "'>' not supported between instances of 'str' and 'float'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 'brazil scorers'555\n", + "\n", + "'str' object is not callable'name'\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 355/4257 [01:33<11:56, 5.45 examples/s]" + "Map (num_proc=16): 10%|█ | 426/4257 [01:51<29:01, 2.20 examples/s]" ] }, { @@ -6128,98 +14901,92 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 634\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable'brazil scorers'\n", - "\n" + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 356/4257 [01:34<14:29, 4.49 examples/s]" + "Map (num_proc=16): 10%|█ | 427/4257 [01:52<31:39, 2.02 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 554\n", - "'club team'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 'brazil scorers'402\n", + "\n", + "'str' object is not callable\"['best row 1'] not in index\"\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 358/4257 [01:34<14:20, 4.53 examples/s]" + "Map (num_proc=16): 10%|█ | 428/4257 [01:52<30:34, 2.09 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 8%|▊ | 361/4257 [01:34<09:07, 7.11 examples/s]" + "Map (num_proc=16): 10%|█ | 429/4257 [01:53<30:10, 2.11 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 793\n", - "0\n", + "EEEERRRRRRR 315\n", + "invalid syntax (, line 0)\n", + "EEEERRRRRRR 1082\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 713\n", + "'no'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'EEEERRRRRRR\n", - " 'str' object is not callable1077\n", - "\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()." + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▊ | 363/4257 [01:35<14:13, 4.56 examples/s]" + "Map (num_proc=16): 10%|█ | 430/4257 [01:53<32:06, 1.99 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n", - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▊ | 366/4257 [01:35<12:11, 5.32 examples/s]" + "Map (num_proc=16): 10%|█ | 431/4257 [01:53<27:00, 2.36 examples/s]" ] }, { @@ -6227,32 +14994,37 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▊ | 368/4257 [01:36<12:03, 5.38 examples/s]" + "Map (num_proc=16): 10%|█ | 432/4257 [01:54<26:03, 2.45 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 898\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 79\n", + "list index out of range\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▊ | 371/4257 [01:36<11:55, 5.43 examples/s]" + "Map (num_proc=16): 10%|█ | 433/4257 [01:54<25:50, 2.47 examples/s]" ] }, { @@ -6260,9 +15032,8 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1407\n", - "unterminated string literal (detected at line 1) (, line 1)\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -6272,7 +15043,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▉ | 373/4257 [01:37<12:07, 5.34 examples/s]" + "Map (num_proc=16): 10%|█ | 435/4257 [01:55<21:48, 2.92 examples/s]" ] }, { @@ -6280,16 +15051,19 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 78\n", - "'year end ranking'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▉ | 374/4257 [01:37<15:03, 4.30 examples/s]" + "Map (num_proc=16): 10%|█ | 438/4257 [01:55<12:45, 4.99 examples/s]" ] }, { @@ -6303,85 +15077,91 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▉ | 375/4257 [01:37<14:26, 4.48 examples/s]" + "Map (num_proc=16): 10%|█ | 439/4257 [01:55<12:00, 5.30 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 479\n", - "invalid literal for int() with base 10: 'w 96'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▉ | 380/4257 [01:38<09:18, 6.94 examples/s]" + "Map (num_proc=16): 10%|█ | 440/4257 [01:55<13:30, 4.71 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1407\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▉ | 381/4257 [01:38<11:09, 5.79 examples/s]" + "Map (num_proc=16): 10%|█ | 441/4257 [01:56<16:57, 3.75 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 159\n", + "can only concatenate str (not \"Timedelta\") to str\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▉ | 382/4257 [01:38<10:30, 6.14 examples/s]" + "Map (num_proc=16): 10%|█ | 442/4257 [01:56<19:01, 3.34 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 636\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 795\n", + "unterminated string literal (detected at line 1) (, line 1)\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 554\n", - "'team'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▉ | 383/4257 [01:39<12:24, 5.20 examples/s]" + "Map (num_proc=16): 10%|█ | 443/4257 [01:57<21:08, 3.01 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 157\n", - "The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 634\n", - "could not convert string to float: '17.20 (122)'\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -6389,7 +15169,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▉ | 384/4257 [01:39<15:58, 4.04 examples/s]" + "Map (num_proc=16): 10%|█ | 445/4257 [01:57<13:47, 4.61 examples/s]" ] }, { @@ -6397,33 +15177,40 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 315\n", - "Can only use .dt accessor with datetimelike values\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▉ | 385/4257 [01:39<19:16, 3.35 examples/s]" + "Map (num_proc=16): 11%|█ | 447/4257 [01:57<13:01, 4.87 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 8\n", - "The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 1246\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 9\n", + "'location'\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▉ | 386/4257 [01:40<19:07, 3.37 examples/s]" + "Map (num_proc=16): 11%|█ | 448/4257 [01:58<17:29, 3.63 examples/s]" ] }, { @@ -6431,34 +15218,48 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 895\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n" + "EEEERRRRRRR 1554\n", + "'>=' not supported between instances of 'str' and 'int'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 713\n", + "name 'datetime' is not defined\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▉ | 387/4257 [01:40<19:13, 3.36 examples/s]" + "Map (num_proc=16): 11%|█ | 449/4257 [01:58<19:16, 3.29 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 79\n", + "invalid literal for int() with base 10: 'loss'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 402\n", + "'best row 1'\n", + "EEEERRRRRRR 1082\n", + "'>' not supported between instances of 'str' and 'int'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 238\n", + "unsupported operand type(s) for -: 'str' and 'str'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▉ | 390/4257 [01:41<15:26, 4.17 examples/s]" + "Map (num_proc=16): 11%|█ | 450/4257 [01:59<30:44, 2.06 examples/s]" ] }, { @@ -6466,11 +15267,9 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1245\n", - "invalid literal for int() with base 10: ' 3 ot'\n", + "EEEERRRRRRR 315\n", + "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 713\n", - "'no'\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -6479,33 +15278,27 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▉ | 391/4257 [01:41<16:52, 3.82 examples/s]" + "Map (num_proc=16): 11%|█ | 451/4257 [02:00<29:25, 2.16 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▉ | 392/4257 [01:41<17:25, 3.70 examples/s]" + "Map (num_proc=16): 11%|█ | 452/4257 [02:00<26:25, 2.40 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -6515,86 +15308,101 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▉ | 394/4257 [01:42<13:58, 4.61 examples/s]" + "Map (num_proc=16): 11%|█ | 453/4257 [02:00<21:58, 2.88 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▉ | 395/4257 [01:42<13:06, 4.91 examples/s]" + "Map (num_proc=16): 11%|█ | 454/4257 [02:00<19:13, 3.30 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1554Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1554\n", + "'>' not supported between instances of 'str' and 'float'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 899\n", + "'international tourist arrivals (2010)'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 795\n", + "unterminated string literal (detected at line 1) (, line 1)\n", + "EEEERRRRRRR 9\n", + "'location'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "\n", - "\"'rating'\"\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 555\n", + "'name'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1407\n", + "'>' not supported between instances of 'str' and 'float'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▉ | 396/4257 [01:42<17:12, 3.74 examples/s]" + "Map (num_proc=16): 11%|█ | 455/4257 [02:02<48:42, 1.30 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 481\n", + "Can only use .dt accessor with datetimelike values\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "EEEERRRRRRR'str' object is not callable 794\n", - "\n" + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▉ | 397/4257 [01:43<23:56, 2.69 examples/s]" + "Map (num_proc=16): 11%|█ | 456/4257 [02:03<42:33, 1.49 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "unsupported operand type(s) for -: 'str' and 'str'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 402\n", - "'best row 1'\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR EEEERRRRRRR554 \n", - "238'DataFrame' object has no attribute 'college'\n", - "\n", - "() got an unexpected keyword argument 'axis'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▉ | 398/4257 [01:43<23:35, 2.73 examples/s]" + "Map (num_proc=16): 11%|█ | 458/4257 [02:03<24:43, 2.56 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -6604,14 +15412,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▉ | 399/4257 [01:43<20:21, 3.16 examples/s]" + "Map (num_proc=16): 11%|█ | 459/4257 [02:03<24:33, 2.58 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -6621,19 +15428,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▉ | 401/4257 [01:44<16:29, 3.90 examples/s]" + "Map (num_proc=16): 11%|█ | 460/4257 [02:03<22:37, 2.80 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 479\n", - "'location'\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -6642,7 +15444,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▉ | 403/4257 [01:44<13:27, 4.78 examples/s]" + "Map (num_proc=16): 11%|█ | 461/4257 [02:04<20:29, 3.09 examples/s]" ] }, { @@ -6650,23 +15452,26 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 79\n", + "'result'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 9\n", - "'attendance'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 9%|▉ | 404/4257 [01:45<20:29, 3.13 examples/s]" + "Map (num_proc=16): 11%|█ | 462/4257 [02:04<22:05, 2.86 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 1247\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -6676,7 +15481,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|▉ | 405/4257 [01:45<21:48, 2.94 examples/s]" + "Map (num_proc=16): 11%|█ | 463/4257 [02:04<17:57, 3.52 examples/s]" ] }, { @@ -6685,16 +15490,17 @@ "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 78\n", - "unterminated string literal (detected at line 1) (, line 1)\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers''brazil scorers'\n", + "\n", + "'str' object is not callable'str' object is not callable\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|▉ | 407/4257 [01:46<17:57, 3.57 examples/s]" + "Map (num_proc=16): 11%|█ | 464/4257 [02:04<15:15, 4.14 examples/s]" ] }, { @@ -6702,8 +15508,9 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 402\n", + "'best row 2'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -6713,7 +15520,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|▉ | 409/4257 [01:46<14:44, 4.35 examples/s]" + "Map (num_proc=16): 11%|█ | 466/4257 [02:05<16:03, 3.93 examples/s]" ] }, { @@ -6721,13 +15528,8 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1554\n", - "could not convert string to float: 'viewers'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 713\n", - "'[7, 8] not in index'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 9\n", + "'location'\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -6736,63 +15538,79 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|▉ | 411/4257 [01:46<16:45, 3.83 examples/s]" + "Map (num_proc=16): 11%|█ | 467/4257 [02:05<18:29, 3.42 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 636\n", + "The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers''brazil scorers'\n", - "\n", - "'str' object is not callable'str' object is not callable\n", - "\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1085\n", + "'atp masters series'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|▉ | 412/4257 [01:47<17:55, 3.57 examples/s]" + "Map (num_proc=16): 11%|█ | 468/4257 [02:06<28:01, 2.25 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR'brazil scorers' \n", + "795'str' object is not callable\n", + "\n", + "invalid syntax. Perhaps you forgot a comma? (, line 1)\n", + "EEEERRRRRRR 1407\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5EEEERRRRRRR\n", - " 1407\n", - "'no'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 159\n", + "'[' was never closed (, line 1)\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR " ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|▉ | 415/4257 [01:47<13:27, 4.76 examples/s]" + "Map (num_proc=16): 11%|█ | 470/4257 [02:07<24:46, 2.55 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "1555\n", + "unterminated string literal (detected at line 1) (, line 1)\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 900\n", + "'year'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5'str' object is not callable\n", - "\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|▉ | 417/4257 [01:47<12:00, 5.33 examples/s]" + "Map (num_proc=16): 11%|█ | 471/4257 [02:07<31:10, 2.02 examples/s]" ] }, { @@ -6800,8 +15618,6 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 402\n", - "'best row 1'\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -6810,20 +15626,19 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|▉ | 418/4257 [01:48<11:24, 5.61 examples/s]" + "Map (num_proc=16): 11%|█ | 472/4257 [02:08<27:28, 2.30 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1081\n", - "'retired'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 9\n", - "'location'\n", + "EEEERRRRRRR 713\n", + "positional indexers are out-of-bounds\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -6831,7 +15646,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|▉ | 419/4257 [01:49<22:12, 2.88 examples/s]" + "Map (num_proc=16): 11%|█ | 474/4257 [02:09<27:51, 2.26 examples/s]" ] }, { @@ -6839,69 +15654,80 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 9\n", + "'attendance'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers''brazil scorers'\n", + "\n", + "'str' object is not callable'str' object is not callable\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|▉ | 420/4257 [01:49<19:40, 3.25 examples/s]" + "Map (num_proc=16): 11%|█ | 475/4257 [02:09<29:40, 2.12 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 479\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "EEEERRRRRRR 896\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 159\n", - "Can only use .dt accessor with datetimelike values'brazil scorers'\n", - "\n" + "EEEERRRRRRR 241\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "EEEERRRRRRR 1247\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|▉ | 421/4257 [01:49<21:39, 2.95 examples/s]" + "Map (num_proc=16): 11%|█ | 478/4257 [02:10<19:40, 3.20 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|▉ | 423/4257 [01:49<15:14, 4.19 examples/s]" + "Map (num_proc=16): 11%|█▏ | 479/4257 [02:10<19:59, 3.15 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 316\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|▉ | 424/4257 [01:50<17:13, 3.71 examples/s]" + "Map (num_proc=16): 11%|█▏ | 480/4257 [02:10<17:16, 3.64 examples/s]" ] }, { @@ -6909,11 +15735,6 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1245\n", - "invalid literal for int() with base 10: ' 3 ot'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 636\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -6923,34 +15744,27 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|▉ | 425/4257 [01:51<25:23, 2.51 examples/s]" + "Map (num_proc=16): 11%|█▏ | 481/4257 [02:10<17:55, 3.51 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 238\n", - "unterminated string literal (detected at line 1) (, line 1)\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 794\n", - "unsupported operand type(s) for -: 'str' and 'str'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1554\n", - "'>' not supported between instances of 'str' and 'float'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5EEEERRRRRRR\n", + " 555\n", + "'date died'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 'brazil scorers'555\n", - "\n", - "'str' object is not callable'name'\n", - "\n" + "EEEERRRRRRR 1085\n", + "'annual win - loss'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|█ | 426/4257 [01:51<29:01, 2.20 examples/s]" + "Map (num_proc=16): 11%|█▏ | 482/4257 [02:11<22:42, 2.77 examples/s]" ] }, { @@ -6958,7 +15772,11 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 79\n", + "invalid literal for int() with base 10: 'loss'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 795\n", + "invalid syntax. Perhaps you forgot a comma? (, line 1)\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -6967,7 +15785,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|█ | 427/4257 [01:52<31:39, 2.02 examples/s]" + "Map (num_proc=16): 11%|█▏ | 483/4257 [02:12<25:15, 2.49 examples/s]" ] }, { @@ -6975,23 +15793,34 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 'brazil scorers'402\n", - "\n", - "'str' object is not callable\"['best row 1'] not in index\"\n", - "\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|█ | 428/4257 [01:52<30:34, 2.09 examples/s]" + "Map (num_proc=16): 11%|█▏ | 484/4257 [02:12<25:49, 2.43 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 636\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 482\n", + "nothing to repeat at position 0\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR EEEERRRRRRR9 \n", + "901'location'\n", + "\n", + "Cannot perform 'rand_' with a dtyped [bool] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -7002,38 +15831,33 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|█ | 429/4257 [01:53<30:10, 2.11 examples/s]" + "Map (num_proc=16): 11%|█▏ | 486/4257 [02:13<30:43, 2.05 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 315\n", - "invalid syntax (, line 0)\n", - "EEEERRRRRRR 1082\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 713\n", - "'no'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|█ | 430/4257 [01:53<32:06, 1.99 examples/s]" + "Map (num_proc=16): 11%|█▏ | 487/4257 [02:13<28:12, 2.23 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 402\n", + "'best row 1'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -7043,7 +15867,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|█ | 431/4257 [01:53<27:00, 2.36 examples/s]" + "Map (num_proc=16): 11%|█▏ | 489/4257 [02:14<24:58, 2.51 examples/s]" ] }, { @@ -7059,38 +15883,30 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|█ | 432/4257 [01:54<26:03, 2.45 examples/s]" + "Map (num_proc=16): 12%|█▏ | 490/4257 [02:15<25:18, 2.48 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 898\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 79\n", - "list index out of range\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|█ | 433/4257 [01:54<25:50, 2.47 examples/s]" + "Map (num_proc=16): 12%|█▏ | 492/4257 [02:15<19:40, 3.19 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -7100,18 +15916,26 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|█ | 435/4257 [01:55<21:48, 2.92 examples/s]" + "Map (num_proc=16): 12%|█▏ | 493/4257 [02:15<17:19, 3.62 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1558\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 1085\n", + "'annual win - loss'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 9\n", + "single positional indexer is out-of-bounds\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -7120,7 +15944,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|█ | 438/4257 [01:55<12:45, 4.99 examples/s]" + "Map (num_proc=16): 12%|█▏ | 495/4257 [02:16<22:42, 2.76 examples/s]" ] }, { @@ -7134,32 +15958,42 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|█ | 439/4257 [01:55<12:00, 5.30 examples/s]" + "Map (num_proc=16): 12%|█▏ | 496/4257 [02:16<21:51, 2.87 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 79\n", + "invalid literal for int() with base 10: 'loss'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "'str' object is not callableGenerating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|█ | 440/4257 [01:55<13:30, 4.71 examples/s]" + "Map (num_proc=16): 12%|█▏ | 499/4257 [02:17<16:43, 3.75 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 1409\n", + "invalid syntax (, line 0)\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 159\n", + "invalid literal for int() with base 10: ''\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1407\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -7169,16 +16003,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|█ | 441/4257 [01:56<16:57, 3.75 examples/s]" + "Map (num_proc=16): 12%|█▏ | 500/4257 [02:17<19:19, 3.24 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 159\n", - "can only concatenate str (not \"Timedelta\") to str\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -7188,19 +16022,22 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|█ | 442/4257 [01:56<19:01, 3.34 examples/s]" + "Map (num_proc=16): 12%|█▏ | 502/4257 [02:18<17:58, 3.48 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 636\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1249\n", "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "EEEERRRRRRR 795\n", "unterminated string literal (detected at line 1) (, line 1)\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 636\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -7210,7 +16047,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|█ | 443/4257 [01:57<21:08, 3.01 examples/s]" + "Map (num_proc=16): 12%|█▏ | 503/4257 [02:19<26:35, 2.35 examples/s]" ] }, { @@ -7219,6 +16056,7 @@ "text": [ "'brazil scorers'\n", "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -7226,7 +16064,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 10%|█ | 445/4257 [01:57<13:47, 4.61 examples/s]" + "Map (num_proc=16): 12%|█▏ | 505/4257 [02:19<20:19, 3.08 examples/s]" ] }, { @@ -7237,7 +16075,6 @@ "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -7246,48 +16083,44 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 447/4257 [01:57<13:01, 4.87 examples/s]" + "Map (num_proc=16): 12%|█▏ | 507/4257 [02:19<15:17, 4.09 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1246\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 317\n", + "'winner'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 9\n", - "'location'\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 448/4257 [01:58<17:29, 3.63 examples/s]" + "Map (num_proc=16): 12%|█▏ | 508/4257 [02:20<15:50, 3.94 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 1088\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1554\n", - "'>=' not supported between instances of 'str' and 'int'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 713\n", - "name 'datetime' is not defined\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 449/4257 [01:58<19:16, 3.29 examples/s]" + "Map (num_proc=16): 12%|█▏ | 510/4257 [02:20<13:35, 4.60 examples/s]" ] }, { @@ -7295,28 +16128,27 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 716\n", + "'col'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "EEEERRRRRRR 79\n", - "invalid literal for int() with base 10: 'loss'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 402\n", - "'best row 1'\n", - "EEEERRRRRRR 1082\n", - "'>' not supported between instances of 'str' and 'int'\n", + "'str' object has no attribute 'min'\n", + "EEEERRRRRRR 9\n", + "'location'\n", + "EEEERRRRRRR 901\n", + "'attendance'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 238\n", - "unsupported operand type(s) for -: 'str' and 'str'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 482\n", + "nothing to repeat at position 0\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 450/4257 [01:59<30:44, 2.06 examples/s]" + "Map (num_proc=16): 12%|█▏ | 511/4257 [02:21<28:38, 2.18 examples/s]" ] }, { @@ -7324,8 +16156,6 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 315\n", - "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -7335,27 +16165,41 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 451/4257 [02:00<29:25, 2.16 examples/s]" + "Map (num_proc=16): 12%|█▏ | 512/4257 [02:22<27:52, 2.24 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'EEEERRRRRRR\n", + " 'str' object is not callable243\n", + "\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 452/4257 [02:00<26:25, 2.40 examples/s]" + "Map (num_proc=16): 12%|█▏ | 514/4257 [02:22<26:19, 2.37 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR EEEERRRRRRR402 \n", + "1249'best row 1'\n", + "\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -7365,7 +16209,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 453/4257 [02:00<21:58, 2.88 examples/s]" + "Map (num_proc=16): 12%|█▏ | 515/4257 [02:23<27:59, 2.23 examples/s]" ] }, { @@ -7381,32 +16225,31 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 454/4257 [02:00<19:13, 3.30 examples/s]" + "Map (num_proc=16): 12%|█▏ | 516/4257 [02:23<23:39, 2.64 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 1558\n", + "invalid syntax (, line 0)\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1554\n", - "'>' not supported between instances of 'str' and 'float'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 899\n", - "'international tourist arrivals (2010)'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 795\n", - "unterminated string literal (detected at line 1) (, line 1)\n", "EEEERRRRRRR 9\n", "'location'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n", - "EEEERRRRRRR 555\n", - "'name'\n", + "EEEERRRRRRR 1409\n", + "'location'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1407\n", - "'>' not supported between instances of 'str' and 'float'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 160\n", + "'numpy.int64' object has no attribute 'equals'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 555\n", + "invalid syntax (, line 0)\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -7415,15 +16258,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 455/4257 [02:02<48:42, 1.30 examples/s]" + "Map (num_proc=16): 12%|█▏ | 518/4257 [02:25<34:17, 1.82 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 481\n", - "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -7434,16 +16275,35 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 456/4257 [02:03<42:33, 1.49 examples/s]" + "Map (num_proc=16): 12%|█▏ | 519/4257 [02:25<30:50, 2.02 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 12%|█▏ | 520/4257 [02:25<26:36, 2.34 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 317\n", + "invalid syntax. Perhaps you forgot a comma? (, line 1)\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 636\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -7453,13 +16313,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 458/4257 [02:03<24:43, 2.56 examples/s]" + "Map (num_proc=16): 12%|█▏ | 521/4257 [02:26<37:09, 1.68 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 716\n", + "'col'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -7469,7 +16332,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 459/4257 [02:03<24:33, 2.58 examples/s]" + "Map (num_proc=16): 12%|█▏ | 522/4257 [02:27<31:09, 2.00 examples/s]" ] }, { @@ -7485,14 +16348,22 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 460/4257 [02:03<22:37, 2.80 examples/s]" + "Map (num_proc=16): 12%|█▏ | 523/4257 [02:27<24:16, 2.56 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 243\n", + "Cannot perform 'rand_' with a dtyped [bool] array and scalar of type [bool]\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 795\n", + "invalid syntax. Perhaps you forgot a comma? (, line 1)\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -7501,44 +16372,64 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 461/4257 [02:04<20:29, 3.09 examples/s]" + "Map (num_proc=16): 12%|█▏ | 525/4257 [02:27<20:58, 2.97 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers''brazil scorers'\n", + "\n", + "'str' object is not callable'str' object is not callable\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 12%|█▏ | 526/4257 [02:28<20:35, 3.02 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 161\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 79\n", - "'result'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5'brazil scorers'\n", + "\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 462/4257 [02:04<22:05, 2.86 examples/s]" + "Map (num_proc=16): 12%|█▏ | 529/4257 [02:28<16:33, 3.75 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1247\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 463/4257 [02:04<17:57, 3.52 examples/s]" + "Map (num_proc=16): 12%|█▏ | 531/4257 [02:29<14:45, 4.21 examples/s]" ] }, { @@ -7546,28 +16437,25 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1558\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers''brazil scorers'\n", - "\n", - "'str' object is not callable'str' object is not callable\n", - "\n" + "EEEERRRRRRR 79\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 464/4257 [02:04<15:15, 4.14 examples/s]" + "Map (num_proc=16): 12%|█▏ | 532/4257 [02:29<20:32, 3.02 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 402\n", - "'best row 2'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -7577,16 +16465,17 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 466/4257 [02:05<16:03, 3.93 examples/s]" + "Map (num_proc=16): 13%|█▎ | 533/4257 [02:30<20:37, 3.01 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 9\n", - "'location'\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -7595,69 +16484,57 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 467/4257 [02:05<18:29, 3.42 examples/s]" + "Map (num_proc=16): 13%|█▎ | 535/4257 [02:30<15:53, 3.90 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 636\n", - "The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1085\n", - "'atp masters series'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 468/4257 [02:06<28:01, 2.25 examples/s]" + "Map (num_proc=16): 13%|█▎ | 536/4257 [02:30<15:38, 3.97 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "EEEERRRRRRR'brazil scorers' \n", - "795'str' object is not callable\n", + "243'str' object is not callable\n", "\n", - "invalid syntax. Perhaps you forgot a comma? (, line 1)\n", - "EEEERRRRRRR 1407\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 159\n", - "'[' was never closed (, line 1)\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR " + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()." ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 470/4257 [02:07<24:46, 2.55 examples/s]" + "Map (num_proc=16): 13%|█▎ | 538/4257 [02:31<14:16, 4.34 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "1555\n", - "unterminated string literal (detected at line 1) (, line 1)\n", + "\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 555\n", + "'name'\n", + "EEEERRRRRRR 483\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 1249\n", + "can only concatenate str (not \"int\") to str\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 900\n", - "'year'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -7667,13 +16544,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 471/4257 [02:07<31:10, 2.02 examples/s]" + "Map (num_proc=16): 13%|█▎ | 539/4257 [02:31<20:40, 3.00 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 903\n", + "invalid literal for int() with base 10: 'w 112 '\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -7683,63 +16563,52 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 472/4257 [02:08<27:28, 2.30 examples/s]" + "Map (num_proc=16): 13%|█▎ | 540/4257 [02:32<22:13, 2.79 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 713\n", - "positional indexers are out-of-bounds\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 402" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 474/4257 [02:09<27:51, 2.26 examples/s]" + "Map (num_proc=16): 13%|█▎ | 542/4257 [02:32<16:26, 3.77 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "\n", + "'best row 1'\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 9\n", - "'attendance'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers''brazil scorers'\n", - "\n", - "'str' object is not callable'str' object is not callable\n", - "\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 475/4257 [02:09<29:40, 2.12 examples/s]" + "Map (num_proc=16): 13%|█▎ | 544/4257 [02:32<16:42, 3.70 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 241\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", - "EEEERRRRRRR 1247\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + " 1410\n", + "invalid syntax (, line 1)\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -7750,7 +16619,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█ | 478/4257 [02:10<19:40, 3.20 examples/s]" + "Map (num_proc=16): 13%|█▎ | 545/4257 [02:33<17:17, 3.58 examples/s]" ] }, { @@ -7766,15 +16635,31 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█▏ | 479/4257 [02:10<19:59, 3.15 examples/s]" + "Map (num_proc=16): 13%|█▎ | 546/4257 [02:33<18:51, 3.28 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 316\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 161EEEERRRRRRR\n", + " The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().11\n", + "\n", + "Can only compare identically-labeled Series objects\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1560\n", + "invalid literal for int() with base 10: 'w'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 716\n", + "'city'\n", + "EEEERRRRRRREEEERRRRRRR 636317\n", + "\n", + "Can only use .dt accessor with datetimelike valuesunterminated string literal (detected at line 1) (, line 1)\n", + "\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -7784,13 +16669,15 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█▏ | 480/4257 [02:10<17:16, 3.64 examples/s]" + "Map (num_proc=16): 13%|█▎ | 547/4257 [02:34<33:41, 1.84 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 1093\n", + "'engine'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -7801,19 +16688,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█▏ | 481/4257 [02:10<17:55, 3.51 examples/s]" + "Map (num_proc=16): 13%|█▎ | 548/4257 [02:35<27:34, 2.24 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5EEEERRRRRRR\n", - " 555\n", - "'date died'\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1085\n", - "'annual win - loss'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -7821,7 +16705,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█▏ | 482/4257 [02:11<22:42, 2.77 examples/s]" + "Map (num_proc=16): 13%|█▎ | 550/4257 [02:35<22:10, 2.79 examples/s]" ] }, { @@ -7829,11 +16713,6 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 79\n", - "invalid literal for int() with base 10: 'loss'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 795\n", - "invalid syntax. Perhaps you forgot a comma? (, line 1)\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -7842,14 +16721,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█▏ | 483/4257 [02:12<25:15, 2.49 examples/s]" + "Map (num_proc=16): 13%|█▎ | 551/4257 [02:35<20:51, 2.96 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -7859,7 +16737,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█▏ | 484/4257 [02:12<25:49, 2.43 examples/s]" + "Map (num_proc=16): 13%|█▎ | 552/4257 [02:36<20:06, 3.07 examples/s]" ] }, { @@ -7867,18 +16745,14 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 795\n", + "unterminated string literal (detected at line 1) (, line 1)\n", + "EEEERRRRRRR 80\n", + "invalid literal for int() with base 10: 'pepsi center 15823'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 636\n", + "EEEERRRRRRR 1249\n", "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 482\n", - "nothing to repeat at position 0\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR EEEERRRRRRR9 \n", - "901'location'\n", - "\n", - "Cannot perform 'rand_' with a dtyped [bool] array and scalar of type [bool]\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -7888,43 +16762,40 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█▏ | 486/4257 [02:13<30:43, 2.05 examples/s]" + "Map (num_proc=16): 13%|█▎ | 553/4257 [02:37<36:38, 1.68 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 402\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█▏ | 487/4257 [02:13<28:12, 2.23 examples/s]" + "Map (num_proc=16): 13%|█▎ | 554/4257 [02:37<31:56, 1.93 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 402\n", - "'best row 1'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 11%|█▏ | 489/4257 [02:14<24:58, 2.51 examples/s]" + "Map (num_proc=16): 13%|█▎ | 555/4257 [02:38<31:38, 1.95 examples/s]" ] }, { @@ -7940,30 +16811,38 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 490/4257 [02:15<25:18, 2.48 examples/s]" + "Map (num_proc=16): 13%|█▎ | 556/4257 [02:38<25:16, 2.44 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers''brazil scorers'\n", + "\n", + "'str' object is not callable'str' object is not callable\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 492/4257 [02:15<19:40, 3.19 examples/s]" + "Map (num_proc=16): 13%|█▎ | 559/4257 [02:38<13:01, 4.73 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -7973,25 +16852,27 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 493/4257 [02:15<17:19, 3.62 examples/s]" + "Map (num_proc=16): 13%|█▎ | 561/4257 [02:39<13:20, 4.62 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 13%|█▎ | 562/4257 [02:39<15:24, 4.00 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1558\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "EEEERRRRRRR 1085\n", - "'annual win - loss'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 9\n", - "single positional indexer is out-of-bounds\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -8001,13 +16882,18 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 495/4257 [02:16<22:42, 2.76 examples/s]" + "Map (num_proc=16): 13%|█▎ | 563/4257 [02:39<17:25, 3.53 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 555\n", + "'dates'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -8015,60 +16901,52 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 496/4257 [02:16<21:51, 2.87 examples/s]" + "Map (num_proc=16): 13%|█▎ | 565/4257 [02:40<12:44, 4.83 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 79\n", - "invalid literal for int() with base 10: 'loss'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callableGenerating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n", - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 483\n", + "'<' not supported between instances of 'str' and 'int'\n", + "EEEERRRRRRR 163\n", + "unsupported operand type(s) for -: 'str' and 'int'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 499/4257 [02:17<16:43, 3.75 examples/s]" + "Map (num_proc=16): 13%|█▎ | 566/4257 [02:40<14:22, 4.28 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1409\n", - "invalid syntax (, line 0)\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 159\n", - "invalid literal for int() with base 10: ''\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 1096\n", + "'no'\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 500/4257 [02:17<19:19, 3.24 examples/s]" + "Map (num_proc=16): 13%|█▎ | 567/4257 [02:40<14:31, 4.24 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -8079,32 +16957,37 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 502/4257 [02:18<17:58, 3.48 examples/s]" + "Map (num_proc=16): 13%|█▎ | 568/4257 [02:40<14:09, 4.34 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1249\n", + "EEEERRRRRRR 903\n", "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "EEEERRRRRRR 795\n", - "unterminated string literal (detected at line 1) (, line 1)\n", + "unmatched ')' (, line 1)\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 636\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 318\n", "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 244\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 1249\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 503/4257 [02:19<26:35, 2.35 examples/s]" + "Map (num_proc=16): 13%|█▎ | 570/4257 [02:41<20:50, 2.95 examples/s]" ] }, { @@ -8114,14 +16997,16 @@ "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 505/4257 [02:19<20:19, 3.08 examples/s]" + "Map (num_proc=16): 13%|█▎ | 572/4257 [02:42<17:19, 3.55 examples/s]" ] }, { @@ -8129,9 +17014,8 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 80\n", + "invalid literal for int() with base 10: 'pepsi center 15823'\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -8140,34 +17024,36 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 507/4257 [02:19<15:17, 4.09 examples/s]" + "Map (num_proc=16): 13%|█▎ | 573/4257 [02:42<20:14, 3.03 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 317\n", - "'winner'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 716\n", + "'city'\n", + "EEEERRRRRRR 1562\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 508/4257 [02:20<15:50, 3.94 examples/s]" + "Map (num_proc=16): 13%|█▎ | 574/4257 [02:43<24:26, 2.51 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1088\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -8177,41 +17063,35 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 510/4257 [02:20<13:35, 4.60 examples/s]" + "Map (num_proc=16): 14%|█▎ | 575/4257 [02:43<21:33, 2.85 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 716\n", - "'col'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 79\n", - "'str' object has no attribute 'min'\n", - "EEEERRRRRRR 9\n", - "'location'\n", - "EEEERRRRRRR 901\n", - "'attendance'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 403\n", + "'writer(s)'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 482\n", - "nothing to repeat at position 0\n" + "EEEERRRRRRR 637\n", + "'mile high stadium'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 511/4257 [02:21<28:38, 2.18 examples/s]" + "Map (num_proc=16): 14%|█▎ | 576/4257 [02:44<25:19, 2.42 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -8222,18 +17102,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 512/4257 [02:22<27:52, 2.24 examples/s]" + "Map (num_proc=16): 14%|█▎ | 578/4257 [02:44<18:00, 3.40 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'EEEERRRRRRR\n", - " 'str' object is not callable243\n", - "\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -8244,7 +17119,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 514/4257 [02:22<26:19, 2.37 examples/s]" + "Map (num_proc=16): 14%|█▎ | 580/4257 [02:44<14:23, 4.26 examples/s]" ] }, { @@ -8252,13 +17127,12 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR EEEERRRRRRR402 \n", - "1249'best row 1'\n", - "\n", + "EEEERRRRRRR 1249\n", "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", + "EEEERRRRRRR 483\n", + "'>' not supported between instances of 'str' and 'int''brazil scorers'\n", + "\n", "'str' object is not callable\n" ] }, @@ -8266,7 +17140,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 515/4257 [02:23<27:59, 2.23 examples/s]" + "Map (num_proc=16): 14%|█▎ | 581/4257 [02:45<17:22, 3.53 examples/s]" ] }, { @@ -8274,39 +17148,21 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 516/4257 [02:23<23:39, 2.64 examples/s]" + "Map (num_proc=16): 14%|█▎ | 582/4257 [02:45<16:44, 3.66 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1558\n", - "invalid syntax (, line 0)\n", - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 9\n", - "'location'\n", - "EEEERRRRRRR 1409\n", - "'location'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 160\n", - "'numpy.int64' object has no attribute 'equals'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 555\n", - "invalid syntax (, line 0)\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -8315,7 +17171,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 518/4257 [02:25<34:17, 1.82 examples/s]" + "Map (num_proc=16): 14%|█▎ | 583/4257 [02:45<14:08, 4.33 examples/s]" ] }, { @@ -8323,6 +17179,8 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1096\n", + "'no'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -8332,23 +17190,21 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 519/4257 [02:25<30:50, 2.02 examples/s]" + "Map (num_proc=16): 14%|█▎ | 584/4257 [02:45<17:30, 3.50 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 520/4257 [02:25<26:36, 2.34 examples/s]" + "Map (num_proc=16): 14%|█▎ | 585/4257 [02:46<15:49, 3.87 examples/s]" ] }, { @@ -8356,11 +17212,11 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 317\n", - "invalid syntax. Perhaps you forgot a comma? (, line 1)\n", + "EEEERRRRRRR 244\n", + "Could not convert string '12.14 (86)18.14 (122)' to numeric\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 636\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 905\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -8370,26 +17226,24 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 521/4257 [02:26<37:09, 1.68 examples/s]" + "Map (num_proc=16): 14%|█▍ | 586/4257 [02:46<20:05, 3.05 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 716\n", - "'col'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 522/4257 [02:27<31:09, 2.00 examples/s]" + "Map (num_proc=16): 14%|█▍ | 588/4257 [02:46<13:45, 4.45 examples/s]" ] }, { @@ -8397,30 +17251,34 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRREEEERRRRRRR 1410164\n", + "\n", + "invalid syntax (, line 1)single positional indexer is out-of-bounds\n", + "\n", + "'brazil scorers''brazil scorers'\n", + "\n", + "'str' object is not callable'str' object is not callable\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 523/4257 [02:27<24:16, 2.56 examples/s]" + "Map (num_proc=16): 14%|█▍ | 589/4257 [02:47<14:26, 4.24 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 243\n", - "Cannot perform 'rand_' with a dtyped [bool] array and scalar of type [bool]\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 795\n", - "invalid syntax. Perhaps you forgot a comma? (, line 1)\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -8429,64 +17287,75 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 525/4257 [02:27<20:58, 2.97 examples/s]" + "Map (num_proc=16): 14%|█▍ | 592/4257 [02:47<11:01, 5.54 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers''brazil scorers'\n", - "\n", - "'str' object is not callable'str' object is not callable\n", - "\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 526/4257 [02:28<20:35, 3.02 examples/s]" + "Map (num_proc=16): 14%|█▍ | 593/4257 [02:47<12:55, 4.73 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 161\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5'brazil scorers'\n", - "\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n" + "EEEERRRRRRR 1249\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 529/4257 [02:28<16:33, 3.75 examples/s]" + "Map (num_proc=16): 14%|█▍ | 594/4257 [02:48<16:51, 3.62 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 14%|█▍ | 596/4257 [02:48<15:56, 3.83 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 556\n", + "Can only use .dt accessor with datetimelike values\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1562\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 531/4257 [02:29<14:45, 4.21 examples/s]" + "Map (num_proc=16): 14%|█▍ | 598/4257 [02:49<16:42, 3.65 examples/s]" ] }, { @@ -8494,11 +17363,15 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1558\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 79\n", + "EEEERRRRRRREEEERRRRRRR 795\n", + "318invalid syntax. Perhaps you forgot a comma? (, line 1)\n", + "\n", "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 717\n", + "could not convert string to float: '05.03.80'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -8506,13 +17379,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 12%|█▏ | 532/4257 [02:29<20:32, 3.02 examples/s]" + "Map (num_proc=16): 14%|█▍ | 599/4257 [02:50<27:13, 2.24 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 81\n", + "'raymond felton'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -8522,16 +17398,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 533/4257 [02:30<20:37, 3.01 examples/s]" + "Map (num_proc=16): 14%|█▍ | 600/4257 [02:50<25:26, 2.40 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -8541,13 +17414,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 535/4257 [02:30<15:53, 3.90 examples/s]" + "Map (num_proc=16): 14%|█▍ | 601/4257 [02:50<21:31, 2.83 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -8555,42 +17429,34 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 536/4257 [02:30<15:38, 3.97 examples/s]" + "Map (num_proc=16): 14%|█▍ | 603/4257 [02:51<15:20, 3.97 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 637\n", + "single positional indexer is out-of-bounds\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR'brazil scorers' \n", - "243'str' object is not callable\n", - "\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()." + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 538/4257 [02:31<14:16, 4.34 examples/s]" + "Map (num_proc=16): 14%|█▍ | 604/4257 [02:51<17:33, 3.47 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 555\n", - "'name'\n", - "EEEERRRRRRR 483\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "EEEERRRRRRR 1249\n", - "can only concatenate str (not \"int\") to str\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -8601,71 +17467,72 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 539/4257 [02:31<20:40, 3.00 examples/s]" + "Map (num_proc=16): 14%|█▍ | 606/4257 [02:51<13:46, 4.42 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 903\n", - "invalid literal for int() with base 10: 'w 112 '\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 540/4257 [02:32<22:13, 2.79 examples/s]" + "Map (num_proc=16): 14%|█▍ | 607/4257 [02:52<13:20, 4.56 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 1249\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 402" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 542/4257 [02:32<16:26, 3.77 examples/s]" + "Map (num_proc=16): 14%|█▍ | 608/4257 [02:52<13:52, 4.38 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n", - "'best row 1'\n", - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR" + "EEEERRRRRRREEEERRRRRRR 14905\n", + "\n", + "left side of interval must be <= right side'>' not supported between instances of 'str' and 'int'\n", + "\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 544/4257 [02:32<16:42, 3.70 examples/s]" + "Map (num_proc=16): 14%|█▍ | 611/4257 [02:52<13:14, 4.59 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " 1410\n", - "invalid syntax (, line 1)\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -8676,7 +17543,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 545/4257 [02:33<17:17, 3.58 examples/s]" + "Map (num_proc=16): 14%|█▍ | 613/4257 [02:53<11:46, 5.16 examples/s]" ] }, { @@ -8685,75 +17552,69 @@ "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1100\n", + "'attorney general'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 546/4257 [02:33<18:51, 3.28 examples/s]" + "Map (num_proc=16): 14%|█▍ | 616/4257 [02:53<11:23, 5.33 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 161EEEERRRRRRR\n", - " The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().11\n", - "\n", - "Can only compare identically-labeled Series objects\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1560\n", - "invalid literal for int() with base 10: 'w'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 716\n", - "'city'\n", - "EEEERRRRRRREEEERRRRRRR 636317\n", - "\n", - "Can only use .dt accessor with datetimelike valuesunterminated string literal (detected at line 1) (, line 1)\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "'brazil scorers'" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 547/4257 [02:34<33:41, 1.84 examples/s]" + "Map (num_proc=16): 15%|█▍ | 618/4257 [02:53<09:58, 6.08 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1093\n", - "'engine'\n", + "\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'EEEERRRRRRR\n", + " 'str' object is not callable81\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 548/4257 [02:35<27:34, 2.24 examples/s]" + "Map (num_proc=16): 15%|█▍ | 621/4257 [02:54<10:05, 6.01 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", + "Could not convert string 'raymond felton (23)stephen jackson (30)stephen jackson (26)stephen jackson (22)stephen jackson (33)gerald wallace (21)stephen jackson (29)stephen jackson (35)gerald wallace (32)gerald wallace (27)' to numeric\n", + "EEEERRRRRRR 404\n", + "'location'\n", + "EEEERRRRRRR 796\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] @@ -8762,39 +17623,42 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 550/4257 [02:35<22:10, 2.79 examples/s]" + "Map (num_proc=16): 15%|█▍ | 622/4257 [02:54<11:57, 5.07 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 551/4257 [02:35<20:51, 2.96 examples/s]" + "Map (num_proc=16): 15%|█▍ | 623/4257 [02:55<12:03, 5.03 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 1563\n", + "'total score'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 556\n", + "Can only use .dt accessor with datetimelike values\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 552/4257 [02:36<20:06, 3.07 examples/s]" + "Map (num_proc=16): 15%|█▍ | 625/4257 [02:55<13:21, 4.53 examples/s]" ] }, { @@ -8802,15 +17666,8 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 795\n", - "unterminated string literal (detected at line 1) (, line 1)\n", - "EEEERRRRRRR 80\n", - "invalid literal for int() with base 10: 'pepsi center 15823'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1249\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 165\n", + "Can only compare identically-labeled Series objects\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -8819,17 +17676,18 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 553/4257 [02:37<36:38, 1.68 examples/s]" + "Map (num_proc=16): 15%|█▍ | 626/4257 [02:55<15:26, 3.92 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 402\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 244\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -8838,13 +17696,19 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 554/4257 [02:37<31:56, 1.93 examples/s]" + "Map (num_proc=16): 15%|█▍ | 627/4257 [02:56<18:01, 3.36 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 485\n", + "'winner'\n", + "EEEERRRRRRR 1410\n", + "'date | time | score | set 1 | set 2 | set 3 | total'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -8852,7 +17716,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 555/4257 [02:38<31:38, 1.95 examples/s]" + "Map (num_proc=16): 15%|█▍ | 628/4257 [02:56<18:19, 3.30 examples/s]" ] }, { @@ -8860,45 +17724,41 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "'brazil scorers'" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 556/4257 [02:38<25:16, 2.44 examples/s]" + "Map (num_proc=16): 15%|█▍ | 629/4257 [02:56<17:28, 3.46 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", - "'brazil scorers'\n", + "\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers''brazil scorers'\n", - "\n", - "'str' object is not callable'str' object is not callable\n", - "\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 559/4257 [02:38<13:01, 4.73 examples/s]" + "Map (num_proc=16): 15%|█▍ | 631/4257 [02:57<17:39, 3.42 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -8909,21 +17769,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 561/4257 [02:39<13:20, 4.62 examples/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 13%|█▎ | 562/4257 [02:39<15:24, 4.00 examples/s]" + "Map (num_proc=16): 15%|█▍ | 633/4257 [02:57<12:24, 4.87 examples/s]" ] }, { @@ -8939,18 +17785,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 563/4257 [02:39<17:25, 3.53 examples/s]" + "Map (num_proc=16): 15%|█▍ | 634/4257 [02:57<11:17, 5.35 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 555\n", - "'dates'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -8958,30 +17799,24 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 565/4257 [02:40<12:44, 4.83 examples/s]" + "Map (num_proc=16): 15%|█▍ | 635/4257 [02:58<13:25, 4.50 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 906\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 483\n", - "'<' not supported between instances of 'str' and 'int'\n", - "EEEERRRRRRR 163\n", - "unsupported operand type(s) for -: 'str' and 'int'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 566/4257 [02:40<14:22, 4.28 examples/s]" + "Map (num_proc=16): 15%|█▍ | 636/4257 [02:58<13:36, 4.43 examples/s]" ] }, { @@ -8989,15 +17824,18 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1096\n", - "'no'\n" + "EEEERRRRRRR 717\n", + "could not convert string to float: '50.56.8'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 567/4257 [02:40<14:31, 4.24 examples/s]" + "Map (num_proc=16): 15%|█▍ | 637/4257 [02:58<19:17, 3.13 examples/s]" ] }, { @@ -9014,29 +17852,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 568/4257 [02:40<14:09, 4.34 examples/s]" + "Map (num_proc=16): 15%|█▌ | 639/4257 [02:59<15:06, 3.99 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 903\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "EEEERRRRRRR 795\n", - "unmatched ')' (, line 1)\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 318\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 244\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "EEEERRRRRRR 1249\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 404\n", + "'location'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -9044,17 +17869,17 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 570/4257 [02:41<20:50, 2.95 examples/s]" + "Map (num_proc=16): 15%|█▌ | 640/4257 [02:59<13:12, 4.56 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 796\n", + "'>=' not supported between instances of 'str' and 'int'\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -9063,37 +17888,33 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 572/4257 [02:42<17:19, 3.55 examples/s]" + "Map (num_proc=16): 15%|█▌ | 642/4257 [02:59<12:07, 4.97 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 80\n", - "invalid literal for int() with base 10: 'pepsi center 15823'\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 573/4257 [02:42<20:14, 3.03 examples/s]" + "Map (num_proc=16): 15%|█▌ | 644/4257 [03:00<12:32, 4.80 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 716\n", - "'city'\n", - "EEEERRRRRRR 1562\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -9104,7 +17925,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 13%|█▎ | 574/4257 [02:43<24:26, 2.51 examples/s]" + "Map (num_proc=16): 15%|█▌ | 646/4257 [03:00<12:13, 4.92 examples/s]" ] }, { @@ -9112,45 +17933,42 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▎ | 575/4257 [02:43<21:33, 2.85 examples/s]" + "Map (num_proc=16): 15%|█▌ | 648/4257 [03:00<11:37, 5.17 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 403\n", - "'writer(s)'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 485\n", + "'winner'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 637\n", - "'mile high stadium'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▎ | 576/4257 [02:44<25:19, 2.42 examples/s]" + "Map (num_proc=16): 15%|█▌ | 649/4257 [03:01<13:13, 4.55 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 322\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -9159,13 +17977,31 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▎ | 578/4257 [02:44<18:00, 3.40 examples/s]" + "Map (num_proc=16): 15%|█▌ | 650/4257 [03:01<12:05, 4.97 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 1103\n", + "'location'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 81\n", + "'raymond felton'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1564\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 14\n", + "'(' was never closed (, line 1)\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 166\n", + "unsupported operand type(s) for -: 'str' and 'str'\n", + "EEEERRRRRRR 244\n", + "Cannot perform 'ror_' with a dtyped [object] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -9176,43 +18012,36 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▎ | 580/4257 [02:44<14:23, 4.26 examples/s]" + "Map (num_proc=16): 15%|█▌ | 651/4257 [03:02<21:26, 2.80 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1249\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 483\n", - "'>' not supported between instances of 'str' and 'int''brazil scorers'\n", - "\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▎ | 581/4257 [02:45<17:22, 3.53 examples/s]" + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 638\n", + "Can only use .str accessor with string values!\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▎ | 582/4257 [02:45<16:44, 3.66 examples/s]" + "Map (num_proc=16): 15%|█▌ | 652/4257 [03:02<24:49, 2.42 examples/s]" ] }, { @@ -9221,59 +18050,64 @@ "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 404\n", + "invalid literal for int() with base 10: 'l 100'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "EEEERRRRRRR'str' object is not callable \n", + "556" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▎ | 583/4257 [02:45<14:08, 4.33 examples/s]" + "Map (num_proc=16): 15%|█▌ | 654/4257 [03:03<22:54, 2.62 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "\n", + "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1096\n", - "'no'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 1410\n", + "invalid syntax (, line 1)\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▎ | 584/4257 [02:45<17:30, 3.50 examples/s]" + "Map (num_proc=16): 15%|█▌ | 655/4257 [03:03<24:03, 2.49 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▎ | 585/4257 [02:46<15:49, 3.87 examples/s]" + "Map (num_proc=16): 15%|█▌ | 656/4257 [03:04<21:54, 2.74 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 244\n", - "Could not convert string '12.14 (86)18.14 (122)' to numeric\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 905\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -9283,7 +18117,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▍ | 586/4257 [02:46<20:05, 3.05 examples/s]" + "Map (num_proc=16): 15%|█▌ | 657/4257 [03:04<19:31, 3.07 examples/s]" ] }, { @@ -9293,6 +18127,12 @@ "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1104\n", + "invalid literal for int() with base 10: 'l 99 '\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1251\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -9300,29 +18140,21 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▍ | 588/4257 [02:46<13:45, 4.45 examples/s]" + "Map (num_proc=16): 15%|█▌ | 659/4257 [03:05<22:01, 2.72 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRREEEERRRRRRR 1410164\n", - "\n", - "invalid syntax (, line 1)single positional indexer is out-of-bounds\n", - "\n", - "'brazil scorers''brazil scorers'\n", - "\n", - "'str' object is not callable'str' object is not callable\n", - "\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▍ | 589/4257 [02:47<14:26, 4.24 examples/s]" + "Map (num_proc=16): 16%|█▌ | 660/4257 [03:05<21:11, 2.83 examples/s]" ] }, { @@ -9331,12 +18163,6 @@ "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n", - "'brazil scorers'\n", "'str' object is not callable\n" ] }, @@ -9344,21 +18170,26 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▍ | 592/4257 [02:47<11:01, 5.54 examples/s]" + "Map (num_proc=16): 16%|█▌ | 661/4257 [03:05<21:18, 2.81 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 796\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▍ | 593/4257 [02:47<12:55, 4.73 examples/s]" + "Map (num_proc=16): 16%|█▌ | 662/4257 [03:06<22:40, 2.64 examples/s]" ] }, { @@ -9366,53 +18197,56 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1249\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▍ | 594/4257 [02:48<16:51, 3.62 examples/s]" + "Map (num_proc=16): 16%|█▌ | 664/4257 [03:06<15:20, 3.90 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR'brazil scorers' \n", + "717'str' object is not callable\n", + "\n", + "'time'" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▍ | 596/4257 [02:48<15:56, 3.83 examples/s]" + "Map (num_proc=16): 16%|█▌ | 667/4257 [03:07<13:46, 4.35 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 556\n", - "Can only use .dt accessor with datetimelike values\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1562\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▍ | 598/4257 [02:49<16:42, 3.65 examples/s]" + "Map (num_proc=16): 16%|█▌ | 668/4257 [03:07<15:03, 3.97 examples/s]" ] }, { @@ -9420,23 +18254,15 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRREEEERRRRRRR 795\n", - "318invalid syntax. Perhaps you forgot a comma? (, line 1)\n", - "\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 717\n", - "could not convert string to float: '05.03.80'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▍ | 599/4257 [02:50<27:13, 2.24 examples/s]" + "Map (num_proc=16): 16%|█▌ | 669/4257 [03:07<15:05, 3.96 examples/s]" ] }, { @@ -9444,18 +18270,23 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 81\n", - "'raymond felton'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 486\n", + "unsupported operand type(s) for -: 'str' and 'str'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1567\n", + "The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 911\n", + "'winner / nominee(s)'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▍ | 600/4257 [02:50<25:26, 2.40 examples/s]" + "Map (num_proc=16): 16%|█▌ | 671/4257 [03:08<19:25, 3.08 examples/s]" ] }, { @@ -9463,21 +18294,22 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▍ | 601/4257 [02:50<21:31, 2.83 examples/s]" + "Map (num_proc=16): 16%|█▌ | 673/4257 [03:08<15:20, 3.89 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] @@ -9486,35 +18318,27 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▍ | 603/4257 [02:51<15:20, 3.97 examples/s]" + "Map (num_proc=16): 16%|█▌ | 675/4257 [03:09<12:58, 4.60 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 637\n", - "single positional indexer is out-of-bounds\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▍ | 604/4257 [02:51<17:33, 3.47 examples/s]" + "Map (num_proc=16): 16%|█▌ | 676/4257 [03:09<14:03, 4.24 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -9524,30 +18348,33 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▍ | 606/4257 [02:51<13:46, 4.42 examples/s]" + "Map (num_proc=16): 16%|█▌ | 677/4257 [03:09<14:56, 3.99 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▍ | 607/4257 [02:52<13:20, 4.56 examples/s]" + "Map (num_proc=16): 16%|█▌ | 678/4257 [03:10<13:37, 4.38 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1249\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -9557,41 +18384,53 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▍ | 608/4257 [02:52<13:52, 4.38 examples/s]" + "Map (num_proc=16): 16%|█▌ | 681/4257 [03:10<10:01, 5.95 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 244\n", + "invalid syntax (, line 1)\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 638\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 82\n", + "'games'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRREEEERRRRRRR 14905\n", - "\n", - "left side of interval must be <= right side'>' not supported between instances of 'str' and 'int'\n", - "\n", + "EEEERRRRRRR 796\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 556\n", + "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 322\n", + "Can only use .dt accessor with datetimelike values\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▍ | 611/4257 [02:52<13:14, 4.59 examples/s]" + "Map (num_proc=16): 16%|█▌ | 682/4257 [03:11<20:18, 2.93 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", + "\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1252\n", + "'swim'\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -9600,7 +18439,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▍ | 613/4257 [02:53<11:46, 5.16 examples/s]" + "Map (num_proc=16): 16%|█▌ | 685/4257 [03:11<15:46, 3.77 examples/s]" ] }, { @@ -9608,12 +18447,6 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1100\n", - "'attorney general'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -9621,58 +18454,47 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 14%|█▍ | 616/4257 [02:53<11:23, 5.33 examples/s]" + "Map (num_proc=16): 16%|█▌ | 686/4257 [03:12<16:14, 3.66 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n", - "'brazil scorers'" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▍ | 618/4257 [02:53<09:58, 6.08 examples/s]" + "Map (num_proc=16): 16%|█▌ | 687/4257 [03:12<16:59, 3.50 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'EEEERRRRRRR\n", - " 'str' object is not callable81\n", - "\n" + "EEEERRRRRRR 1570\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▍ | 621/4257 [02:54<10:05, 6.01 examples/s]" + "Map (num_proc=16): 16%|█▌ | 688/4257 [03:13<23:50, 2.49 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Could not convert string 'raymond felton (23)stephen jackson (30)stephen jackson (26)stephen jackson (22)stephen jackson (33)gerald wallace (21)stephen jackson (29)stephen jackson (35)gerald wallace (32)gerald wallace (27)' to numeric\n", - "EEEERRRRRRR 404\n", - "'location'\n", - "EEEERRRRRRR 796\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 405\n", + "unsupported operand type(s) for -: 'str' and 'str'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -9680,7 +18502,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▍ | 622/4257 [02:54<11:57, 5.07 examples/s]" + "Map (num_proc=16): 16%|█▌ | 689/4257 [03:13<26:14, 2.27 examples/s]" ] }, { @@ -9694,28 +18516,26 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▍ | 623/4257 [02:55<12:03, 5.03 examples/s]" + "Map (num_proc=16): 16%|█▌ | 690/4257 [03:14<23:22, 2.54 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1563\n", - "'total score'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 166\n", + "could not convert string to float: '1:46.75'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 556\n", - "Can only use .dt accessor with datetimelike values\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▍ | 625/4257 [02:55<13:21, 4.53 examples/s]" + "Map (num_proc=16): 16%|█▌ | 691/4257 [03:14<21:24, 2.78 examples/s]" ] }, { @@ -9723,8 +18543,9 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 165\n", - "Can only compare identically-labeled Series objects\n", + "EEEERRRRRRR 718\n", + "'date'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -9733,7 +18554,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▍ | 626/4257 [02:55<15:26, 3.92 examples/s]" + "Map (num_proc=16): 16%|█▋ | 692/4257 [03:14<23:19, 2.55 examples/s]" ] }, { @@ -9741,39 +18562,35 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 244\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "'brazil scorers'" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▍ | 627/4257 [02:56<18:01, 3.36 examples/s]" + "Map (num_proc=16): 16%|█▋ | 693/4257 [03:15<21:10, 2.81 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 485\n", - "'winner'\n", - "EEEERRRRRRR 1410\n", - "'date | time | score | set 1 | set 2 | set 3 | total'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", + "'str' object is not callable\n", + "'brazil scorers'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5'str' object is not callable\n", + "\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▍ | 628/4257 [02:56<18:19, 3.30 examples/s]" + "Map (num_proc=16): 16%|█▋ | 696/4257 [03:15<10:47, 5.50 examples/s]" ] }, { @@ -9781,23 +18598,26 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n", + "EEEERRRRRRR 1410\n", + "'>=' not supported between instances of 'str' and 'int'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▍ | 629/4257 [02:56<17:28, 3.46 examples/s]" + "Map (num_proc=16): 16%|█▋ | 698/4257 [03:15<10:35, 5.60 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -9807,17 +18627,18 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▍ | 631/4257 [02:57<17:39, 3.42 examples/s]" + "Map (num_proc=16): 16%|█▋ | 699/4257 [03:15<10:30, 5.64 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 557\n", + "unsupported operand type(s) for -: 'str' and 'str'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -9826,13 +18647,17 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▍ | 633/4257 [02:57<12:24, 4.87 examples/s]" + "Map (num_proc=16): 16%|█▋ | 701/4257 [03:16<14:50, 4.00 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 83\n", + "'deleted row'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -9842,13 +18667,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▍ | 634/4257 [02:57<11:17, 5.35 examples/s]" + "Map (num_proc=16): 17%|█▋ | 703/4257 [03:17<14:11, 4.17 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -9856,43 +18684,44 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▍ | 635/4257 [02:58<13:25, 4.50 examples/s]" + "Map (num_proc=16): 17%|█▋ | 705/4257 [03:17<12:42, 4.66 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 906\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 17\n", + "invalid literal for int() with base 10: '6 - 4 '\n", + "'brazil scorers'" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▍ | 636/4257 [02:58<13:36, 4.43 examples/s]" + "Map (num_proc=16): 17%|█▋ | 707/4257 [03:17<10:39, 5.55 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 717\n", - "could not convert string to float: '50.56.8'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▍ | 637/4257 [02:58<19:17, 3.13 examples/s]" + "Map (num_proc=16): 17%|█▋ | 710/4257 [03:17<08:05, 7.31 examples/s]" ] }, { @@ -9900,6 +18729,8 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 245\n", + "'us open'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -9909,16 +18740,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▌ | 639/4257 [02:59<15:06, 3.99 examples/s]" + "Map (num_proc=16): 17%|█▋ | 711/4257 [03:18<11:49, 5.00 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 1570\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 404\n", - "'location'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -9926,35 +18757,38 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▌ | 640/4257 [02:59<13:12, 4.56 examples/s]" + "Map (num_proc=16): 17%|█▋ | 712/4257 [03:18<15:14, 3.88 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 1109\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 796\n", - "'>=' not supported between instances of 'str' and 'int'\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 1253\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 322\n", + "Out of bounds nanosecond timestamp: march 31, at position 0\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▌ | 642/4257 [02:59<12:07, 4.97 examples/s]" + "Map (num_proc=16): 17%|█▋ | 713/4257 [03:19<18:05, 3.27 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 640\n", + "'This is our God'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] @@ -9963,26 +18797,47 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▌ | 644/4257 [03:00<12:32, 4.80 examples/s]" + "Map (num_proc=16): 17%|█▋ | 714/4257 [03:19<20:26, 2.89 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 17%|█▋ | 715/4257 [03:20<19:52, 2.97 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "EEEERRRRRRR 487\n", + "invalid literal for int() with base 10: 'w'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 405\n", + "single positional indexer is out-of-bounds\n", + "EEEERRRRRRR 913\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "'str' object is not callableGenerating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▌ | 646/4257 [03:00<12:13, 4.92 examples/s]" + "Map (num_proc=16): 17%|█▋ | 716/4257 [03:20<19:30, 3.03 examples/s]" ] }, { @@ -9990,14 +18845,19 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 718\n", + "'Name'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▌ | 648/4257 [03:00<11:37, 5.17 examples/s]" + "Map (num_proc=16): 17%|█▋ | 717/4257 [03:20<21:42, 2.72 examples/s]" ] }, { @@ -10005,27 +18865,28 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 485\n", - "'winner'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "'brazil scorers'EEEERRRRRRR\n", + "'brazil scorers' 'str' object is not callable\n", + "797\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▌ | 649/4257 [03:01<13:13, 4.55 examples/s]" + "Map (num_proc=16): 17%|█▋ | 718/4257 [03:21<22:00, 2.68 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'str' object is not callable\n", + "\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 322\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -10034,32 +18895,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▌ | 650/4257 [03:01<12:05, 4.97 examples/s]" + "Map (num_proc=16): 17%|█▋ | 720/4257 [03:21<15:41, 3.76 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1103\n", - "'location'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 81\n", - "'raymond felton'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1564\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "EEEERRRRRRR 14\n", - "'(' was never closed (, line 1)\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 166\n", - "unsupported operand type(s) for -: 'str' and 'str'\n", - "EEEERRRRRRR 244\n", - "Cannot perform 'ror_' with a dtyped [object] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 83\n", + "'deleted row'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -10069,80 +18914,82 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▌ | 651/4257 [03:02<21:26, 2.80 examples/s]" + "Map (num_proc=16): 17%|█▋ | 721/4257 [03:22<22:44, 2.59 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 17\n", + "'hard'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n" + "Map (num_proc=16): 17%|█▋ | 723/4257 [03:22<19:38, 3.00 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 638\n", - "Can only use .str accessor with string values!\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR " ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▌ | 652/4257 [03:02<24:49, 2.42 examples/s]" + "Map (num_proc=16): 17%|█▋ | 724/4257 [03:23<18:39, 3.16 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "245\n", + "'win-loss'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 404\n", - "invalid literal for int() with base 10: 'l 100'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "EEEERRRRRRR'str' object is not callable \n", - "556" + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▌ | 654/4257 [03:03<22:54, 2.62 examples/s]" + "Map (num_proc=16): 17%|█▋ | 726/4257 [03:23<15:55, 3.69 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n", - "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1410\n", - "invalid syntax (, line 1)\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▌ | 655/4257 [03:03<24:03, 2.49 examples/s]" + "Map (num_proc=16): 17%|█▋ | 727/4257 [03:23<15:45, 3.73 examples/s]" ] }, { @@ -10158,46 +19005,51 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▌ | 656/4257 [03:04<21:54, 2.74 examples/s]" + "Map (num_proc=16): 17%|█▋ | 728/4257 [03:24<15:59, 3.68 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5EEEERRRRRRR\n", + " 1110\n", + "'col'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 167\n", + "positional indexers are out-of-bounds\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▌ | 657/4257 [03:04<19:31, 3.07 examples/s]" + "Map (num_proc=16): 17%|█▋ | 729/4257 [03:24<22:07, 2.66 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", + " 718\n", + "'european record'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1104\n", - "invalid literal for int() with base 10: 'l 99 '\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1251\n", + "EEEERRRRRRR 1254\n", "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 15%|█▌ | 659/4257 [03:05<22:01, 2.72 examples/s]" + "Map (num_proc=16): 17%|█▋ | 731/4257 [03:25<18:01, 3.26 examples/s]" ] }, { @@ -10211,13 +19063,19 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▌ | 660/4257 [03:05<21:11, 2.83 examples/s]" + "Map (num_proc=16): 17%|█▋ | 732/4257 [03:25<18:04, 3.25 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 643\n", + "single positional indexer is out-of-bounds\n", + "EEEERRRRRRR 557\n", + "invalid literal for int() with base 10: '71 + 71 + 65 = 207'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -10227,7 +19085,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▌ | 661/4257 [03:05<21:18, 2.81 examples/s]" + "Map (num_proc=16): 17%|█▋ | 733/4257 [03:25<20:18, 2.89 examples/s]" ] }, { @@ -10235,9 +19093,12 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 796\n", + "EEEERRRRRRR 1571\n", "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 405\n", + "'str' object has no attribute 'astype'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -10246,14 +19107,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▌ | 662/4257 [03:06<22:40, 2.64 examples/s]" + "Map (num_proc=16): 17%|█▋ | 734/4257 [03:26<28:42, 2.05 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -10263,47 +19123,44 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▌ | 664/4257 [03:06<15:20, 3.90 examples/s]" + "Map (num_proc=16): 17%|█▋ | 735/4257 [03:26<24:16, 2.42 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR'brazil scorers' \n", - "717'str' object is not callable\n", - "\n", - "'time'" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▌ | 667/4257 [03:07<13:46, 4.35 examples/s]" + "Map (num_proc=16): 17%|█▋ | 737/4257 [03:27<16:50, 3.48 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 322\n", + "'numpy.bool' object has no attribute 'reset_index'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▌ | 668/4257 [03:07<15:03, 3.97 examples/s]" + "Map (num_proc=16): 17%|█▋ | 739/4257 [03:27<14:59, 3.91 examples/s]" ] }, { @@ -10312,45 +19169,35 @@ "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 16%|█▌ | 669/4257 [03:07<15:05, 3.96 examples/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 486\n", - "unsupported operand type(s) for -: 'str' and 'str'\n", + "EEEERRRRRRR 797\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1567\n", - "The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "EEEERRRRRRR 911\n", - "'winner / nominee(s)'\n", + "EEEERRRRRRR 1110\n", + "'>' not supported between instances of 'str' and 'int'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▌ | 671/4257 [03:08<19:25, 3.08 examples/s]" + "Map (num_proc=16): 17%|█▋ | 741/4257 [03:28<17:57, 3.26 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 914\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -10358,7 +19205,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▌ | 673/4257 [03:08<15:20, 3.89 examples/s]" + "Map (num_proc=16): 17%|█▋ | 743/4257 [03:29<18:02, 3.25 examples/s]" ] }, { @@ -10368,20 +19215,25 @@ "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 718\n", + "'brazil scorers''record set'\n", + "\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▌ | 675/4257 [03:09<12:58, 4.60 examples/s]" + "Map (num_proc=16): 18%|█▊ | 745/4257 [03:29<13:33, 4.32 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -10389,7 +19241,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▌ | 676/4257 [03:09<14:03, 4.24 examples/s]" + "Map (num_proc=16): 18%|█▊ | 746/4257 [03:29<13:49, 4.23 examples/s]" ] }, { @@ -10397,106 +19249,85 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 83\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▌ | 677/4257 [03:09<14:56, 3.99 examples/s]" + "Map (num_proc=16): 18%|█▊ | 748/4257 [03:30<15:05, 3.88 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▌ | 678/4257 [03:10<13:37, 4.38 examples/s]" + "Map (num_proc=16): 18%|█▊ | 749/4257 [03:30<13:46, 4.25 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", + "EEEERRRRRRR 1254\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▌ | 681/4257 [03:10<10:01, 5.95 examples/s]" + "Map (num_proc=16): 18%|█▊ | 750/4257 [03:30<16:59, 3.44 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 244\n", - "invalid syntax (, line 1)\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 638\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 82\n", - "'games'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 796\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 556\n", - "Can only use .dt accessor with datetimelike values\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 322\n", - "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'" + "EEEERRRRRRR 1413\n", + "'>=' not supported between instances of 'str' and 'int'\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▌ | 682/4257 [03:11<20:18, 2.93 examples/s]" + "Map (num_proc=16): 18%|█▊ | 751/4257 [03:31<17:43, 3.30 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n", + "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1252\n", - "'swim'\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▌ | 685/4257 [03:11<15:46, 3.77 examples/s]" + ":1: FutureWarning: Series.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n", + "Map (num_proc=16): 18%|█▊ | 753/4257 [03:31<13:43, 4.25 examples/s]" ] }, { @@ -10504,20 +19335,24 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▌ | 686/4257 [03:12<16:14, 3.66 examples/s]" + "Map (num_proc=16): 18%|█▊ | 754/4257 [03:31<12:54, 4.52 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 17\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -10525,7 +19360,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▌ | 687/4257 [03:12<16:59, 3.50 examples/s]" + "Map (num_proc=16): 18%|█▊ | 755/4257 [03:32<17:19, 3.37 examples/s]" ] }, { @@ -10533,75 +19368,79 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1570\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 168\n", + "single positional indexer is out-of-bounds\n", + "EEEERRRRRRR 1573\n", + "invalid literal for int() with base 10: 'fred jones (23)'\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▌ | 688/4257 [03:13<23:50, 2.49 examples/s]" + "Map (num_proc=16): 18%|█▊ | 756/4257 [03:32<17:02, 3.42 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 405\n", - "unsupported operand type(s) for -: 'str' and 'str'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▌ | 689/4257 [03:13<26:14, 2.27 examples/s]" + "Map (num_proc=16): 18%|█▊ | 758/4257 [03:32<14:45, 3.95 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▌ | 690/4257 [03:14<23:22, 2.54 examples/s]" + "Map (num_proc=16): 18%|█▊ | 759/4257 [03:32<13:57, 4.18 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 166\n", - "could not convert string to float: '1:46.75'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▌ | 691/4257 [03:14<21:24, 2.78 examples/s]" + "Map (num_proc=16): 18%|█▊ | 760/4257 [03:33<13:14, 4.40 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 557\n", + "'<' not supported between instances of 'str' and 'int'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 718\n", - "'date'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -10611,7 +19450,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▋ | 692/4257 [03:14<23:19, 2.55 examples/s]" + "Map (num_proc=16): 18%|█▊ | 761/4257 [03:33<12:15, 4.76 examples/s]" ] }, { @@ -10619,26 +19458,28 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'" + "EEEERRRRRRR EEEERRRRRRR487 \n", + "798'location'\n", + "\n", + "single positional indexer is out-of-bounds\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▋ | 693/4257 [03:15<21:10, 2.81 examples/s]" + "Map (num_proc=16): 18%|█▊ | 762/4257 [03:33<11:55, 4.89 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n", - "'str' object is not callable\n", - "'brazil scorers'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5'str' object is not callable\n", - "\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 245\n", + "'win-loss'\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -10647,7 +19488,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▋ | 696/4257 [03:15<10:47, 5.50 examples/s]" + "Map (num_proc=16): 18%|█▊ | 763/4257 [03:33<16:47, 3.47 examples/s]" ] }, { @@ -10658,9 +19499,6 @@ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n", - "EEEERRRRRRR 1410\n", - "'>=' not supported between instances of 'str' and 'int'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -10668,13 +19506,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▋ | 698/4257 [03:15<10:35, 5.60 examples/s]" + "Map (num_proc=16): 18%|█▊ | 765/4257 [03:34<15:10, 3.84 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 1112\n", + "'cardinality'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -10684,7 +19525,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▋ | 699/4257 [03:15<10:30, 5.64 examples/s]" + "Map (num_proc=16): 18%|█▊ | 766/4257 [03:34<15:06, 3.85 examples/s]" ] }, { @@ -10693,92 +19534,97 @@ "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 557\n", - "unsupported operand type(s) for -: 'str' and 'str'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 1413\n", + "single positional indexer is out-of-bounds\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 16%|█▋ | 701/4257 [03:16<14:50, 4.00 examples/s]" + "Map (num_proc=16): 18%|█▊ | 768/4257 [03:35<15:59, 3.64 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "EEEERRRRRRR 83\n", - "'deleted row'\n", + "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 915\n", + "'Total'\n", + "EEEERRRRRRR 718\n", + "'Date'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 324\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 703/4257 [03:17<14:11, 4.17 examples/s]" + "Map (num_proc=16): 18%|█▊ | 769/4257 [03:36<23:20, 2.49 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 705/4257 [03:17<12:42, 4.66 examples/s]" + "Map (num_proc=16): 18%|█▊ | 770/4257 [03:36<26:11, 2.22 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 17\n", - "invalid literal for int() with base 10: '6 - 4 '\n", - "'brazil scorers'" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1254\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "'brazil scorers'\n", + "'str' object is not callableGenerating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 707/4257 [03:17<10:39, 5.55 examples/s]" + "Map (num_proc=16): 18%|█▊ | 773/4257 [03:37<17:02, 3.41 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 710/4257 [03:17<08:05, 7.31 examples/s]" + "Map (num_proc=16): 18%|█▊ | 774/4257 [03:37<15:55, 3.65 examples/s]" ] }, { @@ -10786,8 +19632,11 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 245\n", - "'us open'\n", + "'brazil scorers''brazil scorers'\n", + "\n", + "'str' object is not callable'str' object is not callable\n", + "\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -10797,16 +19646,18 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 711/4257 [03:18<11:49, 5.00 examples/s]" + "Map (num_proc=16): 18%|█▊ | 777/4257 [03:37<13:48, 4.20 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1570\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 18\n", + "'str' object has no attribute 'sum'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -10814,21 +19665,15 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 712/4257 [03:18<15:14, 3.88 examples/s]" + "Map (num_proc=16): 18%|█▊ | 780/4257 [03:38<14:11, 4.08 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1109\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1253\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "EEEERRRRRRR 322\n", - "Out of bounds nanosecond timestamp: march 31, at position 0\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] @@ -10837,15 +19682,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 713/4257 [03:19<18:05, 3.27 examples/s]" + "Map (num_proc=16): 18%|█▊ | 782/4257 [03:39<13:52, 4.17 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 640\n", - "'This is our God'\n", + "EEEERRRRRRR 557\n", + "Cannot convert non-finite values (NA or inf) to integer\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] @@ -10854,13 +19700,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 714/4257 [03:19<20:26, 2.89 examples/s]" + "Map (num_proc=16): 18%|█▊ | 784/4257 [03:39<12:40, 4.57 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -10870,42 +19719,60 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 715/4257 [03:20<19:52, 2.97 examples/s]" + "Map (num_proc=16): 18%|█▊ | 786/4257 [03:39<10:17, 5.63 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 487\n", - "invalid literal for int() with base 10: 'w'\n", + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 799\n", + "invalid literal for int() with base 10: 'postponed'\n", + "EEEERRRRRRR 407\n", + "'name'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1413\n", + "'>=' not supported between instances of 'str' and 'int'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 169\n", + "'50cc'\n", + "EEEERRRRRRR 718\n", + "'Date'\n", + "EEEERRRRRRR 1116\n", + "invalid syntax (, line 1)\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 405\n", - "single positional indexer is out-of-bounds\n", - "EEEERRRRRRR 913\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "'brazil scorers'\n", - "'str' object is not callableGenerating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n" + "EEEERRRRRRR'str' object is not callable \n", + "1576" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 716/4257 [03:20<19:30, 3.03 examples/s]" + "Map (num_proc=16): 19%|█▊ | 788/4257 [03:41<20:51, 2.77 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "\n", + "'col'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 718\n", - "'Name'\n", + "EEEERRRRRRR 644\n", + "0\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 324\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -10914,7 +19781,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 717/4257 [03:20<21:42, 2.72 examples/s]" + "Map (num_proc=16): 19%|█▊ | 789/4257 [03:41<24:23, 2.37 examples/s]" ] }, { @@ -10922,28 +19789,27 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'EEEERRRRRRR\n", - "'brazil scorers' 'str' object is not callable\n", - "797\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 718/4257 [03:21<22:00, 2.68 examples/s]" + "Map (num_proc=16): 19%|█▊ | 790/4257 [03:42<25:15, 2.29 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'str' object is not callable\n", - "\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 915\n", + "'brazil 100%'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -10952,7 +19818,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 720/4257 [03:21<15:41, 3.76 examples/s]" + "Map (num_proc=16): 19%|█▊ | 792/4257 [03:42<20:16, 2.85 examples/s]" ] }, { @@ -10960,8 +19826,8 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 83\n", - "'deleted row'\n", + "EEEERRRRRRR 557\n", + "single positional indexer is out-of-bounds\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -10971,29 +19837,21 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 721/4257 [03:22<22:44, 2.59 examples/s]" + "Map (num_proc=16): 19%|█▊ | 793/4257 [03:43<22:21, 2.58 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 17\n", - "'hard'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 723/4257 [03:22<19:38, 3.00 examples/s]" + "Map (num_proc=16): 19%|█▊ | 794/4257 [03:43<21:19, 2.71 examples/s]" ] }, { @@ -11001,26 +19859,24 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR " + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 724/4257 [03:23<18:39, 3.16 examples/s]" + "Map (num_proc=16): 19%|█▊ | 795/4257 [03:43<20:45, 2.78 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "245\n", - "'win-loss'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 487\n", + "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -11030,23 +19886,27 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 726/4257 [03:23<15:55, 3.69 examples/s]" + "Map (num_proc=16): 19%|█▊ | 796/4257 [03:44<18:59, 3.04 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 83\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 727/4257 [03:23<15:45, 3.73 examples/s]" + "Map (num_proc=16): 19%|█▊ | 798/4257 [03:45<20:43, 2.78 examples/s]" ] }, { @@ -11054,7 +19914,8 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5'brazil scorers'\n", + "\n", "'str' object is not callable\n" ] }, @@ -11062,42 +19923,33 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 728/4257 [03:24<15:59, 3.68 examples/s]" + "Map (num_proc=16): 19%|█▉ | 800/4257 [03:45<14:21, 4.01 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5EEEERRRRRRR\n", - " 1110\n", - "'col'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 167\n", - "positional indexers are out-of-bounds\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR" + "EEEERRRRRRR 407\n", + "'number'\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 729/4257 [03:24<22:07, 2.66 examples/s]" + "Map (num_proc=16): 19%|█▉ | 801/4257 [03:45<14:43, 3.91 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " 718\n", - "'european record'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1254\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -11106,13 +19958,19 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 731/4257 [03:25<18:01, 3.26 examples/s]" + "Map (num_proc=16): 19%|█▉ | 802/4257 [03:45<18:06, 3.18 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "EEEERRRRRRR 557\n", + "'<=' not supported between instances of 'str' and 'int'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -11120,7 +19978,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 732/4257 [03:25<18:04, 3.25 examples/s]" + "Map (num_proc=16): 19%|█▉ | 804/4257 [03:46<14:07, 4.08 examples/s]" ] }, { @@ -11128,11 +19986,8 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 643\n", - "single positional indexer is out-of-bounds\n", - "EEEERRRRRRR 557\n", - "invalid literal for int() with base 10: '71 + 71 + 65 = 207'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1254\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -11142,82 +19997,76 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 733/4257 [03:25<20:18, 2.89 examples/s]" + "Map (num_proc=16): 19%|█▉ | 805/4257 [03:46<15:14, 3.78 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1571\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 405\n", - "'str' object has no attribute 'astype'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 734/4257 [03:26<28:42, 2.05 examples/s]" + "Map (num_proc=16): 19%|█▉ | 806/4257 [03:46<17:11, 3.34 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 735/4257 [03:26<24:16, 2.42 examples/s]" + "Map (num_proc=16): 19%|█▉ | 807/4257 [03:47<17:05, 3.36 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", + "EEEERRRRRRR 1415\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 246\n", + "'in ' requires string as left operand, not int\n", + "'brazil scorers'Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 737/4257 [03:27<16:50, 3.48 examples/s]" + "Map (num_proc=16): 19%|█▉ | 809/4257 [03:47<15:29, 3.71 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 322\n", - "'numpy.bool' object has no attribute 'reset_index'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 739/4257 [03:27<14:59, 3.91 examples/s]" + "Map (num_proc=16): 19%|█▉ | 810/4257 [03:47<15:17, 3.76 examples/s]" ] }, { @@ -11225,57 +20074,52 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 797\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1110\n", - "'>' not supported between instances of 'str' and 'int'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 324'brazil scorers'\n", + "\n", + "'str' object is not callableThe truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 741/4257 [03:28<17:57, 3.26 examples/s]" + "Map (num_proc=16): 19%|█▉ | 812/4257 [03:48<11:20, 5.06 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 914\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 799\n", + "'june 9'\n", + "EEEERRRRRRR 170\n", + "'detectable by'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 17%|█▋ | 743/4257 [03:29<18:02, 3.25 examples/s]" + "Map (num_proc=16): 19%|█▉ | 813/4257 [03:48<14:18, 4.01 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "EEEERRRRRRR 718\n", - "'brazil scorers''record set'\n", - "\n", + "'location'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", "'str' object is not callable\n" ] }, @@ -11283,14 +20127,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 745/4257 [03:29<13:33, 4.32 examples/s]" + "Map (num_proc=16): 19%|█▉ | 814/4257 [03:49<19:58, 2.87 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -11298,7 +20141,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 746/4257 [03:29<13:49, 4.23 examples/s]" + "Map (num_proc=16): 19%|█▉ | 815/4257 [03:49<16:32, 3.47 examples/s]" ] }, { @@ -11306,9 +20149,8 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 83\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 646\n", + "Cannot perform 'rand_' with a dtyped [int64] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -11316,38 +20158,45 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 748/4257 [03:30<15:05, 3.88 examples/s]" + "Map (num_proc=16): 19%|█▉ | 816/4257 [03:49<15:44, 3.64 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 916\n", + "\"None of [Index([2006, 2007], dtype='int64')] are in the [index]\"\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 749/4257 [03:30<13:46, 4.25 examples/s]" + "Map (num_proc=16): 19%|█▉ | 817/4257 [03:50<20:34, 2.79 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1254\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "EEEERRRRRRR 1576\n", + "'col 1'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 750/4257 [03:30<16:59, 3.44 examples/s]" + "Map (num_proc=16): 19%|█▉ | 818/4257 [03:50<22:02, 2.60 examples/s]" ] }, { @@ -11355,17 +20204,14 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1413\n", - "'>=' not supported between instances of 'str' and 'int'\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 751/4257 [03:31<17:43, 3.30 examples/s]" + "Map (num_proc=16): 19%|█▉ | 820/4257 [03:50<15:16, 3.75 examples/s]" ] }, { @@ -11375,7 +20221,6 @@ "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -11383,14 +20228,19 @@ "name": "stderr", "output_type": "stream", "text": [ - ":1: FutureWarning: Series.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.\n", - "Map (num_proc=16): 18%|█▊ | 753/4257 [03:31<13:43, 4.25 examples/s]" + "Map (num_proc=16): 19%|█▉ | 822/4257 [03:51<10:54, 5.25 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 84\n", + "Can only use .dt accessor with datetimelike values\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 557\n", + "invalid literal for int() with base 10: '71 + 71 + 65 = 207'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -11400,16 +20250,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 754/4257 [03:31<12:54, 4.52 examples/s]" + "Map (num_proc=16): 19%|█▉ | 823/4257 [03:52<20:41, 2.77 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 17\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -11417,35 +20267,37 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 755/4257 [03:32<17:19, 3.37 examples/s]" + "Map (num_proc=16): 19%|█▉ | 825/4257 [03:52<15:38, 3.66 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 168\n", - "single positional indexer is out-of-bounds\n", - "EEEERRRRRRR 1573\n", - "invalid literal for int() with base 10: 'fred jones (23)'\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 756/4257 [03:32<17:02, 3.42 examples/s]" + "Map (num_proc=16): 19%|█▉ | 828/4257 [03:52<11:04, 5.16 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 487\n", + "'location'\n", "'brazil scorers'\n", "'str' object is not callable\n", + "EEEERRRRRRR 408\n", + "positional indexers are out-of-bounds\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", @@ -11458,45 +20310,48 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 758/4257 [03:32<14:45, 3.95 examples/s]" + "Map (num_proc=16): 19%|█▉ | 830/4257 [03:53<12:44, 4.48 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 759/4257 [03:32<13:57, 4.18 examples/s]" + "Map (num_proc=16): 20%|█▉ | 831/4257 [03:53<11:58, 4.77 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1415\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 760/4257 [03:33<13:14, 4.40 examples/s]" + "Map (num_proc=16): 20%|█▉ | 832/4257 [03:53<14:17, 4.00 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 557\n", - "'<' not supported between instances of 'str' and 'int'\n", + "EEEERRRRRRR 324\n", + "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -11507,7 +20362,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 761/4257 [03:33<12:15, 4.76 examples/s]" + "Map (num_proc=16): 20%|█▉ | 833/4257 [03:54<15:17, 3.73 examples/s]" ] }, { @@ -11515,28 +20370,32 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR EEEERRRRRRR487 \n", - "798'location'\n", - "\n", - "single positional indexer is out-of-bounds\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 1255\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "EEEERRRRRRR 1117\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 762/4257 [03:33<11:55, 4.89 examples/s]" + "Map (num_proc=16): 20%|█▉ | 834/4257 [03:54<15:19, 3.72 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "EEEERRRRRRR 'str' object is not callable20\n", + "\n", + "Can only compare identically-labeled Series objects\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 245\n", - "'win-loss'\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -11545,17 +20404,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 763/4257 [03:33<16:47, 3.47 examples/s]" + "Map (num_proc=16): 20%|█▉ | 836/4257 [03:54<12:58, 4.39 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -11563,26 +20418,21 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 765/4257 [03:34<15:10, 3.84 examples/s]" + "Map (num_proc=16): 20%|█▉ | 837/4257 [03:54<12:48, 4.45 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1112\n", - "'cardinality'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 766/4257 [03:34<15:06, 3.85 examples/s]" + "Map (num_proc=16): 20%|█▉ | 838/4257 [03:55<12:20, 4.62 examples/s]" ] }, { @@ -11590,9 +20440,6 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1413\n", - "single positional indexer is out-of-bounds\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -11600,7 +20447,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 768/4257 [03:35<15:59, 3.64 examples/s]" + "Map (num_proc=16): 20%|█▉ | 840/4257 [03:55<16:28, 3.46 examples/s]" ] }, { @@ -11608,64 +20455,71 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 83\n", - "Can only use .dt accessor with datetimelike values\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 915\n", - "'Total'\n", - "EEEERRRRRRR 718\n", - "'Date'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 324\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n" + "'brazil scorers'EEEERRRRRRR\n", + " 'str' object is not callable1577\n", + "EEEERRRRRRR\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 769/4257 [03:36<23:20, 2.49 examples/s]" + "Map (num_proc=16): 20%|█▉ | 841/4257 [03:56<17:48, 3.20 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + " The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().170\n", + "\n", + "'detectable by'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 487\n", + "Can only use .dt accessor with datetimelike values\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 719\n", + "'first_name'\n", + "EEEERRRRRRR 247\n", + "'>=' not supported between instances of 'str' and 'float'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 799\n", + "'<=' not supported between instances of 'str' and 'int'\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 770/4257 [03:36<26:11, 2.22 examples/s]" + "Map (num_proc=16): 20%|█▉ | 843/4257 [03:57<21:22, 2.66 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1254\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1417\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "'brazil scorers'\n", - "'str' object is not callableGenerating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n" + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 773/4257 [03:37<17:02, 3.41 examples/s]" + "Map (num_proc=16): 20%|█▉ | 845/4257 [03:57<20:52, 2.72 examples/s]" ] }, { @@ -11673,27 +20527,20 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 774/4257 [03:37<15:55, 3.65 examples/s]" + "Map (num_proc=16): 20%|█▉ | 846/4257 [03:58<20:29, 2.77 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers''brazil scorers'\n", - "\n", - "'str' object is not callable'str' object is not callable\n", - "\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -11703,18 +20550,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 777/4257 [03:37<13:48, 4.20 examples/s]" + "Map (num_proc=16): 20%|█▉ | 847/4257 [03:58<17:38, 3.22 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 84\n", + "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 18\n", - "'str' object has no attribute 'sum'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -11722,7 +20567,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 780/4257 [03:38<14:11, 4.08 examples/s]" + "Map (num_proc=16): 20%|█▉ | 848/4257 [03:58<18:53, 3.01 examples/s]" ] }, { @@ -11732,32 +20577,38 @@ "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 782/4257 [03:39<13:52, 4.17 examples/s]" + "Map (num_proc=16): 20%|█▉ | 850/4257 [03:58<13:46, 4.12 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 557\n", - "Cannot convert non-finite values (NA or inf) to integer\n", + "EEEERRRRRRR 919\n", + "index 12 is out of bounds for axis 0 with size 12\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 408\n", + "Cannot perform 'ror_' with a dtyped [object] array and scalar of type [bool]\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 784/4257 [03:39<12:40, 4.57 examples/s]" + "Map (num_proc=16): 20%|█▉ | 851/4257 [03:59<18:40, 3.04 examples/s]" ] }, { @@ -11768,6 +20619,11 @@ "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 647\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 558\n", + "\"None of [Index([ -4046, 25168, -5356, -8483, -217, -482, -2510, -1224, -911,\\n -3315, -311, -2379, -745, -348, -11543],\\n dtype='int64')] are in the [columns]\"\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -11776,86 +20632,58 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 18%|█▊ | 786/4257 [03:39<10:17, 5.63 examples/s]" + "Map (num_proc=16): 20%|██ | 853/4257 [04:00<16:23, 3.46 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 799\n", - "invalid literal for int() with base 10: 'postponed'\n", - "EEEERRRRRRR 407\n", - "'name'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1413\n", - "'>=' not supported between instances of 'str' and 'int'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 169\n", - "'50cc'\n", - "EEEERRRRRRR 718\n", - "'Date'\n", - "EEEERRRRRRR 1116\n", - "invalid syntax (, line 1)\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "EEEERRRRRRR'str' object is not callable \n", - "1576" + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▊ | 788/4257 [03:41<20:51, 2.77 examples/s]" + "Map (num_proc=16): 20%|██ | 854/4257 [04:00<15:35, 3.64 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n", - "'col'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 644\n", - "0\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 324\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▊ | 789/4257 [03:41<24:23, 2.37 examples/s]" + "Map (num_proc=16): 20%|██ | 856/4257 [04:00<13:42, 4.14 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 20\n", + "single positional indexer is out-of-bounds\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▊ | 790/4257 [03:42<25:15, 2.29 examples/s]" + "Map (num_proc=16): 20%|██ | 858/4257 [04:00<10:34, 5.36 examples/s]" ] }, { @@ -11864,8 +20692,8 @@ "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 915\n", - "'brazil 100%'\n", + "EEEERRRRRRR 1577\n", + "'august 24'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -11875,26 +20703,21 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▊ | 792/4257 [03:42<20:16, 2.85 examples/s]" + "Map (num_proc=16): 20%|██ | 859/4257 [04:01<15:20, 3.69 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 557\n", - "single positional indexer is out-of-bounds\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▊ | 793/4257 [03:43<22:21, 2.58 examples/s]" + "Map (num_proc=16): 20%|██ | 860/4257 [04:01<16:05, 3.52 examples/s]" ] }, { @@ -11908,32 +20731,36 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▊ | 794/4257 [03:43<21:19, 2.71 examples/s]" + "Map (num_proc=16): 20%|██ | 861/4257 [04:02<16:12, 3.49 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "'str' object is not callable\n", + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▊ | 795/4257 [03:43<20:45, 2.78 examples/s]" + "Map (num_proc=16): 20%|██ | 864/4257 [04:02<12:14, 4.62 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 487\n", - "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 171\n", + "'time'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -11943,19 +20770,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▊ | 796/4257 [03:44<18:59, 3.04 examples/s]" + "Map (num_proc=16): 20%|██ | 865/4257 [04:02<15:03, 3.75 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 83\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -11963,7 +20785,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▊ | 798/4257 [03:45<20:43, 2.78 examples/s]" + "Map (num_proc=16): 20%|██ | 867/4257 [04:03<12:20, 4.58 examples/s]" ] }, { @@ -11971,8 +20793,9 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5'brazil scorers'\n", - "\n", + "EEEERRRRRRR 719\n", + "'title'\n", + "'brazil scorers'\n", "'str' object is not callable\n" ] }, @@ -11980,7 +20803,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▉ | 800/4257 [03:45<14:21, 4.01 examples/s]" + "Map (num_proc=16): 20%|██ | 868/4257 [04:03<12:06, 4.67 examples/s]" ] }, { @@ -11988,23 +20811,23 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 407\n", - "'number'\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▉ | 801/4257 [03:45<14:43, 3.91 examples/s]" + "Map (num_proc=16): 20%|██ | 869/4257 [04:03<13:20, 4.23 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 1118\n", + "The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -12015,7 +20838,21 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▉ | 802/4257 [03:45<18:06, 3.18 examples/s]" + "Map (num_proc=16): 20%|██ | 871/4257 [04:03<10:37, 5.31 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 20%|██ | 872/4257 [04:04<09:59, 5.65 examples/s]" ] }, { @@ -12024,18 +20861,19 @@ "text": [ "'brazil scorers'\n", "'str' object is not callable\n", - "EEEERRRRRRR 557\n", - "'<=' not supported between instances of 'str' and 'int'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 'brazil scorers'1259\n", + "\n", + "'str' object is not callableinvalid literal for int() with base 10: '15 , 18 '\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▉ | 804/4257 [03:46<14:07, 4.08 examples/s]" + "Map (num_proc=16): 21%|██ | 874/4257 [04:04<08:50, 6.38 examples/s]" ] }, { @@ -12043,32 +20881,35 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1254\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "EEEERRRRRRR Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.51417\n", + "\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▉ | 805/4257 [03:46<15:14, 3.78 examples/s]" + "Map (num_proc=16): 21%|██ | 876/4257 [04:04<09:21, 6.02 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▉ | 806/4257 [03:46<17:11, 3.34 examples/s]" + "Map (num_proc=16): 21%|██ | 878/4257 [04:05<11:44, 4.79 examples/s]" ] }, { @@ -12082,21 +20923,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▉ | 807/4257 [03:47<17:05, 3.36 examples/s]" + "Map (num_proc=16): 21%|██ | 879/4257 [04:05<10:52, 5.18 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1415\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "EEEERRRRRRR 246\n", - "'in ' requires string as left operand, not int\n", - "'brazil scorers'Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -12107,55 +20940,58 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▉ | 809/4257 [03:47<15:29, 3.71 examples/s]" + "Map (num_proc=16): 21%|██ | 881/4257 [04:05<09:59, 5.63 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 84\n", + "'str' object has no attribute 'month'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 801\n", + "Can only compare identically-labeled Series objects\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRREEEERRRRRRR 408488\n", + "\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Can only use .dt accessor with datetimelike values\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▉ | 810/4257 [03:47<15:17, 3.76 examples/s]" + "Map (num_proc=16): 21%|██ | 882/4257 [04:06<15:23, 3.65 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 324'brazil scorers'\n", - "\n", - "'str' object is not callableThe truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "\n" + "EEEERRRRRRR 921\n", + "'no'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▉ | 812/4257 [03:48<11:20, 5.06 examples/s]" + "Map (num_proc=16): 21%|██ | 883/4257 [04:06<16:29, 3.41 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 799\n", - "'june 9'\n", - "EEEERRRRRRR 170\n", - "'detectable by'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -12165,7 +21001,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▉ | 813/4257 [03:48<14:18, 4.01 examples/s]" + "Map (num_proc=16): 21%|██ | 884/4257 [04:06<15:10, 3.70 examples/s]" ] }, { @@ -12173,8 +21009,6 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 718\n", - "'location'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -12184,13 +21018,17 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▉ | 814/4257 [03:49<19:58, 2.87 examples/s]" + "Map (num_proc=16): 21%|██ | 886/4257 [04:07<12:50, 4.37 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 21\n", + "unsupported operand type(s) for -: 'str' and 'str'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -12198,16 +21036,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▉ | 815/4257 [03:49<16:32, 3.47 examples/s]" + "Map (num_proc=16): 21%|██ | 888/4257 [04:07<14:08, 3.97 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 646\n", - "Cannot perform 'rand_' with a dtyped [int64] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -12215,52 +21050,46 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▉ | 816/4257 [03:49<15:44, 3.64 examples/s]" + ":1: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 916\n", - "\"None of [Index([2006, 2007], dtype='int64')] are in the [index]\"\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 558\n", + "unsupported operand type(s) for -: 'str' and 'str'\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▉ | 817/4257 [03:50<20:34, 2.79 examples/s]" + "Map (num_proc=16): 21%|██ | 889/4257 [04:08<14:36, 3.84 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1576\n", - "'col 1'\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▉ | 818/4257 [03:50<22:02, 2.60 examples/s]" + "Map (num_proc=16): 21%|██ | 891/4257 [04:08<12:29, 4.49 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -12268,7 +21097,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▉ | 820/4257 [03:50<15:16, 3.75 examples/s]" + "Map (num_proc=16): 21%|██ | 892/4257 [04:08<12:56, 4.34 examples/s]" ] }, { @@ -12278,26 +21107,28 @@ "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 648\n", + "'team'\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▉ | 822/4257 [03:51<10:54, 5.25 examples/s]" + "Map (num_proc=16): 21%|██ | 894/4257 [04:09<13:14, 4.23 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 84\n", - "Can only use .dt accessor with datetimelike values\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 557\n", - "invalid literal for int() with base 10: '71 + 71 + 65 = 207'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -12307,56 +21138,59 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▉ | 823/4257 [03:52<20:41, 2.77 examples/s]" + "Map (num_proc=16): 21%|██ | 896/4257 [04:09<12:45, 4.39 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 171\n", + "'time'\n", + "EEEERRRRRRR 1583\n", + "invalid literal for int() with base 10: 'l 28 '\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▉ | 825/4257 [03:52<15:38, 3.66 examples/s]" + "Map (num_proc=16): 21%|██ | 897/4257 [04:09<12:36, 4.44 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▉ | 828/4257 [03:52<11:04, 5.16 examples/s]" + "Map (num_proc=16): 21%|██ | 899/4257 [04:10<12:54, 4.34 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 487\n", - "'location'\n", + " 720\n", + "Lengths must match to compare\n", "'brazil scorers'\n", "'str' object is not callable\n", - "EEEERRRRRRR 408\n", - "positional indexers are out-of-bounds\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1261\n", + "'name'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -12367,21 +21201,23 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 19%|█▉ | 830/4257 [03:53<12:44, 4.48 examples/s]" + "Map (num_proc=16): 21%|██ | 901/4257 [04:10<12:35, 4.44 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 921\n", + "'no'\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|█▉ | 831/4257 [03:53<11:58, 4.77 examples/s]" + "Map (num_proc=16): 21%|██ | 902/4257 [04:11<13:02, 4.29 examples/s]" ] }, { @@ -12389,29 +21225,42 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1415\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|█▉ | 832/4257 [03:53<14:17, 4.00 examples/s]" + "Map (num_proc=16): 21%|██ | 904/4257 [04:11<12:38, 4.42 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 324\n", - "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 85\n", + "Can only use .dt accessor with datetimelike values\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 21%|██▏ | 905/4257 [04:11<15:27, 3.62 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", + "'str' object is not callable'brazil scorers'\n", + "\n", "'str' object is not callable\n" ] }, @@ -12419,7 +21268,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|█▉ | 833/4257 [03:54<15:17, 3.73 examples/s]" + "Map (num_proc=16): 21%|██▏ | 906/4257 [04:12<15:58, 3.49 examples/s]" ] }, { @@ -12427,69 +21276,69 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1255\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", - "EEEERRRRRRR 1117\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|█▉ | 834/4257 [03:54<15:19, 3.72 examples/s]" + "Map (num_proc=16): 21%|██▏ | 908/4257 [04:12<12:34, 4.44 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "EEEERRRRRRR 'str' object is not callable20\n", - "\n", - "Can only compare identically-labeled Series objects\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1120\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 1419\n", + "single positional indexer is out-of-bounds\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|█▉ | 836/4257 [03:54<12:58, 4.39 examples/s]" + "Map (num_proc=16): 21%|██▏ | 909/4257 [04:12<13:29, 4.14 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR'brazil scorers' \n", + "488\n", + "'str' object is not callableCan only use .dt accessor with datetimelike values\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|█▉ | 837/4257 [03:54<12:48, 4.45 examples/s]" + "Map (num_proc=16): 21%|██▏ | 910/4257 [04:13<13:51, 4.03 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|█▉ | 838/4257 [03:55<12:20, 4.62 examples/s]" + "Map (num_proc=16): 21%|██▏ | 911/4257 [04:13<13:36, 4.10 examples/s]" ] }, { @@ -12497,93 +21346,95 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|█▉ | 840/4257 [03:55<16:28, 3.46 examples/s]" + "Map (num_proc=16): 21%|██▏ | 912/4257 [04:13<13:44, 4.06 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'EEEERRRRRRR\n", - " 'str' object is not callable1577\n", - "EEEERRRRRRR\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|█▉ | 841/4257 [03:56<17:48, 3.20 examples/s]" + ":1: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n", + "Map (num_proc=16): 21%|██▏ | 914/4257 [04:13<12:12, 4.56 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().170\n", - "\n", - "'detectable by'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 487\n", - "Can only use .dt accessor with datetimelike values\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 719\n", - "'first_name'\n", - "EEEERRRRRRR 247\n", - "'>=' not supported between instances of 'str' and 'float'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 799\n", - "'<=' not supported between instances of 'str' and 'int'\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 721\n", + "Can only use .dt accessor with datetimelike values\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|█▉ | 843/4257 [03:57<21:22, 2.66 examples/s]" + "Map (num_proc=16): 21%|██▏ | 915/4257 [04:14<18:26, 3.02 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 409'brazil scorers'\n", + "'str' object has no attribute 'astype'\n", + "\n", + "'str' object is not callable\n", "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1417\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 21\n", + "can only concatenate str (not \"int\") to str\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|█▉ | 845/4257 [03:57<20:52, 2.72 examples/s]" + "Map (num_proc=16): 22%|██▏ | 918/4257 [04:15<15:41, 3.54 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 248\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "EEEERRRRRRR 328\n", + "invalid literal for int() with base 10: 'l'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 559\n", + "'years row'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1585\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -12591,13 +21442,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|█▉ | 846/4257 [03:58<20:29, 2.77 examples/s]" + "Map (num_proc=16): 22%|██▏ | 920/4257 [04:16<18:42, 2.97 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -12607,96 +21461,76 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|█▉ | 847/4257 [03:58<17:38, 3.22 examples/s]" + "Map (num_proc=16): 22%|██▏ | 922/4257 [04:16<18:14, 3.05 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 84\n", - "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|█▉ | 848/4257 [03:58<18:53, 3.01 examples/s]" + "Map (num_proc=16): 22%|██▏ | 923/4257 [04:17<17:31, 3.17 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 801\n", + "'score_team_2'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|█▉ | 850/4257 [03:58<13:46, 4.12 examples/s]" + "Map (num_proc=16): 22%|██▏ | 924/4257 [04:17<16:05, 3.45 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 919\n", - "index 12 is out of bounds for axis 0 with size 12\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 408\n", - "Cannot perform 'ror_' with a dtyped [object] array and scalar of type [bool]\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|█▉ | 851/4257 [03:59<18:40, 3.04 examples/s]" + "Map (num_proc=16): 22%|██▏ | 925/4257 [04:17<14:48, 3.75 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 647\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 558\n", - "\"None of [Index([ -4046, 25168, -5356, -8483, -217, -482, -2510, -1224, -911,\\n -3315, -311, -2379, -745, -348, -11543],\\n dtype='int64')] are in the [columns]\"\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|██ | 853/4257 [04:00<16:23, 3.46 examples/s]" + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 648\n", + "The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -12706,13 +21540,18 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|██ | 854/4257 [04:00<15:35, 3.64 examples/s]" + "Map (num_proc=16): 22%|██▏ | 926/4257 [04:18<18:26, 3.01 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 86\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1262\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] @@ -12721,18 +21560,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|██ | 856/4257 [04:00<13:42, 4.14 examples/s]" + "Map (num_proc=16): 22%|██▏ | 927/4257 [04:18<21:25, 2.59 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 20\n", - "single positional indexer is out-of-bounds\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -12740,33 +21574,36 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|██ | 858/4257 [04:00<10:34, 5.36 examples/s]" + "Map (num_proc=16): 22%|██▏ | 928/4257 [04:18<18:03, 3.07 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 721\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1577\n", - "'august 24'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 1120\n", + "'a external (cm 2)'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|██ | 859/4257 [04:01<15:20, 3.69 examples/s]" + "Map (num_proc=16): 22%|██▏ | 929/4257 [04:19<26:12, 2.12 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 1421\n", + "'no opinion'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -12774,50 +21611,54 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|██ | 860/4257 [04:01<16:05, 3.52 examples/s]" + "Map (num_proc=16): 22%|██▏ | 930/4257 [04:20<28:08, 1.97 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers''brazil scorers'\n", + "\n", + "'str' object is not callable'str' object is not callable\n", + "\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|██ | 861/4257 [04:02<16:12, 3.49 examples/s]" + "Map (num_proc=16): 22%|██▏ | 933/4257 [04:20<14:58, 3.70 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|██ | 864/4257 [04:02<12:14, 4.62 examples/s]" + "Map (num_proc=16): 22%|██▏ | 934/4257 [04:20<18:24, 3.01 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 171\n", - "'time'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -12827,14 +21668,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|██ | 865/4257 [04:02<15:03, 3.75 examples/s]" + "Map (num_proc=16): 22%|██▏ | 936/4257 [04:21<14:38, 3.78 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -12842,7 +21682,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|██ | 867/4257 [04:03<12:20, 4.58 examples/s]" + "Map (num_proc=16): 22%|██▏ | 937/4257 [04:21<13:11, 4.19 examples/s]" ] }, { @@ -12850,8 +21690,7 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 719\n", - "'title'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -12860,7 +21699,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|██ | 868/4257 [04:03<12:06, 4.67 examples/s]" + "Map (num_proc=16): 22%|██▏ | 939/4257 [04:21<10:21, 5.34 examples/s]" ] }, { @@ -12868,6 +21707,8 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 411\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -12875,27 +21716,21 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|██ | 869/4257 [04:03<13:20, 4.23 examples/s]" + "Map (num_proc=16): 22%|██▏ | 940/4257 [04:21<11:14, 4.92 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1118\n", - "The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|██ | 871/4257 [04:03<10:37, 5.31 examples/s]" + "Map (num_proc=16): 22%|██▏ | 941/4257 [04:22<10:03, 5.49 examples/s]" ] }, { @@ -12909,28 +21744,26 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 20%|██ | 872/4257 [04:04<09:59, 5.65 examples/s]" + "Map (num_proc=16): 22%|██▏ | 942/4257 [04:22<12:07, 4.56 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 'brazil scorers'1259\n", - "\n", - "'str' object is not callableinvalid literal for int() with base 10: '15 , 18 '\n", - "\n" + "EEEERRRRRRR 649\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██ | 874/4257 [04:04<08:50, 6.38 examples/s]" + "Map (num_proc=16): 22%|██▏ | 944/4257 [04:22<09:52, 5.59 examples/s]" ] }, { @@ -12938,9 +21771,11 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.51417\n", + "EEEERRRRRRR 'brazil scorers'86\n", "\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "'str' object is not callable'result row 2003'\n", + "\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] @@ -12949,13 +21784,15 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██ | 876/4257 [04:04<09:21, 6.02 examples/s]" + "Map (num_proc=16): 22%|██▏ | 946/4257 [04:22<09:04, 6.08 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -12966,28 +21803,29 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██ | 878/4257 [04:05<11:44, 4.79 examples/s]" + "Map (num_proc=16): 22%|██▏ | 948/4257 [04:23<07:43, 7.14 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██ | 879/4257 [04:05<10:52, 5.18 examples/s]" + "Map (num_proc=16): 22%|██▏ | 949/4257 [04:23<07:18, 7.55 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -12997,58 +21835,52 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██ | 881/4257 [04:05<09:59, 5.63 examples/s]" + "Map (num_proc=16): 22%|██▏ | 950/4257 [04:23<07:06, 7.75 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 84\n", - "'str' object has no attribute 'month'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 801\n", - "Can only compare identically-labeled Series objects\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRREEEERRRRRRR 408488\n", - "\n", + "EEEERRRRRRR 488\n", + "'float' object has no attribute 'item'\n", + "EEEERRRRRRR 1265\n", "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Can only use .dt accessor with datetimelike values\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██ | 882/4257 [04:06<15:23, 3.65 examples/s]" + "Map (num_proc=16): 22%|██▏ | 951/4257 [04:23<12:54, 4.27 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 921\n", - "'no'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██ | 883/4257 [04:06<16:29, 3.41 examples/s]" + "Map (num_proc=16): 22%|██▏ | 953/4257 [04:24<10:41, 5.15 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n", + "EEEERRRRRRR 22\n", + "single positional indexer is out-of-bounds\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -13058,7 +21890,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██ | 884/4257 [04:06<15:10, 3.70 examples/s]" + "Map (num_proc=16): 22%|██▏ | 954/4257 [04:24<09:46, 5.63 examples/s]" ] }, { @@ -13067,15 +21899,15 @@ "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 724\n", + "invalid literal for int() with base 10: 'wells (15'\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██ | 886/4257 [04:07<12:50, 4.37 examples/s]" + "Map (num_proc=16): 22%|██▏ | 955/4257 [04:24<11:07, 4.95 examples/s]" ] }, { @@ -13083,9 +21915,6 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 21\n", - "unsupported operand type(s) for -: 'str' and 'str'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -13093,80 +21922,99 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██ | 888/4257 [04:07<14:08, 3.97 examples/s]" + "Map (num_proc=16): 22%|██▏ | 956/4257 [04:24<10:20, 5.32 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 559\n", + "'>=' not supported between instances of 'str' and 'int'\n", + "EEEERRRRRRR 1421\n", + "Could not convert string '28%29%42%20%16%11%' to numeric\n", + "EEEERRRRRRR 249Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", + "invalid literal for int() with base 10: '7 - 5 '\n", + "EEEERRRRRRR 174\n", + "Can only compare identically-labeled Series objects\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1120\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - ":1: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n" + "Map (num_proc=16): 22%|██▏ | 957/4257 [04:25<21:10, 2.60 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 558\n", - "unsupported operand type(s) for -: 'str' and 'str'\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██ | 889/4257 [04:08<14:36, 3.84 examples/s]" + "Map (num_proc=16): 23%|██▎ | 958/4257 [04:25<20:04, 2.74 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", + "EEEERRRRRRR 86\n", + "invalid decimal literal (, line 1)\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 1586\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 411\n", + "'winner'\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██ | 891/4257 [04:08<12:29, 4.49 examples/s]" + "Map (num_proc=16): 23%|██▎ | 959/4257 [04:26<25:29, 2.16 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██ | 892/4257 [04:08<12:56, 4.34 examples/s]" + "Map (num_proc=16): 23%|██▎ | 961/4257 [04:26<17:47, 3.09 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 648\n", - "'team'\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -13175,16 +22023,15 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██ | 894/4257 [04:09<13:14, 4.23 examples/s]" + "Map (num_proc=16): 23%|██▎ | 962/4257 [04:27<22:09, 2.48 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'str' object is not callable\n", + "EEEERRRRRRR 926\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -13195,7 +22042,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██ | 896/4257 [04:09<12:45, 4.39 examples/s]" + "Map (num_proc=16): 23%|██▎ | 963/4257 [04:28<27:18, 2.01 examples/s]" ] }, { @@ -13203,10 +22050,8 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 171\n", - "'time'\n", - "EEEERRRRRRR 1583\n", - "invalid literal for int() with base 10: 'l 28 '\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -13215,7 +22060,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██ | 897/4257 [04:09<12:36, 4.44 examples/s]" + "Map (num_proc=16): 23%|██▎ | 965/4257 [04:28<17:06, 3.21 examples/s]" ] }, { @@ -13223,32 +22068,20 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██ | 899/4257 [04:10<12:54, 4.34 examples/s]" + "Map (num_proc=16): 23%|██▎ | 966/4257 [04:28<15:46, 3.48 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " 720\n", - "Lengths must match to compare\n", - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1261\n", - "'name'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -13258,7 +22091,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██ | 901/4257 [04:10<12:35, 4.44 examples/s]" + "Map (num_proc=16): 23%|██▎ | 967/4257 [04:28<14:45, 3.72 examples/s]" ] }, { @@ -13266,48 +22099,62 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 921\n", - "'no'\n" + "EEEERRRRRRR 803\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 488'brazil scorers'\n", + "\n", + "Can only use .dt accessor with datetimelike values\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██ | 902/4257 [04:11<13:02, 4.29 examples/s]" + "Map (num_proc=16): 23%|██▎ | 968/4257 [04:29<14:48, 3.70 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 328\n", + "invalid syntax (, line 0)\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██ | 904/4257 [04:11<12:38, 4.42 examples/s]" + "Map (num_proc=16): 23%|██▎ | 969/4257 [04:29<14:37, 3.75 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 85\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 724\n", "Can only use .dt accessor with datetimelike values\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██▏ | 905/4257 [04:11<15:27, 3.62 examples/s]" + "Map (num_proc=16): 23%|██▎ | 971/4257 [04:29<13:24, 4.08 examples/s]" ] }, { @@ -13315,70 +22162,66 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable'brazil scorers'\n", - "\n", - "'str' object is not callable\n" + "EEEERRRRRRR 22\n", + "'int' object has no attribute 'shift'\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██▏ | 906/4257 [04:12<15:58, 3.49 examples/s]" + "Map (num_proc=16): 23%|██▎ | 972/4257 [04:30<16:17, 3.36 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 559\n", + "Cannot use method 'nlargest' with dtype object\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██▏ | 908/4257 [04:12<12:34, 4.44 examples/s]" + "Map (num_proc=16): 23%|██▎ | 973/4257 [04:30<14:15, 3.84 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1120\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "EEEERRRRRRR 1419\n", - "single positional indexer is out-of-bounds\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██▏ | 909/4257 [04:12<13:29, 4.14 examples/s]" + "Map (num_proc=16): 23%|██▎ | 974/4257 [04:30<13:36, 4.02 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR'brazil scorers' \n", - "488\n", - "'str' object is not callableCan only use .dt accessor with datetimelike values\n", - "\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██▏ | 910/4257 [04:13<13:51, 4.03 examples/s]" + "Map (num_proc=16): 23%|██▎ | 976/4257 [04:30<11:35, 4.72 examples/s]" ] }, { @@ -13395,41 +22238,40 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██▏ | 911/4257 [04:13<13:36, 4.10 examples/s]" + "Map (num_proc=16): 23%|██▎ | 978/4257 [04:31<09:32, 5.73 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██▏ | 912/4257 [04:13<13:44, 4.06 examples/s]" + "Map (num_proc=16): 23%|██▎ | 979/4257 [04:31<09:59, 5.47 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 1586\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - ":1: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n", - "Map (num_proc=16): 21%|██▏ | 914/4257 [04:13<12:12, 4.56 examples/s]" + "Map (num_proc=16): 23%|██▎ | 980/4257 [04:31<10:55, 5.00 examples/s]" ] }, { @@ -13437,8 +22279,11 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 721\n", - "Can only use .dt accessor with datetimelike values\n", + "EEEERRRRRRR 174\n", + "can only concatenate str (not \"int\") to str\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 926\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -13446,52 +22291,34 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 21%|██▏ | 915/4257 [04:14<18:26, 3.02 examples/s]" + "Map (num_proc=16): 23%|██▎ | 981/4257 [04:32<18:21, 2.97 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 409'brazil scorers'\n", - "'str' object has no attribute 'astype'\n", - "\n", - "'str' object is not callable\n", - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 21\n", - "can only concatenate str (not \"int\") to str\n" + "EEEERRRRRRR 249\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 918/4257 [04:15<15:41, 3.54 examples/s]" + "Map (num_proc=16): 23%|██▎ | 983/4257 [04:32<12:14, 4.46 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 248\n", - "index 0 is out of bounds for axis 0 with size 0\n", - "EEEERRRRRRR 328\n", - "invalid literal for int() with base 10: 'l'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 559\n", - "'years row'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1585\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 87\n", + "'score to par'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -13499,7 +22326,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 920/4257 [04:16<18:42, 2.97 examples/s]" + "Map (num_proc=16): 23%|██▎ | 984/4257 [04:33<17:17, 3.15 examples/s]" ] }, { @@ -13510,6 +22337,9 @@ "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 411\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -13518,7 +22348,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 922/4257 [04:16<18:14, 3.05 examples/s]" + "Map (num_proc=16): 23%|██▎ | 986/4257 [04:33<14:05, 3.87 examples/s]" ] }, { @@ -13527,51 +22357,47 @@ "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 22%|██▏ | 923/4257 [04:17<17:31, 3.17 examples/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "EEEERRRRRRR 801\n", - "'score_team_2'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 1121" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 924/4257 [04:17<16:05, 3.45 examples/s]" + "Map (num_proc=16): 23%|██▎ | 988/4257 [04:33<11:20, 4.81 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 925/4257 [04:17<14:48, 3.75 examples/s]" + "Map (num_proc=16): 23%|██▎ | 989/4257 [04:34<12:35, 4.32 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 649\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -13579,107 +22405,103 @@ "name": "stderr", "output_type": "stream", "text": [ - ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n" + "Map (num_proc=16): 23%|██▎ | 991/4257 [04:34<13:37, 4.00 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 648\n", - "The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 488\n", + "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1586\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 926/4257 [04:18<18:26, 3.01 examples/s]" + "Map (num_proc=16): 23%|██▎ | 992/4257 [04:35<18:02, 3.02 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 86\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1262\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 927/4257 [04:18<21:25, 2.59 examples/s]" + "Map (num_proc=16): 23%|██▎ | 993/4257 [04:35<17:28, 3.11 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 928/4257 [04:18<18:03, 3.07 examples/s]" + "Map (num_proc=16): 23%|██▎ | 996/4257 [04:35<10:54, 4.98 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 721\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1120\n", - "'a external (cm 2)'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR " ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 929/4257 [04:19<26:12, 2.12 examples/s]" + "Map (num_proc=16): 23%|██▎ | 997/4257 [04:36<11:23, 4.77 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1421\n", - "'no opinion'\n", + "1422\n", + "invalid literal for int() with base 10: '2.2 '\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 930/4257 [04:20<28:08, 1.97 examples/s]" + "Map (num_proc=16): 23%|██▎ | 998/4257 [04:36<12:00, 4.52 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers''brazil scorers'\n", - "\n", - "'str' object is not callable'str' object is not callable\n", - "\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -13690,7 +22512,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 933/4257 [04:20<14:58, 3.70 examples/s]" + "Map (num_proc=16): 23%|██▎ | 1000/4257 [04:36<09:43, 5.59 examples/s]" ] }, { @@ -13698,6 +22520,9 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 174\n", + "Could not convert string '02' to numeric\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -13706,17 +22531,17 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 934/4257 [04:20<18:24, 3.01 examples/s]" + "Map (num_proc=16): 24%|██▎ | 1002/4257 [04:36<10:18, 5.26 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 927\n", + "single positional indexer is out-of-bounds\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -13725,13 +22550,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 936/4257 [04:21<14:38, 3.78 examples/s]" + "Map (num_proc=16): 24%|██▎ | 1003/4257 [04:37<11:35, 4.68 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -13739,24 +22565,31 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 937/4257 [04:21<13:11, 4.19 examples/s]" + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + "Map (num_proc=16): 24%|██▎ | 1004/4257 [04:37<13:08, 4.13 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 411\n", + "'str' object has no attribute 'astype'\n", + "EEEERRRRRRR'brazil scorers' \n", + "22'str' object is not callable\n", + "Can only use .dt accessor with datetimelike values\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 939/4257 [04:21<10:21, 5.34 examples/s]" + "Map (num_proc=16): 24%|██▎ | 1006/4257 [04:38<12:05, 4.48 examples/s]" ] }, { @@ -13764,8 +22597,7 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 411\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -13773,27 +22605,43 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 940/4257 [04:21<11:14, 4.92 examples/s]" + "Map (num_proc=16): 24%|██▎ | 1007/4257 [04:38<12:58, 4.18 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 560\n", + "'engine'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1121\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 941/4257 [04:22<10:03, 5.49 examples/s]" + "Map (num_proc=16): 24%|██▎ | 1010/4257 [04:38<12:22, 4.38 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.51271\n", + "\n", + "invalid literal for int() with base 10: 'w 116 '\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 88\n", + "could not convert string to float: '14.20 (104)'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -13801,7 +22649,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 942/4257 [04:22<12:07, 4.56 examples/s]" + "Map (num_proc=16): 24%|██▎ | 1011/4257 [04:39<17:51, 3.03 examples/s]" ] }, { @@ -13809,48 +22657,50 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", + "EEEERRRRRRR 804\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 328\n", + "invalid literal for int() with base 10: 'l 83 'EEEERRRRRRR\n", + " 249\n", + "Can only use .str accessor with string values!\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 649\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 944/4257 [04:22<09:52, 5.59 examples/s]" + "Map (num_proc=16): 24%|██▍ | 1012/4257 [04:40<20:36, 2.62 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "EEEERRRRRRR 488\n", + "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 'brazil scorers'86\n", - "\n", - "'str' object is not callable'result row 2003'\n", - "\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 946/4257 [04:22<09:04, 6.08 examples/s]" + "Map (num_proc=16): 24%|██▍ | 1014/4257 [04:40<17:17, 3.13 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -13860,7 +22710,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 948/4257 [04:23<07:43, 7.14 examples/s]" + "Map (num_proc=16): 24%|██▍ | 1015/4257 [04:40<16:00, 3.38 examples/s]" ] }, { @@ -13868,6 +22718,8 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 174\n", + "'>' not supported between instances of 'str' and 'int'\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -13876,13 +22728,17 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 949/4257 [04:23<07:18, 7.55 examples/s]" + "Map (num_proc=16): 24%|██▍ | 1016/4257 [04:41<16:47, 3.22 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 726\n", + "'>=' not supported between instances of 'str' and 'int'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -13892,34 +22748,35 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 950/4257 [04:23<07:06, 7.75 examples/s]" + "Map (num_proc=16): 24%|██▍ | 1017/4257 [04:42<27:54, 1.94 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 488\n", - "'float' object has no attribute 'item'\n", - "EEEERRRRRRR 1265\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 951/4257 [04:23<12:54, 4.27 examples/s]" + "Map (num_proc=16): 24%|██▍ | 1020/4257 [04:42<16:59, 3.17 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1423\n", + "StringMethods.split() takes from 1 to 2 positional arguments but 3 were given\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -13929,15 +22786,20 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 953/4257 [04:24<10:41, 5.15 examples/s]" + "Map (num_proc=16): 24%|██▍ | 1021/4257 [04:42<14:48, 3.64 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 22\n", - "single positional indexer is out-of-bounds\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 805\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 927\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -13947,7 +22809,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 954/4257 [04:24<09:46, 5.63 examples/s]" + "Map (num_proc=16): 24%|██▍ | 1022/4257 [04:43<14:51, 3.63 examples/s]" ] }, { @@ -13955,23 +22817,27 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 650\n", + "'declination ( j2000)'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 724\n", - "invalid literal for int() with base 10: 'wells (15'\n" + "EEEERRRRRRR 1122\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 955/4257 [04:24<11:07, 4.95 examples/s]" + "Map (num_proc=16): 24%|██▍ | 1023/4257 [04:44<26:15, 2.05 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -13979,7 +22845,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 956/4257 [04:24<10:20, 5.32 examples/s]" + "Map (num_proc=16): 24%|██▍ | 1024/4257 [04:44<22:19, 2.41 examples/s]" ] }, { @@ -13987,20 +22853,8 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 559\n", - "'>=' not supported between instances of 'str' and 'int'\n", - "EEEERRRRRRR 1421\n", - "Could not convert string '28%29%42%20%16%11%' to numeric\n", - "EEEERRRRRRR 249Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n", - "invalid literal for int() with base 10: '7 - 5 '\n", - "EEEERRRRRRR 174\n", - "Can only compare identically-labeled Series objects\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1120\n", - "index 0 is out of bounds for axis 0 with size 0\n", + "EEEERRRRRRR 411\n", + "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -14010,43 +22864,54 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 22%|██▏ | 957/4257 [04:25<21:10, 2.60 examples/s]" + "Map (num_proc=16): 24%|██▍ | 1025/4257 [04:45<22:51, 2.36 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 560\n", + "'engine'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1271\n", + "invalid literal for int() with base 10: 'w 116'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 958/4257 [04:25<20:04, 2.74 examples/s]" + "Map (num_proc=16): 24%|██▍ | 1026/4257 [04:45<28:55, 1.86 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 86\n", - "invalid decimal literal (, line 1)\n", + "EEEERRRRRRR 23\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "'brazil scorers'Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1591\n", + "single positional indexer is out-of-bounds\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1586\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 411\n", - "'winner'\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 959/4257 [04:26<25:29, 2.16 examples/s]" + "Map (num_proc=16): 24%|██▍ | 1028/4257 [04:46<21:00, 2.56 examples/s]" ] }, { @@ -14054,7 +22919,24 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 24%|██▍ | 1029/4257 [04:46<20:04, 2.68 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'brazil scorers'Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -14064,7 +22946,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 961/4257 [04:26<17:47, 3.09 examples/s]" + "Map (num_proc=16): 24%|██▍ | 1031/4257 [04:46<14:56, 3.60 examples/s]" ] }, { @@ -14080,15 +22962,18 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 962/4257 [04:27<22:09, 2.48 examples/s]" + "Map (num_proc=16): 24%|██▍ | 1032/4257 [04:47<14:58, 3.59 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 926\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "'brazil scorers'\n", + "'str' object is not callable\n", + "EEEERRRRRRR 488\n", + "0Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -14099,7 +22984,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 963/4257 [04:28<27:18, 2.01 examples/s]" + "Map (num_proc=16): 24%|██▍ | 1034/4257 [04:47<11:09, 4.81 examples/s]" ] }, { @@ -14107,24 +22992,22 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 805\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 965/4257 [04:28<17:06, 3.21 examples/s]" + "Map (num_proc=16): 24%|██▍ | 1035/4257 [04:47<12:18, 4.36 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -14132,7 +23015,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 966/4257 [04:28<15:46, 3.48 examples/s]" + "Map (num_proc=16): 24%|██▍ | 1036/4257 [04:47<13:34, 3.95 examples/s]" ] }, { @@ -14140,46 +23023,46 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 174\n", + "Cannot use method 'nlargest' with dtype object\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 329\n", + "unsupported operand type(s) for -: 'str' and 'str'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 967/4257 [04:28<14:45, 3.72 examples/s]" + "Map (num_proc=16): 24%|██▍ | 1037/4257 [04:48<23:03, 2.33 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 803\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 488'brazil scorers'\n", - "\n", - "Can only use .dt accessor with datetimelike values\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 968/4257 [04:29<14:48, 3.70 examples/s]" + "Map (num_proc=16): 24%|██▍ | 1038/4257 [04:49<20:14, 2.65 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 328\n", - "invalid syntax (, line 0)\n", + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1124\n", + "'team'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -14189,7 +23072,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 969/4257 [04:29<14:37, 3.75 examples/s]" + "Map (num_proc=16): 24%|██▍ | 1041/4257 [04:49<15:44, 3.41 examples/s]" ] }, { @@ -14199,19 +23082,14 @@ "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 724\n", - "Can only use .dt accessor with datetimelike values\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 971/4257 [04:29<13:24, 4.08 examples/s]" + "Map (num_proc=16): 25%|██▍ | 1043/4257 [04:49<12:04, 4.44 examples/s]" ] }, { @@ -14219,72 +23097,85 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 22\n", - "'int' object has no attribute 'shift'\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 972/4257 [04:30<16:17, 3.36 examples/s]" + "Map (num_proc=16): 25%|██▍ | 1044/4257 [04:50<16:43, 3.20 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 559\n", - "Cannot use method 'nlargest' with dtype object\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 561\n", + "Can only use .dt accessor with datetimelike values\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 973/4257 [04:30<14:15, 3.84 examples/s]" + "Map (num_proc=16): 25%|██▍ | 1045/4257 [04:50<16:42, 3.20 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 974/4257 [04:30<13:36, 4.02 examples/s]" + "Map (num_proc=16): 25%|██▍ | 1048/4257 [04:51<11:38, 4.60 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR'brazil scorers' \n", + "726'str' object is not callable\n", + "\n", + "'>=' not supported between instances of 'str' and 'int'" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 976/4257 [04:30<11:35, 4.72 examples/s]" + "Map (num_proc=16): 25%|██▍ | 1050/4257 [04:51<09:59, 5.35 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 929\n", + "EEEERRRRRRRThe truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). \n", + "250\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -14295,13 +23186,18 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 978/4257 [04:31<09:32, 5.73 examples/s]" + "Map (num_proc=16): 25%|██▍ | 1052/4257 [04:52<11:30, 4.64 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 805\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 489\n", + "'>=' not supported between instances of 'str' and 'float'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -14309,7 +23205,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 979/4257 [04:31<09:59, 5.47 examples/s]" + "Map (num_proc=16): 25%|██▍ | 1053/4257 [04:52<12:53, 4.14 examples/s]" ] }, { @@ -14317,18 +23213,14 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1586\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 980/4257 [04:31<10:55, 5.00 examples/s]" + "Map (num_proc=16): 25%|██▍ | 1054/4257 [04:52<13:27, 3.97 examples/s]" ] }, { @@ -14336,11 +23228,8 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 174\n", - "can only concatenate str (not \"int\") to str\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 926\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 412\n", + "'nominations'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -14348,15 +23237,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 981/4257 [04:32<18:21, 2.97 examples/s]" + "Map (num_proc=16): 25%|██▍ | 1055/4257 [04:53<19:52, 2.69 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 249\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", + "EEEERRRRRRR 1424\n", + "invalid syntax (, line 1)\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -14364,7 +23254,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 983/4257 [04:32<12:14, 4.46 examples/s]" + "Map (num_proc=16): 25%|██▍ | 1056/4257 [04:53<17:18, 3.08 examples/s]" ] }, { @@ -14372,66 +23262,61 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 650\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 87\n", - "'score to par'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callableEEEERRRRRRR\n", + " " ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 984/4257 [04:33<17:17, 3.15 examples/s]" + "Map (num_proc=16): 25%|██▍ | 1057/4257 [04:54<21:47, 2.45 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "90\n", + "False\n", "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 411\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 986/4257 [04:33<14:05, 3.87 examples/s]" + "Map (num_proc=16): 25%|██▍ | 1059/4257 [04:55<19:41, 2.71 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1121" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 988/4257 [04:33<11:20, 4.81 examples/s]" + "Map (num_proc=16): 25%|██▍ | 1061/4257 [04:55<13:18, 4.00 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -14442,19 +23327,21 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 989/4257 [04:34<12:35, 4.32 examples/s]" + "Map (num_proc=16): 25%|██▍ | 1062/4257 [04:55<13:27, 3.96 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers''brazil scorers'\n", + "\n", + "'str' object is not callable'str' object is not callable\n", + "\n", "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 649\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -14462,63 +23349,75 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 991/4257 [04:34<13:37, 4.00 examples/s]" + "Map (num_proc=16): 25%|██▌ | 1066/4257 [04:55<06:50, 7.77 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 488\n", - "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1586\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 992/4257 [04:35<18:02, 3.02 examples/s]" + "Map (num_proc=16): 25%|██▌ | 1068/4257 [04:56<11:11, 4.75 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 930\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 993/4257 [04:35<17:28, 3.11 examples/s]" + "Map (num_proc=16): 25%|██▌ | 1071/4257 [04:56<08:45, 6.07 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 805\n", + "Cannot perform 'rand_' with a dtyped [bool] array and scalar of type [bool]\n", "'brazil scorers'\n", "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1424\n", + "invalid syntax (, line 1)\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 175\n", + "EEEERRRRRRR 'str' object has no attribute 'year'329\n", + "\n", + "unsupported operand type(s) for -: 'str' and 'str'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 996/4257 [04:35<10:54, 4.98 examples/s]" + "Map (num_proc=16): 25%|██▌ | 1073/4257 [04:57<12:30, 4.24 examples/s]" ] }, { @@ -14526,50 +23425,49 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR " + "EEEERRRRRRR 25\n", + "Can only use .dt accessor with datetimelike values\n", + "EEEERRRRRRR 1273\n", + "'col'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 997/4257 [04:36<11:23, 4.77 examples/s]" + "Map (num_proc=16): 25%|██▌ | 1074/4257 [04:58<15:00, 3.54 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "1422\n", - "invalid literal for int() with base 10: '2.2 '\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 998/4257 [04:36<12:00, 4.52 examples/s]" + "Map (num_proc=16): 25%|██▌ | 1075/4257 [04:58<14:16, 3.71 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 561\n", + "Can only use .dt accessor with datetimelike values\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 23%|██▎ | 1000/4257 [04:36<09:43, 5.59 examples/s]" + "Map (num_proc=16): 25%|██▌ | 1076/4257 [04:58<12:47, 4.14 examples/s]" ] }, { @@ -14578,8 +23476,9 @@ "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 174\n", - "Could not convert string '02' to numeric\n", + "EEEERRRRRRR 726\n", + "'>=' not supported between instances of 'str' and 'int'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -14588,7 +23487,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▎ | 1002/4257 [04:36<10:18, 5.26 examples/s]" + "Map (num_proc=16): 25%|██▌ | 1077/4257 [04:58<16:38, 3.18 examples/s]" ] }, { @@ -14596,9 +23495,6 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 927\n", - "single positional indexer is out-of-bounds\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -14607,7 +23503,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▎ | 1003/4257 [04:37<11:35, 4.68 examples/s]" + "Map (num_proc=16): 25%|██▌ | 1078/4257 [04:59<16:43, 3.17 examples/s]" ] }, { @@ -14622,31 +23518,25 @@ "name": "stderr", "output_type": "stream", "text": [ - ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", - "Map (num_proc=16): 24%|██▎ | 1004/4257 [04:37<13:08, 4.13 examples/s]" + "Map (num_proc=16): 25%|██▌ | 1080/4257 [04:59<13:19, 3.97 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 411\n", - "'str' object has no attribute 'astype'\n", - "EEEERRRRRRR'brazil scorers' \n", - "22'str' object is not callable\n", - "Can only use .dt accessor with datetimelike values\n", - "\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 251\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▎ | 1006/4257 [04:38<12:05, 4.48 examples/s]" + "Map (num_proc=16): 25%|██▌ | 1081/4257 [04:59<15:07, 3.50 examples/s]" ] }, { @@ -14655,50 +23545,43 @@ "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 90\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▎ | 1007/4257 [04:38<12:58, 4.18 examples/s]" + "Map (num_proc=16): 25%|██▌ | 1082/4257 [05:00<16:27, 3.21 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 560\n", - "'engine'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1121\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n" + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▎ | 1010/4257 [04:38<12:22, 4.38 examples/s]" + "Map (num_proc=16): 25%|██▌ | 1083/4257 [05:00<14:49, 3.57 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.51271\n", - "\n", - "invalid literal for int() with base 10: 'w 116 '\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 88\n", - "could not convert string to float: '14.20 (104)'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -14706,30 +23589,41 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▎ | 1011/4257 [04:39<17:51, 3.03 examples/s]" + "Map (num_proc=16): 25%|██▌ | 1085/4257 [05:00<11:46, 4.49 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 804\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "EEEERRRRRRR 328\n", - "invalid literal for int() with base 10: 'l 83 'EEEERRRRRRR\n", - " 249\n", - "Can only use .str accessor with string values!\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1595\n", + "The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()\n", + "EEEERRRRRRR 489\n", + "'>' not supported between instances of 'str' and 'float'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 651\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 412\n", + "'age'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1424\n", + "invalid syntax (, line 0)\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▍ | 1012/4257 [04:40<20:36, 2.62 examples/s]" + "Map (num_proc=16): 26%|██▌ | 1087/4257 [05:01<17:26, 3.03 examples/s]" ] }, { @@ -14738,9 +23632,6 @@ "text": [ "'brazil scorers'\n", "'str' object is not callable\n", - "EEEERRRRRRR 488\n", - "Can only use .dt accessor with datetimelike values\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -14751,99 +23642,96 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▍ | 1014/4257 [04:40<17:17, 3.13 examples/s]" + "Map (num_proc=16): 26%|██▌ | 1089/4257 [05:02<13:32, 3.90 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▍ | 1015/4257 [04:40<16:00, 3.38 examples/s]" + "Map (num_proc=16): 26%|██▌ | 1090/4257 [05:02<12:48, 4.12 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 174\n", - "'>' not supported between instances of 'str' and 'int'\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▍ | 1016/4257 [04:41<16:47, 3.22 examples/s]" + "Map (num_proc=16): 26%|██▌ | 1091/4257 [05:02<11:18, 4.67 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "EEEERRRRRRR 1275\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 726\n", - "'>=' not supported between instances of 'str' and 'int'\n", + "EEEERRRRRRR 930\n", + "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callable\n" + "'brazil scorers''str' object is not callable\n", + "\n", + "'str' object is not callable" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▍ | 1017/4257 [04:42<27:54, 1.94 examples/s]" + "Map (num_proc=16): 26%|██▌ | 1092/4257 [05:02<13:25, 3.93 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", + "\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 727\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "EEEERRRRRRR 561\n", + "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▍ | 1020/4257 [04:42<16:59, 3.17 examples/s]" + "Map (num_proc=16): 26%|██▌ | 1094/4257 [05:03<16:24, 3.21 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1423\n", - "StringMethods.split() takes from 1 to 2 positional arguments but 3 were given\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▍ | 1021/4257 [04:42<14:48, 3.64 examples/s]" + "Map (num_proc=16): 26%|██▌ | 1096/4257 [05:03<12:56, 4.07 examples/s]" ] }, { @@ -14851,12 +23739,22 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 805\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 927\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 251\n", + "'retired'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 26%|██▌ | 1097/4257 [05:04<14:51, 3.54 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -14866,19 +23764,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▍ | 1022/4257 [04:43<14:51, 3.63 examples/s]" + "Map (num_proc=16): 26%|██▌ | 1098/4257 [05:04<15:43, 3.35 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 650\n", - "'declination ( j2000)'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1122\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -14888,7 +23780,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▍ | 1023/4257 [04:44<26:15, 2.05 examples/s]" + "Map (num_proc=16): 26%|██▌ | 1099/4257 [05:04<13:18, 3.95 examples/s]" ] }, { @@ -14902,7 +23794,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▍ | 1024/4257 [04:44<22:19, 2.41 examples/s]" + "Map (num_proc=16): 26%|██▌ | 1100/4257 [05:04<11:48, 4.46 examples/s]" ] }, { @@ -14910,71 +23802,64 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 411\n", - "Can only use .dt accessor with datetimelike values\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 'brazil scorers'331\n", + "'str' object is not callable\n", + "\n", + "Can only use .dt accessor with datetimelike values\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▍ | 1025/4257 [04:45<22:51, 2.36 examples/s]" + "Map (num_proc=16): 26%|██▌ | 1101/4257 [05:05<12:47, 4.11 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 560\n", - "'engine'\n", + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1271\n", - "invalid literal for int() with base 10: 'w 116'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR'brazil scorers' \n", + "1134'str' object is not callable\n", + "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▍ | 1026/4257 [04:45<28:55, 1.86 examples/s]" + "Map (num_proc=16): 26%|██▌ | 1103/4257 [05:05<14:24, 3.65 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 23\n", "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "'brazil scorers'Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1591\n", - "single positional indexer is out-of-bounds\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 1595\n", + "'long row'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▍ | 1028/4257 [04:46<21:00, 2.56 examples/s]" + "Map (num_proc=16): 26%|██▌ | 1104/4257 [05:06<16:19, 3.22 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -14984,16 +23869,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▍ | 1029/4257 [04:46<20:04, 2.68 examples/s]" + "Map (num_proc=16): 26%|██▌ | 1106/4257 [05:06<12:05, 4.35 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -15003,7 +23885,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▍ | 1031/4257 [04:46<14:56, 3.60 examples/s]" + "Map (num_proc=16): 26%|██▌ | 1107/4257 [05:06<13:33, 3.87 examples/s]" ] }, { @@ -15011,6 +23893,8 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 806\n", + "'time'\n", "'brazil scorers'\n", "'str' object is not callable\n" ] @@ -15019,7 +23903,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▍ | 1032/4257 [04:47<14:58, 3.59 examples/s]" + "Map (num_proc=16): 26%|██▌ | 1108/4257 [05:06<12:50, 4.09 examples/s]" ] }, { @@ -15028,9 +23912,7 @@ "text": [ "'brazil scorers'\n", "'str' object is not callable\n", - "EEEERRRRRRR 488\n", - "0Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", @@ -15041,16 +23923,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▍ | 1034/4257 [04:47<11:09, 4.81 examples/s]" + "Map (num_proc=16): 26%|██▌ | 1110/4257 [05:07<11:47, 4.45 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 805\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -15058,21 +23937,26 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▍ | 1035/4257 [04:47<12:18, 4.36 examples/s]" + "Map (num_proc=16): 26%|██▌ | 1111/4257 [05:07<11:20, 4.62 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "EEEERRRRRRR 490\n", + "'rank'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▍ | 1036/4257 [04:47<13:34, 3.95 examples/s]" + "Map (num_proc=16): 26%|██▌ | 1112/4257 [05:07<11:41, 4.49 examples/s]" ] }, { @@ -15080,46 +23964,85 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 174\n", - "Cannot use method 'nlargest' with dtype object\n", + "EEEERRRRRRR 727\n", + "'>=' not supported between instances of 'str' and 'int'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 561\n", + "Can only use .dt accessor with datetimelike values\n", + "EEEERRRRRRR 1425\n", + "single positional indexer is out-of-bounds\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 175\n", + "unsupported operand type(s) for -: 'str' and 'str'\n", + "EEEERRRRRRR " + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 26%|██▌ | 1113/4257 [05:08<18:18, 2.86 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "412\n", + "'>' not supported between instances of 'str' and 'int'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1596\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 930\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 329\n", - "unsupported operand type(s) for -: 'str' and 'str'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▍ | 1037/4257 [04:48<23:03, 2.33 examples/s]" + "Map (num_proc=16): 26%|██▌ | 1115/4257 [05:09<19:14, 2.72 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 651\n", + "'school'\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▍ | 1038/4257 [04:49<20:14, 2.65 examples/s]" + "Map (num_proc=16): 26%|██▌ | 1117/4257 [05:09<15:23, 3.40 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 25\n", + "Can only use .dt accessor with datetimelike values\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1124\n", - "'team'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -15129,24 +24052,23 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 24%|██▍ | 1041/4257 [04:49<15:44, 3.41 examples/s]" + "Map (num_proc=16): 26%|██▋ | 1118/4257 [05:09<15:11, 3.44 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 25%|██▍ | 1043/4257 [04:49<12:04, 4.44 examples/s]" + "Map (num_proc=16): 26%|██▋ | 1119/4257 [05:10<13:54, 3.76 examples/s]" ] }, { @@ -15154,42 +24076,46 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "EEEERRRRRRR 728\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 25%|██▍ | 1044/4257 [04:50<16:43, 3.20 examples/s]" + "Map (num_proc=16): 26%|██▋ | 1120/4257 [05:11<22:48, 2.29 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + " 1276\n", + "'goals_conceded'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 561\n", - "Can only use .dt accessor with datetimelike values\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 25%|██▍ | 1045/4257 [04:50<16:42, 3.20 examples/s]" + "Map (num_proc=16): 26%|██▋ | 1121/4257 [05:11<21:03, 2.48 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 1134\n", + "'no'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 806\n", + "'time'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -15199,7 +24125,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 25%|██▍ | 1048/4257 [04:51<11:38, 4.60 examples/s]" + "Map (num_proc=16): 26%|██▋ | 1122/4257 [05:11<23:27, 2.23 examples/s]" ] }, { @@ -15207,33 +24133,21 @@ "output_type": "stream", "text": [ "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR'brazil scorers' \n", - "726'str' object is not callable\n", - "\n", - "'>=' not supported between instances of 'str' and 'int'" + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 25%|██▍ | 1050/4257 [04:51<09:59, 5.35 examples/s]" + "Map (num_proc=16): 26%|██▋ | 1123/4257 [05:12<18:38, 2.80 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 929\n", - "EEEERRRRRRRThe truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). \n", - "250\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", "'str' object is not callable\n" @@ -15243,18 +24157,19 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 25%|██▍ | 1052/4257 [04:52<11:30, 4.64 examples/s]" + "Map (num_proc=16): 26%|██▋ | 1124/4257 [05:12<17:03, 3.06 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "EEEERRRRRRR 90\n", + "could not convert string to float: ' degree20′53″'\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 805\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "EEEERRRRRRR 489\n", - "'>=' not supported between instances of 'str' and 'float'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] }, @@ -15262,13 +24177,15 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 25%|██▍ | 1053/4257 [04:52<12:53, 4.14 examples/s]" + "Map (num_proc=16): 26%|██▋ | 1126/4257 [05:12<14:50, 3.52 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" ] @@ -15277,1831 +24194,4011 @@ "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 25%|██▍ | 1054/4257 [04:52<13:27, 3.97 examples/s]" + "Map (num_proc=16): 26%|██▋ | 1128/4257 [05:13<13:05, 3.98 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 331\n", + "'>' not supported between instances of 'str' and 'Timestamp'\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "EEEERRRRRRR 412\n", - "'nominations'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "'nominations'\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 25%|██▍ | 1055/4257 [04:53<19:52, 2.69 examples/s]" + "Map (num_proc=16): 27%|██▋ | 1131/4257 [05:13<13:24, 3.89 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1424\n", - "invalid syntax (, line 1)\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 490\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 651\n", + "single positional indexer is out-of-bounds\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "EEEERRRRRRR 561\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", + "'brazil scorers'\n", + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 25%|██▍ | 1056/4257 [04:53<17:18, 3.08 examples/s]" + "Map (num_proc=16): 27%|██▋ | 1132/4257 [05:14<17:32, 2.97 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "'brazil scorers'\n", + "'str' object is not callable\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 650\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", "'brazil scorers'\n", - "'str' object is not callableEEEERRRRRRR\n", - " " + "'str' object is not callable\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 25%|██▍ | 1057/4257 [04:54<21:47, 2.45 examples/s]" + "Map (num_proc=16): 27%|██▋ | 1134/4257 [05:15<15:24, 3.38 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Map (num_proc=16): 27%|██▋ | 1135/4257 [05:15<14:24, 3.61 examples/s]" + ] + } + ], + "source": [ + "from functools import partial\n", + "dont_run_correcting = dont_run.map(partial(dataset_processing,query_field='nlsep',system_correcting_prompt=system_correcting_prompt,\n", + " system_prompt=system_prompt),num_proc=16)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 208, + "id": "c68508a7-8abf-49a1-9e45-05dca33cde33", + "metadata": {}, + "outputs": [], + "source": [ + "data = load_from_disk('tab_fact_test_xml_nlsep_correct/')" + ] + }, + { + "cell_type": "code", + "execution_count": 209, + "id": "86f67bc6-2b23-4712-9618-0404a2e55c96", + "metadata": {}, + "outputs": [], + "source": [ + "d2 = data.filter(lambda x : x['nlsep_answ_correct'] != 'None',num_proc=17)" + ] + }, + { + "cell_type": "code", + "execution_count": 210, + "id": "5375d880-9ba5-4d3b-89c3-78a3368e333e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct', 'nlsep_label_correct'],\n", + " num_rows: 471\n", + "})" + ] + }, + "execution_count": 210, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "d2" + ] + }, + { + "cell_type": "code", + "execution_count": 179, + "id": "0aa1d3c0-6a98-4c39-848d-bcfae4db4cff", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'id': 0,\n", + " 'table_csv': '2-1570274-4.html.csv',\n", + " 'table_text': 'tournament#wins#top - 5#top - 10#top - 25#events#cuts made\\nmasters tournament#0#1#2#4#4#4\\nus open#0#2#3#4#6#5\\nthe open championship#1#2#2#2#3#3\\npga championship#0#0#1#2#5#4\\ntotals#1#5#8#12#18#16\\n',\n", + " 'label': 1,\n", + " 'statement': 'tony lema do not win in the us open',\n", + " 'table_caption': 'tony lema',\n", + " 'nlsep_query': 'tony lema do not win in the us open col : tournament | wins | top - 5 | top - 10 | top - 25 | events | cuts made row 1 : masters tournament | 0 | 1 | 2 | 4 | 4 | 4 row 2 : us open | 0 | 2 | 3 | 4 | 6 | 5 row 3 : the open championship | 1 | 2 | 2 | 2 | 3 | 3 row 4 : pga championship | 0 | 0 | 1 | 2 | 5 | 4 row 5 : totals | 1 | 5 | 8 | 12 | 18 | 16',\n", + " 'semtab_query': 'tony lema do not win in the us open tony lema
tournamentcategory - 1.0\"str\"0[\"us open\", \"the open championship\", \"pga championship\"]
winsrank - 1.0\"int\"0[0, 1, 0]
top - 5rank - 1.0\"int\"0[5, 2, 1]
top - 10rank - 1.0\"int\"0[8, 2, 1]
top - 25rank - 0.99\"int\"0[4, 12, 4]
eventsduration - 0.73\"int\"0[6, 4, 18]
cuts maderank - 0.99\"int\"0[4, 3, 5]
',\n", + " 'nlsep_answ': 'Here is the Python code that translates the given natural language statement into a single-line pandas expression. This expression checks if Tony Lema did not win in the US Open.\\n\\n```json\\n\"PANDA\": \"df.loc[df[\\'tournament\\'] == \\'us open\\', \\'wins\\'].any().tolist() == 0\"\\n```\\n\\nThis code first locates the row where the \\'tournament\\' column is \\'us open\\', and then checks if the \\'wins\\' column in that row is 0. If it is, the expression returns True, otherwise it returns False.\\n',\n", + " 'nlsep_label': 'True',\n", + " 'nlsep_answ_correct': 'None'}" + ] + }, + "execution_count": 179, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "data[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 240, + "id": "443a0c2b-4da1-4ea6-aae5-9ca04bfbc072", + "metadata": {}, + "outputs": [ + { + "ename": "KeyError", + "evalue": "'tournament'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/pandas/core/indexes/base.py:3812\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3811\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 3812\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_engine\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcasted_key\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3813\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n", + "File \u001b[0;32mpandas/_libs/index.pyx:167\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mpandas/_libs/index.pyx:196\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:7088\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:7096\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", + "\u001b[0;31mKeyError\u001b[0m: 'tournament'", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[240], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;43meval\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mparse_panda_code\u001b[49m\u001b[43m(\u001b[49m\u001b[43md2\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mnlsep_answ\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m:1\u001b[0m\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/pandas/core/frame.py:4113\u001b[0m, in \u001b[0;36mDataFrame.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 4111\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns\u001b[38;5;241m.\u001b[39mnlevels \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 4112\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_getitem_multilevel(key)\n\u001b[0;32m-> 4113\u001b[0m indexer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcolumns\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 4114\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_integer(indexer):\n\u001b[1;32m 4115\u001b[0m indexer \u001b[38;5;241m=\u001b[39m [indexer]\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/pandas/core/indexes/base.py:3819\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3814\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(casted_key, \u001b[38;5;28mslice\u001b[39m) \u001b[38;5;129;01mor\u001b[39;00m (\n\u001b[1;32m 3815\u001b[0m \u001b[38;5;28misinstance\u001b[39m(casted_key, abc\u001b[38;5;241m.\u001b[39mIterable)\n\u001b[1;32m 3816\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28many\u001b[39m(\u001b[38;5;28misinstance\u001b[39m(x, \u001b[38;5;28mslice\u001b[39m) \u001b[38;5;28;01mfor\u001b[39;00m x \u001b[38;5;129;01min\u001b[39;00m casted_key)\n\u001b[1;32m 3817\u001b[0m ):\n\u001b[1;32m 3818\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m InvalidIndexError(key)\n\u001b[0;32m-> 3819\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key) \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01merr\u001b[39;00m\n\u001b[1;32m 3820\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[1;32m 3821\u001b[0m \u001b[38;5;66;03m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[1;32m 3822\u001b[0m \u001b[38;5;66;03m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[1;32m 3823\u001b[0m \u001b[38;5;66;03m# the TypeError.\u001b[39;00m\n\u001b[1;32m 3824\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_indexing_error(key)\n", + "\u001b[0;31mKeyError\u001b[0m: 'tournament'" ] - }, + } + ], + "source": [ + "eval(parse_panda_code(d2[0]['nlsep_answ']))" + ] + }, + { + "cell_type": "markdown", + "id": "6520fc31-941e-4a62-9bf2-063d4345ca03", + "metadata": {}, + "source": [ + "# Traceback\n" + ] + }, + { + "cell_type": "code", + "execution_count": 243, + "id": "f0e1d0f9-f8e9-40a8-8cea-a5fa803e62d8", + "metadata": {}, + "outputs": [], + "source": [ + "import traceback" + ] + }, + { + "cell_type": "code", + "execution_count": 248, + "id": "a7fb770b-f072-48c0-b95d-23386da7eab1", + "metadata": {}, + "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "90\n", - "False\n", - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" - ] - }, + "data": { + "text/plain": [ + "{'id': 0,\n", + " 'table_csv': '2-1570274-4.html.csv',\n", + " 'table_text': 'tournament#wins#top - 5#top - 10#top - 25#events#cuts made\\nmasters tournament#0#1#2#4#4#4\\nus open#0#2#3#4#6#5\\nthe open championship#1#2#2#2#3#3\\npga championship#0#0#1#2#5#4\\ntotals#1#5#8#12#18#16\\n',\n", + " 'label': 0,\n", + " 'statement': 'tournament that tony lema have not participate in include the master tournament , the us open , the pga championship and the open championship',\n", + " 'table_caption': 'tony lema',\n", + " 'nlsep_query': 'tournament that tony lema have not participate in include the master tournament , the us open , the pga championship and the open championship col : tournament | wins | top - 5 | top - 10 | top - 25 | events | cuts made row 1 : masters tournament | 0 | 1 | 2 | 4 | 4 | 4 row 2 : us open | 0 | 2 | 3 | 4 | 6 | 5 row 3 : the open championship | 1 | 2 | 2 | 2 | 3 | 3 row 4 : pga championship | 0 | 0 | 1 | 2 | 5 | 4 row 5 : totals | 1 | 5 | 8 | 12 | 18 | 16',\n", + " 'semtab_query': 'tournament that tony lema have not participate in include the master tournament , the us open , the pga championship and the open championship tony lema
tournamentcategory - 1.0\"str\"0[\"us open\", \"totals\", \"masters tournament\"]
winsrank - 1.0\"int\"0[0, 1, 0]
top - 5rank - 1.0\"int\"0[2, 2, 1]
top - 10rank - 1.0\"int\"0[3, 8, 1]
top - 25rank - 0.99\"int\"0[4, 4, 12]
eventsduration - 0.73\"int\"0[6, 5, 4]
cuts maderank - 0.99\"int\"0[4, 16, 4]
',\n", + " 'nlsep_answ': 'Here is the Python code in pandas that verifies the statement:\\n\\n```json\\n\"PANDA\": \"df[df[\\'tournament\\'].isin([\\'the master tournament\\', \\'the us open\\', \\'the pga championship\\', \\'the open championship\\']) & (df[\\'participant\\'] != \\'tony lema\\')].empty\"\\n```\\n\\nThis code checks if there are any rows in the dataframe where the tournament is in the list of tournaments and the participant is not Tony LeMa. If there are no such rows, it returns True, otherwise it returns False.\\n',\n", + " 'nlsep_label': 'None',\n", + " 'nlsep_answ_correct': 'The error in the code is that the \\'participant\\' column does not exist in the dataframe. The correct column to check is \\'wins\\'. Here is the corrected code:\\n\\n```python\\ndf[df[\\'tournament\\'].isin([\\'the master tournament\\', \\'the us open\\', \\'the pga championship\\', \\'the open championship\\']) & (df[\\'wins\\'] == 0)].empty\\n```\\n\\nThis code checks if there are any rows in the dataframe where the \\'tournament\\' column is in the given list and the \\'wins\\' column is 0. If there are no such rows, it returns True, otherwise it returns False.\\n\\nHere is the Json Format:\\n\\n```json\\n{\\n \"CORRECT PANDA\": \"df[df[\\'tournament\\'].isin([\\'the master tournament\\', \\'the us open\\', \\'the pga championship\\', \\'the open championship\\']) & (df[\\'wins\\'] == 0)].empty\"\\n}\\n```\\n',\n", + " 'nlsep_label_correct': 'True'}" + ] + }, + "execution_count": 248, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "d2[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 249, + "id": "25cf2de6-e9fe-4de0-9ac5-f804fa494cd7", + "metadata": {}, + "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 25%|██▍ | 1059/4257 [04:55<19:41, 2.71 examples/s]" - ] - }, + "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", + "
tournamentwinstop - 5top - 10top - 25eventscuts made
0masters tournament012444
1us open023465
2the open championship122233
3pga championship001254
4totals158121816
\n", + "
" + ], + "text/plain": [ + " tournament wins top - 5 top - 10 top - 25 events cuts made\n", + "0 masters tournament 0 1 2 4 4 4\n", + "1 us open 0 2 3 4 6 5\n", + "2 the open championship 1 2 2 2 3 3\n", + "3 pga championship 0 0 1 2 5 4\n", + "4 totals 1 5 8 12 18 16" + ] + }, + "execution_count": 249, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.read_csv(StringIO(d2[0]['table_text']), delimiter='#')\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 246, + "id": "081686fe-662a-47eb-8e53-c72863932eb3", + "metadata": {}, + "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" - ] - }, + "data": { + "text/plain": [ + "\"df[df['tournament'].isin(['the master tournament', 'the us open', 'the pga championship', 'the open championship']) & (df['participant'] != 'tony lema')].empty\"" + ] + }, + "execution_count": 246, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "parse_panda_code(d2[0]['nlsep_answ'])" + ] + }, + { + "cell_type": "code", + "execution_count": 292, + "id": "28b29da4-3ee3-42a5-b0df-39f05d4b134a", + "metadata": {}, + "outputs": [ { - "name": "stderr", + "name": "stdout", "output_type": "stream", "text": [ - "Map (num_proc=16): 25%|██▍ | 1061/4257 [04:55<13:18, 4.00 examples/s]" + "KeyError: 'participant'\n" ] - }, + } + ], + "source": [ + "try:\n", + " p=parse_panda_code(d2[0]['nlsep_answ'])\n", + " eval(p)\n", + "except Exception as e:\n", + " print (f'{type(e).__name__}: {e}')\n", + " \n", + " #traceback.print_exc()\n", + " x = traceback.format_exc()\n", + " #print(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 301, + "id": "1c19b750-8b68-466b-b5a0-20ce9ed485b6", + "metadata": {}, + "outputs": [], + "source": [ + "p = df.info" + ] + }, + { + "cell_type": "code", + "execution_count": 318, + "id": "aba0fd83-c333-4f11-8848-3b0935a87fd7", + "metadata": {}, + "outputs": [], + "source": [ + "p = df.dtypes" + ] + }, + { + "cell_type": "code", + "execution_count": 319, + "id": "c089588a-0bc7-42a5-b0da-c48eb3b0c39b", + "metadata": {}, + "outputs": [], + "source": [ + "p = p.to_string()" + ] + }, + { + "cell_type": "code", + "execution_count": 322, + "id": "2c5bcd86-f4ba-4b02-b588-dd6c3ea548a5", + "metadata": {}, + "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "tournament object\n", + "wins int64\n", + "top - 5 int64\n", + "top - 10 int64\n", + "top - 25 int64\n", + "events int64\n", + "cuts made int64\n" ] - }, + } + ], + "source": [ + "print(p)" + ] + }, + { + "cell_type": "code", + "execution_count": 194, + "id": "1f0a97ae-6100-4c18-b3d9-28f97aeab0c2", + "metadata": {}, + "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 25%|██▍ | 1062/4257 [04:55<13:27, 3.96 examples/s]" - ] - }, + "data": { + "text/plain": [ + "\"df['total'].isin([df.loc[df['player'] == 'matías suárez', 'total'].values[0] + 4]).any()\"" + ] + }, + "execution_count": 194, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "parse_panda_code(d2[2]['nlsep_answ_correct'])" + ] + }, + { + "cell_type": "code", + "execution_count": 180, + "id": "89bb5654-775a-4075-bae6-76708c11a1b5", + "metadata": {}, + "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "'brazil scorers''brazil scorers'\n", - "\n", - "'str' object is not callable'str' object is not callable\n", - "\n", - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" - ] - }, + "data": { + "text/plain": [ + "{'id': 12,\n", + " 'table_csv': '2-13135264-6.html.csv',\n", + " 'table_text': 'date#visitor#score#home#decision#attendance#record\\njanuary 2#detroit#4 - 1#carolina#joseph#17053#24 - 12 - 4 - 1\\njanuary 3#anaheim#1 - 3#detroit#legace#20066#25 - 12 - 4 - 1\\njanuary 5#nashville#0 - 6#detroit#joseph#20066#26 - 12 - 4 - 1\\njanuary 7#boston#3 - 0#detroit#joseph#20066#26 - 13 - 4 - 1\\njanuary 10#detroit#1 - 2#boston#joseph#17565#26 - 13 - 4 - 2\\njanuary 14#chicago#2 - 4#detroit#legace#20066#27 - 13 - 4 - 2\\njanuary 16#phoenix#3 - 3#detroit#joseph#20066#27 - 13 - 5 - 2\\njanuary 19#detroit#1 - 2#san jose#joseph#17361#27 - 14 - 5 - 2\\njanuary 21#detroit#2 - 2#anaheim#legace#17174#27 - 14 - 6 - 2\\njanuary 22#detroit#5 - 4#los angeles#joseph#18118#28 - 14 - 6 - 2\\njanuary 24#detroit#2 - 5#phoenix#joseph#19019#28 - 15 - 6 - 2\\njanuary 26#detroit#2 - 2#dallas#legace#18532#28 - 15 - 7 - 2\\njanuary 29#new jersey#2 - 5#detroit#joseph#20066#29 - 15 - 7 - 2\\njanuary 31#carolina#4 - 4#detroit#legace#20066#30 - 15 - 8 - 2\\n',\n", + " 'label': 0,\n", + " 'statement': 'there be a tie for the largest point gap 2 time during the season',\n", + " 'table_caption': '2003 - 04 detroit red wings season',\n", + " 'nlsep_query': 'there be a tie for the largest point gap 2 time during the season col : date | visitor | score | home | decision | attendance | record row 1 : january 2 | detroit | 4 - 1 | carolina | joseph | 17053 | 24 - 12 - 4 - 1 row 2 : january 3 | anaheim | 1 - 3 | detroit | legace | 20066 | 25 - 12 - 4 - 1 row 3 : january 5 | nashville | 0 - 6 | detroit | joseph | 20066 | 26 - 12 - 4 - 1 row 4 : january 7 | boston | 3 - 0 | detroit | joseph | 20066 | 26 - 13 - 4 - 1 row 5 : january 10 | detroit | 1 - 2 | boston | joseph | 17565 | 26 - 13 - 4 - 2 row 6 : january 14 | chicago | 2 - 4 | detroit | legace | 20066 | 27 - 13 - 4 - 2 row 7 : january 16 | phoenix | 3 - 3 | detroit | joseph | 20066 | 27 - 13 - 5 - 2 row 8 : january 19 | detroit | 1 - 2 | san jose | joseph | 17361 | 27 - 14 - 5 - 2 row 9 : january 21 | detroit | 2 - 2 | anaheim | legace | 17174 | 27 - 14 - 6 - 2 row 10 : january 22 | detroit | 5 - 4 | los angeles | joseph | 18118 | 28 - 14 - 6 - 2 row 11 : january 24 | detroit | 2 - 5 | phoenix | joseph | 19019 | 28 - 15 - 6 - 2 row 12 : january 26 | detroit | 2 - 2 | dallas | legace | 18532 | 28 - 15 - 7 - 2 row 13 : january 29 | new jersey | 2 - 5 | detroit | joseph | 20066 | 29 - 15 - 7 - 2 row 14 : january 31 | carolina | 4 - 4 | detroit | legace | 20066 | 30 - 15 - 8 - 2',\n", + " 'semtab_query': 'there be a tie for the largest point gap 2 time during the season 2003 - 04 detroit red wings season
dateday - 0.96\"str\"0[\"january 19\", \"january 3\", \"january 26\"]
visitorcity - 0.96\"str\"0[\"boston\", \"detroit\", \"detroit\"]
scoreweight - 0.59\"str\"0[\"3 - 0\", \"1 - 2\", \"2 - 5\"]
hometeam - 1.0\"str\"0[\"detroit\", \"san jose\", \"detroit\"]
decisionname - 1.0\"str\"0[\"joseph\", \"legace\", \"joseph\"]
attendancedepth - 0.85\"int\"0[20066, 17174, 17361]
recordage - 0.88\"str\"0[\"28 - 15 - 7 - 2\", \"26 - 13 - 4 - 2\", \"25 - 12 - 4 - 1\"]
',\n", + " 'nlsep_answ': '```json\\n\"PANDA\": \"df.groupby([\\'home\\', \\'visitor\\'])[\\'score\\'].apply(lambda x: x.str.split(\\'-\\', expand=True).apply(lambda y: abs(int(y[0]) - int(y[1])), axis=1).max().nlargest(2).index.duplicated().any()\"\\n```\\nThis code groups the DataFrame by \\'home\\' and \\'visitor\\' columns, then for each group it calculates the maximum point gap between the scores. It then checks if there are any duplicated values in the top 2 maximum point gaps, indicating a tie.\\n',\n", + " 'nlsep_label': 'False',\n", + " 'nlsep_answ_correct': 'The error in the code is due to an unbalanced parentheses. Here is the corrected code:\\n\\n```python\\npandas_code = \"(df[\\'score\\'].str.split(\\'-\\', expand=True)[0].astype(int) - df[\\'score\\'].str.split(\\'-\\', expand=True)[1].astype(int)).nunique() == 2\"\\n```\\n\\nThis code calculates the point gap between the home and visitor scores and checks if there are two unique values, which would indicate a tie for the largest point gap twice during the season.\\n\\nPlease note that the pandas_code must be a boolean. To ensure this, you can wrap the expression in a bool() function:\\n\\n```python\\npandas_code = \"bool((df[\\'score\\'].str.split(\\'-\\', expand=True)[0].astype(int) - df[\\'score\\'].str.split(\\'-\\', expand=True)[1].astype(int)).nunique() == 2)\"\\n```\\n\\nNow, when you run `str(bool(eval(pandas_code)))`, it should return `True` if there are two unique largest point gap values and `False` otherwise.\\n\\nPlease note that using `eval` can be dangerous if the input is not trusted, as it can execute any Python code. In this case, it is safe to use because the pandas_code is being constructed manually and not derived from user input.\\n\\nThe output in the Json format will be:\\n\\n```json\\n{\\n \"CORRECT PANDA\": \"bool((df[\\'score\\'].str.split(\\'-\\', expand=True)[0].astype(int) - df[\\'score\\'].str.split(\\'-\\', expand=True)[1].astype(int)).nunique() == 2)\"\\n}\\n```\\n'}" + ] + }, + "execution_count": 180, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "d2[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 196, + "id": "7ea78d2c-682c-401e-9721-dca71de9ab0e", + "metadata": {}, + "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 25%|██▌ | 1066/4257 [04:55<06:50, 7.77 examples/s]" + "Filter (num_proc=17): 100%|██████████| 471/471 [00:00<00:00, 974.02 examples/s]\n" ] - }, + } + ], + "source": [ + "d3 = d2.filter(lambda x : x['nlsep_label'] != 'None',num_proc=17)" + ] + }, + { + "cell_type": "code", + "execution_count": 197, + "id": "897be776-d045-4073-9d12-b5329a5d5889", + "metadata": {}, + "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" - ] - }, + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct', 'nlsep_label_correct'],\n", + " num_rows: 0\n", + "})" + ] + }, + "execution_count": 197, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "d3" + ] + }, + { + "cell_type": "code", + "execution_count": 200, + "id": "39c4d23e-4976-45b1-9e3e-1469c0f35e88", + "metadata": {}, + "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 25%|██▌ | 1068/4257 [04:56<11:11, 4.75 examples/s]" + "Filter (num_proc=17): 100%|██████████| 471/471 [00:00<00:00, 918.59 examples/s]\n" ] - }, + } + ], + "source": [ + "d3 = d2.filter(lambda x : x['nlsep_label_correct']==str(bool(x['label'])),num_proc=17)" + ] + }, + { + "cell_type": "code", + "execution_count": 201, + "id": "238af416-0f43-4c15-8d20-021d53adfc9c", + "metadata": {}, + "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "EEEERRRRRRR 930\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" - ] - }, + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct', 'nlsep_label_correct'],\n", + " num_rows: 296\n", + "})" + ] + }, + "execution_count": 201, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "d3" + ] + }, + { + "cell_type": "code", + "execution_count": 205, + "id": "0cc4f74e-81ad-4afe-b920-20e40da86a7c", + "metadata": {}, + "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 25%|██▌ | 1071/4257 [04:56<08:45, 6.07 examples/s]" - ] - }, + "data": { + "text/plain": [ + "date object\n", + "result object\n", + "score object\n", + "brazil scorers object\n", + "competition object\n", + "dtype: object" + ] + }, + "execution_count": 205, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.dtypes" + ] + }, + { + "cell_type": "code", + "execution_count": 204, + "id": "97cd2a90-0b17-499a-8620-eed8408962c4", + "metadata": {}, + "outputs": [], + "source": [ + "for col in df.columns:\n", + " try:\n", + " df[col] = pd.to_numeric(df[col])\n", + " except ValueError:\n", + " # Если возникает ошибка, оставляем столбец как есть\n", + " pass" + ] + }, + { + "cell_type": "code", + "execution_count": 206, + "id": "c9d84ec7-3f0a-4052-8c9f-7fd4bfaa4928", + "metadata": {}, + "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 805\n", - "Cannot perform 'rand_' with a dtyped [bool] array and scalar of type [bool]\n", - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1424\n", - "invalid syntax (, line 1)\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 175\n", - "EEEERRRRRRR 'str' object has no attribute 'year'329\n", - "\n", - "unsupported operand type(s) for -: 'str' and 'str'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" - ] - }, + "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", + "
dateresultscorebrazil scorerscompetition
0may 11 , 1919w6 - 0friedenreich (3) , neco (2) , haroldosouth american championship
1may 18 , 1919w3 - 1heitor , amílcar , millonsouth american championship
2may 26 , 1919d2 - 2neco (2)south american championship
3may 29 , 1919w1 - 0friedenreichsouth american championship
4june 1 , 1919d3 - 3haroldo , arlindo (2)taça roberto cherry
\n", + "
" + ], + "text/plain": [ + " date result score brazil scorers \\\n", + "0 may 11 , 1919 w 6 - 0 friedenreich (3) , neco (2) , haroldo \n", + "1 may 18 , 1919 w 3 - 1 heitor , amílcar , millon \n", + "2 may 26 , 1919 d 2 - 2 neco (2) \n", + "3 may 29 , 1919 w 1 - 0 friedenreich \n", + "4 june 1 , 1919 d 3 - 3 haroldo , arlindo (2) \n", + "\n", + " competition \n", + "0 south american championship \n", + "1 south american championship \n", + "2 south american championship \n", + "3 south american championship \n", + "4 taça roberto cherry " + ] + }, + "execution_count": 206, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 212, + "id": "62e0832f-ebf6-42a9-9f44-01540151b6e1", + "metadata": {}, + "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 25%|██▌ | 1073/4257 [04:57<12:30, 4.24 examples/s]" + "Filter (num_proc=17): 100%|██████████| 4257/4257 [00:00<00:00, 8874.34 examples/s]\n" ] - }, + } + ], + "source": [ + "data = load_from_disk('tab_fact_test_xml_nlsep_correct_dtype/')\n", + "d2 = data.filter(lambda x : x['nlsep_answ_correct'] != 'None',num_proc=17)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 213, + "id": "0c7637b6-856f-41be-be10-e23e7646d82e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct', 'nlsep_label_correct'],\n", + " num_rows: 415\n", + "})" + ] + }, + "execution_count": 213, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "d2" + ] + }, + { + "cell_type": "code", + "execution_count": 214, + "id": "454a3226-c3bd-4bd9-baab-ff2b92cf017d", + "metadata": {}, + "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 25\n", - "Can only use .dt accessor with datetimelike values\n", - "EEEERRRRRRR 1273\n", - "'col'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct'],\n", + " num_rows: 12779\n", + "})\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 25%|██▌ | 1074/4257 [04:58<15:00, 3.54 examples/s]" + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 27151.13 examples/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct'],\n", + " num_rows: 12779\n", + "})\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 25%|██▌ | 1075/4257 [04:58<14:16, 3.71 examples/s]" + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 25923.24 examples/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 561\n", - "Can only use .dt accessor with datetimelike values\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct'],\n", + " num_rows: 8974\n", + "})\n", + "70.22458721339699\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 25%|██▌ | 1076/4257 [04:58<12:47, 4.14 examples/s]" + "Filter (num_proc=17): 100%|██████████| 8974/8974 [00:00<00:00, 18914.21 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 726\n", - "'>=' not supported between instances of 'str' and 'int'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "42.92980671414038\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 25%|██▌ | 1077/4257 [04:58<16:38, 3.18 examples/s]" + "\n" ] - }, + } + ], + "source": [ + "process_data = load_from_disk('./tab_fact_test_xml_nlsep_new_correct//')\n", + "print(process_data)\n", + "dd = process_data.filter(lambda x: True if x['nlsep_answ']!='None' else False,num_proc=17)\n", + "print(dd)\n", + "dd = process_data.filter(lambda x: True if x['nlsep_label']!='None' else False,num_proc=17)\n", + "print(dd)\n", + "print(dd.shape[0]/process_data.shape[0]*100)\n", + "true = dd.filter(lambda x : True if x['nlsep_label']==str(bool(x['label'])) else False,num_proc=17)\n", + "print(true.shape[0]/process_data.shape[0]*100)" + ] + }, + { + "cell_type": "code", + "execution_count": 217, + "id": "2e895222-3547-4af0-b81a-7a317d9ad273", + "metadata": {}, + "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" - ] - }, + "data": { + "text/plain": [ + "{'id': 0,\n", + " 'table_csv': '2-1570274-4.html.csv',\n", + " 'table_text': 'tournament#wins#top - 5#top - 10#top - 25#events#cuts made\\nmasters tournament#0#1#2#4#4#4\\nus open#0#2#3#4#6#5\\nthe open championship#1#2#2#2#3#3\\npga championship#0#0#1#2#5#4\\ntotals#1#5#8#12#18#16\\n',\n", + " 'label': 1,\n", + " 'statement': 'tournament that tony lema have participate in include the master tournament , the us open , the pga championship and the open championship',\n", + " 'table_caption': 'tony lema',\n", + " 'nlsep_query': 'tournament that tony lema have participate in include the master tournament , the us open , the pga championship and the open championship col : tournament | wins | top - 5 | top - 10 | top - 25 | events | cuts made row 1 : masters tournament | 0 | 1 | 2 | 4 | 4 | 4 row 2 : us open | 0 | 2 | 3 | 4 | 6 | 5 row 3 : the open championship | 1 | 2 | 2 | 2 | 3 | 3 row 4 : pga championship | 0 | 0 | 1 | 2 | 5 | 4 row 5 : totals | 1 | 5 | 8 | 12 | 18 | 16',\n", + " 'semtab_query': 'tournament that tony lema have participate in include the master tournament , the us open , the pga championship and the open championship tony lema
tournamentcategory - 1.0\"str\"0[\"pga championship\", \"masters tournament\", \"us open\"]
winsrank - 1.0\"int\"0[0, 0, 0]
top - 5rank - 1.0\"int\"0[2, 5, 2]
top - 10rank - 1.0\"int\"0[8, 1, 3]
top - 25rank - 0.99\"int\"0[12, 2, 4]
eventsduration - 0.73\"int\"0[18, 5, 6]
cuts maderank - 0.99\"int\"0[5, 3, 16]
',\n", + " 'nlsep_answ': 'Here is the single-line pandas expression that translates the given natural language statement:\\n\\n```json\\n\"PANDA\": \"df[(df[\\'tournament\\'] == \\'tony lema\\') & (df[\\'tournament\\'].isin([\\'the master tournament\\', \\'the us open\\', \\'the pga championship\\', \\'the open championship\\']))].sum().eq(df.loc[4]).all()\"\\n```\\n\\nThis expression checks if the sum of the specified columns for the rows where \\'tournament\\' is \\'tony lema\\' and where \\'tournament\\' is in the given list of tournaments equals the sum of the specified columns for the total row.\\n',\n", + " 'nlsep_label': 'False',\n", + " 'nlsep_answ_correct': 'None'}" + ] + }, + "execution_count": 217, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dd[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 216, + "id": "4ff35c94-cb7a-49af-9273-35cd90b9f96a", + "metadata": {}, + "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 25%|██▌ | 1078/4257 [04:59<16:43, 3.17 examples/s]" + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 26475.69 examples/s]\n" ] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" - ] - }, + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct'],\n", + " num_rows: 479\n", + "})" + ] + }, + "execution_count": 216, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "process_data.filter(lambda x: True if x['nlsep_answ_correct']!='None' else False,num_proc=17)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 220, + "id": "0ceafa48-cfaa-45c3-93eb-659900912679", + "metadata": {}, + "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 25%|██▌ | 1080/4257 [04:59<13:19, 3.97 examples/s]" + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 26537.53 examples/s]\n" ] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 251\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "'brazil scorers'\n", - "'str' object is not callable\n" - ] - }, + "data": { + "text/plain": [ + "{'id': 905,\n", + " 'table_csv': '2-17231125-6.html.csv',\n", + " 'table_text': \"place#player#country#score#to par\\n1#curtis strange#united states#70 + 67 + 69 = 206#- 7\\nt2#nick faldo#england#72 + 67 + 68 = 207#- 6\\nt2#bob gilder#united states#68 + 69 + 70 = 207#- 6\\nt2#scott simpson#united states#69 + 66 + 72 = 207#- 6\\nt5#larry mize#united states#69 + 67 + 72 = 208#- 5\\nt5#d a weibring#united states#71 + 69 + 68 = 208#- 5\\n7#mark o'meara#united states#71 + 72 + 66 = 209#- 4\\n8#fred couples#united states#72 + 67 + 71 = 210#- 3\\n9#lanny wadkins#united states#70 + 71 + 70 = 211#- 2\\n10#ken green#united states#72 + 70 + 70 = 212#- 1\\n\",\n", + " 'label': 1,\n", + " 'statement': 'player larry mize and d a be tie for 5th place',\n", + " 'table_caption': '1988 u.s. open (golf)',\n", + " 'nlsep_query': \"player larry mize and d a be tie for 5th place col : place | player | country | score | to par row 1 : 1 | curtis strange | united states | 70 + 67 + 69 = 206 | - 7 row 2 : t2 | nick faldo | england | 72 + 67 + 68 = 207 | - 6 row 3 : t2 | bob gilder | united states | 68 + 69 + 70 = 207 | - 6 row 4 : t2 | scott simpson | united states | 69 + 66 + 72 = 207 | - 6 row 5 : t5 | larry mize | united states | 69 + 67 + 72 = 208 | - 5 row 6 : t5 | d a weibring | united states | 71 + 69 + 68 = 208 | - 5 row 7 : 7 | mark o'meara | united states | 71 + 72 + 66 = 209 | - 4 row 8 : 8 | fred couples | united states | 72 + 67 + 71 = 210 | - 3 row 9 : 9 | lanny wadkins | united states | 70 + 71 + 70 = 211 | - 2 row 10 : 10 | ken green | united states | 72 + 70 + 70 = 212 | - 1\",\n", + " 'semtab_query': 'player larry mize and d a be tie for 5th place 1988 u.s. open (golf)
placerank - 1.0\"int\"0[\"t2\", \"t5\", \"7\"]
playername - 1.0\"str\"0[\"scott simpson\", \"lanny wadkins\", \"bob gilder\"]
countrynationality - 1.0\"str\"0[\"united states\", \"united states\", \"united states\"]
scoreweight - 1.0\"str\"0[\"72 + 70 + 70 = 212\", \"71 + 69 + 68 = 208\", \"70 + 67 + 69 = 206\"]
to parweight - 0.71\"str\"0[\"- 6\", \"- 5\", \"- 6\"]
',\n", + " 'nlsep_answ': 'Here\\'s the single-line pandas expression:\\n\\n```json\\n\"PANDA\": \"df.loc[df[\\'score\\'].isin(df.loc[df[\\'place\\']==5, \\'score\\']), \\'player\\'].str.contains(\\'larry mize|d a weibring\\').all()\"\\n```\\n\\nThis expression checks if all the players in the 5th place score are present in the score of \\'larry mize\\' and \\'d a weibring\\'.\\n',\n", + " 'nlsep_label': 'True',\n", + " 'nlsep_answ_correct': 'None'}" + ] + }, + "execution_count": 220, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "process_data.filter(lambda x: True if x['id']==905 else False,num_proc=17)[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 221, + "id": "dde01baa-1f1f-495e-84c6-1d091b8e8ca6", + "metadata": {}, + "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 25%|██▌ | 1081/4257 [04:59<15:07, 3.50 examples/s]" - ] - }, + "data": { + "text/plain": [ + "\"df.loc[df['score'].isin(df.loc[df['place']==5, 'score']), 'player'].str.contains('larry mize|d a weibring').all()\"" + ] + }, + "execution_count": 221, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "parse_panda_code('Here\\'s the single-line pandas expression:\\n\\n```json\\n\"PANDA\": \"df.loc[df[\\'score\\'].isin(df.loc[df[\\'place\\']==5, \\'score\\']), \\'player\\'].str.contains(\\'larry mize|d a weibring\\').all()\"\\n```\\n\\nThis expression checks if all the players in the 5th place score are present in the score of \\'larry mize\\' and \\'d a weibring\\'.\\n')" + ] + }, + { + "cell_type": "code", + "execution_count": 237, + "id": "395f05b4-f2f4-4ac5-a7d8-ddaf87cfed20", + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_csv(StringIO(\"place#player#country#score#to par\\n1#curtis strange#united states#70 + 67 + 69 = 206#- 7\\nt2#nick faldo#england#72 + 67 + 68 = 207#- 6\\nt2#bob gilder#united states#68 + 69 + 70 = 207#- 6\\nt2#scott simpson#united states#69 + 66 + 72 = 207#- 6\\nt5#larry mize#united states#69 + 67 + 72 = 208#- 5\\nt5#d a weibring#united states#71 + 69 + 68 = 208#- 5\\n7#mark o'meara#united states#71 + 72 + 66 = 209#- 4\\n8#fred couples#united states#72 + 67 + 71 = 210#- 3\\n9#lanny wadkins#united states#70 + 71 + 70 = 211#- 2\\n10#ken green#united states#72 + 70 + 70 = 212#- 1\\n\"), delimiter='#')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 238, + "id": "1505bb2a-7799-4042-9053-df547617aa69", + "metadata": {}, + "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 90\n", - "index 0 is out of bounds for axis 0 with size 0\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" - ] - }, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
placeplayercountryscoreto par
01curtis strangeunited states70 + 67 + 69 = 206- 7
1t2nick faldoengland72 + 67 + 68 = 207- 6
2t2bob gilderunited states68 + 69 + 70 = 207- 6
3t2scott simpsonunited states69 + 66 + 72 = 207- 6
4t5larry mizeunited states69 + 67 + 72 = 208- 5
5t5d a weibringunited states71 + 69 + 68 = 208- 5
67mark o'mearaunited states71 + 72 + 66 = 209- 4
78fred couplesunited states72 + 67 + 71 = 210- 3
89lanny wadkinsunited states70 + 71 + 70 = 211- 2
910ken greenunited states72 + 70 + 70 = 212- 1
\n", + "
" + ], + "text/plain": [ + " place player country score to par\n", + "0 1 curtis strange united states 70 + 67 + 69 = 206 - 7\n", + "1 t2 nick faldo england 72 + 67 + 68 = 207 - 6\n", + "2 t2 bob gilder united states 68 + 69 + 70 = 207 - 6\n", + "3 t2 scott simpson united states 69 + 66 + 72 = 207 - 6\n", + "4 t5 larry mize united states 69 + 67 + 72 = 208 - 5\n", + "5 t5 d a weibring united states 71 + 69 + 68 = 208 - 5\n", + "6 7 mark o'meara united states 71 + 72 + 66 = 209 - 4\n", + "7 8 fred couples united states 72 + 67 + 71 = 210 - 3\n", + "8 9 lanny wadkins united states 70 + 71 + 70 = 211 - 2\n", + "9 10 ken green united states 72 + 70 + 70 = 212 - 1" + ] + }, + "execution_count": 238, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 239, + "id": "f1e3a44a-3a2b-48f0-a61a-228bae4e8f9f", + "metadata": {}, + "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 25%|██▌ | 1082/4257 [05:00<16:27, 3.21 examples/s]" - ] - }, + "data": { + "text/plain": [ + "place object\n", + "player object\n", + "country object\n", + "score object\n", + "to par object\n", + "dtype: object" + ] + }, + "execution_count": 239, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.dtypes" + ] + }, + { + "cell_type": "code", + "execution_count": 230, + "id": "9ec1801f-ad92-4b72-8267-9df578e1185b", + "metadata": {}, + "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 25%|██▌ | 1083/4257 [05:00<14:49, 3.57 examples/s]" + "place Unable to parse string \"t2\" at position 1\n", + "player Unable to parse string \"curtis strange\" at position 0\n", + "country Unable to parse string \"united states\" at position 0\n", + "score Unable to parse string \"70 + 67 + 69 = 206\" at position 0\n", + "to par Unable to parse string \"- 7\" at position 0\n" ] - }, + } + ], + "source": [ + "for col in df.columns:\n", + " try:\n", + " df[col] = pd.to_numeric(df[col])\n", + " except ValueError as e:\n", + " print(col,e)\n", + " # Если возникает ошибка, оставляем столбец как есть\n", + " pass" + ] + }, + { + "cell_type": "code", + "execution_count": 235, + "id": "deb87756-4766-4caa-bc96-8fd5fa41e23f", + "metadata": {}, + "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" - ] - }, + "data": { + "text/plain": [ + "-7" + ] + }, + "execution_count": 235, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "int('-7')" + ] + }, + { + "cell_type": "code", + "execution_count": 236, + "id": "9e818218-300a-4a29-85ea-1c5f16f5da92", + "metadata": {}, + "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 25%|██▌ | 1085/4257 [05:00<11:46, 4.49 examples/s]" - ] - }, + "data": { + "text/plain": [ + "np.True_" + ] + }, + "execution_count": 236, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "eval(\"df.loc[df['score'].isin(df.loc[df['place']==5, 'score']), 'player'].str.contains('larry mize|d a weibring').all()\")" + ] + }, + { + "cell_type": "code", + "execution_count": 334, + "id": "5ad79a70-8a2f-4423-96e8-f6373ae279de", + "metadata": {}, + "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1595\n", - "The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()\n", - "EEEERRRRRRR 489\n", - "'>' not supported between instances of 'str' and 'float'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 651\n", - "index 0 is out of bounds for axis 0 with size 0\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 412\n", - "'age'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1424\n", - "invalid syntax (, line 0)\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct'],\n", + " num_rows: 12779\n", + "})\n", + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct'],\n", + " num_rows: 2798\n", + "})\n", + "21.89529697159402\n", + "100.0\n", + "57.255182273052185\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▌ | 1087/4257 [05:01<17:26, 3.03 examples/s]" + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 27316.22 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "55.450348227560845\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▌ | 1089/4257 [05:02<13:32, 3.90 examples/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "\n" ] - }, + } + ], + "source": [ + "data = load_from_disk('tab_fact_test_xml_nlsep_new_correct_modify/')\n", + "print(data)\n", + "process_data = data.filter(lambda x : x['nlsep_answ_correct'] != 'None',num_proc=17)\n", + "print(process_data)\n", + "dd = process_data.filter(lambda x: True if x['nlsep_label']!='None' else False,num_proc=17)\n", + "print(dd.shape[0]/data.shape[0]*100)\n", + "print(dd.shape[0]/process_data.shape[0]*100)\n", + "true = dd.filter(lambda x : True if x['nlsep_label']==str(bool(x['label'])) else False,num_proc=17)\n", + "print(true.shape[0]/process_data.shape[0]*100)\n", + "full = data.filter(lambda x : True if x['nlsep_label']==str(bool(x['label'])) else False,num_proc=17)\n", + "print(full.shape[0]/data.shape[0]*100)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 329, + "id": "ecf76bba-e2ea-4c7a-be4e-946cda61935c", + "metadata": {}, + "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 26%|██▌ | 1090/4257 [05:02<12:48, 4.12 examples/s]" - ] - }, + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct'],\n", + " num_rows: 2798\n", + "})" + ] + }, + "execution_count": 329, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "true = dd.filter(lambda x : True if x['nlsep_label']==str(bool(x['label'])) else False,num_proc=17)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 335, + "id": "d8c9edfc-6842-413b-9a5d-7f755f7f990a", + "metadata": {}, + "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'semtab_answ', 'semtab_label', 'semtab_answ_correct'],\n", + " num_rows: 12779\n", + "})\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▌ | 1091/4257 [05:02<11:18, 4.67 examples/s]" + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 25449.74 examples/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 1275\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 930\n", - "Cannot perform 'rand_' with a dtyped [object] array and scalar of type [bool]\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'brazil scorers''str' object is not callable\n", - "\n", - "'str' object is not callable" + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'semtab_answ', 'semtab_label', 'semtab_answ_correct'],\n", + " num_rows: 2727\n", + "})\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▌ | 1092/4257 [05:02<13:25, 3.93 examples/s]" + "Filter (num_proc=17): 100%|██████████| 2727/2727 [00:00<00:00, 5528.78 examples/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 727\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "EEEERRRRRRR 561\n", - "Can only use .dt accessor with datetimelike values\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "21.339697941935988\n", + "100.0\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▌ | 1094/4257 [05:03<16:24, 3.21 examples/s]" + "Filter (num_proc=17): 100%|██████████| 2727/2727 [00:00<00:00, 5716.06 examples/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "54.49211587825449\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▌ | 1096/4257 [05:03<12:56, 4.07 examples/s]" + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 25739.32 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 251\n", - "'retired'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "51.85069254245246\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▌ | 1097/4257 [05:04<14:51, 3.54 examples/s]" + "\n" ] - }, + } + ], + "source": [ + "data = load_from_disk('tab_fact_test_xml_semtab_new_correct_modify/')\n", + "print(data)\n", + "process_data = data.filter(lambda x : x['semtab_answ_correct'] != 'None',num_proc=17)\n", + "print(process_data)\n", + "dd = process_data.filter(lambda x: True if x['semtab_label']!='None' else False,num_proc=17)\n", + "print(dd.shape[0]/data.shape[0]*100)\n", + "print(dd.shape[0]/process_data.shape[0]*100)\n", + "true = dd.filter(lambda x : True if x['semtab_label']==str(bool(x['label'])) else False,num_proc=17)\n", + "print(true.shape[0]/process_data.shape[0]*100)\n", + "full = data.filter(lambda x : True if x['semtab_label']==str(bool(x['label'])) else False,num_proc=17)\n", + "print(full.shape[0]/data.shape[0]*100)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 327, + "id": "56fb6f59-7181-4b18-b423-6a9fbc2db338", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'tournament object\\nwins int64\\ntop - 5 int64\\ntop - 10 int64\\ntop - 25 int64\\nevents int64\\ncuts made int64'" + ] + }, + "execution_count": 327, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_info" + ] + }, + { + "cell_type": "code", + "execution_count": 336, + "id": "ad7ab9cb-d6ee-4d00-8598-faee3c5b46f6", + "metadata": {}, + "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'semtab_answ', 'semtab_label', 'semtab_answ_correct'],\n", + " num_rows: 12779\n", + "})\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▌ | 1098/4257 [05:04<15:43, 3.35 examples/s]" + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 25729.94 examples/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'semtab_answ', 'semtab_label', 'semtab_answ_correct'],\n", + " num_rows: 2876\n", + "})\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▌ | 1099/4257 [05:04<13:18, 3.95 examples/s]" + "Filter (num_proc=17): 100%|██████████| 2876/2876 [00:00<00:00, 5600.28 examples/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "22.50567337037327\n", + "100.0\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▌ | 1100/4257 [05:04<11:48, 4.46 examples/s]" + "Filter (num_proc=17): 100%|██████████| 2876/2876 [00:00<00:00, 5845.32 examples/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 'brazil scorers'331\n", - "'str' object is not callable\n", - "\n", - "Can only use .dt accessor with datetimelike values\n" + "54.24200278164116\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▌ | 1101/4257 [05:05<12:47, 4.11 examples/s]" + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 26336.59 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR'brazil scorers' \n", - "1134'str' object is not callable\n", - "\n" + "52.81320917129666\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▌ | 1103/4257 [05:05<14:24, 3.65 examples/s]" + "\n" ] - }, + } + ], + "source": [ + "data = load_from_disk('tab_fact_test_xml_semtab_new_correct_modify_add_info/')\n", + "print(data)\n", + "process_data = data.filter(lambda x : x['semtab_answ_correct'] != 'None',num_proc=17)\n", + "print(process_data)\n", + "dd = process_data.filter(lambda x: True if x['semtab_label']!='None' else False,num_proc=17)\n", + "print(dd.shape[0]/data.shape[0]*100)\n", + "print(dd.shape[0]/process_data.shape[0]*100)\n", + "true = dd.filter(lambda x : True if x['semtab_label']==str(bool(x['label'])) else False,num_proc=17)\n", + "print(true.shape[0]/process_data.shape[0]*100)\n", + "full = data.filter(lambda x : True if x['semtab_label']==str(bool(x['label'])) else False,num_proc=17)\n", + "print(full.shape[0]/data.shape[0]*100)" + ] + }, + { + "cell_type": "code", + "execution_count": 335, + "id": "1ead2964-6306-458c-adcf-ccf9016f58a9", + "metadata": {}, + "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1595\n", - "'long row'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct'],\n", + " num_rows: 12779\n", + "})\n", + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct'],\n", + " num_rows: 2747\n", + "})\n", + "Процент корректируемых ответов 21.496204710853746\n", + "успешно скорректированные отноосительно корректируемых 58.79140880961048\n", + "выполнимость 88.38719774630252\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▌ | 1104/4257 [05:06<16:19, 3.22 examples/s]" + "Filter (num_proc=17): 100%|██████████| 11295/11295 [00:00<00:00, 14012.11 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "коректность вывыполняемых 61.354581673306775\n", + "Общая точность 54.229595430002355\n", + "точность без учета коррекции 41.59167383989358\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▌ | 1106/4257 [05:06<12:05, 4.35 examples/s]" + "\n" ] - }, + } + ], + "source": [ + "data = load_from_disk('tab_fact_test_xml_nlsep_new_correct_modify_noadd_info/')\n", + "\n", + "print(data)\n", + "process_data = data.filter(lambda x : x['nlsep_answ_correct'] != 'None',num_proc=17)\n", + "print(process_data)\n", + "dd = data.filter(lambda x: True if x['nlsep_label']!='None' else False,num_proc=17)\n", + "print('Процент корректируемых ответов',process_data.shape[0]/data.shape[0]*100)\n", + "cor = process_data.filter(lambda x : True if x[f'nlsep_label']==str(bool(x['label'])) else False,num_proc=17)\n", + "print('успешно скорректированные отноосительно корректируемых ',cor.shape[0]/process_data.shape[0]*100)\n", + "print('выполнимость',dd.shape[0]/data.shape[0]*100)\n", + "#print(dd.shape[0]/data.shape[0]*100)\n", + "\n", + "true = dd.filter(lambda x : True if x['nlsep_label']==str(bool(x['label'])) else False,num_proc=17)\n", + "print('коректность вывыполняемых ',true.shape[0]/dd.shape[0]*100)\n", + "full = data.filter(lambda x : True if x[f'nlsep_label']==str(bool(x['label'])) else False,num_proc=17)\n", + "acc = full.shape[0]/data.shape[0]*100\n", + "without_corr = data.filter(lambda x : x[f'nlsep_answ_correct'] == 'None',num_proc=17)\n", + "full_wo_corr = without_corr.filter(lambda x : True if x[f'nlsep_label']==str(bool(x['label'])) else False,num_proc=17)\n", + "print('Общая точность',acc)\n", + "print('точность без учета коррекции',full_wo_corr.shape[0]/data.shape[0]*100)" + ] + }, + { + "cell_type": "code", + "execution_count": 340, + "id": "e59bc21d-56ae-4a93-b8e4-9da74c2ed256", + "metadata": {}, + "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + " tournament wins top - 5 top - 10 top - 25 events cuts made\n", + "0 masters tournament 0 1 2 4 4 4\n", + "1 us open 0 2 3 4 6 5\n", + "2 the open championship 1 2 2 2 3 3\n", + "3 pga championship 0 0 1 2 5 4\n", + "4 totals 1 5 8 12 18 16\n" ] - }, + } + ], + "source": [ + "print(df.to_string())" + ] + }, + { + "cell_type": "code", + "execution_count": 341, + "id": "67859f43-22fb-45d9-a140-ac54376e47d5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct'],\n", + " num_rows: 12779\n", + "})" + ] + }, + "execution_count": 341, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data" + ] + }, + { + "cell_type": "code", + "execution_count": 342, + "id": "753d3b4d-cf73-4188-be81-a2776e0f42b9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'tony lema be in the top 5 for the master tournament , the us open , and the open championship'" + ] + }, + "execution_count": 342, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[0]['statement']" + ] + }, + { + "cell_type": "code", + "execution_count": 343, + "id": "0aa35393-c5e8-4d63-bfbf-b047d7bb7b21", + "metadata": {}, + "outputs": [], + "source": [ + "import yaml\n", + "def load_config(config_file_path):\n", + " with open(config_file_path, 'r') as stream:\n", + " try:\n", + " # Use safe_load for security\n", + " config = yaml.safe_load(stream)\n", + " return config\n", + " except yaml.YAMLError as exc:\n", + " print(exc)\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 344, + "id": "e6eec661-04e8-4f84-a16a-a5cba91ccbea", + "metadata": {}, + "outputs": [], + "source": [ + " config_data = load_config('convert_config.yaml')" + ] + }, + { + "cell_type": "code", + "execution_count": 347, + "id": "f46cb4df-5f27-4dd2-944d-6e12ac08f4ea", + "metadata": {}, + "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 26%|██▌ | 1107/4257 [05:06<13:33, 3.87 examples/s]" - ] - }, + "data": { + "text/plain": [ + "dict_keys(['semtab_xml_elements'])" + ] + }, + "execution_count": 347, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "config_data.keys()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 349, + "id": "2a9239e1-4209-40cf-b793-c91cbdf52708", + "metadata": {}, + "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 806\n", - "'time'\n", - "'brazil scorers'\n", - "'str' object is not callable\n" - ] - }, + "data": { + "text/plain": [ + "bool" + ] + }, + "execution_count": 349, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(config_data['semtab_xml_elements']['include_data_types'])" + ] + }, + { + "cell_type": "code", + "execution_count": 249, + "id": "3784daff-54d5-4234-86b5-bdc4b1f4c943", + "metadata": {}, + "outputs": [], + "source": [ + "data = load_from_disk('tab_fact_test_universal2')" + ] + }, + { + "cell_type": "code", + "execution_count": 250, + "id": "7a01aea4-3e86-48df-ad02-bee45e73411a", + "metadata": {}, + "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 26%|██▌ | 1108/4257 [05:06<12:50, 4.09 examples/s]" - ] - }, + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_exampples_description_top1_tresh50', 'semtab_xml_elements_description_top1_tresh50'],\n", + " num_rows: 12779\n", + "})" + ] + }, + "execution_count": 250, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data" + ] + }, + { + "cell_type": "code", + "execution_count": 254, + "id": "60933c47-395d-46fd-bd51-ef8f589e71f4", + "metadata": {}, + "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 26%|██▌ | 1110/4257 [05:07<11:47, 4.45 examples/s]" + "
\n" ] - }, + } + ], + "source": [ + "print(data[0]['semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50'])" + ] + }, + { + "cell_type": "code", + "execution_count": 360, + "id": "ea879a46-97b4-4905-9c85-f90bf7fe89ad", + "metadata": {}, + "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'space_answ', 'space_label', 'space_answ_correct'],\n", + " num_rows: 12779\n", + "})\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▌ | 1111/4257 [05:07<11:20, 4.62 examples/s]" + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 25156.65 examples/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "EEEERRRRRRR 490\n", - "'rank'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'space_answ', 'space_label', 'space_answ_correct'],\n", + " num_rows: 3026\n", + "})\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▌ | 1112/4257 [05:07<11:41, 4.49 examples/s]" + "Filter (num_proc=17): 100%|██████████| 3026/3026 [00:00<00:00, 5870.48 examples/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 727\n", - "'>=' not supported between instances of 'str' and 'int'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 561\n", - "Can only use .dt accessor with datetimelike values\n", - "EEEERRRRRRR 1425\n", - "single positional indexer is out-of-bounds\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 175\n", - "unsupported operand type(s) for -: 'str' and 'str'\n", - "EEEERRRRRRR " + "23.679474137256438\n", + "100.0\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▌ | 1113/4257 [05:08<18:18, 2.86 examples/s]" + "Filter (num_proc=17): 100%|██████████| 3026/3026 [00:00<00:00, 5859.72 examples/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "412\n", - "'>' not supported between instances of 'str' and 'int'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1596\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 930\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "56.2128222075347\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▌ | 1115/4257 [05:09<19:14, 2.72 examples/s]" + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 24946.84 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 651\n", - "'school'\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "53.28272947804993\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▌ | 1117/4257 [05:09<15:23, 3.40 examples/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "EEEERRRRRRR 25\n", - "Can only use .dt accessor with datetimelike values\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "\n" ] - }, + } + ], + "source": [ + "data = load_from_disk('tab_fact_test_xml_space_new_correct_modify_noadd_info/')\n", + "print(data)\n", + "process_data = data.filter(lambda x : x['space_answ_correct'] != 'None',num_proc=17)\n", + "print(process_data)\n", + "dd = process_data.filter(lambda x: True if x['space_label']!='None' else False,num_proc=17)\n", + "print(dd.shape[0]/data.shape[0]*100)\n", + "print(dd.shape[0]/process_data.shape[0]*100)\n", + "true = dd.filter(lambda x : True if x['space_label']==str(bool(x['label'])) else False,num_proc=17)\n", + "print(true.shape[0]/process_data.shape[0]*100)\n", + "full = data.filter(lambda x : True if x['space_label']==str(bool(x['label'])) else False,num_proc=17)\n", + "print(full.shape[0]/data.shape[0]*100)" + ] + }, + { + "cell_type": "code", + "execution_count": 361, + "id": "425d327f-2b6b-4261-b86b-27f92f4ba9d3", + "metadata": {}, + "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 26%|██▋ | 1118/4257 [05:09<15:11, 3.44 examples/s]" + "ename": "NameError", + "evalue": "name 'tab_fact_test_semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_new_correct_modify_noadd_info' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[361], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mtab_fact_test_semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_new_correct_modify_noadd_info\u001b[49m\n", + "\u001b[0;31mNameError\u001b[0m: name 'tab_fact_test_semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_new_correct_modify_noadd_info' is not defined" ] - }, + } + ], + "source": [ + "tab_fact_test_semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_new_correct_modify_noadd_info\n" + ] + }, + { + "cell_type": "code", + "execution_count": 362, + "id": "d08dd679-0914-43b8-b7a0-b4bc84b53acb", + "metadata": {}, + "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_exampples_description_top1_tresh50', 'semtab_xml_elements_description_top1_tresh50', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_answ', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_label', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_answ_correct'],\n", + " num_rows: 12779\n", + "})\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▋ | 1119/4257 [05:10<13:54, 3.76 examples/s]" + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 25331.21 examples/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 728\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR" + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_exampples_description_top1_tresh50', 'semtab_xml_elements_description_top1_tresh50', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_answ', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_label', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_answ_correct'],\n", + " num_rows: 2399\n", + "})\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▋ | 1120/4257 [05:11<22:48, 2.29 examples/s]" + "Filter (num_proc=17): 100%|██████████| 2399/2399 [00:00<00:00, 4543.86 examples/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - " 1276\n", - "'goals_conceded'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "18.772986931684795\n", + "100.0\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▋ | 1121/4257 [05:11<21:03, 2.48 examples/s]" + "Filter (num_proc=17): 100%|██████████| 2399/2399 [00:00<00:00, 4636.70 examples/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 1134\n", - "'no'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 806\n", - "'time'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "54.18924551896623\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▋ | 1122/4257 [05:11<23:27, 2.23 examples/s]" + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 24993.23 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" + "53.86180452304562\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 26%|██▋ | 1123/4257 [05:12<18:38, 2.80 examples/s]" + "\n" ] - }, + } + ], + "source": [ + "data = load_from_disk('tab_fact_test_semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_new_correct_modify_noadd_info/')\n", + "print(data)\n", + "process_data = data.filter(lambda x : x['semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_answ_correct'] != 'None',num_proc=17)\n", + "print(process_data)\n", + "dd = process_data.filter(lambda x: True if x['semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_label']!='None' else False,num_proc=17)\n", + "print(dd.shape[0]/data.shape[0]*100)\n", + "print(dd.shape[0]/process_data.shape[0]*100)\n", + "true = dd.filter(lambda x : True if x['semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_label']==str(bool(x['label'])) else False,num_proc=17)\n", + "print(true.shape[0]/process_data.shape[0]*100)\n", + "full = data.filter(lambda x : True if x['semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_label']==str(bool(x['label'])) else False,num_proc=17)\n", + "print(full.shape[0]/data.shape[0]*100)" + ] + }, + { + "cell_type": "markdown", + "id": "0c38f01c-bf07-4ed3-9ff7-b3e109a164b4", + "metadata": {}, + "source": [ + "| Method | Accuracy |\n", + "|---------------------|:--------:|\n", + "| semtab xml elements | 51.85 |\n", + "| semtab html | 53.86 |\n", + "| space | 53.28 |\n", + "| nlsep | 54.23 |" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c3717b76-9c07-422f-84e9-484ea55d1e08", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 364, + "id": "2207705b-8237-4864-8e30-ba1f4b11b97a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'| | tournament | wins | top - 5 | top - 10 | top - 25 | events | cuts made |\\n|---:|:----------------------|-------:|----------:|-----------:|-----------:|---------:|------------:|\\n| 0 | masters tournament | 0 | 1 | 2 | 4 | 4 | 4 |\\n| 1 | us open | 0 | 2 | 3 | 4 | 6 | 5 |\\n| 2 | the open championship | 1 | 2 | 2 | 2 | 3 | 3 |\\n| 3 | pga championship | 0 | 0 | 1 | 2 | 5 | 4 |\\n| 4 | totals | 1 | 5 | 8 | 12 | 18 | 16 |'" + ] + }, + "execution_count": 364, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.to_markdown()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "30941fab-ff71-43d4-885e-c2f481d3c5c7", + "metadata": {}, + "outputs": [], + "source": [ + "python abation_experiments.py --inputdata tab_fact_test_semtab_html_ablation_correcring --outputdata tab_fact_test_semtab_html_ablation_correcring --conf-file semtab_html_config_answer2.yaml --num_proc 16 > correct_tabfact_semtab_html_log2.txt" + ] + }, + { + "cell_type": "code", + "execution_count": 365, + "id": "4ecbd443-738c-43d9-ac41-43294253f388", + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n" + ] + }, + { + "cell_type": "code", + "execution_count": 367, + "id": "af179919-9224-4bf0-9a1d-7a48da554253", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'cuda'" + ] + }, + "execution_count": 367, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "str(torch.device('cuda'))\n" + ] + }, + { + "cell_type": "code", + "execution_count": 371, + "id": "d5614fd2-2a41-4317-9e2f-1a115a196648", + "metadata": {}, + "outputs": [], + "source": [ + "data = load_from_disk('tab_fact_test_semtab_html_ablation/')" + ] + }, + { + "cell_type": "code", + "execution_count": 372, + "id": "f5cc8e1c-efed-4fb6-9e11-a4a0297771fa", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_html_semantic_datatype_exampples3_description_top1_tresh50', 'semtab_html_datatype_exampples3_description_top1_tresh50', 'semtab_html_exampples3_description_top1_tresh50', 'semtab_html_description_top1_tresh50', 'semtab_html_top1_tresh50'],\n", + " num_rows: 12779\n", + "})" + ] + }, + "execution_count": 372, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data\n" + ] + }, + { + "cell_type": "code", + "execution_count": 374, + "id": "f968be8c-fd4a-4fab-90ae-9c3ed7b98324", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'
tournamentwinstop - 5top - 10top - 25eventscuts made
'" + ] + }, + "execution_count": 374, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[0]['semtab_html_top1_tresh50']\n" + ] + }, + { + "cell_type": "markdown", + "id": "ace5820b-6963-4dc1-8178-e9eb8e0d6945", + "metadata": {}, + "source": [ + "# Ablation study" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "20107cab-8b91-45db-a3af-f30dd0580d41", + "metadata": {}, + "outputs": [], + "source": [ + "from datasets import load_from_disk\n", + "import sys\n", + "import os\n", + "\n", + "# Добавляем корневую директорию проекта в sys.path\n", + "sys.path.append(os.path.dirname(os.path.abspath('/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/tests')))" + ] + }, + { + "cell_type": "code", + "execution_count": 245, + "id": "9f519f31-280d-4e58-8820-03c4ef9f312e", + "metadata": {}, + "outputs": [], + "source": [ + "data = load_from_disk(\"tab_fact_test_semtab_html_ablation_correcring_first_new\")" + ] + }, + { + "cell_type": "code", + "execution_count": 247, + "id": "fab797cc-1e10-445e-ab4c-26e9148b3317", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_html_semantic_datatype_exampples3_description_top1_tresh50', 'semtab_html_datatype_exampples3_description_top1_tresh50', 'semtab_html_exampples3_description_top1_tresh50', 'semtab_html_description_top1_tresh50', 'semtab_html_top1_tresh50', 'semtab_html_semantic_datatype_exampples3_description_top1_tresh50_answ', 'semtab_html_semantic_datatype_exampples3_description_top1_tresh50_label', 'semtab_html_semantic_datatype_exampples3_description_top1_tresh50_answ_correct', 'semtab_html_datatype_exampples3_description_top1_tresh50_answ', 'semtab_html_datatype_exampples3_description_top1_tresh50_label', 'semtab_html_datatype_exampples3_description_top1_tresh50_answ_correct', 'semtab_html_exampples3_description_top1_tresh50_answ', 'semtab_html_exampples3_description_top1_tresh50_label', 'semtab_html_exampples3_description_top1_tresh50_answ_correct', 'semtab_html_description_top1_tresh50_answ', 'semtab_html_description_top1_tresh50_label', 'semtab_html_description_top1_tresh50_answ_correct', 'semtab_html_top1_tresh50_answ', 'semtab_html_top1_tresh50_label', 'semtab_html_top1_tresh50_answ_correct'],\n", + " num_rows: 12779\n", + "})" + ] + }, + "execution_count": 247, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data" + ] + }, + { + "cell_type": "code", + "execution_count": 248, + "id": "847bfa1b-927b-41f6-ba2a-0373d544f653", + "metadata": {}, + "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" - ] - }, + "data": { + "text/plain": [ + "'
tony lema
tournamentwinstop - 5top - 10top - 25eventscuts made
'" + ] + }, + "execution_count": 248, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[0]['semtab_html_semantic_datatype_exampples3_description_top1_tresh50']" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "e52ae62c-5963-471f-9f91-5f5b2cdadb75", + "metadata": {}, + "outputs": [], + "source": [ + "from utils.utils import load_config\n" + ] + }, + { + "cell_type": "code", + "execution_count": 384, + "id": "a513ec25-9696-41be-b50e-59cb088c5022", + "metadata": {}, + "outputs": [], + "source": [ + "config = load_config('semtab_html_config_answer2.yaml')" + ] + }, + { + "cell_type": "code", + "execution_count": 386, + "id": "d6ba8380-4090-475e-80a7-76e212ad7f7c", + "metadata": {}, + "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 26%|██▋ | 1124/4257 [05:12<17:03, 3.06 examples/s]" - ] - }, + "data": { + "text/plain": [ + "['semtab_html_semantic_datatype_exampples3_description_top1_tresh50',\n", + " 'semtab_html_datatype_exampples3_description_top1_tresh50',\n", + " 'semtab_html_exampples3_description_top1_tresh50',\n", + " 'semtab_html_description_top1_tresh50',\n", + " 'semtab_html_top1_tresh50']" + ] + }, + "execution_count": 386, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tests = list(config.keys())\n", + "tests" + ] + }, + { + "cell_type": "code", + "execution_count": 391, + "id": "b39c63d6-5f2c-4992-bed5-8e84ff9f881d", + "metadata": {}, + "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "EEEERRRRRRR 90\n", - "could not convert string to float: ' degree20′53″'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + "semtab_html_semantic_datatype_exampples3_description_top1_tresh50\n", + "53.673996400344315\n", + "different 0.0\n", + "semtab_html_datatype_exampples3_description_top1_tresh50\n", + "54.816495813443936\n", + "different 1.142499413099621\n", + "semtab_html_exampples3_description_top1_tresh50\n", + "54.11221535331403\n", + "different -0.7042804601299082\n", + "semtab_html_description_top1_tresh50\n", + "46.545113076140545\n", + "different -7.567102277173483\n", + "semtab_html_top1_tresh50\n", + "46.490335707019334\n", + "different -0.05477736912121145\n" ] - }, + } + ], + "source": [ + "acc_old = None\n", + "for test in tests:\n", + " print(test)\n", + " process_data = data.filter(lambda x : x[f'{test}_answ_correct'] != 'None',num_proc=17)\n", + " dd = process_data.filter(lambda x: True if x[f'{test}_label']!='None' else False,num_proc=17)\n", + " #print(dd.shape[0]/data.shape[0]*100)\n", + " #print(dd.shape[0]/process_data.shape[0]*100)\n", + " true = dd.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " #print(true.shape[0]/process_data.shape[0]*100)\n", + " full = data.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " acc = full.shape[0]/data.shape[0]*100\n", + " print(acc)\n", + " if acc_old == None:\n", + " acc_old = acc\n", + " print('different',acc-acc_old)\n", + " acc_old = acc" + ] + }, + { + "cell_type": "code", + "execution_count": 392, + "id": "7182ceea-4e3b-4aa4-ba30-9a1c6e7068e2", + "metadata": {}, + "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 26%|██▋ | 1126/4257 [05:12<14:50, 3.52 examples/s]" - ] - }, + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_html_semantic_datatype_exampples3_description_top1_tresh50', 'semtab_html_datatype_exampples3_description_top1_tresh50', 'semtab_html_exampples3_description_top1_tresh50', 'semtab_html_description_top1_tresh50', 'semtab_html_top1_tresh50', 'semtab_html_semantic_datatype_exampples3_description_top1_tresh50_answ', 'semtab_html_semantic_datatype_exampples3_description_top1_tresh50_label', 'semtab_html_semantic_datatype_exampples3_description_top1_tresh50_answ_correct', 'semtab_html_datatype_exampples3_description_top1_tresh50_answ', 'semtab_html_datatype_exampples3_description_top1_tresh50_label', 'semtab_html_datatype_exampples3_description_top1_tresh50_answ_correct', 'semtab_html_exampples3_description_top1_tresh50_answ', 'semtab_html_exampples3_description_top1_tresh50_label', 'semtab_html_exampples3_description_top1_tresh50_answ_correct', 'semtab_html_description_top1_tresh50_answ', 'semtab_html_description_top1_tresh50_label', 'semtab_html_description_top1_tresh50_answ_correct', 'semtab_html_top1_tresh50_answ', 'semtab_html_top1_tresh50_label', 'semtab_html_top1_tresh50_answ_correct'],\n", + " num_rows: 12779\n", + "})" + ] + }, + "execution_count": 392, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data" + ] + }, + { + "cell_type": "code", + "execution_count": 394, + "id": "4de2d1af-de13-45d4-ac5c-28bdedd47d95", + "metadata": {}, + "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 26%|██▋ | 1128/4257 [05:13<13:05, 3.98 examples/s]" + "tournament#wins#top - 5#top - 10#top - 25#events#cuts made\n", + "masters tournament#0#1#2#4#4#4\n", + "us open#0#2#3#4#6#5\n", + "the open championship#1#2#2#2#3#3\n", + "pga championship#0#0#1#2#5#4\n", + "totals#1#5#8#12#18#16\n", + "\n" ] - }, + } + ], + "source": [ + "print(data[0]['table_text'])" + ] + }, + { + "cell_type": "code", + "execution_count": 395, + "id": "62deb973-0d03-4d73-9eed-478317713a21", + "metadata": {}, + "outputs": [], + "source": [ + "data2 = dataset.to_pandas()" + ] + }, + { + "cell_type": "code", + "execution_count": 396, + "id": "7b5a313b-ccde-40f3-8e8f-fbf89aad1175", + "metadata": {}, + "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 331\n", - "'>' not supported between instances of 'str' and 'Timestamp'\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 412\n", - "'nominations'\n" - ] - }, + "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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idstatementlabeltable_captiontable_textpandas_codepandas_evalnlsep_querysemtab_query
00haroldo be mention as a brazil scorer for 2 di...11919 in brazilian footballdate#result#score#brazil scorers#competition\\n...df['brazil scorers'].apply(lambda x: 'haroldo'...Trueharoldo be mention as a brazil scorer for 2 di...haroldo be mention as a brazil scorer for 2 di...
114 of the 5 game be for the south american cham...11919 in brazilian footballdate#result#score#brazil scorers#competition\\n...(df['competition'].value_counts()['south ameri...True4 of the 5 game be for the south american cham...4 of the 5 game be for the south american cham...
22friedenreich be mention as a brazil scorer for...11919 in brazilian footballdate#result#score#brazil scorers#competition\\n...df['brazil scorers'].str.contains('friedenreic...Truefriedenreich be mention as a brazil scorer for...friedenreich be mention as a brazil scorer for...
33there be 2 different game where the highest sc...11919 in brazilian footballdate#result#score#brazil scorers#competition\\n...len(df[df['score'].str.extract(r'^(\\d+) - \\d+$...Truethere be 2 different game where the highest sc...there be 2 different game where the highest sc...
444 of the 5 game be play in may 191911919 in brazilian footballdate#result#score#brazil scorers#competition\\n...(df['date'].str.contains('may') & df['date'].s...True4 of the 5 game be play in may 1919 col : dat...4 of the 5 game be play in may 1919 <TABLE><DE...
..............................
8811192278jerraud power , 192 pound (87 kg) , be choose ...12009 indianapolis colts seasonround#choice#player#position#height#weight#col...df[(df['player'] == 'jerraud powers') & (df['w...Truejerraud power , 192 pound (87 kg) , be choose ...jerraud power , 192 pound (87 kg) , be choose ...
8811292279terrence taylor play for auburn02009 indianapolis colts seasonround#choice#player#position#height#weight#col...df[df['player'] == 'terrance taylor']['college...Falseterrence taylor play for auburn col : round |...terrence taylor play for auburn <TABLE><DESCRI...
8811392280curtis painter 's position be quarterback and ...02009 indianapolis colts seasonround#choice#player#position#height#weight#col...(df[df['player'] == 'curtis painter']['positio...Falsecurtis painter 's position be quarterback and ...curtis painter 's position be quarterback and ...
8811492281the player who weigh the most play in round 302009 indianapolis colts seasonround#choice#player#position#height#weight#col...(df.loc[df['weight'].str.extract('(\\\\d+)').ast...Falsethe player who weigh the most play in round 3 ...the player who weigh the most play in round 3 ...
8811592282for 2007 / 08 , metal - volume (thousand tons)...1iran mercantile exchangeime exchange (including spot , credit and forw...df.loc[df['ime exchange (including spot , cred...Truefor 2007 / 08 , metal - volume (thousand tons)...for 2007 / 08 , metal - volume (thousand tons)...
\n", + "

88116 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " id statement label \\\n", + "0 0 haroldo be mention as a brazil scorer for 2 di... 1 \n", + "1 1 4 of the 5 game be for the south american cham... 1 \n", + "2 2 friedenreich be mention as a brazil scorer for... 1 \n", + "3 3 there be 2 different game where the highest sc... 1 \n", + "4 4 4 of the 5 game be play in may 1919 1 \n", + "... ... ... ... \n", + "88111 92278 jerraud power , 192 pound (87 kg) , be choose ... 1 \n", + "88112 92279 terrence taylor play for auburn 0 \n", + "88113 92280 curtis painter 's position be quarterback and ... 0 \n", + "88114 92281 the player who weigh the most play in round 3 0 \n", + "88115 92282 for 2007 / 08 , metal - volume (thousand tons)... 1 \n", + "\n", + " table_caption \\\n", + "0 1919 in brazilian football \n", + "1 1919 in brazilian football \n", + "2 1919 in brazilian football \n", + "3 1919 in brazilian football \n", + "4 1919 in brazilian football \n", + "... ... \n", + "88111 2009 indianapolis colts season \n", + "88112 2009 indianapolis colts season \n", + "88113 2009 indianapolis colts season \n", + "88114 2009 indianapolis colts season \n", + "88115 iran mercantile exchange \n", + "\n", + " table_text \\\n", + "0 date#result#score#brazil scorers#competition\\n... \n", + "1 date#result#score#brazil scorers#competition\\n... \n", + "2 date#result#score#brazil scorers#competition\\n... \n", + "3 date#result#score#brazil scorers#competition\\n... \n", + "4 date#result#score#brazil scorers#competition\\n... \n", + "... ... \n", + "88111 round#choice#player#position#height#weight#col... \n", + "88112 round#choice#player#position#height#weight#col... \n", + "88113 round#choice#player#position#height#weight#col... \n", + "88114 round#choice#player#position#height#weight#col... \n", + "88115 ime exchange (including spot , credit and forw... \n", + "\n", + " pandas_code pandas_eval \\\n", + "0 df['brazil scorers'].apply(lambda x: 'haroldo'... True \n", + "1 (df['competition'].value_counts()['south ameri... True \n", + "2 df['brazil scorers'].str.contains('friedenreic... True \n", + "3 len(df[df['score'].str.extract(r'^(\\d+) - \\d+$... True \n", + "4 (df['date'].str.contains('may') & df['date'].s... True \n", + "... ... ... \n", + "88111 df[(df['player'] == 'jerraud powers') & (df['w... True \n", + "88112 df[df['player'] == 'terrance taylor']['college... False \n", + "88113 (df[df['player'] == 'curtis painter']['positio... False \n", + "88114 (df.loc[df['weight'].str.extract('(\\\\d+)').ast... False \n", + "88115 df.loc[df['ime exchange (including spot , cred... True \n", + "\n", + " nlsep_query \\\n", + "0 haroldo be mention as a brazil scorer for 2 di... \n", + "1 4 of the 5 game be for the south american cham... \n", + "2 friedenreich be mention as a brazil scorer for... \n", + "3 there be 2 different game where the highest sc... \n", + "4 4 of the 5 game be play in may 1919 col : dat... \n", + "... ... \n", + "88111 jerraud power , 192 pound (87 kg) , be choose ... \n", + "88112 terrence taylor play for auburn col : round |... \n", + "88113 curtis painter 's position be quarterback and ... \n", + "88114 the player who weigh the most play in round 3 ... \n", + "88115 for 2007 / 08 , metal - volume (thousand tons)... \n", + "\n", + " semtab_query \n", + "0 haroldo be mention as a brazil scorer for 2 di... \n", + "1 4 of the 5 game be for the south american cham... \n", + "2 friedenreich be mention as a brazil scorer for... \n", + "3 there be 2 different game where the highest sc... \n", + "4 4 of the 5 game be play in may 1919 3812\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_engine\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcasted_key\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3813\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n", + "File \u001b[0;32mpandas/_libs/index.pyx:167\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mpandas/_libs/index.pyx:196\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:7088\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:7096\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", + "\u001b[0;31mKeyError\u001b[0m: 'table_csv'", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[397], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mdata2\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mtable_csv\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/pandas/core/frame.py:4113\u001b[0m, in \u001b[0;36mDataFrame.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 4111\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns\u001b[38;5;241m.\u001b[39mnlevels \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 4112\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_getitem_multilevel(key)\n\u001b[0;32m-> 4113\u001b[0m indexer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcolumns\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 4114\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_integer(indexer):\n\u001b[1;32m 4115\u001b[0m indexer \u001b[38;5;241m=\u001b[39m [indexer]\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/pandas/core/indexes/base.py:3819\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3814\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(casted_key, \u001b[38;5;28mslice\u001b[39m) \u001b[38;5;129;01mor\u001b[39;00m (\n\u001b[1;32m 3815\u001b[0m \u001b[38;5;28misinstance\u001b[39m(casted_key, abc\u001b[38;5;241m.\u001b[39mIterable)\n\u001b[1;32m 3816\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28many\u001b[39m(\u001b[38;5;28misinstance\u001b[39m(x, \u001b[38;5;28mslice\u001b[39m) \u001b[38;5;28;01mfor\u001b[39;00m x \u001b[38;5;129;01min\u001b[39;00m casted_key)\n\u001b[1;32m 3817\u001b[0m ):\n\u001b[1;32m 3818\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m InvalidIndexError(key)\n\u001b[0;32m-> 3819\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key) \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01merr\u001b[39;00m\n\u001b[1;32m 3820\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[1;32m 3821\u001b[0m \u001b[38;5;66;03m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[1;32m 3822\u001b[0m \u001b[38;5;66;03m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[1;32m 3823\u001b[0m \u001b[38;5;66;03m# the TypeError.\u001b[39;00m\n\u001b[1;32m 3824\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_indexing_error(key)\n", + "\u001b[0;31mKeyError\u001b[0m: 'table_csv'" ] - }, + } + ], + "source": [ + "data2['table_csv']\n" + ] + }, + { + "cell_type": "code", + "execution_count": 401, + "id": "bfda358a-e682-4ddb-84c4-008cc76fc6ee", + "metadata": {}, + "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 490\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 651\n", - "single positional indexer is out-of-bounds\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "EEEERRRRRRR 561\n", - "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" - ] - }, + "data": { + "text/plain": [ + "Column(['2-1570274-4.html.csv', '2-1570274-4.html.csv', '2-1570274-4.html.csv', '2-1570274-4.html.csv', '2-1570274-4.html.csv'])" + ] + }, + "execution_count": 401, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data['table_csv']" + ] + }, + { + "cell_type": "code", + "execution_count": 403, + "id": "6e332d38-3ed8-43ce-9b9b-c5f6a01a5164", + "metadata": {}, + "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 27%|██▋ | 1132/4257 [05:14<17:32, 2.97 examples/s]" - ] - }, + "data": { + "text/plain": [ + "Column(['tony lema be in the top 5 for the master tournament , the us open , and the open championship', 'tournament that tony lema have participate in include the master tournament , the us open , the pga championship and the open championship', 'the only tournament that tony lema win in be the open championship', 'tony lema do not win in the us open', 'tony lema make it to the top 10 in the pga championship , but do not continue on'])" + ] + }, + "execution_count": 403, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data['statement']" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "f8963581-9edb-4690-b328-bdbf9b2c9671", + "metadata": {}, + "outputs": [], + "source": [ + "from datasets import load_from_disk,Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "1f64a9fe-e6fa-47fb-baf5-ef8249c7e2b5", + "metadata": {}, + "outputs": [], + "source": [ + "data = load_from_disk('tab_fact_test_semtab_xml_ablation_new')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "75457eb2-42f0-4d65-9edb-9bfe80d778da", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 410, + "id": "b09efe47-2391-423d-b29d-da4039f057fa", + "metadata": { + "scrolled": true + }, + "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "'brazil scorers'\n", - "'str' object is not callable\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n", - "'brazil scorers'\n", - "'str' object is not callable\n" - ] - }, + "data": { + "text/plain": [ + "1695" + ] + }, + "execution_count": 410, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr = [ i for i in data['table_csv']]\n", + "len(set(arr))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "e74a1bf1-aa10-48ff-ab8a-de42c48e0e3f", + "metadata": {}, + "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "Map (num_proc=16): 27%|██▋ | 1134/4257 [05:15<15:24, 3.38 examples/s]" + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 28516.71 examples/s]\n" ] }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Generating content with model: deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" - ] - }, + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_exampples_description_top1_tresh50', 'semtab_xml_attributes_description_top1_tresh50', 'semtab_xml_attributes_top1_tresh50', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_exampples_description_top1_tresh50', 'semtab_xml_elements_description_top1_tresh50', 'semtab_xml_elements_top1_tresh50', 'semtab_xml_attributes_top1_tresh50_answ', 'semtab_xml_attributes_top1_tresh50_label', 'semtab_xml_attributes_top1_tresh50_answ_correct', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50_answ', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50_label', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50_answ_correct', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50_answ', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50_label', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50_answ_correct', 'semtab_xml_elements_exampples_description_top1_tresh50_answ', 'semtab_xml_elements_exampples_description_top1_tresh50_label', 'semtab_xml_elements_exampples_description_top1_tresh50_answ_correct', 'semtab_xml_elements_description_top1_tresh50_answ', 'semtab_xml_elements_description_top1_tresh50_label', 'semtab_xml_elements_description_top1_tresh50_answ_correct', 'semtab_xml_elements_top1_tresh50_answ', 'semtab_xml_elements_top1_tresh50_label', 'semtab_xml_elements_top1_tresh50_answ_correct'],\n", + " num_rows: 12779\n", + "})" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.filter(lambda x: x['semtab_xml_elements_top1_tresh50'] != 'None',num_proc=17)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "bd0c3705-8d93-4976-a3b8-c3f99ef53e81", + "metadata": {}, + "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Map (num_proc=16): 27%|██▋ | 1135/4257 [05:15<14:24, 3.61 examples/s]" - ] + "data": { + "text/plain": [ + "'
res
record
opponent
method
event
round
time
location
'" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "from functools import partial\n", - "dont_run_correcting = dont_run.map(partial(dataset_processing,query_field='nlsep',system_correcting_prompt=system_correcting_prompt,\n", - " system_prompt=system_prompt),num_proc=16)\n" + "data[3434]['semtab_xml_elements_top1_tresh50']" ] }, { "cell_type": "code", - "execution_count": 208, - "id": "c68508a7-8abf-49a1-9e45-05dca33cde33", + "execution_count": 25, + "id": "6e16a6cf-2323-4887-bf87-c807fa33c443", "metadata": {}, "outputs": [], "source": [ - "data = load_from_disk('tab_fact_test_xml_nlsep_correct/')" + "data1 = load_from_disk(\"tab_fact_test_semtab_xml_ablation_new\")\n", + "data_continue = load_from_disk(\"tab_fact_test_semtab_xml_ablation_new_continue\")" ] }, { "cell_type": "code", - "execution_count": 209, - "id": "86f67bc6-2b23-4712-9618-0404a2e55c96", + "execution_count": 48, + "id": "282041da-8bd6-4b2c-a1e4-977cc86cbc43", + "metadata": {}, + "outputs": [ + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'utils'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[48], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m load_config\n", + "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'utils'" + ] + } + ], + "source": [ + "from utils.utils import load_config\n" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "5a710b5d-df4a-44d1-83b6-e5c308812b0a", "metadata": {}, "outputs": [], "source": [ - "d2 = data.filter(lambda x : x['nlsep_answ_correct'] != 'None',num_proc=17)" + "config = load_config('semtab_xml_config_answer2.yaml')\n", + "conf_continue = load_config('semtab_xml_config_answer2_continue.yaml')" ] }, { "cell_type": "code", - "execution_count": 210, - "id": "5375d880-9ba5-4d3b-89c3-78a3368e333e", + "execution_count": 20, + "id": "31dff60e-5038-4d16-a1c2-c87462861726", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct', 'nlsep_label_correct'],\n", - " num_rows: 471\n", - "})" + "['semtab_xml_attributes_top1_tresh50',\n", + " 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50',\n", + " 'semtab_xml_elements_datatype_exampples_description_top1_tresh50',\n", + " 'semtab_xml_elements_exampples_description_top1_tresh50',\n", + " 'semtab_xml_elements_description_top1_tresh50',\n", + " 'semtab_xml_elements_top1_tresh50']" ] }, - "execution_count": 210, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "d2" + "tests_continue = list(conf_continue.keys())\n", + "tests_continue" ] }, { "cell_type": "code", - "execution_count": 179, - "id": "0aa1d3c0-6a98-4c39-848d-bcfae4db4cff", + "execution_count": 39, + "id": "62e5e664-e6ba-4adb-b9e7-8c3f62ea9ed6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{'id': 0,\n", - " 'table_csv': '2-1570274-4.html.csv',\n", - " 'table_text': 'tournament#wins#top - 5#top - 10#top - 25#events#cuts made\\nmasters tournament#0#1#2#4#4#4\\nus open#0#2#3#4#6#5\\nthe open championship#1#2#2#2#3#3\\npga championship#0#0#1#2#5#4\\ntotals#1#5#8#12#18#16\\n',\n", - " 'label': 1,\n", - " 'statement': 'tony lema do not win in the us open',\n", - " 'table_caption': 'tony lema',\n", - " 'nlsep_query': 'tony lema do not win in the us open col : tournament | wins | top - 5 | top - 10 | top - 25 | events | cuts made row 1 : masters tournament | 0 | 1 | 2 | 4 | 4 | 4 row 2 : us open | 0 | 2 | 3 | 4 | 6 | 5 row 3 : the open championship | 1 | 2 | 2 | 2 | 3 | 3 row 4 : pga championship | 0 | 0 | 1 | 2 | 5 | 4 row 5 : totals | 1 | 5 | 8 | 12 | 18 | 16',\n", - " 'semtab_query': 'tony lema do not win in the us open tony lema
tournamentcategory - 1.0\"str\"0[\"us open\", \"the open championship\", \"pga championship\"]
winsrank - 1.0\"int\"0[0, 1, 0]
top - 5rank - 1.0\"int\"0[5, 2, 1]
top - 10rank - 1.0\"int\"0[8, 2, 1]
top - 25rank - 0.99\"int\"0[4, 12, 4]
eventsduration - 0.73\"int\"0[6, 4, 18]
cuts maderank - 0.99\"int\"0[4, 3, 5]
',\n", - " 'nlsep_answ': 'Here is the Python code that translates the given natural language statement into a single-line pandas expression. This expression checks if Tony Lema did not win in the US Open.\\n\\n```json\\n\"PANDA\": \"df.loc[df[\\'tournament\\'] == \\'us open\\', \\'wins\\'].any().tolist() == 0\"\\n```\\n\\nThis code first locates the row where the \\'tournament\\' column is \\'us open\\', and then checks if the \\'wins\\' column in that row is 0. If it is, the expression returns True, otherwise it returns False.\\n',\n", - " 'nlsep_label': 'True',\n", - " 'nlsep_answ_correct': 'None'}" + "['semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50',\n", + " 'semtab_xml_attributes_datatype_exampples_description_top1_tresh50',\n", + " 'semtab_xml_attributes_exampples_description_top1_tresh50',\n", + " 'semtab_xml_attributes_description_top1_tresh50',\n", + " 'semtab_xml_attributes_top1_tresh50',\n", + " 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50',\n", + " 'semtab_xml_elements_datatype_exampples_description_top1_tresh50',\n", + " 'semtab_xml_elements_exampples_description_top1_tresh50',\n", + " 'semtab_xml_elements_description_top1_tresh50',\n", + " 'semtab_xml_elements_top1_tresh50']" ] }, - "execution_count": 179, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "\n", - "data[0]" + "tests = list(config.keys())\n", + "tests" ] }, { "cell_type": "code", - "execution_count": 240, - "id": "443a0c2b-4da1-4ea6-aae5-9ca04bfbc072", + "execution_count": 31, + "id": "b42b383d-89f8-47e0-8629-048615b6d3b7", "metadata": {}, "outputs": [ { - "ename": "KeyError", - "evalue": "'tournament'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", - "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/pandas/core/indexes/base.py:3812\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3811\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 3812\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_engine\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcasted_key\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3813\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n", - "File \u001b[0;32mpandas/_libs/index.pyx:167\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32mpandas/_libs/index.pyx:196\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:7088\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", - "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:7096\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", - "\u001b[0;31mKeyError\u001b[0m: 'tournament'", - "\nThe above exception was the direct cause of the following exception:\n", - "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[240], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;43meval\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mparse_panda_code\u001b[49m\u001b[43m(\u001b[49m\u001b[43md2\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mnlsep_answ\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m:1\u001b[0m\n", - "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/pandas/core/frame.py:4113\u001b[0m, in \u001b[0;36mDataFrame.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 4111\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns\u001b[38;5;241m.\u001b[39mnlevels \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 4112\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_getitem_multilevel(key)\n\u001b[0;32m-> 4113\u001b[0m indexer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcolumns\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 4114\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_integer(indexer):\n\u001b[1;32m 4115\u001b[0m indexer \u001b[38;5;241m=\u001b[39m [indexer]\n", - "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/pandas/core/indexes/base.py:3819\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3814\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(casted_key, \u001b[38;5;28mslice\u001b[39m) \u001b[38;5;129;01mor\u001b[39;00m (\n\u001b[1;32m 3815\u001b[0m \u001b[38;5;28misinstance\u001b[39m(casted_key, abc\u001b[38;5;241m.\u001b[39mIterable)\n\u001b[1;32m 3816\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28many\u001b[39m(\u001b[38;5;28misinstance\u001b[39m(x, \u001b[38;5;28mslice\u001b[39m) \u001b[38;5;28;01mfor\u001b[39;00m x \u001b[38;5;129;01min\u001b[39;00m casted_key)\n\u001b[1;32m 3817\u001b[0m ):\n\u001b[1;32m 3818\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m InvalidIndexError(key)\n\u001b[0;32m-> 3819\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key) \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01merr\u001b[39;00m\n\u001b[1;32m 3820\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[1;32m 3821\u001b[0m \u001b[38;5;66;03m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[1;32m 3822\u001b[0m \u001b[38;5;66;03m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[1;32m 3823\u001b[0m \u001b[38;5;66;03m# the TypeError.\u001b[39;00m\n\u001b[1;32m 3824\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_indexing_error(key)\n", - "\u001b[0;31mKeyError\u001b[0m: 'tournament'" + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 6/6 [00:00<00:00, 141.79it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "semtab_xml_attributes_top1_tresh50\n", + "semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50\n", + "semtab_xml_elements_datatype_exampples_description_top1_tresh50\n", + "semtab_xml_elements_exampples_description_top1_tresh50\n", + "semtab_xml_elements_description_top1_tresh50\n", + "semtab_xml_elements_top1_tresh50\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "from tqdm import tqdm\n", + "# 'semtab_xml_elements_top1_tresh50_answ', 'semtab_xml_elements_top1_tresh50_label', 'semtab_xml_elements_top1_tresh50_answ_correct'\n", + "ddata1 = data1.to_dict()\n", + "for expr in tqdm(tests_continue):\n", + " print(expr)\n", + " ddata1[f'{expr}_answ'] = data_continue[f'{expr}_answ']\n", + " ddata1[f'{expr}_label'] = data_continue[f'{expr}_label']\n", + " ddata1[f'{expr}_answ_correct'] = data_continue[f'{expr}_answ_correct']\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "f6f22517-27ea-49a9-b621-3f424cbc134a", + "metadata": {}, + "outputs": [], + "source": [ + "data1 = Dataset.from_dict(ddata1)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "2927e408-3464-4db1-950e-e1857adfcdd8", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Saving the dataset (1/1 shards): 100%|██████████| 12779/12779 [00:00<00:00, 39481.09 examples/s]\n" ] } ], "source": [ - "eval(parse_panda_code(d2[0]['nlsep_answ']))" + "data1.save_to_disk('tab_fact_test_semtab_xml_ablation_new')" ] }, { - "cell_type": "markdown", - "id": "6520fc31-941e-4a62-9bf2-063d4345ca03", + "cell_type": "code", + "execution_count": 40, + "id": "bb0bff92-77c6-4e70-af17-363285628c8b", "metadata": {}, + "outputs": [], "source": [ - "# Traceback\n" + "data = data1" ] }, { "cell_type": "code", - "execution_count": 243, - "id": "f0e1d0f9-f8e9-40a8-8cea-a5fa803e62d8", + "execution_count": null, + "id": "b677163f-d395-4274-a0a9-83a39d448365", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 330, + "id": "0ddedec0-8348-4137-9a02-70d8808fdffa", "metadata": {}, "outputs": [], "source": [ - "import traceback" + "data = load_from_disk(\"tab_fact_test_defgen_test_answers\")" ] }, { "cell_type": "code", - "execution_count": 248, - "id": "a7fb770b-f072-48c0-b95d-23386da7eab1", + "execution_count": 331, + "id": "c38f82f0-b759-4522-affe-508e66801e35", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{'id': 0,\n", - " 'table_csv': '2-1570274-4.html.csv',\n", - " 'table_text': 'tournament#wins#top - 5#top - 10#top - 25#events#cuts made\\nmasters tournament#0#1#2#4#4#4\\nus open#0#2#3#4#6#5\\nthe open championship#1#2#2#2#3#3\\npga championship#0#0#1#2#5#4\\ntotals#1#5#8#12#18#16\\n',\n", - " 'label': 0,\n", - " 'statement': 'tournament that tony lema have not participate in include the master tournament , the us open , the pga championship and the open championship',\n", - " 'table_caption': 'tony lema',\n", - " 'nlsep_query': 'tournament that tony lema have not participate in include the master tournament , the us open , the pga championship and the open championship col : tournament | wins | top - 5 | top - 10 | top - 25 | events | cuts made row 1 : masters tournament | 0 | 1 | 2 | 4 | 4 | 4 row 2 : us open | 0 | 2 | 3 | 4 | 6 | 5 row 3 : the open championship | 1 | 2 | 2 | 2 | 3 | 3 row 4 : pga championship | 0 | 0 | 1 | 2 | 5 | 4 row 5 : totals | 1 | 5 | 8 | 12 | 18 | 16',\n", - " 'semtab_query': 'tournament that tony lema have not participate in include the master tournament , the us open , the pga championship and the open championship tony lema
tournamentcategory - 1.0\"str\"0[\"us open\", \"totals\", \"masters tournament\"]
winsrank - 1.0\"int\"0[0, 1, 0]
top - 5rank - 1.0\"int\"0[2, 2, 1]
top - 10rank - 1.0\"int\"0[3, 8, 1]
top - 25rank - 0.99\"int\"0[4, 4, 12]
eventsduration - 0.73\"int\"0[6, 5, 4]
cuts maderank - 0.99\"int\"0[4, 16, 4]
',\n", - " 'nlsep_answ': 'Here is the Python code in pandas that verifies the statement:\\n\\n```json\\n\"PANDA\": \"df[df[\\'tournament\\'].isin([\\'the master tournament\\', \\'the us open\\', \\'the pga championship\\', \\'the open championship\\']) & (df[\\'participant\\'] != \\'tony lema\\')].empty\"\\n```\\n\\nThis code checks if there are any rows in the dataframe where the tournament is in the list of tournaments and the participant is not Tony LeMa. If there are no such rows, it returns True, otherwise it returns False.\\n',\n", - " 'nlsep_label': 'None',\n", - " 'nlsep_answ_correct': 'The error in the code is that the \\'participant\\' column does not exist in the dataframe. The correct column to check is \\'wins\\'. Here is the corrected code:\\n\\n```python\\ndf[df[\\'tournament\\'].isin([\\'the master tournament\\', \\'the us open\\', \\'the pga championship\\', \\'the open championship\\']) & (df[\\'wins\\'] == 0)].empty\\n```\\n\\nThis code checks if there are any rows in the dataframe where the \\'tournament\\' column is in the given list and the \\'wins\\' column is 0. If there are no such rows, it returns True, otherwise it returns False.\\n\\nHere is the Json Format:\\n\\n```json\\n{\\n \"CORRECT PANDA\": \"df[df[\\'tournament\\'].isin([\\'the master tournament\\', \\'the us open\\', \\'the pga championship\\', \\'the open championship\\']) & (df[\\'wins\\'] == 0)].empty\"\\n}\\n```\\n',\n", - " 'nlsep_label_correct': 'True'}" + "['semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50']" ] }, - "execution_count": 248, + "execution_count": 331, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "d2[0]" + "config = load_config('semtab_semantic_test_answer.yaml')\n", + "tests = list(config.keys())\n", + "tests" ] }, { "cell_type": "code", - "execution_count": 249, - "id": "25cf2de6-e9fe-4de0-9ac5-f804fa494cd7", + "execution_count": 333, + "id": "14830bea-b270-4168-bbc0-a50ebe9342e8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50\n", + "Процент корректируемых ответов 20.90930432741216\n", + "успешно скорректированные отноосительно корректируемых 55.351796407185624\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 16525.82 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 10107/10107 [00:00<00:00, 12320.31 examples/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Общая точность 54.855622505673374\n", + "точность без учета коррекции 43.28194694420534\n", + "different 0.0\n" + ] + } + ], + "source": [ + "acc_old = None\n", + "for test in tests:\n", + " print(test)\n", + " process_data = data.filter(lambda x : x[f'{test}_answ_correct'] != 'None',num_proc=17)\n", + " dd = process_data.filter(lambda x: True if x[f'{test}_label']!='None' else False,num_proc=17)\n", + " print('Процент корректируемых ответов',process_data.shape[0]/data.shape[0]*100)\n", + " cor = process_data.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " print('успешно скорректированные отноосительно корректируемых ',cor.shape[0]/process_data.shape[0]*100)\n", + "\n", + " #print(dd.shape[0]/data.shape[0]*100)\n", + " #print(dd.shape[0]/process_data.shape[0]*100)\n", + " true = dd.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " #print(true.shape[0]/process_data.shape[0]*100)\n", + " full = data.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " acc = full.shape[0]/data.shape[0]*100\n", + " without_corr = data.filter(lambda x : x[f'{test}_answ_correct'] == 'None',num_proc=17)\n", + " full_wo_corr = without_corr.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " print('Общая точность',acc)\n", + " print('точность без учета коррекции',full_wo_corr.shape[0]/data.shape[0]*100)\n", + " if acc_old == None:\n", + " acc_old = acc\n", + " print('different',acc-acc_old)\n", + " acc_old = acc" + ] + }, + { + "cell_type": "code", + "execution_count": 294, + "id": "ea6090b6-ea53-4f71-90dd-ec03a3e99586", "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", - "
tournamentwinstop - 5top - 10top - 25eventscuts made
0masters tournament012444
1us open023465
2the open championship122233
3pga championship001254
4totals158121816
\n", - "
" - ], "text/plain": [ - " tournament wins top - 5 top - 10 top - 25 events cuts made\n", - "0 masters tournament 0 1 2 4 4 4\n", - "1 us open 0 2 3 4 6 5\n", - "2 the open championship 1 2 2 2 3 3\n", - "3 pga championship 0 0 1 2 5 4\n", - "4 totals 1 5 8 12 18 16" + "{'id': 0,\n", + " 'table_csv': '2-1570274-4.html.csv',\n", + " 'table_text': 'tournament#wins#top - 5#top - 10#top - 25#events#cuts made\\nmasters tournament#0#1#2#4#4#4\\nus open#0#2#3#4#6#5\\nthe open championship#1#2#2#2#3#3\\npga championship#0#0#1#2#5#4\\ntotals#1#5#8#12#18#16\\n',\n", + " 'label': 1,\n", + " 'statement': 'tony lema be in the top 5 for the master tournament , the us open , and the open championship',\n", + " 'table_caption': 'tony lema',\n", + " 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50': '
',\n", + " 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_answ': '```json\\n\"PANDA\": \"(df[\\'tournament\\'].isin([\\'masters tournament\\', \\'us open\\', \\'open championship\\']) & (df[\\'top - 5\\'] <= 5)).any()\"\\n```\\nThis code checks if Tony Lema\\'s name is in the top 5 in any of the specified tournaments.\\n',\n", + " 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_label': 'True',\n", + " 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_answ_correct': 'None'}" ] }, - "execution_count": 249, + "execution_count": 294, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df = pd.read_csv(StringIO(d2[0]['table_text']), delimiter='#')\n", - "df" + "data = load_from_disk(\"tab_fact_test_cossim_new_test_answers\")\n", + "data[0]" ] }, { "cell_type": "code", - "execution_count": 246, - "id": "081686fe-662a-47eb-8e53-c72863932eb3", + "execution_count": 292, + "id": "7dce8c58-8464-4c8a-8390-a7e5f6bcd900", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "\"df[df['tournament'].isin(['the master tournament', 'the us open', 'the pga championship', 'the open championship']) & (df['participant'] != 'tony lema')].empty\"" + "['semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50']" ] }, - "execution_count": 246, + "execution_count": 292, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "parse_panda_code(d2[0]['nlsep_answ'])" + "config = load_config('semtab_semantic_test_answer.yaml')\n", + "tests = list(config.keys())\n", + "tests" ] }, { "cell_type": "code", - "execution_count": 292, - "id": "28b29da4-3ee3-42a5-b0df-39f05d4b134a", + "execution_count": 293, + "id": "7ebba629-a077-4cca-8df6-b9cf9f836f5f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "KeyError: 'participant'\n" + "semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 15926.49 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 2549/2549 [00:00<00:00, 3259.75 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 2549/2549 [00:00<00:00, 3259.29 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 16591.42 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "55.09038265905001\n", + "different 0.0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" ] } ], "source": [ - "try:\n", - " p=parse_panda_code(d2[0]['nlsep_answ'])\n", - " eval(p)\n", - "except Exception as e:\n", - " print (f'{type(e).__name__}: {e}')\n", - " \n", - " #traceback.print_exc()\n", - " x = traceback.format_exc()\n", - " #print(x)" + "acc_old = None\n", + "for test in tests:\n", + " print(test)\n", + " process_data = data.filter(lambda x : x[f'{test}_answ_correct'] != 'None',num_proc=17)\n", + " dd = process_data.filter(lambda x: True if x[f'{test}_label']!='None' else False,num_proc=17)\n", + " #print(dd.shape[0]/data.shape[0]*100)\n", + " #print(dd.shape[0]/process_data.shape[0]*100)\n", + " true = dd.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " #print(true.shape[0]/process_data.shape[0]*100)\n", + " full = data.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " acc = full.shape[0]/data.shape[0]*100\n", + " print(acc)\n", + " if acc_old == None:\n", + " acc_old = acc\n", + " print('different',acc-acc_old)\n", + " acc_old = acc" ] }, { "cell_type": "code", - "execution_count": 301, - "id": "1c19b750-8b68-466b-b5a0-20ce9ed485b6", + "execution_count": 269, + "id": "88c1a47f-427e-463f-81d1-509aaad8d3d2", "metadata": {}, "outputs": [], "source": [ - "p = df.info" + "data = load_from_disk(\"tab_fact_test_cossim_test_3_answers\")" ] }, { "cell_type": "code", - "execution_count": 318, - "id": "aba0fd83-c333-4f11-8848-3b0935a87fd7", + "execution_count": 270, + "id": "8d30c1dc-bbde-44c1-ad5f-dae9766874fa", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "['semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50']" + ] + }, + "execution_count": 270, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "p = df.dtypes" + "config = load_config('semtab_semantic_test_answer.yaml')\n", + "tests = list(config.keys())\n", + "tests" ] }, { "cell_type": "code", - "execution_count": 319, - "id": "c089588a-0bc7-42a5-b0da-c48eb3b0c39b", + "execution_count": null, + "id": "6ccfeca4-a0d6-4bf8-a30d-9893568c5c1a", "metadata": {}, "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "3324c0e6-7f93-40fd-bfb9-f07ac7b70452", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:01<00:00, 10353.76 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 2523/2523 [00:01<00:00, 2053.87 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 2523/2523 [00:00<00:00, 2669.42 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 13074.24 examples/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "53.53314030831834\n", + "different 0.0\n", + "semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 12945.48 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 2932/2932 [00:01<00:00, 2794.86 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 2932/2932 [00:00<00:00, 3509.96 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 15794.23 examples/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "52.56279834102825\n", + "different -0.9703419672900893\n", + "semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 15689.92 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 2626/2626 [00:00<00:00, 3018.70 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 2626/2626 [00:00<00:00, 3193.93 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 15116.81 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "52.883637217309655\n", + "different 0.3208388762814067\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], "source": [ - "p = p.to_string()" + "acc_old = None\n", + "for test in tests:\n", + " print(test)\n", + " process_data = data.filter(lambda x : x[f'{test}_answ_correct'] != 'None',num_proc=17)\n", + " dd = process_data.filter(lambda x: True if x[f'{test}_label']!='None' else False,num_proc=17)\n", + " #print(dd.shape[0]/data.shape[0]*100)\n", + " #print(dd.shape[0]/process_data.shape[0]*100)\n", + " true = dd.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " #print(true.shape[0]/process_data.shape[0]*100)\n", + " full = data.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " acc = full.shape[0]/data.shape[0]*100\n", + " print(acc)\n", + " if acc_old == None:\n", + " acc_old = acc\n", + " print('different',acc-acc_old)\n", + " acc_old = acc" ] }, { "cell_type": "code", - "execution_count": 322, - "id": "2c5bcd86-f4ba-4b02-b588-dd6c3ea548a5", + "execution_count": 74, + "id": "465ace4e-fa8f-4797-b71b-40737056c3fb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "tournament object\n", - "wins int64\n", - "top - 5 int64\n", - "top - 10 int64\n", - "top - 25 int64\n", - "events int64\n", - "cuts made int64\n" + "-0.2890000000000015\n", + "-0.11999999999999744\n", + "0.21000000000000085\n" ] } ], "source": [ - "print(p)" + "print(53.533 - 53.822)\n", + "print(52.56 - 52.68 )\n", + "print(52.88 - 52.67)" ] }, { "cell_type": "code", - "execution_count": 194, - "id": "1f0a97ae-6100-4c18-b3d9-28f97aeab0c2", + "execution_count": 282, + "id": "f7789b04-1088-4811-aa9b-65881f8b3ca1", + "metadata": {}, + "outputs": [], + "source": [ + "data = load_from_disk(\"tab_fact_test_cossim_test_3_answers_2\")" + ] + }, + { + "cell_type": "code", + "execution_count": 283, + "id": "f4758c5c-57d9-4927-9f3e-42d76f0a9782", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "\"df['total'].isin([df.loc[df['player'] == 'matías suárez', 'total'].values[0] + 4]).any()\"" + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_answ', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_label', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_answ_correct', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50_answ', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50_label', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50_answ_correct', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_answ', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_label', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_answ_correct'],\n", + " num_rows: 3\n", + "})" ] }, - "execution_count": 194, + "execution_count": 283, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "parse_panda_code(d2[2]['nlsep_answ_correct'])" + "data.select(range(3))" ] }, { "cell_type": "code", - "execution_count": 180, - "id": "89bb5654-775a-4075-bae6-76708c11a1b5", + "execution_count": 286, + "id": "481c4f70-4339-4700-9d08-ae44153bc38f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{'id': 12,\n", - " 'table_csv': '2-13135264-6.html.csv',\n", - " 'table_text': 'date#visitor#score#home#decision#attendance#record\\njanuary 2#detroit#4 - 1#carolina#joseph#17053#24 - 12 - 4 - 1\\njanuary 3#anaheim#1 - 3#detroit#legace#20066#25 - 12 - 4 - 1\\njanuary 5#nashville#0 - 6#detroit#joseph#20066#26 - 12 - 4 - 1\\njanuary 7#boston#3 - 0#detroit#joseph#20066#26 - 13 - 4 - 1\\njanuary 10#detroit#1 - 2#boston#joseph#17565#26 - 13 - 4 - 2\\njanuary 14#chicago#2 - 4#detroit#legace#20066#27 - 13 - 4 - 2\\njanuary 16#phoenix#3 - 3#detroit#joseph#20066#27 - 13 - 5 - 2\\njanuary 19#detroit#1 - 2#san jose#joseph#17361#27 - 14 - 5 - 2\\njanuary 21#detroit#2 - 2#anaheim#legace#17174#27 - 14 - 6 - 2\\njanuary 22#detroit#5 - 4#los angeles#joseph#18118#28 - 14 - 6 - 2\\njanuary 24#detroit#2 - 5#phoenix#joseph#19019#28 - 15 - 6 - 2\\njanuary 26#detroit#2 - 2#dallas#legace#18532#28 - 15 - 7 - 2\\njanuary 29#new jersey#2 - 5#detroit#joseph#20066#29 - 15 - 7 - 2\\njanuary 31#carolina#4 - 4#detroit#legace#20066#30 - 15 - 8 - 2\\n',\n", - " 'label': 0,\n", - " 'statement': 'there be a tie for the largest point gap 2 time during the season',\n", - " 'table_caption': '2003 - 04 detroit red wings season',\n", - " 'nlsep_query': 'there be a tie for the largest point gap 2 time during the season col : date | visitor | score | home | decision | attendance | record row 1 : january 2 | detroit | 4 - 1 | carolina | joseph | 17053 | 24 - 12 - 4 - 1 row 2 : january 3 | anaheim | 1 - 3 | detroit | legace | 20066 | 25 - 12 - 4 - 1 row 3 : january 5 | nashville | 0 - 6 | detroit | joseph | 20066 | 26 - 12 - 4 - 1 row 4 : january 7 | boston | 3 - 0 | detroit | joseph | 20066 | 26 - 13 - 4 - 1 row 5 : january 10 | detroit | 1 - 2 | boston | joseph | 17565 | 26 - 13 - 4 - 2 row 6 : january 14 | chicago | 2 - 4 | detroit | legace | 20066 | 27 - 13 - 4 - 2 row 7 : january 16 | phoenix | 3 - 3 | detroit | joseph | 20066 | 27 - 13 - 5 - 2 row 8 : january 19 | detroit | 1 - 2 | san jose | joseph | 17361 | 27 - 14 - 5 - 2 row 9 : january 21 | detroit | 2 - 2 | anaheim | legace | 17174 | 27 - 14 - 6 - 2 row 10 : january 22 | detroit | 5 - 4 | los angeles | joseph | 18118 | 28 - 14 - 6 - 2 row 11 : january 24 | detroit | 2 - 5 | phoenix | joseph | 19019 | 28 - 15 - 6 - 2 row 12 : january 26 | detroit | 2 - 2 | dallas | legace | 18532 | 28 - 15 - 7 - 2 row 13 : january 29 | new jersey | 2 - 5 | detroit | joseph | 20066 | 29 - 15 - 7 - 2 row 14 : january 31 | carolina | 4 - 4 | detroit | legace | 20066 | 30 - 15 - 8 - 2',\n", - " 'semtab_query': 'there be a tie for the largest point gap 2 time during the season 2003 - 04 detroit red wings season
dateday - 0.96\"str\"0[\"january 19\", \"january 3\", \"january 26\"]
visitorcity - 0.96\"str\"0[\"boston\", \"detroit\", \"detroit\"]
scoreweight - 0.59\"str\"0[\"3 - 0\", \"1 - 2\", \"2 - 5\"]
hometeam - 1.0\"str\"0[\"detroit\", \"san jose\", \"detroit\"]
decisionname - 1.0\"str\"0[\"joseph\", \"legace\", \"joseph\"]
attendancedepth - 0.85\"int\"0[20066, 17174, 17361]
recordage - 0.88\"str\"0[\"28 - 15 - 7 - 2\", \"26 - 13 - 4 - 2\", \"25 - 12 - 4 - 1\"]
',\n", - " 'nlsep_answ': '```json\\n\"PANDA\": \"df.groupby([\\'home\\', \\'visitor\\'])[\\'score\\'].apply(lambda x: x.str.split(\\'-\\', expand=True).apply(lambda y: abs(int(y[0]) - int(y[1])), axis=1).max().nlargest(2).index.duplicated().any()\"\\n```\\nThis code groups the DataFrame by \\'home\\' and \\'visitor\\' columns, then for each group it calculates the maximum point gap between the scores. It then checks if there are any duplicated values in the top 2 maximum point gaps, indicating a tie.\\n',\n", - " 'nlsep_label': 'False',\n", - " 'nlsep_answ_correct': 'The error in the code is due to an unbalanced parentheses. Here is the corrected code:\\n\\n```python\\npandas_code = \"(df[\\'score\\'].str.split(\\'-\\', expand=True)[0].astype(int) - df[\\'score\\'].str.split(\\'-\\', expand=True)[1].astype(int)).nunique() == 2\"\\n```\\n\\nThis code calculates the point gap between the home and visitor scores and checks if there are two unique values, which would indicate a tie for the largest point gap twice during the season.\\n\\nPlease note that the pandas_code must be a boolean. To ensure this, you can wrap the expression in a bool() function:\\n\\n```python\\npandas_code = \"bool((df[\\'score\\'].str.split(\\'-\\', expand=True)[0].astype(int) - df[\\'score\\'].str.split(\\'-\\', expand=True)[1].astype(int)).nunique() == 2)\"\\n```\\n\\nNow, when you run `str(bool(eval(pandas_code)))`, it should return `True` if there are two unique largest point gap values and `False` otherwise.\\n\\nPlease note that using `eval` can be dangerous if the input is not trusted, as it can execute any Python code. In this case, it is safe to use because the pandas_code is being constructed manually and not derived from user input.\\n\\nThe output in the Json format will be:\\n\\n```json\\n{\\n \"CORRECT PANDA\": \"bool((df[\\'score\\'].str.split(\\'-\\', expand=True)[0].astype(int) - df[\\'score\\'].str.split(\\'-\\', expand=True)[1].astype(int)).nunique() == 2)\"\\n}\\n```\\n'}" + "['semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50']" ] }, - "execution_count": 180, + "execution_count": 286, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "d2[0]" + "config = load_config('semtab_semantic_test_answer.yaml')\n", + "tests = list(config.keys())\n", + "tests" ] }, { "cell_type": "code", - "execution_count": 196, - "id": "7ea78d2c-682c-401e-9721-dca71de9ab0e", + "execution_count": 273, + "id": "eb449491-25d7-4270-8f31-3809389d9b3f", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Filter (num_proc=17): 100%|██████████| 471/471 [00:00<00:00, 974.02 examples/s]\n" - ] - } - ], + "outputs": [], "source": [ - "d3 = d2.filter(lambda x : x['nlsep_label'] != 'None',num_proc=17)" + "tests = ['semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50']" ] }, { "cell_type": "code", - "execution_count": 197, - "id": "897be776-d045-4073-9d12-b5329a5d5889", + "execution_count": 287, + "id": "cc4b5254-cb93-4d86-ae73-31e49bc37613", "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct', 'nlsep_label_correct'],\n", - " num_rows: 0\n", - "})" - ] - }, - "execution_count": 197, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50\n", + "выполнимость 93.04327412160576\n", + "53.822677830816176\n", + "different 0.0\n" + ] } ], "source": [ - "d3" + "acc_old = None\n", + "for test in tests:\n", + " print(test)\n", + " process_data = data.filter(lambda x : x[f'{test}_answ_correct'] != 'None',num_proc=17)\n", + " dd = process_data.filter(lambda x: True if x[f'{test}_label']!='None' else False,num_proc=17)\n", + " pp = data.filter(lambda x: True if x[f'{test}_label']!='None' else False,num_proc=17)\n", + " print('выполнимость',pp.shape[0]/data.shape[0]*100)\n", + " #print(dd.shape[0]/process_data.shape[0]*100)\n", + " true = dd.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " #print(true.shape[0]/process_data.shape[0]*100)\n", + " full = data.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " acc = full.shape[0]/data.shape[0]*100\n", + " print(acc)\n", + " if acc_old == None:\n", + " acc_old = acc\n", + " print('different',acc-acc_old)\n", + " acc_old = acc" ] }, { "cell_type": "code", - "execution_count": 200, - "id": "39c4d23e-4976-45b1-9e3e-1469c0f35e88", + "execution_count": 41, + "id": "cc621610-53b6-45f2-8d17-48f98e7228e8", "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50\n" + ] + }, { "name": "stderr", "output_type": "stream", "text": [ - "Filter (num_proc=17): 100%|██████████| 471/471 [00:00<00:00, 918.59 examples/s]\n" + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:16<00:00, 790.00 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 2531/2531 [00:16<00:00, 152.42 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 2531/2531 [00:16<00:00, 152.10 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:16<00:00, 768.34 examples/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "54.1982940762188\n", + "different 0.0\n", + "semtab_xml_attributes_datatype_exampples_description_top1_tresh50\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:16<00:00, 764.43 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 2398/2398 [00:16<00:00, 143.54 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 2398/2398 [00:16<00:00, 141.34 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:16<00:00, 765.33 examples/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "55.176461381954766\n", + "different 0.9781673057359654\n", + "semtab_xml_attributes_exampples_description_top1_tresh50\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:16<00:00, 761.22 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 2294/2294 [00:16<00:00, 136.85 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 2294/2294 [00:17<00:00, 134.80 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:17<00:00, 721.67 examples/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "54.605211675404966\n", + "different -0.5712497065497999\n", + "semtab_xml_attributes_description_top1_tresh50\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:17<00:00, 743.33 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 3003/3003 [00:16<00:00, 176.87 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 3003/3003 [00:16<00:00, 177.09 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:16<00:00, 762.00 examples/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "46.77987322951718\n", + "different -7.8253384458877875\n", + "semtab_xml_attributes_top1_tresh50\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:16<00:00, 756.32 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 3171/3171 [00:16<00:00, 187.26 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 3171/3171 [00:17<00:00, 185.03 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:16<00:00, 755.26 examples/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "46.47468503012755\n", + "different -0.30518819938962594\n", + "semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:16<00:00, 753.86 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 2806/2806 [00:16<00:00, 165.42 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 2806/2806 [00:17<00:00, 164.73 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:17<00:00, 731.47 examples/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "52.60192503325769\n", + "different 6.12724000313014\n", + "semtab_xml_elements_datatype_exampples_description_top1_tresh50\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:16<00:00, 755.90 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 2564/2564 [00:16<00:00, 151.82 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 2564/2564 [00:17<00:00, 150.31 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:16<00:00, 761.45 examples/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "52.41411691055639\n", + "different -0.18780812270130554\n", + "semtab_xml_elements_exampples_description_top1_tresh50\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:16<00:00, 753.56 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 2355/2355 [00:17<00:00, 138.19 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 2355/2355 [00:16<00:00, 139.22 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:17<00:00, 746.98 examples/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "51.529853666171064\n", + "different -0.8842632443853233\n", + "semtab_xml_elements_description_top1_tresh50\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:16<00:00, 752.53 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 3338/3338 [00:17<00:00, 196.32 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 3338/3338 [00:16<00:00, 196.47 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:16<00:00, 754.09 examples/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "43.13326551373347\n", + "different -8.396588152437594\n", + "semtab_xml_elements_top1_tresh50\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:17<00:00, 750.45 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 3357/3357 [00:16<00:00, 197.83 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 3357/3357 [00:17<00:00, 196.06 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:17<00:00, 750.14 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "43.61843649737851\n", + "different 0.4851709836450411\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" ] } ], "source": [ - "d3 = d2.filter(lambda x : x['nlsep_label_correct']==str(bool(x['label'])),num_proc=17)" + "acc_old = None\n", + "for test in tests:\n", + " print(test)\n", + " process_data = data.filter(lambda x : x[f'{test}_answ_correct'] != 'None',num_proc=17)\n", + " dd = process_data.filter(lambda x: True if x[f'{test}_label']!='None' else False,num_proc=17)\n", + " #print(dd.shape[0]/data.shape[0]*100)\n", + " #print(dd.shape[0]/process_data.shape[0]*100)\n", + " true = dd.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " #print(true.shape[0]/process_data.shape[0]*100)\n", + " full = data.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " acc = full.shape[0]/data.shape[0]*100\n", + " print(acc)\n", + " if acc_old == None:\n", + " acc_old = acc\n", + " print('different',acc-acc_old)\n", + " acc_old = acc" + ] + }, + { + "cell_type": "markdown", + "id": "0f4683f4-e3ba-4078-8c14-0e44f8f16263", + "metadata": {}, + "source": [ + "A - semantic datatype exampples description top1 tresh50\n", + "\n", + "B - datatype exampples description top1 tresh50\n", + "\n", + "C - exampples description top1 tresh50\n", + "\n", + "D - description top1 tresh50\n", + "\n", + "E - top1 tresh50\n", + "\n", + "| Method | Accuracy |\n", + "|---------------------|:--------:|\n", + "| semtab xml elements | 51.85 |\n", + "| semtab html | 53.86 |\n", + "| space | 53.28 |\n", + "| nlsep | 54.23 |\n", + "\n", + "#### Accuracy\n", + "| Mode | semtab xml attributes | semtab xml elements | semtab html |\n", + "|:----:|:---------------------:|:-------------------:|:-----------:|\n", + "| A | 54.20 | 52.60 | 53.67 |\n", + "| B | 55.17 | 52.41 | 54.82 |\n", + "| C | 54.61 | 51.53 | 54.11 |\n", + "| D | 46.78 | 43.13 | 46.55 |\n", + "| E | 46.47 | 43.62 | 46.49 |\n" ] }, { "cell_type": "code", - "execution_count": 201, - "id": "238af416-0f43-4c15-8d20-021d53adfc9c", + "execution_count": 47, + "id": "1fe9d489-da2c-4e0d-bcf7-cce77d971ada", + "metadata": {}, + "outputs": [], + "source": [ + "data = load_from_disk('tab_fact_test_universal2')" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "2f7e8c4e-4b5f-4a0b-a3ff-3d3f2d7279f4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct', 'nlsep_label_correct'],\n", - " num_rows: 296\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_exampples_description_top1_tresh50', 'semtab_xml_elements_description_top1_tresh50'],\n", + " num_rows: 12779\n", "})" ] }, - "execution_count": 201, + "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "d3" + "data" ] }, { "cell_type": "code", - "execution_count": 205, - "id": "0cc4f74e-81ad-4afe-b920-20e40da86a7c", + "execution_count": 49, + "id": "a13e6f8e-9049-4f2a-8495-de66a070241b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "date object\n", - "result object\n", - "score object\n", - "brazil scorers object\n", - "competition object\n", - "dtype: object" + "('id',\n", + " 'table_csv',\n", + " 'table_text',\n", + " 'label',\n", + " 'statement',\n", + " 'table_caption',\n", + " 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50',\n", + " 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50',\n", + " 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50',\n", + " 'semtab_xml_elements_datatype_exampples_description_top1_tresh50',\n", + " 'semtab_xml_elements_exampples_description_top1_tresh50',\n", + " 'semtab_xml_elements_description_top1_tresh50')" ] }, - "execution_count": 205, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df.dtypes" + "'id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_exampples_description_top1_tresh50', 'semtab_xml_elements_description_top1_tresh50'" ] }, { "cell_type": "code", - "execution_count": 204, - "id": "97cd2a90-0b17-499a-8620-eed8408962c4", + "execution_count": 56, + "id": "c127b6d0-62fe-4be6-9659-a3360cf318c5", "metadata": {}, "outputs": [], "source": [ - "for col in df.columns:\n", - " try:\n", - " df[col] = pd.to_numeric(df[col])\n", - " except ValueError:\n", - " # Если возникает ошибка, оставляем столбец как есть\n", - " pass" + "data = load_from_disk('tab_fact_test_semtab_xml_ablation')" ] }, { "cell_type": "code", - "execution_count": 206, - "id": "c9d84ec7-3f0a-4052-8c9f-7fd4bfaa4928", + "execution_count": 57, + "id": "d158c0f9-312d-4ee2-990b-3a86e4b127b4", "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", - "
dateresultscorebrazil scorerscompetition
0may 11 , 1919w6 - 0friedenreich (3) , neco (2) , haroldosouth american championship
1may 18 , 1919w3 - 1heitor , amílcar , millonsouth american championship
2may 26 , 1919d2 - 2neco (2)south american championship
3may 29 , 1919w1 - 0friedenreichsouth american championship
4june 1 , 1919d3 - 3haroldo , arlindo (2)taça roberto cherry
\n", - "
" - ], "text/plain": [ - " date result score brazil scorers \\\n", - "0 may 11 , 1919 w 6 - 0 friedenreich (3) , neco (2) , haroldo \n", - "1 may 18 , 1919 w 3 - 1 heitor , amílcar , millon \n", - "2 may 26 , 1919 d 2 - 2 neco (2) \n", - "3 may 29 , 1919 w 1 - 0 friedenreich \n", - "4 june 1 , 1919 d 3 - 3 haroldo , arlindo (2) \n", - "\n", - " competition \n", - "0 south american championship \n", - "1 south american championship \n", - "2 south american championship \n", - "3 south american championship \n", - "4 taça roberto cherry " + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_exampples_description_top1_tresh50', 'semtab_xml_attributes_description_top1_tresh50', 'semtab_xml_attributes_top1_tresh50', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_exampples_description_top1_tresh50', 'semtab_xml_elements_description_top1_tresh50', 'semtab_xml_elements_top1_tresh50'],\n", + " num_rows: 12779\n", + "})" ] }, - "execution_count": 206, + "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df" + "data" ] }, { "cell_type": "code", - "execution_count": 212, - "id": "62e0832f-ebf6-42a9-9f44-01540151b6e1", + "execution_count": 59, + "id": "697a3195-691a-4b29-9700-9a734dde81c5", + "metadata": {}, + "outputs": [ + { + "ename": "ValueError", + "evalue": "invalid literal for int() with base 10: 'table_text'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[59], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mdata\u001b[49m\u001b[43m[\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mid\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mtable_csv\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mtable_text\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mlabel\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mstatement\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mtable_caption\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43msemtab_xml_attributes_exampples_description_top1_tresh50\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m]\u001b[49m\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/datasets/arrow_dataset.py:2876\u001b[0m, in \u001b[0;36mDataset.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 2874\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_format_type \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_format_type \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m (\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124marrow\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpandas\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpolars\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[1;32m 2875\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m Column(\u001b[38;5;28mself\u001b[39m, key)\n\u001b[0;32m-> 2876\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_getitem\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/datasets/arrow_dataset.py:2857\u001b[0m, in \u001b[0;36mDataset._getitem\u001b[0;34m(self, key, **kwargs)\u001b[0m\n\u001b[1;32m 2855\u001b[0m format_kwargs \u001b[38;5;241m=\u001b[39m format_kwargs \u001b[38;5;28;01mif\u001b[39;00m format_kwargs \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01melse\u001b[39;00m {}\n\u001b[1;32m 2856\u001b[0m formatter \u001b[38;5;241m=\u001b[39m get_formatter(format_type, features\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_info\u001b[38;5;241m.\u001b[39mfeatures, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mformat_kwargs)\n\u001b[0;32m-> 2857\u001b[0m pa_subtable \u001b[38;5;241m=\u001b[39m \u001b[43mquery_table\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_data\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mindices\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_indices\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2858\u001b[0m formatted_output \u001b[38;5;241m=\u001b[39m format_table(\n\u001b[1;32m 2859\u001b[0m pa_subtable, key, formatter\u001b[38;5;241m=\u001b[39mformatter, format_columns\u001b[38;5;241m=\u001b[39mformat_columns, output_all_columns\u001b[38;5;241m=\u001b[39moutput_all_columns\n\u001b[1;32m 2860\u001b[0m )\n\u001b[1;32m 2861\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m formatted_output\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/datasets/formatting/formatting.py:612\u001b[0m, in \u001b[0;36mquery_table\u001b[0;34m(table, key, indices)\u001b[0m\n\u001b[1;32m 610\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 611\u001b[0m size \u001b[38;5;241m=\u001b[39m indices\u001b[38;5;241m.\u001b[39mnum_rows \u001b[38;5;28;01mif\u001b[39;00m indices \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01melse\u001b[39;00m table\u001b[38;5;241m.\u001b[39mnum_rows\n\u001b[0;32m--> 612\u001b[0m \u001b[43m_check_valid_index_key\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msize\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 613\u001b[0m \u001b[38;5;66;03m# Query the main table\u001b[39;00m\n\u001b[1;32m 614\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m indices \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/datasets/formatting/formatting.py:562\u001b[0m, in \u001b[0;36m_check_valid_index_key\u001b[0;34m(key, size)\u001b[0m\n\u001b[1;32m 560\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(key, Iterable):\n\u001b[1;32m 561\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(key) \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[0;32m--> 562\u001b[0m _check_valid_index_key(\u001b[38;5;28;43mint\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mmax\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m, size\u001b[38;5;241m=\u001b[39msize)\n\u001b[1;32m 563\u001b[0m _check_valid_index_key(\u001b[38;5;28mint\u001b[39m(\u001b[38;5;28mmin\u001b[39m(key)), size\u001b[38;5;241m=\u001b[39msize)\n\u001b[1;32m 564\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", + "\u001b[0;31mValueError\u001b[0m: invalid literal for int() with base 10: 'table_text'" + ] + } + ], + "source": [ + "data.map(lambda x:['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption','semtab_xml_attributes_exampples_description_top1_tresh50']]" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "626f9978-3e15-4264-9572-8e486ae1b859", + "metadata": {}, + "outputs": [], + "source": [ + "dd = data.select_columns([\n", + " 'id', \n", + " 'table_csv', \n", + " 'table_text', \n", + " 'label', \n", + " 'statement', \n", + " 'table_caption',\n", + " 'semtab_xml_attributes_exampples_description_top1_tresh50'\n", + "])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "6f63017f-41f8-4d40-b1d7-6f33a62aac70", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "Filter (num_proc=17): 100%|██████████| 4257/4257 [00:00<00:00, 8874.34 examples/s]\n" + "Saving the dataset (1/1 shards): 100%|██████████| 12779/12779 [00:00<00:00, 317636.94 examples/s]\n" ] } ], "source": [ - "data = load_from_disk('tab_fact_test_xml_nlsep_correct_dtype/')\n", - "d2 = data.filter(lambda x : x['nlsep_answ_correct'] != 'None',num_proc=17)\n" + "dd.save_to_disk('tab_fact_test_llm_semantic_test')" ] }, { "cell_type": "code", - "execution_count": 213, - "id": "0c7637b6-856f-41be-be10-e23e7646d82e", + "execution_count": null, + "id": "1745253e-64d3-4871-82f6-fef8fa5fc76f", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 318, + "id": "f8e5061c-3b91-43c7-ac51-4bdd93f0f8f3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct', 'nlsep_label_correct'],\n", - " num_rows: 415\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_answ', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_label', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_answ_correct'],\n", + " num_rows: 12779\n", "})" ] }, - "execution_count": 213, + "execution_count": 318, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "d2" + "# semtab на репанда промпте на репанда lora\n", + "\n", + "data = load_from_disk(\"tab_fact_test_semtab_xml_repanda\")\n", + "data" ] }, { "cell_type": "code", - "execution_count": 214, - "id": "454a3226-c3bd-4bd9-baab-ff2b92cf017d", + "execution_count": 319, + "id": "3c6bfc04-f0f0-4a28-860e-d36f4f3f2723", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct'],\n", - " num_rows: 12779\n", - "})\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 27151.13 examples/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct'],\n", - " num_rows: 12779\n", - "})\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 25923.24 examples/s]\n" - ] - }, + "data": { + "text/plain": [ + "['semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50']" + ] + }, + "execution_count": 319, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "config = load_config('semtab_semantic_test_answer.yaml')\n", + "tests = list(config.keys())\n", + "tests" + ] + }, + { + "cell_type": "code", + "execution_count": 320, + "id": "5be1902b-961f-498e-8b73-18743a8ef39b", + "metadata": {}, + "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct'],\n", - " num_rows: 8974\n", - "})\n", - "70.22458721339699\n" + "semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50\n", + "Процент корректируемых ответов 1.0720713670866264\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Filter (num_proc=17): 100%|██████████| 8974/8974 [00:00<00:00, 18914.21 examples/s]" + "Filter (num_proc=17): 100%|██████████| 137/137 [00:00<00:00, 169.20 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "42.92980671414038\n" + "успешно скорректированные отноосительно корректируемых 56.934306569343065\n", + "выполнимость 95.05438610219892\n", + "коректность вывыполняемых 75.95291018358442\n", + "72.1965725017607\n", + "different 0.0\n" ] }, { @@ -17113,369 +28210,468 @@ } ], "source": [ - "process_data = load_from_disk('./tab_fact_test_xml_nlsep_new_correct//')\n", - "print(process_data)\n", - "dd = process_data.filter(lambda x: True if x['nlsep_answ']!='None' else False,num_proc=17)\n", - "print(dd)\n", - "dd = process_data.filter(lambda x: True if x['nlsep_label']!='None' else False,num_proc=17)\n", - "print(dd)\n", - "print(dd.shape[0]/process_data.shape[0]*100)\n", - "true = dd.filter(lambda x : True if x['nlsep_label']==str(bool(x['label'])) else False,num_proc=17)\n", - "print(true.shape[0]/process_data.shape[0]*100)" + "acc_old = None\n", + "for test in tests:\n", + " print(test)\n", + " process_data = data.filter(lambda x : x[f'{test}_answ_correct'] != 'None',num_proc=17)\n", + " dd = data.filter(lambda x: True if x[f'{test}_label']!='None' else False,num_proc=17)\n", + " print('Процент корректируемых ответов',process_data.shape[0]/data.shape[0]*100)\n", + " cor = process_data.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " print('успешно скорректированные отноосительно корректируемых ',cor.shape[0]/process_data.shape[0]*100)\n", + " print('выполнимость',dd.shape[0]/data.shape[0]*100)\n", + " true = dd.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " print('коректность вывыполняемых ',true.shape[0]/dd.shape[0]*100)\n", + " full = data.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " acc = full.shape[0]/data.shape[0]*100\n", + " print(acc)\n", + " if acc_old == None:\n", + " acc_old = acc\n", + " print('different',acc-acc_old)\n", + " acc_old = acc" ] }, { "cell_type": "code", - "execution_count": 217, - "id": "2e895222-3547-4af0-b81a-7a317d9ad273", + "execution_count": 259, + "id": "838f0098-a960-4c8c-b3ab-a5889324bb6c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{'id': 0,\n", - " 'table_csv': '2-1570274-4.html.csv',\n", - " 'table_text': 'tournament#wins#top - 5#top - 10#top - 25#events#cuts made\\nmasters tournament#0#1#2#4#4#4\\nus open#0#2#3#4#6#5\\nthe open championship#1#2#2#2#3#3\\npga championship#0#0#1#2#5#4\\ntotals#1#5#8#12#18#16\\n',\n", - " 'label': 1,\n", - " 'statement': 'tournament that tony lema have participate in include the master tournament , the us open , the pga championship and the open championship',\n", - " 'table_caption': 'tony lema',\n", - " 'nlsep_query': 'tournament that tony lema have participate in include the master tournament , the us open , the pga championship and the open championship col : tournament | wins | top - 5 | top - 10 | top - 25 | events | cuts made row 1 : masters tournament | 0 | 1 | 2 | 4 | 4 | 4 row 2 : us open | 0 | 2 | 3 | 4 | 6 | 5 row 3 : the open championship | 1 | 2 | 2 | 2 | 3 | 3 row 4 : pga championship | 0 | 0 | 1 | 2 | 5 | 4 row 5 : totals | 1 | 5 | 8 | 12 | 18 | 16',\n", - " 'semtab_query': 'tournament that tony lema have participate in include the master tournament , the us open , the pga championship and the open championship tony lema
tournamentcategory - 1.0\"str\"0[\"pga championship\", \"masters tournament\", \"us open\"]
winsrank - 1.0\"int\"0[0, 0, 0]
top - 5rank - 1.0\"int\"0[2, 5, 2]
top - 10rank - 1.0\"int\"0[8, 1, 3]
top - 25rank - 0.99\"int\"0[12, 2, 4]
eventsduration - 0.73\"int\"0[18, 5, 6]
cuts maderank - 0.99\"int\"0[5, 3, 16]
',\n", - " 'nlsep_answ': 'Here is the single-line pandas expression that translates the given natural language statement:\\n\\n```json\\n\"PANDA\": \"df[(df[\\'tournament\\'] == \\'tony lema\\') & (df[\\'tournament\\'].isin([\\'the master tournament\\', \\'the us open\\', \\'the pga championship\\', \\'the open championship\\']))].sum().eq(df.loc[4]).all()\"\\n```\\n\\nThis expression checks if the sum of the specified columns for the rows where \\'tournament\\' is \\'tony lema\\' and where \\'tournament\\' is in the given list of tournaments equals the sum of the specified columns for the total row.\\n',\n", - " 'nlsep_label': 'False',\n", - " 'nlsep_answ_correct': 'None'}" + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_answ', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_label', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_answ_correct'],\n", + " num_rows: 9226\n", + "})" ] }, - "execution_count": 217, + "execution_count": 259, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "dd[0]" + "full" ] }, { "cell_type": "code", - "execution_count": 216, - "id": "4ff35c94-cb7a-49af-9273-35cd90b9f96a", + "execution_count": 315, + "id": "f3ae7d2b-2133-4d34-8739-c6268cd3d7cc", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 26475.69 examples/s]\n" - ] - }, + "outputs": [], + "source": [ + "# semtab на репанда промпте на репанда-direct\n", + "\n", + "data = load_from_disk(\"tab_fact_test_semtab_xml_repanda_direct\")" + ] + }, + { + "cell_type": "code", + "execution_count": 316, + "id": "c837c7f1-0ea2-4b00-8a4b-bf2b9bc36154", + "metadata": {}, + "outputs": [ { "data": { "text/plain": [ - "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct'],\n", - " num_rows: 479\n", - "})" + "['semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50']" ] }, - "execution_count": 216, + "execution_count": 316, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "process_data.filter(lambda x: True if x['nlsep_answ_correct']!='None' else False,num_proc=17)\n" + "config = load_config('semtab_semantic_test_answer.yaml')\n", + "tests = list(config.keys())\n", + "tests" ] }, { "cell_type": "code", - "execution_count": 220, - "id": "0ceafa48-cfaa-45c3-93eb-659900912679", + "execution_count": 317, + "id": "c76b78ba-0aa0-423e-aef4-6de90b1acc81", "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50\n", + "Процент корректируемых ответов 2.183269426402692\n" + ] + }, { "name": "stderr", "output_type": "stream", "text": [ - "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 26537.53 examples/s]\n" + "Filter (num_proc=17): 100%|██████████| 279/279 [00:00<00:00, 352.81 examples/s]\n" ] }, { - "data": { - "text/plain": [ - "{'id': 905,\n", - " 'table_csv': '2-17231125-6.html.csv',\n", - " 'table_text': \"place#player#country#score#to par\\n1#curtis strange#united states#70 + 67 + 69 = 206#- 7\\nt2#nick faldo#england#72 + 67 + 68 = 207#- 6\\nt2#bob gilder#united states#68 + 69 + 70 = 207#- 6\\nt2#scott simpson#united states#69 + 66 + 72 = 207#- 6\\nt5#larry mize#united states#69 + 67 + 72 = 208#- 5\\nt5#d a weibring#united states#71 + 69 + 68 = 208#- 5\\n7#mark o'meara#united states#71 + 72 + 66 = 209#- 4\\n8#fred couples#united states#72 + 67 + 71 = 210#- 3\\n9#lanny wadkins#united states#70 + 71 + 70 = 211#- 2\\n10#ken green#united states#72 + 70 + 70 = 212#- 1\\n\",\n", - " 'label': 1,\n", - " 'statement': 'player larry mize and d a be tie for 5th place',\n", - " 'table_caption': '1988 u.s. open (golf)',\n", - " 'nlsep_query': \"player larry mize and d a be tie for 5th place col : place | player | country | score | to par row 1 : 1 | curtis strange | united states | 70 + 67 + 69 = 206 | - 7 row 2 : t2 | nick faldo | england | 72 + 67 + 68 = 207 | - 6 row 3 : t2 | bob gilder | united states | 68 + 69 + 70 = 207 | - 6 row 4 : t2 | scott simpson | united states | 69 + 66 + 72 = 207 | - 6 row 5 : t5 | larry mize | united states | 69 + 67 + 72 = 208 | - 5 row 6 : t5 | d a weibring | united states | 71 + 69 + 68 = 208 | - 5 row 7 : 7 | mark o'meara | united states | 71 + 72 + 66 = 209 | - 4 row 8 : 8 | fred couples | united states | 72 + 67 + 71 = 210 | - 3 row 9 : 9 | lanny wadkins | united states | 70 + 71 + 70 = 211 | - 2 row 10 : 10 | ken green | united states | 72 + 70 + 70 = 212 | - 1\",\n", - " 'semtab_query': 'player larry mize and d a be tie for 5th place 1988 u.s. open (golf)
placerank - 1.0\"int\"0[\"t2\", \"t5\", \"7\"]
playername - 1.0\"str\"0[\"scott simpson\", \"lanny wadkins\", \"bob gilder\"]
countrynationality - 1.0\"str\"0[\"united states\", \"united states\", \"united states\"]
scoreweight - 1.0\"str\"0[\"72 + 70 + 70 = 212\", \"71 + 69 + 68 = 208\", \"70 + 67 + 69 = 206\"]
to parweight - 0.71\"str\"0[\"- 6\", \"- 5\", \"- 6\"]
',\n", - " 'nlsep_answ': 'Here\\'s the single-line pandas expression:\\n\\n```json\\n\"PANDA\": \"df.loc[df[\\'score\\'].isin(df.loc[df[\\'place\\']==5, \\'score\\']), \\'player\\'].str.contains(\\'larry mize|d a weibring\\').all()\"\\n```\\n\\nThis expression checks if all the players in the 5th place score are present in the score of \\'larry mize\\' and \\'d a weibring\\'.\\n',\n", - " 'nlsep_label': 'True',\n", - " 'nlsep_answ_correct': 'None'}" - ] - }, - "execution_count": 220, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "успешно скорректированные отноосительно корректируемых 46.236559139784944\n", + "выполнимость 94.8744033179435\n", + "коректность вывыполняемых 53.28274496865721\n", + "50.55168636043509\n", + "different 0.0\n" + ] } ], "source": [ - "process_data.filter(lambda x: True if x['id']==905 else False,num_proc=17)[0]" + "acc_old = None\n", + "for test in tests:\n", + " print(test)\n", + " process_data = data.filter(lambda x : x[f'{test}_answ_correct'] != 'None',num_proc=17)\n", + " dd = data.filter(lambda x: True if x[f'{test}_label']!='None' else False,num_proc=17)\n", + " print('Процент корректируемых ответов',process_data.shape[0]/data.shape[0]*100)\n", + " cor = process_data.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " print('успешно скорректированные отноосительно корректируемых ',cor.shape[0]/process_data.shape[0]*100)\n", + " print('выполнимость',dd.shape[0]/data.shape[0]*100)\n", + " true = dd.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " print('коректность вывыполняемых ',true.shape[0]/dd.shape[0]*100)\n", + " full = data.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " acc = full.shape[0]/data.shape[0]*100\n", + " print(acc)\n", + " if acc_old == None:\n", + " acc_old = acc\n", + " print('different',acc-acc_old)\n", + " acc_old = acc" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f2f9972e-7ead-42a0-9358-397a1305688c", + "metadata": {}, + "outputs": [], + "source": [ + "fail = data.filter(lambda x : False if x[f'{test}_label']==str(bool(x['label'])) else True,num_proc=17)" + ] + }, + { + "cell_type": "code", + "execution_count": 220, + "id": "a7693f3b-0ff5-4213-a26e-0e8691747a9c", + "metadata": {}, + "outputs": [], + "source": [ + "fail = dd.filter(lambda x : False if x[f'{test}_label']==str(bool(x['label'])) else True,num_proc=17)" ] }, { "cell_type": "code", "execution_count": 221, - "id": "dde01baa-1f1f-495e-84c6-1d091b8e8ca6", + "id": "c592f820-429b-441d-b154-8ac88c969e57", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "\"df.loc[df['score'].isin(df.loc[df['place']==5, 'score']), 'player'].str.contains('larry mize|d a weibring').all()\"" - ] - }, - "execution_count": 221, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "parse_panda_code('Here\\'s the single-line pandas expression:\\n\\n```json\\n\"PANDA\": \"df.loc[df[\\'score\\'].isin(df.loc[df[\\'place\\']==5, \\'score\\']), \\'player\\'].str.contains(\\'larry mize|d a weibring\\').all()\"\\n```\\n\\nThis expression checks if all the players in the 5th place score are present in the score of \\'larry mize\\' and \\'d a weibring\\'.\\n')" + "def parse_panda_code(input_string):\n", + " \"\"\"\n", + " Парсит строку и извлекает код, который находится внутри конструкции \"PANDA\": <код>\n", + " Поддерживает различные форматы: JSON, простой текст, Markdown\n", + " \n", + " Args:\n", + " input_string (str): Входная строка для парсинга\n", + " \n", + " Returns:\n", + " str: Извлеченный код или пустая строка, если код не найден\n", + " \"\"\"\n", + " # Сначала попробуем найти JSON объект с PANDA\n", + " json_pattern = r'\\{[^{}]*(?:CORRECT PANDA|PANDA)\":\\s*(.+?)(?:\\n|$)?\\}'\n", + " json_match = re.search(json_pattern, input_string, re.DOTALL)\n", + " code = None\n", + " pattern = r'\"(?:CORRECT PANDA|PANDA)\":\\s*(.+?)(?:\\n|$)'\n", + " if json_match:\n", + " code = json_match.group(1).strip()\n", + " else:\n", + " match = re.search(pattern, input_string, re.DOTALL)\n", + " if match:\n", + " # Извлекаем код и убираем лишние пробелы по краям\n", + " code = match.group(1).strip()\n", + " # Заменяем одинарные кавычки внутри строки для корректного парсинга JSON\n", + "\n", + " # Если JSON не найден или не распарсился, используем старый метод\n", + " # Паттерн для поиска кода после \"PANDA\": \n", + " # Ищет \"PANDA\": за которым следует пробел, затем код до конца строки или до следующего символа\n", + " if code != None:\n", + " # Убираем возможные кавычки вокруг кода\n", + " if code.startswith('\"') and code.endswith('\"'):\n", + " code = code[1:-1]\n", + " elif code.startswith(\"'\") and code.endswith(\"'\"):\n", + " code = code[1:-1]\n", + " \n", + " return code\n", + " \n", + " return \"\"" ] }, { "cell_type": "code", - "execution_count": 237, - "id": "395f05b4-f2f4-4ac5-a7d8-ddaf87cfed20", + "execution_count": 222, + "id": "2777a02e-f555-4620-8852-e8afccc6b03e", "metadata": {}, "outputs": [], "source": [ - "df = pd.read_csv(StringIO(\"place#player#country#score#to par\\n1#curtis strange#united states#70 + 67 + 69 = 206#- 7\\nt2#nick faldo#england#72 + 67 + 68 = 207#- 6\\nt2#bob gilder#united states#68 + 69 + 70 = 207#- 6\\nt2#scott simpson#united states#69 + 66 + 72 = 207#- 6\\nt5#larry mize#united states#69 + 67 + 72 = 208#- 5\\nt5#d a weibring#united states#71 + 69 + 68 = 208#- 5\\n7#mark o'meara#united states#71 + 72 + 66 = 209#- 4\\n8#fred couples#united states#72 + 67 + 71 = 210#- 3\\n9#lanny wadkins#united states#70 + 71 + 70 = 211#- 2\\n10#ken green#united states#72 + 70 + 70 = 212#- 1\\n\"), delimiter='#')\n" + "def add_pandas(ex):\n", + " \n", + " ex['pandas_code'] = parse_panda_code(ex['semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_answ'])\n", + " return ex" ] }, { "cell_type": "code", - "execution_count": 238, - "id": "1505bb2a-7799-4042-9053-df547617aa69", + "execution_count": 223, + "id": "0c4d4d72-b216-4766-9d7b-d2a22e4e8964", + "metadata": {}, + "outputs": [], + "source": [ + "fail = fail.map(add_pandas,num_proc=16)" + ] + }, + { + "cell_type": "code", + "execution_count": 189, + "id": "a5ba50d8-4935-4eeb-baa2-3dd724df3c6e", "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
placeplayercountryscoreto par
01curtis strangeunited states70 + 67 + 69 = 206- 7
1t2nick faldoengland72 + 67 + 68 = 207- 6
2t2bob gilderunited states68 + 69 + 70 = 207- 6
3t2scott simpsonunited states69 + 66 + 72 = 207- 6
4t5larry mizeunited states69 + 67 + 72 = 208- 5
5t5d a weibringunited states71 + 69 + 68 = 208- 5
67mark o'mearaunited states71 + 72 + 66 = 209- 4
78fred couplesunited states72 + 67 + 71 = 210- 3
89lanny wadkinsunited states70 + 71 + 70 = 211- 2
910ken greenunited states72 + 70 + 70 = 212- 1
\n", - "
" - ], - "text/plain": [ - " place player country score to par\n", - "0 1 curtis strange united states 70 + 67 + 69 = 206 - 7\n", - "1 t2 nick faldo england 72 + 67 + 68 = 207 - 6\n", - "2 t2 bob gilder united states 68 + 69 + 70 = 207 - 6\n", - "3 t2 scott simpson united states 69 + 66 + 72 = 207 - 6\n", - "4 t5 larry mize united states 69 + 67 + 72 = 208 - 5\n", - "5 t5 d a weibring united states 71 + 69 + 68 = 208 - 5\n", - "6 7 mark o'meara united states 71 + 72 + 66 = 209 - 4\n", - "7 8 fred couples united states 72 + 67 + 71 = 210 - 3\n", - "8 9 lanny wadkins united states 70 + 71 + 70 = 211 - 2\n", - "9 10 ken green united states 72 + 70 + 70 = 212 - 1" - ] - }, - "execution_count": 238, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\"PANDA\": df[df['company'] == 'mas catering (sarawak) sdn bhd'][\"group 's equity shareholding\"].iloc[0] == '100%'\n", + "\n" + ] } ], "source": [ - "df" + "print(fail['semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_answ'][501])" ] }, { "cell_type": "code", - "execution_count": 239, - "id": "f1e3a44a-3a2b-48f0-a61a-228bae4e8f9f", + "execution_count": 225, + "id": "f6bf7643-a5fb-4c50-850d-661ea99f11e6", "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "place object\n", - "player object\n", - "country object\n", - "score object\n", - "to par object\n", - "dtype: object" - ] - }, - "execution_count": 239, - "metadata": {}, - "output_type": "execute_result" + "name": "stderr", + "output_type": "stream", + "text": [ + "Saving the dataset (1/1 shards): 100%|██████████| 2921/2921 [00:00<00:00, 64203.80 examples/s]\n" + ] } ], "source": [ - "df.dtypes" + "fail.save_to_disk('repanda_tabfact_errors')" ] }, { "cell_type": "code", - "execution_count": 230, - "id": "9ec1801f-ad92-4b72-8267-9df578e1185b", + "execution_count": 188, + "id": "614ef558-79c1-4391-b63a-282ddb560e05", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "place Unable to parse string \"t2\" at position 1\n", - "player Unable to parse string \"curtis strange\" at position 0\n", - "country Unable to parse string \"united states\" at position 0\n", - "score Unable to parse string \"70 + 67 + 69 = 206\" at position 0\n", - "to par Unable to parse string \"- 7\" at position 0\n" + "malaysia airlines\n", + "of all the subsidiary of malaysia airline malaysia airline have the lowest equity shareholding in ma catering (sarawak) sdn bhd\n", + "1\n" ] } ], "source": [ - "for col in df.columns:\n", - " try:\n", - " df[col] = pd.to_numeric(df[col])\n", - " except ValueError as e:\n", - " print(col,e)\n", - " # Если возникает ошибка, оставляем столбец как есть\n", - " pass" + "print(fail['table_caption'][501])\n", + "print(fail['statement'][501])\n", + "print(fail['label'][501])" ] }, { "cell_type": "code", - "execution_count": 235, - "id": "deb87756-4766-4caa-bc96-8fd5fa41e23f", + "execution_count": 184, + "id": "5870a490-8c97-48f9-831e-2d6f5a05944e", "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", + " \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", + "
companytypeprincipal activitiesincorporated ingroup 's equity shareholding
0malaysia airlines cargo sdn bhdsubsidiarycargomalaysia100%
1ge engine services malaysiajoint ventureengine overhaulmalaysia30%
2maswings sdn bhdsubsidiaryairlinemalaysia100%
3firefly sdn bhdsubsidiaryairlinemalaysia100%
4mas aerotechnologies sdn bhdsubsidiarymromalaysia100%
5mas golden holidays sdn bhdsubsidiarytour operatormalaysia100%
6malaysian aerospace engineering sdn bhdsubsidiaryengineeringmalaysia100%
7mas academy sdn bhdsubsidiaryflight schoolmalaysia100%
8abacus distribution systems (malaysia) sdn bhdsubsidiarycomputer reservation systemmalaysia80%
9taj madras air catering limitedassociatecateringindia20%
10mas catering (sarawak) sdn bhdsubsidiarycateringmalaysia60%
11lsg sky chefsassociateholding companymalaysia30%
\n", + "
" + ], "text/plain": [ - "-7" + " company type \\\n", + "0 malaysia airlines cargo sdn bhd subsidiary \n", + "1 ge engine services malaysia joint venture \n", + "2 maswings sdn bhd subsidiary \n", + "3 firefly sdn bhd subsidiary \n", + "4 mas aerotechnologies sdn bhd subsidiary \n", + "5 mas golden holidays sdn bhd subsidiary \n", + "6 malaysian aerospace engineering sdn bhd subsidiary \n", + "7 mas academy sdn bhd subsidiary \n", + "8 abacus distribution systems (malaysia) sdn bhd subsidiary \n", + "9 taj madras air catering limited associate \n", + "10 mas catering (sarawak) sdn bhd subsidiary \n", + "11 lsg sky chefs associate \n", + "\n", + " principal activities incorporated in group 's equity shareholding \n", + "0 cargo malaysia 100% \n", + "1 engine overhaul malaysia 30% \n", + "2 airline malaysia 100% \n", + "3 airline malaysia 100% \n", + "4 mro malaysia 100% \n", + "5 tour operator malaysia 100% \n", + "6 engineering malaysia 100% \n", + "7 flight school malaysia 100% \n", + "8 computer reservation system malaysia 80% \n", + "9 catering india 20% \n", + "10 catering malaysia 60% \n", + "11 holding company malaysia 30% " ] }, - "execution_count": 235, + "execution_count": 184, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "int('-7')" + "df = pd.read_csv(StringIO(fail['table_text'][500]), delimiter='#')\n", + "df" ] }, { "cell_type": "code", - "execution_count": 236, - "id": "9e818218-300a-4a29-85ea-1c5f16f5da92", + "execution_count": 164, + "id": "a87dadd7-d108-47a0-8b50-6dccbe1c6fca", "metadata": {}, "outputs": [ { @@ -17484,682 +28680,663 @@ "np.True_" ] }, - "execution_count": 236, + "execution_count": 164, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "eval(\"df.loc[df['score'].isin(df.loc[df['place']==5, 'score']), 'player'].str.contains('larry mize|d a weibring').all()\")" - ] - }, - { - "cell_type": "code", - "execution_count": 334, - "id": "5ad79a70-8a2f-4423-96e8-f6373ae279de", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct'],\n", - " num_rows: 12779\n", - "})\n", - "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct'],\n", - " num_rows: 2798\n", - "})\n", - "21.89529697159402\n", - "100.0\n", - "57.255182273052185\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 27316.22 examples/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "55.450348227560845\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], - "source": [ - "data = load_from_disk('tab_fact_test_xml_nlsep_new_correct_modify/')\n", - "print(data)\n", - "process_data = data.filter(lambda x : x['nlsep_answ_correct'] != 'None',num_proc=17)\n", - "print(process_data)\n", - "dd = process_data.filter(lambda x: True if x['nlsep_label']!='None' else False,num_proc=17)\n", - "print(dd.shape[0]/data.shape[0]*100)\n", - "print(dd.shape[0]/process_data.shape[0]*100)\n", - "true = dd.filter(lambda x : True if x['nlsep_label']==str(bool(x['label'])) else False,num_proc=17)\n", - "print(true.shape[0]/process_data.shape[0]*100)\n", - "full = data.filter(lambda x : True if x['nlsep_label']==str(bool(x['label'])) else False,num_proc=17)\n", - "print(full.shape[0]/data.shape[0]*100)\n" + "df[df['tournament'] == 'pga championship']['wins'].values[0] == 0" ] }, { "cell_type": "code", - "execution_count": 329, - "id": "ecf76bba-e2ea-4c7a-be4e-946cda61935c", + "execution_count": 179, + "id": "6314c2b0-9e91-4324-8d4f-a616af6fe67c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct'],\n", - " num_rows: 2798\n", - "})" + "0" ] }, - "execution_count": 329, + "execution_count": 179, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "true = dd.filter(lambda x : True if x['nlsep_label']==str(bool(x['label'])) else False,num_proc=17)\n" + "paul emerick do not have the greatest number of tries out of the 9 total player" ] }, { "cell_type": "code", - "execution_count": 335, - "id": "d8c9edfc-6842-413b-9a5d-7f755f7f990a", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'semtab_answ', 'semtab_label', 'semtab_answ_correct'],\n", - " num_rows: 12779\n", - "})\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 25449.74 examples/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'semtab_answ', 'semtab_label', 'semtab_answ_correct'],\n", - " num_rows: 2727\n", - "})\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Filter (num_proc=17): 100%|██████████| 2727/2727 [00:00<00:00, 5528.78 examples/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "21.339697941935988\n", - "100.0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Filter (num_proc=17): 100%|██████████| 2727/2727 [00:00<00:00, 5716.06 examples/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "54.49211587825449\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 25739.32 examples/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "51.85069254245246\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" - ] + "execution_count": 167, + "id": "ac823823-df98-4273-a22f-afcbef9ab836", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "np.True_" + ] + }, + "execution_count": 167, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "data = load_from_disk('tab_fact_test_xml_semtab_new_correct_modify/')\n", - "print(data)\n", - "process_data = data.filter(lambda x : x['semtab_answ_correct'] != 'None',num_proc=17)\n", - "print(process_data)\n", - "dd = process_data.filter(lambda x: True if x['semtab_label']!='None' else False,num_proc=17)\n", - "print(dd.shape[0]/data.shape[0]*100)\n", - "print(dd.shape[0]/process_data.shape[0]*100)\n", - "true = dd.filter(lambda x : True if x['semtab_label']==str(bool(x['label'])) else False,num_proc=17)\n", - "print(true.shape[0]/process_data.shape[0]*100)\n", - "full = data.filter(lambda x : True if x['semtab_label']==str(bool(x['label'])) else False,num_proc=17)\n", - "print(full.shape[0]/data.shape[0]*100)\n" + "df[df['tournament'] == 'us open']['top - 10'].values[0] > 0 and df[df['tournament'] == 'us open']['cuts made'].values[0] > 0" ] }, { "cell_type": "code", - "execution_count": 327, - "id": "56fb6f59-7181-4b18-b423-6a9fbc2db338", + "execution_count": 169, + "id": "97b7d559-d4a4-47df-ab2f-ccc446051ea3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'tournament object\\nwins int64\\ntop - 5 int64\\ntop - 10 int64\\ntop - 25 int64\\nevents int64\\ncuts made int64'" + "0" ] }, - "execution_count": 327, + "execution_count": 169, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df_info" + "fail['label'][1]" ] }, { "cell_type": "code", - "execution_count": 336, - "id": "ad7ab9cb-d6ee-4d00-8598-faee3c5b46f6", + "execution_count": 175, + "id": "21af7a14-3063-426d-894e-7456d5c544c9", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'semtab_answ', 'semtab_label', 'semtab_answ_correct'],\n", - " num_rows: 12779\n", - "})\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 25729.94 examples/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'semtab_answ', 'semtab_label', 'semtab_answ_correct'],\n", - " num_rows: 2876\n", - "})\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Filter (num_proc=17): 100%|██████████| 2876/2876 [00:00<00:00, 5600.28 examples/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "22.50567337037327\n", - "100.0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Filter (num_proc=17): 100%|██████████| 2876/2876 [00:00<00:00, 5845.32 examples/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "54.24200278164116\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 26336.59 examples/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "52.81320917129666\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" - ] + "data": { + "text/plain": [ + "np.False_" + ] + }, + "execution_count": 175, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "data = load_from_disk('tab_fact_test_xml_semtab_new_correct_modify_add_info/')\n", - "print(data)\n", - "process_data = data.filter(lambda x : x['semtab_answ_correct'] != 'None',num_proc=17)\n", - "print(process_data)\n", - "dd = process_data.filter(lambda x: True if x['semtab_label']!='None' else False,num_proc=17)\n", - "print(dd.shape[0]/data.shape[0]*100)\n", - "print(dd.shape[0]/process_data.shape[0]*100)\n", - "true = dd.filter(lambda x : True if x['semtab_label']==str(bool(x['label'])) else False,num_proc=17)\n", - "print(true.shape[0]/process_data.shape[0]*100)\n", - "full = data.filter(lambda x : True if x['semtab_label']==str(bool(x['label'])) else False,num_proc=17)\n", - "print(full.shape[0]/data.shape[0]*100)" + "df.loc[df['player'] == 'paul emerick', 'tries'].values[0] == df['tries'].max()" ] }, { "cell_type": "code", - "execution_count": 337, - "id": "1ead2964-6306-458c-adcf-ccf9016f58a9", + "execution_count": 177, + "id": "5c3ee54e-87e5-40c7-8f65-96d7133d7657", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct'],\n", - " num_rows: 12779\n", - "})\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 25537.02 examples/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct'],\n", - " num_rows: 2747\n", - "})\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Filter (num_proc=17): 100%|██████████| 2747/2747 [00:00<00:00, 5446.84 examples/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "21.496204710853746\n", - "100.0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Filter (num_proc=17): 100%|██████████| 2747/2747 [00:00<00:00, 5683.92 examples/s]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "58.79140880961048\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 26767.75 examples/s]" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "54.229595430002355\n" - ] - }, + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 177, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fail['label'][2]" + ] + }, + { + "cell_type": "code", + "execution_count": 186, + "id": "a29fd397-5701-476b-a14e-cd58f8ad9a92", + "metadata": {}, + "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "\n" - ] + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 186, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "data = load_from_disk('tab_fact_test_xml_nlsep_new_correct_modify_noadd_info/')\n", - "print(data)\n", - "process_data = data.filter(lambda x : x['nlsep_answ_correct'] != 'None',num_proc=17)\n", - "print(process_data)\n", - "dd = process_data.filter(lambda x: True if x['nlsep_label']!='None' else False,num_proc=17)\n", - "print(dd.shape[0]/data.shape[0]*100)\n", - "print(dd.shape[0]/process_data.shape[0]*100)\n", - "true = dd.filter(lambda x : True if x['nlsep_label']==str(bool(x['label'])) else False,num_proc=17)\n", - "print(true.shape[0]/process_data.shape[0]*100)\n", - "full = data.filter(lambda x : True if x['nlsep_label']==str(bool(x['label'])) else False,num_proc=17)\n", - "print(full.shape[0]/data.shape[0]*100)" + "df[df['company'].isin(['taj madras air catering limited', 'mas cater (sarawak) sdn bhd'])].shape[0] == 2" ] }, { "cell_type": "code", - "execution_count": 340, - "id": "e59bc21d-56ae-4a93-b8e4-9da74c2ed256", + "execution_count": 187, + "id": "129bb0a3-b516-4dbf-89d1-5ba9e5a477bc", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - " tournament wins top - 5 top - 10 top - 25 events cuts made\n", - "0 masters tournament 0 1 2 4 4 4\n", - "1 us open 0 2 3 4 6 5\n", - "2 the open championship 1 2 2 2 3 3\n", - "3 pga championship 0 0 1 2 5 4\n", - "4 totals 1 5 8 12 18 16\n" - ] + "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", + "
companytypeprincipal activitiesincorporated ingroup 's equity shareholding
9taj madras air catering limitedassociatecateringindia20%
\n", + "
" + ], + "text/plain": [ + " company type principal activities \\\n", + "9 taj madras air catering limited associate catering \n", + "\n", + " incorporated in group 's equity shareholding \n", + "9 india 20% " + ] + }, + "execution_count": 187, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print(df.to_string())" + "df[df['company'].isin(['taj madras air catering limited', 'mas cater (sarawak) sdn bhd'])]" ] }, { "cell_type": "code", - "execution_count": 341, - "id": "67859f43-22fb-45d9-a140-ac54376e47d5", + "execution_count": 207, + "id": "4bd70532-aa6b-454b-842a-2aa9e4ec3df7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'nlsep_answ', 'nlsep_label', 'nlsep_answ_correct'],\n", - " num_rows: 12779\n", - "})" + "Series([], Name: principal activities, dtype: object)" ] }, - "execution_count": 341, + "execution_count": 207, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "data" + "df[df['company']=='firefly sdn bhd']['principal activities'].to_list()[0]" ] }, { "cell_type": "code", - "execution_count": 342, - "id": "753d3b4d-cf73-4188-be81-a2776e0f42b9", + "execution_count": 198, + "id": "a32ca775-597d-442b-bc67-210ae2b1aae0", "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", + " \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", + "
companytypeprincipal activitiesincorporated ingroup 's equity shareholding
0malaysia airlines cargo sdn bhdsubsidiarycargomalaysia100%
1ge engine services malaysiajoint ventureengine overhaulmalaysia30%
2maswings sdn bhdsubsidiaryairlinemalaysia100%
3firefly sdn bhdsubsidiaryairlinemalaysia100%
4mas aerotechnologies sdn bhdsubsidiarymromalaysia100%
5mas golden holidays sdn bhdsubsidiarytour operatormalaysia100%
6malaysian aerospace engineering sdn bhdsubsidiaryengineeringmalaysia100%
7mas academy sdn bhdsubsidiaryflight schoolmalaysia100%
8abacus distribution systems (malaysia) sdn bhdsubsidiarycomputer reservation systemmalaysia80%
9taj madras air catering limitedassociatecateringindia20%
10mas catering (sarawak) sdn bhdsubsidiarycateringmalaysia60%
11lsg sky chefsassociateholding companymalaysia30%
\n", + "
" + ], "text/plain": [ - "'tony lema be in the top 5 for the master tournament , the us open , and the open championship'" + " company type \\\n", + "0 malaysia airlines cargo sdn bhd subsidiary \n", + "1 ge engine services malaysia joint venture \n", + "2 maswings sdn bhd subsidiary \n", + "3 firefly sdn bhd subsidiary \n", + "4 mas aerotechnologies sdn bhd subsidiary \n", + "5 mas golden holidays sdn bhd subsidiary \n", + "6 malaysian aerospace engineering sdn bhd subsidiary \n", + "7 mas academy sdn bhd subsidiary \n", + "8 abacus distribution systems (malaysia) sdn bhd subsidiary \n", + "9 taj madras air catering limited associate \n", + "10 mas catering (sarawak) sdn bhd subsidiary \n", + "11 lsg sky chefs associate \n", + "\n", + " principal activities incorporated in group 's equity shareholding \n", + "0 cargo malaysia 100% \n", + "1 engine overhaul malaysia 30% \n", + "2 airline malaysia 100% \n", + "3 airline malaysia 100% \n", + "4 mro malaysia 100% \n", + "5 tour operator malaysia 100% \n", + "6 engineering malaysia 100% \n", + "7 flight school malaysia 100% \n", + "8 computer reservation system malaysia 80% \n", + "9 catering india 20% \n", + "10 catering malaysia 60% \n", + "11 holding company malaysia 30% " ] }, - "execution_count": 342, + "execution_count": 198, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "data[0]['statement']" - ] + "source": [] }, { "cell_type": "code", - "execution_count": 343, - "id": "0aa35393-c5e8-4d63-bfbf-b047d7bb7b21", + "execution_count": null, + "id": "5a8b36ee-0e6b-424c-ae18-b84899357f43", "metadata": {}, "outputs": [], "source": [ - "import yaml\n", - "def load_config(config_file_path):\n", - " with open(config_file_path, 'r') as stream:\n", - " try:\n", - " # Use safe_load for security\n", - " config = yaml.safe_load(stream)\n", - " return config\n", - " except yaml.YAMLError as exc:\n", - " print(exc)\n", - " " + "\n" ] }, { "cell_type": "code", - "execution_count": 344, - "id": "e6eec661-04e8-4f84-a16a-a5cba91ccbea", + "execution_count": 311, + "id": "c5f38c7f-8ebd-4897-a66d-9d9d2e454984", "metadata": {}, "outputs": [], "source": [ - " config_data = load_config('convert_config.yaml')" + "# nlsep на репанда промпте на лора репанда\n", + "data = load_from_disk(\"tab_fact_test_nlsep_repanda\")" ] }, { "cell_type": "code", - "execution_count": 347, - "id": "f46cb4df-5f27-4dd2-944d-6e12ac08f4ea", + "execution_count": 313, + "id": "49311dcf-f36d-4874-ba32-d5cd5031e72b", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dict_keys(['semtab_xml_elements'])" - ] - }, - "execution_count": 347, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "\n", - "config_data.keys()\n" + "config = load_config('semtab_xml_config_answer_local_model.yaml')\n", + "tests = list(config.keys())\n", + "tests = ['nlsep']" ] }, { "cell_type": "code", - "execution_count": 349, - "id": "2a9239e1-4209-40cf-b793-c91cbdf52708", + "execution_count": 314, + "id": "72f5bc0f-53f3-4040-a9e5-b22cd4f5de34", "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "bool" - ] - }, - "execution_count": 349, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "nlsep\n", + "Процент корректируемых ответов 2.598012364034745\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=17): 100%|██████████| 332/332 [00:00<00:00, 419.55 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "успешно скорректированные отноосительно корректируемых 60.24096385542169\n", + "выполнимость 91.97902809296502\n", + "коректность вывыполняемых 66.91339118597924\n", + "61.54628687690743\n", + "different 0.0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] } ], "source": [ - "type(config_data['semtab_xml_elements']['include_data_types'])" + "acc_old = None\n", + "for test in tests:\n", + " print(test)\n", + " process_data = data.filter(lambda x : x[f'{test}_answ_correct'] != 'None',num_proc=17)\n", + " dd = data.filter(lambda x: True if x[f'{test}_label']!='None' else False,num_proc=17)\n", + " print('Процент корректируемых ответов',process_data.shape[0]/data.shape[0]*100)\n", + " cor = process_data.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " print('успешно скорректированные отноосительно корректируемых ',cor.shape[0]/process_data.shape[0]*100)\n", + " print('выполнимость',dd.shape[0]/data.shape[0]*100)\n", + " true = dd.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " print('коректность вывыполняемых ',true.shape[0]/dd.shape[0]*100)\n", + " full = data.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " acc = full.shape[0]/data.shape[0]*100\n", + " print(acc)\n", + " if acc_old == None:\n", + " acc_old = acc\n", + " print('different',acc-acc_old)\n", + " acc_old = acc" ] }, { "cell_type": "code", - "execution_count": 356, - "id": "3784daff-54d5-4234-86b5-bdc4b1f4c943", + "execution_count": null, + "id": "05ac4556-4339-4c8a-b686-751342e7a0cb", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 241, + "id": "fded5d65-acc5-452a-be2a-43846b3bcbc2", "metadata": {}, "outputs": [], "source": [ - "data = load_from_disk('tab_fact_test_universal2')" + "# semtab на новом промпте на лора репанда\n", + "data = load_from_disk(\"tab_fact_test_semtab_xml_repanda_new_prompt\")" ] }, { "cell_type": "code", - "execution_count": 357, - "id": "7a01aea4-3e86-48df-ad02-bee45e73411a", + "execution_count": 298, + "id": "602fa2e3-8c5e-4153-906d-975bb7001895", "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_exampples_description_top1_tresh50', 'semtab_xml_elements_description_top1_tresh50'],\n", - " num_rows: 12779\n", - "})" - ] - }, - "execution_count": 357, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 16683.90 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 17078.77 examples/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Процент корректируемых ответов 0.8373112137099928\n", + "выполнимость 95.38305031692622\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=17): 100%|██████████| 12189/12189 [00:00<00:00, 15142.43 examples/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "коректность вывыполняемых 84.02658134383461\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 16124.81 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 15724.00 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 12672/12672 [00:00<00:00, 15603.24 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Общая точность 80.14711636278268\n", + "точность без учета коррекции 79.58369199467877\n", + "different 0.0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] } ], "source": [ - "data" + "get_accuracy('tab_fact_test_semtab_xml_repanda_new_prompt','semtab_xml_config_answer_local_model.yaml')" ] }, { "cell_type": "code", - "execution_count": 358, - "id": "60933c47-395d-46fd-bd51-ef8f589e71f4", + "execution_count": 237, + "id": "9114e780-996c-4438-abda-683884ccc133", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'
1989 u.s. open (golf)
placeplayercountryscoreto parmoney
'" + "['semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50']" ] }, - "execution_count": 358, + "execution_count": 237, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "data[50]['semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50']" - ] - }, - { - "cell_type": "code", - "execution_count": 360, - "id": "ea879a46-97b4-4905-9c85-f90bf7fe89ad", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'space_answ', 'space_label', 'space_answ_correct'],\n", - " num_rows: 12779\n", - "})\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 25156.65 examples/s]\n" - ] - }, + "source": [ + "config = load_config('semtab_xml_config_answer_local_model.yaml')\n", + "tests = list(config.keys())\n", + "tests" + ] + }, + { + "cell_type": "code", + "execution_count": 238, + "id": "5000b037-a7eb-4ae4-878a-d6ad513c3c90", + "metadata": {}, + "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'nlsep_query', 'semtab_query', 'space_answ', 'space_label', 'space_answ_correct'],\n", - " num_rows: 3026\n", - "})\n" + "semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Filter (num_proc=17): 100%|██████████| 3026/3026 [00:00<00:00, 5870.48 examples/s]\n" + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 16677.02 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 16781.58 examples/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "23.679474137256438\n", - "100.0\n" + "Процент корректируемых ответов 0.8373112137099928\n", + "выполнимость 95.38305031692622\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Filter (num_proc=17): 100%|██████████| 3026/3026 [00:00<00:00, 5859.72 examples/s]\n" + "Filter (num_proc=17): 100%|██████████| 12189/12189 [00:00<00:00, 15716.78 examples/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "56.2128222075347\n" + "коректность вывыполняемых 84.02658134383461\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 24946.84 examples/s]" + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 16804.89 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "53.28272947804993\n" + "80.14711636278268\n", + "different 0.0\n" ] }, { @@ -18171,115 +29348,164 @@ } ], "source": [ - "data = load_from_disk('tab_fact_test_xml_space_new_correct_modify_noadd_info/')\n", - "print(data)\n", - "process_data = data.filter(lambda x : x['space_answ_correct'] != 'None',num_proc=17)\n", - "print(process_data)\n", - "dd = process_data.filter(lambda x: True if x['space_label']!='None' else False,num_proc=17)\n", - "print(dd.shape[0]/data.shape[0]*100)\n", - "print(dd.shape[0]/process_data.shape[0]*100)\n", - "true = dd.filter(lambda x : True if x['space_label']==str(bool(x['label'])) else False,num_proc=17)\n", - "print(true.shape[0]/process_data.shape[0]*100)\n", - "full = data.filter(lambda x : True if x['space_label']==str(bool(x['label'])) else False,num_proc=17)\n", - "print(full.shape[0]/data.shape[0]*100)" + "acc_old = None\n", + "for test in tests:\n", + " print(test)\n", + " process_data = data.filter(lambda x : x[f'{test}_answ_correct'] != 'None',num_proc=17)\n", + " dd = data.filter(lambda x: True if x[f'{test}_label']!='None' else False,num_proc=17)\n", + " print('Процент корректируемых ответов',process_data.shape[0]/data.shape[0]*100)\n", + "\n", + " print('выполнимость',dd.shape[0]/data.shape[0]*100)\n", + " true = dd.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " print('коректность вывыполняемых ',true.shape[0]/dd.shape[0]*100)\n", + " full = data.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " acc = full.shape[0]/data.shape[0]*100\n", + " print(acc)\n", + " if acc_old == None:\n", + " acc_old = acc\n", + " print('different',acc-acc_old)\n", + " acc_old = acc" ] }, { "cell_type": "code", - "execution_count": 361, - "id": "425d327f-2b6b-4261-b86b-27f92f4ba9d3", + "execution_count": 325, + "id": "ce351633-8906-4181-b20d-051e156f1f75", "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'tab_fact_test_semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_new_correct_modify_noadd_info' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[361], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mtab_fact_test_semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_new_correct_modify_noadd_info\u001b[49m\n", - "\u001b[0;31mNameError\u001b[0m: name 'tab_fact_test_semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_new_correct_modify_noadd_info' is not defined" - ] - } - ], + "outputs": [], "source": [ - "tab_fact_test_semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_new_correct_modify_noadd_info\n" + "def get_accuracy(data_path,conf_path,tests = None):\n", + " data = load_from_disk(data_path)\n", + " config = load_config(conf_path)\n", + " tests = list(config.keys()) if tests==None else tests\n", + " acc_old = None\n", + " for test in tests:\n", + " print(test)\n", + " process_data = data.filter(lambda x : x[f'{test}_answ_correct'] != 'None',num_proc=17)\n", + " dd = data.filter(lambda x: True if x[f'{test}_label']!='None' else False,num_proc=17)\n", + " print('Процент корректируемых ответов',process_data.shape[0]/data.shape[0]*100)\n", + " cor = process_data.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " print('успешно скорректированные отноосительно корректируемых ',cor.shape[0]/process_data.shape[0]*100)\n", + " print('выполнимость',dd.shape[0]/data.shape[0]*100)\n", + " true = dd.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " print('коректность вывыполняемых ',true.shape[0]/dd.shape[0]*100)\n", + " full = data.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " acc = full.shape[0]/data.shape[0]*100\n", + " without_corr = data.filter(lambda x : x[f'{test}_answ_correct'] == 'None',num_proc=17)\n", + " full_wo_corr = without_corr.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " print('Общая точность',acc)\n", + " print('точность без учета коррекции',full_wo_corr.shape[0]/data.shape[0]*100)\n", + " if acc_old == None:\n", + " acc_old = acc\n", + " print('different',acc-acc_old)\n", + " acc_old = acc" ] }, { "cell_type": "code", - "execution_count": 362, - "id": "d08dd679-0914-43b8-b7a0-b4bc84b53acb", + "execution_count": 326, + "id": "79dc96e7-8425-466e-935c-d5df04b11105", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_exampples_description_top1_tresh50', 'semtab_xml_elements_description_top1_tresh50', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_answ', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_label', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_answ_correct'],\n", - " num_rows: 12779\n", - "})\n" + "nlsep\n", + "Процент корректируемых ответов 2.3084748415368965\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 25331.21 examples/s]\n" + "Filter (num_proc=17): 100%|██████████| 295/295 [00:00<00:00, 361.37 examples/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_exampples_description_top1_tresh50', 'semtab_xml_elements_description_top1_tresh50', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_answ', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_label', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_answ_correct'],\n", - " num_rows: 2399\n", - "})\n" + "успешно скорректированные отноосительно корректируемых 65.76271186440678\n", + "выполнимость 90.67219657250176\n", + "коректность вывыполняемых 79.70138948821955\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Filter (num_proc=17): 100%|██████████| 2399/2399 [00:00<00:00, 4543.86 examples/s]\n" + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 16685.23 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 12484/12484 [00:00<00:00, 16093.89 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "18.772986931684795\n", - "100.0\n" + "Общая точность 72.26700054777369\n", + "точность без учета коррекции 70.74888488927145\n", + "different 0.0\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Filter (num_proc=17): 100%|██████████| 2399/2399 [00:00<00:00, 4636.70 examples/s]\n" + "\n" + ] + } + ], + "source": [ + "# nlsep для нового промпта с обученным лора репанда\n", + "get_accuracy('tab_fact_test_nlsep_repanda_new_prompt','semtab_xml_config_answer_local_model.yaml',tests=['nlsep'])" + ] + }, + { + "cell_type": "code", + "execution_count": 327, + "id": "31b57081-7b3a-4913-b685-a8a9d40dba2d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "nlsep\n", + "Процент корректируемых ответов 11.049377885593552\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=17): 100%|██████████| 1412/1412 [00:00<00:00, 1851.48 examples/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "54.18924551896623\n" + "успешно скорректированные отноосительно корректируемых 52.903682719546744\n", + "выполнимость 72.5174113780421\n", + "коректность вывыполняемых 68.39322326535017\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 24993.23 examples/s]" + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 17269.13 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 11367/11367 [00:00<00:00, 13888.04 examples/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "53.86180452304562\n" + "Общая точность 49.59699507003678\n", + "точность без учета коррекции 43.751467250958605\n", + "different 0.0\n" ] }, { @@ -18291,164 +29517,255 @@ } ], "source": [ - "data = load_from_disk('tab_fact_test_semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_new_correct_modify_noadd_info/')\n", - "print(data)\n", - "process_data = data.filter(lambda x : x['semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_answ_correct'] != 'None',num_proc=17)\n", - "print(process_data)\n", - "dd = process_data.filter(lambda x: True if x['semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_label']!='None' else False,num_proc=17)\n", - "print(dd.shape[0]/data.shape[0]*100)\n", - "print(dd.shape[0]/process_data.shape[0]*100)\n", - "true = dd.filter(lambda x : True if x['semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_label']==str(bool(x['label'])) else False,num_proc=17)\n", - "print(true.shape[0]/process_data.shape[0]*100)\n", - "full = data.filter(lambda x : True if x['semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50_label']==str(bool(x['label'])) else False,num_proc=17)\n", - "print(full.shape[0]/data.shape[0]*100)" + "#nlsep с новым промптом на репанда direct\n", + "get_accuracy('tab_fact_test_nlsep_repanda_new_prompt_direct','semtab_xml_config_answer_local_model.yaml',tests=['nlsep'])" ] }, { - "cell_type": "markdown", - "id": "0c38f01c-bf07-4ed3-9ff7-b3e109a164b4", + "cell_type": "code", + "execution_count": 308, + "id": "c66e3606-5552-4e31-abb5-c0ceae406d0a", "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50\n", + "Процент корректируемых ответов 3.6935597464590346\n", + "успешно скорректированные отноосительно корректируемых 54.66101694915254\n", + "выполнимость 96.31426559198685\n", + "коректность вывыполняемых 80.30549236269093\n", + "Общая точность 77.34564519915487\n", + "точность без учета коррекции 75.32670788011582\n", + "different 0.0\n" + ] + } + ], "source": [ - "| Method | Accuracy |\n", - "|---------------------|:--------:|\n", - "| semtab xml elements | 51.85 |\n", - "| semtab html | 53.86 |\n", - "| space | 53.28 |\n", - "| nlsep | 54.23 |" + "#semtab с новым промптом на репанда direct\n", + "get_accuracy('tab_fact_test_semtab_xml_repanda_new_prompt_direct','semtab_xml_config_answer_local_model.yaml')" ] }, { "cell_type": "code", - "execution_count": null, - "id": "c3717b76-9c07-422f-84e9-484ea55d1e08", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 364, - "id": "2207705b-8237-4864-8e30-ba1f4b11b97a", + "execution_count": 309, + "id": "ea550cd4-2d42-4fd6-b3e1-18c5787a421b", "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "'| | tournament | wins | top - 5 | top - 10 | top - 25 | events | cuts made |\\n|---:|:----------------------|-------:|----------:|-----------:|-----------:|---------:|------------:|\\n| 0 | masters tournament | 0 | 1 | 2 | 4 | 4 | 4 |\\n| 1 | us open | 0 | 2 | 3 | 4 | 6 | 5 |\\n| 2 | the open championship | 1 | 2 | 2 | 2 | 3 | 3 |\\n| 3 | pga championship | 0 | 0 | 1 | 2 | 5 | 4 |\\n| 4 | totals | 1 | 5 | 8 | 12 | 18 | 16 |'" - ] - }, - "execution_count": 364, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50\n", + "Процент корректируемых ответов 0.7590578292511151\n", + "успешно скорректированные отноосительно корректируемых 70.10309278350515\n", + "выполнимость 95.28914625557555\n", + "коректность вывыполняемых 83.953354685062\n", + "Общая точность 79.99843493231083\n", + "точность без учета коррекции 79.46631191799045\n", + "different 0.0\n" + ] } ], "source": [ - "df.to_markdown()" + "#semtab с новым промптом на репанда lora и новый промпт корекци\n", + "get_accuracy('tab_fact_test_semtab_xml_repanda_new_prompt2_direct/','semtab_xml_config_answer_local_model.yaml')" ] }, { "cell_type": "code", - "execution_count": null, - "id": "30941fab-ff71-43d4-885e-c2f481d3c5c7", + "execution_count": 310, + "id": "9a451a56-3c50-408d-9294-37f93924eb3e", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50\n", + "Процент корректируемых ответов 0.7590578292511151\n", + "успешно скорректированные отноосительно корректируемых 70.10309278350515\n", + "выполнимость 95.28914625557555\n", + "коректность вывыполняемых 83.953354685062\n", + "Общая точность 79.99843493231083\n", + "точность без учета коррекции 79.46631191799045\n", + "different 0.0\n" + ] + } + ], "source": [ - "python abation_experiments.py --inputdata tab_fact_test_semtab_html_ablation_correcring --outputdata tab_fact_test_semtab_html_ablation_correcring --conf-file semtab_html_config_answer2.yaml --num_proc 16 > correct_tabfact_semtab_html_log2.txt" + "get_accuracy('tab_fact_test_semtab_xml_repanda_new_prompt2_direct','semtab_xml_config_answer_local_model.yaml')" ] }, { "cell_type": "code", - "execution_count": 365, - "id": "4ecbd443-738c-43d9-ac41-43294253f388", + "execution_count": null, + "id": "31b33520-9d44-477b-801b-2e91e6a68d2e", "metadata": {}, "outputs": [], "source": [ - "import torch\n" + "tab_fact_test_semtab_xml_repanda_new_prompt2_direct" ] }, { "cell_type": "code", - "execution_count": 367, - "id": "af179919-9224-4bf0-9a1d-7a48da554253", + "execution_count": 267, + "id": "5e41779c-e84a-4818-b9f6-160ec1eb0918", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'cuda'" + "{'id': 0,\n", + " 'table_csv': '2-1570274-4.html.csv',\n", + " 'table_text': 'tournament#wins#top - 5#top - 10#top - 25#events#cuts made\\nmasters tournament#0#1#2#4#4#4\\nus open#0#2#3#4#6#5\\nthe open championship#1#2#2#2#3#3\\npga championship#0#0#1#2#5#4\\ntotals#1#5#8#12#18#16\\n',\n", + " 'label': 1,\n", + " 'statement': 'tony lema be in the top 5 for the master tournament , the us open , and the open championship',\n", + " 'table_caption': 'tony lema',\n", + " 'nlsep_query': 'tony lema be in the top 5 for the master tournament , the us open , and the open championship col : tournament | wins | top - 5 | top - 10 | top - 25 | events | cuts made row 1 : masters tournament | 0 | 1 | 2 | 4 | 4 | 4 row 2 : us open | 0 | 2 | 3 | 4 | 6 | 5 row 3 : the open championship | 1 | 2 | 2 | 2 | 3 | 3 row 4 : pga championship | 0 | 0 | 1 | 2 | 5 | 4 row 5 : totals | 1 | 5 | 8 | 12 | 18 | 16',\n", + " 'semtab_query': 'tony lema be in the top 5 for the master tournament , the us open , and the open championship tony lema
tournamentcategory - 1.0\"str\"0[\"totals\", \"us open\", \"the open championship\"]
winsrank - 1.0\"int\"0[1, 0, 0]
top - 5rank - 1.0\"int\"0[2, 5, 1]
top - 10rank - 1.0\"int\"0[3, 2, 8]
top - 25rank - 0.99\"int\"0[4, 2, 12]
eventsduration - 0.73\"int\"0[5, 3, 4]
cuts maderank - 0.99\"int\"0[4, 3, 16]
',\n", + " 'semtab_answ': '```\\n{\"PANDA\": \"(df[\\'tournament\\'].isin([\\'master tournament\\', \\'us open\\', \\'the open championship\\']) & (df[\\'wins\\'] > 0) & (df[\\'top - 5\\'] <= 5) & (df[\\'top - 10\\'] <= 10) & (df[\\'top - 25\\'] <= 25) & (df[\\'events\\'] > 0) & (df[\\'cuts made\\'] > 0)).any()\"}\\n```\\nThis expression checks if Tony LeMa is in the top 5 for the master tournament, the us open, and the open championship and has won some wins, is in top 5, 10, and 25, made some events and cuts. If any of these conditions is true for Tony LeMa, the expression will return True.\\n',\n", + " 'semtab_label': 'True'}" ] }, - "execution_count": 367, + "execution_count": 267, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "str(torch.device('cuda'))\n" - ] - }, - { - "cell_type": "code", - "execution_count": 371, - "id": "d5614fd2-2a41-4317-9e2f-1a115a196648", - "metadata": {}, - "outputs": [], - "source": [ - "data = load_from_disk('tab_fact_test_semtab_html_ablation/')" + "data = load_from_disk('./tab_fact_test_xml_semtab/')\n", + "data[0]" ] }, { "cell_type": "code", - "execution_count": 372, - "id": "f5cc8e1c-efed-4fb6-9e11-a4a0297771fa", - "metadata": {}, + "execution_count": 265, + "id": "d795cca9-1322-4f3c-b8aa-d92023c5ab71", + "metadata": { + "scrolled": true + }, "outputs": [ { - "data": { - "text/plain": [ - "Dataset({\n", - " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_html_semantic_datatype_exampples3_description_top1_tresh50', 'semtab_html_datatype_exampples3_description_top1_tresh50', 'semtab_html_exampples3_description_top1_tresh50', 'semtab_html_description_top1_tresh50', 'semtab_html_top1_tresh50'],\n", - " num_rows: 12779\n", - "})" - ] - }, - "execution_count": 372, - "metadata": {}, - "output_type": "execute_result" + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 16309.45 examples/s]\n", + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 15770.07 examples/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "выполнимость 69.316847953674\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=17): 100%|██████████| 8858/8858 [00:00<00:00, 10899.14 examples/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "коректность вывыполняемых 58.624971776924816\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter (num_proc=17): 100%|██████████| 12779/12779 [00:00<00:00, 16535.25 examples/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "40.636982549495265\n", + "different -31.559589952265434\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] } ], "source": [ - "data\n" + "data = load_from_disk('./tab_fact_test_xml_semtab/')\n", + "\n", + "test = 'semtab'\n", + "dd = data.filter(lambda x: True if x[f'{test}_answ']!='None' else False,num_proc=17)\n", + "dd = dd.filter(lambda x: True if x[f'{test}_label']!='None' else False,num_proc=17)\n", + "print('выполнимость',dd.shape[0]/data.shape[0]*100)\n", + "true = dd.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + "print('коректность вывыполняемых ',true.shape[0]/dd.shape[0]*100)\n", + "full = data.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + "acc = full.shape[0]/data.shape[0]*100\n", + "print(acc)\n", + "if acc_old == None:\n", + " acc_old = acc\n", + "print('different',acc-acc_old)\n", + "acc_old = acc" ] }, { "cell_type": "code", - "execution_count": 374, - "id": "f968be8c-fd4a-4fab-90ae-9c3ed7b98324", + "execution_count": 329, + "id": "2cb82fe8-34ba-4651-abfa-11bdf87e5687", "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "'
tournamentwinstop - 5top - 10top - 25eventscuts made
'" - ] - }, - "execution_count": 374, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "выполнимость 66.68753423585571\n", + "коректность вывыполняемых 61.99249002581554\n", + "41.341263009625166\n", + "different -30.855309492135532\n" + ] } ], "source": [ - "data[0]['semtab_html_top1_tresh50']\n" + "data = load_from_disk('./tab_fact_test_xml_nlsep/')\n", + "test = 'nlsep'\n", + "dd = data.filter(lambda x: True if x[f'{test}_answ']!='None' else False,num_proc=17)\n", + "dd = dd.filter(lambda x: True if x[f'{test}_label']!='None' else False,num_proc=17)\n", + "print('выполнимость',dd.shape[0]/data.shape[0]*100)\n", + "true = dd.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + "print('коректность вывыполняемых ',true.shape[0]/dd.shape[0]*100)\n", + "full = data.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + "acc = full.shape[0]/data.shape[0]*100\n", + "print(acc)\n", + "if acc_old == None:\n", + " acc_old = acc\n", + "print('different',acc-acc_old)\n", + "acc_old = acc" ] }, { "cell_type": "code", "execution_count": null, - "id": "90c71978-7204-4c6c-9df2-7d5986f8f4fc", + "id": "e123c2c4-7394-4ea9-a81a-e412690fc4a4", "metadata": {}, "outputs": [], - "source": [] + "source": [ + "process_data = data.filter(lambda x : x[f'{test}_answ_correct'] != 'None',num_proc=17)\n", + " dd = data.filter(lambda x: True if x[f'{test}_label']!='None' else False,num_proc=17)\n", + " print('Процент корректируемых ответов',process_data.shape[0]/data.shape[0]*100)\n", + " cor = process_data.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " print('успешно скорректированные отноосительно корректируемых ',cor.shape[0]/process_data.shape[0]*100)\n", + "\n", + "\n" + ] } ], "metadata": { diff --git a/tests/panTabFact_zeroshot_deepseek_test-Copy1.py b/tests/panTabFact_zeroshot_deepseek_test-Copy1.py new file mode 100644 index 0000000..1506458 --- /dev/null +++ b/tests/panTabFact_zeroshot_deepseek_test-Copy1.py @@ -0,0 +1,137 @@ +from datasets import load_from_disk +from openai import OpenAI +import sys +import os +import json +import pandas as pd +from io import StringIO +from tqdm import tqdm +import time +from functools import partial +import re +import argparse + +# Добавляем корневую директорию проекта в sys.path +sys.path.append(os.path.dirname(os.path.abspath('/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/tests'))) +query_field = 'semtab' #'nlsep' #'semtab' +NUM_PROC = 2 +system_prompt = '''You are a Python expert specializing in pandas. Your task is to translate the +given natural language statement into a single-line pandas expression. This +expression must be valid and executable to verify the truth of the statement +using the provided table. Consider the following: +1. The table is represented as a pandas DataFrame named df. +2. Do not include explanations, comments, or multiline outputs. +3. Ensure the output is concise, correct, and when run outputs either True or +False, and strictly in the following Json Format with a single key "PANDA": +"PANDA": "" +''' + +def send_message(message,max_tokens=1000,top_p=0.9,temperature=0.5,server_url="http://127.0.0.1:8800/v1",api_key="dummy", + model_name='deepseek-ai/deepseek-coder-7b-instruct-v1.5',system_prompt='', stop = ["Observation:","\n\n\n\n","\n \n \n"]): + client = OpenAI(base_url=server_url, api_key=api_key) + model_input = [ + { 'role': 'system', 'content': system_prompt}, + { 'role': 'user', 'content': message} + ] + try: + print(f"Generating content with model: {model_name}",) + + response = client.chat.completions.create( + model=model_name, + messages=model_input, + temperature=temperature, + max_tokens=max_tokens, + top_p=top_p, + stop = stop + ) + + return True, response.choices[0].message.content + + except Exception as e: + print("Failed to call LLM: " + str(e)) + time.sleep(3) + if hasattr(e, 'response'): + error_info = e.response.json() + code_value = error_info['error']['code'] + else: + code_value = "context_length_exceeded" + print("Retrying ...") + return False, None + +def parse_panda_code(input_string): + """ + Парсит строку и извлекает код, который находится внутри конструкции "PANDA": <код> + Поддерживает различные форматы: JSON, простой текст, Markdown + + Args: + input_string (str): Входная строка для парсинга + + Returns: + str: Извлеченный код или пустая строка, если код не найден + """ + # Сначала попробуем найти JSON объект с PANDA + json_pattern = r'\{[^{}]*PANDA":\s*(.+?)(?:\n|$)?\}' + json_match = re.search(json_pattern, input_string, re.DOTALL) + code = None + pattern = r'"PANDA":\s*(.+?)(?:\n|$)' + if json_match: + code = json_match.group(1).strip() + else: + match = re.search(pattern, input_string, re.DOTALL) + if match: + # Извлекаем код и убираем лишние пробелы по краям + code = match.group(1).strip() + # Заменяем одинарные кавычки внутри строки для корректного парсинга JSON + + # Если JSON не найден или не распарсился, используем старый метод + # Паттерн для поиска кода после "PANDA": + # Ищет "PANDA": за которым следует пробел, затем код до конца строки или до следующего символа + if code != None: + # Убираем возможные кавычки вокруг кода + if code.startswith('"') and code.endswith('"'): + code = code[1:-1] + elif code.startswith("'") and code.endswith("'"): + code = code[1:-1] + + return code + + return "" +def dataset_processing(entry,query_field=None): + df = pd.read_csv(StringIO(entry['table_text']), delimiter='#') + success,response_sep = send_message(entry[f"{query_field}_query"], + system_prompt=system_prompt) + + entry[f'{query_field}_answ'] = 'None' + entry[f'{query_field}_label'] = 'None' + + if success: + entry[f'{query_field}_answ'] = response_sep + try: + pandas_eval = str(bool(eval(parse_panda_code(response_sep)))) + entry[f'{query_field}_label'] = str(pandas_eval) + except Exception as e: + print('EEEERRRRRRR', entry['id']) + print(e) + return entry +def main(): + parser = argparse.ArgumentParser(description='Скрипт с настраиваемыми параметрами') + parser.add_argument('--query-field', type=str, default='semtab', + choices=['semtab', 'nlsep','proto'], help='Тип query field') + parser.add_argument('--num-proc', type=int, default=2, + help='Количество процессов') + + args = parser.parse_args() + + query_field = args.query_field + NUM_PROC = args.num_proc + + print(f"query_field: {query_field}") + print(f"NUM_PROC: {NUM_PROC}") + + # Ваш основной код здесь + dataset = load_from_disk('none_filtered_new_dataset2/') + dataset2 = dataset.map(partial(dataset_processing,query_field=query_field),num_proc=NUM_PROC) + dataset2.save_to_disk(f'./answer_gen_{query_field}_none_filtered_new_dataset') + +if __name__ == "__main__": + main() diff --git a/tests/pan_tab_fact_format_tests.ipynb b/tests/pan_tab_fact_format_tests.ipynb index 141a071..ea44c53 100644 --- a/tests/pan_tab_fact_format_tests.ipynb +++ b/tests/pan_tab_fact_format_tests.ipynb @@ -61,336 +61,3423 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "id": "c6b57c9e-4bdc-42aa-b598-7d6b0c3cebfb", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", - " from .autonotebook import tqdm as notebook_tqdm\n" - ] - } - ], + "outputs": [], "source": [ - "from datasets import Dataset\n" + "from datasets import Dataset, load_from_disk\n" ] }, { "cell_type": "code", - "execution_count": 2, - "id": "45d5ea74-d286-4336-9b2f-f3af6efdbab8", + "execution_count": 55, + "id": "4f512056-3a29-4fe1-b673-3fd2163e93de", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Dataset({\n", - " features: ['id', 'statement', 'label', 'table_caption', 'table_text', 'pandas_code', 'pandas_eval'],\n", - " num_rows: 88223\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_exampples_description_top1_tresh50', 'semtab_xml_attributes_description_top1_tresh50', 'semtab_xml_attributes_top1_tresh50', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_exampples_description_top1_tresh50', 'semtab_xml_elements_description_top1_tresh50', 'semtab_xml_elements_top1_tresh50'],\n", + " num_rows: 12779\n", "})" ] }, - "execution_count": 2, + "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "dataset = Dataset.from_json(\"../datasets/PanTabFact/PanTabFact.json\")\n", - "dataset" + "d = load_from_disk('tab_fact_test_semtab_xml_ablation')\n", + "d" ] }, { "cell_type": "code", - "execution_count": 3, - "id": "3787edc0-bdef-48d1-9315-cdeb915d8311", + "execution_count": 56, + "id": "ad3d136e-9d49-4620-acab-c26c8f46539b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{'id': 0,\n", - " 'statement': 'haroldo be mention as a brazil scorer for 2 different game',\n", - " 'label': 1,\n", - " 'table_caption': '1919 in brazilian football',\n", - " 'table_text': 'date#result#score#brazil scorers#competition\\nmay 11 , 1919#w#6 - 0#friedenreich (3) , neco (2) , haroldo#south american championship\\nmay 18 , 1919#w#3 - 1#heitor , amílcar , millon#south american championship\\nmay 26 , 1919#d#2 - 2#neco (2)#south american championship\\nmay 29 , 1919#w#1 - 0#friedenreich#south american championship\\njune 1 , 1919#d#3 - 3#haroldo , arlindo (2)#taça roberto cherry\\n',\n", - " 'pandas_code': \"df['brazil scorers'].apply(lambda x: 'haroldo' in x).sum() == 2\",\n", - " 'pandas_eval': 'True'}" + "'
'" ] }, - "execution_count": 3, + "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "dataset[0]" + "d[0]['semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50']" ] }, { "cell_type": "code", - "execution_count": 3, - "id": "92944a5c-bb79-4de8-8c62-9c395f688bac", + "execution_count": 183, + "id": "b9131395-db92-49e7-886c-11c759043c34", "metadata": {}, - "outputs": [], - "source": [ - "import json\n", - "import pandas as pd\n", - "from io import StringIO\n", - "from tqdm import tqdm" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "75043b39-f372-4402-9128-b56caa8f263d", - "metadata": { - "scrolled": true - }, "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - " 0%| | 0/88223 [00:00:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", - " 0%| | 80/88223 [00:00<01:51, 792.40it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", - ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", - " 0%| | 160/88223 [00:00<01:58, 745.82it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", - " 0%| | 309/88223 [00:00<02:01, 725.02it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", - " 1%| | 463/88223 [00:00<02:01, 722.39it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", - " 1%| | 537/88223 [00:00<02:00, 725.92it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", - ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", - " 1%| | 611/88223 [00:00<02:00, 729.31it/s]:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", - " 1%| | 925/88223 [00:01<01:54, 760.37it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", - " 1%|▏ | 1160/88223 [00:01<01:54, 758.65it/s]:1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", - ":1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", - " 2%|▏ | 1394/88223 [00:01<01:54, 760.10it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", - ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", - " 2%|▏ | 1471/88223 [00:01<01:54, 757.35it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", - ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", - " 2%|▏ | 1622/88223 [00:02<01:56, 745.63it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", - " 2%|▏ | 2033/88223 [00:02<01:49, 790.01it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", - " 2%|▏ | 2113/88223 [00:02<01:48, 791.44it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", - " 3%|▎ | 2272/88223 [00:02<01:49, 782.61it/s]:1: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", - " 3%|▎ | 2343/88223 [00:03<01:53, 755.35it/s]\n", - "\n", - "KeyboardInterrupt\n", - "\n" - ] + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_html_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_exampples_description_top1_tresh50', 'semtab_xml_elements_description_top1_tresh50'],\n", + " num_rows: 12779\n", + "})" + ] + }, + "execution_count": 183, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "corrects = 0\n", - "total = 0\n", - "\n", - "\n", - "# Validate entries\n", - "count = 0\n", - "for entry in tqdm(dataset):\n", - " count += 1\n", - " total += 1\n", - " df = pd.read_csv(StringIO(entry['table_text']), delimiter='#')\n", - " pandas_eval = str(bool(eval(entry['pandas_code'])))\n", - " if str(bool(entry['label'])) == str(pandas_eval):\n", - " corrects += 1\n", - "\n", - "print(corrects, total, corrects / total)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fea0cca3-4aa4-4f32-be60-9b8f9f254281", - "metadata": {}, - "outputs": [], - "source": [ - "print(corrects, total, corrects / total)" + "d2 = load_from_disk('tab_fact_test_universal2/')\n", + "d2\n" ] }, { "cell_type": "code", - "execution_count": 18, - "id": "9aa9bff2-1d28-49df-8581-8af3813a2b6b", + "execution_count": 64, + "id": "4f6f9227-ca54-42c1-ba49-78088fa95752", "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Filter (num_proc=17): 100%|██████████| 88223/88223 [00:00<00:00, 165513.29 examples/s]\n" - ] - }, { "data": { "text/plain": [ "Dataset({\n", - " features: ['id', 'statement', 'label', 'table_caption', 'table_text', 'pandas_code', 'pandas_eval'],\n", - " num_rows: 88223\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_exampples_description_top1_tresh50', 'semtab_xml_attributes_description_top1_tresh50', 'semtab_xml_attributes_top1_tresh50', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_exampples_description_top1_tresh50', 'semtab_xml_elements_description_top1_tresh50', 'semtab_xml_elements_top1_tresh50', 'semtab_xml_attributes_top1_tresh50_answ', 'semtab_xml_attributes_top1_tresh50_label', 'semtab_xml_attributes_top1_tresh50_answ_correct', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50_answ', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50_label', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50_answ_correct', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50_answ', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50_label', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50_answ_correct', 'semtab_xml_elements_exampples_description_top1_tresh50_answ', 'semtab_xml_elements_exampples_description_top1_tresh50_label', 'semtab_xml_elements_exampples_description_top1_tresh50_answ_correct', 'semtab_xml_elements_description_top1_tresh50_answ', 'semtab_xml_elements_description_top1_tresh50_label', 'semtab_xml_elements_description_top1_tresh50_answ_correct', 'semtab_xml_elements_top1_tresh50_answ', 'semtab_xml_elements_top1_tresh50_label', 'semtab_xml_elements_top1_tresh50_answ_correct', '__index_level_0__'],\n", + " num_rows: 1695\n", "})" ] }, - "execution_count": 18, + "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "dataset.filter(lambda x: True if eval(x['pandas_eval'])==bool(x['label']) else False, num_proc=17)" - ] - }, - { - "cell_type": "code", - "execution_count": 105, - "id": "bdc341e2-c331-4bef-b045-56aa812719ad", - "metadata": {}, - "outputs": [], - "source": [ - "def serialize_table_to_tapex_format(df):\n", - " head_pattern = \" col : \"\n", - " row_pattern = \" row {num} : \"\n", - " coll_delimetr = \" | \"\n", - " \n", - " lin_table = head_pattern+coll_delimetr.join(df.columns)\n", - " for i,row in df.iterrows():\n", - " #print(row_pattern.format(num=i+1))\n", - " lin_table+=row_pattern.format(num=i+1)+coll_delimetr.join(str(r) for r in row.values)\n", - " \n", - " return lin_table" + "d2 = load_from_disk('tab_fact_test_unique_tables')\n", + "d2" ] }, { "cell_type": "code", - "execution_count": null, - "id": "a590fde2-7ac8-4db9-ba60-89b0aa07304d", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "88831cc3-fa17-4aa6-a72a-580b5e2f87d1", + "execution_count": 26, + "id": "05c000fc-0e50-43a1-91cc-e72173b3b829", "metadata": {}, "outputs": [ { - "ename": "SyntaxError", - "evalue": "invalid syntax (290219339.py, line 1)", - "output_type": "error", - "traceback": [ - "\u001b[0;36m Cell \u001b[0;32mIn[6], line 1\u001b[0;36m\u001b[0m\n\u001b[0;31m python, в дирректории проекта 2 папки f1 и f2 в f1 файл file.py и init.py. В f2 файл run.py как в run.py импортировать функцию из file.py\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" - ] + "data": { + "text/plain": [ + "{'id': 1085,\n", + " 'table_csv': '1-27047554-1.html.csv',\n", + " 'table_text': \"no in series#title#directed by#written by#original air date#us viewers (in millions)\\n1#pilot#lesli linka glatter#i marlene king#june 8 , 2010#2.47\\n2#the jenna thing#liz friedlander#i marlene king#june 15 , 2010#2.48\\n3#to kill a mocking girl#elodie keene#oliver goldstick#june 22 , 2010#2.74\\n4#can you hear me now#norman buckley#joseph dougherty#june 29 , 2010#2.08\\n5#reality bites me#wendey stanzler#bryan m holdman#july 6 , 2010#2.62\\n6#there 's no place like homecoming#norman buckley#maya goldsmith#july 13 , 2010#2.69\\n7#the homecoming hangover#chris grismer#tamar laddy#july 20 , 2010#2.55\\n8#please , do talk about me when i'm gone#arlene sanford#joseph dougherty#july 27 , 2010#2.52\\n9#the perfect storm#jamie babbit#oliver goldstick#august 3 , 2010#2.55\\n10#keep your friends close#ron lagomarsino#i marlene king#august 10 , 2010#3.07\\n11#moments later#norman buckley#joseph dougherty#january 3 , 2011#4.22\\n12#salt meets wound#norman buckley#oliver goldstick#january 10 , 2011#3.21\\n13#know your frenemies#ron lagomarsino#i marlene king#january 17 , 2011#2.99\\n14#careful what u wish 4#norman buckley#tamar laddy#january 24 , 2011#3.17\\n15#if at first you don't succeed , lie , lie again#ron lagomarsino#maya goldsmith#january 31 , 2011#3.19\\n16#je suis une amie#chris grismer#bryan m holdman#february 7 , 2011#3.14\\n17#the new normal#michael grossman#joseph dougherty#february 14 , 2011#2.35\\n18#the badass seed#paul lazarus#oliver goldstick & francesca rollins#february 21 , 2011#2.90\\n19#a person of interest#ron lagomarsino#i marlene king & jonell lennon#february 28 , 2011#2.69\\n20#someone to watch over me#arlene sanford#joseph dougherty#march 7 , 2011#2.95\\n21#monsters in the end#chris grismer#oliver goldstick#march 14 , 2011#2.94\\n\",\n", + " 'label': 0,\n", + " 'statement': 'joseph dougherty write 1 episode in season 1',\n", + " 'table_caption': 'pretty little liars (season 1)'}" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "python, в дирректории проекта 2 папки f1 и f2 в f1 файл file.py и init.py. В f2 файл run.py как в run.py импортировать функцию из file.py" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "3f3f6c1d-5245-43a1-a0f5-8e25cd36d491", - "metadata": {}, - "outputs": [], - "source": [ - "import sys\n", - "import os" + "d0 = load_from_disk('tab_fact_train')\n", + "d0[8856]" ] }, { "cell_type": "code", - "execution_count": 4, - "id": "b415bdf8-f8f2-42c7-af4d-6cb2862aa21c", + "execution_count": 2, + "id": "45d5ea74-d286-4336-9b2f-f3af6efdbab8", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['id', 'statement', 'label', 'table_caption', 'table_text', 'pandas_code', 'pandas_eval'],\n", + " num_rows: 88223\n", + "})" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "import sys\n", - "import os\n", - "\n", - "# Добавляем корневую директорию проекта в sys.path\n", - "sys.path.append(os.path.dirname(os.path.abspath('/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/tests')))" + "dataset = Dataset.from_json(\"../datasets/PanTabFact/PanTabFact.json\")\n", + "dataset" ] }, { "cell_type": "code", - "execution_count": 9, - "id": "4d37f102-5b9c-4d17-96fb-ee43597940c5", + "execution_count": 27, + "id": "a0fad5b2-b1cb-49a8-87e3-bfe1559aacda", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['/usr/lib/python310.zip',\n", - " '/usr/lib/python3.10',\n", - " '/usr/lib/python3.10/lib-dynload',\n", - " '',\n", - " '/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages',\n", - " '/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/nvidia_cutlass_dsl/python_packages',\n", - " '/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer']" + "Dataset({\n", + " features: ['id', 'statement', 'label', 'table_caption', 'table_text', 'pandas_code', 'pandas_eval'],\n", + " num_rows: 88223\n", + "})" ] }, - "execution_count": 9, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "sys.path" + "dataset" ] }, { "cell_type": "code", - "execution_count": 5, - "id": "a3d85a1e-30c9-4854-aed6-39dcd08a795a", + "execution_count": 3, + "id": "3787edc0-bdef-48d1-9315-cdeb915d8311", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ad4995645c1f4371a5fe45458446ba58", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Saving the dataset (0/1 shards): 0%| | 0/88223 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", + "name": "stderr", + "output_type": "stream", + "text": [ + " 0%| | 0/88223 [00:00:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 0%| | 108/88223 [00:00<02:36, 563.66it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 0%| | 328/88223 [00:00<02:06, 693.73it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 1%| | 483/88223 [00:00<02:02, 713.90it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 1%| | 561/88223 [00:00<01:59, 732.08it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 1%| | 637/88223 [00:00<01:58, 738.60it/s]:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + " 1%| | 873/88223 [00:01<01:54, 765.48it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 1%|▏ | 1190/88223 [00:01<01:51, 778.78it/s]:1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + " 2%|▏ | 1428/88223 [00:01<01:51, 776.39it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 2%|▏ | 1583/88223 [00:02<01:53, 763.94it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 2%|▏ | 1999/88223 [00:02<01:46, 809.60it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 2%|▏ | 2167/88223 [00:02<01:45, 817.49it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 3%|▎ | 2249/88223 [00:02<01:46, 803.56it/s]:1: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 3%|▎ | 2330/88223 [00:03<01:54, 751.92it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 3%|▎ | 2406/88223 [00:03<01:54, 751.69it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 3%|▎ | 2879/88223 [00:03<01:55, 739.85it/s]:1: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n", + " 4%|▎ | 3123/88223 [00:04<01:47, 789.47it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 4%|▍ | 3439/88223 [00:04<01:50, 768.22it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + " 4%|▍ | 3517/88223 [00:04<01:52, 752.56it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 4%|▍ | 3753/88223 [00:04<01:52, 748.02it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 4%|▍ | 3915/88223 [00:05<01:48, 776.74it/s]:1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 5%|▍ | 4150/88223 [00:05<01:51, 753.17it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 5%|▍ | 4226/88223 [00:05<01:52, 749.04it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 5%|▍ | 4389/88223 [00:05<01:46, 783.90it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 5%|▌ | 4547/88223 [00:05<01:47, 778.24it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 5%|▌ | 4625/88223 [00:06<01:48, 768.25it/s]:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 6%|▌ | 4935/88223 [00:06<01:49, 762.21it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 6%|▌ | 5016/88223 [00:06<01:47, 774.33it/s]:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + " 6%|▌ | 5175/88223 [00:06<01:47, 771.97it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 6%|▌ | 5491/88223 [00:07<01:48, 760.29it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 6%|▋ | 5646/88223 [00:07<01:48, 762.02it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 6%|▋ | 5723/88223 [00:07<01:48, 758.93it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 7%|▋ | 5969/88223 [00:07<01:45, 783.25it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 7%|▋ | 6127/88223 [00:08<01:45, 777.39it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 7%|▋ | 6608/88223 [00:08<01:44, 778.44it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 8%|▊ | 6688/88223 [00:08<01:44, 782.88it/s]:1: UserWarning: Parsing dates in %d / %m / %Y format when dayfirst=False (the default) was specified. Pass `dayfirst=True` or specify a format to silence this warning.\n", + " 8%|▊ | 6927/88223 [00:09<01:43, 784.47it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 9%|▊ | 7565/88223 [00:09<01:43, 780.79it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 9%|▉ | 7725/88223 [00:10<01:42, 785.70it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 9%|▉ | 7960/88223 [00:10<01:49, 732.08it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 9%|▉ | 8036/88223 [00:10<01:48, 736.27it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 9%|▉ | 8115/88223 [00:10<01:46, 750.62it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 9%|▉ | 8193/88223 [00:10<01:45, 757.16it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 9%|▉ | 8269/88223 [00:10<01:46, 753.30it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 9%|▉ | 8345/88223 [00:10<01:46, 749.26it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 10%|▉ | 8421/88223 [00:11<01:48, 733.19it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 10%|▉ | 8811/88223 [00:11<01:52, 707.73it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 10%|█ | 8885/88223 [00:11<01:51, 714.20it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 11%|█ | 9264/88223 [00:12<01:47, 735.24it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 11%|█ | 9428/88223 [00:12<01:41, 772.73it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 11%|█ | 9831/88223 [00:12<01:40, 782.14it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 12%|█▏ | 10634/88223 [00:13<01:39, 778.16it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 12%|█▏ | 10869/88223 [00:14<01:40, 770.80it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 12%|█▏ | 10947/88223 [00:14<01:41, 765.10it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 12%|█▏ | 11024/88223 [00:14<01:41, 763.80it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 13%|█▎ | 11101/88223 [00:14<01:41, 759.70it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 13%|█▎ | 11178/88223 [00:14<01:41, 760.08it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 13%|█▎ | 11335/88223 [00:14<01:41, 759.89it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 13%|█▎ | 11493/88223 [00:15<01:39, 767.93it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 13%|█▎ | 11573/88223 [00:15<01:38, 775.12it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 14%|█▍ | 12610/88223 [00:16<01:37, 773.06it/s]:1: RuntimeWarning: invalid value encountered in scalar subtract\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 14%|█▍ | 12767/88223 [00:16<01:37, 774.69it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 15%|█▍ | 13004/88223 [00:16<01:35, 784.19it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 15%|█▍ | 13083/88223 [00:17<01:38, 761.33it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 15%|█▌ | 13403/88223 [00:17<01:37, 764.89it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 15%|█▌ | 13481/88223 [00:17<01:38, 759.85it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 16%|█▌ | 13801/88223 [00:18<01:34, 787.83it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 16%|█▌ | 13964/88223 [00:18<01:34, 783.50it/s]:1: UserWarning: Parsing dates in %d / %m / %Y format when dayfirst=False (the default) was specified. Pass `dayfirst=True` or specify a format to silence this warning.\n", + " 16%|█▌ | 14206/88223 [00:18<01:34, 785.42it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 17%|█▋ | 14709/88223 [00:19<01:28, 826.48it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 17%|█▋ | 14957/88223 [00:19<01:31, 799.90it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 17%|█▋ | 15121/88223 [00:19<01:34, 773.19it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 17%|█▋ | 15199/88223 [00:19<01:36, 757.67it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 17%|█▋ | 15278/88223 [00:19<01:35, 764.00it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 17%|█▋ | 15355/88223 [00:20<01:37, 747.44it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 17%|█▋ | 15431/88223 [00:20<01:37, 749.88it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 18%|█▊ | 16153/88223 [00:21<01:32, 778.23it/s]:1: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n", + " 18%|█▊ | 16306/88223 [00:21<01:36, 747.60it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 19%|█▊ | 16384/88223 [00:21<01:35, 752.71it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 19%|█▉ | 16542/88223 [00:21<01:34, 755.56it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 19%|█▉ | 16701/88223 [00:21<01:32, 771.50it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 19%|█▉ | 17091/88223 [00:22<01:32, 767.19it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 19%|█▉ | 17168/88223 [00:22<01:36, 735.00it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 20%|█▉ | 17244/88223 [00:22<01:35, 742.09it/s]:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 20%|█▉ | 17321/88223 [00:22<01:34, 748.39it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 20%|█▉ | 17471/88223 [00:22<01:36, 730.25it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 20%|█▉ | 17545/88223 [00:22<01:36, 730.45it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 20%|█▉ | 17621/88223 [00:23<01:35, 737.44it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 20%|██ | 17702/88223 [00:23<01:33, 757.88it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 20%|██ | 17859/88223 [00:23<01:31, 771.12it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 20%|██ | 17943/88223 [00:23<01:28, 790.06it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 21%|██ | 18502/88223 [00:24<01:28, 785.05it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 21%|██ | 18581/88223 [00:24<01:29, 777.77it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 21%|██ | 18741/88223 [00:24<01:30, 767.43it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 21%|██▏ | 18818/88223 [00:24<01:33, 744.41it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 21%|██▏ | 18893/88223 [00:24<01:33, 738.70it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 22%|██▏ | 19044/88223 [00:24<01:32, 745.70it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 22%|██▏ | 19121/88223 [00:24<01:32, 749.95it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 22%|██▏ | 19348/88223 [00:25<01:31, 749.67it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 22%|██▏ | 19434/88223 [00:25<01:28, 778.96it/s]:1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + " 22%|██▏ | 19836/88223 [00:25<01:26, 792.19it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 23%|██▎ | 19996/88223 [00:26<01:27, 779.39it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 23%|██▎ | 20238/88223 [00:26<01:28, 769.19it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 23%|██▎ | 20393/88223 [00:26<01:30, 750.74it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 23%|██▎ | 20475/88223 [00:26<01:28, 768.83it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 24%|██▎ | 20881/88223 [00:27<01:26, 778.64it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 24%|██▍ | 20961/88223 [00:27<01:25, 784.44it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 24%|██▍ | 21040/88223 [00:27<01:28, 763.11it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 24%|██▍ | 21432/88223 [00:27<01:27, 763.40it/s]:1: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 24%|██▍ | 21510/88223 [00:28<01:26, 768.24it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 25%|██▍ | 21830/88223 [00:28<01:23, 794.46it/s]:1: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n", + " 25%|██▍ | 21910/88223 [00:28<01:24, 784.44it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 26%|██▌ | 22941/88223 [00:29<01:22, 791.11it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 26%|██▌ | 23022/88223 [00:29<01:21, 795.84it/s]:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 26%|██▌ | 23102/88223 [00:30<01:22, 788.11it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 26%|██▋ | 23261/88223 [00:30<01:22, 786.10it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 27%|██▋ | 23505/88223 [00:30<01:20, 802.94it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 27%|██▋ | 23586/88223 [00:30<01:21, 796.05it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 27%|██▋ | 23666/88223 [00:30<01:25, 758.55it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 27%|██▋ | 23911/88223 [00:31<01:22, 779.74it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 27%|██▋ | 24070/88223 [00:31<01:23, 768.43it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 28%|██▊ | 24386/88223 [00:31<01:22, 770.90it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 28%|██▊ | 24464/88223 [00:31<01:23, 765.03it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 28%|██▊ | 24852/88223 [00:32<01:22, 763.77it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 28%|██▊ | 25007/88223 [00:32<01:24, 752.57it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 29%|██▊ | 25239/88223 [00:32<01:22, 761.59it/s]:1: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 29%|██▉ | 25636/88223 [00:33<01:22, 760.80it/s]:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 29%|██▉ | 25713/88223 [00:33<01:24, 740.90it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 29%|██▉ | 25794/88223 [00:33<01:22, 759.28it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 29%|██▉ | 25873/88223 [00:33<01:21, 766.10it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 30%|██▉ | 26439/88223 [00:34<01:18, 784.57it/s]:1: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + ":1: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + " 30%|███ | 26837/88223 [00:34<01:20, 762.23it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 31%|███ | 27313/88223 [00:35<01:17, 788.47it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 31%|███▏ | 27627/88223 [00:35<01:19, 764.67it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 31%|███▏ | 27785/88223 [00:36<01:18, 774.54it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 32%|███▏ | 27942/88223 [00:36<01:17, 775.48it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 32%|███▏ | 28020/88223 [00:36<01:17, 776.57it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 32%|███▏ | 28659/88223 [00:37<01:16, 777.91it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 33%|███▎ | 28899/88223 [00:37<01:15, 783.15it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 33%|███▎ | 29295/88223 [00:38<01:17, 755.87it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 33%|███▎ | 29374/88223 [00:38<01:16, 764.46it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 34%|███▎ | 29613/88223 [00:38<01:14, 782.70it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 34%|███▎ | 29692/88223 [00:38<01:15, 777.01it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 34%|███▍ | 29854/88223 [00:38<01:14, 787.29it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 34%|███▍ | 30172/88223 [00:39<01:14, 780.96it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 34%|███▍ | 30329/88223 [00:39<01:17, 751.62it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 34%|███▍ | 30405/88223 [00:39<01:16, 751.77it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 35%|███▍ | 30796/88223 [00:40<01:14, 774.39it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 35%|███▍ | 30875/88223 [00:40<01:13, 777.86it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 35%|███▌ | 30953/88223 [00:40<01:17, 739.46it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 35%|███▌ | 31110/88223 [00:40<01:15, 759.53it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 35%|███▌ | 31267/88223 [00:40<01:14, 760.79it/s]:1: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n", + " 37%|███▋ | 32307/88223 [00:42<01:13, 759.72it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 37%|███▋ | 32459/88223 [00:42<01:15, 736.45it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 37%|███▋ | 32622/88223 [00:42<01:11, 772.54it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 37%|███▋ | 32935/88223 [00:42<01:12, 758.89it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 38%|███▊ | 33250/88223 [00:43<01:10, 776.92it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 38%|███▊ | 33331/88223 [00:43<01:09, 784.57it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 38%|███▊ | 33573/88223 [00:43<01:10, 778.36it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 39%|███▊ | 34113/88223 [00:44<01:11, 754.71it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 39%|███▉ | 34192/88223 [00:44<01:10, 764.20it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 39%|███▉ | 34668/88223 [00:45<01:08, 785.10it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 40%|███▉ | 34907/88223 [00:45<01:09, 767.93it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 40%|███▉ | 35143/88223 [00:45<01:08, 769.41it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 40%|███▉ | 35221/88223 [00:45<01:09, 764.50it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 40%|████ | 35299/88223 [00:45<01:09, 766.84it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 40%|████ | 35376/88223 [00:46<01:10, 754.23it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 40%|████ | 35679/88223 [00:46<01:10, 746.60it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 41%|████ | 35755/88223 [00:46<01:10, 748.29it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 41%|████ | 35998/88223 [00:46<01:09, 749.56it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 41%|████ | 36074/88223 [00:47<01:12, 719.88it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 42%|████▏ | 36967/88223 [00:48<01:04, 790.15it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 42%|████▏ | 37047/88223 [00:48<01:04, 789.02it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 42%|████▏ | 37207/88223 [00:48<01:05, 782.29it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 42%|████▏ | 37363/88223 [00:48<01:07, 751.97it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 43%|████▎ | 37596/88223 [00:48<01:06, 766.10it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 43%|████▎ | 37678/88223 [00:49<01:04, 781.32it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 43%|████▎ | 37834/88223 [00:49<01:06, 757.17it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 43%|████▎ | 37910/88223 [00:49<01:06, 755.51it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 43%|████▎ | 38153/88223 [00:49<01:03, 783.72it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 44%|████▎ | 38469/88223 [00:50<01:05, 754.03it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 44%|████▍ | 38627/88223 [00:50<01:05, 761.45it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 44%|████▍ | 38704/88223 [00:50<01:05, 753.87it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 44%|████▍ | 38780/88223 [00:50<01:07, 734.01it/s]:1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + " 44%|████▍ | 38860/88223 [00:50<01:05, 752.46it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 44%|████▍ | 39178/88223 [00:51<01:03, 775.14it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 45%|████▍ | 39335/88223 [00:51<01:04, 758.73it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 45%|████▍ | 39493/88223 [00:51<01:03, 770.04it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 45%|████▌ | 39814/88223 [00:51<01:01, 790.16it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 45%|████▌ | 40055/88223 [00:52<01:01, 784.18it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 45%|████▌ | 40134/88223 [00:52<01:02, 768.61it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 46%|████▌ | 40288/88223 [00:52<01:02, 761.20it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 46%|████▌ | 40365/88223 [00:52<01:03, 753.83it/s]:1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + " 46%|████▌ | 40441/88223 [00:52<01:03, 746.77it/s]:1: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 46%|████▌ | 40595/88223 [00:52<01:02, 756.72it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 46%|████▌ | 40671/88223 [00:52<01:05, 728.61it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 46%|████▌ | 40747/88223 [00:53<01:04, 736.41it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 46%|████▋ | 40907/88223 [00:53<01:01, 763.44it/s]:1: RuntimeWarning: invalid value encountered in scalar divide\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 47%|████▋ | 41066/88223 [00:53<01:01, 770.53it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 47%|████▋ | 41144/88223 [00:53<01:01, 760.91it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 47%|████▋ | 41224/88223 [00:53<01:00, 771.21it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 47%|████▋ | 41306/88223 [00:53<00:59, 785.07it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 47%|████▋ | 41627/88223 [00:54<00:59, 789.30it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 47%|████▋ | 41863/88223 [00:54<01:00, 771.31it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 48%|████▊ | 42020/88223 [00:54<00:59, 774.80it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 48%|████▊ | 42488/88223 [00:55<00:59, 764.91it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 48%|████▊ | 42722/88223 [00:55<01:00, 750.64it/s]:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + " 49%|████▊ | 42803/88223 [00:55<00:59, 766.97it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 49%|████▊ | 42884/88223 [00:55<00:58, 779.49it/s]:1: FutureWarning: The behavior of Series.idxmin with all-NA values, or any-NA and skipna=False, is deprecated. In a future version this will raise ValueError\n", + " 49%|████▉ | 43042/88223 [00:56<00:59, 762.59it/s]:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + " 49%|████▉ | 43522/88223 [00:56<00:57, 779.06it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 49%|████▉ | 43600/88223 [00:56<00:57, 775.67it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 50%|████▉ | 43764/88223 [00:57<00:58, 765.33it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 50%|████▉ | 43936/88223 [00:57<00:54, 808.17it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 50%|████▉ | 44098/88223 [00:57<00:55, 795.12it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 50%|█████ | 44178/88223 [00:57<00:57, 765.42it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 50%|█████ | 44255/88223 [00:57<00:58, 752.66it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 50%|█████ | 44415/88223 [00:57<00:56, 774.90it/s]:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + " 50%|█████ | 44493/88223 [00:57<00:57, 764.15it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 51%|█████ | 44650/88223 [00:58<01:09, 623.29it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 51%|█████ | 44731/88223 [00:58<01:05, 668.02it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 51%|█████ | 44883/88223 [00:58<01:01, 706.36it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 51%|█████ | 44962/88223 [00:58<00:59, 727.80it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 51%|█████ | 45125/88223 [00:58<00:56, 767.46it/s]:1: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n", + " 51%|█████ | 45211/88223 [00:58<00:54, 791.22it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 52%|█████▏ | 45533/88223 [00:59<00:54, 789.75it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 52%|█████▏ | 45613/88223 [00:59<00:54, 783.43it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 52%|█████▏ | 45848/88223 [00:59<00:55, 761.07it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 52%|█████▏ | 45930/88223 [00:59<00:54, 775.24it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 53%|█████▎ | 46318/88223 [01:00<00:55, 756.40it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 53%|█████▎ | 46394/88223 [01:00<00:55, 751.85it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 53%|█████▎ | 46474/88223 [01:00<00:54, 764.01it/s]:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + " 53%|█████▎ | 46710/88223 [01:00<00:53, 779.25it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 53%|█████▎ | 46788/88223 [01:00<00:53, 772.71it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 53%|█████▎ | 47023/88223 [01:01<01:00, 684.47it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 53%|█████▎ | 47105/88223 [01:01<00:57, 719.79it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 54%|█████▍ | 47516/88223 [01:01<00:50, 801.04it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 54%|█████▍ | 48018/88223 [01:02<00:49, 813.66it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 55%|█████▍ | 48100/88223 [01:02<00:49, 810.37it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 55%|█████▍ | 48267/88223 [01:02<00:49, 806.37it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 55%|█████▍ | 48353/88223 [01:02<00:48, 818.08it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 55%|█████▌ | 48604/88223 [01:03<00:48, 813.24it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 55%|█████▌ | 48767/88223 [01:03<00:49, 801.11it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 56%|█████▌ | 49014/88223 [01:03<00:48, 812.26it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 56%|█████▌ | 49098/88223 [01:03<00:47, 818.98it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 56%|█████▌ | 49180/88223 [01:03<00:48, 805.68it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 56%|█████▌ | 49261/88223 [01:04<00:48, 805.56it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 56%|█████▌ | 49345/88223 [01:04<00:47, 813.51it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 56%|█████▌ | 49595/88223 [01:04<00:46, 825.88it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 57%|█████▋ | 50262/88223 [01:05<00:47, 805.53it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 58%|█████▊ | 50747/88223 [01:05<00:46, 807.32it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 58%|█████▊ | 50828/88223 [01:06<00:46, 797.08it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 58%|█████▊ | 51071/88223 [01:06<00:46, 799.74it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 59%|█████▊ | 51665/88223 [01:07<00:44, 828.74it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 59%|█████▊ | 51831/88223 [01:07<00:44, 812.79it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 59%|█████▉ | 51999/88223 [01:07<00:44, 817.74it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 59%|█████▉ | 52081/88223 [01:07<00:44, 804.67it/s]:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + " 59%|█████▉ | 52162/88223 [01:07<00:45, 798.39it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 60%|██████ | 53330/88223 [01:09<00:42, 824.02it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 61%|██████ | 53585/88223 [01:09<00:41, 832.22it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 61%|██████ | 53920/88223 [01:09<00:42, 815.74it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 61%|██████▏ | 54087/88223 [01:10<00:41, 816.05it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 62%|██████▏ | 54754/88223 [01:10<00:40, 829.76it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 62%|██████▏ | 54921/88223 [01:11<00:41, 804.42it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 62%|██████▏ | 55088/88223 [01:11<00:40, 819.75it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 63%|██████▎ | 55171/88223 [01:11<00:40, 817.47it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 64%|██████▍ | 56432/88223 [01:12<00:38, 832.03it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 64%|██████▍ | 56598/88223 [01:13<00:38, 816.90it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 64%|██████▍ | 56680/88223 [01:13<00:39, 807.01it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 65%|██████▍ | 57003/88223 [01:13<00:38, 802.44it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 65%|██████▍ | 57253/88223 [01:13<00:37, 819.07it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 65%|██████▌ | 57496/88223 [01:14<00:38, 795.18it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 65%|██████▌ | 57576/88223 [01:14<00:38, 792.76it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 66%|██████▌ | 57821/88223 [01:14<00:37, 801.44it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 66%|██████▌ | 58416/88223 [01:15<00:35, 849.24it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 66%|██████▋ | 58501/88223 [01:15<00:35, 845.76it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 67%|██████▋ | 58670/88223 [01:15<00:35, 825.43it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 67%|██████▋ | 58753/88223 [01:15<00:37, 780.38it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 68%|██████▊ | 59828/88223 [01:17<00:34, 829.78it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 68%|██████▊ | 60158/88223 [01:17<00:34, 811.14it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 69%|██████▉ | 60654/88223 [01:18<00:33, 819.69it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 69%|██████▉ | 61071/88223 [01:18<00:33, 820.83it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 69%|██████▉ | 61156/88223 [01:18<00:32, 827.17it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 70%|██████▉ | 61487/88223 [01:19<00:32, 814.11it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 70%|███████ | 61912/88223 [01:19<00:31, 829.83it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 70%|███████ | 61996/88223 [01:19<00:31, 825.18it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 70%|███████ | 62079/88223 [01:19<00:31, 821.57it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 71%|███████ | 62334/88223 [01:20<00:31, 835.11it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 71%|███████ | 62836/88223 [01:20<00:30, 825.18it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 71%|███████▏ | 62919/88223 [01:20<00:30, 824.89it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 71%|███████▏ | 63007/88223 [01:20<00:30, 838.29it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 72%|███████▏ | 63091/88223 [01:21<00:30, 832.98it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 72%|███████▏ | 63175/88223 [01:21<00:30, 828.19it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 72%|███████▏ | 63687/88223 [01:21<00:29, 830.09it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 72%|███████▏ | 63938/88223 [01:22<00:29, 822.97it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 73%|███████▎ | 64446/88223 [01:22<00:28, 826.03it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 74%|███████▎ | 64869/88223 [01:23<00:27, 834.14it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 74%|███████▎ | 64953/88223 [01:23<00:28, 815.83it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 74%|███████▍ | 65118/88223 [01:23<00:28, 809.30it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 74%|███████▍ | 65706/88223 [01:24<00:27, 829.98it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 75%|███████▍ | 65790/88223 [01:24<00:27, 818.98it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 75%|███████▌ | 66286/88223 [01:24<00:26, 815.33it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 75%|███████▌ | 66456/88223 [01:25<00:26, 827.40it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 76%|███████▌ | 66626/88223 [01:25<00:25, 834.14it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 76%|███████▌ | 66710/88223 [01:25<00:25, 831.30it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 76%|███████▌ | 66959/88223 [01:25<00:26, 815.29it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 76%|███████▋ | 67291/88223 [01:26<00:25, 812.03it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 76%|███████▋ | 67457/88223 [01:26<00:25, 814.40it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 77%|███████▋ | 67539/88223 [01:26<00:25, 811.50it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 77%|███████▋ | 67702/88223 [01:26<00:25, 799.57it/s]:1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + " 77%|███████▋ | 67784/88223 [01:26<00:25, 804.33it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 77%|███████▋ | 67951/88223 [01:26<00:25, 809.93it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 77%|███████▋ | 68194/88223 [01:27<00:25, 791.85it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 77%|███████▋ | 68359/88223 [01:27<00:24, 807.52it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 78%|███████▊ | 68526/88223 [01:27<00:24, 811.50it/s]:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + " 78%|███████▊ | 68610/88223 [01:27<00:23, 819.09it/s]:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + ":1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + " 78%|███████▊ | 68692/88223 [01:27<00:23, 816.80it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 79%|███████▊ | 69382/88223 [01:28<00:22, 840.42it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 79%|███████▉ | 69890/88223 [01:29<00:22, 822.84it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 79%|███████▉ | 70056/88223 [01:29<00:22, 816.41it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 80%|███████▉ | 70477/88223 [01:30<00:21, 830.79it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 81%|████████ | 71394/88223 [01:31<00:20, 826.49it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 81%|████████ | 71477/88223 [01:31<00:20, 805.04it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 81%|████████ | 71558/88223 [01:31<00:20, 798.49it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 82%|████████▏ | 71975/88223 [01:31<00:19, 829.02it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 82%|████████▏ | 72058/88223 [01:31<00:19, 825.26it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 82%|████████▏ | 72144/88223 [01:32<00:19, 832.30it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 82%|████████▏ | 72228/88223 [01:32<00:19, 830.50it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 82%|████████▏ | 72476/88223 [01:32<00:19, 811.33it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 82%|████████▏ | 72647/88223 [01:32<00:18, 832.85it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 82%|████████▏ | 72733/88223 [01:32<00:18, 838.59it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 83%|████████▎ | 72901/88223 [01:32<00:18, 829.44it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 83%|████████▎ | 72985/88223 [01:33<00:18, 828.99it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 83%|████████▎ | 73237/88223 [01:33<00:18, 822.95it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 83%|████████▎ | 73567/88223 [01:33<00:18, 809.48it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 83%|████████▎ | 73653/88223 [01:33<00:17, 820.43it/s]:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + " 84%|████████▍ | 74155/88223 [01:34<00:17, 821.97it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 84%|████████▍ | 74238/88223 [01:34<00:17, 813.56it/s]:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + " 84%|████████▍ | 74489/88223 [01:34<00:16, 824.86it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 85%|████████▍ | 74572/88223 [01:35<00:16, 810.43it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 85%|████████▍ | 74656/88223 [01:35<00:16, 817.51it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 85%|████████▍ | 74903/88223 [01:35<00:16, 815.77it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 85%|████████▍ | 74985/88223 [01:35<00:16, 795.25it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 86%|████████▌ | 75740/88223 [01:36<00:15, 830.32it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 86%|████████▌ | 75990/88223 [01:36<00:14, 822.66it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 86%|████████▌ | 76073/88223 [01:36<00:14, 819.59it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 87%|████████▋ | 76321/88223 [01:37<00:14, 817.82it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 87%|████████▋ | 76489/88223 [01:37<00:14, 824.41it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 87%|████████▋ | 76656/88223 [01:37<00:14, 822.11it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 87%|████████▋ | 76739/88223 [01:37<00:14, 814.25it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 87%|████████▋ | 76903/88223 [01:37<00:14, 804.18it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 87%|████████▋ | 76984/88223 [01:37<00:14, 800.53it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 88%|████████▊ | 77478/88223 [01:38<00:13, 822.52it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 88%|████████▊ | 77645/88223 [01:38<00:12, 818.08it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 88%|████████▊ | 77727/88223 [01:38<00:13, 797.18it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 88%|████████▊ | 77888/88223 [01:39<00:12, 800.32it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 88%|████████▊ | 77969/88223 [01:39<00:12, 794.77it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 89%|████████▊ | 78137/88223 [01:39<00:12, 814.96it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 89%|████████▊ | 78219/88223 [01:39<00:12, 813.40it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 90%|████████▉ | 78974/88223 [01:40<00:11, 819.75it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 90%|████████▉ | 79307/88223 [01:40<00:10, 817.41it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 90%|█████████ | 79553/88223 [01:41<00:10, 810.88it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 90%|█████████ | 79800/88223 [01:41<00:10, 815.68it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 91%|█████████ | 79964/88223 [01:41<00:10, 814.82it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 91%|█████████ | 80046/88223 [01:41<00:10, 811.52it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 91%|█████████ | 80210/88223 [01:41<00:09, 814.13it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 92%|█████████▏| 80795/88223 [01:42<00:08, 830.17it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 92%|█████████▏| 80879/88223 [01:42<00:08, 822.30it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 92%|█████████▏| 81126/88223 [01:43<00:08, 813.35it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 92%|█████████▏| 81290/88223 [01:43<00:08, 811.18it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 92%|█████████▏| 81457/88223 [01:43<00:08, 818.94it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 93%|█████████▎| 82041/88223 [01:44<00:07, 830.56it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 93%|█████████▎| 82208/88223 [01:44<00:07, 816.11it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 93%|█████████▎| 82458/88223 [01:44<00:07, 810.09it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 94%|█████████▍| 83046/88223 [01:45<00:06, 838.79it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + " 94%|█████████▍| 83301/88223 [01:45<00:05, 828.09it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 95%|█████████▍| 83467/88223 [01:45<00:05, 818.43it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 95%|█████████▍| 83718/88223 [01:46<00:05, 816.37it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 95%|█████████▍| 83800/88223 [01:46<00:05, 816.83it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 95%|█████████▌| 84047/88223 [01:46<00:05, 813.53it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 96%|█████████▌| 84628/88223 [01:47<00:04, 823.17it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 96%|█████████▌| 84799/88223 [01:47<00:04, 834.30it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 97%|█████████▋| 85302/88223 [01:48<00:03, 811.17it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 97%|█████████▋| 85465/88223 [01:48<00:03, 802.36it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 97%|█████████▋| 85630/88223 [01:48<00:03, 812.23it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 97%|█████████▋| 85712/88223 [01:48<00:03, 804.99it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 97%|█████████▋| 85797/88223 [01:48<00:02, 817.27it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 97%|█████████▋| 85963/88223 [01:48<00:02, 820.86it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 98%|█████████▊| 86469/88223 [01:49<00:02, 821.96it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 99%|█████████▉| 87236/88223 [01:50<00:01, 816.17it/s]:1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + " 99%|█████████▉| 87486/88223 [01:50<00:00, 821.97it/s]:1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + " 99%|█████████▉| 87569/88223 [01:50<00:00, 808.54it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + " 99%|█████████▉| 87651/88223 [01:51<00:00, 809.44it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + "100%|█████████▉| 87895/88223 [01:51<00:00, 805.62it/s]:1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + "100%|█████████▉| 88060/88223 [01:51<00:00, 811.62it/s]:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + "100%|██████████| 88223/88223 [01:51<00:00, 789.64it/s]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "88220 88223 0.9999659952620065\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "corrects = 0\n", + "total = 0\n", + "\n", + "\n", + "# Validate entries\n", + "count = 0\n", + "for entry in tqdm(dataset):\n", + " count += 1\n", + " total += 1\n", + " df = pd.read_csv(StringIO(entry['table_text']), delimiter='#')\n", + " pandas_eval = str(bool(eval(entry['pandas_code'])))\n", + " if entry['pandas_eval'] == str(pandas_eval):\n", + " corrects += 1\n", + "\n", + "print(corrects, total, corrects / total)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "a974cadb-2c8a-49e6-b128-52bcbe7e2eeb", + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'entry' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[13], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mentry\u001b[49m[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpandas_eval\u001b[39m\u001b[38;5;124m'\u001b[39m]\n", + "\u001b[0;31mNameError\u001b[0m: name 'entry' is not defined" + ] + } + ], + "source": [ + "entry['pandas_eval']" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "358bdbc7-5170-426c-a035-4deb359788fc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'True'" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pandas_eval" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "7cfd4efd-53a1-47b8-b268-efa6908415d3", + "metadata": {}, + "outputs": [], + "source": [ + "def run_filter(data):\n", + " import pandas as pd\n", + " from io import StringIO\n", + " df = pd.read_csv(StringIO(data['table_text']), delimiter='#')\n", + " pandas_eval = str(bool(eval(data['pandas_code'],{\"pd\": pd,\"df\": df})))\n", + " return True if data['pandas_eval'] == str(pandas_eval) else False\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "fea0cca3-4aa4-4f32-be60-9b8f9f254281", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "88220 88223 0.9999659952620065\n" + ] + } + ], + "source": [ + "print(corrects, total, corrects / total)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "9aa9bff2-1d28-49df-8581-8af3813a2b6b", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "8d29afe1c00843be8a7f3f1f8ed3eb1d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Filter (num_proc=17): 0%| | 0/88223 [00:00:1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + ":1: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]`\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + ":1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + ":1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Parsing dates in %d / %m / %Y format when dayfirst=False (the default) was specified. Pass `dayfirst=True` or specify a format to silence this warning.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: The behavior of Series.idxmin with all-NA values, or any-NA and skipna=False, is deprecated. In a future version this will raise ValueError\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: RuntimeWarning: invalid value encountered in scalar subtract\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Parsing dates in %d / %m / %Y format when dayfirst=False (the default) was specified. Pass `dayfirst=True` or specify a format to silence this warning.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling float on a single element Series is deprecated and will raise a TypeError in the future. Use float(ser.iloc[0]) instead\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: RuntimeWarning: invalid value encountered in scalar divide\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Calling int on a single element Series is deprecated and will raise a TypeError in the future. Use int(ser.iloc[0]) instead\n", + ":1: FutureWarning: Series.bool is now deprecated and will be removed in future version of pandas\n" + ] + } + ], + "source": [ + "d = dataset.filter(run_filter,num_proc=17)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f66aa677-1f87-4e5e-886e-40b65bc1ca7b", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "fd7d2a44-3994-45e1-be1c-ed372d348555", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['id', 'table_csv', 'table_text', 'label', 'statement', 'table_caption', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_datatype_exampples_description_top1_tresh50', 'semtab_xml_attributes_exampples_description_top1_tresh50', 'semtab_xml_attributes_description_top1_tresh50', 'semtab_xml_attributes_top1_tresh50', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50', 'semtab_xml_elements_exampples_description_top1_tresh50', 'semtab_xml_elements_description_top1_tresh50', 'semtab_xml_elements_top1_tresh50', 'semtab_xml_attributes_top1_tresh50_answ', 'semtab_xml_attributes_top1_tresh50_label', 'semtab_xml_attributes_top1_tresh50_answ_correct', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50_answ', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50_label', 'semtab_xml_elements_semantic_datatype_exampples_description_top1_tresh50_answ_correct', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50_answ', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50_label', 'semtab_xml_elements_datatype_exampples_description_top1_tresh50_answ_correct', 'semtab_xml_elements_exampples_description_top1_tresh50_answ', 'semtab_xml_elements_exampples_description_top1_tresh50_label', 'semtab_xml_elements_exampples_description_top1_tresh50_answ_correct', 'semtab_xml_elements_description_top1_tresh50_answ', 'semtab_xml_elements_description_top1_tresh50_label', 'semtab_xml_elements_description_top1_tresh50_answ_correct', 'semtab_xml_elements_top1_tresh50_answ', 'semtab_xml_elements_top1_tresh50_label', 'semtab_xml_elements_top1_tresh50_answ_correct', '__index_level_0__'],\n", + " num_rows: 1695\n", + "})" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "utab = load_from_disk('tab_fact_test_unique_tables')\n", + "utab" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "94ae1341-e5bf-4083-899c-48f82f57d0d9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "
place
\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", + " \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", + "
table_csvtable_textlabelstatementtable_caption
02-15401676-3.html.csvdate#result#score#brazil scorers#competition\\n...1haroldo be mention as a brazil scorer for 2 di...1919 in brazilian football
12-15401676-3.html.csvdate#result#score#brazil scorers#competition\\n...14 of the 5 game be for the south american cham...1919 in brazilian football
22-15401676-3.html.csvdate#result#score#brazil scorers#competition\\n...1friedenreich be mention as a brazil scorer for...1919 in brazilian football
32-15401676-3.html.csvdate#result#score#brazil scorers#competition\\n...1there be 2 different game where the highest sc...1919 in brazilian football
42-15401676-3.html.csvdate#result#score#brazil scorers#competition\\n...14 of the 5 game be play in may 19191919 in brazilian football
..................
922781-20861261-4.html.csvround#choice#player#position#height#weight#col...1jerraud power , 192 pound (87 kg) , be choose ...2009 indianapolis colts season
922791-20861261-4.html.csvround#choice#player#position#height#weight#col...0terrence taylor play for auburn2009 indianapolis colts season
922801-20861261-4.html.csvround#choice#player#position#height#weight#col...0curtis painter 's position be quarterback and ...2009 indianapolis colts season
922811-20861261-4.html.csvround#choice#player#position#height#weight#col...0the player who weigh the most play in round 32009 indianapolis colts season
922821-28578233-1.html.csvime exchange (including spot , credit and forw...1for 2007 / 08 , metal - volume (thousand tons)...iran mercantile exchange
\n", + "

92283 rows × 5 columns

\n", + "" + ], + "text/plain": [ + " table_csv \\\n", + "0 2-15401676-3.html.csv \n", + "1 2-15401676-3.html.csv \n", + "2 2-15401676-3.html.csv \n", + "3 2-15401676-3.html.csv \n", + "4 2-15401676-3.html.csv \n", + "... ... \n", + "92278 1-20861261-4.html.csv \n", + "92279 1-20861261-4.html.csv \n", + "92280 1-20861261-4.html.csv \n", + "92281 1-20861261-4.html.csv \n", + "92282 1-28578233-1.html.csv \n", + "\n", + " table_text label \\\n", + "0 date#result#score#brazil scorers#competition\\n... 1 \n", + "1 date#result#score#brazil scorers#competition\\n... 1 \n", + "2 date#result#score#brazil scorers#competition\\n... 1 \n", + "3 date#result#score#brazil scorers#competition\\n... 1 \n", + "4 date#result#score#brazil scorers#competition\\n... 1 \n", + "... ... ... \n", + "92278 round#choice#player#position#height#weight#col... 1 \n", + "92279 round#choice#player#position#height#weight#col... 0 \n", + "92280 round#choice#player#position#height#weight#col... 0 \n", + "92281 round#choice#player#position#height#weight#col... 0 \n", + "92282 ime exchange (including spot , credit and forw... 1 \n", + "\n", + " statement \\\n", + "0 haroldo be mention as a brazil scorer for 2 di... \n", + "1 4 of the 5 game be for the south american cham... \n", + "2 friedenreich be mention as a brazil scorer for... \n", + "3 there be 2 different game where the highest sc... \n", + "4 4 of the 5 game be play in may 1919 \n", + "... ... \n", + "92278 jerraud power , 192 pound (87 kg) , be choose ... \n", + "92279 terrence taylor play for auburn \n", + "92280 curtis painter 's position be quarterback and ... \n", + "92281 the player who weigh the most play in round 3 \n", + "92282 for 2007 / 08 , metal - volume (thousand tons)... \n", + "\n", + " table_caption \n", + "0 1919 in brazilian football \n", + "1 1919 in brazilian football \n", + "2 1919 in brazilian football \n", + "3 1919 in brazilian football \n", + "4 1919 in brazilian football \n", + "... ... \n", + "92278 2009 indianapolis colts season \n", + "92279 2009 indianapolis colts season \n", + "92280 2009 indianapolis colts season \n", + "92281 2009 indianapolis colts season \n", + "92282 iran mercantile exchange \n", + "\n", + "[92283 rows x 5 columns]" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "d2 = load_from_disk('tab_fact_train')\n", + "dd2 = d2.to_pandas()\n", + "dd2 = dd2[['table_csv','table_text','label','statement','table_caption']]\n", + "dd2" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "4e7f2d50-5583-49cd-81cf-299d7bb7d56a", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
statementtable_textpandas_codepandas_eval
0haroldo be mention as a brazil scorer for 2 di...date#result#score#brazil scorers#competition\\n...df['brazil scorers'].apply(lambda x: 'haroldo'...True
14 of the 5 game be for the south american cham...date#result#score#brazil scorers#competition\\n...(df['competition'].value_counts()['south ameri...True
2friedenreich be mention as a brazil scorer for...date#result#score#brazil scorers#competition\\n...df['brazil scorers'].str.contains('friedenreic...True
3there be 2 different game where the highest sc...date#result#score#brazil scorers#competition\\n...len(df[df['score'].str.extract(r'^(\\d+) - \\d+$...True
44 of the 5 game be play in may 1919date#result#score#brazil scorers#competition\\n...(df['date'].str.contains('may') & df['date'].s...True
...............
88215jerraud power , 192 pound (87 kg) , be choose ...round#choice#player#position#height#weight#col...df[(df['player'] == 'jerraud powers') & (df['w...True
88216terrence taylor play for auburnround#choice#player#position#height#weight#col...df[df['player'] == 'terrance taylor']['college...False
88217curtis painter 's position be quarterback and ...round#choice#player#position#height#weight#col...(df[df['player'] == 'curtis painter']['positio...False
88218the player who weigh the most play in round 3round#choice#player#position#height#weight#col...(df.loc[df['weight'].str.extract('(\\\\d+)').ast...False
88219for 2007 / 08 , metal - volume (thousand tons)...ime exchange (including spot , credit and forw...df.loc[df['ime exchange (including spot , cred...True
\n", + "

88220 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " statement \\\n", + "0 haroldo be mention as a brazil scorer for 2 di... \n", + "1 4 of the 5 game be for the south american cham... \n", + "2 friedenreich be mention as a brazil scorer for... \n", + "3 there be 2 different game where the highest sc... \n", + "4 4 of the 5 game be play in may 1919 \n", + "... ... \n", + "88215 jerraud power , 192 pound (87 kg) , be choose ... \n", + "88216 terrence taylor play for auburn \n", + "88217 curtis painter 's position be quarterback and ... \n", + "88218 the player who weigh the most play in round 3 \n", + "88219 for 2007 / 08 , metal - volume (thousand tons)... \n", + "\n", + " table_text \\\n", + "0 date#result#score#brazil scorers#competition\\n... \n", + "1 date#result#score#brazil scorers#competition\\n... \n", + "2 date#result#score#brazil scorers#competition\\n... \n", + "3 date#result#score#brazil scorers#competition\\n... \n", + "4 date#result#score#brazil scorers#competition\\n... \n", + "... ... \n", + "88215 round#choice#player#position#height#weight#col... \n", + "88216 round#choice#player#position#height#weight#col... \n", + "88217 round#choice#player#position#height#weight#col... \n", + "88218 round#choice#player#position#height#weight#col... \n", + "88219 ime exchange (including spot , credit and forw... \n", + "\n", + " pandas_code pandas_eval \n", + "0 df['brazil scorers'].apply(lambda x: 'haroldo'... True \n", + "1 (df['competition'].value_counts()['south ameri... True \n", + "2 df['brazil scorers'].str.contains('friedenreic... True \n", + "3 len(df[df['score'].str.extract(r'^(\\d+) - \\d+$... True \n", + "4 (df['date'].str.contains('may') & df['date'].s... True \n", + "... ... ... \n", + "88215 df[(df['player'] == 'jerraud powers') & (df['w... True \n", + "88216 df[df['player'] == 'terrance taylor']['college... False \n", + "88217 (df[df['player'] == 'curtis painter']['positio... False \n", + "88218 (df.loc[df['weight'].str.extract('(\\\\d+)').ast... False \n", + "88219 df.loc[df['ime exchange (including spot , cred... True \n", + "\n", + "[88220 rows x 4 columns]" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dd = d.to_pandas()\n", + "dd = dd[['statement','table_text','pandas_code','pandas_eval']]\n", + "dd" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "da5c8439-41b6-4344-a454-001e9736f1bc", + "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", + " \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", + "
idtable_csvtable_textlabelstatementtable_caption
002-15401676-3.html.csvdate#result#score#brazil scorers#competition\\n...1haroldo be mention as a brazil scorer for 2 di...1919 in brazilian football
102-15401676-3.html.csvdate#result#score#brazil scorers#competition\\n...14 of the 5 game be for the south american cham...1919 in brazilian football
202-15401676-3.html.csvdate#result#score#brazil scorers#competition\\n...1friedenreich be mention as a brazil scorer for...1919 in brazilian football
302-15401676-3.html.csvdate#result#score#brazil scorers#competition\\n...1there be 2 different game where the highest sc...1919 in brazilian football
402-15401676-3.html.csvdate#result#score#brazil scorers#competition\\n...14 of the 5 game be play in may 19191919 in brazilian football
.....................
92278131801-20861261-4.html.csvround#choice#player#position#height#weight#col...1jerraud power , 192 pound (87 kg) , be choose ...2009 indianapolis colts season
92279131801-20861261-4.html.csvround#choice#player#position#height#weight#col...0terrence taylor play for auburn2009 indianapolis colts season
92280131801-20861261-4.html.csvround#choice#player#position#height#weight#col...0curtis painter 's position be quarterback and ...2009 indianapolis colts season
92281131801-20861261-4.html.csvround#choice#player#position#height#weight#col...0the player who weigh the most play in round 32009 indianapolis colts season
92282131811-28578233-1.html.csvime exchange (including spot , credit and forw...1for 2007 / 08 , metal - volume (thousand tons)...iran mercantile exchange
\n", + "

92283 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " id table_csv \\\n", + "0 0 2-15401676-3.html.csv \n", + "1 0 2-15401676-3.html.csv \n", + "2 0 2-15401676-3.html.csv \n", + "3 0 2-15401676-3.html.csv \n", + "4 0 2-15401676-3.html.csv \n", + "... ... ... \n", + "92278 13180 1-20861261-4.html.csv \n", + "92279 13180 1-20861261-4.html.csv \n", + "92280 13180 1-20861261-4.html.csv \n", + "92281 13180 1-20861261-4.html.csv \n", + "92282 13181 1-28578233-1.html.csv \n", + "\n", + " table_text label \\\n", + "0 date#result#score#brazil scorers#competition\\n... 1 \n", + "1 date#result#score#brazil scorers#competition\\n... 1 \n", + "2 date#result#score#brazil scorers#competition\\n... 1 \n", + "3 date#result#score#brazil scorers#competition\\n... 1 \n", + "4 date#result#score#brazil scorers#competition\\n... 1 \n", + "... ... ... \n", + "92278 round#choice#player#position#height#weight#col... 1 \n", + "92279 round#choice#player#position#height#weight#col... 0 \n", + "92280 round#choice#player#position#height#weight#col... 0 \n", + "92281 round#choice#player#position#height#weight#col... 0 \n", + "92282 ime exchange (including spot , credit and forw... 1 \n", + "\n", + " statement \\\n", + "0 haroldo be mention as a brazil scorer for 2 di... \n", + "1 4 of the 5 game be for the south american cham... \n", + "2 friedenreich be mention as a brazil scorer for... \n", + "3 there be 2 different game where the highest sc... \n", + "4 4 of the 5 game be play in may 1919 \n", + "... ... \n", + "92278 jerraud power , 192 pound (87 kg) , be choose ... \n", + "92279 terrence taylor play for auburn \n", + "92280 curtis painter 's position be quarterback and ... \n", + "92281 the player who weigh the most play in round 3 \n", + "92282 for 2007 / 08 , metal - volume (thousand tons)... \n", + "\n", + " table_caption \n", + "0 1919 in brazilian football \n", + "1 1919 in brazilian football \n", + "2 1919 in brazilian football \n", + "3 1919 in brazilian football \n", + "4 1919 in brazilian football \n", + "... ... \n", + "92278 2009 indianapolis colts season \n", + "92279 2009 indianapolis colts season \n", + "92280 2009 indianapolis colts season \n", + "92281 2009 indianapolis colts season \n", + "92282 iran mercantile exchange \n", + "\n", + "[92283 rows x 6 columns]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dd2" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "4ac11352-edf1-4e8f-9320-f85968ccb88f", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "dd3a0f73-e7ef-4b32-83fb-5bd918f161dd", + "metadata": {}, + "outputs": [], + "source": [ + "res = pd.merge(dd, dd2, on=['table_text', 'statement'], how='inner')" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "0219d1de-6881-4315-8a40-ad09ac2f0e75", + "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", + " \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", + "
statementtable_textpandas_codepandas_evalidtable_csvlabeltable_caption
0haroldo be mention as a brazil scorer for 2 di...date#result#score#brazil scorers#competition\\n...df['brazil scorers'].apply(lambda x: 'haroldo'...True02-15401676-3.html.csv11919 in brazilian football
14 of the 5 game be for the south american cham...date#result#score#brazil scorers#competition\\n...(df['competition'].value_counts()['south ameri...True02-15401676-3.html.csv11919 in brazilian football
2friedenreich be mention as a brazil scorer for...date#result#score#brazil scorers#competition\\n...df['brazil scorers'].str.contains('friedenreic...True02-15401676-3.html.csv11919 in brazilian football
3there be 2 different game where the highest sc...date#result#score#brazil scorers#competition\\n...len(df[df['score'].str.extract(r'^(\\d+) - \\d+$...True02-15401676-3.html.csv11919 in brazilian football
44 of the 5 game be play in may 1919date#result#score#brazil scorers#competition\\n...(df['date'].str.contains('may') & df['date'].s...True02-15401676-3.html.csv11919 in brazilian football
...........................
88729jerraud power , 192 pound (87 kg) , be choose ...round#choice#player#position#height#weight#col...df[(df['player'] == 'jerraud powers') & (df['w...True131801-20861261-4.html.csv12009 indianapolis colts season
88730terrence taylor play for auburnround#choice#player#position#height#weight#col...df[df['player'] == 'terrance taylor']['college...False131801-20861261-4.html.csv02009 indianapolis colts season
88731curtis painter 's position be quarterback and ...round#choice#player#position#height#weight#col...(df[df['player'] == 'curtis painter']['positio...False131801-20861261-4.html.csv02009 indianapolis colts season
88732the player who weigh the most play in round 3round#choice#player#position#height#weight#col...(df.loc[df['weight'].str.extract('(\\\\d+)').ast...False131801-20861261-4.html.csv02009 indianapolis colts season
88733for 2007 / 08 , metal - volume (thousand tons)...ime exchange (including spot , credit and forw...df.loc[df['ime exchange (including spot , cred...True131811-28578233-1.html.csv1iran mercantile exchange
\n", + "

88734 rows × 8 columns

\n", + "
" + ], + "text/plain": [ + " statement \\\n", + "0 haroldo be mention as a brazil scorer for 2 di... \n", + "1 4 of the 5 game be for the south american cham... \n", + "2 friedenreich be mention as a brazil scorer for... \n", + "3 there be 2 different game where the highest sc... \n", + "4 4 of the 5 game be play in may 1919 \n", + "... ... \n", + "88729 jerraud power , 192 pound (87 kg) , be choose ... \n", + "88730 terrence taylor play for auburn \n", + "88731 curtis painter 's position be quarterback and ... \n", + "88732 the player who weigh the most play in round 3 \n", + "88733 for 2007 / 08 , metal - volume (thousand tons)... \n", + "\n", + " table_text \\\n", + "0 date#result#score#brazil scorers#competition\\n... \n", + "1 date#result#score#brazil scorers#competition\\n... \n", + "2 date#result#score#brazil scorers#competition\\n... \n", + "3 date#result#score#brazil scorers#competition\\n... \n", + "4 date#result#score#brazil scorers#competition\\n... \n", + "... ... \n", + "88729 round#choice#player#position#height#weight#col... \n", + "88730 round#choice#player#position#height#weight#col... \n", + "88731 round#choice#player#position#height#weight#col... \n", + "88732 round#choice#player#position#height#weight#col... \n", + "88733 ime exchange (including spot , credit and forw... \n", + "\n", + " pandas_code pandas_eval id \\\n", + "0 df['brazil scorers'].apply(lambda x: 'haroldo'... True 0 \n", + "1 (df['competition'].value_counts()['south ameri... True 0 \n", + "2 df['brazil scorers'].str.contains('friedenreic... True 0 \n", + "3 len(df[df['score'].str.extract(r'^(\\d+) - \\d+$... True 0 \n", + "4 (df['date'].str.contains('may') & df['date'].s... True 0 \n", + "... ... ... ... \n", + "88729 df[(df['player'] == 'jerraud powers') & (df['w... True 13180 \n", + "88730 df[df['player'] == 'terrance taylor']['college... False 13180 \n", + "88731 (df[df['player'] == 'curtis painter']['positio... False 13180 \n", + "88732 (df.loc[df['weight'].str.extract('(\\\\d+)').ast... False 13180 \n", + "88733 df.loc[df['ime exchange (including spot , cred... True 13181 \n", + "\n", + " table_csv label table_caption \n", + "0 2-15401676-3.html.csv 1 1919 in brazilian football \n", + "1 2-15401676-3.html.csv 1 1919 in brazilian football \n", + "2 2-15401676-3.html.csv 1 1919 in brazilian football \n", + "3 2-15401676-3.html.csv 1 1919 in brazilian football \n", + "4 2-15401676-3.html.csv 1 1919 in brazilian football \n", + "... ... ... ... \n", + "88729 1-20861261-4.html.csv 1 2009 indianapolis colts season \n", + "88730 1-20861261-4.html.csv 0 2009 indianapolis colts season \n", + "88731 1-20861261-4.html.csv 0 2009 indianapolis colts season \n", + "88732 1-20861261-4.html.csv 0 2009 indianapolis colts season \n", + "88733 1-28578233-1.html.csv 1 iran mercantile exchange \n", + "\n", + "[88734 rows x 8 columns]" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "res" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "169560e2-4841-456c-85c4-bc5dfe1c6b74", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Количество строк с дублирующимися ключами в dd2: 518\n" + ] + } + ], + "source": [ + "duplicates_dd2 = dd2.duplicated(subset=['table_text', 'statement'], keep=False).sum()\n", + "print(f\"Количество строк с дублирующимися ключами в dd2: {duplicates_dd2}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "e097b986-e614-44f5-9fe4-ff6e2988fc14", + "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", + " \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", + "
table_csvtable_textlabelstatementtable_caption
02-15401676-3.html.csvdate#result#score#brazil scorers#competition\\n...1haroldo be mention as a brazil scorer for 2 di...1919 in brazilian football
12-15401676-3.html.csvdate#result#score#brazil scorers#competition\\n...14 of the 5 game be for the south american cham...1919 in brazilian football
22-15401676-3.html.csvdate#result#score#brazil scorers#competition\\n...1friedenreich be mention as a brazil scorer for...1919 in brazilian football
32-15401676-3.html.csvdate#result#score#brazil scorers#competition\\n...1there be 2 different game where the highest sc...1919 in brazilian football
42-15401676-3.html.csvdate#result#score#brazil scorers#competition\\n...14 of the 5 game be play in may 19191919 in brazilian football
..................
922781-20861261-4.html.csvround#choice#player#position#height#weight#col...1jerraud power , 192 pound (87 kg) , be choose ...2009 indianapolis colts season
922791-20861261-4.html.csvround#choice#player#position#height#weight#col...0terrence taylor play for auburn2009 indianapolis colts season
922801-20861261-4.html.csvround#choice#player#position#height#weight#col...0curtis painter 's position be quarterback and ...2009 indianapolis colts season
922811-20861261-4.html.csvround#choice#player#position#height#weight#col...0the player who weigh the most play in round 32009 indianapolis colts season
922821-28578233-1.html.csvime exchange (including spot , credit and forw...1for 2007 / 08 , metal - volume (thousand tons)...iran mercantile exchange
\n", + "

92022 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " table_csv \\\n", + "0 2-15401676-3.html.csv \n", + "1 2-15401676-3.html.csv \n", + "2 2-15401676-3.html.csv \n", + "3 2-15401676-3.html.csv \n", + "4 2-15401676-3.html.csv \n", + "... ... \n", + "92278 1-20861261-4.html.csv \n", + "92279 1-20861261-4.html.csv \n", + "92280 1-20861261-4.html.csv \n", + "92281 1-20861261-4.html.csv \n", + "92282 1-28578233-1.html.csv \n", + "\n", + " table_text label \\\n", + "0 date#result#score#brazil scorers#competition\\n... 1 \n", + "1 date#result#score#brazil scorers#competition\\n... 1 \n", + "2 date#result#score#brazil scorers#competition\\n... 1 \n", + "3 date#result#score#brazil scorers#competition\\n... 1 \n", + "4 date#result#score#brazil scorers#competition\\n... 1 \n", + "... ... ... \n", + "92278 round#choice#player#position#height#weight#col... 1 \n", + "92279 round#choice#player#position#height#weight#col... 0 \n", + "92280 round#choice#player#position#height#weight#col... 0 \n", + "92281 round#choice#player#position#height#weight#col... 0 \n", + "92282 ime exchange (including spot , credit and forw... 1 \n", + "\n", + " statement \\\n", + "0 haroldo be mention as a brazil scorer for 2 di... \n", + "1 4 of the 5 game be for the south american cham... \n", + "2 friedenreich be mention as a brazil scorer for... \n", + "3 there be 2 different game where the highest sc... \n", + "4 4 of the 5 game be play in may 1919 \n", + "... ... \n", + "92278 jerraud power , 192 pound (87 kg) , be choose ... \n", + "92279 terrence taylor play for auburn \n", + "92280 curtis painter 's position be quarterback and ... \n", + "92281 the player who weigh the most play in round 3 \n", + "92282 for 2007 / 08 , metal - volume (thousand tons)... \n", + "\n", + " table_caption \n", + "0 1919 in brazilian football \n", + "1 1919 in brazilian football \n", + "2 1919 in brazilian football \n", + "3 1919 in brazilian football \n", + "4 1919 in brazilian football \n", + "... ... \n", + "92278 2009 indianapolis colts season \n", + "92279 2009 indianapolis colts season \n", + "92280 2009 indianapolis colts season \n", + "92281 2009 indianapolis colts season \n", + "92282 iran mercantile exchange \n", + "\n", + "[92022 rows x 5 columns]" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dd2_unique = dd2.drop_duplicates(subset=['table_text', 'statement'])\n", + "dd2_unique" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "b9e5dfb6-eef2-4bc2-8409-ba43ac2da294", + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
statementtable_textpandas_codepandas_eval
0haroldo be mention as a brazil scorer for 2 di...date#result#score#brazil scorers#competition\\n...df['brazil scorers'].apply(lambda x: 'haroldo'...True
14 of the 5 game be for the south american cham...date#result#score#brazil scorers#competition\\n...(df['competition'].value_counts()['south ameri...True
2friedenreich be mention as a brazil scorer for...date#result#score#brazil scorers#competition\\n...df['brazil scorers'].str.contains('friedenreic...True
3there be 2 different game where the highest sc...date#result#score#brazil scorers#competition\\n...len(df[df['score'].str.extract(r'^(\\d+) - \\d+$...True
44 of the 5 game be play in may 1919date#result#score#brazil scorers#competition\\n...(df['date'].str.contains('may') & df['date'].s...True
...............
88215jerraud power , 192 pound (87 kg) , be choose ...round#choice#player#position#height#weight#col...df[(df['player'] == 'jerraud powers') & (df['w...True
88216terrence taylor play for auburnround#choice#player#position#height#weight#col...df[df['player'] == 'terrance taylor']['college...False
88217curtis painter 's position be quarterback and ...round#choice#player#position#height#weight#col...(df[df['player'] == 'curtis painter']['positio...False
88218the player who weigh the most play in round 3round#choice#player#position#height#weight#col...(df.loc[df['weight'].str.extract('(\\\\d+)').ast...False
88219for 2007 / 08 , metal - volume (thousand tons)...ime exchange (including spot , credit and forw...df.loc[df['ime exchange (including spot , cred...True
\n", + "

87974 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " statement \\\n", + "0 haroldo be mention as a brazil scorer for 2 di... \n", + "1 4 of the 5 game be for the south american cham... \n", + "2 friedenreich be mention as a brazil scorer for... \n", + "3 there be 2 different game where the highest sc... \n", + "4 4 of the 5 game be play in may 1919 \n", + "... ... \n", + "88215 jerraud power , 192 pound (87 kg) , be choose ... \n", + "88216 terrence taylor play for auburn \n", + "88217 curtis painter 's position be quarterback and ... \n", + "88218 the player who weigh the most play in round 3 \n", + "88219 for 2007 / 08 , metal - volume (thousand tons)... \n", + "\n", + " table_text \\\n", + "0 date#result#score#brazil scorers#competition\\n... \n", + "1 date#result#score#brazil scorers#competition\\n... \n", + "2 date#result#score#brazil scorers#competition\\n... \n", + "3 date#result#score#brazil scorers#competition\\n... \n", + "4 date#result#score#brazil scorers#competition\\n... \n", + "... ... \n", + "88215 round#choice#player#position#height#weight#col... \n", + "88216 round#choice#player#position#height#weight#col... \n", + "88217 round#choice#player#position#height#weight#col... \n", + "88218 round#choice#player#position#height#weight#col... \n", + "88219 ime exchange (including spot , credit and forw... \n", + "\n", + " pandas_code pandas_eval \n", + "0 df['brazil scorers'].apply(lambda x: 'haroldo'... True \n", + "1 (df['competition'].value_counts()['south ameri... True \n", + "2 df['brazil scorers'].str.contains('friedenreic... True \n", + "3 len(df[df['score'].str.extract(r'^(\\d+) - \\d+$... True \n", + "4 (df['date'].str.contains('may') & df['date'].s... True \n", + "... ... ... \n", + "88215 df[(df['player'] == 'jerraud powers') & (df['w... True \n", + "88216 df[df['player'] == 'terrance taylor']['college... False \n", + "88217 (df[df['player'] == 'curtis painter']['positio... False \n", + "88218 (df.loc[df['weight'].str.extract('(\\\\d+)').ast... False \n", + "88219 df.loc[df['ime exchange (including spot , cred... True \n", + "\n", + "[87974 rows x 4 columns]" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dd_unique = dd.drop_duplicates(subset=['table_text', 'statement'])\n", + "dd_unique" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "f088e59b-eaee-4c58-9b32-e0c1c3286e44", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['statement', 'table_text', 'pandas_code', 'pandas_eval', 'table_csv', 'label', 'table_caption'],\n", + " num_rows: 87974\n", + "})" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "res = pd.merge(dd_unique, dd2_unique, on=['table_text', 'statement'], how='inner')\n", + "res2 = Dataset.from_pandas(res)\n", + "res2" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "437eb38f-ebc1-44ce-854b-ed77ae1410fe", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "53b51c7144174ff6a2e2f92dd82dc929", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Saving the dataset (0/1 shards): 0%| | 0/87974 [00:00 pantabfact_log.txt\n", + "python add_column_defenition.py --inputdata pantab_fact_train_unique_tables_exem --outputdata pantab_fact_train_unique_tables_def --num_proc 16 &> log_pantabfact_def_add.txt" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "800e8a68-dee6-480e-afc6-2fd41d3ee764", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Количество строк с дублирующимися ключами в dd: 488\n" + ] + } + ], + "source": [ + "duplicates_dd = dd.duplicated(subset=['table_text', 'statement'], keep=False).sum()\n", + "print(f\"Количество строк с дублирующимися ключами в dd: {duplicates_dd}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "0563b4c2-5e50-4195-b801-5887c16c9b68", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "9d4126b7f3f949a5a8787220b669ac8d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Saving the dataset (0/1 shards): 0%| | 0/88220 [00:00\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -399,1349 +3486,7018 @@ " \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", + " \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", + "
placeplayercountryscore
01deane bemanunited states68 + 69 = 137- 3
1t2miller barberunited states67 + 71 = 138- 2
2t2bob murphyunited states66 + 72 = 138- 2
34bob rosburgunited states70 + 69 = 139- 101deane bemanunited states68 + 69 = 137- 3
1t2miller barberunited states67 + 71 = 138- 2
2t2bob murphyunited states66 + 72 = 138- 2
34bob rosburgunited states70 + 69 = 139- 1
4t5charles coodyunited states72 + 68 = 140e
5t5al geibergerunited states68 + 72 = 140e
6t5george knudsoncanada70 + 70 = 140e
7t8tony jacklinengland71 + 70 = 141+ 1
8t8johnny millerunited states71 + 70 = 141+ 1
9t8orville moodyunited states71 + 70 = 141+ 1
10t8jack nicklausunited states74 + 67 = 141+ 1
\n", + "" + ], + "text/plain": [ + " place player country score to par\n", + "0 1 deane beman united states 68 + 69 = 137 - 3\n", + "1 t2 miller barber united states 67 + 71 = 138 - 2\n", + "2 t2 bob murphy united states 66 + 72 = 138 - 2\n", + "3 4 bob rosburg united states 70 + 69 = 139 - 1\n", + "4 t5 charles coody united states 72 + 68 = 140 e\n", + "5 t5 al geiberger united states 68 + 72 = 140 e\n", + "6 t5 george knudson canada 70 + 70 = 140 e\n", + "7 t8 tony jacklin england 71 + 70 = 141 + 1\n", + "8 t8 johnny miller united states 71 + 70 = 141 + 1\n", + "9 t8 orville moody united states 71 + 70 = 141 + 1\n", + "10 t8 jack nicklaus united states 74 + 67 = 141 + 1" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "a765ea6e-d141-430c-8908-c191c6a137e0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(20, 20)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "f369b1d6-3aea-49c9-a5c2-bd221d8f8cc1", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Some weights of BertForMultiOutputClassification were not initialized from the model checkpoint at bert-base-uncased and are newly initialized: ['classifier.bias', 'classifier.weight']\n", + "You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n" + ] + } + ], + "source": [ + "model = \"viznet\"\n", + "device = 'cuda'\n", + "model = Doduo(argparse.Namespace(**{'model': model, 'device': device}),basedir='../utils/doduo/')\n", + "tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "4bbe64b5-ba9b-4d8a-b084-2e7ff9c09fdc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " table_id label_ids data\n", + "0 1 0 grand slams australian open french open wimble...\n", + "1 1 0 grand slams a a a a 0 / 0 0 - 0 atp masters se...\n", + "2 1 0 grand slams 1r a a a 0 / 1 0 - 1 atp masters s...\n", + "3 1 0 grand slams 2r a 1r a 0 / 2 1 - 2 atp masters ...\n", + "4 1 0 grand slams 1r 3r 2r 3r 0 / 4 5 - 4 atp master...\n", + "5 1 0 grand slams 1r 3r 3r 2r 0 / 4 5 - 4 atp master...\n", + "6 1 0 grand slams 2r 3r 2r qf 0 / 4 8 - 4 atp master...\n", + "7 1 0 grand slams 1r sf 1r 1r 0 / 4 5 - 4 atp master...\n", + "8 1 0 grand slams 4r 4r a a 0 / 2 5 - 2 atp masters ...\n", + "9 1 0 grand slams 3r 1r 2r 1r 0 / 4 3 - 4 atp master...\n", + "10 1 0 grand slams 2r 3r a qf 0 / 3 7 - 3 atp masters...\n", + "11 1 0 grand slams 1r 1r 4r qf 0 / 4 7 - 4 atp master...\n", + "12 1 0 grand slams a 2r 1r 3r 0 / 3 3 - 3 atp masters...\n", + "13 1 0 grand slams a a a a 0 / 0 0 - 0 atp masters se...\n", + "14 1 0 grand slams a 3r 3r 1r 0 / 3 4 - 3 atp masters...\n", + "15 1 0 grand slams a lq 1r lq 0 / 1 0 - 1 atp masters...\n", + "16 1 0 grand slams 1r a a a 0 / 1 0 - 1 atp masters s...\n", + "17 1 0 grand slams a a a a 0 / 0 0 - 0 atp masters se...\n", + "18 1 0 grand slams 0 / 11 0 / 10 0 / 10 0 / 9 0 / 40 ...\n", + "19 1 0 grand slams 7 - 11 19 - 10 10 - 10 17 - 9 n / ...\n", + "1\n" + ] + } + ], + "source": [ + "p = DFColTypeTablewiseDataset(df, tokenizer)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "15583e59-48a1-4774-9946-aded1ba90821", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "679" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(p.table_df['data_tensor'].to_list()[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "fea24927-fbc6-48c2-acc1-063ecbfeb47f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " table_id label_ids data\n", + "0 1 0 1 t2 t2 4 t5 t5 t5 t8 t8 t8 t8\n", + "1 1 0 deane beman miller barber bob murphy bob rosbu...\n", + "2 1 0 united states united states united states unit...\n", + "3 1 0 68 + 69 = 137 67 + 71 = 138 66 + 72 = 138 70 +...\n", + "4 1 0 - 3 - 2 - 2 - 1 e e e + 1 + 1 + 1 + 1\n", + "1\n", + "data torch.Size([1, 133])\n" + ] + }, + { + "data": { + "text/plain": [ + "'magnus larsson
placerank - 1.0\"str\"0[\"4\", \"t5\", \"t8\"]
playername - 1.0\"str\"0[\"tony jacklin\", \"deane beman\", \"george knudson\"]
countrynationality - 1.0\"str\"0[\"england\", \"united states\", \"united states\"]
scoreweight - 0.98\"str\"0[\"68 + 69 = 137\", \"68 + 72 = 140\", \"70 + 70 = 140\"]
to parsex - 0.65\"str\"0[\"+ 1\", \"- 3\", \"e\"]
'" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "serialize_table(df,description=dataset[7747]['table_caption'],model=model)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "d9de7813-20c8-41e1-91d5-10dccf153f9e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'id': 0,\n", + " 'statement': 'haroldo be mention as a brazil scorer for 2 different game',\n", + " 'label': 1,\n", + " 'table_caption': '1919 in brazilian football',\n", + " 'table_text': 'date#result#score#brazil scorers#competition\\nmay 11 , 1919#w#6 - 0#friedenreich (3) , neco (2) , haroldo#south american championship\\nmay 18 , 1919#w#3 - 1#heitor , amílcar , millon#south american championship\\nmay 26 , 1919#d#2 - 2#neco (2)#south american championship\\nmay 29 , 1919#w#1 - 0#friedenreich#south american championship\\njune 1 , 1919#d#3 - 3#haroldo , arlindo (2)#taça roberto cherry\\n',\n", + " 'pandas_code': \"df['brazil scorers'].apply(lambda x: 'haroldo' in x).sum() == 2\",\n", + " 'pandas_eval': 'True'}" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "{'id': 0,\n", + " 'statement': 'haroldo be mention as a brazil scorer for 2 different game',\n", + " 'label': 1,\n", + " 'table_caption': '1919 in brazilian football',\n", + " 'table_text': 'date#result#score#brazil scorers#competition\\nmay 11 , 1919#w#6 - 0#friedenreich (3) , neco (2) , haroldo#south american championship\\nmay 18 , 1919#w#3 - 1#heitor , amílcar , millon#south american championship\\nmay 26 , 1919#d#2 - 2#neco (2)#south american championship\\nmay 29 , 1919#w#1 - 0#friedenreich#south american championship\\njune 1 , 1919#d#3 - 3#haroldo , arlindo (2)#taça roberto cherry\\n',\n", + " 'pandas_code': \"df['brazil scorers'].apply(lambda x: 'haroldo' in x).sum() == 2\",\n", + " 'pandas_eval': 'True'}\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "01e6b976-836f-409c-873a-0ef4ebd819ba", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/tests'" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pwd" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "53d437d9-89e0-4b77-930a-627430530498", + "metadata": {}, + "outputs": [ + { + "ename": "ModuleNotFoundError", + "evalue": "No module named 'utils'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[2], line 5\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mio\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m StringIO\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mtqdm\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m tqdm\n\u001b[0;32m----> 5\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m serialize_table\n\u001b[1;32m 6\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mutils\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdoduo\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mdoduo\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mimport\u001b[39;00m Doduo\n\u001b[1;32m 7\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01margparse\u001b[39;00m\n", + "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'utils'" + ] + } + ], + "source": [ + "import json\n", + "import pandas as pd\n", + "from io import StringIO\n", + "from tqdm import tqdm\n", + "from utils.utils import serialize_table\n", + "from utils.doduo.doduo import Doduo\n", + "import argparse\n", + "from functools import partial\n", + "\n", + "def convert_dataset_to_nlsep_format(model,data):\n", + " df = pd.read_csv(StringIO(data['table_text']), delimiter='#')\n", + " data['nlsep_query'] = data['statement'] + ' ' + serialize_table_to_tapex_format(df)\n", + " data['semtab_query'] = data['statement'] + ' ' + serialize_table(df,model=model, description=data['table_caption'],basedir='../utils/doduo/')\n", + " return data\n" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "8a50d816-3284-4e2e-b658-2d3427f05a8f", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Some weights of BertForMultiOutputClassification were not initialized from the model checkpoint at bert-base-uncased and are newly initialized: ['classifier.bias', 'classifier.weight']\n", + "You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n" + ] + } + ], + "source": [ + "model_type = \"viznet\"\n", + "device = 'cpu'\n", + "model = Doduo(argparse.Namespace(**{'model': model_type, 'device': device}),basedir='../utils/doduo/')\n", + "doduo_convert_dataset_to_nlsep_format = partial(convert_dataset_to_nlsep_format,model)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "8fb78845-833a-4204-9378-9036b45aa487", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "47d94724-2e8f-4068-a593-8ed82f0538c2", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'doduo_convert_dataset_to_nlsep_format' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[7], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m dataset2 \u001b[38;5;241m=\u001b[39m dataset\u001b[38;5;241m.\u001b[39mmap(\u001b[43mdoduo_convert_dataset_to_nlsep_format\u001b[49m)\n\u001b[1;32m 2\u001b[0m dataset2\u001b[38;5;241m.\u001b[39msave_to_disk(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m./new_dataset\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", + "\u001b[0;31mNameError\u001b[0m: name 'doduo_convert_dataset_to_nlsep_format' is not defined" + ] + } + ], + "source": [ + "dataset2 = dataset.map(doduo_convert_dataset_to_nlsep_format)\n", + "dataset2.save_to_disk('./new_dataset')" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "fca864c2-b96f-4628-87ce-930fc4aa3acf", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Saving the dataset (1/1 shards): 100%|██████████| 88223/88223 [00:00<00:00, 549715.04 examples/s]\n" + ] + } + ], + "source": [ + "dataset2.save_to_disk('./new_dataset')" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "8757a358-ed02-430d-9232-9bd3f468ea45", + "metadata": {}, + "outputs": [], + "source": [ + "from datasets import load_from_disk" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "bb41e940-dd62-46ad-8916-54701b0a72b1", + "metadata": {}, + "outputs": [], + "source": [ + "data = load_from_disk('new_dataset')" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "afb0fe7e-d90f-4dc0-80c7-5a08a3c95462", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['id', 'statement', 'label', 'table_caption', 'table_text', 'pandas_code', 'pandas_eval', 'nlsep_query', 'semtab_query'],\n", + " num_rows: 88223\n", + "})" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "98bb02d7-1a3f-4d27-8483-cad70edd1d41", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Filter: 100%|██████████| 88223/88223 [00:00<00:00, 107486.06 examples/s]\n" + ] + } + ], + "source": [ + "data_false = data.filter(lambda x: True if x['semtab_query']=='None' else False)" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "687f6e57-fac8-4d21-bf55-379e07e98e24", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/bin/python\n" + ] + } + ], + "source": [ + "import sys\n", + "print(sys.executable)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "c1a94c7a-4dc3-4976-adf2-6be48af01691", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.12128356551012774" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_false.shape[0]/data.shape[0] *100" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "44327594-d45c-4c02-8106-3a76152009b6", + "metadata": {}, + "outputs": [], + "source": [ + "data_true = data.filter(lambda x: True if x['semtab_query']!='None' else False)" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "id": "494e8f05-4350-4fef-9eac-ecf32d473651", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Saving the dataset (1/1 shards): 100%|██████████| 88116/88116 [00:00<00:00, 96170.74 examples/s]\n" + ] + } + ], + "source": [ + "data_true.save_to_disk('none_filtered_new_dataset')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e6f22813-38be-4b5a-89ae-a4b578656c26", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 101, + "id": "bc9dcfa8-fc0b-4682-a564-313a4270bb87", + "metadata": {}, + "outputs": [ + { + "ename": "FileNotFoundError", + "evalue": "Directory none_filtered_new_dataset not found", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[101], line 4\u001b[0m\n\u001b[1;32m 2\u001b[0m entry[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mproto_query\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mentry[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mstatement\u001b[39m\u001b[38;5;124m\"\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mentry[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtable_text\u001b[39m\u001b[38;5;124m\"\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m entry\n\u001b[0;32m----> 4\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[43mload_from_disk\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mnone_filtered_new_dataset\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 5\u001b[0m data2 \u001b[38;5;241m=\u001b[39m data\u001b[38;5;241m.\u001b[39mmap(name_proto_query,num_proc\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m17\u001b[39m)\n", + "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/datasets/load.py:1471\u001b[0m, in \u001b[0;36mload_from_disk\u001b[0;34m(dataset_path, keep_in_memory, storage_options)\u001b[0m\n\u001b[1;32m 1469\u001b[0m fs, \u001b[38;5;241m*\u001b[39m_ \u001b[38;5;241m=\u001b[39m url_to_fs(dataset_path, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m(storage_options \u001b[38;5;129;01mor\u001b[39;00m {}))\n\u001b[1;32m 1470\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m fs\u001b[38;5;241m.\u001b[39mexists(dataset_path):\n\u001b[0;32m-> 1471\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mDirectory \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mdataset_path\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m not found\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 1472\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m fs\u001b[38;5;241m.\u001b[39misfile(posixpath\u001b[38;5;241m.\u001b[39mjoin(dataset_path, config\u001b[38;5;241m.\u001b[39mDATASET_INFO_FILENAME)) \u001b[38;5;129;01mand\u001b[39;00m fs\u001b[38;5;241m.\u001b[39misfile(\n\u001b[1;32m 1473\u001b[0m posixpath\u001b[38;5;241m.\u001b[39mjoin(dataset_path, config\u001b[38;5;241m.\u001b[39mDATASET_STATE_JSON_FILENAME)\n\u001b[1;32m 1474\u001b[0m ):\n\u001b[1;32m 1475\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m Dataset\u001b[38;5;241m.\u001b[39mload_from_disk(dataset_path, keep_in_memory\u001b[38;5;241m=\u001b[39mkeep_in_memory, storage_options\u001b[38;5;241m=\u001b[39mstorage_options)\n", + "\u001b[0;31mFileNotFoundError\u001b[0m: Directory none_filtered_new_dataset not found" + ] + } + ], + "source": [ + "def name_proto_query(entry):\n", + " entry['proto_query'] = f'{entry[\"statement\"]} {entry[\"table_text\"]}'\n", + " return entry\n", + "data = load_from_disk('none_filtered_new_dataset')\n", + "data2 = data.map(name_proto_query,num_proc=17)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "ae5a5b67-80cd-4bed-bfac-2760e4720265", + "metadata": {}, + "outputs": [], + "source": [ + "data = load_from_disk('tab_fact_test_nlsep/')\n", + "data_nlsep = data.to_pandas()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "2563c4c3-fe8d-4d14-9b18-fd2f92c69fe1", + "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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idtable_csvtable_textlabelstatementtable_captiondefgendefgen_answdefgen_labeldefgen_answ_correct
002-1570274-4.html.csvtournament#wins#top - 5#top - 10#top - 25#even...1tony lema be in the top 5 for the master tourn...tony lema<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...\\n\"PANDA\": df.loc[df['tournament'].isin(['mast...TrueNone
102-1570274-4.html.csvtournament#wins#top - 5#top - 10#top - 25#even...1tournament that tony lema have participate in ...tony lema<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...\"PANDA\": all(tournament in df['tournament'].va...NoneNone
202-1570274-4.html.csvtournament#wins#top - 5#top - 10#top - 25#even...1the only tournament that tony lema win in be t...tony lema<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...\\n\"PANDA\": df[df['wins'] == 1]['tournament'].e...FalseNone
302-1570274-4.html.csvtournament#wins#top - 5#top - 10#top - 25#even...1tony lema do not win in the us opentony lema<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...\\n\"PANDA\": df.loc[df['tournament'] == 'us open...TrueNone
402-1570274-4.html.csvtournament#wins#top - 5#top - 10#top - 25#even...1tony lema make it to the top 10 in the pga cha...tony lema<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...\"PANDA\": df.loc[df['tournament'] == 'pga champ...TrueNone
.................................
1277416931-182499-1.html.csvenzyme#location#substrate#product#chromosome#e...0the location of substrate porphobilinogen and ...porphyrin<TABLE DESCRIPTION=\"porphyrin\"><HEADER NAME=\"e...\\n\"PANDA\": df[(df['substrate'] == 'porphobilin...FalseNone
1277516942-14418812-1.html.csvweek#date#opponent#time ( et )#result#record#g...1the new york jet play at 1:00 pm on sunday , n...1977 pittsburgh steelers season<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...\\n\"PANDA\": ((df['opponent'] == 'new york jets'...TrueNone
1277616942-14418812-1.html.csvweek#date#opponent#time ( et )#result#record#g...1during week 1 , the game start at 9:00 pm1977 pittsburgh steelers season<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...\\n\"PANDA\": df.loc[df['week'] == 1, 'time ( et ...TrueNone
1277716942-14418812-1.html.csvweek#date#opponent#time ( et )#result#record#g...0the seattle seahawks play against the new york...1977 pittsburgh steelers season<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...\\n\"PANDA\": ((df['opponent'] == 'seattle seahaw...FalseNone
1277816942-14418812-1.html.csvweek#date#opponent#time ( et )#result#record#g...0during week 14 the game start at 9:00 pm1977 pittsburgh steelers season<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...\\n\"PANDA\": df.loc[df['week'] == 14, 'time ( et...FalseNone
\n", + "

12779 rows × 10 columns

\n", + "
" + ], + "text/plain": [ + " id table_csv \\\n", + "0 0 2-1570274-4.html.csv \n", + "1 0 2-1570274-4.html.csv \n", + "2 0 2-1570274-4.html.csv \n", + "3 0 2-1570274-4.html.csv \n", + "4 0 2-1570274-4.html.csv \n", + "... ... ... \n", + "12774 1693 1-182499-1.html.csv \n", + "12775 1694 2-14418812-1.html.csv \n", + "12776 1694 2-14418812-1.html.csv \n", + "12777 1694 2-14418812-1.html.csv \n", + "12778 1694 2-14418812-1.html.csv \n", + "\n", + " table_text label \\\n", + "0 tournament#wins#top - 5#top - 10#top - 25#even... 1 \n", + "1 tournament#wins#top - 5#top - 10#top - 25#even... 1 \n", + "2 tournament#wins#top - 5#top - 10#top - 25#even... 1 \n", + "3 tournament#wins#top - 5#top - 10#top - 25#even... 1 \n", + "4 tournament#wins#top - 5#top - 10#top - 25#even... 1 \n", + "... ... ... \n", + "12774 enzyme#location#substrate#product#chromosome#e... 0 \n", + "12775 week#date#opponent#time ( et )#result#record#g... 1 \n", + "12776 week#date#opponent#time ( et )#result#record#g... 1 \n", + "12777 week#date#opponent#time ( et )#result#record#g... 0 \n", + "12778 week#date#opponent#time ( et )#result#record#g... 0 \n", + "\n", + " statement \\\n", + "0 tony lema be in the top 5 for the master tourn... \n", + "1 tournament that tony lema have participate in ... \n", + "2 the only tournament that tony lema win in be t... \n", + "3 tony lema do not win in the us open \n", + "4 tony lema make it to the top 10 in the pga cha... \n", + "... ... \n", + "12774 the location of substrate porphobilinogen and ... \n", + "12775 the new york jet play at 1:00 pm on sunday , n... \n", + "12776 during week 1 , the game start at 9:00 pm \n", + "12777 the seattle seahawks play against the new york... \n", + "12778 during week 14 the game start at 9:00 pm \n", + "\n", + " table_caption \\\n", + "0 tony lema \n", + "1 tony lema \n", + "2 tony lema \n", + "3 tony lema \n", + "4 tony lema \n", + "... ... \n", + "12774 porphyrin \n", + "12775 1977 pittsburgh steelers season \n", + "12776 1977 pittsburgh steelers season \n", + "12777 1977 pittsburgh steelers season \n", + "12778 1977 pittsburgh steelers season \n", + "\n", + " defgen \\\n", + "0
\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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idtable_csvtable_textlabelstatementtable_captioncossimsemtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_answsemtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_labelsemtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_answ_correct
002-1570274-4.html.csvtournament#wins#top - 5#top - 10#top - 25#even...1tony lema be in the top 5 for the master tourn...tony lema<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...```json\\n\"PANDA\": \"(df['tournament'].isin(['ma...TrueNone
102-1570274-4.html.csvtournament#wins#top - 5#top - 10#top - 25#even...1tournament that tony lema have participate in ...tony lema<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...Here is the single-line pandas expression to v...FalseNone
202-1570274-4.html.csvtournament#wins#top - 5#top - 10#top - 25#even...1the only tournament that tony lema win in be t...tony lema<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...```json\\n\"PANDA\": \"df['tournament'].eq('us ope...TrueNone
302-1570274-4.html.csvtournament#wins#top - 5#top - 10#top - 25#even...1tony lema do not win in the us opentony lema<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...Here is the single-line pandas expression that...FalseThe error is due to the fact that the column '...
402-1570274-4.html.csvtournament#wins#top - 5#top - 10#top - 25#even...1tony lema make it to the top 10 in the pga cha...tony lema<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...Here is the single-line pandas expression that...FalseNone
.................................
1277416931-182499-1.html.csvenzyme#location#substrate#product#chromosome#e...0the location of substrate porphobilinogen and ...porphyrin<TABLE DESCRIPTION=\"porphyrin\"><HEADER NAME=\"e...Here is the single-line pandas expression base...FalseNone
1277516942-14418812-1.html.csvweek#date#opponent#time ( et )#result#record#g...1the new york jet play at 1:00 pm on sunday , n...1977 pittsburgh steelers season<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...Here is the single-line pandas expression that...FalseNone
1277616942-14418812-1.html.csvweek#date#opponent#time ( et )#result#record#g...1during week 1 , the game start at 9:00 pm1977 pittsburgh steelers season<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...```\\n{\"PANDA\": \"df['time ( et )'].iloc[0] == '...TrueNone
1277716942-14418812-1.html.csvweek#date#opponent#time ( et )#result#record#g...0the seattle seahawks play against the new york...1977 pittsburgh steelers season<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...Here is the single-line pandas expression that...TrueThe error in the provided code is due to the i...
1277816942-14418812-1.html.csvweek#date#opponent#time ( et )#result#record#g...0during week 14 the game start at 9:00 pm1977 pittsburgh steelers season<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...```json\\n\"PANDA\": \"df['time ( et )'].str.conta...TrueNone
\n", + "

12779 rows × 10 columns

\n", + "" + ], + "text/plain": [ + " id table_csv \\\n", + "0 0 2-1570274-4.html.csv \n", + "1 0 2-1570274-4.html.csv \n", + "2 0 2-1570274-4.html.csv \n", + "3 0 2-1570274-4.html.csv \n", + "4 0 2-1570274-4.html.csv \n", + "... ... ... \n", + "12774 1693 1-182499-1.html.csv \n", + "12775 1694 2-14418812-1.html.csv \n", + "12776 1694 2-14418812-1.html.csv \n", + "12777 1694 2-14418812-1.html.csv \n", + "12778 1694 2-14418812-1.html.csv \n", + "\n", + " table_text label \\\n", + "0 tournament#wins#top - 5#top - 10#top - 25#even... 1 \n", + "1 tournament#wins#top - 5#top - 10#top - 25#even... 1 \n", + "2 tournament#wins#top - 5#top - 10#top - 25#even... 1 \n", + "3 tournament#wins#top - 5#top - 10#top - 25#even... 1 \n", + "4 tournament#wins#top - 5#top - 10#top - 25#even... 1 \n", + "... ... ... \n", + "12774 enzyme#location#substrate#product#chromosome#e... 0 \n", + "12775 week#date#opponent#time ( et )#result#record#g... 1 \n", + "12776 week#date#opponent#time ( et )#result#record#g... 1 \n", + "12777 week#date#opponent#time ( et )#result#record#g... 0 \n", + "12778 week#date#opponent#time ( et )#result#record#g... 0 \n", + "\n", + " statement \\\n", + "0 tony lema be in the top 5 for the master tourn... \n", + "1 tournament that tony lema have participate in ... \n", + "2 the only tournament that tony lema win in be t... \n", + "3 tony lema do not win in the us open \n", + "4 tony lema make it to the top 10 in the pga cha... \n", + "... ... \n", + "12774 the location of substrate porphobilinogen and ... \n", + "12775 the new york jet play at 1:00 pm on sunday , n... \n", + "12776 during week 1 , the game start at 9:00 pm \n", + "12777 the seattle seahawks play against the new york... \n", + "12778 during week 14 the game start at 9:00 pm \n", + "\n", + " table_caption \\\n", + "0 tony lema \n", + "1 tony lema \n", + "2 tony lema \n", + "3 tony lema \n", + "4 tony lema \n", + "... ... \n", + "12774 porphyrin \n", + "12775 1977 pittsburgh steelers season \n", + "12776 1977 pittsburgh steelers season \n", + "12777 1977 pittsburgh steelers season \n", + "12778 1977 pittsburgh steelers season \n", + "\n", + " cossim \\\n", + "0
\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", + " \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", + " \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", + " \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", + " \n", + " \n", + " \n", + "
id_xtable_csvtable_textlabelstatementtable_captionnlsep_querysemtab_querynlsep_answnlsep_label...id_ydefgensemtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_answ_xdefgen_labeldefgen_answ_correctidcossimsemtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_answ_ysemtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_labelsemtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_answ_correct
002-1570274-4.html.csvtournament#wins#top - 5#top - 10#top - 25#even...1tony lema be in the top 5 for the master tourn...tony lematony lema be in the top 5 for the master tourn...tony lema be in the top 5 for the master tourn...Here is a concise Pandas expression that check...False...0<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...\\n\"PANDA\": df.loc[df['tournament'].isin(['mast...TrueNone0<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...```json\\n\"PANDA\": \"(df['tournament'].isin(['ma...TrueNone
102-1570274-4.html.csvtournament#wins#top - 5#top - 10#top - 25#even...1tournament that tony lema have participate in ...tony lematournament that tony lema have participate in ...tournament that tony lema have participate in ...Here is a single-line pandas expression that v...False...0<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...\"PANDA\": all(tournament in df['tournament'].va...NoneNone0<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...Here is the single-line pandas expression to v...FalseNone
202-1570274-4.html.csvtournament#wins#top - 5#top - 10#top - 25#even...1the only tournament that tony lema win in be t...tony lemathe only tournament that tony lema win in be t...the only tournament that tony lema win in be t...Here is the single-line pandas expression to v...True...0<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...\\n\"PANDA\": df[df['wins'] == 1]['tournament'].e...FalseNone0<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...```json\\n\"PANDA\": \"df['tournament'].eq('us ope...TrueNone
302-1570274-4.html.csvtournament#wins#top - 5#top - 10#top - 25#even...1tony lema do not win in the us opentony lematony lema do not win in the us open col : tou...tony lema do not win in the us open <TABLE><DE...Here is a single-line pandas expression that v...True...0<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...\\n\"PANDA\": df.loc[df['tournament'] == 'us open...TrueNone0<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...Here is the single-line pandas expression that...FalseThe error is due to the fact that the column '...
402-1570274-4.html.csvtournament#wins#top - 5#top - 10#top - 25#even...1tony lema make it to the top 10 in the pga cha...tony lematony lema make it to the top 10 in the pga cha...tony lema make it to the top 10 in the pga cha...Here is a single-line pandas expression that c...True...0<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...\"PANDA\": df.loc[df['tournament'] == 'pga champ...TrueNone0<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...Here is the single-line pandas expression that...FalseNone
..................................................................
1288216931-182499-1.html.csvenzyme#location#substrate#product#chromosome#e...0the location of substrate porphobilinogen and ...porphyrinthe location of substrate porphobilinogen and ...the location of substrate porphobilinogen and ...Here is the single-line pandas expression that...True...1693<TABLE DESCRIPTION=\"porphyrin\"><HEADER NAME=\"e...\\n\"PANDA\": df[(df['substrate'] == 'porphobilin...FalseNone1693<TABLE DESCRIPTION=\"porphyrin\"><HEADER NAME=\"e...Here is the single-line pandas expression base...FalseNone
1288316942-14418812-1.html.csvweek#date#opponent#time ( et )#result#record#g...1the new york jet play at 1:00 pm on sunday , n...1977 pittsburgh steelers seasonthe new york jet play at 1:00 pm on sunday , n...the new york jet play at 1:00 pm on sunday , n...Here is the single-line pandas expression that...False...1694<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...\\n\"PANDA\": ((df['opponent'] == 'new york jets'...TrueNone1694<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...Here is the single-line pandas expression that...FalseNone
1288416942-14418812-1.html.csvweek#date#opponent#time ( et )#result#record#g...1during week 1 , the game start at 9:00 pm1977 pittsburgh steelers seasonduring week 1 , the game start at 9:00 pm col...during week 1 , the game start at 9:00 pm <TAB...Here is the single-line pandas expression that...True...1694<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...\\n\"PANDA\": df.loc[df['week'] == 1, 'time ( et ...TrueNone1694<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...```\\n{\"PANDA\": \"df['time ( et )'].iloc[0] == '...TrueNone
1288516942-14418812-1.html.csvweek#date#opponent#time ( et )#result#record#g...0the seattle seahawks play against the new york...1977 pittsburgh steelers seasonthe seattle seahawks play against the new york...the seattle seahawks play against the new york...```json\\n{\\n \"PANDA\": \"df[(df['date'] == 'sun...True...1694<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...\\n\"PANDA\": ((df['opponent'] == 'seattle seahaw...FalseNone1694<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...Here is the single-line pandas expression that...TrueThe error in the provided code is due to the i...
1288616942-14418812-1.html.csvweek#date#opponent#time ( et )#result#record#g...0during week 14 the game start at 9:00 pm1977 pittsburgh steelers seasonduring week 14 the game start at 9:00 pm col ...during week 14 the game start at 9:00 pm <TABL...```json\\n\"PANDA\": \"df['time ( et )'].str.conta...True...1694<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...\\n\"PANDA\": df.loc[df['week'] == 14, 'time ( et...FalseNone1694<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...```json\\n\"PANDA\": \"df['time ( et )'].str.conta...TrueNone
\n", + "

12887 rows × 22 columns

\n", + "" + ], + "text/plain": [ + " id_x table_csv \\\n", + "0 0 2-1570274-4.html.csv \n", + "1 0 2-1570274-4.html.csv \n", + "2 0 2-1570274-4.html.csv \n", + "3 0 2-1570274-4.html.csv \n", + "4 0 2-1570274-4.html.csv \n", + "... ... ... \n", + "12882 1693 1-182499-1.html.csv \n", + "12883 1694 2-14418812-1.html.csv \n", + "12884 1694 2-14418812-1.html.csv \n", + "12885 1694 2-14418812-1.html.csv \n", + "12886 1694 2-14418812-1.html.csv \n", + "\n", + " table_text label \\\n", + "0 tournament#wins#top - 5#top - 10#top - 25#even... 1 \n", + "1 tournament#wins#top - 5#top - 10#top - 25#even... 1 \n", + "2 tournament#wins#top - 5#top - 10#top - 25#even... 1 \n", + "3 tournament#wins#top - 5#top - 10#top - 25#even... 1 \n", + "4 tournament#wins#top - 5#top - 10#top - 25#even... 1 \n", + "... ... ... \n", + "12882 enzyme#location#substrate#product#chromosome#e... 0 \n", + "12883 week#date#opponent#time ( et )#result#record#g... 1 \n", + "12884 week#date#opponent#time ( et )#result#record#g... 1 \n", + "12885 week#date#opponent#time ( et )#result#record#g... 0 \n", + "12886 week#date#opponent#time ( et )#result#record#g... 0 \n", + "\n", + " statement \\\n", + "0 tony lema be in the top 5 for the master tourn... \n", + "1 tournament that tony lema have participate in ... \n", + "2 the only tournament that tony lema win in be t... \n", + "3 tony lema do not win in the us open \n", + "4 tony lema make it to the top 10 in the pga cha... \n", + "... ... \n", + "12882 the location of substrate porphobilinogen and ... \n", + "12883 the new york jet play at 1:00 pm on sunday , n... \n", + "12884 during week 1 , the game start at 9:00 pm \n", + "12885 the seattle seahawks play against the new york... \n", + "12886 during week 14 the game start at 9:00 pm \n", + "\n", + " table_caption \\\n", + "0 tony lema \n", + "1 tony lema \n", + "2 tony lema \n", + "3 tony lema \n", + "4 tony lema \n", + "... ... \n", + "12882 porphyrin \n", + "12883 1977 pittsburgh steelers season \n", + "12884 1977 pittsburgh steelers season \n", + "12885 1977 pittsburgh steelers season \n", + "12886 1977 pittsburgh steelers season \n", + "\n", + " nlsep_query \\\n", + "0 tony lema be in the top 5 for the master tourn... \n", + "1 tournament that tony lema have participate in ... \n", + "2 the only tournament that tony lema win in be t... \n", + "3 tony lema do not win in the us open col : tou... \n", + "4 tony lema make it to the top 10 in the pga cha... \n", + "... ... \n", + "12882 the location of substrate porphobilinogen and ... \n", + "12883 the new york jet play at 1:00 pm on sunday , n... \n", + "12884 during week 1 , the game start at 9:00 pm col... \n", + "12885 the seattle seahawks play against the new york... \n", + "12886 during week 14 the game start at 9:00 pm col ... \n", + "\n", + " semtab_query \\\n", + "0 tony lema be in the top 5 for the master tourn... \n", + "1 tournament that tony lema have participate in ... \n", + "2 the only tournament that tony lema win in be t... \n", + "3 tony lema do not win in the us open
\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", + " \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", + " \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", + " \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", + "
id_xtable_csvtable_textlabelstatementtable_captionnlsep_querysemtab_querynlsep_answnlsep_labelnlsep_answ_correctnlsepid_ydefgenidsemtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_answsemtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_labelsemtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_answ_correct
002-1570274-4.html.csvtournament#wins#top - 5#top - 10#top - 25#even...1tony lema be in the top 5 for the master tourn...tony lematony lema be in the top 5 for the master tourn...tony lema be in the top 5 for the master tourn...Here is a concise Pandas expression that check...FalseNonecol : tournament | wins | top - 5 | top - 10 |...0<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...0<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...```json\\n\"PANDA\": \"(df['tournament'].isin(['ma...TrueNone
102-1570274-4.html.csvtournament#wins#top - 5#top - 10#top - 25#even...1tournament that tony lema have participate in ...tony lematournament that tony lema have participate in ...tournament that tony lema have participate in ...Here is a single-line pandas expression that v...FalseNonecol : tournament | wins | top - 5 | top - 10 |...0<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...0<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...Here is the single-line pandas expression to v...FalseNone
202-1570274-4.html.csvtournament#wins#top - 5#top - 10#top - 25#even...1the only tournament that tony lema win in be t...tony lemathe only tournament that tony lema win in be t...the only tournament that tony lema win in be t...Here is the single-line pandas expression to v...TrueNonecol : tournament | wins | top - 5 | top - 10 |...0<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...0<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...```json\\n\"PANDA\": \"df['tournament'].eq('us ope...TrueNone
302-1570274-4.html.csvtournament#wins#top - 5#top - 10#top - 25#even...1tony lema do not win in the us opentony lematony lema do not win in the us open col : tou...tony lema do not win in the us open <TABLE><DE...Here is a single-line pandas expression that v...TrueNonecol : tournament | wins | top - 5 | top - 10 |...0<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...0<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...Here is the single-line pandas expression that...FalseThe error is due to the fact that the column '...
402-1570274-4.html.csvtournament#wins#top - 5#top - 10#top - 25#even...1tony lema make it to the top 10 in the pga cha...tony lematony lema make it to the top 10 in the pga cha...tony lema make it to the top 10 in the pga cha...Here is a single-line pandas expression that c...TrueNonecol : tournament | wins | top - 5 | top - 10 |...0<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...0<TABLE DESCRIPTION=\"tony lema\"><HEADER NAME=\"t...Here is the single-line pandas expression that...FalseNone
............................................................
1288216931-182499-1.html.csvenzyme#location#substrate#product#chromosome#e...0the location of substrate porphobilinogen and ...porphyrinthe location of substrate porphobilinogen and ...the location of substrate porphobilinogen and ...Here is the single-line pandas expression that...TrueNonecol : enzyme | location | substrate | product ...1693<TABLE DESCRIPTION=\"porphyrin\"><HEADER NAME=\"e...1693<TABLE DESCRIPTION=\"porphyrin\"><HEADER NAME=\"e...Here is the single-line pandas expression base...FalseNone
1288316942-14418812-1.html.csvweek#date#opponent#time ( et )#result#record#g...1the new york jet play at 1:00 pm on sunday , n...1977 pittsburgh steelers seasonthe new york jet play at 1:00 pm on sunday , n...the new york jet play at 1:00 pm on sunday , n...Here is the single-line pandas expression that...FalseNonecol : week | date | opponent | time ( et ) | r...1694<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...1694<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...Here is the single-line pandas expression that...FalseNone
1288416942-14418812-1.html.csvweek#date#opponent#time ( et )#result#record#g...1during week 1 , the game start at 9:00 pm1977 pittsburgh steelers seasonduring week 1 , the game start at 9:00 pm col...during week 1 , the game start at 9:00 pm <TAB...Here is the single-line pandas expression that...TrueNonecol : week | date | opponent | time ( et ) | r...1694<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...1694<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...```\\n{\"PANDA\": \"df['time ( et )'].iloc[0] == '...TrueNone
1288516942-14418812-1.html.csvweek#date#opponent#time ( et )#result#record#g...0the seattle seahawks play against the new york...1977 pittsburgh steelers seasonthe seattle seahawks play against the new york...the seattle seahawks play against the new york...```json\\n{\\n \"PANDA\": \"df[(df['date'] == 'sun...TrueNonecol : week | date | opponent | time ( et ) | r...1694<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...1694<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...Here is the single-line pandas expression that...TrueThe error in the provided code is due to the i...
1288616942-14418812-1.html.csvweek#date#opponent#time ( et )#result#record#g...0during week 14 the game start at 9:00 pm1977 pittsburgh steelers seasonduring week 14 the game start at 9:00 pm col ...during week 14 the game start at 9:00 pm <TABL...```json\\n\"PANDA\": \"df['time ( et )'].str.conta...TrueHere is the corrected pandas code:\\n\\n```pytho...col : week | date | opponent | time ( et ) | r...1694<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...1694<TABLE DESCRIPTION=\"1977 pittsburgh steelers s...```json\\n\"PANDA\": \"df['time ( et )'].str.conta...TrueNone
\n", + "

12887 rows × 19 columns

\n", + "" + ], + "text/plain": [ + " id_x table_csv \\\n", + "0 0 2-1570274-4.html.csv \n", + "1 0 2-1570274-4.html.csv \n", + "2 0 2-1570274-4.html.csv \n", + "3 0 2-1570274-4.html.csv \n", + "4 0 2-1570274-4.html.csv \n", + "... ... ... \n", + "12882 1693 1-182499-1.html.csv \n", + "12883 1694 2-14418812-1.html.csv \n", + "12884 1694 2-14418812-1.html.csv \n", + "12885 1694 2-14418812-1.html.csv \n", + "12886 1694 2-14418812-1.html.csv \n", + "\n", + " table_text label \\\n", + "0 tournament#wins#top - 5#top - 10#top - 25#even... 1 \n", + "1 tournament#wins#top - 5#top - 10#top - 25#even... 1 \n", + "2 tournament#wins#top - 5#top - 10#top - 25#even... 1 \n", + "3 tournament#wins#top - 5#top - 10#top - 25#even... 1 \n", + "4 tournament#wins#top - 5#top - 10#top - 25#even... 1 \n", + "... ... ... \n", + "12882 enzyme#location#substrate#product#chromosome#e... 0 \n", + "12883 week#date#opponent#time ( et )#result#record#g... 1 \n", + "12884 week#date#opponent#time ( et )#result#record#g... 1 \n", + "12885 week#date#opponent#time ( et )#result#record#g... 0 \n", + "12886 week#date#opponent#time ( et )#result#record#g... 0 \n", + "\n", + " statement \\\n", + "0 tony lema be in the top 5 for the master tourn... \n", + "1 tournament that tony lema have participate in ... \n", + "2 the only tournament that tony lema win in be t... \n", + "3 tony lema do not win in the us open \n", + "4 tony lema make it to the top 10 in the pga cha... \n", + "... ... \n", + "12882 the location of substrate porphobilinogen and ... \n", + "12883 the new york jet play at 1:00 pm on sunday , n... \n", + "12884 during week 1 , the game start at 9:00 pm \n", + "12885 the seattle seahawks play against the new york... \n", + "12886 during week 14 the game start at 9:00 pm \n", + "\n", + " table_caption \\\n", + "0 tony lema \n", + "1 tony lema \n", + "2 tony lema \n", + "3 tony lema \n", + "4 tony lema \n", + "... ... \n", + "12882 porphyrin \n", + "12883 1977 pittsburgh steelers season \n", + "12884 1977 pittsburgh steelers season \n", + "12885 1977 pittsburgh steelers season \n", + "12886 1977 pittsburgh steelers season \n", + "\n", + " nlsep_query \\\n", + "0 tony lema be in the top 5 for the master tourn... \n", + "1 tournament that tony lema have participate in ... \n", + "2 the only tournament that tony lema win in be t... \n", + "3 tony lema do not win in the us open col : tou... \n", + "4 tony lema make it to the top 10 in the pga cha... \n", + "... ... \n", + "12882 the location of substrate porphobilinogen and ... \n", + "12883 the new york jet play at 1:00 pm on sunday , n... \n", + "12884 during week 1 , the game start at 9:00 pm col... \n", + "12885 the seattle seahawks play against the new york... \n", + "12886 during week 14 the game start at 9:00 pm col ... \n", + "\n", + " semtab_query \\\n", + "0 tony lema be in the top 5 for the master tourn... \n", + "1 tournament that tony lema have participate in ... \n", + "2 the only tournament that tony lema win in be t... \n", + "3 tony lema do not win in the us open
1919 in brazilian football
datebirthDate - 1.0\"str\"0[\"may 26 , 1919\", \"may 29 , 1919\", \"june 1 , 1919\"]
resultcode - 0.6\"str\"0[\"d\", \"d\", \"w\"]
score\"str\"0[\"3 - 3\", \"6 - 0\", \"3 - 1\"]
brazil scorersresult - 1.0\"str\"0[\"neco (2)\", \"heitor , am\\\\u00edlcar , millon\", \"friedenreich (3) , neco (2) , haroldo\"]
competitionnotes - 0.98\"str\"0[\"south american championship\", \"south american championship\", \"ta\\\\u00e7a roberto cherry\"]
',\n", + " 'proto_query': 'haroldo be mention as a brazil scorer for 2 different game date#result#score#brazil scorers#competition\\nmay 11 , 1919#w#6 - 0#friedenreich (3) , neco (2) , haroldo#south american championship\\nmay 18 , 1919#w#3 - 1#heitor , amílcar , millon#south american championship\\nmay 26 , 1919#d#2 - 2#neco (2)#south american championship\\nmay 29 , 1919#w#1 - 0#friedenreich#south american championship\\njune 1 , 1919#d#3 - 3#haroldo , arlindo (2)#taça roberto cherry\\n'}" + ] + }, + "execution_count": 105, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data2[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "id": "b7465871-bb60-4114-88eb-bd40ed16e622", + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'data_false' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[104], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mdata_false\u001b[49m\n", + "\u001b[0;31mNameError\u001b[0m: name 'data_false' is not defined" + ] + } + ], + "source": [ + "data_false" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "5afcb686-d897-47f0-b537-873aec267aa5", + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'data_true' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[13], line 4\u001b[0m\n\u001b[1;32m 2\u001b[0m df \u001b[38;5;241m=\u001b[39m pd\u001b[38;5;241m.\u001b[39mread_csv(StringIO(table_str), delimiter\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m#\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m df\u001b[38;5;241m.\u001b[39mshape[\u001b[38;5;241m1\u001b[39m]\n\u001b[0;32m----> 4\u001b[0m dt \u001b[38;5;241m=\u001b[39m \u001b[43mdata_true\u001b[49m\u001b[38;5;241m.\u001b[39mfilter(\u001b[38;5;28;01mlambda\u001b[39;00m x: \u001b[38;5;28;01mTrue\u001b[39;00m \u001b[38;5;28;01mif\u001b[39;00m get_count_df_columns(x[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtable_text\u001b[39m\u001b[38;5;124m'\u001b[39m]) \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m20\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m,num_proc\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m10\u001b[39m)\n", + "\u001b[0;31mNameError\u001b[0m: name 'data_true' is not defined" + ] + } + ], + "source": [ + "def get_count_df_columns(table_str):\n", + " df = pd.read_csv(StringIO(table_str), delimiter='#')\n", + " return df.shape[1]\n", + "dt = data_true.filter(lambda x: True if get_count_df_columns(x['table_text']) > 20 else False,num_proc=10)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "e4263ff2-f0c7-477b-929f-802927fc7fdf", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "during 1993 - 94 victorian premier league season south melbourne fc did not participate south melbourne fc
competitionlocation - 0.72\"str\"0[\"ofc / afc champions league\", \"nsl / a - league\", \"ffv cup\"]
1993 - 94result - 0.81\"str\"0[\"did not participate\", \"2nd\", \"did not participate\"]
1994 - 95\"str\"0[\"did not participate\", \"sf\", \"sf\"]
1995 - 96result - 0.74\"str\"0[\"did not participate\", \"w\", \"w\"]
1996 - 97notes - 0.68\"str\"0[\"sf\", \"did not participate\", \"pf\"]
1997 - 98\"str\"0[\"1st\", \"did not participate\", \"competition not held\"]
1998 - 99result - 0.82\"str\"0[\"did not participate\", \"competition not held\", \"did not participate\"]
1999 - 2000notes - 0.88\"str\"0[\"did not participate\", \"did not participate\", \"competition not held\"]
2000 - 01notes - 0.83\"str\"0[\"competition not held\", \"1st\", \"competition not held\"]
2001 - 02rank - 0.81\"str\"0[\"5th\", \"did not participate\", \"did not participate\"]
2002 - 03\"str\"0[\"dnp\", \"did not participate\", \"competition not held\"]
2003 - 04status - 0.83\"str\"0[\"did not participate\", \"dnp\", \"did not participate\"]
2005status - 0.88\"str\"0[\"did not participate\", \"did not participate\", \"pf\"]
2006notes - 0.61\"str\"0[\"did not participate\", \"did not participate\", \"did not participate\"]
2007\"str\"0[\"did not participate\", \"did not participate\", \"competition not held\"]
2008\"str\"0[\"dnp\", \"competition not held\", \"did not participate\"]
2009result - 0.7\"str\"0[\"competition not held\", \"did not participate\", \"competition not held\"]
2010notes - 0.66\"str\"0[\"competition not held\", \"competition not held\", \"dnp\"]
2011notes - 0.85\"str\"0[\"did not participate\", \"did not participate\", \"4th\"]
2012\"str\"0[\"did not participate\", \"dnp\", \"6th\"]
2013notes - 0.55\"str\"0[\"competition not held\", \"did not participate\", \"sf\"]
2014\"str\"0[\"did not participate\", \"did not participate\", \"-\"]
\n" + ] + } + ], + "source": [ + "print(dt[0]['semtab_query'])" + ] + }, + { + "cell_type": "code", + "execution_count": 185, + "id": "85144c41-8eb5-4b2d-8697-6cd69851db45", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\t
\n", + "\t
\n", + "\t
\n", + "\t
\n", + "\t
\n", + "\t
\n", + "\t
\n", + "
\n", + "\n" + ] + } + ], + "source": [ + "import xml.dom.minidom\n", + "\n", + "xml_string = '''
'''\n", + "# Парсим строку\n", + "dom = xml.dom.minidom.parseString(xml_string)\n", + "\n", + "# Преобразуем в форматированную строку с отступами\n", + "pretty_xml_string = dom.toprettyxml()\n", + "\n", + "# Выводим на печать\n", + "print(pretty_xml_string)" + ] + }, + { + "cell_type": "code", + "execution_count": 132, + "id": "6d295be4-a38f-4b45-a677-b3231f1e35a1", + "metadata": {}, + "outputs": [], + "source": [ + "import xml.etree.ElementTree as ET\n", + "root = ET.fromstring('south melbourne fc
competitionlocation - 0.72\"str\"0[\"ofc / afc champions league\", \"nsl / a - league\", \"ffv cup\"]
1993 - 94result - 0.81\"str\"0[\"did not participate\", \"2nd\", \"did not participate\"]
1994 - 95\"str\"0[\"did not participate\", \"sf\", \"sf\"]
1995 - 96result - 0.74\"str\"0[\"did not participate\", \"w\", \"w\"]
1996 - 97notes - 0.68\"str\"0[\"sf\", \"did not participate\", \"pf\"]
1997 - 98\"str\"0[\"1st\", \"did not participate\", \"competition not held\"]
1998 - 99result - 0.82\"str\"0[\"did not participate\", \"competition not held\", \"did not participate\"]
1999 - 2000notes - 0.88\"str\"0[\"did not participate\", \"did not participate\", \"competition not held\"]
2000 - 01notes - 0.83\"str\"0[\"competition not held\", \"1st\", \"competition not held\"]
2001 - 02rank - 0.81\"str\"0[\"5th\", \"did not participate\", \"did not participate\"]
2002 - 03\"str\"0[\"dnp\", \"did not participate\", \"competition not held\"]
2003 - 04status - 0.83\"str\"0[\"did not participate\", \"dnp\", \"did not participate\"]
2005status - 0.88\"str\"0[\"did not participate\", \"did not participate\", \"pf\"]
2006notes - 0.61\"str\"0[\"did not participate\", \"did not participate\", \"did not participate\"]
2007\"str\"0[\"did not participate\", \"did not participate\", \"competition not held\"]
2008\"str\"0[\"dnp\", \"competition not held\", \"did not participate\"]
2009result - 0.7\"str\"0[\"competition not held\", \"did not participate\", \"competition not held\"]
2010notes - 0.66\"str\"0[\"competition not held\", \"competition not held\", \"dnp\"]
2011notes - 0.85\"str\"0[\"did not participate\", \"did not participate\", \"4th\"]
2012\"str\"0[\"did not participate\", \"dnp\", \"6th\"]
2013notes - 0.55\"str\"0[\"competition not held\", \"did not participate\", \"sf\"]
2014\"str\"0[\"did not participate\", \"did not participate\", \"-\"]
')" + ] + }, + { + "cell_type": "code", + "execution_count": 134, + "id": "1be77a9c-921a-49fd-96e6-c5ff9ca0d31e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(root)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "2bfd3701-f42b-45dd-a354-67b6fdb8834c", + "metadata": {}, + "outputs": [], + "source": [ + "sep_data_len = []\n", + "sem_data_len = []\n", + "for data in data_true:\n", + " sep_data_len.append(len(data['nlsep_query']))\n", + " sem_data_len.append(len(data['semtab_query']))" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "0c8e8517-9c54-4ff5-b59c-02b7179dbec6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(30487,)" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + " dif[dif<0].shape" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "8f63e033-60e5-4947-87ce-5be353235904", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2317 -6940 71.05049026283535 772.3828916818711\n" + ] + } + ], + "source": [ + "import numpy as np \n", + "sep_data_len = np.array(sep_data_len)\n", + "sem_data_len = np.array(sem_data_len)\n", + "dif = sem_data_len - sep_data_len\n", + "print(max(dif),min(dif),dif.mean(),dif.std())\n" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "26906282-1dfb-4e3b-bb94-838c05f7a761", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Процент примеров превышающих соответствующее семантическое представление 34.598710790321846\n" + ] + } + ], + "source": [ + "print('Процент примеров превышающих соответствующее семантическое представление', \n", + " dif[dif<0].shape[0]/dif.shape[0]*100)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "355097ec-e455-43d8-9e98-07238719050d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Процент примеров равных семантическое представление 0.06128285441917473\n" + ] + } + ], + "source": [ + "print('Процент примеров равных семантическое представление', \n", + " dif[dif == 0].shape[0]/dif.shape[0]*100)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "0fcec7d9-d074-4cb1-b867-f773e5752297", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Процент примеров отличающихся не более чем на окно в 50 символов от семантическое представление 9.173135412410913\n" + ] + } + ], + "source": [ + "print('Процент примеров отличающихся не более чем на окно в 50 символов от семантическое представление', \n", + " dif[(dif <= 100) & (dif >= -100) ].shape[0]/dif.shape[0]*100)" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "739ab108-4e3a-4729-b647-9f81a84b1bfb", + "metadata": {}, + "outputs": [], + "source": [ + "df_dif = pd.DataFrame({'NL+sep':sep_data_len,'Semantic headers':sem_data_len,'dif':dif}) " + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "971d1b0a-1291-4253-93c2-67150fb2216d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df_dif.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "fbcb71ff-23f5-4b9b-9b7b-082501f175e7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df_dif.rolling(window=100).mean().plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "c711723a-e62c-417f-aec4-ea690cf91c0e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collecting matplotlib\n", + " Using cached matplotlib-3.10.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (8.7 MB)\n", + "Requirement already satisfied: numpy>=1.23 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from matplotlib) (2.2.6)\n", + "Requirement already satisfied: packaging>=20.0 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from matplotlib) (25.0)\n", + "Collecting cycler>=0.10\n", + " Using cached cycler-0.12.1-py3-none-any.whl (8.3 kB)\n", + "Requirement already satisfied: pillow>=8 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from matplotlib) (12.0.0)\n", + "Collecting pyparsing>=3\n", + " Using cached pyparsing-3.2.5-py3-none-any.whl (113 kB)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from matplotlib) (2.9.0.post0)\n", + "Collecting kiwisolver>=1.3.1\n", + " Using cached kiwisolver-1.4.9-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.6 MB)\n", + "Collecting contourpy>=1.0.1\n", + " Using cached contourpy-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (325 kB)\n", + "Collecting fonttools>=4.22.0\n", + " Downloading fonttools-4.61.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (4.9 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.9/4.9 MB\u001b[0m \u001b[31m1.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: six>=1.5 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from python-dateutil>=2.7->matplotlib) (1.17.0)\n", + "Installing collected packages: pyparsing, kiwisolver, fonttools, cycler, contourpy, matplotlib\n", + "Successfully installed contourpy-1.3.2 cycler-0.12.1 fonttools-4.61.0 kiwisolver-1.4.9 matplotlib-3.10.7 pyparsing-3.2.5\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "pip install matplotlib" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "ab1dbeca-2f47-440a-8188-205a5ca5b6dc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: modelscope in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (1.31.0)\n", + "Requirement already satisfied: setuptools in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from modelscope) (59.6.0)\n", + "Requirement already satisfied: filelock in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from modelscope) (3.20.0)\n", + "Requirement already satisfied: tqdm>=4.64.0 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from modelscope) (4.67.1)\n", + "Requirement already satisfied: urllib3>=1.26 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from modelscope) (2.5.0)\n", + "Requirement already satisfied: requests>=2.25 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from modelscope) (2.32.5)\n", + "Requirement already satisfied: charset_normalizer<4,>=2 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from requests>=2.25->modelscope) (3.4.4)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from requests>=2.25->modelscope) (2025.11.12)\n", + "Requirement already satisfied: idna<4,>=2.5 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from requests>=2.25->modelscope) (3.11)\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "pip install modelscope" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "83b675e7-1cd7-4ff6-af1e-fc0c579b3018", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading Model from https://www.modelscope.cn to directory: /home/poddubny/.cache/modelscope/hub/models/deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2026-04-11 16:02:51,787 - modelscope - INFO - Target directory already exists, skipping creation.\n" + ] + } + ], + "source": [ + "from modelscope import AutoTokenizer, AutoModelForCausalLM\n", + "tokenizer = AutoTokenizer.from_pretrained(\"deepseek-ai/deepseek-coder-7b-instruct-v1.5\", trust_remote_code=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "33b87b60-c858-4f67-ba58-de9d4ab10f32", + "metadata": {}, + "outputs": [], + "source": [ + "def compute_tokens_lenghts(text,tokenizer):\n", + " messages=[\n", + " { 'role': 'system', 'content': \"\"},\n", + " { 'role': 'user', 'content': text}\n", + " ]\n", + " return tokenizer.apply_chat_template(messages, add_generation_prompt=False, return_tensors=\"pt\").shape[1]" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "5ff47f70-8568-4652-8118-c46ccf4b4f60", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 88116/88116 [04:48<00:00, 305.47it/s]\n" + ] + } + ], + "source": [ + "from tqdm import tqdm\n", + "sep_data_len_token = []\n", + "sem_data_len_token = []\n", + "\n", + "for data in tqdm(data_true):\n", + " sep_data_len_token.append(compute_tokens_lenghts(data['nlsep_query'],tokenizer))\n", + " sem_data_len_token.append(compute_tokens_lenghts(data['semtab_query'],tokenizer))" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "68123f44-9c19-4b8e-9939-03cb9ab65220", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 88116/88116 [01:12<00:00, 1215.26it/s]\n" + ] + } + ], + "source": [ + "count_columns = []\n", + "count_rows = []\n", + "for data in tqdm(data_true):\n", + " df = pd.read_csv(StringIO(data['table_text']), delimiter='#')\n", + " count_columns.append(df.shape[1])\n", + " count_rows.append(df.shape[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "b4dbc22d-fa9b-4d5e-b0c4-3884985fffc7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1181 -3164 -42.695912206636706 356.9935020599761\n" + ] + } + ], + "source": [ + "import numpy as np \n", + "sep_data_len_token = np.array(sep_data_len_token)\n", + "sem_data_len_token = np.array(sem_data_len_token)\n", + "dif_token = sem_data_len_token - sep_data_len_token\n", + "print(max(dif_token),min(dif_token),dif_token.mean(),dif_token.std())" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "id": "cc1671af-1451-47ea-b978-14509a88ac4e", + "metadata": {}, + "outputs": [], + "source": [ + "k = sem_data_len_token/sep_data_len_token*100" + ] + }, + { + "cell_type": "code", + "execution_count": 118, + "id": "a45ad8fd-d365-4f96-9900-f113084e1356", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "18.242894056847543 481.9742489270387\n" + ] + } + ], + "source": [ + "print(k.min(),k.max())" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "id": "ae9a237f-7531-4bde-b20f-a03b3303ba25", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Процент примеров превышающих соответствующее семантическое представление 42.11266966271733\n", + "Процент примеров равных семантическое представление 0.10781242907077035\n", + "Процент примеров отличающихся не более чем на окно в 50 токенов от семантическое представление 11.171637387080667\n" + ] + } + ], + "source": [ + "print('Процент примеров превышающих соответствующее семантическое представление', \n", + " dif_token[dif_token<0].shape[0]/dif_token.shape[0]*100)\n", + "print('Процент примеров равных семантическое представление', \n", + " dif_token[dif_token == 0].shape[0]/dif_token.shape[0]*100)\n", + "print('Процент примеров отличающихся не более чем на окно в 50 токенов от семантическое представление', \n", + " dif_token[(dif_token <= 50) & (dif_token >= -50) ].shape[0]/dif_token.shape[0]*100)" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "id": "e7e25da6-5f9b-4985-900a-844f26a21bb8", + "metadata": {}, + "outputs": [], + "source": [ + "df_dif = pd.DataFrame({'NL+sep':sep_data_len_token,'Semantic headers':sem_data_len_token,\n", + " 'count columns':count_columns,'count rows':count_rows,'percent':100-sem_data_len_token/sep_data_len_token*100,\n", + " 'percent_sem':sep_data_len_token/sem_data_len_token*100}) " + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "id": "1eca8ec9-268c-4f6d-867b-ab65a51c44cb", + "metadata": {}, + "outputs": [], + "source": [ + "df_dif = df_dif[df_dif['count columns']<=15]" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "id": "02874c00-a4f2-4941-a629-356617d0c45b", + "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", - " \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", "
NL+sepSemantic headerscount columnscount rowspercentpercent_sem
count87968.00000087968.00000087968.00000087968.00000087968.00000087968.000000
4t5charles coodyunited states72 + 68 = 140emean576.994703533.2789426.28516113.368861-22.597923108.112814
5t5al geibergerunited states68 + 72 = 140estd379.407588123.8855451.5209308.56054559.30809165.625147
6t5george knudsoncanada70 + 70 = 140emin114.000000335.0000005.0000002.000000-305.12820524.683544
7t8tony jacklinengland71 + 70 = 141+ 125%317.000000440.0000005.0000007.000000-65.55555660.402685
8t8johnny millerunited states71 + 70 = 141+ 150%458.000000503.0000006.00000011.000000-15.32935886.708192
9t8orville moodyunited states71 + 70 = 141+ 175%723.000000598.0000007.00000017.00000026.603870136.246966
10t8jack nicklausunited states74 + 67 = 141+ 1max3872.0000001899.00000015.00000048.00000081.757106548.158640
\n", "
" ], "text/plain": [ - " place player country score to par\n", - "0 1 deane beman united states 68 + 69 = 137 - 3\n", - "1 t2 miller barber united states 67 + 71 = 138 - 2\n", - "2 t2 bob murphy united states 66 + 72 = 138 - 2\n", - "3 4 bob rosburg united states 70 + 69 = 139 - 1\n", - "4 t5 charles coody united states 72 + 68 = 140 e\n", - "5 t5 al geiberger united states 68 + 72 = 140 e\n", - "6 t5 george knudson canada 70 + 70 = 140 e\n", - "7 t8 tony jacklin england 71 + 70 = 141 + 1\n", - "8 t8 johnny miller united states 71 + 70 = 141 + 1\n", - "9 t8 orville moody united states 71 + 70 = 141 + 1\n", - "10 t8 jack nicklaus united states 74 + 67 = 141 + 1" + " NL+sep Semantic headers count columns count rows \\\n", + "count 87968.000000 87968.000000 87968.000000 87968.000000 \n", + "mean 576.994703 533.278942 6.285161 13.368861 \n", + "std 379.407588 123.885545 1.520930 8.560545 \n", + "min 114.000000 335.000000 5.000000 2.000000 \n", + "25% 317.000000 440.000000 5.000000 7.000000 \n", + "50% 458.000000 503.000000 6.000000 11.000000 \n", + "75% 723.000000 598.000000 7.000000 17.000000 \n", + "max 3872.000000 1899.000000 15.000000 48.000000 \n", + "\n", + " percent percent_sem \n", + "count 87968.000000 87968.000000 \n", + "mean -22.597923 108.112814 \n", + "std 59.308091 65.625147 \n", + "min -305.128205 24.683544 \n", + "25% -65.555556 60.402685 \n", + "50% -15.329358 86.708192 \n", + "75% 26.603870 136.246966 \n", + "max 81.757106 548.158640 " + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_dif.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "eecc5e04-3f57-435f-a715-0b2137647f14", + "metadata": {}, + "outputs": [], + "source": [ + "p = df_dif['count rows'].copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "id": "23d4feb9-0667-44af-975f-73a860dbc63f", + "metadata": {}, + "outputs": [], + "source": [ + "mask = p<10\n", + "p[ p<5] = p*2" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "id": "08541ba3-5a66-4c5e-afa7-531762a0f505", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "np.int64(4)" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p.min()" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "id": "e80cf02d-23f6-4d2f-9fbb-c0df6c8efed7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 99, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df_dif.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "id": "32c6a929-b165-4ff3-9961-188423c2c84e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df_dif.rolling(window=500).mean().plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "0953311e-6a1b-4590-980a-33d805e48a99", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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usTIkSOZOXMms2fPNj8fEhLCzp07SU9PV9T75eOPP6Z9+/Y2h4GWFhoaSocOHXj++eepV68e/fr147///rOKqe7X3mg08vHHH3PjjTfSrVs3u3G33347CQkJfP7553z00Uf4+fnxyiuvVEkbhBBCCHFtkfNxOR+3JOfjcj4uRF0nNdGFELVOUVERu3btwsXFxTycsGfPngwYMMD8r/ikfcSIEaSlpfHrr7+W2U5lexts3bqV/Px8+vXrZzfG3kn3Tz/9ZHedjz/+mB49ejB8+PBKtcuRyrSpOuh0OqveGYWFhSxevJj69eubJwwaMmQISUlJrFu3zmq9hQsX4unpSe/eva22WTwJUMOGDXn55Zf5888/2blzp/n5ESNGYDQa+fzzz8u0p/TnIDw8nK1bt/Lyyy8rrtM5duxYTp48yZgxY2yuU92v/bp16zh58iQvvvhiuXFHjx5l/vz5vPTSS9xyyy0MGDDA7jBlIYQQQgh75Hy8cuR8XM7H5XxciNpLeqILIZze9u3bzT0eUlNTWb16NefOnePRRx+1WevO0h133MHKlSuZOXMmR44coWfPnuTl5bFnzx7uvvtubrjhBsXtyMvL47PPPmPRokV0796dQYMG2Y319vamd+/efPfddxQVFdGwYUN27dpFXFyc3XV27tzJokWLFLenoirTpuoQFBTEt99+S3x8PC1atGDdunUcP36cGTNmmHsnTZgwgcWLF/P6669z9OhRgoOD2bhxIwcPHuTNN98s932fMGECa9asYfr06axZswYPDw/69evH6NGjWbhwIefPn2fw4MEYDAYOHDhA3759rSa62rlzJwMHDizTu6g848eP5+abb8bHx8fm85V57ffu3Wt1nOfPnwfg1KlTnDx50mrI586dOxk/fjytWrWyu728vDxeeukl+vTpw/3336/42IQQQggh5Hy8asj5uJyPy/m4ELWXJNGFEE7vs88+M//s5uZGq1ateOedd5g4caLDdTUaDd9++y1ffvkla9asYdOmTfj7+9OjR48K153LzMxk/fr1jB8/nmeffbbMJDulffzxx8yYMYPffvsNo9HIwIED+fbbb+0OOx0+fDg9evSoUJsqqqJtqg5+fn7MmjWL999/nz/++IMGDRowbdo0xo8fb45xd3dn4cKFzJkzhxUrVpCdnU3Lli2ZOXMmY8aMKXf7KpWKGTNm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IvTFF1+oVq1a8vEp+RX6AIDK78qSao0CPPVrfKrSsmzyrmZReLC3jl3I1Oqdp9Wqbg2ZzaZr7xBA5RYQkJNEv3Ilut1+eSV648aSif8rAAAAKgtqopcjjWp5q2mwj84mZeQpgWIYhs4mZahZsK8a1Sq4Zvn1yMzM1CeffKL/+7//U2xsrBISEhy3lJQUGYahhIQEhYaGymq1atmyZTp58qTWrl2rDz/8sERjuZrValVWVpZOnz6tf/3rX2rWrFmePr169VLNmjU1dOhQ7dixQydPntS2bds0efJk/f7776UaHwCgcsgtqXY+JVOrfzqrPaeTdeR8mvacTtbqn87qfEqmo6QaADguLpqeLmVl5dw/c+by/caNXRMXAAAASgUr0csRs9mkvjEhOv1HhqM2updHzlfJzyZlKMDbQ31i6pf4Cri4uDi99NJLkqSJEydq4sSJefrExsbqq6++0gsvvKAFCxZo5syZateunUaNGqWxY8eWaDxXuu+++yRJNWrU0A033KCXX345Tx8vLy8tX75cM2bM0NNPP620tDTVrl1bHTt2ZGU6AKBIUjIv6cDZZCWkZudps0s6diFDadm2UiupBqCCufrionXqXC7lIklNmpR9TAAAACg1JNHLmcj6fhrevZnjombnknMuatYmxF99YuqXWi3W9u3ba9myZQW2h4eHS5L69++v/v37O7X9/e9/d9zv06eP+vTp49QeEhKiX3/91fG4Q4cOTo9zXbktJCRE+/btk8ViyXORVUnasWOH0+OgoCC99tprBcYPAEBh3N2k8/kk0K90PjVb7sycAEiXV6JLOSVdrk6isxIdAACgUuFPwXIosr6fWtWtoWOJaUrJvCRfTzc1quVdajVYPT095edXeHI+MDCwwNrmAABUdF/9Ei/jGn2M//VrVde/DCICUK5dmUSPj5datSKJDgAAUIlVmJroQ4YM0V/+8he1bt1asbGxeu6553Tu3DmnPgcOHNBDDz2k1q1bq0uXLlqwYEGe/XzxxRe644471Lp1a/Xq1UvffPNNWb2EYjGbTWoc5KO2DfzVOMinVC9iduedd+qtt94qtM/mzZtVt27dUosBAABXOl7EWudF7Qegkmva9PL9X37J+ZckOgAAQKVVYZLoN910k2bNmqV//etfmjNnjk6ePKlnnnnG0Z6amqqBAweqXr16Wr16tcaMGaO33npLH330kaPPzp07NXr0aN1zzz1au3atunfvrqeeekq//fabK14SAAAoJ2y2a61DL14/AJVcmzaX7+/enfPvlUn0Ro3KNBwAAACUrgqTRO/fv7+ioqJUv359xcTEaPDgwdq1a5esVqskad26dbJarZo6daqaNWumnj17ql+/flq8eLFjH0uXLtXNN9+sQYMGqUmTJhoxYoRatWql5cuXu+plAQCAcsCvunuJ9gNQyUVGXr5/dRK9Xj3Jy6vsYwIAAECpqTBJ9CtdvHhR69evV3R0tNzdc/6Y3bVrl9q1aycPDw9Hv9jYWB09elRJSUmOPh07dnTaV2xsrHbt2lVmsQMAgPLHXMQZUVH7Aajk/Pwurzbfs0dKSZFyS01SygUAAKDSqVAXFn3jjTe0YsUKZWRkKCoqSu+++66j7fz58woJCXHqHxgY6Gjz8/PT+fPnHdty1apVS+fPny92LIZhyDCMPNsKasP1470suoowBnNjK6/x4c/h/FZulfn8+nt5XLvT//pVxtdfmc9tecL7W8m0aSMdOyalpkr//e/l7U2auCwkAAAAlA6XJtFnzJiR78U/rxQXF6cm/5uIDhw4UPfcc4/OnDmjt956S2PHjtX8+fNlMpXeRTcLkpycLPNVy9Gys7Nlt9tls9lks9nKPKbKxm63uzqECsdms8lutyslJUVZWVmuDidfhmEoPT1dklzys4vSxfmt3Crz+fV1L9rvHF93u+MbbpVJZT635Qlzm0qmdWtp3bqc+2vXXt7OSnQAAIBKx6VJ9Mcff1y9e/cutE+DBg0c9wMCAhQQEKCwsDA1adJEXbp00a5duxQdHa3AwMA8K8pzH+euPs+vT2JiYp7V6UVRo0YNWSwWp22ZmZlKTEyUxWLJ04brw/tYPBaLRWazWb6+vvL09HR1OPnKXYXn5+dHoqYS4vxWbpX5/IYGZxaxX035+fmVcjRlrzKf2/KERRaVzJUXF12z5vJ9kugAAACVjkuT6LlJ8euRu5InOztbkhQVFaVZs2bJarU66qRv2bJFYWFhjj92o6KitHXrVvXv39+xny1btigqKqrYxzeZTHn+yMx9nF8biufKrzvzXhZdRRmDufGV5xhx/Ti/lVtlPb+ZRUxuZtpsle6156qs57Y84b2tZK5Mol+8ePl+eHiZhwIAAIDSVSEuj/Xzzz9r+fLl2r9/v06fPq3vv/9eo0aNUsOGDRUdHS1J6tWrl9zd3fXiiy/q4MGDiouL09KlSzVgwADHfh599FF9++23WrRokQ4fPqy5c+dq7969euSRR1z10lDCpk+frrVr18owDL3++utavnx5ie171qxZevnllx2P+/XrpylTppTY/q/l0KFDuuWWWxxftwcAlJx1P50p0X4AqoCmTaWrv/nXvr10ww2uiQcAAAClpkJcWNTT01P//ve/NXfuXKWnpysoKEg333yzhg0bJg+PnAuB+fr6auHChZo0aZL69OmjmjVratiwYbr//vsd+4mJidGMGTM0a9YszZw5U40aNdK8efPUvHlzV720cuP555/Xmiu+hurv76/IyEg999xzatGihQsjK56+ffuqf//+evHFF1W/fn19+OGHJbLfhIQELV26VOvXry+R/eVn/Pjx2rJli+Lj41W9enVFR0fr2WefdVwToGnTpoqKitLixYv11FNPlVocAFAVpWUVbSV6UfsBqALc3KTataXjxy9vmzNHMleIdUoAAAAohgqRRA8PD9fSpUuv2a9FixZauXJloX169OihHj16lFRolcrNN9+sadOmScqpJz9r1iwNGTJEX3/9tWsDK4ZmzZrpm2++UWJiooKCgvJc/PV6ffLJJ4qOjlb9+vVLZH/5iYiIUK9evVS3bl0lJSVp7ty5GjhwoL766itHbfg+ffropZde0pNPPik3twrx4wsAFUKgt0eJ9gNQRXTocDmJfscdOY8BAABQ6bBMAg4eHh4KCgpSUFCQWrZsqcGDB+vs2bO6cOFCoc87ePCgnnzyScXExCg6OloPPfSQTpw4ISlnhXt4eHieW7t27Zz2cerUKaf2Fi1aKCIiQsnJyZKkEydOaOjQoerUqZOio6PVt29fbdmyxWkf3bp105IlS+Tm5qbatWtr27ZtCg8P17Bhwxx98ivBMnfuXN19992Fvsa4uDh169at0D5ff/21brjhBq1bt67QfgW5//77deONNyokJEQREREaMWKEzp49q9OnTzv6dOrUSUlJSfrhhx+u6xgAgPy1a1y0a7QUtR+AKuKZZ3JWnjdrJi1a5OpoAAAAUEpYyloWPvlEGj9eSkkpu2P6+kqvvirdc891PT0tLU3r1q1TaGio/P39C+x37tw5PfLII2rfvr0++OAD+fj4aOfOnbp06ZKjz5Ur3KWchPTcuXOd9pN7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VB3NmjXTd99957itXLnS0VZi48AAyok33njDePDBB10dBkrJE088YbzwwgtO255++mlj9OjRLooIJaV58+bGxo0bHY/tdrvRuXNn4/3333dsS05ONiIjI43PP//cFSHiOl19bvPz888/G82bNzdOnz5dRlGhpBR0fn///Xfj5ptvNn777Teja9euxuLFi8s+OKAI7rnnHmPixImOxzabzYiNjTXmz5/vwqhQlpiDwDAMIzEx0WjevLmxfft2wzByznlERITxxRdfOPocOnTIaN68ufHTTz+5KEqUhRtvvNH4+OOPGQNVTGpqqnHbbbcZmzdvNh555BFj8uTJhmHwf0FVMmfOHONvf/tbvm0lOQ5YiY5y4z//+Y8iIyM1fPhwdezYUX//+9/18ccfuzoslJDo6Ght3bpVR48elSQdOHBAP/74o2655RYXR4aSdurUKSUkJKhTp06Obb6+vmrbtq1++uknF0aG0pCamiqTyaQaNWq4OhSUALvdrueee04DBw5Us2bNXB0OUKDs7Gzt27fP6XeN2WxWp06d+F1ThTEHqZpSUlIkyfEN5r1798pqtTqNgyZNmqhevXratWuXK0JEKbPZbNqwYYPS09MVHR3NGKhiJk2apC5dujidb4n/C6qa48ePKzY2Vt27d9fo0aN15swZSSU7DtxKMmDgzzh58qRWrVqlAQMGaMiQIdqzZ48mT54sd3d39e7d29Xh4U964oknlJqaqh49eshischms2nkyJH629/+5urQUMISEhIkSbVq1XLaXqtWLerPVTJZWVmaMWOGevbsKR8fH1eHgxKwYMECubm56dFHH3V1KECh/vjjD9lstnx/11xdGxlVB3OQqsdut2vq1KmKiYlR8+bNJUnnz5+Xu7t7ng/4a9Wq5RgjqBx+/fVXPfDAA8rKylL16tU1b948NW3aVPv372cMVBEbNmzQL7/8ok8//TRPG/8XVB1t2rTRtGnTFBYWpoSEBM2bN08PP/yw1q9fX6LjgCQ6yg3DMBQZGalRo0ZJklq1aqWDBw/qww8/JIleCXzxxRdav369/vnPfzomNtOmTVNwcDDnF6iArFarnnnmGRmGoYkTJ7o6HJSAvXv3aunSpVq9erVMJpOrwwEA4JomTpyogwcPOtW+RdURFhamtWvXKiUlRV9++aXGjh2r5cuXuzoslJGzZ89qypQpWrRo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eerQoYNuuOEGp+3NmzfXrl27dPLkyXyfd+DAAZ04cUIxMTGKjo5WdHS0OnTooKysLJ04cUKJiYmKj49Xx44di/z68zNq1ChFR0frxhtvVFpamkaNGiUp571wc3NzTIQlqWbNmgoLC9Phw4fz3df+/ftVp04dx+S7uI4cOeKY7OeKiYnR8ePHZbPZHNtSU1NVvXr1Qvd15X5yV9EUFHd+ivr6U1JSFB0drTZt2ui+++7T4MGD87wGAAAAXD/m8HmVpzm8JLm5ual169aOx02aNFGNGjUcxyxonn91TMuXL9e7776rsLAwhYSEXHc8AHAtrEQHgEI0aNBAS5YsUUBAgCZMmKDnnntOXbp0UYsWLYq1n/j4eJnN5muujDh27Jg+/fRTrV27Vr///rtTW9++fbVx40bdeuut+SaE09PTFRERoRkzZuRpCwgIcKxs+bNeeOEFderUScnJyZo1a5ZeeOEFvfvuu9e1L09PzxKJ6Vri4+MVHBycb1thK4pK6j27kre3t9asWSPDMHTo0CGNGzdOERERuv3220v8WAAAAFURc/i8KuIcvih2796t9957Ty+88II+/PBDPfDAA64OCUAlxUp0AChE8+bNHV+R7NGjh2677TaNHTvWUQqkSZMm+v33350ugnPo0CElJyerSZMmjm179uxR48aNVa1atUKPN2PGDN1zzz0KDQ3N0+bp6aklS5Zo8+bNWrt2bZ4L60REROj48eOqVauWQkNDnW6+vr7y8fFR/fr19f3331/v2yEp5+uYoaGhat26tR555BF9/fXXslqtatKkiS5duqSff/7Z0fePP/7Q0aNH1bRp03z3FR4ert9//11Hjx69rlgaN26snTt3Om3buXOnGjVqJIvFIimnXMsvv/yili1b5ruPBg0ayM3NzWk/drtdP/30k9M5vJaivn6z2azQ0FA1atRIt956q2666SZt3LixyMcBAABA4ZjD51We5vBSTqmcvXv3Oh4fOXLE6f0vaJ5/dUzjxo1Tly5dNGHCBL3++us6c+bMdccEAIUhiQ4AxTB+/HglJiZq3rx5kqROnTqpefPmevbZZ7Vv3z7t3r1bY8aMUfv27dW6dWtlZ2dr7dq1WrJkiVON7vycOHFC27dvd9T3LkhgYKBjYn2lXr16qWbNmho6dKh27NihkydPatu2bZo8ebJjRcw//vEPLV68WEuXLtWxY8e0b98+LVu2rFjvQXJyshISEnTkyBF9+umnatCggdzd3dWoUSN1795dL7/8snbs2KEDBw7oueeeU+3atdW9e/d899W+fXu1a9dOw4cP1+bNm3Xy5El98803+r//+78ixfL444/r+++/17x583T06FGtWbNGK1as0OOPPy5JOnv2rF566SUlJiY6XVjpSt7e3rr33nv1+uuv65tvvtHhw4f1yiuvKD4+Xg899JBT3+zsbGVlZTluUk49R7vdXuTXbxiGEhISFB8fr61bt2r79u1q3LhxkV4vAAAAio85fPmaw0uSu7u7Xn31Vf3888/au3evXnjhBUVFRTlqvQ8aNEhr1qzRypUrdezYMS1evFgbN250zPNz+fv7S5Juv/12denSRS+99FKx3hcAKCrKuQBAMfj7+2vy5MkaNmyYunXrprZt2+rtt9/Wq6++qkceeUQmk0k333yzXn75ZUnSb7/9prfeekvDhg3TgAEDCt13enq6xo4d65gIFpeXl5eWL1+uGTNm6Omnn1ZaWppq166tjh07Oi6m1Lt3b2VlZWnJkiV6/fXX5e/vrzvuuKNYx3nhhRck5SSfIyIiNGfOHEfbtGnTNGXKFA0ZMkRWq1Xt2rXTe++9J3d39wL3N3fuXL322msaNWqUMjIyFBoaqtGjRxcploiICM2aNUtz5szRO++8o6CgIA0fPtzxx87SpUt14sQJLVy4UPXq1StwP2PHjpXJZNLYsWOVmpqqiIgIvf/++3lKwHTu3DnPc0eMGKGlS5eqQ4cORXr9qampio2NlclkUmBgoO644w4NGjSoSK8XAAAAxcccvnzN4aWcFfqDBw/W6NGjde7cObVr105TpkxxtN96660aN26cFi1apKlTp6p+/fqaOnWqOnToUOA+X375Zd1111366KOPdP/99xc5FgAoCpNhGIargwAAoKIaNmyYHnvssUIn9AAAAAByrF69WlOnTtWOHTtcHQoAFBnlXAAA+BPc3d1lNvPrFAAAAACAyopyLgAA/AmzZ892dQgAAAAAAKAUUc4FAAAAAAAAAIAC8P1zAAAAAAAAAAAKQBIdAAAAAAAAAIACkEQHAAAAAAAAAKAAJNEBAAAAAAAAACgASXQAAAAAAAAAAApAEh0AAAAAAAAAgAKQRAcAAAAAAAAAoAAk0QEAAAAAAAAAKABJdAAAAAAAAAAACvD/AdeqNHevcgVoAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from scipy.interpolate import make_interp_spline, BSpline\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "fig, axes = plt.subplots(1, 2, figsize=(15, 6))\n", + "\n", + "# График 1: B-сплайн\n", + "x1 = df_dif['count columns'].values\n", + "y1 = df_dif['percent'].values\n", + "\n", + "# Сортируем и создаем равномерную сетку\n", + "sort_idx = np.argsort(x1)\n", + "x1_sorted = x1[sort_idx]\n", + "y1_sorted = y1[sort_idx]\n", + "\n", + "# Удаляем дубликаты для сплайна\n", + "x1_unique, idx = np.unique(x1_sorted, return_index=True)\n", + "y1_unique = y1_sorted[idx]\n", + "\n", + "# Создаем B-сплайн (кубический, k=3)\n", + "if len(x1_unique) >= 4: # B-сплайн требует минимум k+1 точек\n", + " spline1 = make_interp_spline(x1_unique, y1_unique, k=2) # k=3 для кубического сплайна\n", + " x1_fine = np.linspace(x1_unique.min(), x1_unique.max(), 300)\n", + " \n", + " axes[0].scatter(x1, y1, alpha=0.6, label='Данные')\n", + " axes[0].plot(x1_fine, spline1(x1_fine), 'r-', linewidth=2, label='B-сплайн (k=3)')\n", + "else:\n", + " axes[0].scatter(x1, y1, alpha=0.6, label='Данные (недостаточно для сплайна)')\n", + "\n", + "axes[0].set_xlabel('Количество столбцов')\n", + "axes[0].set_ylabel('Процент (%)')\n", + "axes[0].set_title('B-сплайн аппроксимация')\n", + "axes[0].legend()\n", + "axes[0].grid(True, alpha=0.3)\n", + "\n", + "# График 2\n", + "x2 = df_dif['count rows'].values\n", + "y2 = df_dif['percent'].values\n", + "\n", + "sort_idx2 = np.argsort(x2)\n", + "x2_sorted = x2[sort_idx2]\n", + "y2_sorted = y2[sort_idx2]\n", + "\n", + "x2_unique, idx2 = np.unique(x2_sorted, return_index=True)\n", + "y2_unique = y2_sorted[idx2]\n", + "\n", + "if len(x2_unique) >= 4:\n", + " spline2 = make_interp_spline(x2_unique, y2_unique, k=4)\n", + " x2_fine = np.linspace(x2_unique.min(), x2_unique.max(), 300)\n", + " \n", + " axes[1].scatter(x2, y2, alpha=0.6, label='Данные')\n", + " axes[1].plot(x2_fine, spline2(x2_fine), 'r-', linewidth=2, label='B-сплайн (k=3)')\n", + "else:\n", + " axes[1].scatter(x2, y2, alpha=0.6, label='Данные (недостаточно для сплайна)')\n", + "\n", + "axes[1].set_xlabel('Количество строк')\n", + "axes[1].set_ylabel('Процент (%)')\n", + "axes[1].set_title('B-сплайн аппроксимация')\n", + "axes[1].legend()\n", + "axes[1].grid(True, alpha=0.3)\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "id": "a4476a9f-0418-43fe-a1d1-ae8191394a2d", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABdEAAAJOCAYAAABYwk4SAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xl83HWdP/DX95grM5NJc/VIWkKapgVLL1CgFMq5rIK4tCq4gCurHLpYV1REVgVWFFFUhEU5VHYFBdFyCCq4oFss1w8pvYDSpqE0SdvcmXvme31+f3wz05mc37RJJpm+ng9KOzPv78xn5nvMZ97fz/f9kYQQAkRERERERERERERENIhc6AYQEREREREREREREU1VTKITEREREREREREREQ2DSXQiIiIiIiIiIiIiomEwiU5ERERERERERERENAwm0YmIiIiIiIiIiIiIhsEkOhERERERERERERHRMJhEJyIiIiIiIiIiIiIaBpPoRERERERERERERETDYBKdiIiIqMhZloWenh60tLQUuilERERERETTjlroBhARERHR+Ovs7MR9992H5557Du3t7TBNE263Gy+//DICgUChm0dERERERDRtMIlOAICHH34Yzz33HN5++22Ew2GUlZXh6KOPxkc/+lFccMEFkGVetHAkOf/88zFjxgw8+OCDY1ruqquuwq5du/CXv/xlglpGREROvPfee/jkJz8JwzBw2WWX4dhjj4WqqvB4PPD5fIVuHhGNM/blKRf78kREROOPSXQCADzxxBOoqqrC5z73OQQCAUQiEWzZsgXXX389XnjhBfzwhz8sdBOJiIjIoW9+85twuVx49NFHMXPmzEI3h4gmGPvyRERERBOLSXQCADz00ENwuVyD7i8rK8NDDz2Ea6+9FrW1tQVoGREREY3F9u3b8corr+AXv/gFE+hERwj25YmIiIgmFq/rIwAYstMNADU1NQCQdwnoc889hyuvvBKrVq3C4sWLcfbZZ+Puu++GaZp5y1522WVYuHBh9s+JJ56IK6+8Ejt37syLW7hwIe666668+372s59h4cKFuOyyy/LuT6fTuOuuu3DuuefiuOOOw6pVq3DNNddg7969AIDW1lYsXLgQjz32WN5yN998MxYuXIjrr78+e99jjz2GhQsXYvHixejp6cmLf+ONN7Lt3rZtW95jf/rTn7BmzRosWbIEJ554Ir785S+jvb190Ge3e/dufOELX8BJJ52EJUuW4Nxzz8WPfvQjAMBdd92V99kM9efVV1/Nfo7nn3/+oOcfza5du3D11Vdj5cqVWLx4MT74wQ/ipz/9KXRdHxT785//HCeddBJWrlyZ99n9z//8Dz7wgQ/gtNNOw+OPPz5ouSeeeAKrV6/GCSecgHvvvTd7/x//+EesWrUKJ554Iu67775By0UiEXz729/G6tWrsXjxYpxzzjm47777YFlWNmaodRmLxbBmzRqceeaZ6OjoyMaM9CezzjPru7W1Nft8lmXhwx/+8KDXuf766/Oe4/3vfz8uu+wy/P3vf897H2eeeSauuuqqQe/vP//zP7Fw4cK8+wzDwN13342zzz4bixcvxplnnokf/vCH0DRt0PIbNmzApZdeiuXLl2PFihVYu3YtnnrqKQCD96uh/mSMZd8aSub5/vu//3vQY//4j/+IhQsX4j//8z/z7h9t3Y5lnQFAS0sL1q1bhw984ANYunQpPv7xj+P//u//hmzvcPvVwPf697//HevWrcPpp5+OxYsXY/Xq1fjOd76DVCo16mfipE2vvvrqqO9x4HrJlVk+cwwAgPb2dpx55plYs2YN4vF49v7u7m7ccMMNWLlyJY477jhccMEFQ+6rI30+uZ93JiZXPB7HKaecMqhNQ72PofYzwN6m//mf/xnLli3D8uXLceWVV2LXrl2D2jiex00n3z/r16/HJz/5SZx88slYvHgxPvShD+HXv/71kJ/fUMarvYDz75bMZz/Un8znvmXLFng8HuzduxfnnXceFi9ejFNOOQXf/OY30dfXl/dcw33H/PznPx9yXTrZJwfuA4sXL8a5556Le++9F0IIx58vETnHvjz78uzLsy8/EPvyQ2Nf3sa+/Pgf57dv346LL74YS5YswZlnnomHH3540Gs6WedOjp9UGByJTnkikQgMw0A8Hsebb76JX/ziFzjvvPMwZ86cbMzjjz+OkpISXH755SgpKcErr7yCO++8E7FYDF/96lfznq++vh5XX301hBBoaWnBAw88gCuvvHLYL85MG4bqrJmmiauuugovv/wyzjvvPHzyk59EPB7Hiy++iJ07d2LevHlDPt97772H3/72t8O+nizL+P3vf49PfepT2fsee+wxeDwepNPpvNjHHnsMX/va13Dcccfh2muvRXd3N375y19i06ZNeOKJJ1BaWgoA2LFjBy655BKoqoqLLroINTU12Lt3L/7yl7/gi1/8Is4555y89t56662YP38+Pv7xj2fvmz9//rBtduLtt9+GJEn49Kc/DZ/Ph23btuHOO+/EG2+8gXvuuSf7Y+rpp5/G9773PZxxxhk49dRT8Ytf/ALt7e3o7OxEPB7HF77wBfzhD3/A1772NcybNw/HH388AOD111/H9ddfj+XLl+P888/Hk08+iZaWFqRSKdx99924+uqrsXHjRvzgBz/AnDlzsj8ekskkLr30UrS3t+Piiy/G7Nmz8cYbb+CHP/whOjs78R//8R9Dvh9d17Fu3Trs27cPDz/8MKqrq5FIJPC9730vG/O///u/+N///d+8+4bbLgDgySefHPRFnDFjxgx87WtfA2B3en75y1/iiiuuwIYNG7LreSy+/vWv4/HHH8e5556Lyy+/HFu3bsW9996L3bt34+67787GPfbYY7jhhhuwYMECXHXVVQgGg3j77bfxt7/9DR/+8Idx9dVX46Mf/SgAoLe3F7feeisuuuii7HoZyXD71kg8Hg8ee+yxvP1j06ZN2Ldv36BYJ+u2vLzc8Trr6urCxRdfjGQyicsuuwwzZszA448/js9+9rO48847cc455wzZ5ptuugklJSUAMOTl68888wxSqRQ+8YlPoKysDFu3bsVDDz2EAwcO4M477xzx83DSpvnz5+e9n0cffRS7d+/Obk8ABnVuRxKNRnHFFVdAVVXcf//98Pv9AIBUKoXLLrsMe/fuxSWXXILa2lo888wzuP766xGJRPAv//IvQz5fbttuvfXWUV//gQceQFdXl+P2DvTEE0/g+uuvx6pVq/DlL38ZyWQSDz/8MP75n/8Zjz/+eHZk5HgfN518/zz88MNYsGABzjzzTKiqir/+9a+4+eabIYTAJZdcMuL7Gs/2Ov1uyXXOOedk94HXX38dv/nNb7KP9fb2Ip1O46abbsJJJ52Eiy++GHv37sWvf/1rbNmyBb/97W/hdrtHfH9DGes+efXVV6O+vh7pdBp//OMf8cMf/hDl5eX42Mc+NubXJiJn2Je3sS/Pvjz78jb25fOxLz927Ms7a284HMaVV16JD37wgzjvvPPwpz/9CTfddBNcLld2nz/UdT7U8ZMKRBDlOPfcc0VjY2P2z3XXXSd0Xc+LSSaTg5b7xje+IZYuXSrS6XT2vksvvVRceumleXE//OEPRWNjo+ju7s7e19jYKO68887s7e9973vi5JNPFhdeeGHe8r/73e9EY2OjeOCBBwa9vmVZQgghWlpaRGNjo1i/fn32sS984Qvi/PPPF6tXrxZf/epXs/evX79eNDY2imuvvVacf/752fsTiYRYsWKFuPbaa0VjY6PYunWrEEIITdPEySefLM4//3yRSqWy8X/9619FY2Oj+PGPf5y975JLLhHLly8XbW1tQ7ZzoDPOOCOvbbkuvfRScd555w352Fg9+uijorGxUTz++OPZ+y644AJx8cUXZ9t24MABcfzxx4tTTjlFhMNhIYQQ6XRanHHGGeKzn/1sdrmrr75anHnmmdl1HovFxJlnnimWLl0q9u7dK4Sw3+/FF18sLrjgguxyd999t1i2bJl4991389p2++23i2OOOUbs27dPCJG/Li3LEl/60pfE0qVLxZYtW4Z9f3feeadobGwc8rHM+m5pacm+p9NPP1185jOfGbTNfPWrXxVnnHFG3vK/+c1vRGNjY97rn3HGGeLKK68c9Fo333xzXjvefvtt0djYKP7jP/4jL+673/2uaGxsFC+//LIQQohIJCKWL18uPvaxj+VtY0IMve0Mtb3ncrpvDaexsVF8/vOfF8cee6zYtm1b9v4bbrghu3/cfPPN2fudrttcI62zb3/726KxsVG89tpr2fsy29kZZ5whTNPMi88cX3p6erL3nXfeeYPe61DHsHvvvVcsXLhw0D57uG0SYujtaSSvvPKKaGxsFK+88opIp9Pi0ksvFSeffLJ477338uL++7//WzQ2Noonn3wye5+maeKiiy4Sy5YtE9FoNC/+hz/8oVi4cGHefQOPPQPXR3d3t1i+fHl2P3nllVeyjy1cuDDvuCfE4P0sFouJE044QXz961/Pi+vs7BTHH3983v3jfdx08v0z1Lbwr//6r+Kss84a8nlzjVd7x/LdIoQQuq6LxsZGcdddd2XvG/i5Z9bjv/zLvwjDMAbFPfjgg9n7hvuO+dnPfpb3nEI43/5zt+GMdDotFi1aJG666aYhPx8iGh/sy7Mvz748+/K5y7Mvf3htEoJ9efblnbW3sbFR/OIXv8jel06nxUc+8hFx8sknC03ThBDO1/mhHD9pcrCcC+W59dZb8cADD+D222/HRz/6UTz11FP4xje+kRfj9Xqz/47FYujp6cEJJ5yAZDKJ5ubmvFhd19HT04Oenh688cYb+N///V8sXLgQM2bMGPL129vb8dBDD+Fzn/tc9gxtxp///GfMmDEDl1566aDlJEka8vm2b9+OZ555Btdee23eZay5LrjgArz77rvZSz2fffZZBINBnHzyyYOeq7u7G5/4xCfg8Xiy959++umor6/PnhHt6enBa6+9hrVr1+aN+hmpnaMxTTP7OQ51yeBwNE3LLtfT04OzzjoLlZWVeOaZZ7Jt3bFjB84+++xs22bOnIlZs2bh6KOPzo7ScLvdOP300/Hyyy9nn/uVV17B6tWrs6MZ/X4/GhoaUF5ejrlz52bf79lnn40dO3agt7cXgD1y4Pjjj0dpaWle21auXAnTNPHaa68Neh/f+9738NRTT+GOO+7AkiVLDuETHOxXv/oV+vr6cM011wz5uGVZ2ba9/fbb2Qm7Bo4qMgwj73309PQMGvW0YcMGAMDll1+ed/+//uu/5j3+4osvIh6P48orr8zbxoBD33YyRtq3RlJZWYnVq1dnLyVLJpP405/+hLVr1w6KPZR1O5INGzZgyZIlOOGEE7L3+f1+XHTRRWhra0NTU1NefOZzH/jZDZR7DEskEujp6cHy5cshhMBbb701rm06HJZl4brrrsOWLVtw3333DRqJ9cILL6CqqirvEnGXy4XLLrsMiURi0Oet6/qYRx//5Cc/QTAYHPKS4YqKChw4cGDE5V966SVEIhGcd955eduELMtYunRp9hLIiThuOvn+yd0WotEoenp68IEPfAAtLS2IRqPDPvd4ttfpd0vu+wLgaF1efvnlUBQle/sjH/kIKisrRxxBOpKxbv+Zz3Tfvn24//77YVkWTjrppEN6bSJyhn159uXZl7exL29jX/7w2nQ42Je3FXtfPiMzoj3D7XbjoosuQnd3N958800AY1/nwMQcP+nQsZwL5Vm+fHn23x/+8Icxd+5c/OhHP8JHP/rR7CVmu3btwh133IFXXnkFsVgsb/mBB6o33ngjrwNbV1eHu+++e9gD05133onq6mpcdNFFePbZZ/Me27t3L44++mioqvPN9gc/+AFOOOEEnHHGGfjWt741ZEx5eTlWr16N9evX47jjjsP69evxT//0T4M66plL3o4++uhBz1FfX4/XX38dgF1jDQAaGxsdt3M0zc3N2c9RlmXMmzcP11xzDT784Q+PuNzTTz+dd9lZRqbuZOZL08nEczNnzkQikUAkEoEQAolEwvFymdeaMWMG3nvvPbzzzjuDfthkDKxp+Zvf/AabN28GYF8iNR6i0SjuuecefOpTn0JFRcWQMfv3789rY1VVFe66665BndaNGzcO+14y2trasustV1VVFUpLS9HW1gbg4HpZsGDBmN/TaEbat0azZs0a3HDDDbj++uvxzDPPIBQKDZkIG+u6Hc2+ffuwdOnSQffX19dnH8/dz3p7e+FyueDz+UZ93jvvvBN/+ctfBm1TA49ph9umw3HHHXdg8+bNkCRpyBqPbW1tOOqoowYdqzI/DgdephuNRrOXxjrR0tKCRx55BDfddNOQP2aWL1+OZ599Fh/84Afxvve9D4D9QybXnj17AGDYSxMDgUD2tYDxPW46+f55/fXXcdddd2Hz5s1IJpN5y0ejUQSDwSGfezzb6/S7JSMSiQDAiD+gM+8xs11mKIqCo446KnvMOZS2jmX7/7d/+7fsv2VZxmc/+1mce+65h/TaROQM+/Lsyw+HfXn25dmXZ18+F/vy49ve6urqQeunrq4OgL2uly1bNuZ1PhHHTzo8TKLTiDITK2zduhXHH388IpEILr30UgQCAaxbtw7z5s2Dx+PBm2++idtvvz1vMhkAeRNd9PT04MEHH8Rll12Gxx9/HFVVVXmxu3fvxuOPP47vf//7w06ONBYbN27ESy+9lFcndjhr167FV7/61eyEM9/+9rcHTTxTSDU1NbjlllsAAH19ffjlL3+J6667DnPnzsWyZcuGXW7VqlV44IEH8u779re/nZ3YbeAoCyecTtgy3HKWZeGUU07BZz7zmSHjMl80GZs3b8YXv/hFbNu2DbfeeitOPfVUlJeXH1IbMu6//37IsoxPf/rTgybZy6isrMT3v/99APYX8Pr16/GZz3wGv/71r/Nq4C1duhT//u//nrfsQw89hOeff37Qcx7uCJRDdbj71umnnw6Xy4XnnnsOjz322JA/TIGxr9vx1tbWhtmzZ4/4OZumicsvvxzhcBif+cxnUF9fj5KSErS3t+P6668fdAwrpC1btuC73/0uHnroIXzjG9/Ak08+eUh1rDM6OzsHHXdHcscdd6Curg4XXnjhkMfDr3zlK7jyyiuHXd8Assea733ve0O+du4o6fE22vfP3r178alPfQr19fW4/vrrMXv2bLhcLmzYsAH//d//PaW2hVyZmpaVlZXDxow2gmuyfPWrX8WiRYug6zq2bduGe+65B6qqDjtqkIjGH/vyUwP78uzLHw725Q9iX559+enelx+LiTh+0uFhEp1GlOmYZb5k/9//+3/o6+vDf/3Xf+H9739/Nm7g7M0ZoVAIK1euzN7+wAc+gFNPPRWPPfbYoJnQf/CDH2DRokX40Ic+NORzzZs3D1u2bIGu66N2HoQQ+MEPfoBzzjlnxI5pxmmnnQaPx4MvfvGLOP744zFv3rxBXzSZy3zefffdQWfn33333ezjmcsfh5vk5lCUlJTkfY7HH388TjvtNGzcuHHE91ddXZ036YRpmujs7MSKFSsAIPtF6GR25/b2drhcruzlUy6Xy/FymbYA9npMJBJ572cka9euxdVXX4329nacd955uPXWW7Md4kPR0dGBX/7yl7j22msRCASG7Xh7PJ68Np555pn4wAc+gF/96ld5s9jPmDFj0Ht57rnn8m7X1NTAsiy89957eZeQdnV1IRKJoKamBsDBSXh27dqFo4466pDf40Cj7VujUVUVF1xwAX7605+iqakJ3/nOd4aMG+u6Hc2cOXPw7rvvDro/c6l57qV3hmFgx44dOPXUU0d8zp07d2LPnj247bbb8E//9E/Z+1988cVxb9Ph+vznP48LL7wQxxxzDNauXYuf/OQneT/yampq8M4778CyrLwfQsO1Zffu3Tj22GMdvfZbb72FP/zhD7j77ruH7RwfddRRePrpp7Fz587syIiNGzfi5z//eTYmczysqKgYcbuYiOPmaN8/f/nLX6BpGn7605/mfVaZy1JHMp7tdfrdkpG5zHikCesyEzw1Nzdn2wogexw65phjDrmtY9n+3/e+9+HEE08EAKxevRodHR24//778bnPfW7YsgxENL7Ylz+IfXn25dmXZ1+effmD2Jcf3/Z2dHQgkUjkjUbPjOTPHCPGus7H+/hJh4+/YAjAwTpuAz366KOQJCl7uVdmR8+ckQTsWn2//vWvHb1OpiM/sBbg5s2b8fzzz+PLX/7ysGee/+Ef/gG9vb341a9+Neix3PYAwB//+Ee88847uPbaax21S1VVfOQjH8E777wzZH04AFi8eDEqKirwyCOP5LV/w4YN2L17N04//XQA9iWl73//+7F+/fpBl+MMbOehyjzPSGd+TdMcdN+vf/1rhMPh7EzotbW1mDNnDp5//vnsc7a3t+PAgQPYs2dPtmyApmnYsGEDli1bBpfLBZfLhaVLl2LDhg3ZzyIej6OpqQk9PT3ZH2JCCDz//POYM2dO9ovjgx/8IN544w387W9/G9S+SCQCwzDy7svUq5s5cya+/OUv4/e//z02btzo/MMa4O6770ZFRQUuvvjiMS2n6zpM0xxTHcuM1atXAwD+53/+J+/+zMiizOOrVq2C3+/HvffeO2hk0aFuO072LSc++tGPYufOnTjhhBPyknK5xrpuR7N69Wps3boVb7zxRva+RCKBRx99FDU1NWhoaMje/+KLLyIajeKss84a8TmHOoYJIfDLX/5y3Nt0uDLb/qJFi/Cv//qv+NnPfpbX0TvttNPQ2dmJP/7xj9n7DMPAgw8+iJKSkrzkyLZt27B3717H9ah/8IMfYMWKFaN+ni6XC+973/uwcuVKrFy5ctD7P/XUUxEIBHDvvfdma3nnylwWPBnHzYHfP5njZ+7zZ0aqjWY82+v0uyXjT3/605A1XXOdfPLJcLvdePDBB/NG4fz+979HV1cXzjjjjDG1MeNwt/9UKgXTNMd8LCCi0bEvz748+/IjY1+effmxtulwsS9vK/a+fIZhGHlXTmmaht/85jcoLy/PlssZyzoHxv/4SYePI9EJAPClL30J9fX1OPvss1FZWYmenh688MILePXVV3H11VdnL3lbvnw5QqEQrr/+elx22WWQJAlPPvnksAearq4uPPnkkwDsGme/+c1voKrqoKTAxo0bccopp4x4dvOf/umf8MQTT+DWW2/NXpKaTCbx8ssv4xOf+ATOPvvsvOf7+Mc/Pqge7Ei+8IUv4NOf/jRCodCQj7tcLnz5y1/G1772NVx66aU477zz0N3djV/+8peoqanBpz71qWzs17/+dXziE5/AhRdeiIsuugi1tbVoa2vD//3f/2U/j7FIJBJ44YUXANi1sB588EG4XK5Bn2Ou3//+93jqqaewcuVKlJSU4JVXXsGzzz6LE088Me+s/VVXXYUbb7wRn/3sZ3HqqafikUcegSRJ0HUdl19+OdasWYM//elPaG1txY033pi33BVXXIHLL78cH/rQh/Dkk08ikUhAlmVcffXV+MQnPoGNGzfi9ddfx80335xd7tOf/jT+8pe/4Oqrr8aFF16I973vfUgmk9i5cyeeffZZPP/888NeonTRRRfh6aefxo033oinn3561Hp5Q9m4cSNuv/32US+lSyQS2XUVi8Xw5JNPIp1O521nTi1atAgXXnghfvOb3yASieD9738/tm3bhscffxxnn312tjMUCATwta99DV//+tfx0Y9+FOeffz5KS0uxY8cOpFIp3HbbbYf0fkfbt5yYP38+XnnllbzJWwY6nHU7lCuvvBJ/+MMfcMUVV+Cyyy5DKBTCE088gdbWVtx1113ZTvQf//hH3HbbbXC73UilUnn7WDQahWmaeO6553D22Wejvr4e8+bNw2233Yb29nYEAgE8++yz2R+Z49Wm8XbNNdfgz3/+M77xjW/g4YcfhizLuOiii/Cb3/wG119/Pd58803U1NTg2WefxaZNm3DDDTdkaxT+13/9Fx588EHMnTs3b98fycaNG/Hwww8fdrsDgQBuuukmXHfddVizZg0+9KEPoby8HPv27cOGDRuwYsUKfPOb3wQw/sfN0b5/TjnlFLhcLlx99dW4+OKLEY/H8dvf/hYVFRXo7Owc9fnHq71Ov1u2bduGH//4x/jb3/6Gm2++ecQf0mVlZfjsZz+LH//4x/j0pz+Ns846Cy0tLfjVr36FRYsW4WMf+1hefO53TEZmlNZrr70Gl8uFmTNnjnn7f+mll3DgwAEYhoFt27bhqaeewplnnnlYlzIT0dDYl2dfnn35fOzL52NffmxtGm/syxdvXz6juroa999/P9ra2lBXV4c//vGPePvtt/Gtb30re/WV03U+lPE4ftLhYxKdANgd77/+9a948MEH0dPTg5KSEixZsgT33Xdf9sw6YF/uds899+C2227DHXfcgdLSUlxwwQU4+eST8elPf3rQ8zY3N+O6664DAJSWlqKhoQHXX389jjvuuLw4SZLwpS99acQ2KoqC+++/Hz/96U/x9NNP489//jPKysqwYsWKvLp2gD1L81hrrrrd7lE7BWvWrIHX68X999+P22+/HSUlJTj77LPxla98BaWlpdm4RYsW4dFHH8WPf/xjPPzww0in05gzZw4++MEPjqlNGW1tbbjiiisAHPwcf/KTn4x4Sf5xxx2HP//5z3jggQcQDocxc+ZMXH311fjsZz+bN+rl4osvRjgcxi9+8Qts3boV1113HX72s59hxowZOOecc/DjH/8Ybrcbt9xyC0477bTscqeddhq+/e1v484778SPfvQjXHnllXj99dexa9cufO5zn8N3vvMd6LqOdevW5Y0U8fl8ePDBB3HvvffimWeewRNPPIFAIIC6ujp8/vOfH3byD8DeTr71rW/hIx/5CO64444hJ1oazTHHHJM3G/Zwent7s9tuSUkJjj76aHzve987pI43ANxyyy2ora3F448/jueeew6VlZW46qqrBm2nH/vYx1BRUYH77rsPP/nJT6CqKurr6/N+2I2Fk33LqdyZ0IdyOOt2KJWVlXjkkUfw/e9/Hw899BDS6TQWLlyIe+65J+9H5+23356dWOs//uM/hnyu73znOzj77LPhcrlwzz334JZbbsG9994Lj8eDc845B5dccgk+8pGPjFubxpvH48G3vvUtfPKTn8RDDz2ET37yk/B6vXjwwQdx++234/HHH0csFsPRRx+NW2+9FWvWrMku+9vf/hZnnXUW/v3f/91xZ+uss87KXip+uD784Q+juroa9913H37+859D0zTMnDkTJ5xwQl47x/u4Odr3T319Pe68807ccccduO2221BZWYlPfOITKC8vxw033DDq849ne518t7zyyivo6+vD7bffPupEdADwuc99DqFQCA899BC++93vIhQKYc2aNbj22msHJR5yv2MGuv7667Pb1Fi3/3vuuQeAPUJ05syZuOSSS7Bu3boxfjpE5AT78uzLsy+fj335wdiXZ1/+ULAv70woFMJ3v/td3HLLLXj00UdRWVmJb37zm/j4xz+ejXG6zocyHsdPOnySGK9rK4ioaJx//vmYMWMGHnzwwTEtd9VVV2HXrl34y1/+MkEtIxrszDPPxDXXXDNsx+PVV1/F1772NW6XRIdgtP2LiIimHvblaTphX56mu8suuwy9vb14+umnC90UmmCsiU5ERERERERERERENAwm0YmIaFo7++yzMW/evGEfr6ysPORLd4mOdO9///sxc+bMQjeDiIiIihT78kQ0XbAmOhERTWuj1bybP3++o7p4RDTYoUyCRkREROQU+/JENF2wJjoRERERERERERER0TBYzoWIiIiIiIiIiIiIaBhMohMRERERERERERERDYNJdCIiIiIiIiIiIiKiYXBiUQCWZcEwDMiyDEmSCt0cIiIiIipCQghYlgVVVSHLHMuSwb44EREREU20w+2LM4kOwDAMbNu2rdDNICIiIqIjwHHHHQe3213oZkwZ7IsTERER0WQ51L44k+hA9uzDcccdB0VRCtya4maaJrZt28bPushxPRc/ruMjA9dz8eM6nlyZz5uj0PMN7Itzu6SBuE1QLm4PlIvbA+Xi9kC5Bm4Ph9sXZxIdyF42qigKd7JJws/6yMD1XPy4jo8MXM/Fj+t4crFkSb7h+uLcLmkgbhOUi9sD5eL2QLm4PVCugdvDofbFOQyGiIiIiIiIiIiIiGgYTKITEREREREREREREQ2DSXQiIiIiIiIiIiIiomEwiU5ERERERERERERENAwm0YmIiIiIiIiIiIiIhsEkOhERERERERERERHRMJhEJyIiIiIiIiIiIiIaBpPoRERERERERERERETDYBKdiIiIiIiIiIiIiGgYTKITEREREREREREREQ2DSXQiIiIiIiIiIiIiomEwiU5ERERERERERERENAwm0YmIiIiIiIiIiIiIhsEkOhERERERERERERHRMNRCN4ComFmWwJ7uOKIpA0GviroKP2RZKnSziIiIiIiIiIiIJtV0zpMxiU40Qba3hbF+UyuaOmJI6xY8LhkN1QGsXVGLxTWhQjePiIiIiIiIiIhoUkz3PBmT6EQTYHtbGHc+vws9cQ2zQz74QgqSmoltrWG09Sax7qwF0+IAQUREREREREREdDiKIU/GmuhE48yyBNZvakVPXENDdQABrwpFlhDwqmioDqAnruGxTW2wLFHophIREREREREREU2YYsmTMYlONM72dMfR1BHD7JAPABBJ6uiOpRFJ6gCA2SEfdnVEsac7XshmEhERERERERERTahiyZOxnAvROIumDKR1CymXiXfaI4gkDZiWgCJLKPWpOKrCj7RuIZoyCt1UIiIiIiIiIiKiCVMseTIm0YnGWdCrQjctbG0Nw7QslLhVqLIEwxLoiWsIJw3MCXkR9HL3IyIiIiIiIiKi4lUseTKWcyEaZ/NmlCBtmIindJR6VbgUGZIkwaXIKPWqiKd0aIaFeTNKCt1UIiIiIiIiIiKiCVMseTIm0YnG2d7eBDyqgoBHRSRlQDctCCGgmxYiKQMBjwq3KmNvb6LQTSUiIiIiIiIiIpowxZInYxKdaJxFUwZciowltWUo97uhGXZdJ82wUOH34LjaMrgUecrXeiIiIiIiIiIiIjocxZInm9rFZoimoaBXhcclw+NScPy8GYimDeiGBZcqI+hREUubSBnmlK/1REREREREREREdDiKJU/GkehE46yuwo+G6gD2h5MQAIJeF8oDHgS9LggA+8NJLKgOoq7CX+imEhERERERERERTZhiyZMxiU40zmRZwtoVtSj3u9HUEUMsZcC0BGIpA00dMZT73VizogayLBW6qURERERERERERBOmWPJkTKITTYDFNSGsO2sBjqsNoS+pYU9XHH1JDUtqy7DurAVYXBMqdBOJiIiIiIiIiIgmXDHkyaZ2sRmiaWxxTQjHzi7Fnu44oikDQa+Kugr/lD+zRkRERERERERENJ6me56MSXSiCSTLEuqrAoVuBhERERERERERUUFN5zwZy7kQEREREREREREREQ2DSXQiIiIiIiIiIiIiomEwiU5ERERERERERERENAwm0YmIiIiIiIiIiIiIhsEkOhERERERERERERHRMJhEJyIiIiIiIiIiIiIaBpPoRERERERERERERETDYBKdiIiIiIiIiIiIiGgYTKITEREREREREREREQ2DSXQiIiIiIiIiIiIiomGohW4AHTksS+DdrjiaenSEuuKorwpClqVCN4uIiIiIiIiIiMgRyxLY0x1HNGUg6FVRV+FnfusIwCQ6TYrtbWGs39SKXe1R9PRF8NR7b2HBzCDWrqjF4ppQoZtHREREREREREQ0okx+q6kjhrRuweOS0VAdYH7rCMAkOk247W1h3Pn8LvTENcwq9cBjKvD5XNjWGkZbbxLrzlrAAw0REREREREREU1Zufmt2SEffCEFSc1kfusIwZroNKEsS2D9plb0xDU0VAcQ8KqQJQkBr4qG6gB64hoe29QGyxKFbioREREREREREdEgQ+W3FJn5rSMJk+g0ofZ0x9HUEcPskA+SlF8fSpIkzA75sKsjij3d8QK1kIiIiIiIiIiIaHjMbxGT6DShoikDad2Cz60M+bjPrSCtW4imjEluGRERERERERER0eiY3yIm0WlCBb0qPC4ZSc0EhEA0ZSCc6j+oCIGkZsLjkhH0sjw/ERERERERERFNPXn5rSFMlfyWZQk0d8awpaUPzZ0xlpcZR8xc0oSqq/CjoTqAV5u7oZt28jyl6dgb60XQq8KlyDipvhJ1Ff5CN5WIiIiIiIiIiGiQTH5rW2sYDZ5AXkkXIQT2h5NYUltW0PzW9rYw1m9qRVNHDGndgsclo6E6gLUrajnh6ThgEp0mlCxLWDa3DE9v2YeEZqLEo0CVBEwhsK8vhRK3gqVzQ5BlafQnIyIiIiIiIiIimmSyLGHtilq09SbR1BFD0KtCkSSY/VUXyv1urFlRU7D81va2MO58fhd64hpmh3zwhRQkNRPbWsNo601i3VkLmEg/TCznQhPKsgQ2t/Qh0D/qPJzQ0ZsSCCd0uBQZAa+KLS1hXl5CRERERERERERT1uKaEM5bMhsJzcAbLX145d0evNHSh4Rm4LwlswuWpLYsgfWbWtET19BQHUDAq0KRJQS8KhqqA+iJa3hsUxtzb4eJI9FpQu3pjmPz3j4kNAuKDFQE3NA1DS63G5phIaFZeGNvL/Z0x1FfFSh0c4mIiIiIiIiIiAbZ3hbGH7buh8+lYPncGVBkwLSASFLDH7bux/yqQEES6Xu642jqiGF2yJdXZgYAJEnC7JAPuzqizL0dJibRaUKFkzr29SVhCoFSrwuGJWBIElRZhterIJo2sK8viXBSL3RTiYiIiIiIiIiIBskd7b1gZjAvWT2z1IOmjhge29SGY2eXTnpJl2jKQFq34AspQz7ucytoj9jzFBaaZQns6Y4jmjIQ9Kqoq/BPmxLPTKLThIokdaRNCy5ZQk9CQ1q3YFgWVC0Nj0uGW5GRNi1EmEQnIiIiIiIiIqIpaCqP9g56VXhcMpKaiYDHHrCqGxZcqoygR0VSM+FxyQh6C5sGnu4TnzKJThOq1OeCLAG9CR2WEIAALACWZUEzLciShFKfC6U+V6GbSkRERERERERENMhUHu1dV+FHQ3UArzZ3QzNM9CUMGJaAKksoK1HhVhWcVF+Jugr/pLctoxgmPuXEojShgl4VlgBMS8DqT6AD/Yn07P2i4GfDiIiIiIiIiIiIhpI72nsohRztLcsSls0tw76+JPZ0JRBJ6UhoBiIpHXu6EtjXl8TSuaGClU0plolPmUSnCSUsIKWbGG43EADSuglhDRNARERERERERERUQJnR3vvDSQiRn+USQmB/OIkF1cGCjPa2LIHn326HZloQkKCbApopoJsCAhI008Jf3u4oWJJ6LKVwpjIm0WlCvdMRhW6OnCHXTAvvdEQnqUVERERERERERETOybKEtStqUe53o6kjhljKgGkJxFIGmjpiKPe7sWZFTUFGezd3xfDy7m7ohoAqAx6XDK8qw+OSocqAbgi8tLsLzV2xSW8bkFMKxz18KZy0PjUmPh1JQZPod911FxYuXJj35x//8R+zj6fTadx888048cQTsXz5cnz+859HV1dX3nPs27cPV155JZYuXYqTTz4Zt912Gwxjan/oR5L2SArWKKPMLcuOIyIiIqLJw744ERERkXOLa0JYd9YCHFcbQl9Sw56uOPqSGpbUlhW0pveOA1GEkzoAwBICmmHPQ6gZlj0/IYBwUseOA4UZwDqVS+GMRcFbt2DBAjzwwAPZ24py8KzEd77zHWzYsAF33HEHgsEgvvWtb+Gaa67BI488AgAwTRNXXXUVKisr8cgjj6CjowNf/epX4XK5cO211076exkLyxLY0x1HNGUg6FVRV+EvWG2iiSQJMWwplwzRH0dEREREk+tI7YsTERERHYrFNSEsmhnEi7u70BlNoyrowSnzK6GqhRun3BlJwbAEhMCgHJwlAAkCkmTHFUKmFM621jAaPIG8ki6ZUjhLassKOvGpEwVPoiuKgqqqqkH3R6NRrF+/HrfffjtOPvlkAHZH/kMf+hA2b96MZcuWYePGjWhqasIDDzyAyspKHHPMMfjCF76A22+/Hddccw3cbvdkvx1HtreFsX5TK5o6YkjrFjwuGQ3VAaxdUTvlZ6Idq+qgFxIG78S5pP44IiIiIppcR2JfnIiIiOhQDZXT+7+dnQXN6VUFPMAQCfQMe/Bqf1wBZErhtPUms7XRfW4FSc3E/nCyoKVwxqLgNdHfe+89rFq1CmeddRa+9KUvYd++fQCA7du3Q9d1rFy5Mhs7f/58zJkzB5s3bwYAbN68GY2NjaisrMzGrFq1CrFYDE1NTZP6Ppza3hbGnc/vwrbWMMp8btRV+lHmc2Nbq33/9rZwoZs4rnwexdFIdJ9n6LpIRERERDRxjrS+OBEREdGhmqo5PZ9HwSiVlGGhsLm3qVoKZywKOhJ9yZIluPXWW3H00Uejs7MTd999Ny655BI89dRT6OrqgsvlQmlpad4yFRUV6OzsBAB0dXXlddoBZG9nYsbCNIeuzTNeLEvgd6+3oCeexvwqf//lCwJ+j4z5VSXY3RnH+tdbsLC6eEq7xFK6o5HosZQ+4Z8/TZ7MuuQ6LV5cx0cGrufix3U8uaba5zxV++LcLmkgbhOUi9sD5eL2QLkmcnuYyjm96ZJ7O2ZWADf840K815PIlrc+qrwEsixNSLvGu29Z0CT66tWrs/9etGgRli5dijPOOAN/+tOf4PVOfnmPbdu2Tejz74saeGN3BAG3hJ6e9KDHPZaFTbsTeObFOOYEC15pZ1xs2eVs5t8t7zSj1uqY4NbQZJvofYoKj+v4yMD1XPy4jo9MU70vzu2SBuI2Qbm4PVAubg+UayK2h6mc05uuubcwgK2tE/8647U9TKlMbWlpKerq6rB3716sXLkSuq4jEonkjYDp7u7O1m2srKzE1q1b856jq6sLAIas7Tia4447Lm8ypfEmt4bh3rEDcypKoAxxVqrMEtjTnUDt0QuwpHbqX8bgRKu0D9KWrRACg86KZW5LErC0sR7Lls4pTCNp3JmmiW3btk34PkWFw3V8ZOB6Ln5cx5Mr83lPVVOlL87tkgbiNkG5uD1QLm4PlGsit4epnNNj7m1oA7eHw+2LT6kkejweR0tLC6qqqrB48WK4XC68/PLLOPfccwEAzc3N2LdvH5YtWwYAWLZsGe655x50d3ejoqICAPDSSy8hEAigoaFhzK+vKMqEHnRDJW54XQpSun25RzRlQDctuBQZQa+KlG7B61IQKnEXzcE/5HdDkSVYphh0WUnmtiJLdlyRvGc6aKL3KSo8ruMjA9dz8eM6JmDq9cW5XdJA3CYoF7cHysXtgXJNxPaQm9MLeAc/d0o3CpbTY+5tZOO1PRQ0iX7bbbfhjDPOwJw5c9DR0YG77roLsizj/PPPRzAYxNq1a/Hd734XoVAIgUAAt9xyC5YvX57tuK9atQoNDQ247rrr8JWvfAWdnZ244447cMkll8DtdhfyrQ2prsKPhuoAXm3uhmEKRFIGTEtAkSWUelWoioST6itRV+EvdFPHTcjnhs+lwDCNIWszSQB8LgUh39RbX0RERETF7EjrixMREREdqkxOb1trGA1uP2KaCd2w4FJlBNwK9oeTWFJbVpCcXib3ppvGsDHMvR2+gibRDxw4gGuvvRZ9fX0oLy/H8ccfj0cffRTl5eUAgBtuuAGyLGPdunXQNA2rVq3CjTfemF1eURTcc889uOmmm3DRRRfB5/PhwgsvxLp16wr1lkYkyxKWzS3D01v2IamZKPW54PMoSBsW9vUl4XMrWDo3VDSTigJA0KvCo8qIS4AlBl9SIkuAR7VH4hMRERHR5DnS+uJEREREh0qWJaxdUYu390fwl3c6YYn+JJcEyJKE+io/1qyoKUhOL+hVIUuDS7lkZPJvzL0dnoJ+ej/60Y9GfNzj8eDGG2/M66wPVFNTg/vvv3+8mzYhLEtgc0sfqoIe6KaFaMpELG1CkSXMKfNBVSRsaQnjw0vmFFUiHbB32MzfYsBtIiIiIpp8R1pfnIiIiOiwDRwdOtT9k8wSApopIEmAIgE5+X1I/YNadVPYif8CsyyBPd1xRFMGgl4VdRX+aZMD5SmISbSnO46mjhjmVwUR8CiIpo3spR9Bj4pY2sSujij2dMdRXxUodHPHRbS/ZA0kQMrswcLeiTN7tCkEoqnhLzkhIiIiIiIiIiIqFMsSWL+pFYYlcMbCKsTSZnaew4BHwe7OOB7b1IZjZ5dOelK4qSMOCYBblSEE8iY+NS0BVToY1zizdOgnmQTb28JYv6kVTR0xpHULHpeMhuoA1q6oxeKayZ2M9VAwiT6JoikDad2CL6RACCCWMpDSTXhdCgJuFT63gvaIVVQJ5UhSh2YJyJIEIeVPcCBJEmQJ0EyBSFIvWBuJiIiIiIiIiIiGkxkYOzvkgyzLKPXJeY/PDvkKODDWnm8x4FKR1E2kdAuWsHNxXpcMn0tBUjdRyOHy29vCuPP5XeiJa5gd8sEXUpDUTGxrDaOtN4l1Zy2Y8ol0JtEnUdCrwuOS0dQRRXNXHAnNhGUJyLKEEreC+ko//B61qGoUBbwqTNOCJYAStwIBwDBNqIoCCUBSt2CZAoEies9ERERERERERFQ8cgfGDqWQA2MbZwYR8KoIJ3TopgXDEhACsCSBlC5gWgKhEhcaZwYnvW3AwVH8PXENDdUBSJI9ND7gVdHgCaCpI1awUfxjIY8eQuOlrsIPWQK2toYRTepQZQk+lwJVlhBN6tjaGoYsSQWZyXeixFIGVFmGItv1lwBA7i8apZsCimxfZhIrotH3RERERERERERUPDIDY5OaOeTjSc2ExyUXZGBsfWUAs0q9SGjmwdrosgSpv/pDQjMxO+RFfWVhSkfnjuLPJNAzJEnKG8U/lTGJPoksS2BvTwJCCKiK3P/hC8gAVEWGEAItPQlYVuEL/Y+XUp8LJR4FXpcClyJBNy1oloBuWnArErwuBSUeFaU+V6GbSkRERERERERENEhdhR8N1QHsDychBkzQKYTA/nASC6qDBRkYa1kCvQkNkgTI/ROLWv2j0WXJnpewN64XLN+YHcXvViCEXdK5O5ZGJKlDCAGfW0Fan/rlrVlDYxK9uLsLvQkd5X43NFNAMywIS0CS7GSy26uiJ6Hhxd1dWL2wutDNHRchnwtzQj7s7Y4jblkQ/TOLCkjQLAG/ImNOyIsQk+hERERERERERDQFybKEtStq0dabzI6q9rntut77w0mU+91Ys6KmIOVIMvnGCr8bmmkhrdtllWUJ8LhkuBW5oPnGzCj+A+EUDkSSiCQNmJZdx73Up2JWqa9go/jHYmq3rsh0RtMwTIEZPhckSYJuimyhf5ciwRICXTENndF0oZs6buoq/Jhb7sOujhiEEP1/ACHshHraFJhXXlJUJWyIiIiIiIiIiKi4LK4JYd1ZC7B+UyuaOmJoj1jwuGQsqS3DmhU1BZsYc6rnG+sq/JhR4sILO7ugyIBbtatVCADdsTQ6Immsbqya8rlBJtEnUVXQA1WRkDYs+Nwq3Gr+2SlNN6EqEqqCngK1cKJI2f9LkgxJsuy/CzgrMBERERERERER0Vgsrgnh2Nml2NMdRzRlIOhV7TkQCzgh5vTIN0owLIGUbiKezq0rL6AqQ0/WOtWwJvokOmV+JeaEvP01f6y8x4SwEEnqqAn5cMr8ygK1cPzt6Y6jpScBjyoDkgSpv6CLBAFIEjyqjL09iSk/eQAREREREREREZEsS6ivCmDp3DLUVwUKmkAHpn6+cWBuUMCuIy+AaZUbZBJ9EqmqjKtWz4fPraAjkkZSM2BaFpKagY5IGj63gitX10NVi2e1hJM69vUlIUnAnJAXM0u9KPPKmFnqxZyQF5IE7OtLIpzUC91UIiIiIiIiIiKiaWWq5xuHyg1WBb3TLjfIci6T7CPLagAA927YjX3hFCIpA6oi4agKP65cXZ99vFhEkjrSpoUSlwJJkuFSBExFgkuRAUhwKzISuonIFN9RiIiIiIiIiIiIpqKpnG8cnBsEkFPBZbrkBplEL4CPLKvBeYtn48XdXeiMplEV9OCU+ZVFNQI9o9TngkeVkTZMeF0KdMuCZgrIpgWXbN/vURWU+lyFbioREREREREREdG0NFXzjQNzg4YlYFkCsixBlaVpkxtkEr1AVFXG6oXVhW7GhAv5XJgT8mFvTwL7wkmYmR0lnYIiS/C7VcwJeRGa4jsKERERERERERHRVDYV841D5QaFPVXitMoNFt/QZ5pS6ir8mFtegrhmIKVb0E0BUwC6KZDSLcQ1A/PKS1BX4S90U4mIiIiIiIiIiGgcDZUbNCwx7XKDTKLThGvtTSClW0M+ltIttPQmJrlFRERERERERERENBmKITfIJDpNqN0dMby1PzJizNv7I9jdEZukFhEREREREREREdFkGCo3KA2ImQ65QSbRaUL9rakTad2CBECV7T+KdPDfEuwzTn9r6ix0U4mIiIiIiIiIiGgcDZUblOXplxvkxKI0ofaFkxCwE+eSlDnPJLL/liW7Rvq+cLJgbSQiIiIiIiIiIqLxN1RuMHck+nTJDTKJThNqTsgHALAASEIAkCBE5lEBa0AcERERERERERERFYehcoMHTZ/cIJPoNKFWLaiEV5WRMiwYAgD6M+gHM+nwqjJWLagsSPuIiIiIiIiIiIhoYgybG8wxHXKDrIlOE6qhKohjZ5eOGHPs7FI0VAUnqUVEREREREREREQ0GYolN8gkOk24oNc17IYm9z9ORERERERERERExacYcoNMotOEau6KYVdnFF63AteArc0lA163gl2dUTR3xQrTQCIiIiIiIiIiIpoQxZIbZE30ArEsgT3dcURTBoJeFXUVfsiyNPqC08zO9ijCCR2GZc+0K8GufCQB9m1LIJzQsbM9iobqqX3ZBtFQjpR9mYiIiIiIiIgOzZGcOyiW3CCT6AWwvS2M9Zta0dQRQ1q34HHJaKgOYO2KWiyuCRW6eePKEkDaMO2dQgCKLEEIAUmSYFkCumnBsuw4ounmSNqXiYiIiIiIiGjsjvTcQTY3aOVPKSoACAHohgVLnvq5QSbRJ9n2tjDufH4XeuIaZod88IUUJDUT21rDaOtNYt1ZC4pqBypxy7CEvVMosgSp/ySbJAGyLMGwBKz+OKLpJLMvd8fSUBUJEIBmmNja0leU+zIRERERERERjc2RlgccSjY32H87d/y96P9jiamfG2QSfRJZlsD6Ta3oiWtoqPIjppkIJzS4VBkNVX40dcbx2KY2HDu7tGgu6UhoFmTJHn0uRP/FGiJztklAAiBLEhKaVeCWEjmX2Zd3dUTRE9eQSJuwYE8yUeJR0JPQim5fJiIiIiIiIiLnjsQ84FASKWvQCPTh4qYyJtEn0Z7uOJo6YihxK3h9by9643Y9IFWWMMPvwuyQD7s6otjTHUd9VaDQzR0XsiTBo8rQTQumELCEgBCABAFJAlyyBJciQ5aK82BxJNe8KmZ7uuN4qakLrT1JGEJA6v8GMAFEUgYSaRMvNnViT/e8otmXiYiIiIiIiMi53DzgppY+RJIGTEtAkSWU+lTMKvVO6zyg05xXZzw1fOa8nxD9cVMYk+iTKJoy0BPX0BFJIZo28jagmGagL6GjutSLaMooXCPHWePMAEIlLoQTOkR/bXQBuz66LAEuRUaoxIXGmdPvYDGaI73mVTHrTWjY0x2HkSnYlTsrhgAMIbCnO4HehFbAVhIRERERERFRoWTygH1xDWnTQolbhdpf2rgnriGeMlDmd0/LPOBYcl7lfvdoOXSI/ripbGoXmykyfo+CjkgKfQkdEIAqS3ApElTZLnHSl9DREUnB71EK3dRxU18ZwIKqINKGBQEJbpcMjwK4XTIEJKQNCwuqgqivLK4keqbm1bbWPmi6BUBA0y1sa+3Dnc/vwva2cKGbSIdh54EoNEPk1e6y+v/O3KcZFnYeiBa0nURERERERERUGH6Pgt6EhoRuIuRzwaXIkCS7IkPI50JCN9Gb0KZdHvBgziuMMp8bdZV+lPnc2NYaHjLnFXN4ksBpXKFwJPoksoRAXDMhAKiKlC1hIkmAKgGGJZDQTFhiik9HO0ahEhVelwLDsqfhFcIeia4qElRZRlmJq9BNHFeZmldNHTF0x9NIaKb9niWgxK2gwq8fETWvillPQnN0FrWHI9GJiIiIiIiIjmgSkM0LZdiljqefvDrv1QFI/W8q4FXR4AmgqSM2KOfVE087em6ncYXCkeiTqKkjDgl28tgwRXbUqiUAwxRQFSkbVyz2dMfRm9CxYt4MzC3zwq3KkCTArcqYW+bFinkz0NNfGqNY7OmO46XdXWjpTSDaX+/KEgKmJRBNGmjpTeDF3Z1F9Z6PNG7F2aHTaRwRERERERERFZd42sQMnxtet4JISoduWrCEgG5aiKR0+NwKZvjciKfNQjcVliXQ3BnDlpY+NHfGYFlDDx3M1HmfHfJlE+gZkiTlzfeY0dbrrNa507hC4Uj0SWVPHhBwqUgZpl0OQghIkgSPS4ZXVZDUTYxabX8aiaYMpHULsgR0RDUkNQOmBVjCQEcUKA94IQSmZf2n4fTFNbzXlYBuCsgS8iZNtSCgmwLvdSXQF9eAqgI2lA5ZIq2PaxwRERERERERFZegV0V5wI2KgAcHIsm8iUUr/G7MLPVBQCDoLWx6diz1zTN5Pl9o6BI0PreC9oiVl+frijlLjjuNKxQm0SdR48wgAl4VSc1Ehd8DwxKwLAFZtuui9yY0BLwqGmcGC93UcRP0qggnNezpTsC0BFRFhixZkGQZcc3E5pY+1FWUFPyAMZ52dkSRNiz7Rv8kkxmZcclpw8LOjihW1JVPfgPpsHXEnJVpcRpHRERERERERMWlrsKPhuoAtrWGsXxuGWJpE7ppwaXICHgU7O6MY0ltGeoq/AVrY6a+eXcsjVKfGx6fDNMCtrb0oa03iXVnLchLpAe9KjwuGUnNRGCIXF5SM+FxyXl5vvaoszItTuMKhbUGJlF9ZQAnHFUOIYC+RDrvMo6+RBpCAO8/qryoJtmsDfnQGU1DMy2g/73qFqD339ZMC52xNGpDvkI3ddx0x9PZawmsAY9lbov+OJqmnM5bUGTzGxARERERERGRM7IsYe2KWpT73djdGYcsSSgrcUOWJOzujKPc78aaFTUFmy8vU9+8tTeBaMrA2/sj2NISxtv7I4imDLT2JvDYpra80i6ZEwP7w0lYloVIUkd3LI1IUodlWdgfTmJBdTD/xIA5MDs2DKdxBcIk+iSSZQlXnlaPueU+JHULXbE0OqJpdMXSSOoW5pb7cMVp9UU12eTL73YjZdgTipqZfa7/b1PY/07pFl5+t7tQTRx3XpezUfVO42jqeX99xbjGEREREREREVHxWVwTwrqzFuC42hD6khr2dMXRl9SwpLZs0CjvybanO47Ne/vQHdfRk9DgVu0R5G5VRk9CQ3dcxxt7e/Pqm2dODKiyhL++04lX3+3Gpr29ePXdbvz1nU6osjToxMDMshJH7XEaVyjM4hWA36Mi6HVlR6LLkgSXIsPvKb7V0R5JQTfsmugCOSeVLECW7JmIdcNCe2Rq1z0ai3nlzkbVO42jqWfxnBB8rswcBkPzuRUsnlO4L0MiIiIiIiIiKrzFNSEcO7sUe7rjiKYMBL0q6ir8BR9EG07q2NeXhCkESr0qDAvQDAuyLKHUqyKSMrCvL4lwcoj53nKbLuzb0sD7+82v9uO5HZ2jtmd+deHK2jhRfFnbKSxzmYRhCpzRWIn2mIaUZsLrVjAz4MbuLvsyiWNnlxZ8RxovQtiTaVpi8HSplsjsYKKoql6kDQFFHvkqFEW242h6qiv3Y1bIg3e7EsPGzC71oq58an8BEBEREREREdHEk2UJ9VVTq3xzJKkjbVpQZQndcQ2aISCEgCRJcKv2gN+0aZdsyTiU3GZVwOuoPU7jCoVJ9Em0pzuOpo4YStwq3mgN583Ku8+nYlapD7s6otjTHZ9yO9ahqq/2Q+Qk0AeeqBL9/6if4mebxkKWAK+qQDNM9FeyyZIAqDLgVhUUyXmSI9Le3gTKfG5UlOiIpnRYsE8YSZJdIyvodSHkc2Fvb6Jo9mUiIiIiIiIiKh6lPhdkSUI4oUORJaiKDEmSIASQ1i0k0iZKfS6U+lzZZQ4ltyk5zH85jSsUJtEnUTRloCemoTepIaUZUGQZQgCmJdAVTSGWNjDD50Y0ZRS6qeMmnjYgS/aoc2DwaHTA3kni6eJ5z40zgwiVuBBNSZAgkNJFtmyP1yVDwJ7NuHFmsNBNpUMUTRlwKTKOP6oc73bH0BvXYVgCqiyh3O/GURV+hJN6Ue3LRERERERERFQ8gl4VSn/iemC+LnNbluy4jEPKbTpNjjOJThl+j4LepIZwQodmWjAtIzt6VZGlbHkPv0cpcEvHTyxtQpYkKNLgki4S7J1RliTE0sPXlp5u6isDOOGocrywsxOKLCHgUSBJ9kjltGHCtID3H1WO+kqOUJ6ugl4VHpcMj0vBCUeVI5o2oBsWXKqMoEdFLG0iZZh5XzRERERERERERFOJS5XhcysABHTzYDkXjypnH891KLnNmaU+qDJgjFD2WJXtuKmMGZ5JlkgbSGh2wliWDl6qYJgChmnCpUzx0y5jlJk0VZYFhCUgyYBlCsiKBGEBkixBkSTIU/2ajTGQZQlXnlaPjmgKzZ0xJHUzbwLZBTP9uOK0+qKpe38kqqvwo6E6gG2tYTRUBxD0Hry0SQiB/eEkltSWoa6ieMoUEREREREREVHxiKdNzPC5AdgTigY8MiTYA2A104JHlVHmcyM+YODrWHObi2YFMaPEjd6EDtMSgwbYKrKEGSUuLJo1tSs2yKOH0HgJJ3UkdTNbC9wSgCmQHaEtACR1c+hZb6epxpkBhEpccCsyXIp9eYfZf5mHSwHcioxQiQuNM4trVPbimhA+8YF5qPC7oRkWUroFzbBQ4XfhEx+Yh8U1oUI3kQ6DLEtYu6IW5X43mjpiiKXsGmCxlIGmjhjK/W6sWVHDEyVERERERERENCUFvSrKA240VAVR7nfDEoBm2pUkKvxuzK8KojzgzrvK/lBym/WVAZw8vwIuRR5UsUUC4FJkrJxfOeUrNjCJPoma2mMwLAEJyJ7ZQf/fmfsMS6CpPVaoJo47u7TJDOimQEIT0E1759JN9N8WRVnaZHtbGA+/uhfdMQ1uVYHPpcCtKuiOaXj41b3Y3hYudBPpMC2uCWHdWQtwXG0IfUkNe7ri6EtqWFJbhnVnLeCJEiIiIiIiIiKasjJX2Sc0A8tqQ1g4K4j6Kj8WzgpiaW0ICc3Agupg3lX2h5LblGUJZx0zE0IIDKzoYsG+ov/MY6qn/EBElnOZTP11sXM3rMy/0f9vkXtHEZBlCQtnBfH01v1D7ihpw0TjrMCU31HGwrIE7nthN3YciEKRAa9LOXg5jGFix4Eo7n+hGT+6aFlRve8j0eKaEI6dXYo93XFEUwaCXhV1FX6uVyIiIiIiIiKa0jJX2b+9L4L/29kFSxwstPK2JKG+0j/4Kvuc3KZLlgaVZtEtMSi3aVkC//PSHqSGKYqeMiz8z0t78OElc6Z0PoUj0SeTGPxPafBDg6fEncYMw8KvX22BNcx7sgTw61dbYIw0u8A009wVw9/f64Ul7JH2fQkdPXENfQkduilgCYHX3utBc1fxXHFwJJNlCfVVASydW4b6quI6IURERERERERERS43jSFy7hoqvSEODgzOJN0zNdEtcXCEem5uc1d7FJtb+kZswuaWPuxqj4697ZOISfRJNL/Kj0x+bWDyPHNbluy4YvFCUwf2h5MA7DNUqixBkQBVluDq/zD2h5N4oamjkM0cVzvbY9lZijXDgiIBLsV+35phQTMthBM6dhZR2Z5cliXwblccTT063u2KwxruDAoRERERERER0RHAMCxseKcDv/t7Cza80zElBpNalsD6Ta0wTIEzF1bhpPoKHH/UDJxUX4EzFlbBMAUe29SWl9dpmBmAW5WzE4qK/ucRsHOasgR4VAUNOXMfPrmlbdjBtdm2CDtuKmM5l0kU10y4FQWmZeYNNs9NpLsVBXHNHGLp6eml3d2whL0T5RVLgn1bluwd5aXd3Thz0awCtXJ8WcJOlEsAPKoMqf+UnCQBLglIGxZMCFii8AfM8ba9LYz1r7dia2sfeiIxlO/ahiW1ZVh7fC1rhBMRERERERHREefJzW24d8NutPYmYVgCqiyhdoYPV62ej48sqylYu/Z0x9HUEcPskA8AEEsbSGkmvG4FAbeC2SEfdnVEsac7jvoqOyk+o8SNeeUl2NOdgGkJKDIgCQlCAixLgqpImFvuw4wSd/Z1duyPOGqP07hCYRJ9EpX6XPC6ZCT14ZPkXreMUp9rEls10frH2AvA7K+LJABIQtiXe4gBcUUg4FEhSRKEENkEeoYk2fWiJElCwFNcu9/2tjBu+cNbaO6M26VsdBNRI4GW3iTePhDB1887lol0IiIiIiIiIjpiPLm5DTf9/k3EUgYkqX/iTRPY1R7DTb9/EwAKlkiPpgykdQudRgov7I8goZmwhIAsSShxK1g0uxRC2HEZdRV+rGyoRCx9AJ3RNHRDZOd7dCkSKgNunNJQlTcZqUt1VgjFaVyhTO3WFZmgV4VmWsOWPLcnnrQQ9BZPcnXl/HK7ThKQvXQjk1a2hH2/1B9XLEI+t50gF/aoc6v/xIHVfxsCCHpUhHzuUZ9rurAnU23Gjv1RGKaZrYFlfzmY2LHfnkyVpV2IiIiIiIiI6EhgGBbueG4nIkkDkmQnpyVJ6v9bIJI08OPndhWstEvQqyKc1PD63l5EUgZMYSfETSEQSRnYtLcX4aSWl6eUZQnL5pZBMyy4ZAkz/C5U+l2Y4XfBJUvQDAtL54by5os7oW6Go/Y4jSsUJtEnkWFZSI5SqiWpmTCs4inzsaq+CiVuJXtb5PzJKHErWFVfNdlNmzAhnwtHlZeg1OeCJAGGaUE3LBimBVmyr0iYV16CUBFdcWBPptoDzbQQTRnoimnoSwt0xTREUwY00+JkqkRERERERER0xNi4uxNtfSkAAoYJpAwr+8cwAUCgtS+Jjbs7C9K+2pAP+8Mp6KZdLULO+SNJgG4K7A+nUNtf7gWwB1FubulDVdCDmhklcCsKJEmGW1FQU16CqqAHW1rCeYMoT18wEy5l5AoULkXC6QtmTth7HQ9Mok+iF5u6YY4yENcUdlyxaA0nURkYecR1ZcCN1v7JR4tBXYUfy+aVYWapB7VlXvjcClRFgs+toKbMi5mlHiyfNyPv0pbpbmd7FD0xDUnNhG4dPEkiAOiWfXKoJ6Zh5xSfaZmIiIiIiIiIaDy8tT8C3bBg9ldiyGXBzgHqhoW3ClQL/MXmLiQ1u5qAyKmiIPpvS7DzOS82d2WXydRRn18VxPJ5ZVg4K4j6Kj8Wzgpi+dwyzK8KZuuoZ8yvDuC4Ucr7LqkNYX51YMSYQmMSfRLtd5godho3HYSTOlK6hYBHhSodLOUiAVAlu354SrcQTuqFbOa4kmUJa1fUotTrQjhpwOw/+2ZaAuGkgVKvC2tW1ORd2jLdGZZA2hi5VFHasGCwnAsRERERERFRQVmWQHNnDFta+tDcGWPp1QniVuRh8yQZoj+uEHbsj8ISAqpst8O07CS62T84UpUBSwjs2H9wQGSmjnrKMPFGSx/eORBFc2cc7xyI4o2WPqQME2ndyqujDgC1M3wocSsYmAqTJbtCRW1ZycS/4cNUPMW3p4HZOZc/jEfcdBBJ6kibFkq9KqqDHiR0A6m0Dq/HhRKXipRuIqGbiBRREj0jrhmIpnQY/ROqShKgGRLimjH6wtNMNKk7+mKIFuF6JiIiIiIiIpoutreF8bvXW7CtLYKkZsLnVnBcTSk+evxcLB5ltDCNjcfhRJlO48ab1yVnKwgABwe+AgcrC8iSHZcR9KrQTQtbW8MwLQslbhWqLMGwBHriGsJJA3NC3rw66nu64+hN6DjhqHIcCCfRGUvDsARUWUJVwINZIR96Ehr2dMdRXzV1R6MziT6JVtZXjGvcdFDqc8GjykgbJrwuGS5ZhikDLlkGIJA2THhUBaVFVB/cnmRzN97tSgCQIPUfhey/JbzblcD9LzTjRxctK5rR6D0JZ8lxp3FERERERERENL62t4Vxy9NvobkrDkscHArX0pPAjv1RfP38Y5lIH0d9SWeDKJ3GjbeT6iqQsxkMOThSCDsuY96MEqQNE/GUjupSDyTJTrC7FAmlXhUdkTQ0vxvzZhwcWZ4ZvV5X6cfskAcHImmkdBNel4JZpR4ISNjTFR80en2qYTmXSdQeTWG0k0uqbMcVi5DPhTkhHyCAtr4k2iMp9CYttEdSaOtLAgKYE/IW3SSbL+/uRko3oZkWTEvAsgRMS0AzLaR0Ey/t7iqqSTaTDkfXO40jIiIiIiIiovGTGfC344BdwqPEraLU60KJW7VLdhyI4v4XmlnaZRwdbq5kosvuHIilMFolGUW24zL29ibgURUEPCoiKQO6aUEIAd20EEkZCHhUuFUZe3sT2WWCXhUel4wD4dSQJWAOhFPwuOS80etT0dRuXZHpimpQZRmGNXA6gYNUWUZXVJvEVk2sugo/5pb7sONAFLohDk6kYArIABKShXnlJUU1yeaOA1H0JjSYApCEXSM9c02MZQmYEOhNaNhxIIqG6mBhGztOKvwjTx471jgiIiIiIiIiGj/NXTH8/b1eyBJQ6nVB6r9s3h5B7EJfQsNr7/WguStWNLmKQjucXMmhlt2xLIE93fao7qBXRV2Ff9gqCN0xDbIkYegx6DZZktAdO5injKYMuBQZS2rLsKcnjkjSQNISUGQJFX4P5pWXIJzU80aV11X4MaPEhRd2dkFVpEElYDoiaaxurJryuUEm0SdRZdANC/Zocwh7Fl4BO7+aOfNj9ccVk3DCgGaYsGC/18x7tgBohom+Iivx0R5JZSdhkCRkJxZF/23Rv+7bI8VzxUF1qXdc44iIiIiIiIho/OxsjyGWMhDyHUygZ0iSBL9HRTipY2c7k+jj5VBzJZmyO7s7YzAsAUsIyJKEvd3xEcvubG8LY/2mVjR1xJDWLXhcMhqqA1i7onbI+PKAC0Z/zmpgKj1z27AEygMHq0dkRpV7XAqWzy3Du10JJDQDJW4VR1eWIKHZk44OHlVub3NC5CfsB96eyphEn0RzynxQZQkp006kZjaTzAy4kgR4ZAlzyopnYtHmrhje2h/O3hYD/gaAt/aHi+pMZ+5XkSXs25nkee6VN8VRDd0W8KhwKRJ0c/iDn0uREPDwkENEREREREQ0+ZwmK6dPUnOqO5RcSabszvZ9EbuSxYDM9vZ9kSHn2dveFsadz+9CT1zD7JAPvpCCpGZiW2sYbb1JrDtrwYgj2O3BvflTixpDFNKoq/CjoTqADe90ojueRlK3YFkCsizhnfYIKvwenL6wOm9UuT2xqIYltSEciKTyRq9XBryYWerhxKKUL6lZ8LsVJDRz0GMCdpK1xK0gqQ1f7mW6yZQ2sYQ9o68E+31Kkv2eLYGiK21SFfQMui+TTB8tbroqK3Ej6FURSRqwLGFvz+g/gQC7pE3Q60JZSXFdZQGM7VIpIiIiIiIiokJonBlEwKsiljZQrsoYmDCNpQ0EvCoaZxZHbmYqyM2VmP25kgy7KsXgXElmnr20bkKWJbhkKTswU7cE0jnz7GXyaJYlsH5TK3riGhqqA9krDQJeFQ2eAJo6YnhsUxuOnV2al6/oielwKzI0w+of3HuwhULYE2m6FRk9sYMVJGRZQmXAjdbeBAxLwK3KcKsyDCEQTRlIaiYqAq6818mdWLSmzIdo2oBuWHCpMoIeFabAtJhYlEn0SeRzy4hr5qBLJDIkAAnNhM9dPPO9dkSSMPpH2dv7j/3uJUmCBAETgGHZccUi4FGh5pxpHGr0vVpko7JDPheOKvdjb3cccc2ABWTPRMoA/G4V88pLimoCWWDsl0oRERERERERFUJ9ZQAnHFWOF3Z2oi+hwaMq2eRs2jAhBPD+o8pRXzl1RwJPN5lcSXNnDLG0kVedQJYAv1vBUQNyJTsORNGX1CFJgFuRYIr+/Iokwa1ISAuBvqSeNxh1T3ccTR0xzA75ACGwP5JCSjPhdSuYFfRgdsiHXR3RQSO9q4IeeN0KZBlIaBYGVlbxuWW4VSVvEKhhWPjD1v1QJAlej4y0IaBZApIEBDwKdEPgj1sP4KpT50NV7fxmpgRMUjPh9yjZ6hyZv5OayYlFKd++vmS21tBwdEtgX18SjTNLJ6lVE0tAyo4+t2DXOhIAJCGyB+v+tHphGzqOykrccCsydHPwFQcZbkUuqlHZdRV+LJtXhrRhZuvcp3QDXpeKGSVuuFQZy+fNmPKTRIxF5lKp7lgapT43PD4ZpgVsbelzdKkUERERERER0WSRZQlXnlaPd7tiaOqIoS+hZ6sGuFV7QNgVp9XzyupxVFfhx9xyH3Z1xKDKEiwhsp+5LNkJ8nnlJXm5ks5oCpYQUCQJcc0clHjPPE9n9OA8e5mR3p1GCn87EEVCM7N11EvcChbOCkIIDBrpfcr8SvjdyrBzFSY0CzNKPDhlfmX2vhd3d2FfOIWAV0XasIABtQgCXgVt4SRe3N2F1Qurs59DQ3UArzZ3wzAFIil7ZL4iSyj12gNRT6qvnPI5IybRJ1FXVINlWsNWlxIALNNCV1QbJmL6mVnqhdI/427ujp854wTYl6/MLKIJJ/0eBWlj+AQ6AKRN++xbsZBlCWtX1KKtN4meuIa55SWIRiIIlpYimjJR7ndjzYqaovkyzlwq1dqbgGEKtPWl8r4Akro55KVSRERERERERIWU1Ey7fEd/TsYUgGZYSA5RepjGg50TkCRAkmQo/TWOpWGyg1VBLyRI0Iaoo24JQDMFVFlCVfBgHi3oVRFOatjTnYDZX2JFliRYAoilDWxu6UNdRcmQI721oQqfj/B4ZzSNtG5Bg4BpCUiyXa9ZkoC0bkI3LQASOqPp7DKyLGHZ3DI8vWUf4mnDHv0OQDOB1l4Nfo+KpXNDUz5/Ujx1Q6aBkFeFMcr8DIaw44rFwuogVGXkncClSFhYJPXQAaClOzHk5Au5DNOOKyaLa0JYd9YCHFcbgm4KJHQB3RRYUltWdKOy93THsXlvH7rjOnoSGtyqfdmRW5XRk9DQHdfxxt5e7OmOF7qpRERERERERLAsge8/8w729OcivC4ZPpcMr8tODe7pTuD7z7wDa5QKCuTcnu44WnoS8Khyf+L84NxxkCR4VBl7exJ5uYMFlQFYA+uqDGAJgQU5ZXdqQz50RtPQTQve/gS6EPZod68qQzctdMbSqA358p5n4+5OhFPGsLUhJADhlI6Nuzuz91UE3DCFhbRhIW0KpPT8v+0TNBYqAgerL1iWwOaWPrt2uiXQG9fRFdfRG9ezddW3tISn/LbHJPokevNAeFzjpgNJBrzqyJuZR5UhFdGWuLGpc/SgMcRNJ4trQviPDx6Dz6yqw5lHl+Azq+pwwwcXFVUCHQDCSR37+pIwLQtBj4KkbqA3oSGpGwh6FJiWhX19SYSTQ18SRURERERERDSZmjqjeO29HggAJW4FqmwnW1VZRolbgQDw9/d60NQZLXRTi0YmdyBJwOxSD7yqDEWR4VVlzC71QJIwKHfQFkkMqk0+kBB2XMbL73ZD7x+hnjRMJDR7gs+EZiBpmFBlCboh8PK73XnP89b+CHRj5IoZumHhrf2R7H21ZSUAgCEGymfvl3LiAPtkwktNXeiIpqEPSJTrlkBHNI0Xmzqn/EDE4hnyPA281RYZPWgMcdNBNGX010gaXtqwpvwMvGPR1B4b17jpJDPR5q72KHr6EtjcuwcbdnUX3USbkaSOtGnBNC30xLW8UkXd/ZODKIqMCJPoRERERERENAW82NSFdH9CNZ0p59JfWkSRAFUGUoaJF5u6imaevkLL5A40w0RXLL90czhloKR/4s7c3MGOA7Fhk9oZoj/uzEX27c5oGqYQEELAsnBweQFIApBlAVOIvBIrgD1fn5PXcisHR75G0jrM4TLo/QxTIJI++J56E3apGX3AcqL/f7op8F53Ar2JqV3euojG/059+yOp0YPGEDcddMfTSOojJ9GTuoXueHrEmOlEGaV8zVjjpovMRJvbWsMo87kwO6igzOfCtlb7/u1txXOFRanPBcOwEE3nT/IB2DXKomkThmGhNGeGbSIiIiIiIqJCSeoWRH/C0rQEJNi1qiUApmWXYxUCo+ZwyLlSnwtp3URCG/ozTWgW0rqZlztwOn1eblxl0A3dtGBYdm1yRbYnIVXsKjIwLEA3LVQG3XnPUeJ29mK5cTv2R4YdhZ5hCjsuY1d7dNTa62nDwq72qX0VBJPok8jlsEC+07jpYNOe3nGNmw6qg55xjZsOMhNt9sQ1NFQHEPCqkCUJAa+KhuoAeuIaHtvUNuXrWzlVoipI6CNPupLQTZSoxTN5LBEREREREU1fi2bZNbSt/lrZUn/qSZKQnYQyN44On1eWHQ0s9coH07M+t7OiIblxs0JeCCEgYK9fy8r/277oQGBWyJv3HIosD1sPPUPqj8to7ornPTYwdqi4zpjmaMR7Z4wj0alfZcA7etAY4qaD1r7kuMZNB07PgRTRuRLs6Y6jqSOG2SEfJCn/jUmShNkhH3Z1RKd8fSunXtvbPWgE+kCWsOOIiIiIiIiICq12Rok9Jx0Aw7JHnUPYFV2M/pHpHlVG7YySUZ6JnHr27f1jjpMlZ8mi3LjmzgSUnCSTGPA3ACiyhObOBPKI0XNTspT/RLnNG5gWyb2dG5fUnJVwdhpXKEyiT6IT55eNa9x04Hc728Scxk0HqursrKHTuOkgmjKQ1i34hrkUyOdWkNaLp/b9a3v6xjWOiIiIiIiIaCIlNQuzQz64FAmQ7CvKTUvYV4xLgEuxB8Alhyk9QmP3xl5nZW2dxg3HEgLmKKvNtOy4XA0zA3Crsl0TX7IT5hLsv1UJUCTAoypomHnw6oSV8yscjV5fOb8ie7vM5yz/5TSuUKZ264pMe5+zut9O46aDoyv94xo3HbxvlrMJOJzGTQdBrwqPS0ZSMxHwDj6sJDUTHpeM4BCPTUcuh/XsncYRERERERERTaSgV0XNDB/KfC40d8UQT5uwYI+u9XsU1FcG4Peq4/673bIE9nTHEU0ZCHpV1FX4IRfTpfkj8LqcDRjNjRtucOJAuXElbnlQgnwgSwiUDBjAOqPEjXnlJWjuisPI1H2BfXWCKQGqLGFuuQ8zSg7WUl9VXwWPKiM1Qo1zjypjVX1V9nZP3FmZFqdxhVIcGa1pYmtrZPSgMcRND04PjMVzAF1eVwYZwEgnAeX+uGJRV+FHQ3UA21rDaPDk108TQmB/OIkltWWoqyiOkyVLakvxu9fbHMURERERERERFVru7/Z/OHYm2qMaUroJr0vBzKAbzV0JLKgOjuvv9u1tYazf1IqmjhjSugWPS0ZDdQBrV9RicU1o3F5nqlrZUIFn3+pwFJfRE9cwoILKIBLyE86xtIncHHpuhi1b2kXYcbnqKvxYOKsUe3uSMEwzGy/1/0OVZSyaVZq3TeztS8DrVkZMonvdCvb2JdBQHQQAdEacDRZ2GlcoxVNDYxoQo5wVGmvcdLC701kNbKdx00FSG76sSYbPrRTVJVKyLGHtilqU+91o6oghljJgWgKxlIGmjhjK/W6sWVFTNGeby0qcTQrrNI6IiIiIiIhoIuX+bm/uSqDU68JRFX6Uel1o7kqM++/27W1h3Pn8LmxrDaPM50ZdpR9lPje2tdr3b287vBIm08EMv7OcQG5cRcDZMrlx3dF0/wSxyCbgM38y5VkkyY4bTECRJXhUCS5Fgirbf3tUKa/OesbO9hgsS6DC74ZbkbIJewmAW5FQ4XfDsgR2tseyy0QclvZ1GlcoHIk+iSqC7tGDxhA3HXREU+MaNx1EkjpcqoyANPgsHwAEPApURUYkqRegdRNncU0I685agPWbWrGrPYqemIlyVceS2jKsWVFTVGeZVVmCW5GgmcOf8HL3f/kQERERERERTQW5v9ubOmJoj9ijw8f7d7tlCazf1IqeuIaG6gCk/lkmA14VDZ4AmjpieGxTG46dXVrQwXaGYeHF3V3ojKZRFfTglPmVUNXxG298KLmDUq8KRZFgmgKSZI8gzyTDM7cVRUJpTtmdqlIvVFnKlnQxc5ZRJPsfsiSjqtSb99p7uuNo6UnCo8owLAsQ4uCEoJIEjypjb08Ce7rjqK/KVB2wX6PEraDM50JCN2FadiK+xKVAMy2EkxZyx9LHHU4Y6jSuUJhEn0SNM4P44/bRL+NonBmchNZMDpfDg6HTuOmg1OeCR5WR1gYn0AHANAX8HgWlPtckt2ziLa4J4djZpWjujOL1rW/h+CXHor4qWDQj0DMaqgNQFRmGZcIa4rtQlgCXYl+mRkRERERERDRVZH63T2Sd8j3dcTR1xDA75Msm0DMkyZ7AdFdHdEBydnI9ubkN927YjX3hFAxTQFUkzAl5cdXq+fjIsppxeY1DyR2EfG6Uel3ojWt5ywjYCXQJQMjrQsh3cADuollBhHwu9MQ1mAOWMQSgAAiVqFg0Kz/fGE7q2NeXhGkJuGQJugAs0d8uWYJpCezrSyKcMwi0cWYQAa+KWNpAud+NEndualkgljYQ8Kp5uc0yh/kvp3GFwiT6JDKEs/IdTuOmg7rKAIBOh3HFIeRzQQaQHKY+VNKwUAaB0BQ/OBwqWZZwdKUf4XIXjq4szglDZEmC361ANyy4FEDKqTgmIGBZ9llZWSq+905ERERERETTmyxLE5q8jqYMpHULvtDQpW59bgXtEQvRApXveHJzG255+i0kNdMeCOmTkTYs7O1O4Jan3wKAcUmkH0ruIORzodSrDjvJpoA9SWxuTqm+MoC5M0rQGRt6GVMAc2eUoH5A7i2S1JHQTGimnb9SZClb91szBWDao8xzKynUVwZwwlHleGFnJ/oSGvweF1RZgmEJxNM6hADef1R53mvJDgf3O40rlCnevOKyc7+zut9O46YDy3J2QHQaNx3MCXrRkxh5RuGehIY5Qe+IMTR1xdMmqku9KCtxDTqrLksSykpcqC71Ij5EOR8iIiIiIiKiYhb0qvC4ZCSHuUI/qZnwuGQEvZM/ttcwLNy7YTeSmonqUg98bhWyLMPnVlFd6kFSM3HfhmYYI0yc6dSh5A5qQ75hE+gZPXENtSFf9rZlCbQPWe/8oPZoGtaA4fBBjwpTWNANC5YQSBsW0rqJdP9t3bBgCoGg5+B6kmUJV55Wj0Wzg1BkGQnN6E/GG/ZEpLODuOK0+rwBle91J0ds21jjCmXKJNHvu+8+LFy4EN/+9rez96XTadx888048cQTsXz5cnz+859HV1dX3nL79u3DlVdeiaVLl+Lkk0/GbbfdBsOYmgnZ4Q4ehxo3Hbz+nrOJIpzGTQdPbt2HtDHy5LBpQ+DJrfsmqUU03oJeFeV+N46ZXYp55SUIeFV43QoCXhVzy0twzOxSlPvdBekQEBERHaojoT9OREREE6+uwo+G6gD2h5OwLAuRpI7uWBqRpA7LsrA/nMSC6iDqKvyT3rYXd3dhXziFUp8LkpSfFpUkGaU+F9rCSby4u2uYZ3DuUHIHL73bhXh65H5UPG3gpXcPtm/j7k4cCI+cgD4QTmLj7vxKEdG0AUCyy76Yor/uuj1e3jBFtqp5dEB7FteE8PXzjsV5x81GXYUf1SEv6ir8+NBxs/H1844dVFs/5vCKA6dxhTIlMjxbt27FI488goULF+bd/53vfAcbNmzAHXfcgWAwiG9961u45ppr8MgjjwAATNPEVVddhcrKSjzyyCPo6OjAV7/6VbhcLlx77bWFeCsjkuEsOe40bjroTY589myscdPBe12x0YPGEEdTT6ZDsK01jBVzyxDTTPvyLFVGwK2gqTOOJbVlBekQEBERHYojpT9OREREE0+WJaxdUYu390Xw13c6sxNeAvYI7PpKP9asqClI+dfOaBqGKeDxDT2u2K3KiKQMdI4ystuJQ8kdbGuLYIR5SAHY5Vm2tUVw+sKZAICtrX2Oltna2pddBrAnehVCQJYkSFJ/0lwIQJKgyIAQ9kymgSEGCI6ltr5LcpYcdxpXKAUfiR6Px/GVr3wFt9xyC0Khg2cqotEo1q9fj+uvvx4nn3wyFi9ejO985zt44403sHnzZgDAxo0b0dTUhO9///s45phjsHr1anzhC1/Ar371K2ja1EvK7ulJjGvcdOBVhq5/dahx00FTp7NyPE7jaOrJdAjK/W40dcYhQUKoxA0JEpo64yj3uwvWISAiIhqrI6k/TkRERJMo9yexyLmrgD+Vq4IeqIqE9DDlWjTDgqpIqAp6hn0OyxJo7oxhS0sfmjtjg8qkZBxK7uBA2FlOMDduV7uzQZoD42IpA4oiw6VIUGUZHvXgH1W275cVedgR4pna+kvnlqG+KjBsDiTqsEvoNK5QCj4S/T//8z+xevVqrFy5Ej/96U+z92/fvh26rmPlypXZ++bPn485c+Zg8+bNWLZsGTZv3ozGxkZUVlZmY1atWoWbbroJTU1NOPbYY8fUFtOc2BHgfUlnz9+XNCe8LZNldsiNHR2jJ4tnh9xF856HOkM3XFyxvOeBMu+rWN8fABwzK4BrzpiPx95oQ1NHDAciFjyqjONqSnHh8hocMytQ1O//SFjHxPV8JOA6nlxT9XOeKv3xgdvjVP28aPJxm6Bc3B4oF7eHqcmyBH73egsM08LpjZWIayZ004JLkeF3K2juimP96y1YWD30yOVD5WR7OKluBmaHvGjpTsCjSpBzZrPMlJ6ZV1GCk+pmDPk8b+6LZPMAacPOAzRUB7BmeQ3eN6d0UPxYcwczHc6fNzPozS4XcDsbmBpwK3mvFXAr8LsVpGCf40gbFoQQkCTAo8qQALv8zIDlxiqcdDbCPJw0xnVfHu++ZUGT6H/4wx/w1ltv4Xe/+92gx7q6uuByuVBamr8BVlRUoLOzMxuT22EHkL2diRmLbdu2jXmZsZAth+VcLDM7ume6a+/ucxxXLO/Zo0UdxoWL5j0PZ6L3qangvDkCB0olJHQZJS4JswIp6B3N2NxR6JZNjiNhHRPX85GA6/jINZX64wO3Q26XNBC3CcrF7YFycXuYWvZFDbyxO4KAW0Jv78GyKBoALQ54LAubdifwzItxzAmOf2pytO3h3Lky/rtX4EA4hRIX4JYlaJZAQge8qoR/mCtj+/atg5Zr7tXx27di6EsasCDBsARUWUJHdx/e2nMAHzs2gPoZriFf02nuwJNwNhLdk+jA5s32yHKRdJaHEsn83Nu+qIGQaiGZMpE0BGD/BwkCScuCT5UQUiXse68J6Dn09aSNMm9gbtxE5MnG6/hQsCT6/v378e1vfxu/+MUv4PEMf4nEZDruuOOgTGBZkaNf2ojettEvsTi6KoBly5ZNWDsmk7HhBQCjHwAM1Vc071mq6MHDb/6/UeM+dur7sHRu+SS0aPKZpolt27ZN+D5FhcN1fGTgei5+XMeTK/N5TxVTrT+e2Q65XdJA3CYoF7cHysXtYWqSW8Nw79iBORUlkAC0R9NI6Sa8LgUzgx6UAdjTnUDt0QuwpDY0yrM553R7WLYMOKpuH+7727vY35dC1LCT4UdXeXHFqUfjgqVzBi1jWQJP/WkHWuNxdMUs6P0Tb0oAXIqESkvCW4kA/mn1osMaXd/r6YD88iYMUyEGACBLwPz6Biw7phoAoIW68cibr4363B85+VgsO7oie3uJJfDnfVux751OyLIJKafOjoCAJSlYVFuJfzxlyWG9J/m3zziLA8Y1NzhwezjcvnjBkuhvvvkmuru7sWbNmux9pmnitddew69+9Sv8/Oc/h67riEQieaNfuru7UVVVBcAe5bJ1a/6Zoa4ue3baTMxYKIoyoQfdilIf4CCJXlHqK5qDv0txtpO5FKlo3vNzO5zN4Pzcji6sqBv7djqdTPQ+RYXHdXxk4HouflzHR6ap1h8fuB1yu6SBuE1QLm4PlIvbw9QSKnHD61KwuyOO3Z1RxNMmLNhJUr9HwfyqIPxeFaES94SsNyfbw4Ur5uLDS2rw4u4udEbTqAp6cMr8Sqjq0NNHvtcTw193dOBAJAVL2InsTMZLMwUORFL4y44OXHZyHeqrAofc9r6UAVWWoI0wU6gqS+hLGdn3qJmAV5WRGqbOO2A/rpnI+1wkyS7dosoSvC4X3IpdwkUA0EwLhikgSXa+7nCS6IESBT2J0atzBEomZj8er+NDwZLoJ510Ep566qm8+772ta+hvr4eV1xxBWbPng2Xy4WXX34Z5557LgCgubkZ+/bty56VWLZsGe655x50d3ejosI+k/LSSy8hEAigoaFhUt+PE3UVvnGNmw7eVzMDb+4fvSb6+2pmTEJrJkeLw4lhncYRERERTYQjsT9OREREE6+uwg8ZEja39uWNqLYAhFMmNrf24dSGKtRV+AvWRgBQVRmrF1Y7iu2Op9Ham8y+n4EjxS0BtPUm0R1PH1YSvTLoBiQJiiRgiex8rADspL0sAZAkO65fqc+FkM8FkdSHnDDVo8oI+Vwo9eWXmtnTHUdvQseS2jIcCCfRk9BgWgKKLKHC78bMUh96Ehr2dMcP6z3Nm+FHTyLiKG4qK1gSPRAIoLGxMe++kpISlJWVZe9fu3Ytvvvd7yIUCiEQCOCWW27B8uXLs532VatWoaGhAddddx2+8pWvoLOzE3fccQcuueQSuN3ugS9ZcNH08GeEDiVuOjjzmCo8+vdWR3HFQghntZ6cxhERERFNhCOxP05ERMXDsgTe7YqjqUdHqCuO+qrguE5SSYfOsgTe2h8etiSJJYC39kdgWaKg68yyBPZ0xxFNGQh6VTv5P0x7Xt3dgxEGhwMADGHHvb+uYuTAEcwp80GVJRjDDNwWAFyyhDllBwfghnwulJW40JvUIQNQFGSKmyMzl2ZZiZ1ozxVNGUjrFsp8Loj+guhC2MtaQsCjyggndURTziYGHU5dVQk2t42eRK+rKjms15loBZ1YdDQ33HADZFnGunXroGkaVq1ahRtvvDH7uKIouOeee3DTTTfhoosugs/nw4UXXoh169YVsNXDiznc6JzGTQea5nDyAIdx00HDzACwrd1ZHBEREdEUVmz9cSIiKg7b28JYv6kVu9qj6OmL4Kn33sKCmUGsXVGLxTXjV2ObDs0LTR3ojGkjxnTG0nihqQNnLpo1Sa3Kl9mGmjpiSOsWPC4ZDdWBYbeh1HBZ7UOMG05Ss+B3K0hog59HwE5yl7gVJLWDA3DnzSiBIktQJMDjlqFZdk1zSZLg9QCGBaiyjHkz8pPUQa8K3bSwtbUPhhAo8ah2At8S6E3oiCb7MLvMh6D38NLHJ9SV44nNBxzFTWVTKon+4IMP5t32eDy48cYb8zrqA9XU1OD++++f6KaNC8N0tiM5jZsOdrSPfqYpE3cBaia4NZOjMuAd1zgiIiKiyVLs/XEiIpr+treFcefzu9AT1zCr1AOPqcDnc2FbaxhtvUmsO2sBE+kF9redzuaK+9vOroIk0XO3odkhH3whBUnNHHEbUh2W1HYaNxyfW0Z8iAR6roRmwuc+WLt9b28CHlVBiUtBXDezJWAEAN0C/C4FblXG3t5EXlmWeTNKkDZMxNIGqoMeGALQDAuyLKHUo6IjmoZmWIOS72OlykPXmT/UuEKZ2q0rMjv2hcc1bjpI685OCDiNmw5SmrMrCZzGEREREREREZFdfmP9plb0xDU0VAcQ8KqQJQkBr4qG6gB64hoe29QGa7g6IjQpdhxwmP9yGDeehtqGFHn0bSg9SmJ7rHHD2deXhGaOXOY5bVrY15fM3o6mjGzyGwAghJ1I7y8jLMsSNMMaVJYlk3z3uBTsi6RwIJxEe9T+e18kBU9O8v1wlHhUjFa0R+qPm8qYRJ9E3UlnSVOncdOBe5hZjQ81bjrYH06PaxwRERERERER2RMhNnXEMDvkgyTlp+UkScLskA+7OqLY0x0vUAsJALpj+rjGjadD3YYma57DjkgaYpSTQMIS6IgczCn5PQp6kxrShgVXf3ot8wwuGUgbFnqTGvye/GHy0ZQBzbRgWhZ0w4JuChimgG4K6IZ9v2YOTr6PlSxJGK30vSzZcVPZ1E7xFxunE0kW0YSTFQHPuMZNBy7V2U7vNI6IiIiIiIiIDk6E6AsNXTPD51bQHjn8pB8dHsXhOMnh4sYy4edYHeo2VB10NmG607jhmJYYdQJTU9hxuXTDQiJtwBT2qG4BwAKgmwKKZMEzxOBVv0dBRySFaMqA6F8uQwj7s+qIpAYl38cq4FEgyRJGemOSLCFwmK8z0ZhEn0Qhn4KogxIeId/U3mjGYlbQN3rQGOKmA0k4O7A7jSMiIiIiIiIieyJEj0tGUjMR8CiIpgyEUxbcKQOlXheSmgmPSz7siRDp8FQFPXj7wOhXA1QFBw+oHOuEn2OVtw0NsZ0Mtw3Nq/Q7en6nccPxuZzlBHPjoikDacOC0Z+jzq2JDiBb63zgiQFLCMTSBqz+BLosSwcT8JaAJdD/+OEN9g16XZBGeQ5JCAS9rsN6nYnGo8ok8qoKgNGT6N7DnYVgClFUZzua07jpIGU4rInuMI6IiIiIiIiIgLoKPxqqA3i1uRt6f5mJlKZjb6wXQa8KlyLjpPpK1FUcXiKTDk9deQleQI+juFyHMuHnmNvWvw1taw2jwRPIK+kihMD+cBJLassGbUOqLGcTzMORcfiTY+5sj4w5ri+hIaEb2ZHkuW3M3BfXDfQltAHPEYWeqb8u2UuK3AUFoJsWdrZH0TizdEzvI1c4qTkaXR9OaiMHFVjxFKKeBmTJ2cftNG46eGpz27jGTQecWJSKnWUJvNsVR1OPjne74py0h4iIiIiIJoUsS1g2twyd0TT296UgS4BPtesp7+9LoTOaxtK5oXEr/UGHxnD4EzE37lAn/BwrWZawdkUtyv1uNHXEEEsZMC2BWMpAU0cM5X431qyoGbQN+VzyiAl0wC6f4nMNndOzLIHmzhi2tPShuTM27Ps4EEk5eh+5cdG0Aat/PtOBz5q5bZl2XK7OqAYBwK3aNcstAViW/bcs2feL/rjDsacrgdFWmyXsuKmMI9EnUanPBSDpMK44NHeO/n7HEjcdxA1nMzE7jZtuchOsoa446quC7MAUke1tYax/vRVbW/vQE4mhfNc2LKktw9rjx+fSOiIiIiIiouFYlsDmlj5UBT3QDRNdcR0pzYLXbWF2yAOXqmBLSxgfXjKHv0MLaE6Zd8xxY5nws74qcFjtW1wTwrqzFmTLxrRH7LIxS2rLsGZFzZC/bSMpZ5OgDhU3lhI1sbSzXFFuXHcsDUjDT7EoAEhSf1yOqqAHiiTBtASEZZ8EyCwgCcCEgCJJQ5bdGYtk2tkgUqdxhcIk+iSqLPUCGP2yDDuuOAx3Bu5Q46aD1h5nZw2dxk0nmS+GXe1R9PRF8NR7b2HBzOC41S6jwtreFsYtf3gLuztiSBsWdN1AdyqGvT0JvH0ggq+fdyzXMxERERERTZhMotWrKtjXl0Q8bcIUgJEyIIRAfWVg3BKtNJjTCT8X15RlRzYPR5bsuIzcCT8ty8KBSBop3YTXpWBWqWfcJ41dXBPCsbNLHU9g+vd3+xw979/f7cOFy+dmb2dK1HTH0ij1ueHxyTAtYGtL35AlavweZ6na3Lgqv3fYBHqGEHZcrkWzgihxK+hLDv5MTQCwgDKfgkWzgo7aNBxdWKMHjSGuUJhEn0Q+l7OP22ncdFBf6cMbraOfOKivLJ6JRYXlbKd3Gjdd5NYum1XqgcdU4PO5xrV2GRWOZQnc90IztrSEkTZMQNhns9OmgZgExFrCuP+FZvzoomUc8UFERERERBMimjLQ1pvEvr4kDEvArUpQTQFJkRBLm3hrfwRzynzjlmilg8Yymnrl0ZUIeFRERlgPAY+KlUdXZm9nJvxsao+iuSuOhGbCEgKyJKHEraC+0g+/Vx3XSWNlWXJ8skWSnJWRyY3LlKhp7U3AMAXa+lIwLQFFllDqVZHUTTy2qQ3Hzi7N/o5WHf6ezo0r8Y5eakb0x+WqK/dDM0fOTemmhbryw5tjIDxEkv5w4gqleIb/TgOxtLNLP5zGTQe9cWd1k5zGTQeKwwOe07jpYKjaZbI0/rXLqHCau2J4YWcHUroJIexLwSTYfwsBpHQTG3Z2oLkrVuimEhERERFRkfK5ZRyIpGBYAl6XDFmSICRAliR4XTIMS6A9koLPzXTXeMoMmtvWGkaZz426Sj/KfG5sa7Xv394WzotvDScxu8wLl2LnPaScPwDgUiTMLvOiNXywtG9dhR8ygK1tYcTSBmTZjpNlIJY2sLUtDBnSsJPGHsrcXU7rlAPA++bknygY+J6GitvTHcfmvX3ojuvoSWh2nXHFrj/ek9DQHdfxxt5e7OmOZ5dp64nDidy4vqSzPOLAuHf2R5DQRk6ixzUL7+x3NtnpcKIOk+NO4wqleIY8TwOW6ayukdO46eDtdmc7v9O46UAadAg9vLjpYGDtMpFzHdF41y6jwnhrfwSRpGHXUoN9WZ6AXScNsP8dSRp4a38EDdWHd6kXERERERHRUDIj0AGBtGHBEgJCALplQpYkAAK6JbCvL4nGmaWFbm5RGDhoLlOvPOBV0eAJoKkjNmg0dTRlIOR14/ij3NhxIIp42sgOxvJ7VCyaGYQlkHfFgGUJ7O1NZNdpbl7B6l+2pTcByxKDrn4+lLm7treF8bvXW7CtLYKkZsLnVnBcTSk+evzcIZdZu7wWt/5pR3Z0/VDp9lKvirXLa7O3w0kd+/qSSBsWTMtEJClgwR7R7FElKLJdliick9zujqcHP/EQcuNe2d3taJlXdndjTU6pmZ++sNvRcj99YTf+65LjHcUOpSLgbO5Hp3GFwiT6JGrrc1YD22ncdNCXcDbC3GncdJB2eBLEadx0kFu7bCjjXbuMJt/OAxEMPD898DSQ1R+HpTWT1CoiIiIiIjqSdEU1yAB0CwAEFPng7xLDtNOaqmzH0fg4lAk/M6VZynxu1B3rx4FIKqe+uRdxzURfUssrzfLi7i50RTWosgRTiLwstSwDiiShM5rGi7u7sHphdfaxzNxdzZ1xWEJA101EjQRaepPDzt21vS2MW55+C81d9jIZLT0J7NgfxdfPH7yM263gqtX1+NH/7oRh5V+ZLWBvd1etrofbfTAvEknqSGgmkroBY8APas0UUGULpqUikpNEjznMm+TGbd7b52iZgXGtDke9O40bjiw5uzLEaVyhTO3WFZkehyVLnMZNB04n1p3iE/COSbXDWYudxk0HmS/IpDb0iYGkZsLjkse1dhlNLs+AuRoyfacBfahBcUREREREROOlMuiGBUDpL/UhYA/mEbBvK7J9uzLoLmg7p7qxlDHJDppzDz9oLq3nD5qrq/CjoTqA/eEkIAGzy3w4uiqA2WU+QAL2h5NYUB3MK83SHkkhZdg5hRK3Cp9bhdelwOdWUeK2f2emDBPtkYMDTzNzd+3YH4VpWXApMtyKBJciw7Qs7Ngfxf0vNOe9P3uZ3dhxwF7GsgQM0/7btCzsODB4mYx/O2MBvnhOI2b4VMj9CXRZAmaUqPjiOY34tzMW5MUHPSrShjkogZ5hWEDaMBHMmSTUpQz9OQ+UGxdLOssjDoxTHNZ5dxo3nJTuLOnnNK5QmO2YRE7LQRdT2WinU2cW0xSb86tL8dyO0S+lmV9dPJeWZb4gt7WG0eDJL9cihMD+cBJLasuGrV1GU1+l/2AnVGT/d/Cs+1BxRERERERE42lOmQ+qLEGzJLhVezJF0zShKAokACndgkuWMKfMV+imTlljmSAUyB80F/AoiKYN6IYFlyoj6FGHHDQnyxLWrqhFW28yO4rd51aQ1EzsDydR7ndjzYqavLIsdgkXQFGk7Cjv3FFbsizBMO1SLxnNXTH8/b0emEJAmEBC02BaFhRdg1uRYQF47b0eNHfFsmVH7WV6kTZMpHQr7/esBMDrkgctk+vfzliAy0+sw+3P7cTe3gTmzSjBl89uREnJ4FIkfSkNujlykk83BfpSB5PbA0vVDCc3TpWdJRIHxrkcDoJzGjec9HBnEQ4xrlCYRJ9EPpezHcFpHE1NlQFnI8ydxk0HA78gZ5V6YFoCsZSBA5H0kF+QNL00zgrCo0pIGwe/dDP10TM8qoTGWayHTkREREREEyOpWZhV6sW+viRSugW3KkHqr5+dNgRUWcLMUi+So0yWeKTKTBDaE9fsxHbITmxvaw2jrTeJdWctGJRIzwyae7W5G7ppIZoyYVoCiiwh6FXgUmScVF85aNDc4poQ1p21IJuwb4/YCfsltWVYs6Jm0Os0zAzApUjQTQFVFv017m2WEDBMAbcioWHmwYF7O9ujCCd0mP2jUVXF3h5kWcomZMMJHTvbo9mE+M72GLpj2pAJWwEgqVuwYhp2tg+dRH9ycxvu+b/daOlJwLDsbe7l5m5cffp8fGRZfmnT5s74kLXTB75mc2ccZy6yb5f5nI1Ez41Lmc5yLQPjwglnE5I6jRuO05NaU/3kF5Pok8lp/pB5xmltYHmLw42bLnK/IHe1R9ETM1Gu6sN+QdL0MqPEjboKP5q74tlagxkS7M5KXYUfM0o4Ep2IiIiIiCZG0KuiZoYPZT4XmrviSGgGTAtQIBDwqqiv8MPvVVlKdAi5E4TWV5RgT08CCc1EiVtBfUUJmrsTgyYIBeyE9LK5ZXh6yz4kNROlPhe8HgWaYWF/Xwo+t4Klc0NDDppbXBPCsbNLsac7jmjKQNCroq7CP2TsjBI35pWX4N3uRP8JEhmyZFdr0AwLiixhbnlJ3m9OSwC6aSfDPS77agRLkiBLElyqhLRuwjJFXsUH3TRHHfGcNizoQ8xj9+TmNnz9ie2IpQ1AHBxYtqM9iq8/sR0A8hLp+8PO5jzMjTuUUtCHmm5M6w7n9HMYN5z3zQ7BnvZ3eFJ/3FTGo8ok6os7O3PjNI6mJsnh4ctp3HSS+YJs7ozi9a1v4fglx6K+KsgR6EWgrsKPlQ2V0EwLvXEN8bQJUwgokgS/R8EMvxunNFSxZA8REREREU2Y3FKi/3BsNQ5EU+jqiaCyvBSzgl40dyUG1domW2aC0Fhax+Nb2pCbF32jpRfzqwKDJggF7OT75pY+VAU90A0LvQl7skxVljC7zAuXImNLSxgfXjJnyN/+sizlPd9wDv7m7EBv3H4NS9gj0gNeFTNKXP+fvTePj+uqz/+fc7fZZ7TLsuRNlp3YsR3H2feNlpYk0CZpA1+gCy2kNGmAfqGUkm+gNBTK8oPSsgUCLVDCkgSSJoFAQsjiOCSO49iOV0mWbe0jjWZf7nLO74+rGd1ZpDmSZWskn/fr5USjee7MnTtXM+c+53OeT9k1p0+TgclscjBWXK3ImG1yk0ndJMfG+JpklupMk+JzvzxUyH6XHV0mLWpnx3/ul4dww6Y2KIp9pybzeSFOXSzLZ1g7dcuCbowkq3uJy4Lu4ufl9Gp4ddPR3uCBKhPoM0TbqApBe4OoRBdMwtlgl1snqE1Y1cU6s9MtNiSJYE2TD7EGFWuaKs8wCxYfzsiesUQWiiwhkUggEAjAtCiaAm4R2SMQCAQCgUAgEAhOKc7rkt6xNJYFXVD8MrwuFb1jaRElOgOJrImj4SQGotkyN8KwgEPDSSSzZlGDUGDKfG/yuzE82Sg0/4+AoMnvrmi+z5bSa05VkQsmumFaFa8567wa/C4FiawJ3WKQCAOlDAy0UH3ud6moc1SvhxM5rv0p1T3XPWo3Sp3EqlDMPhTL4LnuUVx39jJ7/zhXRDh1OmcuuFN3zfpmvD6YqLrNNeubi24TRZpGWQyvbjpSOQtuVYZhmRWdMALArchI5U6u4v1Uc3JHQTArzsTGomcivN/V4jtdsNjIR/acu7IemiKBELuZz9aVDRWz8wQCgUAgEAgEAoFgvslfl2zuCCGaMTCctBDN2FGi4rpketyKhKFYuYGeh8GOFXGXGKaJrIlIUkd3OIFI2m7Y6VNlaLKESHry90m9zHyfC2XXnJj5mjPkUbGqwQevKsO0KHIGhW4BOYPCtCi8qoxVDV6EPGrRNjyU6l7sGa/q11Fm6/LsGYxxPZdTp3I2CXXq6gLuGZRTlOqafHxxrNPpKGXoDSfx+okoesNJ0GkOUDxjQJIIQh4Far5x7OQ/VbZ/L0kE8UxtJ3OISvTTCO98Sm3Puwiq0RL0cGU9tQRre5mKQFCJTe0hrG/24+HXTuDVg1mcf/Yy3HzeCmgaX/MTgUAgEAgEAoFAIDhZFkOUKKWMKwv8dLHzWAQzpGkAACxm685qCxZ+53PJmMjoSGZNAAypnAXGGAghUOWpimifa36uCWeTo7660YcVDR4cGU1CkQkoY6AUkCRAIgQWA1Y2eIsiYG46tx3feK4XJkWZd5O/rUi2zgnjLHh16kbifPnmTl2Ocy7Cqbt0bQMUCZipiF2RbJ2TrMnnQFbS7RuIFZrG5gy7aWxXix+3bOsom+wIelS4ZAkWY2gPqciarNCc1q0QJHULMiEIck5wLBTCRBcI5pnOZi9X9+XOZu/p2B2BYF55ZPcAvvlsDwajWeiGiV/3Hcb3XjqO268u70QuEAgEAoFAIBAIBKeKWo4SnY3BeLrYz1kVXUlnmBQZ3QIhgCJJIBIBGJA1KBgDXCcZ91EKb466DYEiEbgUBbJEoOsGNE2FRVnFyJV1rQFs6ajDa8ejhcagefK3t3TUYV1roGi7FQ181d5OXb2XzxR26jKclbVOnSJJ8KgKEjM48B5VgSIVv0+8pnWpbt9ADF95+ggiKR1tIQ88IRkZ3cLe/hgGJjJlqwZCHhXL6zwYjGWRyJnQFBmqTMAAJHImVFlGW8jNvUpgoZjTWT44OIidO3fi+eefxxtvvAFd55tZEZx58J5gSylXaM8JzuU6nDqBoFZ4ZPcA7n1sP46NpSBJgCozSJLdcOXex/bjkd0DC72LAoFAcMYgxuMCgUAgENQmeYNxb38MdR4Nq5t8qPNo2Ntv/37fwMJ4AXFOd7ZUl8iasBjAmF09nDMtZA0LOdOCRRkYY6AM8xLnMlv6xlOYSOvobPbBYkA0bSKpM0TT9j53NvsQSevoG59qEipJBJ962yZ01NlmN3P8A4COOjc+9bZNZZMywxNZrn1y6q5c38S1jVPHOxXk1CWyZlFP1UpIpPw9yuh85fVOHaUMD+3qRySlo6vFD7/bnrzwuxV0tfgRSel4eNdAUbTL6kYftq6sg1eTYFoU4XgWw/EswvEsTIvCo0k4b2V9zTcE5q5E7+/vxwMPPIAnnngCw8PDYI71Caqq4oILLsCf/umf4s1vfjMkaSlZovOHWwKyHP0B3Evo8CkE4PmbVGpnwvik6Y+k51W32DBNihe6w9jZl0HCF8YVXS2FztRLkVpboneqME2Kbz7bg3jWAKUMmRQFBSDlDMgSYGYN3Pdsb1EncoFAIBDML2I8LhAIBAJBbVNqMJJJZ9PvVtDl8qN7NImHdw1gY1vwtF83rm8NAHuH+HQO4hkDukUhScQ2zQGAAYzYRq4kEeQsuiB51omsiUhKRzSlQ5EImvwadEOHpmrQLYqRWBZ1Pq2iwd/e4EXWtJDWaaGBqVeT0d5QOTXg0GiSa5+cuvUtgRmUUzh1QQ2IcdRGBB0x5dG0bq8UQOVoYQIgrVuIposfeFmALxPdqcs3mm0LeQrnd+F5CEFbyFPWaFaSCLauqMODr/YjmbUK+0gBxLMWKHScuyJU814Kl4l+77334mc/+xmuuOIKfOADH8CWLVvQ0tICt9uNWCyGw4cP49VXX8VXvvIVfPWrX8W//uu/YsuWLad63xcdHpeEbKa6i+5xLZ2LHrcM6ByTke4lFKec1vk6KfPqFhOlUR8/2LcHy+vcSzbqY99ADA+92o+9AzGkDQteVcbm9hBuOX/hluidKrb3jKFvLA3dZEVfyhQApQChDEfHUtjeM4arz2pZqN0UCASCJYsYjwsEAoFAUPvMxWA8XWxeEYQsoWLESR5ZsnVO/G4FlkVBGeDRZACkkIkOMGQNCmpR+N2nPzHa55IxkdaRMSw0eDUYlMIwAEUm8KgqImkdLK0X5bXnJzpMi+G6s1owktSR1S24NRmtfg09Y+mKEx05g8/Dcep29kW5ttnZF8Ula5sBAB0NHsSGM1W36WiY6rOXzJmwGCuKpyn92WIMyZK4F4/K5z86dYmsiZxB4QnJAGNI5EwYJoWqSAi4FHg0GSNxWjRxQSnDw68OIJUzy0x+BiCVM/HwqwO4acvymjbSuc5wj8eDp556CvX19WX3NTY24tJLL8Wll16KO++8E8899xyGh4fFoL0C1kwJ/3PQLQaSnKt5eHWLgdJZ25PVLRbyUR8Z3ULQo8AjExBZwvHxNO59bD8ALCkjfd9ADPc+vh+94RQoY4VvqOORNA4Mx3H3DRuXlJE+FMsgY1gzdnLPGBaGYtW/7AUCgUAwe8R4XCAQCASC2sdpMDLGkMiaMCwKVZYQcFc2GE8XV6xtRmvQjcHo9LEky4JuXDFp5uZJZk0okgTKKHTDAiQCxmDHh1AGWZIgS9Jk49GFwaIMo4kMcvmGlbksXAoBIeUmcX6iw6speK0/hnjGLDS5HPQoWBasPNExF8M5Z05fHZ6HTOryxDhjd5y6sUSu8HPePHca6JV0APAaZ06+UxdwK3CpEoZjGQzHs0XHL+hRsCzohku1z/c83eEEXjo6BjrNgaAMeOnoGLrDCaxvDVYW1QBcJvr//b//l/sBr7rqqjnvzFKHc9KKW7cY4H0pS+glo63ODVUmMGZoe63KBG11fE0pFgP5qI+MbqEl6AIhBNmsCbemwK3KGI3nllTUB6UM9z3Xi4NDCcgS4HOpUCQCkzKkcgYODiXwred68aXbttb0LOpsGI3nuBrmjsZzVVQCgUAgmAtiPC4QCAQCQe0zZTBmMRzPVDAYPWUG4+lCkgjWtfgxHMtWNDMlAnS1BMquYYMeFV6XDD1tQadA6cYuicHrUribVM4nqZw16Tlk4axHtSwG3WJQJIqmgAup3JThnMiaiCR1TGR06CaFV1MK1/ORlI5kzkS9pzwCJpLi6z/j1HXUV46GKcWpy5icOeUOXVPAVfhZQrFxLmHKc3PqAGBgnK8Izqlb3ehDvVfDc4fDIKBQZBmM2RMZ4XgGo/Ecrl7fXJRv/vyhMeRMBjCGN3W/jHe8/kvomgv/+Ht3IOaxC0xzJsPzh8YWv4k+HZFIBHv27IFlWdi8eTNaWsQS/pmQJQAcE0ry4vcYz2guXtUwr7rFwPaeMQzGsgh6VBBCoFsUusUgWRSaLCHoUTEQyyyZqI/esSR2HouAEKDOqyE/x6vKBHVeDZGUjleORdA7lkQXZwZarcOqWuiz0wkEAoFgfhDjcYFAIBAIagfbYFTx3OExKDKBJkuQZQIG21ytZDCeLvrGU4hn7F5eyZwFSqfiPySJwO+SEc8YZRXYIY8KidgmZyVyJoNEGEILYKL7XDIiydy0ETUWBSLJXFGci88lYyJjR7iEPCpMCuRMCokQBFwKYhkDEyiOgAEAwvjKP526mza14R8f3lt1m5s2tRV+lgnfNbVT53fZzT2ZZb+nTl/RovZ7LEsEflexDWzMlO0zo44hZ1LopgXGrKnqdwJoFZzmA4MR3HDgedy548fYEO4r/P7V5Rvw7QveVri9f3hhmu7yMmcT/cknn8THP/5xrF69GqZp4ujRo7jnnntwyy23zOf+LSkMzpUtvDpBbbKjb7yo0VclGGPY0TeOa89uPU17dWoJJ3IwLQaowFgyB92ksChF0shBUyT4NAWmxRBOLI0q5cMjCSSzJkIe1W6yaViF6gKPKsE/+cV7eCSxZEz04RhnJ3JOnUAgEAhOHjEeFwgEAoGgFrGrmjOGCYKpqm4GBlWeuSEcpQx94ykksrbZvbrRN2+rm2MZA4PRDFRZwqp6DRmTTl3HKhLiOROD0QxiJQ1ClwfcVVccj8ZzWB6Yv9X2vMfBpBTJyZzt6bLAkzkTJi03iw3KEEnrdt+vyYx3TSGgDKj0SvweviacTt3LJyKQCDBDUAEkYuuuOcv2hzSZ7/126uq8GgIuBfGsCcqYvVhg8kAQgsIEgV0EOAXlS44p0vWNp3BoOAGT2jn5+ZfGABBmvycHh+P2ZEy9G/jhD/Hhf7wHy4aOFT2mKcl4o62r6HfxDF+1/0LBbaKnUin4fFMzZf/5n/+Jn/70p1izZg0A4Le//S3uvvtuMWifgRxngSavTlCbHBxK2I0WCVDJSyfEbsR4cCixZEz05oALBMB4Sp+cxbaXDBFiN9XIGjo0WUJzydKhxYv9ZZXKmZNfyKyQCacUze4ujSgXwJ6Zn0+dQCAQCGaPGI8LBAKBQDAFpQxHx1LojhgIjaXQ2VweRXK66RtP4UQkDZci2catwxOQCIFLkXA8kq7YWHTfQAwPvnoCewfiyOgWPJqMze1B3Hr+innptxXPGMhZFF5VBpEkeLXiGARNlpA2LMRLTPQHd/fPaAIDtkn84O5+vOuS1Se9n/sGYnhoVz+6R5PIGRQuVUJXix+3bOsoOw47esYL6TLOXXT+TJmtO3uZvW0+AiaS1GFSBk2RIEu2eZ7KWVAkArcqF0XAAECDn8/PcOr2D8WnzQF37t/+oXjBRCdVijLzOHUhj4pVjT4ci6SRzhmgmDSkCIEEBp9LxcoGb9lqgSyn/+jUTaR1HI+kbR+kRMcAmJRheDQG+f5vA9/6D6C3F8tKdC9tuATfvu7deCmwqujN4nzpCwa3iX7zzTfjIx/5CN70pjfZGyoKxsfHC4P2sbExaBrfrIxAsJRxKQQUk8tlSPGHN4GdRUUndUuFS9c0QpUJkjqFDIBZ9heBRCkI7BQjn0vGpWsaF3hP54f1rX5IBJhI24MLaXJ2FwAMi2EibSDkUbC+9fR2Wz+VEM7TlVcnEAgEgtkjxuMCgUAgENjkjdYjIwlEonH877H9WNcaqGi0nk5iGQODsQwAhvaQBwZloJRBkghUiSCa0TEYy5ZVe+8biOHex/ajdywFw6KFIq0TkTQODiVw940bT/p1BT0qXIqEnGkb9MVFXww504JLkcuyzZ85OML1+M8cHDlpE33fQAxfefoIIikdbSEPPCEZGd3C3v4YBiYyuOv6dUXHIWNQLpM642g+6HPJyBoWNEWCBgbDso1fQgi8mr1SIGtYZXEuDT6+MZZTp8kSV28xzZG/wmQZQPWICuZY1bC60YetK+uQMy0YpoqJtAGTMigSQb1PhSpLOG9l/bzECHWP2JMblV6Xy8jh7Xt+hb/53UNoS4wV3UdB8MLmK/Dta96FV+tWIqVbZR1Xaz3dmttEv//++/GpT30KP/vZz3DPPffg4x//OD70oQ+BUgrTNCFJEj772c+eyn0VLEI0AugcM0naEjLe1jTZBmt+WYuzLjff4EEitm6p0B/LIOBR7A9qx+/zs9UEdoOV/limbLZ9MbKyzlu0bKnSrDxltm6p0MK5ioBXJxAIBILZI8bjAoFAIBAUG63Lgi64LBkejzqt0Xo6iWcM5Ey72huEQJUJ4PBiXYpcVu1NKcN9z/Vg32AcJrUN9LyLToiFfYNxfOu5Xnzptq0nVWkf8qhYHvJgaDKyxdlQM62bUCUJbSF3WbUy41xhzaubDkoZHtrVj0hKR1eLH2SyQsvvVtDl8qN7NImHdw1gY1uwcBy6WviuuSvpZImgwesqm+iIpCtHiqzl9DKcOpfKZws7dV5VAVA9CtfW2UgSwS3bOjAwkUE4noHHpcCwKFRZggyG5qAHN29rLzt//CqQNEofuRy/45SwKEPp+nOvnsE7X/sF3vfKw2hORYvvlGW8ccWbce+2W7Hb14aMYQF65RwZv7u2i0G4TfSOjg7cd999eOyxx/Dud78b7373u/HrX/8ax44dA6UUnZ2dcLmEeSIopt6nYCRZfQat3nf6O1OfKup8GryabDfqKLkvf9uryajjnMVcDMQyBhLZmcO0klmrbLZ9sbLj6Lg9U42yiVMA9qSBSRl2HB1fEo1UAWDj8tC0rzcPmdQJBAKB4NQgxuMCgUAgONMpNVoBhlyK2EarW61otJ5Ogh4VLlmCblG4GYVJUTBoFQnQLQqXLBVVe/eOJbGjZxw5wwLAIMsSGAgIASyLwrIYXuwZQ+9Y8qR6bhVVK1u0uFrZO3218ublAfzmYLjq429efnL9wPrGU+geTaIt5CkY6HkIIWgLeXBkNFEUhTOW4MvQdupSOQv1Xg2E6Yhl7ckETZFgUmbfVmXUebWyOJez24KQgDKfx4k0qcsTT/E1PXTqNi4P4PBoquo2G0uO96b2EM5dEcL9z0cK2egSIQi6FbzpnGUVJ5Y66jw4GM5Ufa6OOk/h5yMjicLPwWwSf7brMfzVK4+gPpso2sZSVMjvfhfw8Y/jJ3tT2PHSCcCY2Tdyc046LBSz3rsbb7wRDz74IA4ePIh3v/vdYIxhw4YNYsAuqEhLgM8o5tUtBgJuBao885+WKksIuJfOxEEsoyOeNaY1WBmAWNZArMabRPAyEs/CsCgkYq8qcJL/nWFRjMSXTpPNDW1B1Hln7rZe51WxwTFgEAgEAsGpQYzHBQKBQHCmMhujdSEIeVQsr/OAMWAwlsVIPItwwv7/YCwLxoDldZ6iau+DwwnEMgYYYzApkDUociZF1rBNeMYYYhkTB4cTMzxzdfLVykGPiljGgEXthpoWZYhlDAQ9asVq5U5O455XNx2JrImcQeHRZFBKMRjNoDecxGA0A0rt3+cMikR2ynAeivJdczt1AbeCBp+GtS1+NPg06Kb9mLpJ0ehzFX5f6tn4XDJXNIszBiZt8JnoTt22VfVc25TqHtk9gP/a3oecSeFzyQi4FPhcMnImxX9t78MjuwfKHoNyrh5w6jI5HfXpGP7vc9/H9m+8Bx9+/gdFBnpO0fDIpW/F1775OPCd7wBr1yLkm9lLyNMUrG1vcFYu3rPPPouenh6cffbZ+PSnP42XX34ZH/7wh3HllVfiAx/4ANzu+evEK1gauDW+PxRe3WKAMoZsldm1rGGB1nrHhFkQz5owq3QaMS2GeJbvC6TWYcyuJqCOZqJ5Cp2wJ5uNLhU6m/y4cl0znjowjKxu55/lu54TAG5NwlXrmtG5hGKKBAKBoBYR43GBQCAQnMkUjNaQXPF+jyZjJF5stJ5OVjf6sKLBiyOjSYAxEDgaaDGGnEmxssFbVO0djmdhWOVNGoHJRo0MIBZFeL6KtBgAEMgSIBfMUTLtsmNVluBSCHLm9Be4LoVULSasRsCtwKVK6B5JoHcshbRuFaqpvZqMziYffG6lyNx2KXJ+76ddJc4cOsB+j7pa/NjbH8O2FXVI6hYMk0JVJPg1Gd3hFLZ01JVV5O86NsFlou86NlFoYlqtEC2PUxf08BnJTp1pUnzz2R67Ap1SZPSp63VZslfK3/dsL27Y1AZFmXqfgu7Kf0dlz5XXDQ3hsm9+Dvc8/3N4jeLImYzmxmOX3Ij7L/0THFUC2Jxx4e8m75tLRX4twn2Gf/azn8XHPvYx7N27F/fccw+++tWv4qKLLsLDDz8Ml8uFP/qjP8Kzzz57KvdVsAiZS/fixc7hkSQMy56ny1clS46fCewq5cMjyQXe0/ljIJqeV12t09lif5kWTGTi+Of4fV63FJAkgvdd1YktHXVoCtiz8h7ZHug0BTRs6ajDe6/qXJAlkwKBQHCmIMbjAoFAIDjTyRutmWkylTO6BZe60Cu/7YgUn0tBvU9Dg09DvU+Dz6UUFWDlafBrXOZsg//kqnTzUTgmZbj2rGZcvKYR21bW4+I1jbj2rGaYlOHhXQOgJZ0617cG0Oh3wa1UthDdioRGvwvrWytXolPK0BtO4vUTUfSGk2WPn2d1ow8SgD0DMSRzJhSZwK1KUGSCZM7EnoEYJJAic/vitQ2Qp/f/wQAoxNblyVfkN/g0HBlNIpzIIpLSEU5kcWQ0iQafVrEi/8Ag30oAp45wXh47dUOx6vEqpbrtPWPoG08jZ1IY1I6cyffoMyiQMymOjqewvae42Wedl+/vpDMzBtx5J7BmDd76mx8XGehJtw//c93/wY0f/h/80xV/iYPwIWdSRBxxvnq17q+z1C0U3J8qP/vZz3D//fdj06ZNiEajuO2223DHHXdA0zR88IMfxI033oh77rkHV1999ancX8EiY9uKOjz5xiiXbqkQTmTtD2oZMJ3NhpltrCqy3XQynFg6UR+/6x6rLprUvf/qdad4b0496ZwFTZWRM6xC1XnePKfMnixRVRnp3MwrEhYbm9pDuPuGjXjo1X7s6Y8iEk+iIejHlo463HJ+x4I17xEIBIIzBTEeFwgEAsGZjrOKuMtVvAqWMYahWKZiFXEeShn6xlNIZE0E3Ipt3M5jIVDfeAoTaQNbOuowFE1jLKUXGjw2+TW0hbyIpPWiXO9Ujq/6llc3077lo3AkSULQU2yKV8ocB+xVyResasBzh8PwqhIgkULOOygDBcGFqxoqrkreNxDDg6+ewN6BODK6BY8mY3N7ELeev6Ls+pFShuMTaTBmV09LxM6FzxclWhQ4MZGeem4AjT4X6r0qxlLT91+r86po9BUXbk7lhx9FLGvk+7gi5FZx3YaWite2lM2Uhl5ZJxG+2mWn7qUj1fPn87q8vzIcz047sZQno1sYLlnNMBiduW/dqolBvP+lB3HrvqcBWvz4cW8AD15xK/77wrdigGqT6QRTJrhZJOc1x5eIie7xeNDf349NmzZheHgYmlY8A9bV1YUf/vCH876DgsWNR+FbGsKrWww0B9yT1ebl97HJ3yuSrVsqDMerd46eja7WCXpUBN0KUrAbw5iOaBdVJtBkCT63WtQsZqmwqT2EjW1B9IYTeHXPfpy/ZSM6mwOiAl0gEAhOA2I8LhAIBIIznXwV8cBEBt2jSQTcMhIZC2Y8i0TWmraKGLAN3Yd29aN7NImcQeFSJXS1+HHLtvkrCMrHzRAChJM5pHIWKICcQcEYQ4PPBcZQFDczkZ7ZyJytrtq+zTYKJ78qeTSRRc9oEuZkdCljdtRLZ4u/4qrkfQMx3PvYfvSEk5PXzHY0y/HxFA4OJXD3jRuLjvv2njFMpA3U+1QYFoVu2pnthBB4NAWqTBBJ69jeM4arz2oBAHSEPMgYM5vbGYOiI+Qp+t0juwfw7eePIpE1IZHJkjhCEM+a+PbzR9FR78XbtrYXbXNeRx3+5+X+GZ8rr8vTEnRDJsBM6bcysXV5TkzwFVw6dSOxLNdqhpFY8WOb01R+d40dx9++9FO8bf+zkEsmDxKhBvzw8lvxvW03YNhSYJnF5nme9vqpY76miW+VPq9uoeCOc/n7v/97fPSjH8UVV1yBd73rXfjABz5wKvdLsER49nD1KvTZ6BYD61v9ZQ1OSiGEYH3r0smO9nJ2UObV1Tohj4rlIQ/8LgV+l4xGn1b453fJ8LsULA+5i5rFLCUkiWBNkw9dDSrWNM1v5YZAIBAIpkeMxwUCgUAgsAt7btjShrRu4rXjMewPG3jteAxp3cQNW9oqGuL7BmL4ytNHsOdEFIokIehRoEgS9pyI4itPH8G+gdi87FvArSCW0fHaiSiSOQuqIsGjSlAVCcmchddORBHL6EVxM15NQbVLKonYukrwxqWcTBTOpvYQ3nHRSjQHXLAog0HthqRNARfecdHKilXl9z3Xg32DcSRyJlK6hYxuIaVbSORM7BuM41vP9RbtaziRg2kxBFwKmvwuNAdcjv9r8LsUmBZDODFVnLe9ZwzpKhXYad0qijExTYovP3UY8YxpryKXJaiKDFWWIBEgnjHx708dgWkWm8f7BuMzPk8l3VktAcjyzG+uIhOc5WjKOk1qTvl2Rbq5VXqvbCgu7tw40ouv/vwz+NX9d+DmN54pNtDb24Evfxn3//ev8Llz34YBQ4Y1Q/zKxtYpQ7w1xFdEyqtbKLgr0d/61rfiyiuvxIkTJ7B69WoEg8FTuV+CJcJezg8ZXt1igFmY8YMEsO9nSyjp47xVddjVXz0f7LxVdad+Z04Dqxt92LqyDjnTgmFRJLIWLMogSwT1Xg2KTHDeyvpplxAKBAKBQDAXxHhcIBAIBALbEH98zxA8qoytK0JIJePw+YNIZE08vmcIa5v9RaZuPgu8fyIN3bRwZLKaWpEIWgIaMoaFh3cNYGNb8KQLhDpCnkkzmMKrSmAgoJMNRt0KQdqgCCdzRZXRl3c1wqVIM1ZUuxQJl3c1VjwWP915HDuPRZHOWfC6ZFywqg5/ckG5sV0aheMs/qsWhZM/5l5Nwfmr6qEQApOxaY9571gSO3rGkTXs5qDMkXNLCGAShhd7xtA7lkTXpIHcHHBBkQlyJi1UnsNRNK+bFhSZoDkwFc3yQs8YVwX2Cz1juHZD6+Q2YQxEsyDE7maWMynyeS4yAQhh6I9m8EJPGNec1Vp4nLlklTPCYM1Uhg7AtBgYmdKsafbhcLj6c61pnnqfciZf1Eyp7txVdXjq0Di2Dh7CnS/+CG/qeaVsm6GGZTj63jtx2b/8A6CqePXbO6p6XgBwODzVEy/oVrkq8oPu2i5EnFWnhfr6etTX15+qfREsQQj4/pB5dYuBF3rHUO3zhDJbd9bypXHxmzH4Zj15dbWOcwlhJKWjo16BTAisyUHETEsIBQKBQCA4GcR4XCAQCARnMnlDPJLSsa41AIBh3EyhMeTGshBB92iyzBDvG09h9/Eojo+nkSypWo5nTfg1GS5loiwLfC7sODoOw7IN+oxJAWclLwEUicAwGXYcHS9EknQ2+lHv05CJZkGAoqp0yiabivo0dDYW79u+gRg+9tAedIenIlYIAXrDSew6FsVnbtlSZGyXRuG0hTzwaDIyuoWhWGba61jnMe9qKTbfW4Os4jE/OJzARFqHRctrpO0oGIaJtI6Dw4mCiX752iYsD7lxfDwNtyqBOHLCGaOIZwysavTh8rVNhd/HM3w58U7d/qE4zMkdY8SOi8l39rQmjyNlFPuH4kUmepWC94q6/QOxGY1jwDaW9w/EsL7V9ocY4/MRnLqAh8/eLdXJz72A7//oq7jy2O4y7fGWFfjete/Ew+uvwvWbluEy1Ta4+8bSZdpKOHX+aVZRlMKrWyi4Fgncc889GB4e5nrAJ554Ao8++uhJ7ZRg6VDn41uKwatbDAxM8M1O8uoWAwR8H/K8usXApvYQ7rp+HTZ3hGBShnjWhEkZtnTU4a7r14kmmwKBQCCYV8R4XCAQCASC4uaYpTGqhJCi5ph5YhkDh0cSZQZ6nqRu4fBIArHMyWWOA3YkicVY4cqXOf4BAAFgseJIkuMTabQG3Ai67VgX28S1/y8RIORW0BJw4/jElClJKcPnf3kQB4YTMCwKAruS1+7PRnFgOIHP//JQWbRL/jr2nOUB9I4l8crRCHrHkti0PDjtdWzRMQeQyBqIJHNIZA0QoOIxH4lnYVYw0PMwACa1dXkURcLtV6+FR5MxGs8ho5uwKEVGNzEaz8GjyXjf1Z1QHDkm65o9FR69HKfOpci2kT+5HxZlMCfjaQrvF7N1Trau4LvGd+qePsAXXezUlT7vdDh1R0erJwMUdIwBv/oVcNVV+Nt/fm+Zgd7b1ol73nkPbvqbb+L+NVcgotOi7HQXZ0yvU9cTTnGtGOgJp6qoFhYui7+hoQE33HADtm3bhmuvvRabNm1Ca2srNE1DPB5Hd3c3Xn31VTzxxBNoaWnBpz71qVO934JFQltAw6GR6n8EbQGtqmaxkNX5ZkJ5dYuB1iBnvhWnbrGQb7J5Kru7CwQCgUAAiPG4QCAQCATA3JpjjqeySFUpI07pFsZTfA0dZ6IpoBUMR6+qwGJTDTVlQpAzLZiUocnhgSSyJlRZwsWdjTgaTmA8acCgFKokocmvYnVzALG0UfSausMJvHJsApSxyZXwxRalRBh2HougO5woVDjn6Qkn8fLRCZyIpAuxNpQynLeqvqKJnj/mOcXCweEYxpI6DItClSU0+TWsbvQjZxQfc1at/HoaXb6Z5zd+21O0fysbvLj9mrVlzT6zJt/zOHWrG732cwOOmJni28Shy9McdIEHp043+crXnbq1zXyxsE5d7xhHkSZjaPjNr4HP/w3wSnlsy6GOs/Cd696NJ1adj4RuAbmpVRRZY2r/LloVRHe4ejX6Rasc5x0BV2JDrdddcpnoH/zgB/Gud70LP/3pT/HAAw+gu7u76H6fz4fLLrsMn/rUp3DVVVedkh0VLE56xpLzqlsMaJxdIHh1i4FL1zSC4MiMM4tkUrfUkCRy0kv+BAKBQCCohhiPCwQCgUBQ3BzT55IRzxqIZSnUrIGgW6vYHHNXX5TrsXf1RfGmDW0ntX/L6zxQJIKsQcEMExSkkLctgcFigEeVsLxuqjI6/5rciowLVjcikTULJnXArSCVs5BVraLXtL17HFndmjYYlzK7Uej27vEiE/2R3QP45KNvIJk1QSYr13XLjmT55KNvAECZUR1wKzAsit8dHUcs6ywGtDCRNjAaz6Gz2V+0f2OpHHiYTsfAiqr46TRug85p1jt19R4NsmRXwk+HLNk6JwHOvG6nzufi28apW9PI5y84daPx6SeAJGrhDw+9iDt3/Bgbwn1l9+9dvQn3X/9uPLV8i71ao8KE03hSL/zsdfMVwTp1hsU3mcCrWyi4w2aamprw/ve/H+9///sRi8UwNDSEbDaL+vp6rFy5smwZjUAAAJEE33IoXt1iIJXRq4tmoVsMpE17oJKdqRGKKiHNOQsrEAgEAoGgHDEeFwgEAsGZTr455u96x2FaDPGsgaxu4HgyiqBbhSITXNLZVNQcs58zSpVXNxMZnaLBq2IwasFggEzsaBfGGAxmZyrXe1Vk9Klr56KGny1+BD1Thup0DT+TOaNqZzk6qctjmhRffuow4hkTsgQo8lRhn2lRxDMm/v2pI7hhU1tRZMrKei9GEtkSA32KWNbEaCKLlfVTldvDUb7c7FLdI7sHcO9j+5HOmfC5FCgygWkxnBhP497H9gMoNvk1mbOI0aGL5/j8p1Id42zl59RdsLoeD+8erLrNBaun+t1EMjoIKa6SL4UQW5dHr2A+y9TCW/c/izte+gm6xvvLH+T66/FvF96C76lr7JUaM6zWyDq8nH2DfNExTt2JCN8qD17dQjGnxPZQKIRQSOT9CqqT5vRMeXWLgT2DsXnVLQaCHhUhtwqJGMjoxXPEBPZMe8CtFg0GBAKBQCAQzB0xHhcIBALBmYgkEWxdUYfHXh9ERrcQ9CjwyLapOBjNwKPJOHdFqChi0+/my5jm1c2EzyWDAnBrMgyLwrIYKOzrYlUmUGUJdFLnfE2zbfhJLT5H16l7oSeMgWgWhNi5GTmTFqrkZQIQwtAfzeCFnnBRQ83e8SSGozObm0PRLHrHk4Wq90PDfGkDTp1pUnzz2R4ksyZURUIiZ4Exu/GnKktIZk3c92xvkcm/vI4vMtapi2eNGavQAbtKPZ4tNtF7xuJcz2XrbKO/vd4LRQZmqidUZFuXpznohkQwY0NSidi6PB5FBmDvr2YauHnf0/jbl36KlbGR8o1vuAG45x7gootw5Lu/Q+rQWNXX1OKfiqiZS1TPUIxvgopXt1AsnTwJQU3C96fFr1sM9E/wzZzx6hYDIY+K5XUeBNwaGn0aGrwq/CrQ4FXR6NMQ9GhYXudBSJjoAoFAIBAIBAKBQCCYI5Qy7D4RRXPAhWUhF3STImEw6CZFW8iN5oALr5+IFTXU7Gziy5jm1fGgSAQu2Y4FkST7/y7Z/n0l8g0/N3eEEM3o6BtLIZrRsaWjrmLDzyhnE1Snbv9QHKZFQSlgUrtCnhACAvs2pXZF+v6hYrP4t/tHuKref7t/yrAd48yXd+q294zh+EQGDIBuUhBim8WE2LcZgGMTaWzvmTJ9XzvOV5zo1A1G+YzaUt3u41Gu7Zy6S9c0Ilgl0iXoVouib7tafKBVDjilti5PR6MHLiOHP3/1f/Hb+96Lzz75n0UGOgXBc5uvwuc+8z/AY48BF10EAOhs5fzbcOjq/XxxLk6d38U5kcWpWyjmVIkuEAimR+dsbMGrWwysbvRh68o65HrHYVoUkbRhZ75JBA1eFYos4byV9UXLzwQCgUAgEAgEAoFAIJgNfeMpdI8m0eR3YziWsR1WACAEhBA0+d04MppA33iq0LuqJeSZ4RGn4NXNRCpnwa3KGEvkinK4LQCGzqDJFpoCLqRy5aXJm9pDOLs1gO09YwgncmgOuHD52qaiaJU88UzlaJWZdC5FBmN2EaMEwKJ27rhtpttGOGG2zsmT+ytUM1fgyf0jeN+16wDYpi0PTt1IPIucbmEy/wYGLc6TByGwdAsjjvxvxvhiDZy6Hd3VK6/zur+5el3h9lCML+fdqeuPZRDwKJhIG4VjXfr/gFtBfyxTOF+PR9JVC03ZpO7sZSEgkcA7n3sQX3zou2hORYt0FpHwzNbr8I2r34m9vlbcdlZx3r1E+GqrnbqJFN8khFN3UWcjfvhyhUiZEi7qrO0+esJEFwjmmZlyq+aiWwzkl58dGIqjZzRpfxkzBosyTKQNrG3xly0/EwgEAoFAIBAIBAKBYDYksiYiSR0TGR26SaHJBJABTSaIpHUkdRP1Hg0JR3736ayC9blkJDLGtA0vdYshkTGK4lzy7BuI4aFd/egeTSJnULhUCb89HMYt2zrKKtG1CsZ6JZy61Y1TkSGOQn27eafjtlNXqp0Jpy7kkjGeqm70hxzHgTGAMrsiPl+BTiQy+Xt7FYJUkhWuyXzvmVM3wmmGl+nmEIoeyxjI6hQ+l4KcacGi9iwGIZOrFRQZWZ0i5lgx8OTeYa6nefalI/j9h74NfPnLeHMkUnSfISv49fm/j/uuuA0HPM12dI9JMV7SyFXn7Fvn1A1yHj+nbtPyEPwuGckKk0d5/C4Zm5bXdlShMNEFgnlGkoCqa53yuqUGw2RTM1ZobkYIWVp5PQKBQCAQCAQCgUAgWBB8LhkTGR3JrAmAIZWzi7dk04AqE+iTYddOkzqdrX6BTjh11aCMIepo+FiJaEYHLamq2zcQw1eePoJISrcz0UN2Jvre/hgGJjJlkS5uhc88durqvBpkCTPmgcuSrXOyaUUAr/VXj03ZtCJQ+Fnj3D+nbm2zH4SQQg66Y5EBgKnfr52s2AaABkdW90w4dZWacFaiVBfyugBUr8K2dTbxjIGcRRF0K3CrLkTTBgxKoUoS6rwqsoaFtGEh7jDRB6rEzTSkY3jPzkfwnn9/HMimivdZUfHERW/Bty6/DUfUOugWLXrD00bxm1+66mA6nDrGOavCiiKV/Lju7BY8+caIbeiXPb6E689uRWeTv+y+WuKkTfTR0VH09PSgs7MTra2t1TcQCJY4hLPYmle3GKCU4aFd/YhnDQTdMqJpCgOATICgW0Y8a+DhXQPY2BYU1egCgUAgEMwzYjwuEAgEgjMJw6TI6BYkiRTCQBgDciYDpRSukirtkWT1fG7GqavG/qE4jCoerWHZunwTzvz1dCSlo6vFXyhI87sVdLn86B5Nll1Pezir5p26RJYvR71Ud8maRnx/R/Uojkscud4pnc+odupSuglNkWDpdsW27PAOrMkMd02RkNKnKtxTBt9rcuoafBp6x6u/1w2+4smE1c1evHIsWnW71c1TlfxBjwqXIiGeNTCWzMGkLJ9Qg2TOgKZI8LlUBB394yqtUgCA5mQE73v5Ybxz9y/gNUoqyt0e/PzCG3H/ZX+CXtkHw2JAheazpa+pkXMSwqnTFAX5JqYzYetsJIngfVetxWg8h+7RBDIGBWUMEiHwqBK6WgJ471WdNe8XnZSJ/swzz+Cuu+6CYRhQVRVf/OIX8fu///vztW+CJYACgCepayktifCrEnIcnbL96tIpRe8bT2H38SgiSR0mY1AVGYRZUBQZ0YwJhVh47fhEUS6dQCAQCASCk0eMxwUCgUBwJpHImrAmYz9MkzkWPdvp2hKxoz+ccS6myZcfzqubiVd6x7l1f7S1A8BUzntbyFMw0PMQQtAW8pTlvJ+1LFD2mJVw6hJZs5KvWoRFi48dALzcG5lGXczLvRHcsMV+TRqn3+HUBT0qAi4FEiHIGRYsNmU4K7IdfeLT5CLDuX88zfU8Tt2qRj92Ho/PoJ7SOalzz9wgtJIu5FHhUWWMxnNgmGw0SwgYGHSLwbAsNPldCDlek1USBdQeG8Xtv3sIt+35FVxWiXkdCgF33IGXb3g3/umxXpiUAdNECQHAmzcsK7q9LOSBLFX02wvIkq3LwziziUt1m9pDuPvGjfjpK8fxYu84UjkLPpeMyzob8ScXriyLLKpFTsrF+/rXv453vetdeO211/D3f//3+I//+I/52i/BEiHg5jvFeHWLgcYg50wep24xEMsYGIxlkDEt6CbFeEpHJGP/XzcpMqaFwVi2KOdLIBAIBALBySPG4wKBQCA4k4hnDGQNCxYrTw1lsP3DTEk8xusnolyPzaubCcJpszl1iayJnEHh0SpXIHs0GTmDFpnbXpWvEt2pG41luRpWjsaKq7R3Hp3gei6nbn0Ln8nv1IU8KpbXeeBzKQh5VTT6NTT5NTT6NYQ8KvwuBcvrPEWGcyzNN/Hh1P3hljaubUp1fZyGvVPXEfIUzkV7gQSZNJcJ8gsm4lkDHQ6T2j35nq2aGMS/PfHv+O1978WfvfZ4kYEe9wbx9DvuAI4fBz79aeTq62wDvQqyUjxJc/ayAAKumScHAm4VZzsmY+aSo56nJ5zEy30RDEaziKR0DEazeLkvgp5wkusxF5qTci6PHTuGW2+9FR6PB7feeiuOHTs2X/slWCrMofHCYoe3FcnJtyypHeIZA+mchXTORCJrQjcpLAbopv1Fn87Z/+LCRBcIBAKBYF4R43GBQCAQnEl4XTJyVfJSdMOC1xGJcWyCL6aFVzcTLZzFck5dwK3ApUrITBOBktEtuFQJAffUGv7XOA1/py7MGVdTqtMpn1/j1J27so5rG6dudaMPW1fWodGnosGrgjEU4k8avCoafCrOW1mP1Y2+wjY8KQCluivWNFU1Q6VJnZNois/PcOp2HB2HThlcigRZkiATO9pEJoAsSXApEnSLYcfRqRUMl+uj+NL/fgG/+dbf4La9v4ZKp86LiL8eX3vL7Xjzh76PN/7y74CgHQk0kTIgV0lCkYmtc7K6wYeqTewYm9TZzGWVAQA8snsAn3z0DRwZTSFnWjAsipxp4choCp989A08snuA63EXkpMy0XVdh6bZeToulwsGZxaR4MwhNXM/jVnrFgPRLN+sHK9uMeB3K8iaFgxauRrAoEDWtOB3L6XgHoFAIBAIFh4xHhcIBALBmUTvaArV0iQos3V5Ai6+61Be3UxcvLZh1rrVjT50tfgxFMuURWAwxjAUy2BdS6DIPE5m+SqwnbruMF8ldalOU/hyqp06ReKzG506SSK4ZVsHgh4VE2kDukmhWxS6STGRNhD0qLh5W3tRbna9l+89c+p29I2j2u5Jkq1zMsY5CeHUhRM5gAFuVZp8PQyGZUe56CaFW5UANql77TXg1lvx7vfeiD/e/1vIjmLT0VAzvvS2v8ObP/A9fH7LTRgyZXQum8per/MpM6W4ALBXadT5io9X91gC8czM51I8a6J7LFG4va6Zb5WBU2eaFF9+6jCiGQMmZTCpvT8mtSdKohkD//7UEZgzdb2tAWb9CfGZz3ym8LNhGPj617+OQCAAi7O7reDMgrNpL7duMZDR+b7MeHWLgVhGtxtXzIBhMcSqdCkXCAQCgUBQHTEeFwgEAsEZDQHAMNVUFMU/o8TzfcuWZXiJI5LkLVuWVdVUI6NbhVz26ZAIiqrO8+bxwESmkI3u0WRkdAtDsQwafFqZeXx2G5+R6dTF07kZlFOU6kobtU4Hr64aqZyJZM6EYTEwMBAQGBZFKlfuoUSSfB6DU3dwKMGVDX9wKIFrz55q2J7lLFRw6poDLlDGEM2Uj9EYgGjGxCWjh3Hth78APPtUmWaooQ3fv/Yd+NHG6zBhAMxxCH57YAw3bl4BABiN8723pbpHdw+imm1Nma07+w/szPJbLlyBXx0cq/pct1y4ovDzCz1hnIikp50AYww4HknhhZ4wrjmrtbKoBpi1ib5///7Cz+eddx5OnDhRuH3BBRfMz14JlgyaAvD05tCWUIFyWuebOePVLQZ6HLP81XTXnX2Kd0YgEAgEgiWOGI8LBAKB4EyGOP9NGuogKBh0pXXTF61pzPvuMz7mRWsaT3rfElmzaqU8Y+XNOze1h3DX9evw0K5+dI8mMRKncKkStnTU4eZt7WVNF9e3+cCDU5c1+Ar5SnWRFN92Tl1pg9TpcOooZbjvuV4cHUvDohQSyb/LgEUpjo6l8a3nevGl27YWJhQinBErTp2mEK5s+NIKfItKAKoXLNg6m4tXNSBbKaaHMVx8Yh/+7sUf4Ypjr5fdfbxlJf772nfiofVXIKozoMJcQTgxVfE+HMtxnePDsWITvX+cz8tx6lbW8517Tt3egTiqFZmb1NYtKRP9+9///qnYD8EShTOeilu3GOD1xpeQh44Dg7F51QkEtQalDH3jKSSyJgJuBasbfUWVIAKBQHA6EeNxgUAgEJypdLX6oSkSdJOBEAaGSQ+d2BXejBG4FIKuVn9hm5zB0OzXMDpD1XKzX0POOPkl8qOJHF/zzkR55fCm9hDObg1ge88YwokcmgMuXL62CUqFCu//eKqHa3/+46ke/Pd7mgEAySyf4VymY5wr3Ry6oIevC5xT1zuWxI6eMeQMC7IkQZElkMnJEdOiyBkWXuwZQ+9YEl2TDUl5mmmW6lycTVlLdS6Z7zg4dc/1jhZXejOGq47uwp07foyL+veXbYstW/C1y2/D15vOQ0KngD7964skp86h5XVurn0r1c3l+L3YU70KPa/bsNye/BmK8kUJ8eoWilmb6B/72Mfw8Y9/HH6/v7pYcMaT4zSKeXWC2qR3jG/2klcnENQS+wZihYqQnGFXhHS1+HHLto6yihCBQCA4HYjxuEAgEAjOVOq9GlY2eHF0PA1KAVUGmMVAZALTAhSZYEWDF/VerbCNzyUXIl8qWYb53/tcfObqTJRmms9Gt28ghgd3nsDOYxNI6ya8moJnVo3i1gtWlF139HFeWzt1kQqRIpUo1/EWD03pXjw8PoNuihcPj+NPzl8FADg4nEAsY4AQQJUlUAZQZse52LctxDIGDg4nCiZ6R4MXx6PVs8o7GqbywyeSfJMJpbpwis+4cup++nI/AIAwijd1v4w7X/wxzh0+UrZNf9c56PjSZ4EbbsADn/kVEvHq1f/R1JSJvnVlHWTJruaWiV3hzxgr/N9igCzZOidzacx6YCjOtY1T56rW9XSWuoVi1ib6z3/+c3z4wx8Wg3aBQFAgmsrMq04gqBX2DcTwlaePIJLSEXArcLsVmIxhb38MAxMZ3HX9OmGkCwSC044YjwsEAoHgTGV1ow+XdTVBt0YxkTKQ1k3bIKSA362g3qvi8q7moiaclDGkdAuyROCSAQsElDJIEoEMhpwFpHULlNMAnxHexyjR7RuI4WMP70H3aBImZYX96wkn8erxCXzm5i1F1x286eNOXY5zOXypjncFrlM3nOBrwunUhRM5WIxBkQgyhgmLTuXdyxIgSwQmZXYTzkku7qzHi72Rqs9zcWf91HPG+aqdS3WVUlkq4dR1D0Vxw4HnceeOH2NDuK9Mu2fNFnz72nfi8MYL8csbrwUARKo0+szj1OUMhtagG0OxLCwGSJPTRYwxUGav0mgNustWW8TTfBMKTh3v34lTlzP5tuHVLRSzNtHzMxkCgUCQh/MznlsnENQClDI8tKsf/RNpGBZF33gKJrUHdfVeFWndxMO7BrCxLSiiXQQCwWlFjMcFAoFAcKbibMIZjmdgMiCRTCHg90EhQHPQU9aEs3s0BQK7St1isGNC5KmYEEWe0q1vDZY952yiHcc5G106dZQyfP7JgzgwlABjDC5VhqwQWIwhZ1g4MJTA5588hO/+xYWF5/VzVs07dS6ZgacY3SUXG5k+lwaguilu6yYfQ+GMTHHomgMaCMqNVAa7wtq+FrN1efaciHI9j1O3POTh2qZUJ0sA5ZiHkCUAhgE88AD++0t3Y2X4RJlm57rz8a1r34XnWs5GxrDQaZ2ceRxwK+hs9kOVCI5HMkWNbSUCrKz3YEWjDwF3sQ2c4Iz4ceo0mW8Kx6lzqZzNaTl1C8Wc2jnee++9cLlcFe/7zGc+c1I7JBAIFh9Bt4qRRPUP36BbPQ17IxDMD33jKew+HsVIPIdk1gDFlHGVyBjwu1W8dnwCfeMpdDaLalCBQHB6EeNxgUAgEJypbGoP4YYtbfjmsz0YjGahGxRRPYPldR7csKWtwkpRBlki8KsKsqYF3WSFcb1LleBWZGQMC5XCXmYb7TiaLM86r4RT1zOaxM6+CTDG4NFksEKMCeDRZGR0Czv7IugZTWLdMjvGxOKMWHHqGvwuRCPV96/BXzy+WNHgxt7B6hEeKxqm8ra3rQrit4erZ2dvWzU1abG+NcDVlHV9a6Bw+/gE32p3p259W2AG5RSluo2tXrw+NHMVu2Ya+MCJ54Gz/g44ehQrS+5/acMl+MY178KOhk7kTAoY9qzGySYJrW70od6rYW9/DEG3BAYJFmOQCQEBRTRj4lyvVrRCAwAIZzGYU6dWyOivhFOncW7Dq1so5mSi82Y8CQReGUhzzHR6Tz56rGaQAPAskqrtj4bZsbLeiyPh6kuiVtZ7q2oEglohljFwLJJGNKWX/E3b34FGSi/oBAKB4HQjxuMCgUAgqFVmU7k9F/YNxPD4niF4NQXnrQwhEY8jEAwikbXw+J4hrG32Fxnc61sD8LsVZHQLjT5XUVyKIhFMpHX43UqROZt/nny0Y1vIA0/INrTnO9rxhe4wsiaFIhPkTGrHYEzmmEiEQJEJsibFC93hgonu5qwGdupaQm70cpjoLaHi5pNnLwviiX2jVbc7e9mUIX54OMm1f06dZdrZ3TNhMVuXR+U8Dk6dxDjjaUp0F61pwutDxytq3UYWb3/9V7j9dw+hLVmcB09B8PyWK/HNq96FV0MdtnlullxhOp7Ko0pIGdVdJU9Z1TaDSRlMClBqFaJw7PO88oF1c64YcOoODMS4tnHqoim+a2Ze3UIxaxOdEIK7774bjY2Np2J/BEsMIgHgMNHJEnKUz0QTfXmQr8KcV7eYME3K1T1dsPiIZXTEM6UG+hR0UhPL8C3ZFAgEgvlCjMcFAoFAUKvsG4jhp68cx4u940jlTPhcCi7rbMSfXLhyXgznfORiJKWjq8UPgEExUmgMutEaJOgeTZZFLnY2+XHBqgY8dziMWEaHz6VCUySYlCGW0cEYcOGqBnQ2+ad9nnyMmt+toMvlr/g8ALChLQhgsOrrsHU2WYOCUQaTAZQ56uEZQMFAJjufZh3G6soGL3b1V68OX+loqDkXwxQAQj6+63inzuQ0qp26x/ZUP2553YbJc+mizjrsH6pu2F/UWVf4+eAoX2PMg6NxXH/OssLtSlnlvlwa79r9BN778s/RlI4W3ynLeP6C6/HvF9+GPf426Fa5eZ4n4QhS11QZPK6SrbPpG0/hRCQDmQAZk8IxDwNCGVwuCccj6bJV1CvqXXitv+pTYUX91OqE0SRf3r1TN5rgXKHBqVso5pSJLhDwQjkbL/DqFgM+DYhxeGo+rbpmsbB/lG8JFa9usfDI7gF7CWEsC9NiUGSC5SE3br96Ld62tX2hd09wkkQz+nRjnAImtXUCgUBwOhHjcYFAIBDUIvsGYvjgj17D0bGUo6I4h95wCtt7xvHlt5930kZ633gK3aNJtIU8IIQUfScSQtAW8uDIaKLILJQkgvdd1YnRRBa94RTSullwGBVJwrpWH957VWeRGV76PE6mex4AuGp9M7RfHoI+Q0m1JhNctb65cHv9Mj9AULEKm8GOMJHIpG6S0mrx6XDqVjX4AVRvwmnrpjg0mOB6LqfunLYgfrlvpOo25zgmEwaifOasU5fTORtWOnQJzmaapTrnpWEwm8RfvPq/eM/OR1CXLTbxLUWF/Od/Bnz84/jnh3rRPZYFrJkvLFXHudde58VgrHq1d3vd1ARJfhV1WrcgSwADKUQWETCkdQvHI+myVdQxnpD8Et1Eku/4OXUZg28bXt1CMetyyT/+4z+eNn9RIBAAROL7s+LVLQY0me+Li1e3GHhk9wDufWw/jo+n4VVlNPs1eFUZx8fTuPex/Xhk98BC76LgJDnIkfs3G51AIBDMF2I8LhAIBIJag1KGex7Zh+5wqswMthjQHU7hnkf2gdKTuyZMZE3kDAqPVrmq2qPJyBkUiWxx1fCm9hDuvmEjbtjchtWNPrSE3Fjd6MNbNrfh7hs2lpn7zuehlGIwmkFvOInBaAaU0mmfp6s5gEs7m6ZNLCcALu1sQlfzVHTMynpfpTj2YtikzrF/PDh1Ok9XzAq6SIqvaMip+6tL11RNbSeTujzL6/kmBpw6xvhek1PXF6keRVtJp8kEDekYPvzc97D9G+/B37/wP0UGek7R8PNL34b/uO8J4NvfBtasgcwZY+RyrGY/b0U91zZOXSyjI5kzYVEG3QIMy451MSz7tkUZEjmzbBW1yXlOOHWKwveanLqhKF9BJa9uoZh1Jfo//dM/wTTL/1ij0SgURYHfL5qrCaYgnNkmSynOhatd82x0iwHG+Qby6moc06T45rM9yOgWWgIumMz+clJkCS0BF0YTOdz3bC9u2NQmol0WMb1jfIMrXp1AIBDMF2I8LhAIBIJa48hIAq+fiM6oef1EFEdGEjjLUX08WwJuBS5VQka34HeXW1oZ3YJLlRCocN+m9hA2tgW58trzz9M9kkDvWApp3QJlDBIh8GoyOpt88LmVsueRJIKbz2/HK8ciSOvlVb4eTcbN57cXPWckmatqm9BJHWCb76Sq644yncZ5aVqqc3Gapk7dYDILjyZXPAZ5PJqMwWQWXV47BuaGc9rwtd/2Vn2eG85pK/w8luSbTHDqjo2luLYp0g0N4Q+++wV84tcPwmsUR45kNDceveSt+NYlt+Co7MdN7ilzm3KuHnTq2jgnE5y6ZM6EadEZo0hNiyKZKz5eM62YmE7nkviMPpejcDSR4/O/eHULxazdnQ996EN4/PHHy37/i1/8Ah/60IfmZacESweOXgiz0i0GcpzRNLy6xUAqx5dbxaurdbb3jGEwloVbkzGe0jEcz2IknsVwPIvxlA63JmMglsH2nurdyAW1i1llyd1sdQKBQDBfiPG4QCAQCGqNR18f4GoK+ejrJ7did3WjD10tfgzFMmXxZowxDMUyWNcSwOpGX8XtJYmgs9mPc1fUobPZP23D09WNPkgA9gzEkMyZUGQCtypBkQmSORN7BmKQQMqeh1KGpw+MAoxBAgrV2ASTBhxj+M2B0aKK/J+8yhFKXaJzceabO3XhJF9FealO5qx6dOoOjySQNWY2PbKGhcMjUxEwo6lcVZNSmtQVbhM+g9+pi2f4IkPiGQM4dgy44w5gzRpc+8T/FBnoSbcP37vunfiDD30fH7vsz9BNfLAow5gj19uy+PbPqeuP8MXaOHUWZai2yIMyW+fErXLm5Dt0zXV8Jr9T55tm5UgpvLqFYtYm+p49e3DJJZeU/f6iiy7Cnj175mWnBEsI3pVaSyfl44ycOJhLdtliJpzIQTcpYmkd8awJ3aQwKINuUsSzJmJpHbpJEa7xphiCmWkN8g0OeHUCgUAwX4jxuEAgEAhqjb6x6s0dZ6ObDkkiuGVbBxp8GrpHk0hm7QiLZNZE92gSDT4NN29rn9Yc54VShuMT6UIeOYCCSSkRO6f8xES6LJ6mdyyJHT1jMCwGVSFwKRLcigSXIkFVCAyL4cWeMfQ6jkNpxMZ0OHVBzmafTt2JCb7r8VKdyenXOHVJ3eAydZP6lKEdTvBV5Duvs3XOgqZiXfVtVk0M4h8f/gLQ1QV87WuAoyAw5g3i229+D978oe/jkxe9A8fgKXqtqsNwzpl8hr1TxzkvUKQ7Gub7uyrVpTmrO506i7N63anbuoJv9QmvbqGYtYmu63rF5aOmaSKbXRoGmWD+qPfwnWK8ukXBGThxkOacEeDV1TpNAW3SOC9/GxnsCRLdpGgKLKHusWcgl6xtnFedQCAQzBdiPC4QCASCWmOuVc5zYVN7CHddvw6bO0KIZgwMJy1EMwa2dNThruvXnXTzUsBefTyRNhD0KAAIMrpV+AcQBD0KImm9bPXxweEEYhkDDHZlsEEZDMsuuqIMYGCIZQwcHJ6qwO7grOx16kajfAVbTl0qx2folurWNHunURbj1P1sJ191vVOXMfiiWZy61Y18++bUzZAwg66x4/jS/34Bv/nW3+CmV38FOMZb6fomfPWG2/H7H/wePn3ezRigWsWJgrNaA45bvF7XlO7SNXzXl05dzyhfRE2pri3I12PHqVvTXHmVRylO3dpWPnOcV7dQzDoTffPmzfjJT36C//f//l/R73/0ox/hnHPOmbcdEywNOOOfuHWLAd757pObF68tzrQY+JagC2aVaXWTMrRwfiEJapNzlofgdylluXFO/G4F5yw/+UG6QCAQzAYxHhcIBAJBraHJfFe4vLpq5PPNe8MJvLpnP87fshGdzYGTrkDPk199bJhW2Spy3aJgWQpVkctWH4cTucK1ImEMhJDCxT+lDAx2/rVzuxWcpqRTF47zNWB06izKV3VcqltRz2dUO3W9nJXRTt2+gRjXNk5dRwPfvjl1leI4zxnpwR0v/hhvOfxi+cYrVgD/8A/YedWN+PwP3wCqHMYL1kxlos+lCeeKJi9U2V61MB2qTLCiaeo15Tgr8kt1a9sCwBujVbdb2zY1MXB5VzMe31t9m8u7mgs/m5zLGXh1C8WsTfQPfvCD+Mu//EscPHgQl156KQBgx44d2Lt3L77zne/M+w4KFjcTGb4/ZF7dooCAr8p8CbnovA3WT7IRe82woyfCrdvYVndqd0Zwyuhs8uO6s5vxqzeGka3wZe5WCK4/qwWdTaKBn0AgOL2I8bhAIBAIao32eh+ACU7d/CBJBGuafIg1qFjTVLlB6FzJrz42p7EqDAqwCquPG/1qoUiQAY6KQVamy/P6cT7z+PXjMeBy++fhON/KM6cuo/P5LqW6nX181787+yK49YKVAIBYmq+q3Kmb1XGYpLPZV9WCIZO6PJajivO8gYO4c8ePcX3PK2XbDTe2YdlnPwX8+Z8DqgrfsQhUaeZoXlUC6r1TxXRuha8S3alL5Sx4VBmGNf0x9KgyUo6IlXofn71bqmsPebi2c+puPW8FPv34QaRmKOn3aTJuPW9F4fb6tiCqtSOVJnW1zKwzNM4//3z8+Mc/xrJly/CLX/wCv/nNb7By5Uo8+uijuOCCC07FPgoWMXwfm/y6xQBnPBS3bjFwpq04GJjgWyrFqxPUJpJE8L6r1mLrino0+1T4NBkeVYZPk9HsU7F1RT3ee1XnvA7WBQKBgAcxHhcIBAJBrXFWG585zqtbaOa6+jjoViFLtqk73T9ZsnV5ciZfhbhTN8oZi+PUZTifp1TXE+aMCnHocpx1kk5dadPL6XDq6r0ueKs0o/RpcpGxbegUlxzfgx/86OP42Q8+XGagH2tZiX++7WN46x3fBv76rwHVfq+SWRNuVcF0iylkArhVBcnslMNFOD0Qpy6eMSBJBHUeBapMiprTqrL9e0kiRQ1SvZyNZkt1zx8Oc23n1GmajFvOb59Rf8v57dAc78vGtiCCHgUEKPyD42cCIOhRsLHGTfRZV6IDwIYNG/DFL35xvvdFIFgSVJtdc+qWCnxfxfy6Wmc0zpk/x6kT1C6b2kO4+8aNePDVE9g7EEdGt+DRZGxpD+GW8zvmJW9RIBAI5oIYjwsEAoGglhiI8F378OoWmu1HxqqLJnXO1cdBlwpFkmDOkGWqSBKCrikTfS653orE5yg4dYTTpC7VzaXx6VxaxdV5ZWC8+jZ13ilzNuBW4NVkZAyr4sp3iQAeTUbArdhVfU8+ie9//6O4YGB/mbanrRP3X/suPNJ5MVIGg5QrfsCgR4XXJcOkFFmDFu07AaApErwuBUHP1Hurcx5zpy7oUeGSJeRMCk0CwOxV/RKBfRsELlkqep7cdEsmSijVTXCuGHDqKGWIpo1pI2dUmSCWNkEpKxScdTb5cdX6Zvx6/yh0036v8ka6RABNkXH1+tpf5T0nE92yLDz11FPo6ekBAKxbtw7XXXcdZJlv5kMgWMq4FSDJ8TnkntNfX22iAOBpUbJUXnLIy9cwlFcnqG3yeYt94ykksiYCbgWrG+d3uahAIBDMFjEeFwgEAkEtwRificerO1VQyrjG9Tv7qkfT5HXvvWrqdiJnVo9uJZO6Sep9fNeNTt26Fh8GOYq21rVMVf7nOKvaSnU6p0HLq5uOZSEPcCLBpytlOq+aAYRS+J54DPjPLwKvvorSNXsHVpyNb1/3bjzRcR4yJgUM+8FKX03Io8KjyhipcNwZgIxB0RqUEHKY2yrnNaNTF/KoqPOq6A2nYDJWqFK3GJBmDIplojXoK3oeTeUb/5XqMgbfBIlT1zuWxI6e8WlXDliU4cWeMfSOJdHVYmep51d5Hx1L4chIAoZl9wfIV9d3tfgWxSrvWXtax44dw/ve9z6MjIxgzZo1AID77rsPy5Ytw3333YeVK1fO+04KBIsJ3j4p89RPpSZwqQSGUX2G1aUujRe9uT0E4ASnTrAUkCSCzubanhUXCARnDmI8LhAIBIJaYzHEmu4biOGhXf3oHk0iZ1C4VAldLX7csq18hanBWUFcqvNpcqFxZf7ql5X8bFoUPkfUxfGxNNdzOXUfetN6PNv9UtVtPvSm9YWf5xItAgANPhV9keoZ7A0+tapmJgJuvskEpy6RNe0q9Ao6iVp4y6HtuOuln6BttK/s/tc7t+C+a9+Fp5edY/fAKpkEKK317wh5EEnNbDpHUjo6HCa/zLliwKlbWe+FblFYlIEQgJDic8iiDIbFsNLRyDXDOUNSqtM5fJxS3cHhBMZT+rQ97ygDxlM6Dg4nCiZ6Hp+mIOBWYVIGyhgkQqBIBD5tcZRcznov7733XqxYsQI//vGPUVdXBwCYmJjARz7yEdx7772477775nsfBYJFhc75xcSrWwy0+FUkJ6rPYLb4T+5LtVa4eWsHPvnofmRnmGl3KxJu3tpxGvdKcCrhrVgRCASC04EYjwsEAoGg1qgU63Ayuvlm30AMX3n6CCIpHW0hDzwhGRndwt7+GAYmMrjr+nVFRnpXiw+/OVg9L7qrpTjjvSecApuM3shDHA4ogZ0q0hNO4YI1jZO/47uucOoiWZ614MU6WSGFKuuZkJXi/bl6fQt2cVSIX72+hWufpiPo5jOcnbpoSke6pMGlYpl42/5n8bcv/QRrIwNl2+/deCH+/Yp34vnm9Xa8iVn5mKxqKM673947hlR25tiBVNbE9t4xXHt2KwBgTbMP+0eqZ8qvcTQ+7YukkMyakCUCAgZJlsCYbaZTi4IRgkTWQF8kVTCpq5n7eUp1Ls4KdqduKJae1kDPQ5mtK9ymDA/t6odJGa47uwXJnAXDolBlCX6XjJ5wCg/vGsDGtmBNX2fPOpb5lVdewUc+8pHCgB0A6uvr8eEPfxivvFLezXYmfvjDH+Kmm27Ctm3bsG3bNtx222149tlnC/fncjn88z//My6++GKcd955+Lu/+zuMjRXnUg0ODuJ973sfzj33XFx66aX4t3/7N5jmUmpTKVhsWJwrmHh1iwGvh88c59XVOpJE4KnSvMSjyTX94X8ymCbF80fCeKYvg+ePhGGe5LK9WmffQAz/8vh+fOLRN/Dpxw/gE4++gX95fD/2DfB1jxcIBIL5Zr7G42IsLhAIBIL5gnBe+vDq5pO8gRdJ6ehq8cPvViBLBH63gq4WPyIpHQ/vGgB1OIM+TnOxVEcIIBECidhmOWV2LAhlKJjrEiFFx0FT+A6KU3dgoLqpXapb1VAhBqUCpbrbr+yqah5Kk7qTYZwzn9upOzqWLBi6mmngHbt/id9863Z88YkvlRvoN90EvPIKXvrGD/BUfVfVHPG3X7Ki6PYbA7Gqfd6sSV2ezha+1cxO3eGRJHImtTPPiQTdpIV/IHYWes6kODySLGxTrQnudLrL1zVxbefUHeVsNOvU9Y2n0D2aRFvIA0myX0Oj34WgR4UkSWgLeXBkNIG+cb7HXihmbaJrmoZUqvxFpVIpqOrsDLJly5bhwx/+MB5++GE89NBDuOSSS3DHHXfgyJEjAIB//dd/xTPPPIMvf/nL+P73v4/R0VHceeedhe0ty8Ltt98OwzDwox/9CJ/97Gfxs5/9DF/5yldm+7IEgnmjirc6a91ioNnvnlddrfNCTxiJKjPQiayJF3r4Ol0vJh7ZPYC3fvUFfPDHe/Cd1+L44I/34K1ffQGP7C6f4V8K5CtW9vbHoEgEIbcCRSLY22//XhjpAoFgIZiv8bgYiwsEAoFgJihl6A0n8fqJKHrDySKTuZQL19RzPeZ0utk8l3Obo2MpdEcMHB1LTbuN08AjJS4+IaSigTfXyvrWoBuKItmmOezKc2ny/wy2ma4oElqDU9fGIS/fd7dTNxjji4Bx6pYFXTMopyjVaZqM1tDM27aGXNBO0uSwOCsNnbqMQeE2sviLnY/i2W/+NT7z5H9iZWykcD8lBL/dcjV+9t9PAI8+ClxwAY5yVIYDwLHR4mM8GMtwbefUGdNUuZdSrGOwKEMia9gNalnh1zApRSJrTOaRT23Tyvnelur+4Jw2ru2KdbNvG5vImsgZdNpiRI8mI2fQqj7LQjPrOJdrrrkG99xzDz796U9jy5YtAIDXX38dn/zkJ3HdddfN6rFK9R/60IfwwAMPYPfu3Vi2bBkeeughfOELX8Cll14KwB7Iv+Utb8Hu3buxdetWvPDCC+ju7sZ3v/tdNDU1YcOGDfjABz6AL3zhC7jzzjuhaaKp30KjAOD5E1gc6Ud8uBUJSaP6h79bmfUcVs2SyPAtJePV1Tpv9MerzvSalOGN/jiuOav1NO3VqeeR3QO497H9yOgWgh4FHpmAyBKOj6dx72N2d/O3bW1f4L2cP/IVK/0Taeimhb6xFEzKoEgEdV4Fad1cFEvOBALB0mO+xuNiLC4QCASC6ZhNfjgAnL0syPW4lXT7BmJ46NV+7B2IIW1Y8KoyNreHcMv5lZ/LuX9HRhKIROP432P7sa41UHH/CgZeaHoDbyRebODNJeYCAC5d0wiPIiGjWwXjPH/lSGCb6B5VwqWTUS4AMBTlM2edurYgX4GaUxflNChLdd3hBKLpma/lo2kD3eEE1rfynQeVGOA0qQu6RAKXPXw//vS730RzOlqksYiE32y9Dl+/6v9gj7cV/7x+Q+G+pw+Ncz1PqW4uTULjnB6IU7euOQCLMeglEzRs8j+6xSBLDOuap/LGO5uKY4Wmo1SnWwwBtzKjeR1wK0X7onE2sXfqAm4FLtX+u/C7yx3AjG7BpUoIVLivlpi1i3f33XdjxYoVuO2227B582Zs3rwZ73jHO7By5Up8/OMfn/OOWJaFxx9/HOl0Gueddx727dsHwzBw2WWXFTRr167F8uXLsXv3bgDA7t27sX79ejQ1TS0ruOKKK5BMJtHd3T3nfRHMH7xzSLU91zQ7Zj8nt/hJ6HzvIK+u1jkeSVYXzUK3GDBNim8+24OMbqE54IIsSzApIMsSmgMuZHQL9z3bu6SiXfrGU9h9PIqRWBb9ExnEswaSORPxrIH+iQxGYlm8dnyi5pecCQSCpcepGI+LsbhAIBAI8jhXY9Z5NKxu8qHOo824GnMgwmmAluj2DcRw7+P78fjeQfSEkxiYSKMnnMTjewdx7zQRisX7p6ItIKPOo067f04DrxKVDLyVjd6K2lJKdf2xDAIepWCgSwBkYv8/X5kecCvodxjGxzmPnVPXEOCrPHbq+ieqNwetpHv+yBiyBgWB/VryFrHzdtageP7IVOQbb026U5fjKEYEACUWAz71KWDVKpz31X8rMtANWcFjF92At33wv/A3f/Ah7HK3wKSsyLjN5Pjyw0t1o/Ec13ZOXSTJ9946dYwwMDazY0QZA3N0gJ3I8HktpTqvKsOosgLAtCi8jsmiBh/nuefQrW70oavFj6FYpuy1McYwFMtgXUsAqxv5JgMWillb/MFgEF//+tfR19eH3t5eAPaAetWqVXPagUOHDuHtb387crkcvF4vvvrVr6KrqwsHDhyAqqoIBotnsRobGxEO2xEJY2NjRYN2AIXbec1ssCy+brang1ral9PFUnnNKc6OoSmdLZnX3ORz4xCqLydr8rmXxGs+McH3RXhiIrMkXi8AvNAdxmA0C7cmI5LSJ7uFUySNHDRZgluTMRDN4IXuUVy5rnmhd3demEjmcCySQixjoNJqTsMywCIpTCRzsDjzBRcb+fN3qZzH1aCU4VgkXWggu6rBu+RXGZxp7/FCM1/HeT7H47U4FhfnpaAUcU4InIjz4dRCKcODr55AJJXD2mbfZPwJg88lYW2zFz3hFB569QTOavEVjZO2Hxmb/kEdbD8yhmvOai481zef7cG+gRgM026YmO+gSBjDvoEY7nu2B1/8ky2F53Lu36oGD/YOxDGR1FGfSmBzexDHIpmy/VtR58baZh/2DcSwRvFgJKkjq1O4NQmtfg1DsQw2t4ewom7qelUmBJpCoM8Qx6EpBDIhRefiRCqHjE7hc8nIGRZMalefEwCqZFeuZ3WKidTUNUQ4yWfqhpN64bl8mlww6qeDTOry22Q5e5ZkTbPoNQ1G04UJAOd1EZu8nd+PwWi6sJ0KVM0PL+gmt6mr0kOtIR3De3Y+gvfsfhzIFBcy5RQNj1/0Fnzzsj9Ftxqy404cq8fHEtnC87hVCfFpJlScuFWp6Dj0T/AVT/VPpArb/e7oBNc2vzs6Udjm0FAcZpU4IdNiODQUx9rJynLd4Ps81A2r6DUdiySQrTJ5kTEojkUS6Gy2J4zSnMWRab34PPrjrcvRH0mjezSBZUE3PJrd3Hc4nkW9V8MfbW0DYxTz+dE+32PLOdfJr169GqtXrz6pJweANWvW4Oc//zkSiQSefPJJfPSjH8UPfvCDk37cubB3794Fed5K5Ct8ziSWzGuuMmPo1C2V13xJSw7be/l0S+E1JxNxbt1SeL0AsLMvg6xu2MsRGSBLgEIAxigyOkVWt5vo7HyjG4HU0shHf20oi1jKmHbwZzEgljLw2hsHgcjSyPufjlr6fjxV9E4Y+O2xDPrjJgyLQZUJOoIKrlnlQWf90miKPBNnwnu8FJmP8Xgtj8XFeSkoRZwTAififDg1DCZMvNYTh18jGBvLYiJDkbUY3DJBvUeCizLs6knjl9tTWB6YspSODvKZhUcHh7F7t12p2x838PyhCaRzeROPFf3fsCw8d2gET7ywEx1BtWj/+mMGdh6LFh43nE7h8GgKjW4CI1u+f+d4DTwXS2LPiSgsR165TICOoIKN62Ts2fN6QW/FDQRVgjhjqOS3ajIQ1AisyAns3j1c+P3u4RzSOR2UMpjFcdYwKaBaFlI5it1vHALG7UpdxeIr0lKsTOH6su94uurqdgagr68Pu+koAEDmzHmXrWKvgiaShceb7nls3XhhO1mC3VG12nNJU17QSnfl49CcjOB9Lz+Md+7+BbxGcTW44fbgoYtuwjcvvgXHZJ/tm1eIXu3vH8Du3fYKBY3xGakas4qOwwCniT4wkSpsF83yVddHs7Swza7DyYpFXE4sBuw60IPllp3/biX5PAorGS78/QHA0/v5GtQ+/eph1GeGAAAjI3x9wUZGhrF7d/F7+vvtFn57TMeJ0XThmmtFUMHV7TKM0V7sHuV66FkzX98XszbRP/OZz8x4/8c+9rFZPZ6maYWqmU2bNmHv3r343ve+hz/8wz+EYRiIx+NFFTDj4+NobrZnLZuamrBnz56ixxsbs2c/85rZsHnzZsic2T5z4qe/5JZu3br11O3H6eQMfM1NT/4a/fHqH8pNfnnJvGbfsgS+9Lvtlb6rCkgE+L0Lt2LdssD0okVC56HXsCc8Ul3X1rRk3uOYNwz62msAY3BNNgOxLAuKLEMBkDMsMEKwbWMXtq5fGpXoxzEAC9EZNRaAxrYV2LqEsuCdWJaFvXv3nvrvxwXmjcE4frWvG5GchoY6r11RxBiGMyZ+NSDj787qxDnL557vWMucKe9xrZA/3ifLfI7Ha3EsLs5LQSninBA4EefDqUXqj0E7eBAmgFdHkkjpJiizr+d8moL1rX5oHqBjzTps6ZjKHr80dRTPHDtU9fEvPWc1tm5dAwAY3DuEpBGxDW1iP0ceyuzinaTBINV3YOvmtsL+nXhuJyLZyhef41kGJrGy/Tv++iDC2Rj0Ek/TYkA4CygN7dh67vLC77dQhqeG9uD5I2H4CcAIAbUoJFkCYQyUAZd1NeMtV2wpXrl4PAr87hWkzXJPgAFIm4Bfk7B141nYurIOALCt93UcjAxVPXbb1rRi69ZzAQAH9OMA9lfdpnFZB7ZuXQkA8P36aUxEq2d0+3xq0XWsa1kM3319R9XtbrlqMzYss4+5+TCfF2SSKS9oUBrCD/ZNTWS0x0Zx++8ewm17fgWXVbzfLBQCu/NOPPsHb8fHHz9mm87T+BESgPM2rC2cQ75nnwPS1VfS+/zeouPg+fVvgGz1VQMet1bYjnF6YgxTx+HVRA/w+pGq27S1tWHr1rUAgDFtGP+1Z3fVbS7dvB5bNy4r3H6oby+A6pMDxFuHrVs3AwC2T3QDh6rH9q1Z0Y6tW7uKfrcVwB+dxtW/pd8XJzsWn7WJvn//1B/prl27cM4558DlsmfPSrsczwVKKXRdx6ZNm6CqKnbs2IE3v/nNAIDe3l4MDg4WTqytW7fiG9/4BsbHx9HYaDdlePHFF+H3+9HV1TXdU0yLLMs18yVcK/txOlkqr9nj0gBUn0n2uLQl85ozFoNXlZGcYUmUV5WRsdiSeM0ddXzRHR11niXxegGgo8ELRSLImfZoNv95T2BnmFkMcMsEHQ3eJfOaj4zyZdofGU0umdc8HbX0/TjfUMrws92DGIhmkNNNHBxOwLQYFJlgWUBDxrDw891D2NRet6SjXZbye7wUOZXj8Voai4vzUlCKOCcETsT5cGoIeTXEMwZ6x1IwKSsYkxRALGvgtRNRdDb5EPIWX89etb4Zn33i0IzFx9KkLr/daFK3YzcmcUYz57/OLMowmtQL27gkCZEqTS4jaQMuSSpsY5oUX/lNN1JZ024M6PyqZEAqa+I/ftODm7a0Q1Hs1oGyDNx+9VqEEzn0hJP2sSAEYIAsSVjf7Mf7rl4LVS221fwuFekq0Rppw4LfpRb2L5nji8dI5szCNjHOJqGx7NQ2YJxjBEaK3tthzizw4XgOm9onC644W2VZdMoLWr8sCJkAK8YH8P6XHsTNb/wGKi0+ljFvEOZdH0Djxz4MEgyiYzgGix2b8TkogPXLAoXnUTm7Q6pSsU/l4dzOI83N38pvE83yVcpHs1Zhm/4oZ959NFu0b26Nb8WtW5s6X5s48/ibAq6Kx0GWga6TaEA7F+br+2LWJvr3v//9ws/nnXcevvjFL2LFihVzevIvfvGLuOqqq9DW1oZUKoXHHnsML7/8Mu6//34EAgHccsst+OxnP4tQKAS/3497770X5513XmHgfsUVV6Crqwv/8A//gI985CMIh8P48pe/jHe+853QNG1O+yQQnCy8bRWXTvtFIJrWoVMKmRC7wYXjPgJAIgQ6pYim+bLeap2X+viWKvLqFgMZnWJZyI3BiQwyBoWmEDDKYBIK3WRQJYLWkBuZ0tKORcwQZ3d4Xp2gNsk3kD0aTiHjaIybs4Ce8Qw8igSXIqNvPIXOZv8C7qlAMMV8jcfFWFwgEMwHlDL0jacKVYWrG31LeuJ5qdMR8mAoloVRKU+CAYbFMBTLoiNUXFikSBKCHgXRGRocBj0KFGnKiSSOa0fGir1t5ypn4ohMfeCVPq7X8cArffiXFVsBAC/0hHFiIlOoeC/y0Cdj2I9PpPFCTxjXnNVauG9TewjvuHglvvFsDwYmMjApgyIBbSE33nHxSmxqD6GUnccjM67Qzr+2nccjOGtypeO+Ib7iHafOrfIZgk6dR+PbplS348g413Y7jozjTRvsam+ZADPEyReQHW9GdOdr+P8e/TxuPPA8ZFZ8XRkJ1OOHV96GH2z5A3zmzy/BtZOr5E6EOfuVhTM4e7JK3uPiM45LdRKnCevUyeDLhnc+skfjs2qdugHOvm2luuV1fLGkTp2b8zzi1S0m5pyJPh+Mj4/jox/9KEZHRxEIBHDWWWfh/vvvx+WXXw4A+Kd/+idIkoS77roLuq7jiiuuwCc+8YnC9rIs4xvf+AY++clP4rbbboPH48Ef//Ef46677lqolyQQIKCp4KlED3DO+C0GUro1OSMPeBUFFmMwJ6M+ZEKQM+37UxzNOxYDYwm+mXhe3WIg4FbQXudBnVtF71jKbhJCARl2p/PORh98bqWoo/1iZzjGN5vPqxPUJrGMgYND8SID3UnGpDg4FEcsU33pq0Cw2BBjcYFAcLLsG4jhoV396B5NImdQuFQJXS1+3LKto6LBKKh9Xjw6VrVxYFo38eLRsSLDOZWz0F7vBZBGLGOWFVaFPAra671I5aauCVsC7qLmmJU8VzKpy/MMp6Hr1L0xGINpMRBUjMsGgd2o8Y3BWNFr2jcQw+N7huDTFJy/qh4KITAZQyJr4vE9Q1jb7C87z98YiHLtn1PHqqabl+s6OM1Pp87n4rtWK9UNcBYNOXUuBchx1NC5FAC7dgGf/jQufvjhsvtH61rwvavfjh+e8yZELAlgxUVMvzxQPQYnr/u9zXaMiUvmKykv1fk9fKkDts6m2QsMV0+OwWTPTgBAo4/PK3LqMpzNPkt1q+q90yiLcep6RvgmfXh1i4kFdTv+9V//dcb7XS4XPvGJTxQN1ktpb2/Ht771rfneNYFgzqxp9GD3QPWmDmsa+SJBFgMSAVRZgkUZdNMCBUApwEBhwa5ElyWCpVKQMpdBzmJndaMPXS1+7O2P4c0bWzCcyCEciaG5IYRlARd6xtJY1xLA6kbfQu/qvBHnXCLJqxPUJuFkZloDPU/GpAgnMwDqT89OCQSnCTEWFwgEJ8O+gRi+8vQRRFI62kIeeEIyMrqFvf0xDExkcNf164SRzkGtVfK/MRhHlaERLGrrnIZzwK2gwafBJUvoDieQylmFLHW/S0Znk7+s6MbnVqpWLMvE1uXhTNQo0uVXy1ZrjOlcVUspw0O7+hFJ6ehq8RfFpbUGGbpHk3h41wA2tgWL3q/BGF8hlVNX71FxFNULc+o9U6bp6/18zR1f74/hzZvsrHeZM/KtVNcW5DPsnbokh4G+beAA7tzxE+BfXim7b6BxOf7rmv+Dn5x1NWIWKSrnPjQ81QzzRITDoS7RxbJ8xTGluo4GN3Ydr37cOxqmjgOTFADVrxdtnc1cJjtynAvCS3W943xGt1OXqRJXNFvdYmLWJvrTTz9d+Jkxhh07duDw4cOF311//fXzs2cCwSJl/fIgsKd608n1S6hJ3frWAEJeFaPxbNGAy5pcAqhIDA1+N9a3Lv6mogDQHNBwbKL64Kg5sHSWsksSwS3bOjAwkUHPWBrLgi7Ifhlel4KesTQafBpu3ta+pJbuTnDGD/HqBLXJ02/wtYB/+o1R/P7G5dWFAsFpQIzHBQLBQjOdweh3K+hy+ac1GAXF1GIlf5ojn5tV0K1u9KHeq+K141GYlNlFVLCrvHMWw+HRJK4/u6Wo6CboUauWHbFJXZ4r1jXihy8PVN3HK9Y1Fn5e18oXyefU9Y2n0D2aRFvIAwIgkTVgmBSqIiHgUtAW8uDIaKIs8s/HGWHh1OUMPlPXqYtxXoM4dWnOleGlujov33WtUzetp8sYLjmxF3e++GNccez1sruPtazEd659Jx5cezlSFipmofSNTRm6OY5Gn6W62eS1O+lq9AOo7vXYOhvGWVfn1EVSRtEKjUqQSV2ekJvvvCvVvXBkjGu7F46M4far1wEAPJxRQry6xcSsTfQ77rij6PY999xT+JkQggMHDpz8XgkEi5jj49U7G89GtxjobPJDk8m0FQsmBVwyQWfT0sgTHk/xDXJ4dYuFTe0h3HX9Ojy0qx9HRhKIJC00KAa2dNTh5m3tS67SSJX46lx4dYLaZP9Q9ZVDs9EJBKcDMR4XCAQLzVwNRsEUzkr+gFuB263AZOyUVfLzVrwHPHw2USVdLGMga1iglEFRbBOdAdANClNiiJbE402kc6gUve7EYrYuz1VntXCZ6Fed1VL42c+ZMe3UJbImcgZFTrFwaCSOeMaENTk5EPQoWNXgQ86gSJSuSuWdM3LohpN85rZTJxM+d9apm+uKasI5ETajjjFcfXQX7nzxx7hwYH/5/eeei69e8Xb8Z91mZEzMGCTuzN1PVzuBKuga/XyTAqU6j5szS92hC/k0jKaqT0yFfFPP1ejXuEx05/7NNapnLufrhmUhu8fuDDsoEVu31Ji1iX7w4MFTsR8CwZLh13v5Mrl+vXcIn7nlvFO8N6cHXbdwIjJzNtjxSAa6bsG9BDKzszm+QQ6vbjGxqT2EjW1B9IYTeHXPfpy/ZSM6mwNLssLIr/GZ47w6QW3i4/xM4tUJBKcDMR4XCAQLzZwNRgGAqUr+/ok0DIuifyJTOH4Bt4y0bs5rJf9sKt6PhzmLwkp0vWNJHBlNQpEIcpRBd2S0EACKRHBkNIHesSS6WuwVyrv6olzPtasvWmhYOcFZqOTUHYvwvSanLuBWYFgUe/rtynoKBkptUz+SpIinDbTVecp6QsnT12BPq+OM6C7SDXL2ZSrSzaUsGoBeLd9nBh1hFL935He4c8ePsWW4u+z+AyvOxoZvfBH4wz/Ea//9MjIHq1dGNzvMY4Nz35y6Bg9fhXSpLpXjO/ecug3L/DgyWj1yZsOyqcnGoFuBJBMwq/K0BwEgyQRBx7k3xHk+lOrOX1WP549Eqm53/qqpWMuzlwdQ51ExkZ7+eIQ8Ks5evjSSCJyIK3+BYJ4Zy/J9MfHqFgP3vdDDVUFw3ws9p2eHTjGyzJklx6lbbEgSwZomH7oaVKxpWtjMxlNJg981rzpBbfKWyQZD86VbTJgmxfNHwnimL4Pnj4Rhcl6ECAQCgUDgNBgjKR2aIiHgVqApEiIpHXv7ozAsuqSazs8nfeMp7D4eRSSpYyJtQCKAptg9pCbSBiJJHa8dn0DfPKxezle87+2Poc6jYXWTD3UeDXv77d/vGyjOeE7ofOOBUt3hkQQiSR05k5YZfwxAzqSIJHUcHpnKs+6P8jWsdOoOca4OdOoyBt9rcupW1nuRMy2Mp3WMp3REUgaiGQORlIHxlI7xtA7dpFhZ0pjx2BhfRrdTdxZn3IxTN5fs9ViGb1KrVNfFuX9OnUQt3HjgOTzx3btw388+XWagv965Be//y8/hj979ReAtbwEIQWczX38tp07iXBXs1B2f4DOcS3Wjcb5j7tQ1B/gadzp1IY8GnybPmOHv02SEHA1MzUodcytQqvu9s/iucZy6ziY/rlzXDK8mlfW9kwjg1SRcta55ySQROJm1iR6LxfDFL34R9913HwzDwL333otrrrkGf/VXf4XBwcFTsY8CgaDGeamXr0M6r67WWRbkawrLqxPUJl4X33I9Xp2gNnn7+avgUmaeCHIpBG8/f9Vp2qPTwyO7B3DTf76AO364G/e9GsMdP9yNm/7zBTyyu/ryaMHCI8bjAoFgockbjMmciaBbgSpLIIRAlSUE3QqSObOiwbhYoJShN5zE6yei6A0nQTkNKl5iGQODsQwypgXDpJhIGxifNNQNkyJjWhiMZRHLnFw8ZGl2vd+tQJaInV3f4kckpePhXQNFr8/v4lyNWaIzKatooOfJG+lOEy/g4qsIdurGknwGqFNX5+Ebrzt1xyfSmEjpMCpUAzMAhsUQSeVwfKLYNB/nXH3h1F3W2cS1jVNnWXyrnp26JOe+leqCnJNhQbcCGAbw3/+NX9//t/jPRz+HDeG+Is0r6y/EX73vy/iTt38Wv2jZiJyjGk8mfOeeU0dNvtfk1GU4s+FLdXHOv0en7pK1DVzbOHUBtwJNljBdTZ5MAE2WiiYpL3BUis9Eqa6Xc5WGUydJBO+7qhONPlfZ4gbGgEafC++9qnNJFtvNelr47rvvxp49e+B2u/Hiiy8iHo/jve99Lx577DHce++9+NrXvnYq9lMgENQwfWG+js68ulrHxRnfwasT1CYXrG7Ak/urN528YDXfwEhQm2iajLuuX4cvPHm44kWfBOCu69dB42wStRh4ZPcA7v75PiRzJsAmLwR1CwdHErj75/sAAG/b2r6wOymYETEeFwgEC83xiTRcigyfW0U8a8Kr2easRRnSugm/W4WmSDg+kV50mej7BmJ48NUT2DsQR0a34NFkbG4P4tbzV8xbRnk8YyCds6Bb1I46mZyEYAwFI5pSk9u0mw5ndj0Yw1A8i6xuwa3JWBZwVcyu72zmi2Ao1SUyBleT0ITjNV3Y2Yj/ebm/6nNd2DnVJDTCGefi1Pk5TWCnbjyVw0hi5srj0UQO46lc0TkucYZMO3WRDF9zTKfO5OyO6dS5VBkJo7rp7CppCDmeql6BrZkGQt/7DvDAt4C+PqwtuX/7xsvw9av+D37XsAaGxSp299Q5X5NTF+Y8H5y6NOfKhFJdk49vMsapW93gh6ZIM0biuBQJqxvKPycJIZAmB+sMk7HkBIVGzk5agnyro0t1BzhXdhwYiuOmc6euD549PIr+iUzFCab+iQyePTy65HqmAXMw0V9++WXcd999WL58Oa688kr88Ic/xLZt23D++efjz//8z0/FPgoEghpnpiysuehqnXUtfmzvmeDSCRYvV65vAp7g1AkWNXdca3ea/9azPYhlrcIgNeRR8N6rOgv3LwVMk+JzvzxYyKhV8h2/iN0EOpE18blfHsINm9qgKEtvIpC3qVqtI8bjAoFgoUlkTaiyhC0dIRwbTxVlojf6NKxs9CGWNhZdJvq+gRjufWw/ukcTyBgUlDFIhODYWBIHhxK4+8aN82IM+d0KTEphUQa3OhWJQAigyARZg8IilNv8nY58dn3YzOL54QTSulV4TV5NxlnLAmAMRe9Ta8jN9diluokUnxHs1G1oDXJt49Slspy51A5duIoZXkm3o3sc1RYgWMzWXbh6yuSv96pccSH13imj9ZWj1TOpS3Upg291hFPX6FMxlq7+N9lYYhY//vrwtFq3kcXbX/8Vbv/dQ2hLFq88p0TCc5uvxNeu/D/YFeywVyHMkAOrKXxFK04dR8/OMl2QszimVJfljD506tKGhRX1HvSNpSq+dJkAHfUepI2pqvdE1v48JQRQCIHiCMPPT4pYjBX93b7cy3cOvdwbwZvPWT61rzrfAXTqdN3Cvz91ZMZVJ//+1BG89/LOJVWIBMzBRI/FYujo6EBjYyM8Hg+am5sBAE1NTYjH+WYwBALB0oJzNRS3rtZZv4xvsMerE9QmhNm5lDMNniVi6wSLnzuuXYf3Xt6Jn+0ewEA0g/Y6D/54a/uSG/g9fyRcaCikTq4RZWCTS/DtpclDMTsj/doNrQu5q/POvoEYHtx5AjuPTSClW/BpMi5YVY9bL5i/ysLThRiPCwSChSbgVuBSJbgVGdtW1iORNWFYFOpkxEAqZyGrWosqE51Shvue68FrJ6LIlZhlKd1C4kQU33quF1+6betJT8AmsyZkWQJjFKbFoEi2gc6YHYuiSASSLE0bv8E7KRxwK4hldPSNp2FRBk2RIBECyoBkzsTuE1GsbvQWvU9S1XryyrqMwRmR4dANxNIgwIzPSCZ1Z7XZ11ZzaXI5nuQz0Z26alXo0+k8Kl8RglM3l6aQGmf/LafO5+Yb15bqohWK4Xy5NN61+wn89cs/R3M6WnynouDJc6/D1y9/O/b6WmFRNu1FlfNVNDoahs4Er246Wuvd2DdSPcaktb54oihn8v1tOHUBt4LldR6EPCp6w0kkc1MTWX6XjM5mP3wupehvMJ4xQGE35zQsCt1kYMwer3s0GaoswaSsaKXKiQm+/gKlOrfG9xnt1P3o1WPQqzTF0y2GH716DH92aSfX4y8W5vSN1t3djXA4DADo7e1FKpXCxET1qkyBQLA04W1Ft1Ra1p3dGoRMZpxEh0JsnWDx8mJv9c7weV1+UC9Y3GiajNsuWrnQu3FK2d4zBspQ1gQoT37iaHvP2JIy0fcNxPCxh/fgyEgCusXAmG1WdI8m8OrxCXzm5i2LzkgX43GBQLCQrG70oavFj739MXS1+BF0ZEkzZk/Ibumow+pGvkaBtUDvWBK/OThaZqDnyZkUTx8cQe9YEl0tfJEn0xH0qPBpMrIAQGCbZNQ2yVyqBDDbtApWyPLeNxDDQ7v60T2aRM6gcKkSulr8uGVbR9l3WUfIg3AiB8OiBdOWMdu4dCkEGYMinMyhIzTVy+l7O45xvYbv7TiGG8/tKNyu9/IZm07dgaEEVwTMgaEErjvbbmzIW+Dg1M0lJsTkzNou1XE+VZFO5ZyUceo8nCsGnbooRxV6JV1bSMPuydSdYDaJv3j1f/GenY+gLlsc12oqKpT3/CXwsY/h/d98w/bNq5TzO+9tCvBFkvDqpmM5Z++yUl0ix7cKwqlzflb+/oZW9EXSSOsWvJqM1Q1e9I6nsa4lUPRZGfSocCkSTIui0eeCSRkoZZAkAkUiiGV0uBS56POBlIaTT0Op7qxlfJ9lTt0v9k6/MsHJL/YOCxMdAP7iL/4CbPLA33777ZPZXaxiLo9AcKbhJkCW4/PLvYT+XHjb7MxvO56Fw+9RoMgE1gwz0bJM4PcsnsobQTkZzqw8Xp1AUAuQyXqf6b6CSIluKUApw+d/eQj7BuJF30OMAVmTYd9AHJ//5SF89y8vXFTRLmI8LhAIFhJJIrhlWwcGJjKFzG2PJiOjWxiKZdDg03DztvZF9bm6bzCGZG7maupkzsK+wdhJm+ghj4rlIQ+GohkYlMLrVQoV2bppQZUktIXcCJWY6PsGYvjK00cwnswh6NHg8kiwKLDnRBQDExncdf26IiN9x9FxGJYds5MxaFm2siwRGCbDjqPjuPqsFgDAYJSvorVUxzhLppy6VI7P1HXqvJyVs05dex1fg1unboCzsrdUZ1C+4+DU+Tmr1526gEcFUH0fA84JLsq3WqBUt6YxgIZ0N/7qlZ/jz3Y9hoBe/Lw5RcNjF70F0Ts/hL96x1UAAMre4HouJ1nd4lqZkD3JJe6945zNNEt0mRzn9aFDl/+sPDAYx2+PjIE6TOy+8TQ6m3xln5XOz4dYRoemyCAALIshlav8+dBWxzcxUKoLeVRImLngUZrU5clxHn9e3WJi1g7P008/fSr2QyBYMnCu8OHWCWqPwWimaoWBRW3delGNvmg5e5m/rNt4KYzZOoFgsXDJ2gbcv/0oKAMIZSCOATujrFClfsnapdMwtzucwIu94RlzG1/sDaM7nFg0n9liPC4QCGqBTe0h3HX9ukJV9Ejcrore0lGHm7e1L7oVPkjHoQkAAQAASURBVK/0jlcXTer+aGtHdeEMrG70YevKOuRMC4ZFkchaMAuZ8i4oMsF5K+uLqlMpZXhoVz/6J9IwLYpjkXQh+qXBqyJjWHh41wA2tgULhlw4kbNzqEvSNNjkf6TJ+BhnFjjvvEepboKzytmpm0t8h1UtqLyC7squZrjVQ8jOUPziUSVc2dVcuN07lpxW66RUN5eq8miWz2x06uq8fE0unbpYhu95inSDg9jypX/G3/325/CYxdE1Gc2Nn136Ntx34R/jmOLHlSkVf8X1DJWRCIEkzVzNL0m2Lk9Xowvd49Wjd7oap6rXDc5IoFKdypnyWFHnPC0mZ7JI6e8nyX8+RDM6sikL40m9qJdB0COXfT74OaN6SnU+lwKemQufa8o+Dnj5notXt5iYtYne3t5eXSQQnMHwts5ZXC12BE5G4rmqgzeLMozE+XL0BLVJW9DDtby0jXM5oEBQC1y9rgXLQm4MRrOwGCDRfLSJbaAzAMtDbly9rmWhd3XeeO7QKKrFtBqWrVssJroYjwsEglphU3sIZ7cGsL1nDOFEDs0BFy5f27Q4m1MTzn3m1c2As5I/ktLRUa9AJqTQLLBSJX/feAq7j0cxEs8hpZuglBWqypM5Ez5NwWvHJ9A3nkJns13k0ejXYFgWpvMMTcoAWEUm9co6N45PVL+OWVlXnBft5YxZceqa/JzxHQ5dXYWIm0o4dWtb/Lh4TQNe6B6HRRmc7yCFXZF/0ZpGrG2ZKo7hbYpbquM99506w+J7LqdO5sxEd+oSnJXUiRwFjh0DPvc54P778Qe54vMh6fbhp5ffjPvPfyv6yeS1EAOOjCQKmmrVzU5dnpagCxIhsMDKfN38bYkQtASnzoctK+rQPT5S9Xm2rKgr/KzKfOdqqW4u1d75yS/TYrjurGYkdQuGSaEqEvyajO5wqmzyS5IItq6ow2OvD8IwKfxuuXA8c7qFZJbg3BWhos+H4Rif91Cq6x1NgRCAsMo+OoEdgdg7mio00I1wdnPl1S0m5r0S/frrr5/zzggEAsFiYCSW5TJXRzgbxAhqk5eOjnMtJ3zp6Dg2LF9clVaCMxdFkfDRPzgbH//ZXqRyVqEqLb/qwu+S8Q9/cPbiND+m4eWjfDnhLx+dwF9fdYp3Zp4Q43GBQFArVMrn/u3hcMV87lqnlTNnmVdXjdJK/pRhzVjJH8sYODaeQjxrTkVC5F10ymBaBo5FUog5mg0u87u5VtAu808Z4pTwGYylugYfX1W5U5fIcmZMO3Tnr27Arw6Eq25z/uqpVXWSRPCRN5+NSGoPjowmiyrS3aqEdS1+fOTNZxWZkhmdr+K9TMdZKe/U6ZzL1J26vtE01zZOXZVekACAVRODuGPHT4EvPAOU5L3HfCH86Ipb8Z2tb8EIyv8OIqmp92kufdOW13nsppmWVXYNlj/VNVnCcodJPZHiM4+dujXNXmzvjVTdZk1zcQzQBWsa8MArA1W3u2DN1LnXN54qRF4RSULAXTzGbgt5cGQ0UTT5RSnD7hNR+N3K5EoVs7Ba1KfJ8LsVvH4ihpu2LC+cswbneVeqIyS/AsBuGOScnJOkyW7HhMCZFpjinGDi1S0mZm2i33HHHYWsRcZKDz7BgQMH5mfPBALBoqGa0ejULQUIZ7o7r05Qm6Q5M9x4dQJBrfC2rXYV89efOYITkSx0y4Imy1jZ4MHfXNtVuH+pEOe8QOfV1QJiPC4QCGqB2eZz1zqXdjWCPHWkagHFpV2N8/acm9pD2NgWRN94ComsiYBbwepGX8Us+VhGRyJnTlaPO5i8SSer2GMZvXDXi33jXMU/L/aNY0OH/V65NL6rtlKdW+KbgHfqekb5IlOcuq5mvijFUt2m9hByJi2LdMkaFDmTlp2rc+37leTMeXfq7Pe7+jM6z4u57J8qAdMVo68LH8MdL/0ENx14HjIrFo0HGvCDq27D9zb/PsbZ9CsBTrZTVEankKXpr6IZ7GOQ0aeeqS/CZ6I7dYk05+RNic7gnOxw6hJZEzmDwhOqPDnl0WSMxGnRiob8qpN4xkTWpPZYb7JSPGtSxDNm2aqTi9c04JHdQ1X37eI1xZGNrUE33IoM3bIAEKiO3H2L2l2INVlGa3Bqoq3Rr6F3vHoeP29c02Ji1ib6TTfdhGeeeQZ//dd/jfe85z3QtKV3UAQCwezQZvgyLtUtBVLVcgFmqRPUJg1e+/uNAJAl+6eppn2sUNWT1wkEi4m3bW3HDZva8EL3KHa+0Y0LzunCFV0tS6oCPU97vQfgqEZvr1880UxiPC4QCBaa4nxuhoFoFtZkpnfQrVTM56516r0a/C4ZiRmai/pdMurneewnSaRghM1EMmOVG+glWJQh6cizHo7yrYx16iaSfAZjqe6pg6Nc2z11cBQ3X7gSADDIuX9OXZrzGqtU90dffQGHRyqb9odHkvijr76An99xReF3bhVIcRwKd4mnPIdC9ML1RTWczcN5+4g7dctDGo5O6EX3nzPcjTt3/AR/ePjF8o1XrAD+8R/x1qEODBhy1V082et9jZCqMTqJrAnNeRw4H9upG03p0+qclOokQriacDoz2wNuBS5VQka34HeXW7AZ3V6BEnDcl191EssYxasHGGBSCsPUwcCKVp3cet4K3Pv4wRkLvHyajFvPW1H0u8vXNmFFgwdHx1JQJAKTonDN65IJDAqsbPDi8rVNhW0uW9uIV47FZjgKU7pKUMq4Jg5rkVmf4p///OfxX//1X9i+fTve/OY349FHHz0V+yUQCBYRQTffRwmvrtaJcc5c8+oEtcn6ZQFoiv1lTidHSvkBUf62pkhYvyywELsnEJw0iiLhynXNuHa1B1eua16SBjoA/OHmZfOqqwXEeFwgECw0+UrJ8ZSBSFqHRABNJpAIEEnrGE8ZhUrJxYRblac15cjk/QvFSDJbtek9ZbYuT1uIL3rGqbMrUqtTqjs4VN1UK9NVe0EVdKNxPuPdqYsnc9h9Yub9230ihnhyqlq5kXOypFSX4TT5nboQZ1NIp67Fz5cN79TpbOrs3jZwAN/56Sfx+H9/sMxAH25uB779baCnB/jbv4Xq5ys0aA5MHQveS3+n7tcHhrm2cep4iyCcukiC7xwq1TUFtKrV9nRSl2d1ow9dLX4MxTKgFsVQNIOj4SSGopO3YxmsawkUNQmNZXTEs+a08TsWA+KZ4lUnmibjjmvXQpnGjFYkgr+9di20kt4FiiLh9qvXwu9SwBgQcMto8KkIuGVQBvhdCt53dWfRdUILZ0+wSrp9AzH8y+P78YlH38CnHz+ATzz6Bv7l8f3YN8D3+bHQzLoSHQA2bdqE73//+3jqqacKg/iPfexjuPDCC+d7/wQCwSLApcrgWbzlWsBB53wy1yYzgsVFvVfD6kYfesMpmIyBOspFGAEUQrC60Tvv1UgCgWB+uWZdK5r9GsLJ6auOmv0arlnXehr36uQR43GBQLCQxDIGBqMZ5EwKyihSOatQvajKgEQYBqOZokrJWieRNZEz6YxREjmTLtgYvzS+i0d38Wq+6BmnLuTWAFSf/LB1U4xyGpNOXTtno0anbi7P8/cP7uba5u8f3I1v/8XFAACFs3FnqS5n8pnoTl3Q4wKi1f9Wgp6pyY4EZ2a7U5fJ6rj02B7cueNHuPzYnjJtX+sqfPuad+KZcy7H9r96S+H3PpcCoHr1tq2zaQ0oOBar/rfSGpja5o1BPiPVqVvf6sfz3dXzzde3Tq32mEjz/Q2X6uayyiDfRHhnXwSP7hmESe3rSkkiUCSCrhZ/WRPhWMaouurEpKzs8/WOa9cBAL71XC9iGbOQbR7yKHjvVZ2F+0vJRzl+89keDMaySOsUikywqtGH913dWRb16ONsIlyqWwoRYLM20ZPJqeUvl1xyCR544AE88MADuP3223HJJZfga1/72rzuoEAgqH3qvRr6Y9W/9JeK2cgYX9obr05Qm6xu9OGyriboFkUkpSOds0BhL+HyuWTU+zRc3tVcVDUgEAhqD0WRcPeNG/Gxh/dWXOLq1WTcfePGRVWJL8bjAoFgoYlnDKR1C7pFQQAosgRCCBgDdJOCwYJFGeKLyESPpnWkjZnNtbRhIpqubCbWYkTB64NRbt05K+oAACEX3/dhqU6VZYCjCluVp4y1zla+fHOnrneEb3WDU7eXs8rVqYtk+IzWUp1XUwBUP+9tnU1Hgw97h6rnw3c0OK47ZpNjwhjw5JP41v0fwfn9+8skR5Z34b6r34n/XXMhshbgzRUbuA1+N4DqjUwbHA1qPS4XgOrH0NbZzMXcPh6pns1dqsuZfM9Tqjs0nODa7tBwAm/aMLXCsSecxIlIGqZFQSQJqkxAAZgWxYlIGj3hZJF5fHCI73kODiXwtq3Fv7t6fQtGYzm82DuOlG7Cpym4rLMRV69vmfGx8lGP23vGEE7k0Bxw4fK1TRXHx92jfH+DTp0zAswwKY6Np2FSBkUiqPeqiyYCbNYm+gUXXFCUw5SHMYZnnnlmXnZKIBAsLhr9HvBUKzRyLgOrdZo4G2Tw6gS1Sb5qYGAig/FkDopMQCkgSYBpMTT6XWVVAwKBoDZxNlM9FskUBu2rGjx4/7XrFl0zVTEeFwgEC03ApcBiFKZF4XUpBT+PEEBVJKRzJmSJIOCa0+L3BSGRM1EtycSybF0p+wZiePDVE9g7EEdGt+DRZGxuD+LW81dUrazkNd8rfe5Xwqk7wGn6OXVpzuaJpbpVzT5MnIhX3W5V85QR7DSSZ8KpG+asRHfqcjPkRDtx6mTO412q62z04Ui4urHb6SjEWVbHF7tTpGPV948wiotefwG46O+BnTtxfsn9+1duwDeueRd+2b4VOmXA5Mt3lRQa8y4od+oa/SrAEZPf6IibaQrwRdQ4ddUqtivpGv1uxHI8jTHdRbfTnE1jnTrTpPjmsz0wLYb2kBspg8K0GBSZwKdKGEsZuO/ZXtywqa1gWA9P8DXcLdXlK70jKR1nLwvCo8nI6BbeGIpj6OkjVSu9FUXC1WfNbLYDdjPUain+ZFKXJx8BNhzPIa2bRRsndRNeTSlrllqLzPob7Xvf+96p2A+BQLCIecuWVvz2yBiXbikwFOMbuPHqBLXLpvYQ7rp+HR7a1Y/u0SRyBoWmSDhneQA3b2uv+eVmAoFgitlU2NQ6YjwuEAgWmkTOhEwkKDKDbtqrL6casNsRFzIhFQ3nWiWcyFVt7cgmdU72DcRw72P70TuWAnVEqZyIpHFwKIG7b9w47Zhx30CsaJzpUiV0tfhxy7aOsm1agy7IBNPmJAOATGxdniDnJIZTN8KZOV6qu2HzMuzmMNFvcPQg2Xm0egxHXnfzNrshoslZRezUqRKf0erUeRWGcY5tvErxY8c5DXunrjXonkE5hVN30Zo67O6vXGEvUQtvObQdd+z4CTaE+8ru3915Lr5x9bvw9LINMCjKcko0tdjMzhh8K6yduuE4X4W4UzeXJqHO830mnLpzVwTQO159/85dUdz7qo5zZb1Tt71nDIOxLBSZYDCeg2mxQsxKTCbwajIGYhls7xkrGNhDnH+DTl2+0juS0tHV4i98FvvdCrpcfnSPJuet0nvj8uBkE1L7vHE+XP5UUiSCjcuDhd/nm6Umc6Yd+yUREGIvkjAoQzI71Uy1lpm1id7R0YG2tjbuWVCBQLD04eydwq2rdd4Y5Kvo4NUJaptN7SFsbAvW3PJcgUAwe3grbGodMR4XCAQLTdCjwqvJMDIUWdNpsNkOiluR4NVkBD18laW1AWfgsUNHKcN9z/Xg4HACikzg1ZSCuZTWTRwcTuBbz/XiS7dtLRs7zjYfeH1rAJoizWhoaoqE9a1Txt95q+q4XpFTN9eCoSMjfNWzTt0Qp9Hq1A3GcjMop3DqJrJ8761Tx+mFl+lynIazUzc0UT0qpVS3bXUD8PyxovsVy8Tb9j+Lv33pJ1gbGSjb/rUNF+E/rngHnmtabxug0+wqZcUvaoTznHDqxpN8ZqhT18y5ktup62wKzKCcwqkbjfPtW6lO5rz+c+rCiRyyugXdpCj9pNQtBjNjQlOkosm5Pg6Dv1TXN55C92gSbSFP2fiQEIK2kAdHRhPzUul9ZVczOho8ODaeLryW/MxA/qlXNHhxZVdzYZtoWkdSt3PaNZmAMoBadja8KhPkTIakPn1cVq0waxP9+uuvxwsvvIDGRr4GFQKBYOkzkuD7kOfV1TqpHN+XLq9OUPtIEqnpZWUCgeDMQozHBQLBQhPyqJAklBjoU2RNinrJ1i0eyLS32DT39I4lsfPYBCRiR9yY1G4+KhE7yiaWMfDKsQh6x5Loapky8Zz5wKbFMBDNwqIMskQQdCsV84ElQuB3KdBNvWyf8nvkdymQHAZavdcFVQJm8nVVydblSef4TOBS3f7B6lXopTrOlJAiXW6ac64Up46zJ2uRLpblc9FLdT7OU96p6wnzZUw7df2OjG/NNHDrvqfw/pcexIrYSPmGN90EfOIT+PNHRhDXWdUOmaXv7VyapSqyjGldegeKIyM/xzlx4dQRwvfmOnXTtw8uplTXEnRzxZi0OFYMNPjVGRsWU9jnaoMj1ibNeSCcukTWRM6g8IRkMMowHM8ia1hwqzKWBd3waDJG4vPTGFlRJHzwTevxiUf2IZkziz5zKGPwuxR84E3rilZ7pnQLYPZnX1q3ipuvEvu4yZJk62qYWZvovB2hBQLBmcMOjm7YBd3vneKdOQ34XQqi2eozpP5FlAEpEAgEgsWDGI8LBIKFZnnAjbHkzBXBY8kclgf4YipqgdagC4oEWNQ2yUo/aW2TpzgW4vBIEsmsCY8qI5LWkTMoKLNNof+fvf+Oj6u68//x1y3TZzTqXbYsyXLBDRswptgkhECAhL5A2GQ3S4AQSvjuJyQhS36QhN2QD8kGsiGBEFI+m0JooSb0DqbYxtiyLVvFsizZkkZternl/P64U+40zVHXjM/z8QBLuq+rOTOacu7rvM/rbTLwMIsCfCEZBwaTTfRYPvCIX4IkyxB4HoQAikow7AvBIKbnA/vDStyc84ZkzZ4kBOA48AAcZhGVRWb4dcaaLyTDbBAhh+WMJh4HwGwQ4dMZa4IA0HimQooDzvF08Wh63YifrqqcVpcNowAEKe6TLsJZqyaeKDtHr9NhoIyJ0+tG/XTVt3pd/1gAZimEKz95Edd98ASqfcnX5ArH483Vm9Fz/S34t69dAADwPfY81e2k9lSdSh7/8iob3ukez3nO8qpENryJ8rEzJT12dIVrel0wQhlPk6JrqrBSRT41VVjj36sk9x4XguR1jalk0DvMIkwGHp1DXnS5fJpRrWqV3lajgOYKO2wmEQ7zzHgUsX5CD7zRib7xUDznvaHYguvOaE7rN8Rz2vND0c1hYwsS8QgYLjkaZiEypUdvYGAA4XDmN7Ha2tppDYjBYOQfLsrmLrS6hc7aOif63C4qHYPBYDAYswGbjzMYjPnkb5/054xqlBRNd+XGxXMzqGmyvLoIJVYjxgISVEKSqpI5TqsEL7EasLy6SHcWgaISjAUlKIoKQuKpBpAUFUFBhYFPr111ByUcGQ/CH5ERllUoqhzzwyHwHEwKwZFxkpQP7DCLKLUZUWYzYsATwqg/Em+UXWozorrIDBLVxSiyGMBz2U08As200sfuVDqMODye29StdCRHb1Ta6Zw/vc5FGfmh1xk5gOaq0qgz48psAvo8uV30MltibHYjDz9FHqndmGz8TuU+mSjbs8R1Xi/W/vnXuOHZ/0V5IDkXXeYFvHL8mfjlKZejzVaFz9mr8G/RYzyXswg9rtOjFYdNrojs4g2LqEz0izcsin89FXM7LNFVVut1JZQ7ZFJ1O3vHqc7b2TuOlTXFAIC9fZQ7NPo8+MwKrV9Aud2MkWDuiJ9yXePTxjIbeA745PA4FJL4GyoqgTso45PD4zhtaQUadQ1tp8tk+g01l9mhpDz5Up+KikrQXLawd39PyUS/9NJL034WayKyb9++aQ+KwWDkF7RN2fKxeVsmvJRbjGh1DAaDwWBMFjYfZzAY88neo5oxlC3aIPbzmC4faCq3Y1NzOV5rH4KkKCDg4pXeHAgMgoBTmsvRVJ4weVoq7VBJorlqzHuMVVcqsgoh2ixUjycowROWEZYUkKjhFTO7ZYVAURUoRNPFaCyzoaXSjt19bqxvKIYvokCSVRhEHnajgE6XH2vqi5NMMrtRzBq5EyMkq7AbE9bQylonDo/nLhhaWZtcMHTETVdNrdeZRBFA7ipzTadBG5ip19EmWOh1U8m/1ph8e8xhmjJ5AKGRceAHPwDuvRcXjo0lHZMEEf/YcDZ+ueky7LeUa4tABPDpmvsaRECmeAANKU6hjbI0Wq9bVkWXVa7XjQXodhzodVPJoG8stwMdudvGNpYnv27bj9L1PNPrth+m27Wv1zmtRgC5TXSnroGpqhJ0DPnimydSF0sUAnQOeePV6TMFbb+hI54g9J8WmeOyCI54glhWq1+oXFhMyUR/9NFHUVpaOtNjYTAYeYqBMlOMVrfQOdYq7xkMBoOx8GDzcQaDMZ84zVqF5kQVznpdPsDzHK7d3IQhbwhdQz7IKokbTgaeQ1OlHddsbkoyoDjC5azsVYmm02M1CYhIWi6wAK0CPVbBzhPN8JIkBVZTwpTkeQ6XrK9H/1gQnS4/apwWOK1GBCMKOl1+lNqMuHh9XdL4Do/7ISkTm4ySouLwuB9LqzUzc1GpdUJ9jFSdTFPinKJrrbKgazh3HnhrlYXqd2e9TYpYllSdlzKXOlUnUNaN6XVGYWJTszTgxtUfPYV//fh5IJxsroYNRjxz0vl4YOMl6DJEFzZ0d3dMF4VTZTeiZyz3YkdVSoPPkRzRTZl0/9hzhOqcf+w5guPqiwEAZkqzXq+rKaF7buh1l62vx++2HppAndDpKaKMQtHrPJSNMvU6vTk+EXrd250uuDwT/52GPGG83enCp5ZXUf3+mcTlDQMkeaExRvzZT5DUYHUhMmkTneM41NbWskZGDAYjjjdEVw9Aq1voTKWxCoPBYDAYMwWbjzMYjPnm3OOq8Ys3uqh0+cSqOiduP28lntjeh939bgQkBVaDgNV1TlyyoR6rUuIa9w954xEFqVX5se8VlWD/kDduUgNA91DCOFYAQE0/n0R1JzYm3utX1Tlx85lL8fi2w9h2aAz+iAKbUcAJi0tw6QkNaeNrH/DmbKpJiKb79HLtb+WiNExTdYtLregYyl09u1hnvveNBSdQJtDrbEYRQTl3ablNV10vUTYj1esoT0nT8ZSFY3qdOYt3XOkdwbUfPomrdr4Ai5z8eAdNFjxx8gV46IQLcUjMHoExrtvNYBTpTOpU3QhlZrte9/dPjlKd8/dPjuKbZ68EAGxoLMEzuwZynrOhsST+9UrKqmW9TgJQajVgNJDdnyi1GtJ2PXx+bR3uf6M7Z2PRz69N5IFbUsv6s6DXNVdY8DLFpsLmisTCwN4jHkg5FrIklWDvEc+8mOiEAOA4GATE+z/EEHgOHAeoKn0T4PmCNRZlzCo8aPoxazpG/uKX6N4XaHULnRBlTAutjsFgMBiMycDm4wwGY74Z8NPtuBzwh7Bylscy06yqc2J5lYMq59flDYGAwCRqFempxhDPaZXXqTtUOS76n67pYOxfLkWTSpfLhw8OjqB3NAhFJRB4Doqq4vjFJWkmulkU4hXuMTJ9b9aZpr0UleGZdGevqsYr7cM5zzt7VWJhpZ8iez1V11xhwfCh3LEaeoMxRHlZptcVmQUEfbnN+qIUB3wqBWYjvuTHoc49hK998Dj+addLMCkpYyguBm66CV80rMfH/tw7PfSV/4EIXa5Nqo6yd2eSbshD9x6h11XaTRMoE+h1tcUWCDl6wAqcpovhMIs4rs6JriEvjrjTF41qnSY0VzrSmnAuLrEiV79ZntN0MepLLcDBsewn6HVRyh101fV6nT9M97el1c00LVV2GAQOkkJgFjkQ3VYMDgQhmcAo8GipKrBM9FdffRUlJSW5hQwG6Az0yegYCxPai/lCuej3pLYrn6aOwWAwGIzJwObjDAZjvtlHmXW+76gnXuGcL7T1u/HEjj50DvkQllSYDDzeOODCJevTK9ErHGbwHAdCAJPIQyWIR8DwHBCRVfAchwqHOeU8E7gsifIxk5sDhwpHsqn49M5+3PnMHvhCsmayA5AUgs4hP+58Zg8ArdlfjMZya7yZpP7WYrcRayzaWJ4w/YIy3TVbqs5D6VTrdSJH5wTodWOUjq5eR1vapNddsLYav363L+c5F6xNfn4P5YjUyKQLRMvZG0f78fX3H8NFe16HQU0e9bjNiSe3XIp/+8t/A0VF6P3hiwByX2+GdaXy45SPXaqO9iper5uKF/RKe+4s/pjuc2u053m3KwCDwEOV1az9GQwCj25XAMurtddvrL9AMKLglKZy7D7ihi8sw24SsbrWiZ7RAJZWOtKacD69iy6i5uldR3D5SVrDVJuRLtJKr6t20i0MVDsTJrpK6bXQ6maaEqsRi0qt6BkJaIa5yMXfm8KythjYUGpBCWWUzXwx6QJgj8cDnk8/ze1245vf/OaMDIrBYOQXuXL2Jqtb6NB648xDZzAYDMZswObjDAZjvvFT5kXT6hYKbf1u/PzVDuw6PA6R51FkESHyPHYdHsfPX+1AW787Sb+82oFiiwEqAQIRBSFJQURWEZIUBCJa5nmxxYDl1clNFuuLrRAEbsJMeVHgUF+cMLdlWcW9rxyAJyiD5wBR4CEIPESBB89pBTz3vdIBWWeallhNsEbzo1NvK/a91SCgxJow642ULlGajtac0+nKbHSVx3rdOGUTTlpdNvyUp6fqaBNM9brV7iO499l78Opvrsc/7X4lyUAfcZTi3vOux6du/D1+c9oVQJEWS2Lk6R5vvY6isD6jzkSXApOks5rozGO97shY7jigdJ1mwGaLlRe4WPPXxOMQ6y9QajOiZzSA1qoinNpSgdaqIvSMBjL2FwCA/vEgVQ+E/vFE/JDZSJnzrtMtr3ag1GbMatjyAEptxqT3lank/s8ljWU2nNJSjtpiM+wmAbJCEJJUyAqB3SSittiMU1sq0hYuFhqTNtG//OUvY/v27Uk/e+WVV3DeeedhdJSu6yyDwSgsaKO/CyUinO2wYDAYDMZ8wubjDAZjvim20hlktLqFgKoSPLGjD31jAXhDMvYd9eCTw27sO+qBNySjbyyAJ3f0Q9W5aE3ldqysKQIhJGGuRX03lWg7cVfWONFUnhxR4IvIMGWIh9FjFHn4dLEa73S50D8eAscRqIQgJCkIRo17lRBwHEHfeBDvdCWqeR1mERajgCz+IjgAFqOQFFvhDtJFrKTqFEoTXa8ziBM31Myks1K6/HodpQecpNtzOHdkTCadSJn3IIoAPv4YuOQS/Om+a3Dh3jchkMQV5GBxFf7vF27GGTf8DveuOg9jMGDjkkRDcULoHgda3USkRtbQ6BZTNqjV6+yUt6PXLa1wQCEE2TZQyESrvl5akbyQFesvsLreifFgBD3DfowHI1hTX4ybz1yatusEAKqdppxV+SSqi1FK+R6o1zWV27GpuRxWkwgjDxgEDmL0XyMPWE0iTmkuT3pfqS42Z/q16feBUjfTxBYullY60Fxhx/GLnDi+oRjHL3KiucKGpZWOjAsXC41Jx7l861vfwrXXXot7770Xa9aswQ9+8AO88cYbuPXWW3HFFVfMxhgZDMYCR6AMv6ftVL7Qmcp2NgaDwWAwZgo2H2cwGPONkGE3zHR0C4GeET929o5jxC9BUVVYjSJEnoOsEowGIhB4Hh/3jqFnxI+mioR55bQaYRQFhCUFhCSiUnhoDRozLSR4ghJUFTDwWmPK1IakIq812fPomkLuPeqFrKhplbCEIP4znqjYe9SLM5YlNw7kuMyF4pky1wOUuwdSdR1H3VmUyeh1oz46w16vK7EZ0TOWOzKlxJaIhah2iOj35i7Drnbom5HSlW2n6swGAX5p4sdwff8+/PsHjwJ3fZR2rK+8Dg9v/iIebT0dfsInPTm8+iahBrrXFq1uIkptRgz5czeBLdU95strHdh+OPdzYnltwtxurrDj5X25c/Wbda8/wpGcjWMjsgrCpb8AVtU5sbKmCD0jfnhDMhxmEY1ltqxGbrmVbueEXjdR81I9eh3Pc7h2cxOGvCF0u3yQFG3hjOc4GAQeTRU2XLO5KWmczeX2LAFRCbiobr6ILVzo47KMIo/jajUDPdPCxUJj0ib6ZZddBpvNhptvvhlWqxXLli3Ds88+i9ra2tkYH4PByANMAh/PcculKwQMHEDTI9WwsBdRp4yqEhwc9qNzVIJz2I+mCseCXzFmMBiMQoLNxxkMxnxTYqOzEmh1CwF3UMKR8SAUQlBkNoCLOswGgUOR2QBPSDvu1hmZPSN+HB4NwGoUQECgqgSEaOY0z3OwGgX0jgbSjHe7WYSsaoa4EM0Fjpvv0e8VlcCuqxCPZa5PhBrNZo/hDcnxWJls+kBEgTeUMIIjlHEPqbqdfXQmul4XpjSq9boRD13kh15X6jBRmeilugz66mIz9gzmbrKaWtlrynZdRAg29e7GjVsfwamHdqUd7qlcjF9v+SKebD4FIcJldEP1DT8FjnIhS6eziYCf4iFPfdmWWo0AKEx0XZ61gXIBTa8rt9NVSet1e496JswOB7Rs8b1HPWitKko7xvNc0mtzIt7tHqLWfXZ1DQAgQhlpm6pbVefE7eetxBPb+7C7342ApMBqELC6zolLNqT3Zyi2GWE1CvBHsi/gWI0Cim3zmzk+2YWLhcaUPtHOPfdc2Gw2fOMb38DZZ5/NJuwMxjGO2SgA4dwfDrR5YAudUpuAQV/uCo1SW2HcXz1t/W48sb0Pu/rGMerxobRjN9bUF2f8IGcwGAzG7MHm4wwGYz45PExnZNLqFgKeoISwosYzxCOyqqv+5GAUeAQkJak6PGa8cxxQ6zRDVhONRUUe8ITkNOMdgNYYFFzcPI9BkGgCGtPFqCuhMxj1urFAGMEcVdFBScFYIFHZTShjWVJ1U2moORqguy29zhWgq5TX6yISpZGp09UU0ZmNqbqIkjI+QrDl4A7c+N5fcWL/3vRfsG4dfnHqFfh50XGIqJnN8xhhXSXXknIzDo7mNraXlCeeD6VWA/ye3JXRqREk9eV2oCf3Ikm9rsrZN4GZq0evo7VR9bqPukaozvmoawQXrqunvIXMvEXZ+PStdhdwgfZ1bbFlYjGy6yZjODvMIqxGASFJybioIHCaia6PbpovJrNwsdCY9KP3ox/9KP718uXLceedd+Ljjz+G06mZJ7fddtvMjY7BYOQFEcqwc1rdQkcldB/vtLp8oa3fjbue34tulx8qIZAkBV45gMNjQewb8OD281YyI53BYDDmADYfZzCOPVSVLKjKvS5X7grdyegWAkUWA0wiD39Yhi8sIySrICoBx3Mwizw4AGajiCJLwmDUG+8cx8MgIClYO5PxDmiV6ApRJ2wsqpDkSvRdvXSV3rt63TjnOG1htWc4QFW93qNb7KDtO5iqC0fojGq9jvbqUK8LUTbH1OsGvXSxMXpd5zDdczdV5wtrDwxHVJzV8QFu3PpXrBnoTDtv3+KVWPGrnwDnnINtv92KSMdYzttyWBJV25UOC4Dc52g6Ddo+v6k6u4nOOtTrKu10ixBJuim46F5Ks55WNxGHKWKEUnWnLy2HxcAjOMFCjsXA4/Sl5RmPTcZwNog8rCYRHJD2/kWixxnTY9Im+t69iZUzg8GAE044Af39/ejv749vd2IwGMcWcq6Z2SR1C52QRDdzo9XlA6pK8Ou3utF+1AueIxB47UKCAyArCtqPevHQW9342eXr8mYr1mSIRBT8bWc/+seDqCu24KJ1dTAWyM4KBoORf7D5OINxbNHW707KkDUZeLRU2nHJ+vnbCWgS6eZBtLqFgNNiQLHFgC5fJPm6RSWIyCpEnkO10wynzkSPGe9hWYHZwENSoKteB8KyApMoJBnvgGa+KzncakVRk8z3vnG6qn69zh+mux7R66xGHr4c1esxnZ4Q5aUerS4bU+lPJVEWc+l1vSN0hmmqTpEVfL79Hdyw9VEsHz6Upt/ZtA6/2vxFvF69Egc+9zkAwJCHzuTX6yxGuoaVep3VyAMUawOpf9upVFMvr02PTslEko52DqPTNZTQjY1WNxG0V/d6XUuFAyc1luKdrpGkpsQAAA7gOQ4nNZahJaXx6WTxhxWUWI3gCBCSFdhMxnhGekRWYBYFFFuN8NOupDAyMmkT/X//939nYxwMBiOPMWkzRDpdASAKAmjqJjRdYdA97MO2Q6OIKCokWUF8IT0cgYEHDKKAjw6NonvYh5bK6U0AFhr3v96Bh98+CE9Ijl8U/fiFdlx9+hLc8Kml8z08BoNxDMLm4wzGsUNbvxs/f7UDo/4IapwWWJwCghEFu/vc6B8L4uYzl86Lkf7ZFdV4bEc/lS4bC626flGJFb6wnLXwR1YJfGEFi0qs8Z85LQbUOi3oHfHjiDuU1iHUZhBQm2K8A4AvLENNyNIgANSoLobdSFkNrNdNwXEmlOXAtLqFwBS8WciUWdZxnSQBf/4zXnz4P9A0mv7a+GDZSfjV6VfirfKlUAkg6h7zCGU2vF5nFunulF43lbgUAGgopTSqdbqVNU4UW0SMB7Pft2KLiJU1ifevqiITxGiz3WyIvKaLcf7qWtz/RnfOsZ2/en5i73iew63nLMfoE7vQGW0SGut/YBA4tFTYces5y6b93ucwiyi1GVFmM2LAE4InqL2XCTyHcrsZVUUmkKiOMXWm/OgdOnQIvb29OPHEE2E2m0EIYZUvDMYxCm3D7xloDL4gWFtfhDcottutradbfc8HDgx6MeqLIJRhRiOpgBRRoKoEBwa9BWWi3/96B+57pQOySiAKHAwcB4UA40EJ973SAQDMSGcwGPMGm48zGIWNqhI8saMPo/4IWirt8de33SyixWRH55APT+7ox8qaojk3nxdXWmEQgIkKlg2CpsvEQqyuPzjsx4h/4orgUX8YB4f9WFqtzXcby2xoKLWgY8gHQKtCTzQI5RBWCBaVWtFYZkv6PcNerXo5dnmkf+smukz0mC52WzTodZVOuhx1vc5iEEBTc2vJowIpX+4Y8DSdQaRbgbAiDDz4IHD33UBPD5pSjr993Km4/7Qr8WFJoxatE/21Jt26CmUSTrKOsrFokm4qqwkAtveMUp22vWcUZ0ejhJrK7djcWomX9w4iJCmp60swGwRsaa1Eky5HfXl1EUqsRowFJCgqSTtH4DmUWA1YXp24zhZEDjyAiR5CPqqbLjYB8FMUcqe2RltV58SPLlmDx7b1YtuhcQTCCqwmAScuLsGlJzTMyHteY5kNLZV27O5zY31DMXwRBZKswiDysBsFdLr8WFNfTP0+wsjMpE30sbEx3HLLLfjggw/AcRxeeuklNDQ04Lvf/S6cTie+853vzMY4GQzGAkaruM490SqUyuwzV9RQmehnrqiZg9HMDbJKMhroekKyWjCRPYAW4fLw2wchqQQCAEUhkBG9KAIgqQQPv3MQ15zaxKJdGAzGnMLm4wzGsUHPiB+dQz7UOLXqTk9QgqSoMAg8HGYRNU4LOoa86Bnxz3mTtmBERUOJDT0j/oyZ2zwHNJTYEMzgDsaq60d8YRRZjDBZeCgqsOvw+LxW17/T6UIkx3w3LKt4p9MVN9E1NHOORA10EnXRJ2rQWVFkhshzmobjouaq9rXAa19zHIeKIp0JTrtQotOV2OgsH73ObqKb19Lq8pVAjtwZsxTClZ+8iOs/fBLwJje3VDgeb6zZgl+ecgV2OOu050TKryO6y2eZMgZUrxsPhKjO0etESiM5VffhwdzXvqk6nudw7eYmDHlD6Bz0IqIQKNHKaJPAobnKgWs2NyUtADaV27GpuRwv7x2ErCa71QSAQeBxSnN5kvG+76hnQgMd0Az2fUc9aK2aXpGbySjAH8ztopsyXBtqTUJXzdruG57ncMn6evSPBdHp8qPGaYHTakQwoqDT5UepzYiL19cVZPTqXDLputAf/ehHEEURb7zxBszmxBv6ueeei7fffntGB8dgMPIDM+XWQlrdQsdhpbsftLp8YIxykkarywf+trMf7qAEEK1xkkK0xkuxr0EAd0DC33bm3sqcj0QiCh7bdhiPtHnx2LbDiMxAMx4GgzEzsPk4g3Fs4A3JCEsqQrKCHb1j2H5oDB/3jmP7oTHs6B1DSFYQllR4aTstziAOswinxQCHSYSQ4skIHOAwRY+nRAfEquv7xgLwBCXs7hvHtp4x7O4bhycooW8sgCd39KdnB88BgYiStCDA6f6LoRJNF6NnxI/DowEInFZ0IkeNQlkhWpQCB/SOBtAzkhxEvbzaEY144cABMIk8TAYBpmgDU4CD02LAcp1ZP+wJUt0PvW53P10zUr3OTNl8kFa3EDBQ+oZ6HZ/6xI5iDwfwtfcfxzsPXI07Xn0IlXoDXRTx0oazcOENv8bV5/wfbC+KGugZUHUP34CPbp6t172530V1jl4nUL6sUnU8R3diqm5VnRO3n7cS56+pxaJSK6qKTFhUasV5a+tw+3kr0xbLeJ7DmSsqsxbMcxzw6RWVSUbwhwfpquRpdRMRpLweyqaLNQld21CMpgr7jBvaq+qcuPnMpVhd78R4MIKeYT/GgxGsqS+et8XJQmPSDs+7776Lhx9+GNXVydlmjY2NOHLkyIwNjMFg5A+nLS3F/sHcHUpOW1o6B6OZfcb8crxJRza4qK5Q2NpBN+nY2jGKf9nUPMujmRv6xgLI1u8p9mOFaLpC4/7XO/Cbtw/CHZRACPBE+x78+MUD+CrLgWcwFgRsPs5gHBs4zCIkRcWuPjcUVYXVKELkOcgqwag/AndQRq3TPC8Zt4tKrAjLChSVoKHEjJCMeJWpWQSGfRIispqUHw5opvPO3nEMeMLwh6Ukg9EblmAzGfBx71jW6npVJTg47EfnqATnsB9NFY4ZM6JKbIl8DQ4piRYkMf/T69xBCYdGA/CF5bRrA0K0TPPe0YBWmKFDq7gtw2vtLkiKAklR45XoPAcYRSGt4nZX3zjV/dDr3jswTHXOeweG8X/O0r72UjYjpdUtBJaWm7DXlbtR6NLyRNb28ior3j3oiX9fFPLhK9uewVe2P4PikC/5RKMR+MpXgO98Bzf/eg9CNPEs+t61FPJUnYsyo0avC1I0jM2kW1Rmx47D3pznLSrLvCOGILZLg4v+m/keqyrBk9v7EJZV7fWXkucSllU8ub0fn19TG3/dTzGhZkrM5W1NFa3ivWhB9ZsoJCb9aRsIBJIqXmKMj4/DaDTOyKAYDEZ+YeTptvLR6hY6ZXZjzh49JKorFAIRukkyrS4fMFJW19Dq8oX7X+/Az17uSIrmIQQYC0j42cssB57BWAiw+TiDkb9MpplmzKj2hyRUFpnARbONDQKHIrOIIU8YEZsxzaieC3rHAjCJAmxmA3wRzeAXeA6KSuCLyLCbDTCKPHrHAklmuDso4dCIH56QBDWa/R3LECcAPMEIDo2QNNMZiOaob+/Drr5xjHp8KO3YjTX1xbhkw8zkqDvMhvg44rEsKXBRXeL+ROANSRkLL2Lne0IS3MHkrHUt6qIZB11+dLp80fxnDhzRji0ps6ZFXXS56Ao39Do/ZeVski4fnMJJIlNWYOt1y6uL8e5BD0oDblz90VP48o7n4Igk7wYIG4zYe/4VOP4XPwJqtSxwq6kdIYrID+s043CyFftMpBvwTJz5n023flEJntp5NOd56xeVJH3f1u/GXc/tRfewH2r0BeENS/hH2yD2D/hw+/nJ1eidLi8+OjQGDoDNKADgdP1eCEKSim2HRtHp8sajWVbVOgEczjk2TTc9SqwGBDy5Fy9KrIaMP5+rZsqxinfGzDNpE/2EE07AU089hVtuuSX+M1VV8Zvf/AYbN26cybExGIw84dX2IWrdt889bpZHM/vwPF2tAK0uH2gqt+OtztzV6PpqmXyntoSuEROtLh+IRBT88vWurNn2skrwy9e7WA48gzHPsPk4g5GfTLaZZsyotptEuIMSjKIQN3kjsgK7ScxoVM8F3pAMg8BjTb1TM8WDcrwSvcxmxKIyG9wBKS1qZjwQgScsQVET5jmQbFx7whLGA8kmXlu/G3c9vxfdQz74IjIkScVgwIPDowHsG/BkjIaYLALPw2zgEZSyz+HNBh4Cnyig8IRkSDncTEkh8GSJ3LGZxeiOAwKVEPAcB4PAw5Zhd4Gs0F1b6HWtVTa0U+wYbq1KNBukDdLJp05Ih0ZzV6Gn6g7u6cTtr/4BV+18ARY5+fyAyYInNn4BD55wISqa6/C3qIEOAKU2I0aDuaN3Sm3TW/SeSvU65VMoTecJ0hVK6XWqSvDrt7rQPuCFKHBJO2kCERntA1489FY3fnb5uriR/G7nCMKyAqPAg4/1CoiivTY4hGQF73aOxE30c1ZU4Ttoyzm2c1ZUUd2HiagttqLfkzsiqbY4fWFzITZTZkyeSZvot956K/71X/8VbW1tkCQJ99xzDzo7O+F2u/GXv/xlNsbIYDAWOH0jdFURtLqFzl/fz73SHdOdv7phlkczN5y7pha/f7+XSlcoHKSs9qHV5QNP7OjLWbHkjyh4Ykcfrjx58RyNisFgpMLm4wxG/hFrpjnqj8BhFmE2i5AJwe4+d9ZmmjGjurHchn1HPfAEw3Gj1WoU0FJpAyGYt0x0k4GHWRSwflEJvCE5qempP6wgZFDSoma8YRmqkjBg0yJQAKhKclSIZsZ1Y8ehMUR0hrUUURGIRDAeHEsz46ZCa5UdJnFiE90k8mitSixYuLx0/YBSdbFseFkh+PSySvgiCiRZhUHkYTcK6HT58eSOfqysKYrfp2KLAWOh3BXOxZZEFazTSmfU6nURma56nVY30+SK1dTrYoQpzeOwCuDQIeDHP8YDv/4NjEpy1bHXYsdfT7kYD607H4Ni1Cj1JBvsIuVzkFY3kwg8kKN3blynp9SWubI6Fb2ue9iHbYfGwHNAkVmErAIRWQXPaztpxgMSPjo0iu5hH1oqtez/oCRr0UmEICQp0T5U0Ya7XLRnLonqotz7agfV2O59tQN3XriaSpuN+jIbPurNbaLXl9mSvk+8/4chcDwAgoikYnff/DZTZkyeSZvora2tePHFF/HHP/4RNpsNgUAAZ511Fq666ipUVlbOxhgZDMYCh2K32qR0C539A77cokno8oFSuxFWo5DUSCkVm1FAaQFF2FiMdDEttLp84N0uugZF73a5mInOYMwjbD7OYOQX+maakqKiZ8QPWSUQeU6LB4jIaYYpkMhEPzQaQFhRwfGc1vCP4xBWVHQM+bC41DovmeiNZTa0VNqxu8+Nlko7inTGLSEER91BrKkvRmOKmTTiC+esoFWjuhjdwz68sm8wyUDXE1EIXtk3mGTGTYVFxVaqqvJFuirTYS9dhXOqrmfEj84hH2qcFgAcfCEZIUmB2SDAbhRR47SgY8iblA2/pMKKg2O5TfslFbrx+eniO/Q6L2XVMa1uppmtSvnG0X58/f3HgJ++Acgy9Fc14zYn/nTapfjtms9hhE/ehZq6NzNb3nfa+Ch1M0m5zYB+b+44kvIU03zUT5e/rtcdGPTBF5JhNQgY9oURlkk8msUkcrAYRPhCMg4MJl63sffAsEzAcwDHceB4DoRoPRckAogCh5U1RfHb+bhvjGpstLqJWF3vwN8+ptPFiL3/dw75MOIPIyipUFUCnudgMfAos0kZ3/8ZC5Mpfdo6HA5cf/31Mz0WBoPByAumsnWuEDCJ/IQmeqFlgx9X64QocFAUkrTdGEhsPxYEDsfNQL7eQuGgi27hh1bHYDBmDzYfZzDyh1gzzUFPGP6InOTu+cIybEYxYzPNRSVWjAcjcAciEAUu3tySI9rcxB2IwG0xzEsmOs9zuGR9PfrHgnEz2GIUEIwoOOoOotRmxMXr69JMoRILXcGFXtfW555wDgpoO+Xa+tzTMtHfOziMSI68i4ii4r2DwzhjmRYNEaJs1Jiq84ZkhCUVLiWEtwe8CESUuLFmNQpYXuWAmrLLgBfoovT0ut5huh2Tep0/QncVQ6tbCExUvd7q6sENWx/D+e1vQ0gxtkccpfh/p1+O3686C24u83O3ymFK+t4v0dn3tLpsTKUif1GZFf3e3JXUi8qS31OKbXTWYbKOQFEJRgPheDyMdg1FICvaa8IgCNDfi1OWlMNiEOBRZKgEEHSDV6PvfxaDgFOWlMd/LlEG3tPqJuLIKN3OE72uZ8SP97qG0TcWgEq0a2ZB4KEQAn9YQTASwLtdLvSMLGI55nnAlEz0gwcP4vHHH0dvby8IIWhoaMAll1yClpaWmR4fg8HIAwoxN28iDIRuskyrywc8AQne0MQVCN6QBE+ArkohHzituQINJRYcGg6Ag9Y7Kd74KvpkXlRixWnNFfM4ypnlWG2mymDkI2w+zmDkD+6ghEOjAXiDEgSegyjw2ryCaPnVnqCE3tFAWjPNnlE/fCEZBEA4gwHEc9r8q2fUPy3zeKqsqnPi5jOXxqssBz1azu+a+mJcvL4uYzzB4TE6U1eve2Vf7oaGMd2F6+vpBp+BvUc9UBSS1ZzkACgKwd6jnriJHp4g+kVPqs5hFuEORXDQ5U8z1nwhGTt6x7Ckwpa0y8CfYy6eSWegnLLpdbTeeB556BA5INWzXjXQiRu3/hXnHNiafsLixfjD5stxT+2p8KXVmicTSelAazWKAHLvUNB0GiaeLnLGNM0peHOVA1t7cpvozVXJ7ycjXrodDXrd0goHFJUgomjvVTyXMPRVgujPCZZWJG6rzx1EjdOMoKTt1lH0oegcYOA51DjN6HMH44Zzc7kVeyl2gDeXT3+x8YOe3D3CUnXj/ggOjwagqARWo6hFVkVjuSwGAYGIjMOjQYz7I0DhXFYWLJN+CT7xxBM477zzsH37djidThQXF+Pjjz/GF77wBTz22GOzMUYGg8FYUBCe7q2TVpcP7Bvw5MzPk1VNVyiIIo9bPtMKp9UQn/jFsvh4DnBaDfjGZ5ZCLCBDuY6yko1Wx2AwZgc2H2cw8gt3MAJfWAbHaVEEqkogydqWflHgwHFaBrg7mGxUHRj0wROSkaXfN1SiNbY8MDh/O8RW1TnxvfNW4vtfOA7/cd4KfP8Lx+H281ZkzfcN0wQyp+iOUESYTEaXDbMoQEX2wh8CbaepWUyYqiaRrjo8VVfvtMDlCUNWCcwGHiKvPQ9EnoPZwENWCVzeMOqdlvg5ngCdkanXRShNflpd3qL7o67v34ffPnYnnvvDLWkGen95HfD73wMdHfjr8efmNNABIJLizjtMdM8JvW5pJd3cWq+jrYjV6yyUz9dU3XiQbgFHryMcAcfpC5A4cBwHQItniRcpcYnHzxuS4bQYsX5RCZxmA0SBiy48cnBaDNrPLcakHRo5EpgmrZuIMR9dfJNe1zHkQ0TWmi6HZQXBiIygpP0blhUIPIeIrMVzMRY+k65E/+lPf4rvfve7+Od//uekn//xj3/Ef//3f+Oyyy6bscExGAzGQoSjNMdpdflAN+WHOq0uX7hgXR0A4ME3u9A3Foznl9aXWHDdlub48ULhMyuq8NzuQSodg8GYP9h8nMHIL3xhBYQQEFXbvq/3cjhoi/Qcr+n0yLIaN5MzJeVqFeoqZEpjerbgeY46hsBMaeLpdQGJLnubVpeN+lJLblGKLhShMxdTdVsPjiCiEhgFHrJCIPJI7E6I/jyiEGw9OIIty7ReF6nPj2zodUfH6Sr/aXX5ikQITj68Gze99whOPbQr7fjBqkY8tPmLeKL5ZOz/l88DAOxmumu5VJ3TTPcc1+ucFjprTq/jeVDlh+ovSduO0hU8peo8lCa6Xtc55AfPcTAIHBRCoBISX8zgeUDgOPAch84hP1qrtIzzWMPiYosRjWVWDHjC8V4B1UUmBCIqxoOR5B0aOaKeJqubiAhlJIxex3EAQCAp6Qt0sZ0vAh/TMRY6kzbRRVHEpk2b0n6+adMmPPjggzMyKAaDwVjIWCirC2h1+YA7THdRQqvLJy5YV4fzVtXg3a5huLxhVDhMOLW5vKAq0GOsqi+G1cgjMMH+XJuRx6r64rkbFIPBSIPNxxmM/CIWY5ApApkAkAlgjOr09Iz4k3TZ0OsWOhubSyG8MnFVqMhpuhgCpbtEq8vGIcrHUa/zy5QGXorO5Q0DBCi1GeEPywjKKohKwPEcLCIPq0mENyRruiiySrdYoteN0RWvU+vyDkKAF17A43/6Fk7o35d2+EDdUjyw+So8u3gDJMIlvdBGKWMqU3W+CJ3Rqtcd9dD9AfS6YquAQV/u51+xVb9zgu76JVUnUBaHJeu06muzKMITkiCTRDSmwAEOkwhJJdA/6KkNi2uLEwtW2RoWRygXz2h1EyFSOqh6XWWRlpk/0Q4XvY6xsKE20dvb2wEA//Iv/4If/OAH+Pa3vw0++gJRFAX33HMPrr766rgOAJYvXz7Dw2UwGIz5Z9RLt1WUVpcPVDroPtRpdfmGKPLxKqBCpqncjs+sqMILbQOIZLi6NQocPrOiGk3lrOkNgzEfsPk4g5GfNJfbtSpMZK8oVwlBc8rnq5SjyeVkdTSoKkHPiB/ekAyHWURjmS2tOeh0KLOZUF9iwaHRYFZNXYkFZbbEnJI2aWS6iSTtR72T1h04SrcLM1VX4TBBFDgEIwoCEQWyGm1kr2o7FnhOi7Co0M2tpxKpcazCERWf7XgfOOH/B+zYgRNSju9ZvBK/3PzPeKFujbagk8HhDFJW/qfqJMrFDr0uTPka1usWl9kx6Mudb764LPG+Umw2UN1Oqm48QBdjote1VjlgEnmM+SNQkXjv46AtormDEkpsRrTq8ten0rBYJXSLFrS6iXCajTjizv36cpoTTWirnWbkumlCNB1j4UNtol944YXR/CJtBejiiy9O03zwwQfx4xzHYd++9JU+BoNReEylM3g+M5cdwBcKK2qKcv6duaiOkb/wPIdrNzdjyBNGx6Ab3ogCRQYEESgyCmipcuKazU0zejHNYDDoYfNxBiM/OeoJguM4cNC27icZQNHAc47jcNQTxDLdXKquhC5ehFaXi7Z+Nx7fdhjbDo3BH1FgMwo4YXEJLj2hIWvG+WRpLLOhscyGw2PBjFnvPAc0ltmTKk2LrZTGH6UuGz7Kxp163SiluZiqO7W5HDajiP5xbTFB1D0nJJVgLCihrtiCU5vLqX4/Q4NXFZzX/g5u2Poolg8fSjv+cfM63H/6F/Fa1Qqo4NIubuw6h0yg3FScqhMp58l6nVGgq/TW68KUuyD0uppiOqM2VWei7FCr1zWW2mAQeaReEpPo/1RoDXUbS21JxyfbsHiAsoqfVjcRJy0pxr7B3DtWTlpSHP+6kzLutHPIh+XV6e+zsqweEzui8wVqE/3VV18FALz88sv44IMPcNttt0GIvlvIsoy7774bmzZtwplnnjk7I2UwGAsWA0/XnZ22O/xCx2oywC/nnmRbTdObyC8kVtQUwWkxTFjZ4rQamIleAKyqc+L01nLsO+qGJEer42RAFoHTW8tn7CKawWBMHjYfZzDyk2FvBAaBBw8VciwbOArHAwaOgyDwGPYmmzzrFhVD5DFhc3eR13SZmExVeVu/G7c9uQsdg15IKtEa/3FA55AX23vH8KOL18zIHEBVCXrHAuDAwcATEHDxiAcOBCrhcHgsAFUl8bEuKbXgw57xnL97CWWmeTZqS2wAXJQ6jamYnzEIErsT4nnRnL5AKdl9pL2UKpBLrkkhKjIu3PsGvr71UTSNHUk7/vFxG/HfJ1+BdyqWTlgVXKzLHK+0m9BLkXNTaU/eiTuVxqISZV8DvW7MT7foo9fZTMYJlAlSdUsq7ABy901aouuN0DPqRyCsZC3E4qDllPeM+tFS6Ug6tqrOiZU1RVTvXyHKx45WNxFbllfjD+/3U+liuLyR+HtctseBRHWpPL2zHw+82YV+XW+uuhILvlaAvbnyBWoTva5O+wM99NBD+OMf/4hFixYlHf/Wt76Fq666Cl/+8pdndoQMBmPBYzdyGA3lrrq2GwujenVJuRkuiknLkvLC2ZLVVG7H5tZyvNB2FJl6shgFYMvSChbzUQA8vbMfv3qjK6kpFQEwHlLwqze6UF9iZZM2BmOeYPNxBiM/qXCYYBR5iEYBUrRZqArN7DQZeBgEHrJKkqI7ACAsEVQVmXHUHYJKks1RFVrVdlWRGeEMYett/W48vv0wdvd7EIwosBgFrK4rwqUb0qvKVZXgnhf2Y88RT3J1OAEUlWDPEQ/ueWE/fveVE6e9G+3drmGMBSRYjTz8ESVpQYHntN4ro4EI3u0ajkfpOSx0xh+tLhunLy3D797todLFqHSY0OemMFpT/rbvdg0jEFFgNfAISGrC2I3+azVoj4/+cTAbBXil3NXHZmPh9GXKhVGWcNnul3H9+4+j3jOULrjoIuB738P1f3dhwCvl3D4t6fZO2ymfT6k6s4HOZkvS0b6udDoDZTWyXrexsZRqd/HGxtKkn+kbeU6EXtc+4EUgIkPkAXAc1FhkEaK7cQhBICyjfcCbZqJPhkq7EYMZDOhMuumyuaUStcVmHBnPHttaV2zG5pZEDGiZ3Rh/wIWUzQ/aAhoAEtXpeHpnP+58Zg98ITnutEsc0Dnow53P7AEAdk02D0x6kdJgMOC5555L+/mzzz4LkTZln8FgFBQNZbbcoknoFjpFFrrcb1pdPsDzHJZVO6CSzBM8lXBorbYXbMxHJKLgrx/24r9f2o+/ftiLyAx0d1+IyLKKH7/QnmSg6/GFFfzfF9ohz0AlB4PBmDpsPs5g5BenNpej1mlGKKKg1GZEZZEZlXYTKovMKLUaEYooqHOmR3c4zCKaKuxorbTDKGgV2yo0E8YocmittKOpwp5mcLX1u3HXc3vx991H0THoRe9oAB2DXvx991Hc9dxetPUn5yh3urzY2j0cN9A53X+AZvJs7R5Gp4suM3wiXN4wQhEF/rACQjRPMPYfIYA/rCAUUZIaau474qH63bS6bJzWVAFrDgPaZhRwWlNF/HvauW+qLvY4BLIEuQckNe1xkDPl32SAVpfPmKUQvrLtabz14NX4z5d+mWSgKxyPV9Z+Chdd/wDw5JPA8cfDSvnRaNPpFpXR7WxI1SkKXQNLva7cRmfw6nXLqumKl/Q6vywjV/9djtN0eiKZuiJnQK9zeUJQCCAKPMwGAWaDmPSvKPBQiKZLpa3fjR8+vxd3PLMH//n8PtzxzB788Pn09y5A2ylLA61uIkSRx7fPWZ51UcFhFvGtc5Ynxa0UmUUIsfdvor3PJf0LQBA4FOl+pyyruPeVA3AHJSiEQFFJ0r/uoIT7Xulg12TzwKRn2d/73vfwzW9+E3/729+wZMkSAMDBgwcxOjqKn/zkJzM+QAaDsfA5obEEn/Tnzvo6obFkDkYz+zgpqxJodfmALKt4fHsfVKJleXLRC53YvyoheGJ7P647vbngMtruf70Dv3nrINwhKX6f7/5HO766eQlu+NTS+R7ejPJmx9CElRUA0D8ewpsdQzhzRfWEOgaDMXuw+TiDkV+IIo/rtjTjruf2wuUNo8higFHkEZFVjAYlWIwCrt3SlDaHaiyzoaXSjmBEwYVra9AzFkQgrMBqEtBYYkH3SBBLKx1J+eGqSvDrt7qwq9+NsKTETRoOgD8M+MJuPPRWN352+bq4sfvWAVe8oXhsnhcnen5EIXjrgAutVdOL7iu1GxBREpX4+mgNDtoiQURRUWpPxCKOU2aVZ9PRxtr0uYNoKLWgc9CHDP3VIXBAfakFfe4gmqKxFSGKyvBMujKbEeEcBlhYVlGmM005yg5TtLq8xOPB195/HF/96G8oDyQbqjIv4MX1Z+H+jZdhr70q6ZiXJns0RVdmo9tVnKrbN5A7MztVt7q2CDv7ci9Sra5NvP7WLirF39tyxw+tXZSoKveEZKoml55QsoleSmny63UVRWYInLabxSAAWqJR4rmpqAQCx6GiKPnxa+t34+evdmDUH9Eaizq1xqK7+9zoHwvi5jOXJu2mUSgXjWh1uYhVfz/wRid6RxMxK4tKLfjaGS1p1eFOixFWgwC3IidVoeu/thqEJO/gnS4X+saC8WtPnuOSrrsJAQ6PBfBOlwtnLEt+rjNml0mb6GeeeSZee+01PPfcc+jt7QUAbNmyBeeffz5KS0tznM1gMAqRMT/dajutbqHTVEFXlUCrywfe6XKhfzwEgedgMQhQCYGsKBAFATzHISgp6BsPFtwH+f2vd+CnLx1I2tpMCDAWlPDTlw4AQEEZ6e8cyD0Rj+mYic5gzB9sPs5g5B8xY+XBN7twxB2CJyRDFDgsLrPh2i1NGbfl8zyHS9bXo38siO6RoGYolWmGUvdIEKU2Iy5eX5dkCHcP+/BWxzCCEQUEWvPCWHyDrBIEIwre7HChe9gXj1DYP5Aw71KrVGPGTapuOsR+nwok2b1qyvEYRZRREpl0bf1uPLG9D7v73QhICqwGAavrnLhkQ31arI03JEPkeFhNInwhOS12wWoSIXI8vDqDcTRA16wwVScRJVeyCEhUFyMQojPsaXX5RFHIB3z/+8B99+E7Y2NJxyKiAc9tOAe/POkSdFozVxu7g3SPiV4XzrJLIJVU3WiAbtFHr+Mps/X1urpiysbDOt2wN0z1vBv2JjfCbaywUt2WXre82qH11ApICEsKDKIQfz+RZG0nSrFVxPLqRJSLqhI8saMPo/4IWirt8WbqdrOIFpMdnUM+PLmjHytriuLvex2uANXYaHU0XLCuDuetqqFq+OkwizCKfFqUSwwOWoNVfXX7niMeyNGVPEH3/s5xgMBxkBUCWdGitgrp2jsfmNJ+z5KSEnzpS1+a6bEwGIw8JSTRmeO0uoXO+90j1LobPj3Lg5kj9h71QFFUmKITA57j4v8BgIHnEJZV7D1aOB/kkYiCX7zWiWxFCyoBfvFaJ645tQnGAsme7Bik6x5Pq2MwGLMHm48zGPnHZIyXGKvqnLj5zKV4YkcfOod8GPSoMBl4rKkvxsXr69KM4PYjHniCEggAg6AzX6LfSwqBJyih/YgnbqIXWQyggVY3EcPeCHgO8UrvTNMsnkNSk9UiC6WJbskQa/P8XnS7/JAUFSoh4DkOvaMB7Bvw4PbzViY9fjaTgCFvCMGIAi7W4JMkFhaCEQVD3hBsuoaQUzW2P+gey6JM5oPuMXx2Za32DQ+A5uYKaFNomX8cV297Cl/a8TwQCSYdCxlMeOqk8/GrEy/CIVPxhL9HoUy90Oto65ZTdTLljel1tJfJel1rlQNGgYvvIsmEUeDQWpUwqad63b794DjVedsPjmNTNO6oqdyOTc1leK3dBVlVISlq/AXF8RxMPI9TmsuTemr1jPjROeRDjdMCohJ0j/i03gFGAUvKbKhxWtAx5EXPiD++G8RAGalEq6NFFPl4v4Kcty3ysJlEAAQRmcR34hhFLTgrNd8+GNYW8bINmeO0a9FguDD8lXxiSib6e++9h0cffRS9vb0ghKChoQGXXXYZTj/99JkeH4PByAP6csQ/TFa30NlGOYmg1eUDFoMIZFk9B6I/56K6AuHRHb0I5qhACUoqHt3Ri38+eckcjWp2iVBO+ml1DAZj9mDzcQYjP5mM8RJjVZ0TK2uKqCJJ2ge8WhPSLOYLHzVf2ge8OD/6s1NbyvDbd3rimb366L7Y3I+L6qZLriiJTLr+MbprCL1Oi7XpRlu/B5KigCCRRchBRlu/khZrQ1TAG5YhqySa086B4xMRCrJK4AvLILppkEQ5J0rVjXqDWZTJ6HVWI49QMPftWY3576JXekdw3YdP4os7X4BFTq6KDpgseOzkC/Hg+i/giJGuIaWoW7jJpYvhMFE200zRmQWAZm3FrKvB8YTodjTodRzhois82e8Yx3GaLspLu45Q3c5Lu47g659qjX8fpDTf9Tqe53Dt5mYMecLoHtYWsmKLUgaBR1O5Dddsbkp6H/OGZIQlFT0BH/YPeJMWCHYeHseyKgcsRjFpN8j6xcV4cW+GprIprF9cTHUfZhp/WEFJNKolIquwm/j47qBItEit2GKEX9eTqrWmKB53RQiJV+QD2vck2mi6tWZ68VqMyTPpd9cHHngAX/va1yAIAs466yx89rOfhcFgwI033oj7779/NsbIYDAWOMMZmoFMR7fQodwNSK3LB05tKYNJFCApBGrK1Y9KCCSFwCwKM3JxtVB4bV/uydhkdPlAahXEdHUMBmN2YPNxBuPYg+c5NFXYsbahGE0V2Zu5W4xCvII6zVuLNrPjoroYm1sqUVNs1sviWeoxaovN2NyS2fxXVYJulw+fHB5Ht8sHdYLs4eaKRESDwKX/B2jGX3NFojo1TGlU63Xdwz5s7RpGMCJDUggURdWa8ikqJIUgGJHxXtcwuocTu+v2D3khKyTeVFWNNvKL9wQCICkE+4cSsTa0ZQWpOpcnnFGXil5X7qDL6KbVLQRSbep69yB++NIv8faDV+PqbU8nG+jFxcCdd2LLDb/HHSdfRW2gAwBPOXXV61pr6Bp3pupqKWNW9DraqbVet3/IO+FrDdBywPXP145husWbVB1toVSqblWdE7efvxLnrq5GU4UdtcUWNFXYcd7qGtx+/sq0nTQOs4hBbxBt/Z60CvuIQtB2xINBbzAp+qSlgu55QKubaRxmEaV2I1oqHCi1GaES7b6oROuN0FzhQKndmHSfVtYUxXfWKKr2HksIgaqS+G6JIouIlcxEn3MmXTL48MMP4+6778a5556b9PPnn38ed9xxB2644YYZGxyDwcgP/JR5cbQ6xsKjpcKBExeX4N2uEYQkFUaRA1EJZE5FRNYmOCcsLp23yclskKsKfbK6fGBppQ3vdo1S6RgMxvzB5uMMBiMbK2uLIApaZq6iEvC6TPSY4SYKHFbqGhSKIo9vn7Mctz/VBl8oveLUbhbxrXOWZ4ydmUzmOAD4IzKMIg8lojU91ef9KiqJ5wP7I4lxNJZa0TGUO8+4sTSRx9w+4MVYQNIq6zmkVXKqBBgLSGgf8MZjbVzeEAhIUtyMHi3TmMDlnX5h0AEXXTSeXhegbLBKq1tINI724+vvP4aL9rwOg5pciTRmK8ZfTr0EX3/8Z4DDAdd3np/076epQk/VpRYOZSNVV+6wAEO5zepyR8JE91M2PtXrXN4wCAhMIgdCtNdPrImwwGuNKGWVwKXLN5dVyqiZFN3JTaVak9AJHhKB03SpTGYnTa3DjP6x4IS7n/vHgqjVLRQFZZVqbMEcjXxni1iD6N19bhzfUAxfWIGkqDAIPOwmAV0uP9bUFyc1iG4qt2NzawVe3juEiKy9V8YeFJ4DjKKALa2VSVE4jLlh0iZ6aWkpmpqa0n7e3NyMsrLCqUBkMBj0OMwC3BR71hzmwsiNPhbheQ63nrMco0/sQqfLp1WkqwAPAoPAoaXCjlvPWZa1KiofWV3nwNbu3Iby6rrCWThoraarZqDVMRiM2YHNxxkMRjZOb6lAfYkFh0Y001mNZbJES6k5AA0lVpzeUpF0Xqyx6a9e78Ch0SBklUDkOSwuteD6Ty3N2Pg0kTnui+9W1DLH/RkzxwEtV91hEsFzHMKSAiUaTcBxmrlvEgXYjEJS/vppSyvwcvtwzvt+2tLEfRr0hJJMRf3XXDSiUFEJBnU7ZSsc5mh0S+bfr0QjFCp0Bp7NwFOZczZD8gLEqI8uHkOv84XptrnS6hYCS109+NrWx3B++9sQSPLjOFxUht+f9k/4f8edhQBvxNcdU59zW408IqHJReG835n7OiCmi+fWA6gpNlGdl6TLUVGeSVfhMILnNAPdJPIg4OLRHxwIwrIKnuNQ4TDGzym1GXDUk3uRpdSW3P+g2GaEQeChTPBcNwg8im3GjMdiO2ly8eQnfcj1cpJVTffFjY3a7+Y4mA0CwrKS8VyRB0yiEO/lNdfoG0R3ufyocVpQbDUiGFHQ5fJnbBCtj8LpcvkQlhM9HUwij+YKe1oUDmNuoDbRX331VQDA5z//eXzrW9/CTTfdBD6610VRFNx///244IIL4joAOPPMM2d4uAwGYyGypq4IfeO5J7Zr6grDeLPwAEUcISwFlnixqs6JH12yBo9t68W2njGMefwoKbLhxMZSXHpCQ8Zqo3ymoZSu2ppWlw8sqy6KNx3LhlHgsIyZ6AzGvMDm4wwGIxeiyOOWz7Tijqe1qnK9yaKqBHaziG98ZmnGqvLmCjs2LimDQkbgD8uwmURsXFKWFK2i/136zHGt3l0jAIK2fk9a5jgAOC0G1BZbcMQdgtnAJyKdo5HlIs+jxmmGU2eiy5QGo17HgcSrWfWnEyTy1klUF7//ZbacXqZKNF0Mq4nuwsBqSn68aW1uvU4UeNAEyGi6Bc727cB//if+8be/pR0aKKnCb0+/En9afgb8nGZZmaZ5lxaXWjF+JHf1/2Ldbob+cbrok1TdqJ9ygUSvozVDdbrl1UUothgwHpAgKQQirx0mhEBStcWpYqsBy3Xz9lXVVhz1uHPezKpqa9L3sqrmrGKn0eTig4OUDXcPjsVN9NYqO5xWA3whDkRVEY7uwhF4DiaRA8fxsJtFtFbNX9X2ZBtEx865/fyVeHz7Yezu9yAYUWAxClgzwU4fxuxDbaKnbgu96aab0jT79++Pf81xHPbt2zeNoTEYjHxBpPzQp9UtdJoqrdgzkHtLaVOlNacm31hV58TyquPwTucQtu3pxAnHteC0lsqMF2L5zrifrsEPrS4fKLEa0VRuQ5fLn/GCVeQ5LCm3ocSaucqEwWDMLmw+zmAwaIhVjT/wRif6xkOQFQJR4NBQbMF1ZzRnryp/bi+6h/3xeIpIQMI/9gxi/6AvLb84ljkelhQIPAdR4OPNSGVFRVhS4pnjsbgUQIs2WLeoGOHuEcgKgSckQyEEAsehyCpC5Dkcv6gkKdrATxlPotdNJT/8/Z7cRUEx3YroYxGU6Az+VJ0IgOZe6Q0bQugMSlrdfLC+bx9u2voI8OPtacf6yuvw0OYr8deW0xHikncwT/cuHb+4BJ9QmOjHLy6Jf00ZA56m4yiLyvW6qTQxbSq3Y1NzOV5rH4KspFZhE5gMAk5pLk+K/LBaLABym+iaLsHWrpF4w+LkRajofYk2LN7aNYLl1VM3d40CnV+g1zWV23HC4hK8dWAYolGEXeAgRSIwGI2QFAJZIThxcem8R59MJtZmOucwZhdqE729vR0A8Oc//xnt7e244447IAjaG5ssy/jBD36AlStX4oorrpidkTIYjAVLlyu3oTwZ3ULnUysqsWegh0pXaLT1u7XV8D43Rt0+bB3swhsHhnHphsKrRD9KWX1Cq8sHGstsOKWlHBFFxag/An9YgRrNU7WZBJTajDi1pSLpwpbBYMwdbD7OYDBouWBdHc5bVYN3u4bh8oZR4TDh1ObyjIUPWlV5F9oHvBAFDlajZmbLKkEgIqN9wJtWVd4+4IU7KIHjtIbjejPNIPJQJQXuYHLmOJAcbTDiC6OuxAqB15rneYIRlNlNadEG3SN+qvus19lNdDGSet0Luweoznlh9wC+cmpz9DsedHXlyY+7zQiMU9Rh6NMxPBRxJJPRzRmEYFPvbtz03iM4pXdX2uGDVY14cPMX8UTTyZCQuTBH70vbDYCPYgXCrkskOb21Er/fejjnOae3Jq7fugbocutTdVLWRO9k9LrKIrpFH71Oi/xowpA3hK4hH2SVxOftBp5DU2V65EeAMns9VReU1GjWOiApib9HzEgXo6/h6faKOntVFR7b3k+li6GPPuke9mvGuQpA0eJPllcvnOgT2lib6Z7DmD0mnYn+s5/9DI899lh8wg4Aoiji3/7t33DZZZexSTuDcQwyRNlch1a30GmgNBBpdflCvELJ5UNAUiDJClwhLw6PBtB+1Juxw3o+E6KcBNLq8oHUC1tR4ODxeFFU5ICskIwXtgwGY+5h83EGg0GDKPLYsix3UUf3sA/bDo2B54Aik4igrCIkaXEIRSYR40EJHx0aTaoqd3nDUAiBUdAMdJUgnsfMc1pjw4iiJjU1jJEabeAPa9EGaxtKMkYbDHvpKtH1Ok+GBqmZ0OuGPHSFEXqdwNMZpqk6GgM9VUdZ9E6tm3UIwRnd23Hj1r/ihP4Mu6LWr8etyz6PJxdtgJLFPI+hj7O2GAX4pNwLFxZj4jNyy9JKVNiNcPmyP/AVdiO2LE28Xo646Z4Pqbq1DU68vj/3roa1DYnneXFKBnk2UnWr6py4/byV1M19afcOp+pW1jjA8VrkY+rTi0Az1gWBw8qa6fWK2txcCZPIISxnfxKbRA6bm5Pf15KiT/rcGHV7Ueq0Yk19MYs+YcwokzbRy8rK8Nvf/ha33XYbLNEtHsFgEA8//DBKS9M78TIYjMJnPEiX6kerW+i8sc9Frbv8hMbZHcwcEatQ2nl4HCHdXsGwosAXVuAJjWfMvcxnvBG6iy9aXb6gv7DtGPSC4zgYBB7H1RZlzexjMBhzC5uPMxiMmeTAoA++kAyDwKPPHYKsqLpmnzwcJhG+kIwDgwkTPdbUUFYIZEWGGgs15zjw0frU1KaGeiYTU0AocsBTdR0DHqpz9LrIBMadHr0uEqabB9LqJiIWH0+jm084ouKsjg9w49a/Ys1AZ9rxtsXHYdUDPwHOPhtP3fZ3qjp+orvjbj/dNaVex/McVtYW4a0DwxkfQw7Aylpn0vMvGKGM6knRrWsoyfm34qK6GL0jdDu2M+m0uE0H1a6T2mK6ivdU3SlLymESePiVzI89AWASeJyypJzq92ejdzwAnpt4dwfP8+gdDyTtcAES7yndLi+279qLDWtWoqnCUTDXpoyFwaRN9Lvvvhu33HILnnnmGVRVaVsoBgcHUVRUhJ/97GczPkAGg7HwoS3ELZSC3fajuXPkJqPLB7qHfXh9/1CSga4nJKt4bf9gWu5lPsNRdnCn1eUTbBLKYCxs2HycwWDMLASSosIbrcoWeE7LNwcgySpG5QjMBh56W3B5dRFsRgHuoHYOz5FoJjqB5jETOC1iUlPDVGhjCuxGuvpZvS5AWY6t13nCdOXheh1FT9FJ6SaCtsB8vgrReVXBee3v4Iatj2L58KG04ztajscvTr0Cr1evxMFzzgEAqJQrA6puCkrbjUiv6xnxwxOUYTMJ8IXTDVqbSYAnKKFnxB9/TnKUY0u9FDhlSTkcZnHC3RAOs5hkOHspd05k0rX1u/HYtl5sOzSOQFiB1STghMWDuOyERWnFL02VdLEgqbre8QCCOar/g5KS0dyeDPuOenLfTkTBvqOejLfDR/s3uUsNWFLOssMZM8+kTfR169bhlVdewVtvvYXe3l4AQENDA04//XQYjazRGIPBKHxcnvRtqdPR5QN7+93whiae0HhDCvb2uwvGRG8opmsMS6vLN9gklMFYuLD5OIPBmEmay+zxmAYxaqADiGYga9nokkLQXJYw1hpLbSixGeEJJkw9lWjnxGYMpTYTGkunH284nCESJpfOYqAz3vW6AOXUXa9TKc1xWl1eIknAn/6EV37zH2gaO5J2+P3lG/GLUy7HOxWtaccEDlAojGrKfpNZcQclHBrxIxjJfD0TjCg4NOqHO5iIBKKtk0nV9bmDqHGaEZS0fO5UDAKHGqcZfe5g3LC3Gykz/FN0bf1u3PbELnS6fNHXMAEHDt0uH3YcGsePLlmTZKTbzXQWYKru455RqDn+TirRdNMy0fvpitD29bvx+bXpDZIZjNlm0iY6oGUufvrTn57psTAYDEZekHd5hDPA+92j1LovHF8/y6OZG05tLcNv3+vJuRXz1NayuRoSg8FgxGHzcQaDMVMc8QTBcdq8JtaYMFaEq6pEM8Y5TbesVqss7x0LoNhihMcmwx2IaJno0d/Hc4DTaoTTYkDvWGDaTfEGKAtT9LpWyopbWl02chmLk9XlE0ZZAh54ALj7buDQITSlHH9z1em4f9M/4cPSJVl/h9XAIRLO/eBYDdNz0d3BCDwhKathrxDAE5TgDibq100ij5CSe/XDlBKb4g3JcFqMWF7FY/+gN75AxQEwiBxaKx2wGsWkqvIiykx0vU5VCe55oR17B7xQkp5gBLJKsHfAi3te2I/ffeXEeDFM1yBls9QU3a/f7qY679dvd+OykxZTaTMxSLlgRqtjMGaaSZnoiqLgD3/4A5599ln09PQAABobG/H5z38eX/7ylyGKU/LkGQxGnsMDVEmFtI1MFjqEspKEVpcPeEN0GydpdfnA5pZK1BZb0D+evalQbbEFm1tyN+xiMBiMmYLNxxkMxkwz4otA5HkInFZxrpKoI84h2htFyzcf0TVl9EYz1IutBoz4Ez8n0AzjYqsBBoGnjqmYCI4TAORuLqrpNHyUPWv0OqMA0LRwSioGXugZK7OAWQrhiztfxLUfPgH4kgttFI7Ha2s/hf/ZeBl2FecurCk2CxinyIsvNtNVamfDHZSQJZUyjqwiqRLdxNNdzKXqHGYRkqJiyBdBkdkAFSS+OMWDg8sXQa2Th0NX7S1R5vHrdZ0uLz7sGU0x0BMoKsGHPSPodHnRWqUtfllMdHOEVN2QN0R1Hq0uGxylYUCrYzBmGupZtiRJ+OpXv4qOjg6cddZZ6OzsxEUXXYTe3l7cc889eOONN/Dwww/DYKBbQWMwGIUDrVdcKJ7ysVhxMtWtf/mMKPL44sYG/PSlAxn/ljwHfHFjQ8amPQwGgzEbsPk4g8GYDSocJpgMPAw8h7CsIiwnGouaRB4mkYekElQ4TPFzHGYRg54gDo1mLjbocvkhK2qSUZiKLKtUzRAbyszoc+c25xrKEs0QDw7TNWrU62hrnfW63Nb+5HQLGXs4gH/++O/46kd/Q3kgJXZDFPH82s/gFxsvxT5HNf0v5Snn0bS6LOwf8E5aN5a9jiaJVN2iEivCsgJPMAIDz0FStV4BHMfBwANSREa5zYhFJYlISIuBbpFAr3u7YxjBHE3HgpKKtzuG4yb6smq6qJVUnd1kgDuUu/rbbpre/KPcbsotmoSOwZhpqN2O3//+93C5XHj++edRUlKCZ555Btdccw0aGhqwe/du3HDDDfj973+Pa665ZjbHy2AwGPPOMVhwgiVldBMuWl0+oKoEH3Znz/9TCfBh9xiu30JYXjiDwZgT2HycwWDMBqc2l6PWaUbvSAAVDiNklYNKCHiOg8gTuLwRLC6z4dTmRCPEWocZfTlcxr6xIGod5ozHnt7Zj1++dgC9YyHICoEocFhUYsbXP92KC9YlZx2vr3dia/d4zvuxvt6ZUzMRU83ALnSKQj58Zdsz+Mr2Z1AcSokDMZmAf/s34Nvfxg2/apv073aH6MqsaHXZCIbpljH0uqkukPSOBaAQAiXaS8Ao8hB5HgohCEgqeA6QiZoUdbSUMkdcr+sb9VOdo9eplFulU3UXrK3BL9/qyXneBWtrqH5/NspsdOY4rY7BmGmol/OeffZZ3HTTTSgpKUk7tnr1avz7v/87nn322RkdHIPBYCxEaDcTTm/T4cKCEIq9rZPQ5QOdLi/e7hyeUPN2pwudLrrKFgaDwZgubD7OYDBmA1Hkcd2WZliMAlzeCBRVhUHgoKgqXN4ILEYB125pSqoSf2zn4ZwNIRWi6VJ5emc/vvPELuwfCiAoqZBUgqCkYv9QAN95Yhee3tmfpO9305UE63WNpXSN3/U6kbIoglaX75T5x/GtN3+Pd3/1Ffx/7/45yUAPGUz4y6mXAN3dwC9/CSyeWg42R1l2RKvLxlxmbbuDEsYDEixGAVajAEIASdF2d9iMAixGAeMBOSk6xhehs+z1uoFxuugUve79Dso+Vym6T62k211Aq8sGbQPZ6TaaZTCmCrWJfujQIbS2pndTjrFhwwb09vbOyKAYDAZjIVNso3vrpNXlA+90TGwmT1aXD7y+b5CqC/3r+wbnZkAMBuOYh83HGQzGbHHBujrcfv5KLCqzIiApGPZFEJAULC6z4fbzV6ZVh7++z0X1e1N1sqziruf2Zo2hCEracVkXYL3vCF0zRL0uINGZknodoTRqaXX5SpV3GN979SG888DV+Pr7j8MRSSxOBEwW/H7LlTjjht/jttO+AtTWxo+ZKC999DojpRuq102loMkXojSpKXUT4QlKCMsqbEYRFQ4TKhwmlNuj/zpMsBnFaNxL4ra6XXRV5Xpd3xhdZJFet3/AQ3VOqq7MZsLiUsuE5ywutUy7QrzSaYHIZ49W4qAtYlU6Jx4LgzFbUMe5WK1WmEzZXxCEEFgs7InMYDAKnyKzAUP+3FUKRebCyaTdP0R38UKrywde2kNnjr+0ZxDXnbF0lkfDYDAYbD7OYDBmlwvW1eG8VTVUOeV+imaQmXSvHxiEyzdxI3qXL4LXDwzirJVaNIRE6VnrdR8dHKM656ODY7hui/Y1ZS9Sal3e0dMD/PjHeOuh38CkJN9Jj8WBP2+6CL9Zex6GjbaMp4sCEKZICxF17vZUqv9LLMAwxeaEEt3H4ZCHrsKcVjcRRRYDTAKPiKLCTAQYBD7u6BNCEFFUmAQeRZbEtaK+Kn0i9LqpnOOhfPKm6hrLbPj0iiq8uGcAQ+Mh6I+KACqLzThzRTUayzI/N2hZXu1AidWIMX8ESrQvA9H9K3BAidWA5ZTZ7gzGTENtoi9ZsgT79u1Dfb3WYbmurg6imDj9ww8/RHNz88yPkMFgMBYYo0G6yQetLh8Iy3QxLbS6fMAfobsvtDoGg8GYLmw+zmAwZhtR5LFlWWVOndlAZ36m6l5soytSeLEtYaIXmelqj/W6Q8N0lb16nSBwyLkNMaYrIJaM9uPrWx8DfvI6oCjQL9WO2Yrx/067DL9b9VmMixMv0kqUU2K9TqZcINHrwjIHmu5Tmk5jgKIx7WR0E+G0GFBbbMERdwiekASrUYTAc1BUgkBEhsjzqHGa4dSZ6BU2uuIrvc5soCv91+sEyujNVB3Pc7hkfT36x4IYdpggEwJJJjCIHESOQ7nDjIvX1027T1RTuR2bmsvwWrsLkqJoL8eoi85zgEEQcEpzOZrK7dO6HQZjqlBnDVx66aX485//HP/+ueeeQ02N9qHm9/vx4IMP4rLLLpvUjT/44IO45JJLcPzxx2PTpk34+te/ju7u7iRNOBzG97//fWzcuBHHH388brrpJgwPJ8cFHDlyBNdeey3Wrl2LTZs24cc//jFkuXDMKwaDsbDwBOkmH7S6fMBAOSGi1eUDTeV0WZq0OgaDwZguMz0fZ3NxBoMxVepK6Ha9pOqGvXQmpV63mDLfXK8LUBZ26HVTMevzmWWuHvz8mf+LV35zPS5rewVQEo/FcFEZ7jn3epx+/cP42boLchroAGh87TSdxUj3WOp1fsqtCXqdL0LXUJNWNxGNZTasW1SMMpsBpVYjIrIKX0hGRFZRajOi1GbA8YtKkqq2VUprTq+rL6Gr+tbrRoN09y+TblWdEzefuRRrF5XAaTHCYTbAaTFi3aJS3HzmUqyqm15jX0Az66/d3IxVtUVwWoywm0TYTAbYTSKcFiNW1Rbhms1N0zbrGYypQl2J/oUvfAErV66Eqqrg+eQXuCzL+J//+R8sXTq57ewffvghrrrqKqxevRqKouC///u/cfXVV+P555+H1ap9AP7Xf/0X3nzzTdx7771wOBz44Q9/iBtvvBGPPPIIAEBRFFx33XUoLy/HI488gqGhIXz729+GwWDAv//7v09qPAwGg0EDRYHKpHT5gMNixHAg975Jh8U4B6OZG+pLzDOqYzAYjOky0/NxNhdnMOYeWVap4lIWOmvqS/DnD/updHqmMo8OU5qmep2aq+tpBp3VIADIvQCo6fKXVQOduOm9R3B2x/vpBxcvxl1rL8Sfln0KQZ7aLgIAGESApj+mQfdr64stODiSe2Glvjhh4tPa3HqdQGj+sppuuuirtkd8YdSVWCHwgKICnmAEZXZTWtV25yBdVrleZ6KsRE/STWGhQ8+qOidW1hShZ8QPb0iGwyyiscw2o6b2qjonbj9/JR7ffhi7+z0IRhRYjALW1DlxyYb6GTHrGYypQv2uKIoili9fnvGY0+mE0zn5J/LDDz+c9P3dd9+NTZs2Yc+ePTjxxBPh9XrxxBNP4Cc/+Qk2bdoEQJvIn3vuudi5cyfWrVuHd955B52dnfjd736H8vJyrFixAt/4xjfwk5/8BDfeeCOMxsIxdBiMhYqZA0IUH8jmAlkwpr0bBXJ3AQDVTjMOjuQ20audhWMov0iZif7inkF89/zVszyauUdVCQ4O+9E5KsE57EdThYNVfTAY88xMz8fZXJzBmFue3tmPB9/swhF3CLJCIAocap1mXLelOa1x50LnwjV1+I+/tWEir1rgNJ0eldBZoHpd57CX6hy9LqLQ3Y5eJyl0O2hodQuN9X37cNPWR/Cp7u1pxw6X16Php/8JXHklfvO9l6b0+61GAX6KTBerrqq8zEp37UCry0Z1iRGHxibO4o/pZoJY1fYTO/rQOeSDP6zCZOCxtqEEF6+vSzOC2/rdVL9Xr5vKNWl1sQW947kXLaqLs+884HkOTRWzG6cyF2Y9gzEVJre0OMt4vdqHXuwCoK2tDZIk4ZRTTolrmpubUVtbG5+479y5E62trSgvL49rTjvtNNx5553o7OzEypUrqW9fURZO9MJCGstcwe5z/lJXLKJrLPdksq5YLIj7bBEBH8Xc2SIWzt94TV0RtnbnbtC0pq6oYO7zqJ+uWc+oXyqY+xxjzxEP/vphL17eNwhvSILjg/dx1ooqXH7SIhxXWzTfw2PMILHnbqE9hxcqC/1xXihzcfa8ZKRSCM+JZz45gv/6ezsCEQVmAw9R5EAAHBoJ4K7n9kJVVXxhbe18D5OanlFfzqpylWi6pVWJJoAHXXRN6A+6fPG/9xBlTvWQOxQ/hza2XOASz6tBD93za9CjTOm5ONXn77RuixBs6t2Fm977K07p3ZWm665eggdOvxJPLtmI/VedN62xCZQGp8Bz8fOGfZTxPr7QtB6HCjudiV5hN8bPMQCguRowIPPfaEW1Hd89ZxkOjQbiRvDiUit43f2P4aXspeUNyvFzOcrnOKd7jt92TisueuCDnOfcdk7rgni/XVyaMPMJUUEzpEL4vGDMHDM9t1wwJrqqqviv//ovrF+/Hq2trQCA4eFhGAwGFBUlX7CXlZXB5XLFNfpJO4D49zENLbt3757q8GecnTt3zvcQ5hx2n/OXXgoDPaYrhPtsFehMdKtQOH9jayRAqRsrmPvMU1ZK8UQtmPsMAN1jEn741ig8kcSVcdAn4U8f9eHZT/rxvc2laCqha37EWNiohGDApyAgERx572NU2wXwtFdkjIJjIc7FF9LcnLEwyNfnhKyquO/VUYwHZKgECOiakvMcEJEV/PylvahVBiDy+RHt8nS7J2cyBAHw59c/xgXLE+8hYx66IoUxjxSfX4UidBkUoQhJzMlUSqNEVeLnhCmjLsJkanP8qc4Xp3RbH3+Movfew+N/egAn9O9LO76/rhW/PP1KPLt4Qzxne7r3KRSiuyYMhRLXhHKILsZEDnmmNb7JLN7EzrEZgHGKp6vNQPfYuQHs6st8jPKyA0RN3BYJ0j12JJh47FRC4DQB7nB2fbEJkId7sHPkEN2gFij5+nnBmB1m6vmwYEz073//++jo6EhqljTXrF69GoIwi/lmj71ALV23bt3sjWMuYfd5QgrlPkuU91lCYdxn40uvAeHclQxGs7Eg7i8AOOp8+N2u9zE+QZVEsUXE5zatQfMsb++bK85o34Gndw/l1i2vLJi/s6oS3PiTN5IMdD2eCMF/f+THW9/cwrZT5jl7jnjw5Mf96Bj0YsztRYnTgaVVNlx8fB3bbTCLKIqyYC/qFtJcPPY4zfrcnJE35Ptz4u0OF4YCI5CjRpnAA1rIAoGiahXbgwGCoKMBpy+tmMeR0nPPh+9R6Q54xKR5ku3vryJAsdvPZjPEzyv+x6sY8uU+p9ieOMf28qtAkOJ2TIlzpnQdN9Vrv1m6LY6o+GzH+1h/3QvgduxIO962+Dj84rQr8ULd2rRS5uneJ+EZuvMEPnGe7ZMPgaOjOc+xOZzTG9/fXwFVKrqQeL6u3/kBXuvIvRN3fWPJtK8F6l57HV0jEzjbMV2ZKTE+/0H8vWt/7vEtW4x165bEv//fKg/++eEP4cmw6FFkFvH/rj4pr+eC+f55wZhZUp8P052LLwgT/Qc/+AHeeOMN/PGPf0R1dXX85+Xl5ZAkCR6PJ6kCZmRkBBUVFXHNrl3J25KGh4cBIK6hRRCEBfMiWyjjmEvYfT42KIT7TGse8jxXEPcXAFoqi7C5tQIv7x1CSFKSKo84AGaDgC2tlWipLCoYc/W84+upTPTzjq8vmL/zvv4xHJ2oNAXAUXcI+496sWpRyYQ6xsKlrd+NX7zehVF/BA6zAKuBg1Hk0dbvwZHxEG4+cylr2nSMsVDn4gtpbs5YGOTrc2LQG4nPnww8pwsp5iDygKQShCQFg95I3ty/A0N0uxQPDAWS7tPqhiK81j6S87zVDUXx88yUD4lZSFxrDFOY7jHdVB7zuTqH9jxeVXB++zu4YetfsWy4N+34jpbj8T+nXInXq1dkzQGZ7n0az+0Bx3Wx8zjKnRccz8fPsYmAn8IPt4mJ21EoM/IVRY2fs6ahlMpEX9NQOu3X7ZJKJ7pGcl93LKl0xm9r87JKmF/qQEjOft/MIo/NyyqTxremoQR/vuZk/OX9Hvxj7yCCERUWI49zj6vGFRsXL5g5oKqSaWWi5+vnBWN2mKnnw7ya6IQQ/PCHP8TLL7+M//3f/0VDQ0PS8VWrVsFgMGDr1q04++yzAQDd3d04cuRIfPVt3bp1eOCBBzAyMoKysjIAwHvvvQe73Y6WlpY5vT8MBuPYoLHcjt6x3LPExvLCqMgGtAWBazc3Y8gTRteQF2GFQJJlGEQRJoFDc6UD12xuKhgDHQCqnaYZ1eUD97zcTq37w9WbZnk0jNlAVQme2NGHvrEAJEVF35iMUESG2e+FwywiEJHx5I5+rKwpnAUxRnbYXJzBmBtcnjBUokW3AAAh2uuP4zhw0H6uEk2XLygqpSmZotvSUkllom9pqYx/7fLSGeJ6nZey9yetbqEiKjIu2vM6rn//MTSNHUk7/v7yjfifTZfj3cpW6t9ZYwGOBul0emiThvW6QQ9dJrpeF6G8Ib1uPET3fNXrVlTTmcm0uok4aUkJXtmX20Q/aUmiiKWlwoGNS8rwTqcrY4NfgQM2LilDS4Uj7diqOid+eNEaXL15YTbubOt34/Hth7G734NgRIHFKGB1XREu3dCwYEx+xrHJvJro3//+9/Hcc8/hl7/8JWw2Wzw30eFwwGw2w+Fw4JJLLsHdd98Np9MJu92Ou+66C8cff3x84n7aaaehpaUF3/rWt3DrrbfC5XLh3nvvxVVXXQWjcWY6KzMYDIaeKzbW462O3JP/KzbWz8Fo5o5VdU7cfv5KPPrRIbzXNYpxr4JihwmnNpfhshMXFdyE5s/v0eUA/vm9Q1hzWeksj2Zu6HD5Z1THWHj0jPixs3cco74IZEJgNQrgCQdR5DEWkCByHD7uHUPPiB9NBRLNxMgOm4szGHNDucMIDppRrhKd26X7movq8oWGUgvcR3PPBxpKk53WkEyZm63TBSnzoml1hYBJjuCy3a/ga+8/jnpPBvP14ouB22/HFX9NN9ZzwRmMQDB3dCVnmP7zNRTJfTupOokyu55Wl43OYboc9c5hH87OckyWVbzbNQyXN4wKhwmnNpdDFNOr71sq6eZceh3Pc7j1nGUYfTKMjkEvZJWAEG2jgYHn0FLlwK3nLMtqjPM8tyDnem39btz13F50DnrhDstQVQKe53DI5UP7US9uP39lwV13MvKHeTXR//KXvwAAvvSlLyX9/Ec/+hEuvvhiAMB3v/td8DyPm2++GZFIBKeddhruuOOOuFYQBDzwwAO48847cfnll8NiseCiiy7CzTffPHd3hMFgHFOU2cwzqssnulw+bDs0jiFvGBGJIOIN46NDY1jfWFpwk5nth90zqssHiowijiB3FVyRcUGkwTGmgDso4Yg7CFlV4bQYIakqJIVAMABFZgPcwQiOuENwU+TIMvIfNhdnMOaGGqcFBoFDJFO5aBSDwKHGacl6fKFx1cbFuO2pvVQ6PTso5020umMNSySEL37yAq798ElU+ZKzxBWOx6trP4X/2XgZnn3gOu2HUzDR/WG6hQ5a3UQcHacz0Wl1M4mP8v5l0z29sx8PvtmFI+4QZIVAFDjUOs24bkszLlhXl6QtsZpQZBYz5pTHKDKLKLEm74BdVefEjy5eg8c+6sV73SPwhxXYTAJOacrPIidVJfj1W134qGc0qbpeUQiGAxLGekbx0Fvd+Nnl6xZM1Tzj2GJer4L378/dBMFkMuGOO+5ImqynUldXh4ceemgmh8ZgMBhZea/TRa3buKR8lkczdzy9sx93PbcXgbAMm0mAgeMgCBwODftx13PaRVTqhDCfoS1emWaRy4LiipMbcOczuSNdrji5IaeGsTDxBCWEZRUiz2HEH0ZEVqGoKnxSGEaRh0HgEZYVeJiJfkzA5uIMxtywcXFpthjqOByn6fKFIS9d9EyqLkyZxUGrO2bweHD9+4/h6o+eQnkgeYFB5gX8Y/1Z+J+TLsUBR3WWX0BPZIKM7Yl0AugiXfSpxBN4xknQ6mYUQjnLz6DTXzeZjALMIgcVyHrd5LQY0FxhR7fLB19YTjKQBQ6wm0Q0VdjhtBgyDoHjOJhEAbIKmEQBXK43nAVK97APf999NGM8DQAoBHh+9xHcdGYLWirTY2oYjNmGlZIxGAzGJHm/K3eDmbjurFkezBwhyyoefLMLvpAMg8jDG1agKASCoMAg8PCFZPz6zW6ct6om4xbFfGR9fTE6h3JvU15fXzz7g5kjvnhCI+56th3yBNcMIqfpGPlJkcUAHlpFOgdAFDjw0MybYERBAAocZhFFWS7SGAwGgzF5Pjg0Ci39PPsHLAcOHxwaxZZllVk1k2UqjfkiEQV/29mP/vEg6ootuGhdHYzG9GZsB4a8VGNI1dlMdBYEra7QcQa9wJ13Avfdh2+Pjycdi4gGPHPC53D/CRfhoG1yjZwngqP0jlN1Bg5Zzc9UXfxrEaBJ+DHong4WABSR7Zjuvo4wZTPSVF3suskTkqCqBEG/CgItskngATkkpV03NZbZsG5RMcKyAklWMOyXICsqRIFHuc0Agyjg+EUlaCyzJd1WLPqk2+WDpGq9FsYDHIY8R9E+kH/RJzt7RpFrDUdWNR0z0RnzAftkYjAYjEky7KervKHV5QPvdg2jdywIAiAsqyCEQCUAVAKVqOAAHBoL4N2u4Rm9+JtPtiwrx6M7+ql0hYLRKODs1dV4ftdAVs3Zq6szXkwXArS5lfmMwyxC4DkQAiiEQFKIdmGnqOA4gOc4CBwHh5lNERkMBmOmGPSEoBACgdNsdFVnNPKcZq4phFA3WaShrd+Nx7cdxrZDYwhEZFiNIk5YXIJLT8jemO/+1zvw8NsH4QnJUAkBz3H48QvtuPr0JbjhU0uTtANuunluqq7cQdeQnVZXqJT5x/HVj57Clz5+HogkW8YhgwlPnnQ+frXhQhy2lGT5DVMnQpktn6bjQVeKrptamQ08ghSV72ZD4iRCWfJOdNNVIwdEKAx+o87gtxjo5rupune7htEzHEBEJknLZgSAqgKcSnBw2J903cTzHC5ZX4/+sSBGfGHUl9oh8ICiAp5gBGV2Ey5eX5e0CBaLPmk74oGsqlpBfDQUneOAtiOevIs++cMHvdS6S09anFvIYMww7AqJwWAwJomg0m0vpdXlA4OeEMIRBSohyRUmCgGgXRQq6sxe/M03e454qHXnrZ3lwcwRsqxi7xFP1lo5DsC+I17Islpw5vLTO/vxwBtdODQaiFf+LC614mtnpOdWFgKKmn5hR4hWwcRgMBiMmUV7fwUMIg8Dz0cbABJwHAeR5yCpKmSFUKdH5KKt343bntyFziEfZJXEG/N1uXzY3juGH128Js1Iv//1Dtz3SgdkVctuNnAcFAKMByXc90oHACQZ6dVFZgC5c8s1XQKrgc6CoNUVGlXeYVz3wZO48pMXYZGTFyACJgv+evKFeGDdFzBonr0qXNrklFSdRHnpo9eZKM1dvY6yQDxZN/FGkGRdlOU1RTlP46I6PUfdQQQlJet5BEBQUnDUnbw4sqrOiZvPXIondvShc8gHf1iFycBjbUMJLl5fl/aa7R72YWvXCMKSAp4DBIGP3wFFURFWFLzXNYzuYV/Gqu2p7FSZbcYDdNn3tDoGY6Y5Nj+ZGAwGYxoEKHMCaXX5QKxqVc0yG1QIQDBzF38LgX433YIArS4feKfLhf7xEHhO+5vrn8GxyI++8SDe6XLhjGVV8zXMGefpnf247cndCOjyVyOKgn0DXtz25G4AhZP37w3J8IXlCS/sfGEZ3nkJH2UwGIzCpKXKDoPAQVIIRJ7AIHCImV0qIZAVAqPAoaXKPu3bUlWCe15sx76jXhBCNONe4KASLcN631Ev7nlxP373ryfGDbNIRMHDbx+EpBIt11rV5n3gtMgvSSV4+J2DuObUpvhutAq7kWo8qTpZpft8odUVCvXuQVz//mO4dPcrMCkp9720FLjlFpw22opR0/SfI7MFz9MZ3Pw06zB4yusNvY7WG9brVtQUUTUEXpFioru84Zx+PYnqUllV58TKmiIqc7t9wBtvBK9CK4aJVaLH5O6ghPYBb5qJ3tbvjpv1YUkz61sq7bhkff28xr/odxzMhI7BmGnYM4/BYDAmSWCiwOgp6PKBxhJrVgM9hko0XaFQX2zOLZqELh/Ye9QLWVGhpBjogPa9QgBZUbH3KF0Oaj4gy6rW+ClLA7NARMF/Pr9XuzApAEb8YQSlie9LUFIxUkBxVAwGgzHflFiNWFRqBc9zCEmqVh1OCGSVICSpEHgODaVWlFjpjOmJ6BryYVvPWDyORVIIwpIKSdG+VwnBtp5RdA354uf8bWe/ZsYRxLObeV6X4k4Ad0DC33YmYu5KHXTzn1TdJ710vYVodfnOktF+3PP8vXjjwWtw1c4Xkgz0MVsx7jv7q0BPD/C97y1oAx0A7EY6p1qvs5nperDodbR7fZN0tJdlOl2t3TyhgQ4AEYWg1p78HJ/CTSXB8xyaKuxY21CMpgp71upwlycEWdXeRxSFJBqcEu372DFXyk7htn43fv5qB3b3uSHyHJxmESLPYXef9vO2/tw7TGaLkxuLZ1THYMw0zERnMBiMSUJyucmT1OUDbx90zaguH/j8ujoIOa4FBE7TFQqmaKXaRKhE0xUKb+4fgss38ZbQIW8Eb+4fmqMRzS4fH6IzJWh1DAaDwchNY5kNp7SUo67YDLtJhKxo5rmsENjNImqLzTi1pSKtaeBUeKfTpUVJEK3KnQPAcZohrhJt12BQUvBOZ2LO1jcWiH/+87yWpwxoO9BiBp5KNF0Mo4FuLpCqOzDoy6JMhlaXr7S6enDfM/fgld9cj8vaXoFIEgvcrqJy/Pjcr+O06x/Gz9ZdCDjyo4GijbI6OFk3ect5KnEzRsoMBr3uofe6qc5J1UUoc21oddmosGt9AwgSxS6x/1QkHrGYDtB2qjyxow99YwG4AxHsPDyO93tGsfPwONyBCPrGAnhyRz/UebqObaygq4Kn1TEYMw2Lc2EwGIxJUuUwYSwYoNIVCm/vpzTR97vwzc+umOXRzA2tlUVYW1+MHYfHs2rW1hejtbIo6/G8g3bCXEALRH/fc5Rad+Zx1bM8mtnHQxnTQqtjMBiM2UaWVbzT6cK2niC8NhdOa6mclb4cs5kPrG8aOOwNwSAKiUpxWUG5w5zWNHCq4wtElERBavS8WHV5zBwnBEk7sEyiAIJElIU+no/jtP9UouliHBnNPRfOpPNLdHMIWl3esX07cNddeOmpp9IODZRU4aHTrsCflp2BkEBXoT0bUPbtRGrbzZEAnSms13nDdDv9aHXZsBl5eCg6ptqMifcW2gKKN/cP4RufWRb/fmk13aIHrS4bNrOIXO9QXFQXo2fEj5294+gfC8IXkaGqid0nnpAEu1HEx71j6Bnxo6li7nc+NBRbZlTHYMw0zERnMBiMSXL2cdVoH8pdmXB2ARhuMbIkXUxZlw/wPIcfXLgKtzzyMbpd/qR4EwHAkgobfnDhqnlvwDOTPLqtl1p39ZaWWR7N3HBkPJhbNAndQmdFDd0FG62OwWAwZpOnd/bjwTe7cGQ8hIgk449tu1BbbMZ1W2a26fNc5AOnNg0MSyqMIo/jap0ZmwZOdXylNmO8AlVvhpOU70ttieiYjc2lEF6JVrAqJMmYi50icpouRreLzkRP1eVIFJu0Ll/Y0LcX+NwvgBdeSDt2uLweD5x2BR5dehokfv4tminFpQAIUp6o14UoLx5oddkwGEQAuZtRGnQNbYe8dM0rU3VFlBE1tLps2M1izroWQjRdDHdQQvewD+6UYgkCLc/eHZK149Gs9blmZx/dTsidfWP47OqaWR4Ng5HO/L9DMxgMRp5x/Zal+Pnr3Tk7tV+/ZelcDWnWOWlJMfYN5M7BPmlJ8ewPZg5ZVefEvVccj0feP4iX9g3BH1FhM/L47IpKXHHyknltvDMb9I7SGcW0unyg1mkBkHvCrunyn+MbSmZUx2AwGLPF0zv7cddzexGMKCiyiLAIHDiBR+9IAHc9txfAzDR9juUDj/ojqHFaYHEKCEYU7O5zo38siJvPXDqjRjpt08Cpjq+lyp7IMs8CF9XFKLOZUFlkwlG31g8j07kVRSaU2RK7LP1huh1LtLqChBBs6t2Fm997BJt6d6cd7q5egl+ddgWebDoZCpda131sYBB5gKJC3DDN3SeySlf0oteVW3n0jec+p9yaPDazkbI5JqUuG11DvpxhOGpUd2JjGQBg3B+BJzjxa9ITlDHup1tAmGn63aHcoknoGIyZhmWiMxgMxiQxGgU4LROvQTotIozGwpkMf/ssuogWWl0+8eaBITy/ZwgjfgmBiIIRv4Tn9wzhzQOFkZGtR6Gs+qLV5QOfW0O3Y4RWt9A5OOKHMUemvVHgcHDEP0cjYjAYjHRkWcWDb3YhGFFQWWSCxSiC5zhYjCIqi0wIRhT8+s3uaTd9juUDj/ojaKm0w24WIfAc7GYRLZV2jPojM54PTNs0MG18FTYQELgDERAQtFTYMo7PH5aRa5MczyWb24tKtKamBgFp8RAcAIMAlFpNWKRrIB8K05lstLqCghCc0fURnvjjrfjLI/+RbqBv2ICbL78DZ375PjzWfOoxa6ADQHM5XYNaWl02nFa6qm+9rpyyeW6q7sXdA1Tn0eqyMeChM5L1uq5hb07jnUR180Gtk+4xp9UxGDMNM9EZDAZjkuwf8GA8xwr+eFDG/gHPHI1o9jGbRTSWWSfULCm3wmwurA1O97/egXtf7sBYQIJColsdCTAWkHDvyx24//WO+R7ijOKw0E0LaHX5wBlLq1BhN06oqbCbcMbSqjka0WzDwWwQ4MyQo8kBKDKLMBsEpNsoDAaDMXe82zWMI+4QiiwGcFzyZw7H8SiyGNDvDuLdruFp3U7PiB+dQz7UOC3guOT3PY7jUOO0oGPIi555WliMjc9qFLDj8Di29YxhR2/038PjsBqFtPH5ggqUHC6ZQjRdjN6xAEyigFKbGSVWEUUWEXaTgCKLiBKriDKbGUaRR6+usWj3CJ2BR6srBDii4uz97+G5P9yC3z/+fWw40p4sOOUULc7lo4/wTOOJINzCnE/RWvqpOhvliXrdmvpiqnNoddk4cTHdDju9zmykM95TdV3DdO8XtLpsdFJea+p1e4/QmeO0uplmQyPd34lWx2DMNAvzXZvBYDAWML99p2tGdflAz4gfDaVWVNgzTyYr7AbUl1jn7SJzNohEFDz4ZjekLNVnkkrw4JvdiBRQEHyVgy6yhFaXD4gij9vPX5m1OtsocLj9/BWz0sRuPmitSlRaLi41o8JugN2gvYYXl5ohRiswW6vmvpkUg8FgxHB5w5AVAlOW916jyENWCFze8LRuxxuSEZZUWLLsHrQYBYQlFd4szZZlWcWb+4fw+LbDeHP/0LQr4zONb9QfQdeQD6P+SLTinEBVSdLP9ePrd9PNxfQ6b0iGQeDRWGaFrBAEQjICYQWBkAxZJVhcZoVB4JNuh7bP4zT7QeYFvKrgC3vfxAu/vREPPvVfWDWYfA2wvWU9/uXLPwbefRc4++xEh9cCozzLdcJEup4Rumx9Wl02zlheOWmdmXJXcarOSnkerS4bhPJ5pNcNuukeR1rdTFNmM8OW43GxGQWU2VglOmN+KKySQQaDwZgD3uqgq3qi1eUD3pCMUV8EAAezyCOiqFCJth3YKPAAOIz6IlkvMvORJ3f2wZPj/nhCMp7c2YcrTlo8R6OaXUrtJmAw98V3qd2UU5NvZNuqP5Nb+BcCTeV2nLC4BG8dGIYvosJqFGGAAtEowhdRoBLgxMWlaCpnJjqDwZg/KhwmiAKHsKzCkiE3OCKrEAUOFY7pfR45zCJMBh7BiJLUfC9GMKLAZODhyHAs1vS0bywIWSUQeQ71JZYZbXpqMwkYC0TgDkoISwpk3UeSyAEmgwDCaboY7x5wUf3udw+4cF20f4/DLEJSVHS5fPCFlXgzdZUAvpCCfUc9aK6wZ3wcjmkkCZftehnXv/8YmsaOpB3euuJk3Lfxn/B+Ves8DG7q0Fr8qbryIgsOuXM3pCwvShRjfNA9TnVbtLpsbG6pRG2xGUfGs++MqCs2Y3NLwkRf11CMx7en/11TWddQnPT9qS1leHFP7tjHU1vKcmomgqP8S+l1BpHOuKfVzTROiwGtVQ50DHrhy1CoZDcKWFrlgNMyvaasDMZUKYyyKgaDwZhDRrx03cppdfmAzSRgyBvCWEBCRFFBohdxhAARRcVYQMKQN5R0EZfv7O6n2yJJq8sHllY6ZlSXD8iyitufaksyJpKOE2jHZ7i6cL7geQ7Xbm7G8moHOGgLZJ6wVmXJAVhe7cA1m5smzOhlMBiM2ebU5nLUOs3wBCUQkvz+S4gKT1BCndOCU5vLp3U7jWU2tFTacdQdBCHJHwSEEBx1B7G00oHGMlvSsad39uPOZ/bgwKAX/rCMUESBPyzjwKAXdz6zB0/v7M96m6pK0O3y4ZPD4+h2+XIu1gYiCvwRJe1zSiaAP6IgkGI0tQ/SxTDodYtKrBj0huAJyUj9tFOhFQ0MeUNJmejHMiY5AvzqV0BLC+75x31pBvobq07HRV/9H1z5hdvzzkAHANqSmFSdzUxnbOp1XolufkWry4Yo8vj2OcuzLgQ5zCK+dc7ypJ2HK2roGgqn6o6rLUaO9jMQOE03HWh3Dep1Cz1zvLHMhnWLirGozIqWcguKzCIsBh5FZhEt5RYsKrPi+EUlae/JDMZcwZaSGQwGY5JMdWKZzxAV8Ia1Lb1JP4dmpKuEwBeWQQrDZwQAuAN0GZ60unzgtNZy/G7rISpdofBq+2DOHRTekIxX2wdx9qqaORrV7LKqzokrNy7CA290onc0CEkBCKeiutSKKzcuwqo6uotGBoPBmC1Ekcd1W5px13N7MeQJo8gigqgEwYgMT1CGxSjg2i1N047a4nkOl6yvR/9YMJ6NbjEKCEYUHHUHUWoz4uL1dUkLi7Ks4t5XDmA8ICU36NOSVjAekHDfKx04b1VN2vja+t14YkcfOod8CEsqTAYeLZV2XLK+PuN7rycgwReauCjDF5LgCSQ0nhx9ezLpukd8GHRPPJ8ZcIfQPeJDa1UR1e8vRCyREL74yQu49sMnAd9o0jGF4/HK2k/h5yddij0lDfM0wvlFody9R6ubaS5YV4e+sQAeeqsb7qAMAq2a3mkRcc3mprQdJJl2wWQiVVdiNaKl0o6OQV/aohSgVbK2VNpRYp24J08uVtdrZv1EPRAETtPFOLmpAn/+KPsin143H+jfk0d8YTSUOSDwgKICnmAEZXZT2nsygzGXsEp0BoPBYORk/5AX4RyVuCFZxf6h+WlCMxtUUEaW0OrygS1Lta2uE1FXbMaWpXS5kvnA/3u3e0Z1+UBbvxt/+bAXI34JRpGHUdDyhUf8Efzlw1609bvne4gMBoOBC9bV4fbzV2JRmRWBiAp3mCAQUbG4zIbbz185Y5Epq+qcuPnMpVhd78R4MIKeYT/GgxGsqS/GzWcuTTO33+lyoXckgGy+FQFwaMSPd7qSY1Xa+t34+asd2HV4HBFZAQhBRFaw6/A4fv5qR8b33n0DHuTaCCWrmi6GRNmqRa97ff8QVTPS1/fnjqgoROzhAL6+9VG888C/4Xuv/QZVOgNd5gU8e8LncM7Xfo3rzv7/jlkDHQCqKOOVaHUzTVu/G293DMMgaBFNNpMAh1mEQeDxdsdw2mvwHxPsKJlI11hmwykt5VhcboXDyEELvtTMN4eRw+JyK05tqZh2NfXpLRVYVGbNGurCAVhcZsPpLQlDfEVNEQw5yuSNAocVNfO3WBZ7T17TUAxZVeEJypBVFWsbSjK+JzMYcwmrRGcwGAxGTo6MBkFyXFwRoukKBYOBbp2ZVpcPxLa6/sffdsMfVpIMAg5arE/qVtd8p3ecrikdrW6ho6oEv36rG+1HvRB4bfuyLKgQDSL8YRntR7146K1u/OzydazKh8FgzDsXrKvDeatq8E7nELbt6cQJx7XgtJbKGf8cWlXnxMqaIvSM+OENyXCYRTSW2TK+D+7qG6cynHf1jeOMZVUAtPfeJ3b0oWPIi1FfGIGICpUQ8BwHq5HHaCCCJ3f0Y2VNUdJtdg75qMav19G2O9frXmnLnfsc0123uYXyFvIfZ9CLr2x/Bl/Z9gyc4ZSeMSYTcPXVOJM7CYfshbNDbzocV+fEkzuPUummAw9krPDOpIuROv8pthoh8hxklcAfljLOf57ePUg1nqd3D+L/fO64xO3qqqlLLAYYRCH+epdkBeUO84xUU4sij1s+04o7nm6DLyQDnHY9xnEACGA3i/jGZ5YmvV9yPFBsMWDEH0GmDQE8p+WSc/M81Z/MezKDMZcwE53BYDAYOfm4d2QSuubZHcwc0TdGtyBAq8sXYpV9v3q9A4dHQ4goCoyCgEWlFnztUy0zVvm3UCixiDg8RqcrBLqHfdh2aBRc9CJJUggkhUAQte/HAhI+OjSK7mEfWgoo+57BYOQvosjj9KUVcPj7sW5pBQRhft2d9iN0vVD0up4RP97rHEbfWBCSQhD1uKASAndIQUAK4t1OF3pGFqGpIpFf7AlGqG6LVpeNXf10OwlpdflOmX8cX/3oKXzp4+dhjyTP80IGE57Y+Hlc9ejPgZoaHPrO8/M0ytljKiY1AJy6tDz+3M4GF9XFEEEXgamfhS0pM6NrJHec4pKyxO5K/fyn2GKEpBJEZBU8z6HYYsRoIJI2/wlTbuvIpItVU+vjm4wij+Nqnbh4fd2MVVPH5uUPvNGJvvEQZIVAFDg0FFtw3RnpTY79YQWVDu1x8YZlyNFeVxwHiAIPh0lEpcMMf5h2OW724Hku6f2QwVgIFMYVIYPBYDBmlUOjgRnV5QNeykxRWl0+MVeVfwuBS09owK5n9lLpCoEDg174QjIsBgEubxghSYGiAkIoCLNBgNUowhfSmuMxE53BYBwrtPW78cT2PuzudyMgKbAaBKyuc+KSDelZ5b1jdHMdvW4sEEHPiB9StIQ9ZjLG/pUUgkMjAYwFks1wo0DXsJ1Wlw1av2wB+GqzSpV3GNd98CSu/ORFWOTkHWgBkxWPnHwBfrXu83CZi3BVTWH0SckEbYujVB3PcRB4TBhBJPCaLsa6Bju2Hc6942JdQ8JM3dBYhq6R3FErGxrL4l8nz39CCEhK3Dy2GgRYMsx/llU7MOjNXUi0rDrzfGmuqqlj8/Z3u4bh8oZR4TDh1ObyjPN2h1lEqd2IMrsJA+4gRgMRyCqByHMotRlRXWQBAcnagJXBONZhrwwGg8Fg5MTA012c0erygWq7YUZ1+cZCq/ybLa44YRF++Py+uLGRCYPA4YoTFs3hqGYTDopKMOILQ9bdZVUFpLCCYESBySAAWRM2GQwGo7Bo63fjruf3otvlh0oIYt0Ge0cD2Dfgwe3nrUwy0mkrNPW6AwNehOWJM2BCsooDA15sWFwa/5mRMjKOVsfIwsGDwI9/jLd+8zBMSnJxhNdixx83XYxfrzkXYyZWFTsR7QNeqgz/9gFvvEHtF9YuwrbDuYsZvrA2MQ87qbkUj27PbaKf1Fyq+06b/wx7w8mRRwTwhBX4wwrMxuT5zzfPacVbHVtz3s43z2nNemyuqqlFkceWZbl7FjWW2dBSacfuPjeOX1QMX1iBpKgwCDzsJgFdLj/W1BdPO6+dwShU2Kctg8FgMHKyvJauuQytLh8ISXR1OLQ6xsLEaBRwy2eWTtiU6ZbPLIXRWBgLRC2VNoRlBdm8HJkAYVlBSyW7eGIwGIWPPidZUVVYjSKKLAZYjSIUVY3nJKu68GAuV5OYDLpBL130W6ouItMZ9rQ6RjJLRvtxz/P3AkuXAg8+mGSgj9mKce9nv4pTvvZb/PjEf2IGOgW0jcn1ulX1dLEmep2cY0Eqky42/8n2SlGQPv9ZWVUMMUdNgchpunwhltdeajOiy+UHz3EothrBcxy6XH6U2owzktfOYBQqrBKdwWAwGDk5vr4If91GpysU2o7SNfOi1eUbqkpwcNiPzlEJzmE/miocBTuhvuFTSwEAD73VDXdQjhUhotgq4qunN8WPFwKKTKiqxBTKC1QGg8FYiKgqoYpQSMpJthoRq0I1CJqxNOpPz0nWduvkRq/b2UtnLqbqwrnesCepY2gsc/Xghq2P4vx9b4NPSfB2FZXjt6f+E36/8tMIiuYsv6GwMfAATY1I6gaItr5xqt+v1+UyqTPpeI6DwGHCBr8ClxwbI8kq1fxH0ok6Br1Ziw7i5xBNt2KGMs7ngtS89kGPCpOBx5r64hnNa2cwChFmojMYDAYjJ6+0D1Hrrjh5ySyPZm4YD0kzqssn2vrdeHz7Yezuc2PU7UVpx26srnfi0g0NBTuxvuFTS3HNqU34285+9I8HUVdswUXr6gqmAj3G87uPUOvy6YKQwWAwYkwm3zyWk+y0GEAIQVBSoCgEgsDBYuBhN4lwB6WknORSuwkY9OccR6ndFP9aoqwUT9fRLmiyhU8aVg104qb3HsHZHe+nH2xsxA9WXYA/LT8DYaFwovoEIGv1daouxsZGJ97pzr3ws7Ex+fU05KNrcKvX3ffaAapz7nvtAB7+yskAgMoiEziOAybYFcJxHCqLEq/BP2ztobqdP2ztwf+9dB0A4I8fHKI6548fHMJ/XryGSrtQmKu8dgaj0GAmOoPBYDBy0jngmVFdPmAzcBij1BUSbf1u3PXcXnS7fJBUAklWMS75cXg0gPajXtx+/sqCNdKNRgGXn1Qo2eeZcQfpFn1odQwGg7GQSOSb+yApBCoh4DkOvaP+jPnmscpzf1iGLyxDVkm82aDIc7CbxCQdAJzRWoF3u0ZzjuWM1orEN5QRMKm6qVTpMtLZ0LcXN279Kz7VvT3tWG9FAxb95C7gyivx2++9NA+jm13K7QIGfblt9HJ7wkZfVV9KZaKvqi9N+r6UshmlXrfnCN2OTr2u2mlOiljKhEoIqp2JnQQfdOVuEJqqG/GFJ1AmoNUtNOYqr53BKCRYJjqDwWBMEtqNnYW0AbRvnK6yhFaXD5TZTLlFk9DlA1o2bBfajnjgCcsIRGSEZYJARIYnLKPtiCctG5aRX5TZjTOqYzAYjIVCLN+8rd8Dd0CCLyzDH1bgC8twByS09ad/hrVW2cFzwFhAgqQQcAB4TrPMJYVgLCCB5zRdjDOWVUHMcRUt8pouxpCbLhM9VdczHKA6j1Z3TEEINh36BH/5y2144k/fSjPQu6uX4JuXfBdn/OsvgC9/GTAUTvW5nos3NExat4Kyx1GqrqnSSnWeXkcIXRSRXtcx6EOus1Si6WJMFP2iR6+TVbqx0eoYDEb+w0x0BoPBmCS0rZsKqcWTnFsyKV0+0FRB11iRVpcPdA/7sLVrBGFJgaqoEDgOPAcIHAdVURGWFLzXNYzu4cLMgT8WsIp0VWK0OgaDwVgoaJ9hwwhEZEQUAkkhkFXt34iiLQinfoYtKrZCJVoYCoFmoMX+i/1MJZouRnOlHae2lE84llNbKtBcmTDe3RE6ky1V1zVCZ47T6o4JCAGefx5P/PFW/OWR/8Cm3t1Jh9vrW3Hj5XfgzC/fh8dbToHKF1ZsWypntFTlFqXonBYDxByxHiLPwWlJXnjY3UuzhzNZd/KSEqpz9Lq2PsoGpjrdmjoH1Tl6nVmg2+JBq2MwGPkPM9EZDAZjktCGHLAwhPzmuHq6ST2tLh9oH/DCHZRAQKACCMkqIor2rwqAgMAdlNA+4J3voTKmyH4X3d+OVsdgMBgLhfYBL0YDkbgpzun+i5nho4FI0mfY1oMjkHPsrpJVgq0HExEPPM/h1rOXY3VdEUxCIuiFA2ASgNV1Rbj17GVJ2cKW1A6MWUjVscai9HBExdn73wM2bADOPx8bjrQnHd/duArXfPEunPPFn+K5xhNBuGPDCjkwQvd5rtc5LUYUWQxZzSIemtHutCTvWts/FKK6Lb3u/HX1VOfodR8eHKY6R6+74dOtVOfodRYT3e4EWh2Dwch/jo1PDgaDwWAwJsnm1gqq7dqb9ZmneY7LE4KsEigqIKuIGxEq0b7Xfk7g8tBdJDEWHl7KRri0OgaDwVgoDLiDUKJecmpdaOx7RdV0MQY9IUiKCgMPGHguHuXCc9r3Bh6QFBWDKZ97q+qc+OrpTWgss0IUtPNEgUNjuQ1fPb0prXdIXSldzEWqzkwZdk6rK0QEVcEX9r6BFx++EQ8+9V/Axx8nHd+2dD2+/KUf4/OX342XG9ZpgffHEG/td01a57QYUOEwZo1MUQGUO4xplehT2bnaWGZHrkJugdN0McaDdLek162ocaKxzDKhvrHMghU1idfuOatqqG6HVsdgMPIftleXwWAwGDmpLxLR58k9Ya0vKpyPlaYyO+wmccKJusMkoqmscBrylDlMmKggj0DbJV3mKJwc+GMNm5Fu2zqtjsFgMBYKY7rmfhPVlifpiPYfHzVWuWgJO4eY18ppC8opv7Ct342fvNCOw+MJc11VCPYP+vGTF9rRXGFPMtJ9QbrF51RdhUXEsD93QGCFpXDmX7SIioyL9ryOr7//KJaMHU07vnX5Rtx78uX4oIquArlQcVE2vdTrFpVYcXh04hz/vtEgFpUkL/rEdn3kQu+Ze0PShHNPQHv96Rf365xmHBzJ3WegTtdYlOc5/OKLG3D17z7EoC+9h1OV3YhffHFD0g6SLa2VqLAb4cqgj1FpN2JLa2XOsTAYjMKAVaIzGAwGIyeN5XRGMa0uH+ge8eXcHh2SVXSPFE4+uJXSOKXVMRYeZpHub0erYzAYjIWC1UwXqaDXtVTZIfBaE1FJIXEDkCDxM4HXdDFUleCbj+5MMtD1HB4P4ZuP7kxqYLp/kK6xaKquz01ngNLqCgGTHME/f/x3vPHra3HPP+5LMtBVjgMuvRT4+GNcecH3Cs5At1Guleh1A5RxLnpd+xE3ApGJF2/8EQXtR5Kzya2UqSZ63Z6j7pzGuxrVxfjypiVUt5OqW1XnxMNfOQlfOqketU4TnGYBtU4TvrSxAQ9/5aS0HSSiyOP281dmnffajAL+4/yVEHNtXWUwGAXDsbdkzWAwGIxJY6CcHNLq8oF3O4cRUVSYRA6EaDEmsZBVkefAcUBEUfFu5zBaq4rme7gzQu9IIGcVERfVMfITq5GysSiljsFgMBYKK2oc4DlMWNXKc5ouhtNigMUgICxru85SK84BwGIQkmIr2gfdaB+ceAG9fdCH9kE3VtYUAwDClN3mU3VeymQtWl0+Y4mE8MVPXsC1Hz6JKt9o0jGF4/Hy2k/jvhMvxT9+fZ32w0f652GUswtlf9ok3UCApjY8WffTVzqozvnpKx343b+dFP++yCzCL+XeuVpkTswxXmsfoLqt19oH8KWoKf7pFVVwmAV4Q9lfWEVmAZ9ekd5UdVWdEysvXIOvjPjhDclwmEU0ltmSKtD1XLCuDgDwwBudODQagKwQiAKHxaU2fO2M5vhxBoNxbMCukBgMBoORk26Xf0Z1+UBQUgECCBwHUeSj27kJOE7LPpUVFTIhmq5ACEuqtn09eh2lv+yKN07jNB0jP6mlzOWl1TEYDMZCob7ECpPIT/i5bBJ51KdEUNA0FtXzp62HqMbzp62H8J8XFwPQtn/TfHIWTinCDOLx4OtbH8XVHz2FsqAn6ZDMC/jH8Wfh3hMvQZez8HOpaadf052mDfvo4odSdXaLEfDmNtHtuoakn/S6J1Am0OtEkcddF67GrY9/goic/vo1ihx+eOHqrBXiPM+hqYJ+9+wF6+pw3qoavNs1DJc3jAqHCac2l7MKdAbjGISZ6AwGg8HIybCHbpswrS4fWFnjgCDwkFUCQdCq12LNqAgQ/TmPlbqKtnxneY0DosBBVQEOJJ4Dy3Ha/SfgwPOarhBRVYIeysqkfOX0peWwGCY2mSwGHqcvLZ/DUTEYDMb0CUZU1Dgt6BsLQFLSjTWDwKHGaUFQV6Y7FojAn6NM3B9WMBZIZCIfGqErGNDrRA6IUBQEH8P9QdNwBr3AHXcAP/85vjU+nnQsIhrw9IZz8T8bLkSvo3AavC8UrJQuUarOaqB7Aut1tH5/qi5WAf6r1zvRPeKPV4g3ldlw/adaZrxCXBR5bFnGss8ZjGMdZqIzGAwGIydBym3ItLp84LTmCtQVm9E7EkREUmAQBXCcZipLsgJFBRaXWXBac+FcvJ3eUoG6Ygt6RwIQBB4GHlAUFYLAQ1G16vv6YhtObymc+xyjrd+Nx7cdxrZDY/BHFNiMAk5YXIJLT2hIy8jMZ1oqHDipsQzvdA3H83qjKUUAtOqskxrL0FJRmAslDAajcHGYRdSVWFBsMaB72Ad/WIEKrbrbZhLQVG6HzSzCoYuS2No5nDOPmUR1JzaWAUDGytdM6HUmEYhQRK6Y2NU5yvzj+OpHT+FLHz8PRJIz4kMGEx4/6fP4xfoLMGAtmacR5helRmA0e1/MJF2MYT/FCRl0B47SLTDpdXVOE8aDuWMC65zpTe1jFeLvdA5h255OnHBcC05rqWQV4gwGY9ZgH9MMBoPByMmxuA1ZFHnc8plW3PnMHvhCMsKyknAbCVBkEfGNzywtqIl67D7f8XQb/GEZhHBaNbpCQAiBw1x49xnQDPTbntyFziEfZJXEq++7XD5s7x3Djy5eUzBGOs9zuPWcZRh9MozOId//v737Do+iWv8A/p3Zmt4DIaEFklASCKEXRYoVFQWxl+tFUMFy7Vd+2LH3ghXFXhHxKlhQsYAgTTpIDZBQEtLr1vn9sWTZTXazJ2GTzU6+n+fJk+zMO7tndye7M++c8x5YbArsigJZkqDTSOiZGI67zspQXQ98IlK/bnFh6JkYjs15ZTijTwccrTCj1mKDUadBhwg99h6rRlpiBLrFhTm32S1Yhs41Ltoo9h3oGmf2XeGiSXFq1KHiGK7/ayEu2/gDQqzuIxurDKH4dNgFeC37XBwzqmMemtYiOk+4a9y+IrGRpfXjagS7lbvGXTWqG/67YJvPba4a1c3jcq1WxilpCYioykd2WgI0mrZ1jNoeRjkStSdMohMRkU/JMTrsL/HdhSo5RuczJphMzE5GXkk15v2xD+W1FkdyFUCkUYfrTumuysmE6p7zW7/tRVmt9fh1AwVRIVpMOzVVdc/Zblfw9Pf/YPvhCgCAViM5J1e12BRsP1yBp7//B/OvHayak57M5Cg8PqkfFqw9iDW5xSipqEZMRCgGd4tVXc97Imo/ZFnC5JwU5JfUYO+xaiRFhaBDpBE1Zhv2HqtGbJgek3KS3T7L9YIJRte4nUfKvQe6cI0ziXVeF45Tk5TSI7jxrwW4aPNPMNjqXUWIjQX+8x+MKE5HmUG8hnUwMEhi77fhJA89qgQvzLjGNbfEil4Wm/xU75LnHtQlHloZsDaynVZ2xAWbLfll+HJ9HnYXVMJkscOgk9EzMRyTc1J4rEUUpJhEJyIin/p2DMf+khKhODXZkl+GjQfL0D0uBFUmA8w2O/QaGWEGGRsPlmFLfpnqDoK35Jfh078OoLT2xNmUAqC0xopP/zqA0emJqnrOuwsrsGZ/MeyKAo0EWGxwFoKXocCmAGv3F2N3YQXSO6in91tmchT6JEVib2EF1m3ahoH9+iA1IUI1FwqIqH3KTI7CLePS8OW6PGzOL0O1xYZQnQZZyVGYPLBh4qp/51gsWH/Y5/327xzr/Du/XCwrKRrXXqUW5WHGqi9wwdZl0CruGdSS8Gi8O/wi3Pblc0BEBMr+uzhArWw5Oq0Ek8V3Fl13koXyawTKCDUlrjHDe8bgt52+zxeG9zxRiic1PhznZHXCtxsPeUzeywAmZHVCanxwnWNsyS/DSz/vQnGVCRpJBqDAbLFjc14p8ktqcMu4NFUdTxO1F0yiExGRT3/sKfVrXDCw2xVn75GiKhNqLHbY7QpkWUKITkZpjQ0L1+ejT1KkahKPdruCOz/fgIOltR7XHyytxZ2fb8CSW09VzXNesfsYai2OUj12OMq4SLIERQHsCgAFqLHYsGL3MVUl0QHH+51XUo2D5VZ0KKlGt7hw1byvRNS+WawW5JdWo9pkQ6hBg14dQj3GhRvFuqK7xgmWRBeOa28yCnNx05+fYcKO5ZDrVaQvjIzH2yMvxrt9xqFWa8BtESqen0MR3EFE47xobq/y5rhiWHehJPoVw7o7/5ZlCdNPTUVBRS225xWjygrY7YAsA+FaoFdKLKadmhpUxye+ziHiwiyqO4cgai+YRCciIp8qzWIH8KJxwSC3qAp/7jmGvJJq2BVAr5UdE2wqCqpMNtSYq7FiTyFyi7ogNSG4esd4s+NoGXYcrfQRU4kdR8vQJym6dRrVwqrNNuf5qcblREaSAEmSYLUpgOKIU5OvN+Tj9V/34EBxNSxWG+Zv3IAusaG44bQeqivZQ0Ttx5b8Mtz4wVq3i8FltVZ8uDofv+0swmtXDXLr/bnrcOPfeW5xAxx/ayVAoAMxTrIDsfqsXQvMmYMfvv66warDsR3x5shL8FH6aTBr1VUa0BubYNZaNM6fNABEjnrqX4Iam94BMSE6lDTSrT0mVIex6R3clmUmR2H2hD7CI0jauvZ4DkHUXjCJTkRE5EFplRkHi6thsysINWhRdy6slSRo9BpUm6w4WFyD0iozkBDQpvrNBytyheMevyi7RdvSWmJD9Sdu1E0c63rbU1yQ+3pDPmYv2oIKl5I9ZrMN249UYPaiLQCg2kR6dbUFz/y0EwdKqtElJhR3jk9HaGj7SNgQqV1zRlMdrfQcW59rXIRBQnGt7yx6hEsxax0AkWoZavw0Gpi3DTj7FeD77xusO5DQGa+NvASfp50CmyxYoF4lmjMJZ4gGqBHIboec5EsZFyqjoNp3A+NC3Sfx1GplPDixL+5ZsAm1HoqcG7UyHjy/r8cJ6uvKzKlhEs72eA5B1F4wiU5ERD6FaoAqgYP2UBWd/+wqqITZqkCnlQHFURu7jiwBOq0Ms9WOXQWVyOkW6/2Ogsim/DK/xgWD9I4R0GslmK0KbMeH2tZNLGq3O950vVZGekd1DCm3Wu146vt/3BLoripqrXjq+38wITPJ40luMJv58Tp8t+mI25D1d//Mxdn9OmLu5QMD1i4i8o/mjKYKNwiWc3GJS4wKRXFtlc9tEqNOlJARLTfth7LUbYOiYPiBTbjlz08x/MDmBqv3JKVi7shLsaj7UNjbWfL8ZPRICMGWIzVCcScjLjwEBdW+9/G48IaPU3cR/rVlu5FbVA2rXYFWltA9LhQ3jOnZ6EV6WZZU0TO7PZ5DELUXTKITEZFPkmAnENG4YCBJjk7JNrsCm83uSLwd76ksHw+QoK7nbLOLleMRjQsGMaF6dIsLw97CKlgVxZk4BwBFcvQa6hYXihiV9ET/fXcBDpU2fgJ+qLQGv+8uwNheHVupVS1v5sfrsHjTkQbL7cDx5euYSCcKch+t3C8c9+ikaABATZXvhGT9uE6RRuw46jvB2CnSKHTfqqIoOG3vWtz852cYeGhHw/WDBmFm6gQs6TYQiqSuC7WtYXC3OGw5kicUdzKKqk0nFTcxOxkTMpOwYs8xFFaYkBBhwMge8aq7OO9NezyHIGovmEQnIiKfqjx3Wm12XDDoEGmEVivDZLHBrjgOeiU45neyAJAlBQadBh1UdJLcJylKKDHQJym4alM2pltcGEb0jIfZZkdxlRnVJhvscLzfYQYNYsL0GNkzAd3iwgLdVL9YvusYfF0CUY7HqSWJXl1twRIPCXRXSzYdQfUFFpZ2IQpiB4qrmxz3/Y4ioW2+31GEp47/LcliiUDRODWQFDvO2LkKN6/8DJlH9zQMGDUKuO8+4PTTsfjeJa3fQJXYUyR20cc1TgtA5PDcNTEUqtMIbeWI83J/WhmjMxIFHll9XM8hFMXR+7zuHMKqAJIKzyGI2gsm0YmIyCfRfsfq6Z8MDO8ehxCtjJrjE0rWr+xoV4AQnYzh3U+ut09bck7/JCzccEgoTi1kWcLknBTkl9SgqNIErUaC3Q7IMmC1KYgLN2BSTnJQ1uT05MAxsUn0ROOCwVNLdwhdOHhq6Q48ODGrNZpERC1AK/g57RpXLjghumtctckstI1oXDDT2G2YsOMP3PTn50gvOtBg/dq0gXhh2MX48P27A9C6tq05k3eWeynFVp9rXIRRRkmt7/rmEcYTF32yO0cjt+Soz22yO0cLtae9qTuHqDXboJEBBRIURQEkCRpJgc2uvnMIovaCSXQiIiIP8spqEBGiRUm1xWMCTgIQYdQir6xGFfUbAeC0tEQkhOtRWOn9xD8xXI/T0tTVsygzOQq3jEvDl+vzsLugEiaLHXqtjL6dIjApJxmZyerpeV8kOFxENC4YbMwTq+EvGkdEbdOAzrFYttN3z/IBnU+uBnFRtVjlctG4oGQ2Y8qmHzFj1RfoXnK4weoVvYfjhaFTsKZDegAaFxy0MmATmFzUtQJKpygDNhz0vU2nKMOJ7TUyGnYF8fA4mhMPdNngbli0yXcS/bLB3Xw3ph3KK6tBQqQBlSYr7IoCnSxBlh2dNKx2BTqNhIQIg6rOIYjaCybRiYiIPCirsaCixgpZljzWAJdlCRW1VpTVqOckWauVMfvcPrjri40w2xo+Z71Gwv+d20eVNS0zk6PQJykSuUVVqKi1IsKoRbe4MNX0QK8jWl1ATVUIwvWCEwcKxhFR25TZOdKvcd4oNrGLjKJxwcRgNQOvvgo8+SSePuDe89wuSfgt8xS8MGQKNsZ3D1ALg4dWA5hEkuguX02DusdgyZYCn9sM6h7j/LtuRKUvrnEJ0UbEh+txrJFOFfHheiREsxyJJxW1VkQZ9cjpqseOIxWoNttgtTomr48w6pDRIQJ2BV4neSeitotJdCIiIg/KasyoNNugkYBQgxY2RYFdUSBLEjSSBJPVhkqTDWU16h+u3V7IsqT6HkEdIg2+g5oQFwyuHNYVf+wpFoojouDVOToMWhmwNpKY1MqOuJNRYRIrASMaFwxCzLW4fOP3mL56IVDp/nlqk2T81H8MXhh8EbbHdg5QC4NPlWAfDNe4aoGyLPXjJMFii65x3eLCcF7/Tlj0dz5KPIyoiAnV4fz+yaqZL8bfIoxaGHQyokP06NYnDEfKa1FrscGo06BjpBFVZhtKa8yIMDIdRxRs+F9LRETkQaXJBiiK45RCAuw2xTEYVlGg0TpONSRFccSphNVqx5xvt3nshQ4AZpuCOd9ux4TMJFX2Rrda7Vix5xgKK0xIiDBgZI941T3Pfp2jhXqx9VNRndMxGR2gkQAvuzUAR2JtTEaH1msUEfldWY250QQ64Eiwn+zF76JKwXIugnFtWbipGlev/xZT1yxCXE252zqLRovvBpyOFwdOwp5o9cyV0lRxOqBI4K2O88O81TUWwV7lLnHJMaHYUeB70t3kmFDn367zxRyrMKGk2gyT1QaDVoOYUD3iI9Q1X4y/dYsLQ8/EcGzOK0PPxHAkRYc41ymKgsNlNeiXEs2LEERBiEl0IiLyKU4PFAmcc8bpW74trUWWJOg0MkwWW4PhlrVWO7QSoNdpIEvqOYH4bWdBo/XQAaCw0oTfdhZgXJ+OrdSq1vH1hny8tmwXcotqYLUr0MoSusWF4MYxaZiYnRzo5vmN6Pmums6LD5RWw6DToLqRIe0GrQYHSqvRMzGiFVtGRP60fHehcNyg4xP6SRCbFN31I1E0NR7MKfSomgr8e+3/8K91/0OUqcp9pcEAXHcdxiiDkBeREJgGtiG1gntRLU7+izUmVOxA2zXuptN74qaPNvnc5qbTe7rd9jRfjEEnIy1RffPF+JvrRYjdBZVIigpBiF6DGrMNh8tqEBum50UIoiDFJDoREfn06tWDccm8NUJxapHeIRyyLMHq5bzIqgAhsoT0Duop//HNpnzhODUl0b/ekI97FmxCrUsXRqtdwY6jVbhngePEUy2J9L0CvdGaEhcMth8u91kTttpsw/bD5UyiE7VBVqsdy3cXYm1uDSrCCjGqZ6LHUUJ/7/ddtql+nAaASFXi9jJjQnxVCa5bswhX/r0E4eYat3W1OgO+HHIurvjiZSApCXn/XRygVrYtlsaGOTUjrtH7UMR6orvGndU7GQbtZpi8HdACMGglnNW74XFOe5kvpiXUvwhxtNxxEaJfSjQvQhAFMSbRiYjIp2NVYkOfReOCQUpkiM8JfypqrUiJDGk0Jpj8vb/Mr3HBwGq148Gvt7ol0F3VWu148H9bVVPCpqCy1q9xwWD7oXKffQSV43Hn9VfHxRIitfh6Qz7e+G0PDpXWwmyx4sMtm9Ap2ojrR/docHFzV0Gl0H26xoUbJJQK1C4PN6g7adix/BiuX/0lLtv4A4xW92O5KkMoPh12AV7tPwFFIVG4Iqn9lm7xRHRAoj8GLv6+/ahw3I2j0wE4Jo1/6qL+uP2zDR7Lmmkk4KmL+ns9xmkP88W0FF6EIFIfJtGJiMinl3/aIRw3oX9KC7emdby/aq9w3PTT0lu4Na1DtE6smiZT/WXnUZTUND7ovqTagl92HsUZfYI/cdCcoeDBrqCixndQE+KIqHV8vSEfc77dhspaC3Q6DSRJgR0K9hVWYs632wC4jxIqLBcroOIap5XEegeLxgWdffuAJ5/Eb/PehsHm3nGgPDQCHw6bhNf7nY1yA5Oo3nSI0OFAqe99r0PEyRdFX5tb7jvIQ1zd/8lLS7cjt9gEm+JInnePNeDm03urZrRdW8SLEETqwiQ6ERH5tKPQ5Ne4YPDqb/uE49SSRA8zaFBa63uocJhBPQPbP14hdrHk4xV7VZFEH9AlGl+uPyQUpxaRIWIXBETjiKjlWa12vPHbHpTWmGG1ATXW4wleixUSAGuNGW/+ttdtlFBzapUfExx0IxoXLFKL8jBj1RfAM78CNhsMLuuKw2Pw3vDJeCvzTFTr1TParqWMTEvAgTW+v1dHprnXj0+O1CK/3HcxoeTIEymbk6nHPzE7GRMyk1Q/gToRUUtiEp2IiMiDGrNIlVTxuGAwNiMBH6z2XRd9bIZ6JhJbe1CwV5dgXFvXOykKWhnwUr0GAKCVHXFqkZoQ5tc4Imoes9mGrzbkI7+0BsnRIbgwOxl6veeLsiv2HMPewipYPFzXVQBYbMCewkqs2HMMozMSW7bhKpJRmIub/vwME3Ysh1yv0FVBVALeGTEF83uPg0ln8HIPVF+YXiwJXT/umUuzcdmba31u98yl2c1plkdarcz/FyKik8AkOhERkQexoVocrvCdII8NVc9X6b1n9RVKot97Vt9WaE3rEB2gr5aB/DGhevRICMc/R73XDu6REK6qci5RIXpIaPw9lI7HEVHLmLtsF976fS/KaqxQ4Pife/y77Zh2aipmjklrEJ9fWu11roo6tVY78kvVMwlyS8o6vAs3r/wMZ+xa1XBl9+54qO/5+CjjNJi1J19ypL1Z+c8R8bjz+jtvV5ka3789xRlkQGQzAzuXExG1CH68EhEReTDj9FS/xgUDvV6DCGPjFwUijVqvPQeDUc9Esd7HonFtXbe4MITpG3+Pw/SOia/UQiPLMOoaP+Q16mRoZB4WE7WEuct24bkfd6L0eAIdcFzUKq2x4rkfd2Lusl0Nttl5pELovkXj2quBedvw7ucP4Jv3b2uQQD+Q0Bl4/31g507M73s6E+jNtPWY2IjE+nF/7SkR2s417pT0WKFtROOIiKhpeLZARETkwdKNx/waFwxW7DkGm73xPtdWu4IVe9TznOdfPdivcW2d1WrH7kLvvdABYHdhJaw+eoAGk/QO4YgJ0yNMr4FWcvSABRy/tRIQptcgJkyP9A6c+IvI38xmG17+eTdsXr5abArw8s+7YTa7123Zd6xK6P5d40Qv76rnMrAXioIRuRvwySf34suP7sZp+9a5rd6TlIrbJs/Caf96BbjqKkCrnhF1rkQvBQfqkrEiOMbNNa5zjNj3lGgcERE1DZPoRETkk2jfJDX1YdrRSLmL5sQFgyNltaj1VIDWRa3FhiNl6plhLTYyBF1iG584rUtsCGIj1TG52lcb8lFlckzMJ9VbV7esymTFVxt8l/UJFqnx4RjUNQY6jYzoUD3iI/RICHf8jg7VQ6eRMbhrLFLjmXQg8rfP1x8QKsvy+foDbstyj4n1MHeN8zHgpMlxQUdRgMWLsfDDO/HxZ7Mx/MBmt9XbO2dgxsUPYPxVL+CrniNgl9V9OeGM/h2aHJcSKXYkKxrXmOGpcc6/JQ8/nuKMgiMBReOIiKhp1HoIQUREfmTxc1wwsCliPXFF44JBYYUJPjqiw6444tTk97vHItzLCWe4XoPf7x7byi1qOXkl1bApgCQBGhnQyhI00vHfsmO5TXHEqYUsS5h+ag/06hgBWZagKI5SEoriWNerYwSmnZoKWa5/WYGITtbP2wqaFVdZYxbazjVOK3hmKxoXLCTFjjP/+RMYOBA491zkHPrHbf2mbln492VzcPZlz2BJ98FQJJW9AF7IghcJXONOz+wotI1oXGO6xIbBcHxnrH/oVXfboJXRJfZEX/n4cLEJX0XjiIioadQ5douIiOgkmSxiNS5F44JBhEHshFM0Lljc//VmVJk998CvMttw/9eb8fDErFZuVcswaE+8d47OocdP1RXH77o8smucGmQmR2H2uX2wYN1BbM4vR43ZhhC9Bv2SozB5YAoyk6MC3USioGK3K8gtqkJFrRURRsc8Cp4uROWViJVlqR8nOuDJNc6gk1EpUIrKoJKu6Bq7DRN2/IGb/vwc6UUHGqxfkzYQLwy7GCs6qWcy8KaIDhObLNo1Lj5cbNSZaFxjqi02pMSEYH9RFaz2hol0rQykxISg2mWEYIeoEGhlCdZGejxoZQkdotQxeo6IqK1hEp2IiMgDrSSh4SmNtzh1+GO3WK3zP3YfwzWj1DGham2tFZ+sPuj1nVYAfLL6IGad2RtGH5OuBoNhqXGNnoDbFccJ+DCX4eNqkZkchT5JkUKJPyLybkt+Gb5cn4fdBZUwWeww6GT0TAzH5JyGF6RKK8VGLtWPE7087RonOjdwsM8hrLNZcMHWZZix6gt0LzncYP2K3sPx/JCLsLZjRgBa13YM7xGLt5fnCsXVyUgSK+slGteYCKMWnaJDEBWiw97CKlSarFAUBZIkIdyoRWp8GMIMWrcJ33t1jEBMqA7FVWaP8wxoJCAmVIdeHSNOun1ERNRQ8J8NEhERtYAOUSEoLfBd0kJNvX0Kymr8GhcM3ly+FxZvM94dZ7EpeHP5XtwyPr2VWtVyYsP10Gka78Wm00iIDRfrwRdsZFlCagJrnxM115b8Mrz08y4UVZpQabLBbLVBr9Wg2mRFfkkNbhmX5pZILzeJlTwTjWtMSZXYfYjGtTUGqxlTNi3FDX8tQEp5ods6uyRBnjQJmD0bV3yqnjktTkbnKLEpQ13jak2NzwvjKU4DQGSr+uO7usWFoWdiODbnleHMPh1wtMKEWosNRp0GHSIM2HOsCmmJEegWd6J9qfHhGN4jHr/sKIDFZoNdcQwkkyTHSDKdRoMRPeI5xwcRUQthEp2IiMiDQV1j8Y9AEn1Q11ifMcFCpxHrnicaFwy2HS73a1xblxiqR42l8QRSjcWOxFB1JtGJqPnsdgVfrs/DhoMlKKwwu43gkQAkROixcH0++iRFOkd4iA7W8segrub0Xg8GIeZaXL7hO1y/eiESq0rc1tkkGUuzx+L5QZPxw5s3OBYyiQ4A+Gtfoe+g43EZnSIBAG8t3ye0zVvL9+Hc7BQAjuS1j2vxzji327KEyTkpyC+pwZ5jVUiKCkFipBE1Zhv2HKtCbJgek3KS3UZLOeb4SEVBRS32FlbBYrPDriiQJQk6jYzUhDDO8UFE1IKYRCciIp/ECps44tTiqOAQdNG4YDCoexzW5flOFg/qrp5SHzrBE03RuLbu6Z92CMc9NLFfC7eGiIJJblEVvt9yBAUVDSf9VAAUVJjx3ZbDuHJYF+eIj5gQDQ5X+u6nGxOirnkY/KK8HDNWfo6paxYhrsb9u9mi0eK7Aafj+YEXYl90pwA1sHkMMiAy8MBwktfr53wj9n0355sduHpkDwDAnsJKoW1c48K0QKnF9zZhHjIvmclRuGVcmrM80tFyR3mkfinRmJST7HG+jszkKMye0AdfrsvD5vwyVFtsCNVpkMU5PoiIWhyT6ERE5JNIAr0pccGguEIsOS4aFwyyBE+8ROOCwdg+ifhm8xGhODVYva/Ur3FE1H4UlZtwxMeMn0fKalFUbnIm0bNSYnB4h+/5NrJSYvzSRlUoLgZefBF46SXcXVrqtsqs1eHrgWfjxZwLkBcZnN9LAnO/NinOm4aXenzHyYLdQVzjeqVEYdW+Mp/b9ErxfOzUnPk6OMcHEVFgMIlORETkQajgJJKiccGgZ8dwn6MOpONxapGVHI0QnQY1Fu89JUP0GmQlR7deo1qQQSt2gi0aR0Ttx3dbj/i8WK4cjxvcwzFiydzI/AuuROPULL6qBNetWQTMvRSodO8RXaM3YsGQ8/By9nkoCAvuMnJiVcfF4/wpNc6ADYd8l/JLjTM4/x7RI0EoiT6iR4LXdc2Zr6O15viorDLjgW+34UBJNbrEhOKhc/sgPIwl34iofVLPmT8REZEfDekWi+W7i4Xi1OJwSeM9DF3jenVUR2/01PhwnN4nEd9vOQyzhzN2vQY4o3cH1UzSdWFOMjYIlOy5MCe5FVpDRMGkrEZs5JVrnMnHHAxNjVOjjuXHcP3qL3HZxh9gtLr3n64yhOLTYRPxSr9zURKqju/dtiwnNU4oiZ6TeqKs3fRRPfDSL7sb7TmvlR1xwebKt1dh+a4i5+01uSX48u98jEqLw4dThwWwZUREgaGemcGIiIj8SPRkJxhPirzZdqRcqJfhtiPqmGQTqJukqwdyusQiLlSLEJ0Mg0ZGiE5GfKgWOV1iVTVJ12WDukLr4+hPKzviiIhcKYrY56BrXFFFjdA2onFqklJ6BI99/wp+f+M6XLvuG/cEemws8PDDGH7DO3hk2BXtPoHeI06s57NonDcllQLFzevFGY1aXD60i9dCMBKAy4d2gTHIRi7WT6C7Wr6rCFe+vaqVW0REFHjB9UlORETUSqw2sV5xonHBoLLG6te4YJGZHIXZ5/bBgnUHsTm/HDVmG0L0GvRT4SRder0Gt52ejmd+2OnxgokE4LbT06HXc5I/InLXLT60yXFF1WJJSdE4NUgtysOMVV/ggq3LoFXcjyGKw2MQ+8As4IYbgPBwlP93cYBa2bZE6LUQqXLuiHPoEKbB0SrfRWE6hJ34vtt3zHcvdE9xD0/Mwqa8Mmw42LCsS//OUXh4YpbQ/bYVlVVmrwn0Ost3FaGyyszSLkTUrjCJTkRE5MG9X28Sjnv58kEt3JrWcUywJ6BoXDBpT5N0zRyTBgB487c9KKs9kWCIDtFg2qk9nOuJiFyFG8ROHV3jBDcRjgtmGYW5uOnPzzBhx3LI9S5jFkQlYN6IKXiv9zj8c+ekALWw7dp0WCy57Ro3bXRPzFnyj89tpo3u6fy7olbsYk79uLnLdnlMoAPAhoNlmLtsV1B9t87+ZrNw3AuXDmzh1hARtR3t4HClbdLYbbhlxSfoU7APZo0WFo0WFlkHs1YLs0YH3LkM0OsBg8Hxu/7fnm57W1Z/uYa9y4ioaYwARKplG1u6Ia3oj52Ffo0LBpvyxcq0iMYFG7tdwcHiahRWmJAQYUCXmFBVJtEBRyJ92shULPz7INbtyMXAXt0waUBn9kAnaofsdkXoAmLXuDCh+3ON6xwbhkPlvr8zOseK3XdQWrsWby6cgzN2NSx/cSi2I94ccQk+6nUaLBpdABoXHETH/LnGdRecy8Q1LlQvOKm8S5zZbMNzP+5sNP65H3di2sjUoPmO3XBQ7DhPNI6ISC2YRA+QC7cuw61/fuo9YF0LPrgsiyfiG0viC2xzzo4tsGgcFwZOXCzQwqLRwaTROW4f/0FJyYntNRpAUmfigigYiU03KR4XDEyNzRDVjLhgYBZ8LqJxweTrDfmY+8tO7C+ugdWuQCtL6Bobgplj0zExW52TbOr1GkwZ1Blp2iJkZ3eGhhfZidqdLfll+HJ9HnYXVMJkscOgk9EzMRyTcxqWsqq22CABjc6dIR2Pq5MSE4a/cn0n2lJi1JdEH5S3FTj7FeD773FGvXUHEjrj1RGX4Iv0U2CT+dnbEkqqLdBrJJht3vdYvUZCiUspoZE947D5UIXP+x7Z88TEoh+uzkUjDwEAsCmOuH8HyTw6Rq3YebhoHBGRWjCJHiBHw2MD9+B2O1Bb6/hpYa82JfgVl78lqem97pvaa78pvfk9LdPpmOgnUrHoEC1qKnzX/o4OUc9Xae+OEdhX7LtUS++OEa3Qmtbz9YZ83LNgE2pdLg7Y7Ap2FlTjngWOsj5qTaQTUfu1Jb8ML/28C0WVJmg1EqAAZqsNmw6WIr+kBreMS3NLpB+rMEGSAKWRhKEkOeLqbM8vFWqLaFybpygYsX8jbvnzUww7uKXB6j1JqXh5+KX4X4+hsDN53qISIgwINWhhsCuorLW6XfyRAYQZtdDIEhIiDM7lF+Sk4I3fc31eKLogJ8V5+4MVuULt+WBF8CTRLx6Sgoe/8V0K5+IhKT5jiIjURD1n/kHmj+45uOiKJzG0aC8Mdht0Nit0Nsvx31Zc3j8RMJvdf0wmx4/F4vjtabnZ7L4+WCnKiefVlnlIzP9SYT3eu76u970OZlkLs1bn7Ilftxzli5uW5G/qxQGdzjHygIiarG9yDA7v8F2qpW9yTCu0pnX8e1Q3LNlWIBSnFlarHQ98vcUtge6q9vj6CZlJ0GrV9XlqtyvYd6wKu4stiDpWhdSECNWWryEid3a7gi/X52FXQQVKqsyoMttgVwBZAsL0GhRXm7FwfT76JEU6PxcSwk8kG+v3SHe97Rp3QODCbFPi2ixFwZi9a3Hzn58i51DD5OP2zhl4edjF+K77YCiSur5L2qqRPeLRKcqIA0XV6BobgiqzzTnSLEyvwbFKM5JjQjGyR7xzm/TESAzoHI31B0u93u+AztFIT4x03lbj5LlXDu6OR7/9p9Ee9hrJEUdE1J4wiR5Aa1P6Ym1KX4/rLn9iwsk/gKI4Eup1yfX6iff6SfqmLq9bVj+xX5f8Npmw42AxdHYrdFbLiQsFVgu0Niu0x2/LjXVnaevqXgsXqU3ZXmzewpOj1bon1kVK9DSx5//kzduPl+1xlO6pK9Fjll3+Pn5RAfn5De+DiX5qg4Z2j8FPAkn0od3Vk0T/esNh4bhBqQkt3JrW8cvOIyitaXzEQWmNFb/sPIIz+nRqpVa1vC35ZViw7iA255WhuKwCsbs2IyslChcN7NyghAMRqU9uURX+3H0MeSU1sNoUZwLcBqCsxooqsw0rdhcit6gLUhMcNaPDjFpoJAl2RWnQU7futkaSEGY8cYpZ6XtAV5Pi2hpJsePMnStx85+foW/B3oYBp5wCzJ6Ns382cwTrSYjUA+UC/cMi9Sf+1mplXD+6B+Z8uw3HKs2IDNEhzCDDbLXjWKUZIXoNpo9OdbtALssSHr4gE//59G/sLaxyq7EuA0hNCMPDF2S6XXAWLXMeJOXQATjKvd1+Rjqe/sF7rffbz0gPmhrvRET+wiS6mrmWRAkLTJ3Bs/672GeMxm6D3m7B9v8beyLh7ylJ7+lCQP1e+Z6S/o1dPHB9jLplro9V9xg2m8/n0WZZrY6farFZ7Zvj2aYEv+FhmUYTmDI9TZkXgLWC251OsSF+jQsGv/5zpAlx/Vq2Ma3k89UHhePUkkTfkl+GOd9uw84jZaixKrDa7DhSXY59hRXYcbgCs8/tw0Q6kcqVVJuRW1QNi4eupgoAi03B/qJqlFSfyFxGh+phtTfe+cVqVxAdqm80Rg00dhvO3f47Zq78AulFBxqsX5M2CM8PnYKPP7jbseAX3+dE5F2X6BBsKfA9WqFLtPsxWV0ptjd+24NDZbUor7VCq5HQNS4M00eneizVlpkchRcuHYAv1hzAn3uLUGWyIcygwYjUOEwZ3KXB92NyjBHHqqt8ti05xugzpi2ZOSYNAPD6sl2oMJ/4v4/QS7hhTJpzPRFRexLQJPqaNWvw9ttvY8uWLSgsLMTcuXMxfvx453pFUfDSSy/hiy++QHl5OXJycvDggw+iW7duzpjS0lI88sgjWLZsGWRZxhlnnIH/+7//Q1iAksbUdDZZgxpZA8S04d6cNlvD3vZeEv5T3/oTersVBpsFOrsVepsVepsFOrsNemvdMkfP/OuGJHsv2+PtIoG3hL81SLvwAI7Xt6bG8dNWybIzob7OApeSPa697evK9ZyYSBcHPvJPDX5vyX3XZZyQ168Wrs4VjpuQpY6akEcqxIYai8YFg90Fvk98mxLX1tntCt78fQ/WHShxS55Z7HbUWIB1B0rw1u978fwl2aos7WK12rFizzEUVpiQEGHAyB7xqivT01Q8Hm+fdh2t8Dkxdq3Vjl1HKzCwq2MuJ7tia7RWNOBIwNuVIO584ovZjCmbfsSMVV+ge0nD0Vt/9h6G54ZMwdqOGQFonHopgqNWPcVNzE7GhMykJn32ZyZHoU9SJnKLqlBRa0WEUYtucWEevxc7x0ZgY77vY4TOscE3n8zMMWmYNjIVX23IR35pDZKjQ3BhdjJ7oBNRuxXQJHp1dTUyMjIwefJk3HTTTQ3Wv/XWW/jggw/wxBNPICUlBS+++CKmTp2KJUuWwGBw1Nq78847UVhYiPnz58NisWDWrFm4//778eyzTeobS9Q4jcbxY/Tdg+DnH8R7fF/nj7I9dex298S+p3r5vnr4N5a4r9+jv7bWuf2mvQWO8jzHy/bUleqpW6Z1qfkftOx2Z6I/rinb/fNnS7WoIV8T8ja3xr5ej3+v2Q2z1lHfv+6igUWjhUmjg0XjUu9fqwO2bvV+v0E0Ie/K3HK/xgUDS+P5lCbHBYNQo9ihkGhcW7f3WCWWbjvqsfcp4Oh9+uO2I9h7rBI9E4PvhL8xX2/Ix9xfdmJ/cY2zLm7X2BDMHJverieO5fF4+3SkvLbJcQ9/vU1om4e/3oavbzm1We1qqwxWM/Dqq8CTT+LpA+49z+2ShF8zT8VzgydjS0KTCjuSoKgwAwDfiWpHXENarYzRGYlNekxZlpyljBozvEccvt3seyTf8B5NOoNoM/R6DS4Z0iXQzSAiahMCekY4evRojB492uM6RVHw/vvv48Ybb3T2hnnqqacwYsQI/PTTT5gwYQL27NmDP/74AwsWLEBWVhYAYPbs2Zg+fTruvvtudOjQodWeC1HA1fWUNng+eGxJ53sp2yNJjommJEly/IaCXQ+e7j2x76vevrfyPJ6S/CIT79b14K//2MGqBSfkvb8pwe/6WO+vUjv+vFhQP9Evy6i2iM3XIBpHbdP43gnYdqhCKE4NNuWXosbHVZAaix2b8ktVlUT/ekM+7lmwyW0CWZtdwc6CatyzwDFBSXtNpPN4vH3ac9T35179uP3FYh1FROOCQYi5Fpdv+A7Xr14IVJW4rbPJMpb2H4dnB07CrrjOAWph+xAnWCJINM6fpuR0xqNLdqDa7H0ERphegyk53EeIiIJdm+1WlZeXh8LCQowYMcK5LCIiAv3798fff/+NCRMm4O+//0ZkZKTzgB0ARowYAVmWsWnTJpx++umBaDoRHacoxyeacp08ti5R2VYpiiOx7qkO//GfK+f+BoPN6izNo7daoVWs0Fst0B/vda8//jNzRJeGifz6Sf/6Sfz6Iwpcy/fUXQSwB3FXYA8T8rY5Wi22yVpYXcr1WDQ6WLQ6l1I+WmcvfOx4q/lJ/uYua4EJeSXA51D9uji1mHFKGl75ZS8aK/MrS444NVi27ahw3KQB6jjht1rteODrLW4JdFe1x9dPyExq96Vd6uPxuHpFCiYbXeNkSeyisWhcWxZhqsJV6xdj6ppFiKtxH3Fm0Wjx3YDT8dzASciNTgpQC9uXsX0S8Y1Ab++xfZrW29wf9HoNZo7pgeeW7oTNw9eMRgZmjOnBEihERCrQZpPohYWFAIC4OPdhT3FxcTh27BgA4NixY4iNjXVbr9VqERUV5dy+KWxtaPLIttSW1sLn3D4ExXN27dUf0bAn5vLYPOG7umHWWf5s2Qk2m++e/B7K8Uieeuk3NtGu2QzJbMbqnUehtVlcyvNY3W67/oRJdsd2wfBee2O1IhRWAGLD3bGrRVvjkVI3Ia/B4Og9L1CWBwYDlPpxOp3z78+KKrD8QKWz1r9Jc+JCgtlZ71+HiYOSYVu1ynfSX9tmDzOcdDoJlw/pjA//8j7B6OVDOkOnk4Lj88uHkmqxevYl1RZVPF8A+GnHEZTWNF5OrLTGip92HMbpvTu2aFuC7TVt7ePxuten/m/yv75JkcJxde9Dhwg9imt8fy92iNA3671r7vvtz8eKrinHtWv/h2vXfYNIk3v5EMVohHLddRhtH4hDEWKjk4L1dWjJbe48syue+WG/z23uPLOrc7u+SZEI0cmNjqQK0clu+2truuHUVNjtCt5evg/ltVYoimNEblSIFv8e2R03nJrKz7MWxO8McsX9gVz5+9iy7Z/dtqLNmzcHuglOGzZsCHQTWh2fc/vQ3p5zwJ6vTuf48cOkbpIk4aovjzpLmTvK9EgNy/U4avbg/YnHh+7bbJBtNkgWCySzGZLFAtlqhWy1QjKZnMtli8Wx7njCXrJYIFmtkE0mSFbriWUWizPWdVn9GOcyT7frYq1W50+wkpo5IW9jvciHHP/x6QOxx1JkGYpOB0Wrdfz28mOv+1uvb3y5VgtFr4ddr3e7T3v9+6tbd3y7utuelkOrxeRuEsqKw7Bsf42z3ruiADoJOK2bERd2sajms8tuqhSOU8tzfmdFkVjcL1uRYPLd05FaTv1j8bZ0bK423WWxk8jucgE2bHD8Dx0oEruwfKCotlmfH839zPHHY8VXleC6NYtw5d9LEG52/16t0RuxYMh56Dd7Kqzx8Tj0hfjnRLC9Dq2xTSe7WNnBTvZy53Z2RcHAjnqsyquF1cNAB60EDOqoR1neLmzID8x4uRHRwKCzY/DHfhMKq21ICNXglK4G6DUVqvk+bev4nUGuuD+QK3/tD202iZ6Q4Li6X1RUhMTEE8OyioqK0KtXLwBAfHw8iouL3bazWq0oKytzbt8UWVlZ0GhacJjVF98Lh2ZnZ7dcO1oTn3Oj+JyDVHt7vgDMn4s/Z9ch/W2VcvzHOSFv3WS5LqV3pr/1p2OyXLvFvVSP1QydzQrd8d96qwXThqV4LslT72+priRP/TI9dXGutfuP/y1ZxHoOt0WS3e4Y/dDG5xpQ9Hq8dLxXfq2kcZToMRgQHh4CyUvPfsVLT3+vy47/VvR6xyTVTdnejxPyXoQ8rFqwxfE/0EjFhcnD05GdneKXxww0218rAZT5jtOGtvhnts1mC6qTutY+Hq87Fq97nVr82LwdO1ZRDcD3SIHU9N6IjwgFAFQJHv9U2VyOf5p7zNSc7ZqxTce3P8T1q7/EZRt/gNHqXmqu0hCKz4ZNxCv9zkVJaBT2HJ8XoLXa1qqP1YxtdF9+LzTRuE52f06HN+cDKPEaX0cfl4LsrBNzVdzdoRyPLtmOPUcrUG2xw2KzQ6eREaqT0aNDBO46pzf6dhIbYdGShgwMdAvaH35nkCvuD+Sq/v5wssfibTaJnpKSgoSEBKxcuRK9e/cGAFRWVmLjxo247LLLAAADBgxAeXk5tmzZgszMTADAqlWrYLfb0a9fvyY/pkajaTP/ZG2lHa2Jz7l9aG/Pub09XyDInrNG40hQhoY2WGXqW4yf93qeeM21F/6o7hG4ftop/m2Xopz4sdsblt+prXUvvVN321tpHl81+Osl/Q8XlOFYSQVki6Nsj9Zmg95uQbRWQoRsd5+Qt27bICa51OkPOf7jc5sWbZEHriV7XP/2dNt1Wb3E/Hi7hCd3FaNW0h6v8a+DVeP426xxlOyRDHqM2lIOzZHIE6Wt6l8QMBrdbx+fkLct6hgpNuF2x0hDcH1+tYLWPh6vfyzelo7N1eaad9YJx31/+2lNvv/mvG/Nfa+b9Vj79wNPPonf570Dvd19VFp5aAQ+GDYJb2SdjXJj+Mk9Tlt/HU5iG5EEel2c6+PMW54rtN285bk4N7uL83a/zjG479y+WLDuIDbnlaG4rAKxURHolxKNyQNTkJkcJfwcSJ34nUGuuD+QK3/tDwFNoldVVeHAgQPO23l5edi+fTuioqLQqVMnXH311XjttdfQtWtXpKSk4MUXX0RiYiLGH+8F0KNHD5xyyim477778NBDD8FiseCRRx7BhAkT0KFDh0A9LSIiUoEzs5Ow3EsS3XXS3PH9W6CGsiSd6Hlcl+j3Q2keUUkA4sw2LNlyCJt3H0S/np1xdt8k6HWye3K/ritzXY/++gn9usR//dr7FkvDxL+3mv51PfVdE/b1f+omA3ZdX/e3a8K/sa7XbV3d86uq8h3biEgAU0QC32/GndeVkapL4Nf97Vq3XzThX7/Ov0vtftT15q8f45rUd4kdE6/FzhAFJo0O9uOJfhuA4morTC6TjfZLiWnGkw5+PB5XF7PZhq825CO/tAbJ0SG4MDvZ44SGeaVipcBE44JFalEeZqz6AnjmV8Bmg+v0qsXhMZg/4iK83fcMVOtFLqdScxwoEdunPMVlJkehT1Ik9hZWYN2mbRjYrw9SEyIgy2qa8pyIiNqqgCbRt2zZgquvvtp5+/HHHwcAXHjhhXjiiScwbdo01NTU4P7770d5eTkGDhyIefPmwWA40aPomWeewSOPPIJrrrkGsizjjDPOwOzZs1v9uRARqZkegEhfY73vkKDx8o/7hOOuGpLWwq1pfXq9Buf174TOSgGy+3fyfeU+pJUTDq699ev/1F9vP54otVpPlO7xlMivn/D3ltj39uMpke9rmevfVqvjJ1jVPZc25qLjPwBgk2RYNVqURMTi4XNuwpKUbGecVts2e9K3NB6Pq8fcZbsw7499KK+1OCc2fOL7HbjulO6YOcb9e8pkFutGLBrX1vUq2IeZKz/HhB3LIcP9gmpBVALmjZiC93qPg0knNnKFms8gmPD2FifLErrHh6EsVofu8WFMoBMRUasJaBJ96NCh+Oeff7yulyQJt956K2699VavMdHR0Xj22WdbonlERHScaLGO4C7q4a6oUiwZKBpHfubaW78taE5S31NsXa/6+kn9+r35TzKxX15Rg8KictRU1kAxm2GAgnCNghgdEKLYPPfwd70AEKQ0ih0aqxkdS45g6h+fYsll2QAArSyhQ6QxsI0LEB6Pq8PcZbvwwtJdsNpPJIgVBSittuCFpbsAwC2RLjouJ4jH7wAA+h3eiZv//Ayn7/6r4cru3fFA3/Pxca/TYNHoWr9xQa5bjBG5Jb4nm+0W4/7Z2r9LNA5v9V2Pv3+X6OY2jYiIqEW02ZroREREgSTLgE2gA14bLQN90mprrXhr+R5s2F2K7JLdmDaqB4xGHjZ4FWRJ/UhFQbjNjrziSmzfuQe901LRMToUsoQTpXoauwhQl1Svm5BXpEe/p3I79ZPzvpaLxNbd9uGP9CGQj89vEBOqQ6+OES33fhC1ILPZhjd+2wuLXYEEQCNLkCTHv6vNrsBiV/DGb3sxbWSqs7SLaP/yYO2HPihvK27+8zOM3re+wbr9iV3Q9Zk5wGWX4b3ZPwSgdW1PhEFGhcn3ux1hOHHQ8+DkXvjXvA0+t3lwci+322dmJuF7gST6mZlJPmOIiIhaE8+GiYiIPBjeNQq/7ysTilOb+7/ejA9XHnAmT37O3Y3nf9qNK4d3wcMTswLaNhIkkNSXASQbDSgsOIjk5HjILT35kmst/caS9L6Wu9bi9xZfV6ffZILdZMZbP+3A9txCwFwLjc2KmsgYrIntDl2NGTqNBiN6xCM1Prxhm4mCwMINeaiotUICoNWc+L+XJMdtq01BRa0VCzfk4dIhXQE4/v9FEuRBdZ1YUTBy/0bc/OenGHZwS4PVe5JS8fLwS/G/HkOx96rzA9DAtsuo1Qgl0Y3aE98TS9YdEbrvJeuO4LSeyc7bWcnRCNVpUG2xed0mVKdBVnK00P0TERG1FibRiYiIPHjp8kHIfvRnoTg1uf/rzXh/5YEGy+2AczkT6dQskuSYKLeVyQBOTeiK9T/txIHiathsChQokGusiArRIzUhDNNOTWVdXQpaWw+XQwGgkQD78XIuChyjLABAlgCb4oirkxwpY3+576RpcmQQpNEVBVi8GF99cCcGHG5Ymmh75wy8OOxSfN99UNsaMdSGJEXpUFjlewRPUtSJsjfLdhwVuu/6canx4RjfpwO+33IYZlvDgkF6jYTT+3TghU0iImpzmEQnIiKfJIjVRVXTqWl+me86n3Vx0RHqqKVcW2v1mEB39f7KA5h1Zm+WdqGg0jspEjePTcOX6/KwOb8M1RYbOsfqkZUchckDU5CZrL4RJdR+RB3/PPaQj/QYB0Aogd6UuECQFDvO3LkSyJkNbNiAAfXWb0zth+eHXoxfO/dn8tyHnK5x2HSoWiiuTmmtWMX8+nGyLGH6qakoqKjFnqMVqDLbYLMr0MgSwvQa9OgQwQubRETUJvEMmIiIfOqVFIbth6uE4tTi1WW7hOPmXjW4hVvTOl5etl047q6z2RudgktmchT6JEUit6gKFbVWRBi16BYXxkQNBb1z+3fCq8v2NlqeRT4epwYauw3nbv8dN638HGlFBxusX5M2CM8PnYI/k/sGoHXB6dSMRLy7suFr6SmujkYjwWL1nUjXaBp+xmYmR2H2hD5uFzYdJVx4YZOIiNouJtGJiMinSdnJePTwTqE4tdhdWOnXuGDw+dpDwnFMolMwkmUJqQksEUDqkhobDoNORo3FexrdoJORGhvc+77OZsGFW5Zhxqov0K30cIP1K3oPx7NDpmB9x/QAtC64ndozEZ2ijThU6n0UXnK0Eaf2PJFE7xYbih0FvjtYdIsN9bicFzaJiCjYBEGROyIiCrSVOxuerJ5MXDA4UuR7WHNT4oJBtVlsaLZoHFFbU1BahXFPL0P/B7/HuKeXoaDUdwKIqK1bua8IWrnx0zqtLGPlvqJWapF/GaxmXLX+W/z6xnQ89f1Lbgl0uyQBU6YAf/+NK87/PybQIX6C7xqn1cq456xeiPBSqi3CqMXdZ/WCVntiq1vGpQk9TmNxdRc2+3eORmpCOBPoRETUprEnOhER+fTLngq/xgWDMpt/44KBYhF7MqJxRG3JwEd+RJHLxHlltdUY8sSviAvTYd19ZwSwZUQnp7DCBJO18c9lk9WGwgpTK7XIP0LMtbh8w3e4fvVCJFaVuK2zyTKW9h+HZwdOwtK3bnAs/DQ/AK1se1Ljjdh9zPe8Lqnx7vO5TDw+mvC1X3fjYHENrHYFWllCl9gQ3HBaT+f6Omf0TYJRuxG1jZR0MWolnNE3qRnPgoiIqO1hEp2IiIgAAKJ96tXT957ai/oJdFdFVRYMfORHJtIpaEWHaWH2Mauo2aYgOixITv3KyjBj5eeYumYR4mrK3VZZNFosyTkDz+VciP3RTM56kiuQQPcWNzE7GaenJ+KZn3biQEk1usSE4s7x6QgN1TWI1WplPHlRf9zx2QZ4yqNrJeDJi/q79V4nIiIKZkFyJEVERETUsqqrLUKJA7WwWu1YvrsQa3NrUBFWiFE9E1WZ7CgorfKaQK9TVGVBQWkVEqPVMzkyBTe7XRGuFb0jv8Tjck9x43u34cRzURHw4ovASy/h7rIyt1UmrR6LBp+DFwdMxKGIhAA1MDhYTyJu7rJdmPfHPpTXWGBXAFkCvtqQj+tO6Y6ZYxqWZanrnT73553YV1QNqx3QykBqfBhmjE1r0HudiIgomDGJTkRERO3ezI/XYfGmI27L3vkzFxP6dcTcywcGqFUt5+sN+Xht2S7sL66BxWqHbsPf6BobghvHqC/pMeW1P4Xjfrv39BZuDZFvW/LL8OW6PGzOL0O1xYZQnQZZyVGYPDAFmclRDeLn/rpP6H7n/roPN43v4+/mnrSEyhJMXfMV8MolQJX7PAU1eiMWDDkPL/U/H4XhMQFqYfswd9kuPL90F6z2E93KbQpQUm3B80t3AYDXRPqEzCSs2HMMhRUmJEQYMLJHvCovyhIRUfvGJDoRERG1a54S6HUcy9epKpH+9YZ83LtwM6rNJ2ooWy127DhahXsXbgYAVSXSD5Wb/RpH1JK25JdhzuJt2FtYBbuiAAoACThQXI3tR8oxe0KfBon0GsGux6JxraVj+TFcv/pLXLbxBxit7v9/lYZQfDrsArzS/1yUhkQGqIXth9lsw6vL9jgT6K5jHhQAVruCV5ftwbSRqdDrNQ2212pljM5IbJ3GEhERBQiT6ERE5JMEx0mUSBxRMKmutnhNoNdZvOkInr7AoorSLlarHXO+3eaWQHdVbbZhzrfbMSEzSTW9CCXBDzCJH2AUYHa7gjd/34sdhysgS0ClyQabYodGkhFu0GDH4Qq89ftePH9JttfSLsGgc+kR3LhqAS7a/BP09nqZ/bg44LbbMKKwJ8qN4YFpYDu04O+DqDr+vSADbgd0kgLYAVSZbVjw90FcPrRbAFpIREQUeOo4OyIiohYlkkBvShxRW/HYki1+jWvrft11FIWVJ3p8ypIjV+KajyusNOHXXUdbv3EtpEeCWJ1z0TiilrL3WCXW7i9GWY0FxdUWmG122OyA2WZHcbUFZTUWrNlfjL3HKgPd1GbpUXQQzy5+DsvenI7LN37vlkAvDo8Bnn4ayM0F/u//mEBvZX/tKz5xo/71GclLHBERUTvDJDoRERG1W99tbbwXelPj2rofthQ4/5YlQDl+5UtR3BPprnHBLiFC79c4opay82gFDpfWer0grQA4XFqLnUcrWrNZJ61XwT688vWTWDpvBiZv+QVaxe5cdzQ6EY+ePQPDp88D7rwTCGfy3FVGorHJcaJjFFzj9JqGJVo8EY0jIiJSI5ZzISIiIgDAgOQI/J3vOzkzIDmiFVrTOspq7b6DmhDX1pltJ8q42Otl6hTFc1ywS4kJB1AiGEcUOJXVFp8jupTjcUFhzRq8uXAOzti1qsGqQ7FJeH3kJfgkYzQsmuAvleVLdqcQbDhUIxTn6pPrRiDnsV98bvfJdSOcf3ePM2JvUa3PbbrHnUi8n5mZiC/W5QFwfDe4XlR1/a44M5N1z4mIqP1iT3QiIiICAPRKDPVrXDAwaMT67InGtXVDu8f6NS4YZKVE+Q5qQhxRS3n7jz1+jQuUQXlbgbPOAoYMaZBA35/YBfdMvAunTH0d7/cZ3y4S6ACQ3lHs86V+XGxkCLrEhniJdugSG4LYyBMxz1zUX+ixXONOS+uAhPATo3HsyomfOgnhepyW1kHovomIiNSISXQiIiICAOwvNfk1LhhkCfaqF41r6yb1T/FrXDCYPCAFkcbGB19GGrWYPEA9z5mC01GX+Qr8EdeqFAUjcjfg04//iwUf3QP88IPb6t1JPXDr5Fk47V+v4LNeo2GT21dZkN92Hmt23O93j/WaSO8SG4Lf7x7rtiy7axzCDY2/vuEGDbK7xjlva7UyZp/bB6F6z9uF6jWYfW4f1Uw4TURE1Bz8FiQiIiIAwNEKwQSOYFwweP3KwX6Na+u2Hi71a1ww0Os1uH50KrSy59EEWlnC9aNTofeSPCJqLTa7WNko0bhWoSgYs2cNFn54Jz7+bDaGHXSfhHl75164/uIHMP6qF/B1zxFQpPZ5+nmsyuo7qJE4byNlPC2XZQmfTh8Oo5eEt1Er49PpwyHX+0ycmJ2MxydlIaNDGEJ0MnQaCSE6Gb06hOHxSVmYmJ0s9ByIiIjUijXRiYiICAAQGSp2WCAaR23Pfz5aLRz3x+xzWrg1rWfmmDQAwLw/9qG81gJFASQJiDLqMPWU7s71RIFUY/ZVEb1pcS1JUuw4c+dK3PznZ+hbsLdhwKmnArNn4+yfTI5/tnZOEnzLPMXN/HgdFm/yPLm1Y/k6zL18oNvyzOQoLLhxBD76cy++2XIUJosdBp2M87M64vLh3ZGZ7DkpPzE7GRMyk7BizzEUVpiQEGHAyB7x7IFOREQEJtGJiIjouMQwg1/jgsH098WSytPfX43PZ57awq1peXmVYpkc0bhgMnNMGqaNTMVXG/KRX1qD5OgQXJidzB7o1GaI9VUWj2sJGrsN527/HTNXfoH0ogMN1q9JH4Tnh0zBxx/c7Vjw8+JWbmHblJ5gxLZC35N9picY3W5XV1u8JtDrLN50BE9fYEFoqHt9+czkKDw6ORvTTqtCRa0VEUYtusWFNeiBXp9WK2N0BicQJSIiqo9JdCIiIgIAVJssfo0LBpsPV/o1rq2TAdgE49RIr9fgkiFdAt0MouBjNuPijT9ixqov0K30cIPVy/uMwHODL8L6jukBaFzb9+G0Ech57BehOFeP/7BV6P4f/2ErHrkwu8FyWZaQmhAudB9ERETUOCbRiYiIPNBCrLefmr5IS6rFap2LxgUDRRHrcS0a19b1SAzDzoIqoTg1stsV5BY1rVcmUXtmsJiAuXOBJ5/EUwcPuq2zSxKWZY3Gc4MmY2tC9wC1sPU15/ggNjIEXWJDcKC4xmt8l9gQxEa6TyD6685ioTaJxhEREVHzqencn4iIyG9yOkdg9cEKoTi1MNvFkomiccEgvUM4Nh3y3cs8vYM6evJ9PHUIBj2+TChObbbkl+HL9XnYXVDprA/cMzEck3NSvNYHJmqvQs01uHzDd5i++iugqsRtnU2W8WP/cXh20CTsju0coBYGTnPL7lwyuDOe/mGn1/hLBjd8LRW7yNgh8TgiIiJqPibRiYiIPBjSI04oiT6kR1wrtKZ1dI4OEeql3Dk6xGdMsDgrq4NQEv2srA6t0JqWFxkiVs9eNC5YbMkvw0s/70JxlRlJUSEIidKgxmzD5rwy5JfU4JZxaUykEwGIMFXh6nXfYurarxFbU+62zqLRYnHOGXgh50LkRicFqIWBp5MAi8DgJJ3L9Waz2YaXft7VaPxLP+/CtJGpbvM0pMaHIK/M9+iv1Hj1fC8TERG1VWoteUlERHRSlm4r8GtcMCgo9z7MvDlxweDjVXl+jWvrPli9z69xwcBuV/Dl+jwUV5nRMzEc4UYtNLKEcKMWPRPDUVxlxsL1+bDb1VGyh6g5YqrLcPvvH2DFa//GXX984J5ANxqBm2/G6Ovfwn/GzmjXCXQAiDaKjcZyjfts7QGYrI1/xpisCj5b6z5Zq8UmdrouGkdERETNx29bIiIiD46U1/o1LhiUm8QGqYvGBYOCcpNf49q6j1Ye8B3UhLhgkFtUhd0FlUiKCoEkuSe/JElCUlQIdhVUILfI9ygMIrVJqCzBvcvewfLXp+KWlZ8h0nTi/6BGb8T7oy4G9u0DXnoJhyISAtjStqNPUmST45ZsbjgZqyf14woqBb+jBOOIiIio+VjOhYiIyIOKWrtf44KBArHedaJxwUCnlWG2+H4PdVp19Dsoqxa76CMaFwwqaq0wWewIidJ4XB+i1+BouR0Vteq5OETkS1J5IaavXojLNv4Ao9W9XEilMQyfDL0Ac/tPQGlIJK7u2DFArWx5GgAi1cRdPz3yKixC9+0aZxUc6VI/rmOkEXuOVfvcrmOkUej+iYiIqPnUcUZIRETkZ6KpcfWk0IGEcLE62KJxweD8zHi/xrV1dh/lBJoaFwwijFoYdDJqzJ5TZTVmGww6GRFG9i2hdmDvXmD6dPz2xjRcu+4btwR6WWgkXh73Lwy/4R08OuwylIaI9bgOZqelRTc5TvQE2jVuRE+x+VPqx109oqvQdqJxRERE1HxMohMREREAIClK79e4YHDfedl+jWvrqgSv+ojGBYNucWHomRiOw2U1UBT3iwOKouBwWQ3SEiPQLS4sQC0kank9ig7i2W+fBdLTgbfegt5+YuRFcXgMnj1jGoZf/zaeHXQRKgzt53/hjjP6Njkus5PYJMSucTee0hMaH4O4NJIjztW4Xh0RbvA8iqZOhEGDcb3UO1qAiIiorWCXGyIiIgIAJEeJDQcXjQsG5SaxOrLlJhNCQ3Ut3JqWZxdMjovGBQNZljA5JwX5JTXYlleM4hobaiw2hOg0iA3RoGNMOCblJEOW1VOmiKhOr4J9uGnl5zhnx3LIcL+IdDQqAfNGTMH7vcfBpFPPCKOm6JUchW5xocgt8l4ypXt8KHoln0iIP3J+Jr7a6LvG+SPnZzr/Nhq1uGJYF7zfyHwTVwzrAmO9ETFarYxHL8zCXV9shNnWcISQXiNhzoVZ0Kqk5BgREVFbxiQ6ERERAQAqzWIlPETjgsGUN/4Sjvvjv+NauDUtLyXGgNxi3xcOUmLUlVDLTI5CQUUtNh12nTzUgrxSQNZqkZks1rOUqDmsVjtW7DmGwgoTEiIMGNkjvsWTnv0P/YObVn6O03d7+IxLTcUDfc7Dx71Og0UT/BcHT4YsS3jl8hxMfW8NjnqYQLpDpAEvX5bjdpEtPEyPUWlxWL6ryOv9jkqLQ3iY+6ithydmAQA+/esAzC4XKvUa4NIhXZzr65uYnQwAePWXndhXXA2bDdBogO6xYZgxNs25noiIiFoWk+hEREQEAFh/sMSvccGguNrsO6gJcW3dp9OGYdiTvwnFqcmVb6/ChoNlHtdtOFiGK99ehQ+nqus5U9vw9YZ8vPrLLuwvrobVrkArS+gaG9piyc/BB7fg5j8/w6m5fzdYtz+xC7o++yhw6aV4b/YPfn/sYJWZHIW3rxmMz1YfwM87ClBttiFUr8H4Xom4eEgXjxfZPpw6DFe+vcpjIn1UWpzXz5OHJ2Zh1pm9MW/FPhwsqUbnmFBcN7J7gx7o9U3MTsaEzKRWvxhDREREJzCJTkRERACAkiqxRLFoXDCIDdWjylwrFKcG5WaxOi3lZjvUUmG3ssrcaI9RAFi+qwiVVeYGPUeJTsbXG/Jxz4JNqLWe+L+z2hX8U1CFexZsAgD/JNIVBSP3b8Qtf36KoQe3NFi9O6kHXh5xCf7XYxj2XXneyT+eCmUmR6HPxExcO6oKFbVWRBi16BYX1miZpw+nDkNllRkPfLsNB0qq0SUmFA+d28fn54jRqMVN49Ka3EatVsbojMQmb0dERET+wSQ6ERGRBxIAkaIlaqqirBesCS0aFwy+uH6oUM/sL64f2gqtaXkrdhdBIwO2RnLpGtkRl94hsvUa1oJmf7NZOO6FSwe2cGuovbBa7Xjg661uCXRXtcfXT8hMan5vYkUBFi/GVx/ciQGH/2mwenvnXnhx2CX4vvsgQFLP53ZLkWUJqQnhTdomPEyPZy/JbpkGERERUZvC8V9EREQepMaH+DUuGKQKJk1F44KBXqPxa1xbV2OxNppABxwJ9hqLtXUa1ArW55b6NY5IxC87j6C0xtJoTGmNBb/sPNLk+5YUO7BgATBgAHDeeQ0S6Bu798O/Ln8UZ1/2NL5PHRyUCfSR3cSS2a5xXaLFRpKIxhERERG5YhKdiIjIg7G9EvwaFwzG9xEbJi4aFwyumS82sahoXFvXOdLo17hgUFjpu1xPU+KIRHy5Lt+vcQCgsdtwwdZl+PHtmcCUKcDGjW7r16QPwuVXPomJFz+GXzv3D8rkeZ0OMWIXa13j0juKTRAsGkdERETkiuVciIiIPPhj59EmxGW1bGNaydj0eL/GBYOdBVV+jWvr5i3fJxx3Xk7nFm5N69BJQI1gHJG/HKsw+S1OZ7Ng0pZfcOOqBehWerjB+uV9RuD5IRdhXYf0JrezrYoRnJ/ANa5bfKjQNqJxRERERK7YE52IiMiDHQViCRDRuGAw9d11fo0LBhaxeTaF49q6Q+Vi+6toXDDokxzt1zgiESGCdc4bizNYTLh63Tf49Y3pePL7l90T6JIEXHwxsGEDrjxvlqoS6AAwsmccfE2/IUuOuDpVNTah+xaNIyIiInLFJDoREREBAPJKRfrriscFgxiDf+PaupgQsUGIonHB4PUrxCYLFY0jEpF7rKLZcaHmGly3eiH+eOM6PPzTG0iuKHSus8kyvhtwOrBtG/DZZ0D//n5rc0vQNTPu1J6JSIpqfM6RpKgQnNrzRHmxSrPYXA6icURERESu1HOGRERERCelwizW3Vo0LhhEGrUoqvWdUIk0quOQ6eqRnTF70T9CcWohC9aFFo0jEpFXLpaodY2LMFXh6nXfYurarxFbU+4WZ9FosTjnTDw/8ELsj+qI3F69/NreliL6X1U/TquVcfdZGZi9aAsqTVYoikusBEQYtLj7rAxoXXry2xSx7ybROCIiIiJX6jgjJCIiImqGWpsGgO9klyMu+L3/Z55w3JXDerZwa1rHHQs2+g46HvfWv4a0cGuIPCgqAl54ASteex6RJvf5F0xaPRYNPgcvDZiI/Ijgm8g6LEQDs0D5lLCQhp+xE7OTAQCv/7oHB4qrYbHaoNNq0DU2FNef1sO5vo5BK/Y5LRpHRERE5IpJdCIiImq3iirFan+LxrV1R8tr/RoXDP45KlZWQzSOyF8SKktw3ZqvgFcuAaqqEOmyrkZvxBdDzsfL2eehMCwmYG08WQatDMB3Et3gpTb8xOxkTMhMwvLdBVi7dTcG9e2JUT0T3Xqg14kVnIxUNI6IiIjIFZPoREREBADQAzALxqmFWfEd05S4ti7SqEVZre+EllrK1wCAzSY2iaBoHNHJSiovxPTVC3HZxh9gtLp/6lYaw/DJsAvwav8JKDFGermH4GG1iJW1aSxOq5VxSloCIqrykZ2WAI3Gc8J9VM8EvLNiPxr7uJaOxxERERE1lXrOkIiIiOikiCTQmxIXDCSg0YSLa5wa3Hl2Om79ZLNQnFpU1Fr8GkckoneMjO0l7rW3O5cewY2rvsBFm3+G3l4vaRwXh1eyz8cbWWehwhDWii0Vp5fELijqXT4wDUY9UOt7JI/BePKXZ09JS0CnaCPyS72PpOkUHYJT0phEJyIioqbzfBmfiIiIqB0w6vwb19aN69nRr3HBwKKIXQIRjSMScekpGc6/exQdxLPfPotlb07H5Rt/cEug18YlAM8+C+Tm4plBk9tsAh2A2BXHenFj0+OFNhGNa4xjMtJeiPAykibS2HAyUiIiIiJRPIIgIiKidqt3oljCSjSurXvtt91+jQsGVotY5k80jkjEZYO6IqsoF698/SSWzpuByVuXQauc6Jl+NCoBT06YCXnPXuD224Hw8AC2VkyYoelx957VV2gb0ThfJmYnY84FmejdMQLheg2MWhnheg36JEXgkQsyG0xGSkRERCSK5VyIiIio3RKt/a2WGuFfbcgXjrvrnD4t3JrWEaqXUCZQgyJUz57o5CerV0P/6KP45n//a7DqUGwSXh95CT7JGI3/nNMX+qi2nzyv0z0xAiUHfU/A2z0xwvl3aKgOE/p1xOJNR7zGT+jXEaGh/hvuUzcZ6Yo9x1BYYUJChAEje8SzBzoRERGdFHWcERIREfmZVgKsAh1Ttcy7BbW1B8r9GtfWVZjEJs8UjQsGVYI9zEXjiLz64w9gzhzgxx8brNqf0AWvjbwEX6SNgk3WAABW7i3CzDFprd3KZhuRmoD1Akn0EanuNcfnXj4QwDqPifQJ/ToeX+9fWq2M0RmJfr9fIiIiar+YRCciIvJAr5VhtdiF4tRidFoMfttVIhSnFha7WOJUNK6tM5nFkuOiccFAEXzrROOI3CgK8PPPwCOPAL//3mD17qQeeGXEJfhf6lDYjyfP6yzfVYTKKjPCw05+Us2mmjakA95afVQozkkWvGrsIW7u5QPx9AUWPPPTThwoqUaXmFDcOT7drz3QiYiIiFoSk+hEREQejEmPw+KthUJxajF5UGehJPrkQZ1boTWtIz5Mh/xyi1CcGoTqALNZLE4tRAeLcFAJNYmiAIsXO3qe//VXg9WH0jPxyICL8F3XgYDkfe+675steP7SnJZsqUd3nJONt1b/IBRXRyeYRPcWFxqqw/3n+6f2OREREVFrU0/3OSIiIj96clK2X+OCwcpdx/waFwz+fWp3v8a1db1TxEYRiMYFgyjBCyCicdTO2e3AggXAgAHAeec1TKCPHg0sXYp/TX8J33Ub1GgCHQC2HgpMqSijUYurh3dpNObq4V1gdJkPwmjQNBLtct+CcURERETBhEl0IjppHcLFTpZE49q6EMGnIRpHbVN4mB6j0hrvZT4qLS4gw/Bbyq7Car/GBYOrhqT6PBiSj8epwWuXifV4FY0LBlEGsYGXonHUTlmtwIcfApmZwJQpwMaN7uvPPNNRzuXXX4Hx4xFhFLsoE+GH/S5C8HijftzDE7O8JtKvHt4FD0/McltWUF4r9DiicURERETBhEl0IjppPRMj/RrX1k07RaxHqmhcMNAJ1jkQjQsWH04d5jWRPiotDh9OHdbKLWpZcaFiFwRE44KBXq/BHWemNxpzx5np0OvVcVUsOsKI9A7hjcakdwhHdISxlVrU8q4c2Xhv26bGUTtjNgPz5gEZGcBVVwHbt7uvP/98YPVq4PvvgVNOcS6+7hSxC2+icY25ZpTYfXiKe3hiFnY8eCbuPD0dlwxKwZ2np2PHg2c2SKADgFEr2BNdMI6IiIgomLDLTSuSAIjMWaWyHBS1A1eN7IYVe33XUb5qZLeWb0wrGNA1DsA+wTh1SEvQY1uB70LKaQnqSa7W+XDqMFRWmfHAt9uck6E9dG4fVfVAr3NRTmf8sL1AKE5NZo5JAwC8vmwXKswnvqkj9BJuGJPmXK8WP942Gmc8/xt2Hq1ssC69Qzh+vG10AFrVcq4c3B2PfvMPGpsqVXM8jtqXgtIqXPbWahyrMiE+zIBPpg1BYnSYY2VNDfD228BTTwEHD7pvKEmO3uizZgH9+3u879P7dESoXoPqRibpDdVrcHqfjif9PK4b1R2v/LZXKM4To1GLm8b5/pzLSIr0eT4jHY8jIiIiUhsm0VtR5xgjDpT4Ht7YOUY9vb/aIxmAXTBOLcZndESEQYsKk9VrTIRRi/EZJ3+XVLsOAAAj0UlEQVSi2BZEh+kRZtCgyuT9xDjMoEG0ipKsp6QnYVvBfqE4NQoP0+PZS7ID3YwWN6Z3ImJCdSip9j7RZkyoDmN6J7Ziq1rHZ2sOuiXQAaDCrOCzNQdVl0QHHIn00opazPhkPfYdLUP3DlF49bIcVfVAr6PXa3D7mel4+oedXmNuV9FoAxIz8JEfUVR14rOurLYaQ574FSlaK5bH7AaeeQY4csR9I40GuOIK4N57gV69Gr1/rVbG45OycMcXG2D1cLig1QCPT8qCVnvyR4Tv/pUrHPef8Y23uzF9kiIRFaJFWY3VYyJdAhAVokUfJtGJiIhIhdSUx2vznr24n1/jgsGt48QSaqJxweCRyRl+jQsGWq2MORdmQq/xPI5Cr5Ew54JMv5wotgURRi1CdRp4ebrQSECoToMIo3quU64/KDbxmWgctU1arYwHz+8Lo87z/6pR51ivlv/lOqc+9QsOFNd4XHeguAanPvVLK7eodURHGPHB1KF45ZxEfDB1qCoT6HVmjknDXWemI9Lgvu9GGWXcdWa6Ki+UkHf1E+gAEGGqwsw/P8P/nrsauPNO9wS6TgdMnw7s3Am8957PBHqdidnJeHZKNtITQqGTHSdeOhnISAzFs1OyMTE72S0+XTD3XD9uxa5ioe1E47xJjQ/HqekJMB4/BpJw4kcjAUadBqPTE5Ea33jJKCIiIqJgpJ4MTxAY2DUeIToZNRbv/ZRDdDIGdo1vxVa1rLQOHQEcFoxTh0sGpOL/vvxHKE5N6k4EX/1lF/YVVcNqU6DVSEiNC8WNY9ManCgGO51WRtjxycBqrXYodgWSLMF4PLmoU1mSUbS8KcugBr+6/9XXlu1GblE1LDY7dBoZ3ePDcMNpPVT3v1xcXuM1gV7nQHENistrEBsZ0kqtopYwc0wapo1MxVcb8pFfWoPk6BBcmJ3MHujtTEFplVsCPaa6DNeu/R/+tf5bRJqq3IONRmDaNOCuu4DOzStjNTE7GRMyk7BizzEUVpiQEGHAyB7xHi9GXjQiHY99733EhGucq9b6jpZlCdNP7YGCchP2FFbCZLXDriiQJQkGrYweCeGYdmoqZJnFKYmIiEh9mERvRbIs4YsbRmDSq8vhqTyiXgN8ccMIVR14yhIQptegqpF6kGF6DVT0lKHVynjx0mzc+ukGrzEvXpqtup6cwIkTxeW7C7B2624M6tsTo3omqu65VplsiAlxlGoxWWwIM+idNULNVhuMOg2iQ/SNlnsJNmdndcRKgbr3Z2ep54JYe9Ze/pcB4Kq3VgrHLb5jbAu3hlqaXq/BJUM4gWh7NuX1Fc6/R+9dh1cXPY4wi3u5xRq9Ed+fMhEXfvgC0PHkv9e0WhmjM3yXwfJeFK/xuNb8js5MjsLsc/tgwbqD2JxfjhqzDSF6DfolR2HywBRkJked9GMQERERtUVMoreyzOQoLJwxCh8u343/bSmAyWqHQSvj/KxEXDmyp+oOPNM7RCAqVAdZllBTa3U76NcCCDFqEWHUIr1DRKCa2CLqemo+/c0G5Ll0auocBtx5XsPhu2qi1co4JS0BEVX5yE5LgEajvqRbhFGL2HA94sINOFJeg/IaK6x2BRpZQny4AR0iQ6BAUVU5l0sHdsWji3fAZPU+nZhBK+HSgV1bsVXUktrD/zIAbC9svBd6U+OIqG07WHqiF/rUNYvcEuiVxjB8MuwCvNZ/AkqNkbjQDwn0puiTFAm9VobZ6n3Uql4rN6g53trf0ZnJUeiTFIncoipU1FoRYdSiW1yYqjoCEREREdWnngxPEMlMjsJjU3Iwfaz6DzxT48MxqGssft9ZiKgwHQxaDcwWM/Q6PUxWG2x2YHDXWFXWTmzK8F0KLt3iwtAzMRyb88owoHM0Kk02Z8mLcIMGewqr0C8lGt3iwgLdVL/R6zW4ZVwanvlhp8fJxGQAt4xLY1kECjqi37zq+4Ymap9c/5e/yxiJkfs3ojIkHB8On4Q3ss5GucHx3R2Ib7NRPRKQHG3EgaIaSFAAyTHKTQIABVAgISU6BKN6JLhtF4jvaFmWkJqgvuN3IiIiIm+YRA+Q9nLg6aidmIqCilrsLayC2WaHxaYAsh1aWUZahzBV104UHb5LwUWWJUzOSUF+SQ32FFYhKSoE0aF61Jht2FNYhdgwPSblJKtuv66beO+t3/airNbqPLGPCtFi2qmpnJiPglKPeCN2HqsViiOi4JedEo51eZUAgE+yz8LiXqNQqQ+BXdY0iGttWq2M/4xPx4P/24rKWiuk45N3Ksd/Ioxa3Do+zWOHDH5HExEREbUsJtGpxWUmR2H2hD74cl0eNuWVori8ErGRoeiXEs3aiRS0MpOjcMu4NHy5Pg+7CypxtNwOg05Gv5RoTMpJVu1+XTcx38K/D2LdjlwM7NUNkwZ0Zg90ClofTxuOQY8vE4ojouD39jVDkf3oz87b5UbPyfK3rxnaWk1yU1fy743f9iCvpAZWuwKtLCElJgTXj258cmdOnktERETUcphEp1ZRVztxb2EF1m3ahoH9+iA1IUJ1PXWpfWmvNUH1eg2mDOqMNG0RsrM7Q6PhyTkFr/ioUHSMNOBIuclrTMdIA+KjQluxVUTUUqIjjEjvEI6dRyu9xqR3CEd0ROBGn5xMSUBOnktERETUMlicmVqNLEvoHh+GnrE6dI9Xf6KR2oe60kz9O0cjNSGc+zVREFo1azw6Rho8rusYacCqWeNbuUVE1JJ+vG000jt47oGe3iEcP942upVb1FBdScCLBnXG6IxEzqlDREREFGDsiU5ERETt3qpZ43GsrBpXv7MGRytN6BBuwPv/Hswe6EQq9eNto1FaUYuZn/yN/LJaJEcZMfeyAQHtgU5EREREbReT6ERERERwlHZZ0gZ6oBJR64iOMOKj6ZzvgIiIiIh847hAIiIiIiIiIiIiIiIvmEQnIiIiIiIiIiIiIvKCSXQiIiIiIiIiIiIiIi+YRCciIiIiIiIiIiIi8oJJdCIiIiIiIiIiIiIiL5hEJyIiIiIiIiIiIiLygkl0IiIiIiIiIiIiIiIvmEQnIiIiIiIiIiIiIvKCSXQiIiIiIiIiIiIiIi+YRCciIiIiIiIiIiIi8kI1SfSPPvoIY8eORVZWFqZMmYJNmzYFuklERERERO0Gj8eJiIiISK1UkURfsmQJHn/8ccycORNfffUVevXqhalTp6KoqCjQTSMiIiIiUj0ejxMRERGRmqkiiT5//nxcfPHFmDx5Mnr27ImHHnoIRqMRX375ZaCbRkRERESkejweJyIiIiI10wa6ASfLbDZj69atuP76653LZFnGiBEj8Pfffzfpvmw2m7+bR/XUvcZ8rdWN77P68T1uH/g+qx/f49al1tfZX8fj9fdHtb5e1HTcJ8gV9wdyxf2BXHF/IFf+PrYM+iR6SUkJbDYb4uLi3JbHxcVh7969TbqvzZs3+7Np1Ai+1u0D32f143vcPvB9Vj++x3Qy/HU8Xn8/5H5J9XGfIFfcH8gV9wdyxf2BXPlrfwj6JLo/KIoCAOjTpw80Gk2AW6NuNpsN27Zt42utcnyf1Y/vcfvA91n9+B63rrrXu+7YkxzqH4tzv6T6uE+QK+4P5Ir7A7ni/kCu6u8PJ3ssHvRJ9JiYGGg0mgaTFhUVFSE+Pl7oPux2OwBg27Ztfm8fecbXun3g+6x+fI/bB77P6sf3uHXVHXuqxckej3s7Fud+SfVxnyBX3B/IFfcHcsX9gVzV3x+aeywe9El0vV6Pvn37YuXKlRg/fjwAx4uxcuVKXHnllUL3odVqkZWVBVmWIUlSSzaXiIiIiNopRVFgt9uh1Qb9Ibibkz0e57E4EREREbW0kz0WV8UR/LXXXot77rkHmZmZ6NevH9577z3U1NRg0qRJQtvLsgy9Xt/CrSQiIiIiUqeTOR7nsTgRERERtXWqSKKfc845KC4uxksvvYTCwkL07t0b8+bNEy7nQkREREREzcfjcSIiIiJSM0nhzEZERERERERERERERB7JgW4AEREREREREREREVFbxSQ6EREREREREREREZEXTKITEREREREREREREXnBJDoRERERERERERERkRdMohMRERERERERERERecEkOrWKo0eP4s4778TQoUPRr18/nHfeedi8eXOgm0V+ZLPZ8MILL2Ds2LHo168fxo8fj7lz50JRlEA3jU7CmjVrcMMNN2DUqFHIyMjATz/95LZeURS8+OKLGDVqFPr164d//etfyM3NDUxjqdkae58tFguefvppnHfeecjOzsaoUaNw99134+jRowFsMTWVr/9lV/fffz8yMjLw7rvvtl4DiVx89NFHGDt2LLKysjBlyhRs2rQp0E2iVsBjDnL1xhtvYPLkyRgwYACGDx+OGTNmYO/evW4xJpMJDz30EIYOHYoBAwbg5ptvxrFjxwLUYmpJH3/8Mc477zzk5OQgJycHl1xyCX777Tfneu4L7dubb76JjIwMPProo85l3Cfal5dffhkZGRluP2eddZZzvb/2BybRqcWVlZXhsssug06nw1tvvYXFixfjnnvuQVRUVKCbRn701ltv4ZNPPsH999+PJUuW4M4778S8efPwwQcfBLppdBKqq6uRkZGBBx54wOP6t956Cx988AEefPBBfP755wgJCcHUqVNhMplauaV0Mhp7n2tra7Ft2zbceOONWLhwIV555RXs27cPN954YwBaSs3l63+5ztKlS7Fx40YkJia2UsuI3C1ZsgSPP/44Zs6cia+++gq9evXC1KlTUVRUFOimUQvjMQe5Wr16Na644gp8/vnnmD9/PqxWK6ZOnYrq6mpnzGOPPYZly5bhhRdewAcffICCggLcdNNNAWw1tZSOHTvizjvvxMKFC/Hll19i2LBhmDlzJnbt2gWA+0J7tmnTJnz66afIyMhwW859ov1JS0vD8uXLnT8ff/yxc53f9geFqIU9/fTTymWXXRboZlALmz59unLvvfe6LbvpppuUO+64I0AtIn9LT09Xli5d6rxtt9uVkSNHKvPmzXMuKy8vVzIzM5Vvv/02EE0kP6j/PnuyceNGJT09XcnPz2+lVpE/eXuPjxw5opxyyinKzp07lTFjxijz589v/cZRu3fRRRcpDz30kPO2zWZTRo0apbzxxhsBbBW1Nh5zUH1FRUVKenq6snr1akVRHO9/3759le+++84Zs3v3biU9PV35+++/A9RKak2DBw9WPv/8c+4L7VhlZaVyxhlnKCtWrFCuvPJKZc6cOYqi8POhPXrppZeU888/3+M6f+4P7IlOLe6XX35BZmYmbrnlFgwfPhwXXHABPv/880A3i/xswIABWLVqFfbt2wcA2LFjB9atW4dTTz01wC2jlpKXl4fCwkKMGDHCuSwiIgL9+/fH33//HcCWUUurrKyEJEmIjIwMdFPIT+x2O+666y5MnToVaWlpgW4OtVNmsxlbt251+16RZRkjRozg90o7x2MOqqioAADnaOYtW7bAYrG47RM9evRAp06dsGHDhkA0kVqJzWbD4sWLUV1djQEDBnBfaMcefvhhjB492u29B/j50F7t378fo0aNwrhx43DHHXfg0KFDAPy7P2j92WAiTw4ePIhPPvkE1157LW644QZs3rwZc+bMgU6nw4UXXhjo5pGfTJ8+HZWVlTj77LOh0Whgs9lw22234fzzzw9006iFFBYWAgDi4uLclsfFxbHenIqZTCY888wzmDBhAsLDwwPdHPKTt956C1qtFldffXWgm0LtWElJCWw2m8fvlfq1kKl94TFH+2a32/HYY48hJycH6enpAIBjx45Bp9M1uKAfFxfn3F9IXf755x9ceumlMJlMCA0Nxdy5c9GzZ09s376d+0I7tHjxYmzbtg0LFixosI6fD+1Pv3798Pjjj6N79+4oLCzE3LlzccUVV+Cbb77x6/7AJDq1OEVRkJmZidtvvx0A0KdPH+zatQuffvopk+gq8t133+Gbb77Bs88+6zyYefzxx5GYmMj3mUglLBYLbr31ViiKgoceeijQzSE/2bJlC95//30sXLgQkiQFujlERERuHnroIezatcutvi21P927d8eiRYtQUVGBH374Affccw8+/PDDQDeLAuDw4cN49NFH8c4778BgMAS6OdQGjB492vl3r1690L9/f4wZMwbfffcdjEaj3x6H5VyoxSUkJKBHjx5uy1JTU51DK0gdnnrqKUyfPh0TJkxARkYGLrjgAlxzzTV44403At00aiEJCQkA0GCyt6KiIsTHxweiSdSCLBYL/vOf/+DQoUN455132AtdRdauXYuioiKMGTMGffr0QZ8+fZCfn48nn3wSY8eODXTzqB2JiYmBRqPh9wo1wGOO9uvhhx/Gr7/+ivfeew8dO3Z0Lo+Pj4fFYkF5eblbfFFRkXN/IXXR6/Xo2rUrMjMzcccdd6BXr154//33uS+0Q1u3bkVRUREmTZrkPHZdvXo1PvjgA/Tp04f7BCEyMhLdunXDgQMH/Lo/MIlOLS4nJ8dZJ7tObm4ukpOTA9Qiagm1tbUNejBqNBooihKgFlFLS0lJQUJCAlauXOlcVllZiY0bN2LAgAEBbBn5W10Cff/+/Xj33XcRExMT6CaRH02cOBH/+9//sGjRIudPYmIipk6dinnz5gW6edSO6PV69O3b1+17xW63Y+XKlfxeaed4zNH+KIqChx9+GEuXLsV7772Hzp07u63PzMyETqdz2yf27t2LQ4cOITs7u5VbS4Fgt9thNpu5L7RDw4YNwzfffON27JqZmYnzzjvP+Tf3ifatqqoKBw8eREJCgl/3B5ZzoRZ3zTXX4LLLLsPrr7+Os88+G5s2bcLnn3+Ohx9+ONBNIz8aM2YMXn/9dXTq1MlZzmX+/PmYPHlyoJtGJ6GqqgoHDhxw3s7Ly8P27dsRFRWFTp064eqrr8Zrr72Grl27IiUlBS+++CISExMxfvz4ALaamqqx9zkhIQG33HILtm3bhjfeeAM2m81ZOy4qKgp6vT5QzaYm8PW/XP/CiE6nQ3x8PFJTU1u7qdTOXXvttbjnnnuQmZmJfv364b333kNNTQ0mTZoU6KZRC+MxB7l66KGH8O233+LVV19FWFiY89gjIiICRqMRERERmDx5Mp544glERUUhPDwcc+bMwYABA5gkU6Fnn30Wp556KpKSklBVVYVvv/0Wq1evxttvv819oR0KDw93zo9QJzQ0FNHR0c7l3CfalyeffBJjxoxBp06dUFBQgJdffhmyLOPcc8/162eEpLCbKLWCZcuW4bnnnkNubi5SUlJw7bXX4uKLLw50s8iPKisr8eKLL+Knn35CUVEREhMTMWHCBMycOZNJtiD2119/eZxo8MILL8QTTzwBRVHw0ksv4fPPP0d5eTkGDhyIBx54AN27dw9Aa6m5Gnufb7rpJowbN87jdu+//z6GDh3a0s0jP/D1v1zf2LFjcfXVV+Nf//pXK7SOyN2HH36It99+G4WFhejduzdmz56N/v37B7pZ1MJ4zEGuMjIyPC5//PHHnRfVTCYTnnjiCSxevBhmsxmjRo3CAw88wHINKjRr1iysWrUKBQUFiIiIQEZGBqZNm4aRI0cC4L5AwFVXXYVevXrh//7v/wBwn2hvbrvtNqxZswalpaWIjY3FwIEDcdttt6FLly4A/Lc/MIlOREREREREREREROQFa6ITEREREREREREREXnBJDoRERERERERERERkRdMohMRERERERERERERecEkOhERERERERERERGRF0yiExERERERERERERF5wSQ6EREREREREREREZEXTKITEREREREREREREXnBJDoREbVrFosl0E0gIiIiIiIiojZMG+gGEBERtabt27fj3XffxYYNG1BcXAyTyYQVK1YgIiIi0E0jIiIiIiIiojaIPdGJqN3773//ixkzZrgtKy4uxrnnnospU6agoqIiQC0jf/vrr79w+eWXIz4+Hs899xwWLFiApUuXMoFOREREFGR4DE9ERK2JPdGJiOopLi7GNddcA4PBgHfeeYcJVpVQFAX33XcfZs2ahSlTpgS6OURERETkRzyGJyKilsSe6ERELuoOvnU6HebPn+928H3o0CHceOONGDBgAHJycnDrrbfi2LFjbtvn5eUhIyOjwU95eTkA4OWXX8bEiROd8WazGaeffrpbjKdeNRkZGfjpp5+ctw8fPoxbb70VgwYNwpAhQ3DjjTciLy/PbZsFCxZgwoQJyMzMxKhRo/Dwww8DAMaOHeuxjRkZGVi4cKHz8ep+cnJycO211+LAgQPO+y4rK8Pdd9+NwYMHo3///rjuuuuQm5vb6GtbXl6O+++/HyNGjEBWVhbOPfdcLFu2DH/99ZfX9mRkZDi3/+GHH5zPZ+zYsXjnnXcaPMbLL7/cYPu613Lv3r04dOgQ9u/fjzFjxiArKwsXX3wx1q5d69y+ri1174W319/X81+4cKHz8Xv37o1Ro0bh6aefht1ub/Q1IiIiIqKm4zF82zyGX7hwIQYNGoSffvoJZ5xxBrKysjB16lQcPnzY7TE+/vhjjB8/HpmZmTjzzDOxaNEir6+joii4++67cd5556GsrKzRthMR+ROT6EREx5WUlODaa6+FVqvF/PnzERkZ6Vxnt9sxY8YMlJWV4YMPPsD8+fNx8OBB3HbbbW73oSgKAODdd9/F8uXL8fLLLzf6mB999FGDg3hfLBYLpk6dirCwMHz00Uf45JNPEBoaiuuuuw5msxmA40D04YcfxsUXX4xvvvkGr776Krp06QLAcWC+fPlyLF++HB07dsSsWbOct8855xzn4zz++ONYvnw5PvroIxQVFeG5555zrvvvf/+LLVu24LXXXsNnn30GRVEwffp0r5N02u12TJs2DevXr8fTTz+NJUuW4I477oAsyxgwYIDz8eter7rby5cvBwBs2bIF//nPf3DOOefgm2++wU033YQXX3zRecJQR1EUpKWlObc9++yzneuKi4thsVjw9ddf48EHH8SiRYvQq1cvTJs2DQUFBU16D0Sef3h4OJYvX45ff/0Vs2bNwrx58/DHH3806XGIiIiIqHE8hm+7x/AAUFtbi9deew1PPvkkPvnkE5SXl7u9/kuXLsVjjz2Ga6+9Ft988w0uvfRSzJo1C6tWrfLYpjlz5uDvv//GO++8g6ioqCa9B0REJ4PlXIiI4Ohhce2112LPnj3o27cvwsPD3davXLkSO3fuxM8//4ykpCQAwFNPPYUJEyZg06ZN6NevHwDAarUCAOLj45GQkNDogV1paSlee+01TJs2DS+++KJzucFggMlk8rrdkiVLYLfb8eijj0KSJACOg+XBgwdj9erVGDVqFF577TVce+21uOaaa5zb1bUxNjbWuUyj0SAiIgIJCQkNHicyMhIJCQkwGo0ICwtz9ujJzc3FL7/8gk8++QQ5OTkAgGeeeQannXYafvrpJ7fEdZ0///wTmzZtwpIlS9C9e3cAQOfOnZ3r6x6/7vWq35758+dj+PDhmDlzJgCge/fu2L17N95++21MmjTJGWe1WmEwGJzbG41G50lJXS/wu+++G6NHjwYAPPjgg/jrr7/w0UcfNTiZ8kb0+UuS5GxHSkoKZFnmsGIiIiIiP+IxfNs+hgccFw/uv/9+9O/fHwDwxBNP4JxzznG+/m+//TYuvPBCXHHFFQAcx/kbNmzAO++8g2HDhrnd1/PPP4+lS5fi448/9vhYREQtiT3RiYgArFmzBna7HYsWLcL+/fsxb948t/V79uxBx44dnQffANCzZ09ERkZi7969zmWVlZUAgJCQEJ+POXfuXAwdOhQDBw50W56eno4NGzbg4MGDHrfbsWMHDhw4gJycHAwYMAADBgzA0KFDYTKZcODAARQVFaGgoADDhw8Xfv6e3H777RgwYAAGDx6Mqqoq3H777QAcr4VWq3UeCANATEwMunfvjj179ni8r+3bt6Njx47Og++m2rt3r/Ngv05OTg72798Pm83mXFZZWYnQ0NBG78v1fup60Xhrtyeiz7+iogIDBgxAv379cPHFF2PatGkNngMRERERNR+P4RtqS8fwAKDVapGVleW83aNHD0RGRjof09txfv02ffjhh3j99dfRvXt3pKSkNLs9RETNxZ7oRERw9Kh49913ERsbiwceeAB33XUXRo8ejV69ejXpfgoKCiDLss+eEbm5uViwYAEWLVqEI0eOuK2bPHkyli5divHjx3tMCFdXV6Nv37545plnGqyLjY119mw5Wffeey9GjBiB8vJyvPDCC7j33nvx+uuvN+u+jEajX9rkS0FBARITEz2ua6xHkb9eM1dhYWH46quvoCgKdu/ejVmzZqFv374488wz/f5YRERERO0Rj+EbCsZjeBGbNm3Cm2++iXvvvReffvopLr300kA3iYjaGfZEJyKCo+dI3RDJs88+G2eccQbuueceZymQHj164MiRI26T4OzevRvl5eXo0aOHc9nmzZuRmpoKg8HQ6OM988wzuOiii9C1a9cG64xGI959912sWLECixYtajCxTt++fbF//37ExcWha9eubj8REREIDw9HcnIyVq5c2dyXA4BjOGbXrl2RlZWFK6+8Er/++issFgt69OgBq9WKjRs3OmNLSkqwb98+9OzZ0+N9ZWRk4MiRI9i3b1+z2pKamor169e7LVu/fj26desGjUYDwFGuZdu2bejdu7fH++jcuTO0Wq3b/djtdvz9999u76Evos9flmV07doV3bp1w/jx4zFs2DAsXbpU+HGIiIiIqHE8hm+oLR3DA45SOVu2bHHe3rt3r9vr7+04v36bZs2ahdGjR+OBBx7AU089hUOHDjW7TUREzcEkOhGRB/fffz+Kioowd+5cAMCIESOQnp6OO++8E1u3bsWmTZtw9913Y8iQIcjKyoLZbMaiRYvw7rvvutXo9uTAgQNYvXq1s763N/Hx8c4Da1fnnXceYmJicOONN2Lt2rU4ePAg/vrrL8yZM8fZI+bmm2/G/Pnz8f777yM3Nxdbt27FBx980KTXoLy8HIWFhdi7dy8WLFiAzp07Q6fToVu3bhg3bhzuu+8+rF27Fjt27MBdd92FDh06YNy4cR7va8iQIRg0aBBuueUWrFixAgcPHsRvv/2G33//Xagt//73v7Fy5UrMnTsX+/btw1dffYWPPvoI//73vwEAhw8fxuzZs1FUVOQ2sZKrsLAwTJkyBU899RR+++037NmzBw8++CAKCgpw+eWXu8WazWaYTCbnD+Co52i324Wfv6IoKCwsREFBAVatWoXVq1cjNTVV6PkSERERUdPxGL5tHcMDgE6nwyOPPIKNGzdiy5YtuPfee5Gdne2s9X7dddfhq6++wscff4zc3FzMnz8fS5cudR7n14mOjgYAnHnmmRg9ejRmz57dpNeFiOhksZwLEZEH0dHRmDNnDmbMmIGxY8eif//+ePXVV/HII4/gyiuvhCRJOOWUU3DfffcBAHbu3IlXXnkFM2bMwLXXXtvofVdXV+Oee+5xHgg2VUhICD788EM888wzuOmmm1BVVYUOHTpg+PDhzsmULrzwQphMJrz77rt46qmnEB0djbPOOqtJj3PvvfcCcCSf+/bti5deesm57vHHH8ejjz6KG264ARaLBYMGDcKbb74JnU7n9f5efvllPPnkk7j99ttRU1ODrl274o477hBqS9++ffHCCy/gpZdewmuvvYaEhATccsstzpOd999/HwcOHMDbb7+NTp06eb2fe+65B5Ik4Z577kFlZSX69u2LefPmNSgBM3LkyAbb/uc//8H777+PoUOHCj3/yspKjBo1CpIkIT4+HmeddRauu+46oedLRERERE3HY/i2dQwPOHroT5s2DXfccQeOHj2KQYMG4dFHH3WuHz9+PGbNmoV33nkHjz32GJKTk/HYY49h6NChXu/zvvvuw7nnnovPPvsMl1xyiXBbiIhOhqQoihLoRhAREbV1M2bMwDXXXNPoAT0RERERETksXLgQjz32GNauXRvophARnTSWcyEiIhKg0+kgy/zaJCIiIiIiImpvWM6FiIhIwIsvvhjoJhARERERERFRALCcCxERERERERERERGRFxyXTkRERERERERERETkBZPoREREREREREREREReMIlOREREREREREREROQFk+hERERERERERERERF4wiU5ERERERERERERE5AWT6EREREREREREREREXjCJTkRERERERERERETkBZPoREREREREREREREReMIlOREREREREREREROTF/wOh5U9VeFBJ4QAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "\n", + "# Настройка стиля\n", + "sns.set_style(\"whitegrid\")\n", + "\n", + "# Создаем фигуру с двумя подграфиками\n", + "fig, axes = plt.subplots(1, 2, figsize=(15, 6))\n", + "\n", + "# Первый график с регрессионной линией\n", + "sns.regplot(data=df_dif, x='count columns', y='percent_sem', \n", + " scatter_kws={'alpha': 0.6}, line_kws={'color': 'red'}, ax=axes[0])\n", + "axes[0].set_xlabel('Количество столбцов')\n", + "axes[0].set_ylabel('Эффективность (%)')\n", + "axes[0].set_title('Зависимость эффективности метода от количества столбцов')\n", + "\n", + "# Второй график с регрессионной линией\n", + "sns.regplot(data=df_dif, x='count rows', y='percent_sem', \n", + " scatter_kws={'alpha': 0.6}, line_kws={'color': 'red'}, ax=axes[1])\n", + "axes[1].set_xlabel('Количество строк')\n", + "axes[1].set_ylabel('Эффективность (%)')\n", + "axes[1].set_title('Зависимость эффективности метода от количества строк')\n", + "\n", + "plt.tight_layout()\n", + "plt.savefig('./row_col_efficent.png',dpi=300)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "7a27ef30-2fbe-48fa-8a7d-2442715c1b90", + "metadata": {}, + "outputs": [], + "source": [ + "def parse_panda_code(input_string):\n", + " \"\"\"\n", + " Парсит строку и извлекает код, который находится внутри конструкции \"PANDA\": <код>\n", + " Поддерживает различные форматы: JSON, простой текст, Markdown\n", + " \n", + " Args:\n", + " input_string (str): Входная строка для парсинга\n", + " \n", + " Returns:\n", + " str: Извлеченный код или пустая строка, если код не найден\n", + " \"\"\"\n", + " # Сначала попробуем найти JSON объект с PANDA\n", + " json_pattern = r'\\{[^{}]*(?:CORRECT PANDA|PANDA)\":\\s*(.+?)(?:\\n|$)?\\}'\n", + " json_match = re.search(json_pattern, input_string, re.DOTALL)\n", + " code = None\n", + " pattern = r'\"(?:CORRECT PANDA|PANDA)\":\\s*(.+?)(?:\\n|$)'\n", + " if json_match:\n", + " code = json_match.group(1).strip()\n", + " else:\n", + " match = re.search(pattern, input_string, re.DOTALL)\n", + " if match:\n", + " # Извлекаем код и убираем лишние пробелы по краям\n", + " code = match.group(1).strip()\n", + " # Заменяем одинарные кавычки внутри строки для корректного парсинга JSON\n", + "\n", + " # Если JSON не найден или не распарсился, используем старый метод\n", + " # Паттерн для поиска кода после \"PANDA\": \n", + " # Ищет \"PANDA\": за которым следует пробел, затем код до конца строки или до следующего символа\n", + " if code != None:\n", + " # Убираем возможные кавычки вокруг кода\n", + " if code.startswith('\"') and code.endswith('\"'):\n", + " code = code[1:-1]\n", + " elif code.startswith(\"'\") and code.endswith(\"'\"):\n", + " code = code[1:-1]\n", + " \n", + " return code\n", + " \n", + " return \"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "e69311f6-b243-49c2-9ae5-70bd5269077e", + "metadata": {}, + "outputs": [], + "source": [ + "system_prompt = '''\n", + "### Instruction:\n", + "You are a Python expert specializing in pandas. Your task is to translate the\n", + "given natural language query into a single-line pandas expression. This\n", + "expression must be valid and executable to verify the truth of the statement\n", + "using the provided table. Consider the following:\n", + "1. The table schema is represented in XML format.\n", + "2. The table is represented as a pandas DataFrame named df.\n", + "3. Do not include explanations, comments, or multiline outputs.\n", + "4. Ensure the output is concise, correct, and when run outputs either True or\n", + "False, and strictly in the following Json Format with a single key \"PANDA\":\n", + "\"PANDA\": \"\"\n", + "\n", + "### Table schema\n", + "{table}\n", + "### Query\n", + "{query}\n", + "### Response:\\n\n", + "'''" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "657a2614-e7d1-4cbf-892f-cc1c6c3f5efb", + "metadata": {}, + "outputs": [], + "source": [ + "system_correcting_prompt = '''\n", + "You are a Python expert specializing in pandas. Your task is to correct a pandas code that translates a given natural language query into a pandas expression. The input table schema,query, code, along with the specific error it contains, is provided.\n", + "Your corrected pandas_code must be valid and executable by running the code\n", + "snippet str(bool(eval(pandas_code))) ensuring it accurately evaluates the truth\n", + "of the statement using the provided table with no errors.\n", + "Make sure the pandas_code is of type boolean. Consider the following:\n", + "1. The table schema is represented in XML format.\n", + "2. The table is represented as a pandas DataFrame named df.\n", + "3. Do not include explanations, comments, or multiline outputs.\n", + "4. Ensure the output is concise, correct, and when run outputs either True or\n", + "False, and strictly in the following Json Format with a single key \"CORRECT PANDA\": \n", + "\"CORRECT PANDA\": \"\"\n", + "\n", + "### Table schema\n", + "{table}\n", + "### Query\n", + "{query}\n", + "### CODE\n", + "{code_str}\n", + "### ERROR\n", + "{error_str}\n", + "### Response:\\n\n", + "'''" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "039f55b7-c38a-44bd-8194-5b6e2ccbf6c4", + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'table' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[62], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m system_correcting_prompt\u001b[38;5;241m.\u001b[39mformat(table\u001b[38;5;241m=\u001b[39m\u001b[43mtable\u001b[49m, query\u001b[38;5;241m=\u001b[39mquery,code_str\u001b[38;5;241m=\u001b[39mcode_str,error_str\u001b[38;5;241m=\u001b[39merror_str)\u001b[38;5;241m.\u001b[39mlstrip()\n", + "\u001b[0;31mNameError\u001b[0m: name 'table' is not defined" + ] + } + ], + "source": [ + "system_correcting_prompt.format(table=table, query=query,code_str=code_str,error_str=error_str).lstrip()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "100d1403-a779-4ba8-bc58-28b9b9919ec0", + "metadata": {}, + "outputs": [], + "source": [ + "code = parse_panda_code(response)\n", + " if not code: # Если не удалось извлечь код\n", + " print(f\"Iteration {iter_id}: Failed to parse code from response\",f\"text: {response}\")\n", + " return correct_code(df, table,query, code_str, error_str, iter_id=iter_id+1,\n", + " max_tokens=max_tokens, top_p=top_p, temperature=temperature,\n", + " server_url=server_url, api_key=api_key, model_name=model_name,\n", + " system_correcting_prompt=system_correcting_prompt, max_iter=max_iter,add_df_info=add_df_info)\n", + " \n", + " try:\n", + " # Пробуем выполнить исправленный код\n", + " pandas_eval = str(bool(eval(code)))\n", + " print(f\"Iteration {iter_id}: Code corrected successfully\")\n", + " return True, code, response\n", + " except Exception as e:\n", + " print(f\"Iteration {iter_id}: Code execution failed with error: {e}\")\n", + " # Рекурсивно пытаемся исправить новый код\n", + " return correct_code(df, table,query, code, f'{type(e).__name__}: {e}', iter_id=iter_id+1," + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "798a5954-1622-471f-844e-e4389661f3d0", + "metadata": {}, + "outputs": [], + "source": [ + "system_prompt.format(table=entry[serialized_table_field], query=entry['statement']).lstrip()" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "id": "90d4ca21-d4b8-4090-98a7-dbb54cb0202a", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 12887/12887 [01:08<00:00, 188.30it/s]\n" + ] + } + ], + "source": [ + "from tqdm import tqdm\n", + "from datasets import Dataset\n", + "sep_data_len_token = []\n", + "cossim_data_len_token = []\n", + "defgen_data_len_token = []\n", + "diff = []\n", + "for data in tqdm(Dataset.from_pandas(data_sem_formats)):\n", + " sep_data_len_token.append(compute_tokens_lenghts(data['nlsep'],tokenizer))\n", + " cossim_data_len_token.append(compute_tokens_lenghts(data['cossim'],tokenizer))\n", + " defgen_data_len_token.append(compute_tokens_lenghts(data['defgen'],tokenizer))\n", + " diff.append(defgen_data_len_token[-1]-cossim_data_len_token[-1])" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "5ae9221f-edcc-4c53-a1bd-a4d138eed571", + "metadata": {}, + "outputs": [], + "source": [ + "import re" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "id": "3063b4f3-fdce-4f88-a86b-3ed126d47ccb", + "metadata": {}, + "outputs": [], + "source": [ + "def parse_panda_code(input_string):\n", + " \"\"\"\n", + " Парсит строку и извлекает код, который находится внутри конструкции \"PANDA\": <код>\n", + " Поддерживает различные форматы: JSON, простой текст, Markdown\n", + " \n", + " Args:\n", + " input_string (str): Входная строка для парсинга\n", + " \n", + " Returns:\n", + " str: Извлеченный код или пустая строка, если код не найден\n", + " \"\"\"\n", + " # Сначала попробуем найти JSON объект с PANDA\n", + " json_pattern = r'\\{[^{}]*(?:CORRECT PANDA|PANDA)\":\\s*(.+?)(?:\\n|$)?\\}'\n", + " json_match = re.search(json_pattern, input_string, re.DOTALL)\n", + " code = None\n", + " pattern = r'\"(?:CORRECT PANDA|PANDA)\":\\s*(.+?)(?:\\n|$)'\n", + " if json_match:\n", + " code = json_match.group(1).strip()\n", + " else:\n", + " match = re.search(pattern, input_string, re.DOTALL)\n", + " if match:\n", + " # Извлекаем код и убираем лишние пробелы по краям\n", + " code = match.group(1).strip()\n", + " # Заменяем одинарные кавычки внутри строки для корректного парсинга JSON\n", + "\n", + " # Если JSON не найден или не распарсился, используем старый метод\n", + " # Паттерн для поиска кода после \"PANDA\": \n", + " # Ищет \"PANDA\": за которым следует пробел, затем код до конца строки или до следующего символа\n", + " if code != None:\n", + " # Убираем возможные кавычки вокруг кода\n", + " if code.startswith('\"') and code.endswith('\"'):\n", + " code = code[1:-1]\n", + " elif code.startswith(\"'\") and code.endswith(\"'\"):\n", + " code = code[1:-1]\n", + " \n", + " return code\n", + " \n", + " return \"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "id": "d1de4423-e4e2-4d60-a2f2-776efeadf66f", + "metadata": {}, + "outputs": [], + "source": [ + "def find_bed_code(ex):\n", + " ex['err'] = ''\n", + " ex['code'] = ''\n", + " df = pd.read_csv(StringIO(ex['table_text']), delimiter='#')\n", + " for col in df.columns:\n", + " try:\n", + " df[col] = pd.to_numeric(df[col])\n", + " except ValueError:\n", + " # Если возникает ошибка, оставляем столбец как есть\n", + " continue\n", + " \n", + " \n", + " try:\n", + " code = parse_panda_code(ex['defgen_answ'])\n", + " ex['code'] = code\n", + " pandas_eval = str(bool(eval(code,{'df': df, 'pd': pd})))\n", + " ex['code_executeble'] = True\n", + " except Exception as e:\n", + " print(e)\n", + " ex['err'] = f'{type(e).__name__}: {e}'\n", + " ex['code_executeble'] = False\n", + "\n", + " return ex" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "id": "b64b4092-9096-492d-84df-e65948daeefc", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "aafee44269b4481e83e879bec6958063", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Map (num_proc=16): 0%| | 0/12887 [00:00, line 0)\n", + "DataFrame.ne() missing 1 required positional argument: 'other'\n", + "The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "index 0 is out of bounds for axis 0 with size 0\n", + "DataFrame.sort_values() missing 1 required positional argument: 'by'\n", + "DataFrame.nlargest() missing 1 required positional argument: 'columns'\n", + "index 0 is out of bounds for axis 0 with size 0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Column 'league apps' has dtype object, cannot use method 'nlargest' with this dtype\n", + "invalid literal for int() with base 10: '39 (1)'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "invalid syntax (, line 0)\n", + "invalid literal for int() with base 10: '14.14'\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "list index out of range\n", + "single positional indexer is out-of-bounds\n", + "could not convert string to float: 'free'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "single positional indexer is out-of-bounds\n", + "Lengths must match to compare\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "invalid literal for int() with base 10: '2 (10)'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "invalid literal for int() with base 10: '0 (1'\n", + "index 0 is out of bounds for axis 0 with size 0The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "invalid literal for int() with base 10: '0 (1'\n", + "invalid literal for int() with base 10: '2 (4'\n", + "single positional indexer is out-of-bounds\n", + "cannot convert float NaN to integer\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "invalid literal for int() with base 10: 'playoff'" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "cannot convert float NaN to integer\n", + "cannot convert float NaN to integer\n", + "operands could not be broadcast together with shapes (0,) (2,) \n", + "cannot convert float NaN to integerindex 0 is out of bounds for axis 0 with size 0\n", + "\n", + "index 1 is out of bounds for axis 0 with size 1\n", + "object of type 'numpy.int64' has no len()\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "invalid literal for int() with base 10: 'postponed (cold weather) rescheduled for august 19'\n", + "invalid literal for int() with base 10: 'postponed (cold weather) rescheduled for august 19'\n", + "invalid literal for int() with base 10: 'postponed (cold weather) rescheduled for august 19'\n", + "invalid literal for int() with base 10: 'postponed (cold weather) rescheduled for august 19'\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().single positional indexer is out-of-bounds\n", + "\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "could not convert string to float: '13.4%'\n", + "index 0 is out of bounds for axis 0 with size 0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'>' not supported between instances of 'str' and 'int'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'numpy.bool' object is not iterable\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "'bool' object is not iterable\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "invalid literal for int() with base 10: 'all'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "invalid literal for int() with base 10: 'all'unterminated string literal (detected at line 1) (, line 1)\n", + "\n", + "invalid literal for int() with base 10: 'present'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0cannot convert float NaN to integer\n", + "\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "can only convert an array of size 1 to a Python scalar\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "invalid syntax (, line 0)\n", + "invalid literal for int() with base 10: '6.7'\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "invalid literal for int() with base 10: 'postponed due to weather (september 14)'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "invalid literal for int() with base 10: 'w 24'\n", + "invalid literal for int() with base 10: 'w 12'\n", + "('Lengths must match to compare', (1,), (2,))\n", + "single positional indexer is out-of-boundsufunc 'less' did not contain a loop with signature matching types (, ) -> None\n", + "\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "index 0 is out of bounds for axis 0 with size 0\n", + "Can only compare identically-labeled Series objects\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "operands could not be broadcast together with shapes (8,) (2,) \n", + "could not convert string to float: '1.133 ghz'\n", + "could not convert string to float: '1 ghz'\n", + "could not convert string to float: '1.6 v'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "could not convert string to float: '1 ghz'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "single positional indexer is out-of-bounds\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "cannot convert float NaN to integer\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "closing parenthesis ')' does not match opening parenthesis '[' (, line 1)\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "invalid literal for int() with base 10: '5 (13)'\n", + "'no of cu - o planes in unit cell in unit cell'\n", + "'no of cu - o planes in unit cell in unit cell'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0index 0 is out of bounds for axis 0 with size 0\n", + "\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "Can only compare identically-labeled Series objects\n", + "Column 'ascent time' has dtype object, cannot use method 'nsmallest' with this dtype\n", + "'<' not supported between instances of 'float' and 'str'\n", + "cannot add indices of unequal length\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "can only convert an array of size 1 to a Python scalar\n", + "Cannot perform 'rand_' with a dtyped [bool] array and scalar of type [bool]\n", + "invalid literal for int() with base 10: '3 ( a )'\n", + "single positional indexer is out-of-bounds\n", + "invalid literal for int() with base 10: '3 ( a )'\n", + "invalid literal for int() with base 10: '3 ( a )'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "invalid literal for int() with base 10: 'present'\n", + "invalid literal for int() with base 10: 'postponed'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Can only compare identically-labeled Series objects\n", + "list index out of range\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "invalid literal for int() with base 10: '3 (10)'\n", + "invalid literal for int() with base 10: '3 (11)'\n", + "index 0 is out of bounds for axis 0 with size 0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "single positional indexer is out-of-bounds\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "have leftover unitsindex 0 is out of bounds for axis 0 with size 0\n", + "\n", + "list index out of range\n", + "cannot convert float NaN to integer\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "Can only compare identically-labeled Series objects\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: FutureWarning: The behavior of Series.idxmax with all-NA values, or any-NA and skipna=False, is deprecated. In a future version this will raise ValueError\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "invalid literal for int() with base 10: '235 / 771'\n", + "Out of bounds nanosecond timestamp: 1666, at position 0. You might want to try:\n", + " - passing `format` if your strings have a consistent format;\n", + " - passing `format='ISO8601'` if your strings are all ISO8601 but not necessarily in exactly the same format;\n", + " - passing `format='mixed'`, and the format will be inferred for each element individually. You might want to use `dayfirst` alongside this.\n", + "'td \"s'\n", + "'td \"s'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "'str' object has no attribute 'isin'\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'courtney walsh'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "invalid literal for int() with base 10: 'points against'\n", + "invalid literal for int() with base 10: '5 (ot)'\n", + "invalid literal for int() with base 10: '5 (ot)'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "invalid literal for int() with base 10: 'unknown'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "unterminated string literal (detected at line 1) (, line 1)\n", + "single positional indexer is out-of-bounds\n", + "invalid literal for int() with base 10: '+ 9.8 secs'\n", + "invalid syntax (, line 0)\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "invalid literal for int() with base 10: 'chelsea won 4 - 2 on penalties'\n", + "cannot convert float NaN to integer\n", + "time data \"19 / 02 / 2000\" doesn't match format \"%m / %d / %Y\", at position 1. You might want to try:\n", + " - passing `format` if your strings have a consistent format;\n", + " - passing `format='ISO8601'` if your strings are all ISO8601 but not necessarily in exactly the same format;\n", + " - passing `format='mixed'`, and the format will be inferred for each element individually. You might want to use `dayfirst` alongside this.\n", + "time data \"19 / 02 / 2000\" doesn't match format \"%m / %d / %Y\", at position 1. You might want to try:\n", + " - passing `format` if your strings have a consistent format;\n", + " - passing `format='ISO8601'` if your strings are all ISO8601 but not necessarily in exactly the same format;\n", + " - passing `format='mixed'`, and the format will be inferred for each element individually. You might want to use `dayfirst` alongside this.could not convert string to float: '1383.7±1.0'\n", + "\n", + "could not convert string to float: '1115.683(6)'\n", + "'riptides'\n", + "unit abbreviation w/o a number\n", + "cannot convert float NaN to integer\n", + "expected hh:mm:ss format before .\n", + "'bool' object is not iterable\n", + "invalid literal for int() with base 10: 'first league , 1'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "invalid syntax (, line 0)\n", + "invalid syntax (, line 0)\n", + "invalid syntax (, line 0)\n", + "invalid syntax (, line 0)\n", + "'bool' object is not iterable\n", + "Cannot interpret '' as a data type\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'winner'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "unhashable type: 'Series'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "invalid literal for int() with base 10: 'attendance'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "'honda v6'\n", + "1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "index 0 is out of bounds for axis 0 with size 0\n", + "filter function returned a Series, but expected a scalar bool\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "could not convert string to float: '08.08.0mbit/s'\n", + "('Lengths must match to compare', (1,), (3,))\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "invalid literal for int() with base 10: '2010 -'\n", + "invalid literal for int() with base 10: '2010 -'\n", + "single positional indexer is out-of-bounds\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "index 0 is out of bounds for axis 0 with size 0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "invalid literal for int() with base 10: '50000 (but received 65000)'\n", + "'september 14'\n", + "missing ), unterminated subpattern at position 0\n", + "invalid literal for int() with base 10: '2 ( aet )'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "invalid unit abbreviation: '\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "invalid literal for int() with base 10: '71 + 71 + 65 = 207'\n", + "cannot convert the series to \n", + "index 0 is out of bounds for axis 0 with size 0\n", + "ufunc 'less' did not contain a loop with signature matching types (, ) -> None\n", + "ufunc 'less' did not contain a loop with signature matching types (, ) -> None\n", + "single positional indexer is out-of-bounds\n", + "time data \"00 jan 1960\" doesn't match format \"%d %b %Y\", at position 2. You might want to try:\n", + " - passing `format` if your strings have a consistent format;\n", + " - passing `format='ISO8601'` if your strings are all ISO8601 but not necessarily in exactly the same format;\n", + " - passing `format='mixed'`, and the format will be inferred for each element individually. You might want to use `dayfirst` alongside this.\n", + "'wednesday'\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "can only convert an array of size 1 to a Python scalar\n", + "single positional indexer is out-of-bounds\n", + "'bool' object is not iterable\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "invalid literal for int() with base 10: 'names'\n", + "invalid literal for int() with base 10: 'names'\n", + "unterminated string literal (detected at line 1) (, line 1)\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "Data must be 1-dimensional, got ndarray of shape (13, 1) instead\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "\"None of [Index(['tennessee', 'kentucky'], dtype='object', name='college')] are in the [index]\"\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "'SeriesGroupBy' object has no attribute 'str'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "index 0 is out of bounds for axis 0 with size 0\n", + "could not convert string to float: 'n / a'The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "could not convert string to float: '0%'\n", + "could not convert string to float: 'n / a'\n", + "Cannot perform 'ror_' with a dtyped [float64] array and scalar of type [bool]\n", + "could not convert string to float: 'n / a'\n", + "Out of bounds nanosecond timestamp: october 28 202007, at position 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "invalid literal for int() with base 10: '76 + 67 = 143'\n", + "single positional indexer is out-of-bounds\n", + "'alpha romeo'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0'patrick meighan'\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'finalist'\n", + "'finalist'unterminated string literal (detected at line 1) (, line 1)\n", + "\n", + "cannot convert float NaN to integer\n", + "'numpy.int64' object has no attribute 'abs'\n", + "Lengths must match to compare\n", + "'numpy.int64' object is not iterable\n", + "min() arg is an empty sequence\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "cannot convert float NaN to integer\n", + "single positional indexer is out-of-bounds\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "time data \"22\" doesn't match format \"%d %b\", at position 0. You might want to try:\n", + " - passing `format` if your strings have a consistent format;\n", + " - passing `format='ISO8601'` if your strings are all ISO8601 but not necessarily in exactly the same format;\n", + " - passing `format='mixed'`, and the format will be inferred for each element individually. You might want to use `dayfirst` alongside this.\n", + "time data \"1 sept 1991\" doesn't match format \"%d %b %Y\", at position 0. You might want to try:\n", + " - passing `format` if your strings have a consistent format;\n", + " - passing `format='ISO8601'` if your strings are all ISO8601 but not necessarily in exactly the same format;\n", + " - passing `format='mixed'`, and the format will be inferred for each element individually. You might want to use `dayfirst` alongside this.\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "invalid literal for int() with base 10: '3 (44)'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0single positional indexer is out-of-bounds\n", + "\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "invalid syntax (, line 0)\n", + "single positional indexer is out-of-boundscannot convert float NaN to integer\n", + "\n", + "single positional indexer is out-of-bounds\n", + "'mark tinker'\n", + "'shonda rhimes & marti noxon'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "could not convert string to float: '- (orig 609.6 m)'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "'4:05.67'\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "cannot convert float NaN to integer\n", + "can only convert an array of size 1 to a Python scalar\n", + "cannot convert float NaN to integer\n", + "invalid literal for int() with base 10: ''\n", + "invalid literal for int() with base 10: ''\n", + "'Series' object has no attribute 'total_seconds'\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "cannot convert float NaN to integer\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "'nominee'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "unterminated string literal (detected at line 1) (, line 1)\n", + "invalid literal for int() with base 10: 'raced by f giaffone'\n", + "invalid literal for int() with base 10: 'cheltenham town won 1 - 0 after extra time'\n", + "invalid literal for int() with base 10: 'cheltenham town won 1 - 0 after extra time'\n", + "invalid literal for int() with base 10: 'raced by f giaffone'\n", + "single positional indexer is out-of-bounds\n", + "invalid literal for int() with base 10: '18 , 5'\n", + "could not convert string to float: '75 m'\n", + "invalid literal for int() with base 10: '18 , 5'\n", + "invalid literal for int() with base 10: 'present'\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "invalid literal for int() with base 10: 'present'\n", + "invalid syntax (, line 0)single positional indexer is out-of-bounds\n", + "\n", + "list index out of range\n", + "could not convert string to float: '1:00.107'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "'bool' object is not iterable\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-boundssingle positional indexer is out-of-bounds\n", + "\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "'monika cassens'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "cannot convert float NaN to integer\n", + "'bool' object is not iterable\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "'bool' object is not iterable\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "invalid literal for int() with base 10: 'n / a'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cannot convert float NaN to integer\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "invalid literal for int() with base 10: 'postponed'\n", + "invalid literal for int() with base 10: 'n / a'\n", + "invalid literal for int() with base 10: 'n / a'\n", + "invalid literal for int() with base 10: 'n / a'\n", + "single positional indexer is out-of-bounds\n", + "unterminated string literal (detected at line 1) (, line 1)\n", + "operands could not be broadcast together with shapes (8,) (4,) \n", + "operands could not be broadcast together with shapes (8,) (4,) \n", + "'city'\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "single positional indexer is out-of-bounds\n", + "unterminated string literal (detected at line 1) (, line 1)\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "time data \"april 26\" doesn't match format \"%b %d\", at position 0. You might want to try:\n", + " - passing `format` if your strings have a consistent format;\n", + " - passing `format='ISO8601'` if your strings are all ISO8601 but not necessarily in exactly the same format;\n", + " - passing `format='mixed'`, and the format will be inferred for each element individually. You might want to use `dayfirst` alongside this.\n", + "'sherwood schwartz'\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "time data \"nascar sprint cup series\" doesn't match format \"%B %d , %Y\", at position 0. You might want to try:\n", + " - passing `format` if your strings have a consistent format;\n", + " - passing `format='ISO8601'` if your strings are all ISO8601 but not necessarily in exactly the same format;\n", + " - passing `format='mixed'`, and the format will be inferred for each element individually. You might want to use `dayfirst` alongside this.\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "invalid literal for int() with base 10: 'n / a'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "can only convert an array of size 1 to a Python scalar\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-boundsindex 0 is out of bounds for axis 0 with size 0\n", + "\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0index 0 is out of bounds for axis 0 with size 0\n", + "\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().\n", + "\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "list index out of rangesingle positional indexer is out-of-bounds\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n", + ":1: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "invalid literal for int() with base 10: 'redshirt'\n", + "invalid literal for int() with base 10: 'redshirt'\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: UserWarning: This pattern is interpreted as a regular expression, and has match groups. To actually get the groups, use str.extract.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "invalid syntax (, line 0)\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "invalid syntax (, line 0)\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "closing parenthesis ')' does not match opening parenthesis '[' (, line 1)\n", + "closing parenthesis ')' does not match opening parenthesis '[' (, line 1)\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "index -1 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0single positional indexer is out-of-bounds\n", + "\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "'str' object has no attribute 'str'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "invalid syntax (, line 0)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n", + ":1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "invalid syntax (, line 0)\n", + "could not convert string to float: 'rating'\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "cannot convert float NaN to integer\n", + "invalid literal for int() with base 10: 'wd'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "invalid literal for int() with base 10: ' consolidation'\n", + "invalid literal for int() with base 10: '280oooooconsolidation'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "invalid literal for int() with base 10: 'lost'\n", + "'<=' not supported between instances of 'str' and 'int'\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "invalid literal for int() with base 10: 'did not play'\n", + "invalid literal for int() with base 10: 'did not play'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "could not convert string to float: '-'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "could not convert string to float: 'total'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "'2008'\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n", + "index 0 is out of bounds for axis 0 with size 0\n", + "single positional indexer is out-of-bounds\n" + ] } ], "source": [ - "df" + "dataset = Dataset.from_pandas(data_sem_formats)\n", + "dd = dataset.map(find_bed_code,num_proc=16)" ] }, { "cell_type": "code", - "execution_count": 9, - "id": "a765ea6e-d141-430c-8908-c191c6a137e0", + "execution_count": 76, + "id": "cae76d5b-4e09-48cd-8342-8596cd7d205c", "metadata": {}, "outputs": [ { "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "47503a836d4c4db1a535dd8c3b1799c7", + "version_major": 2, + "version_minor": 0 + }, "text/plain": [ - "(20, 20)" + "Filter: 0%| | 0/12887 [00:00\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
id_xlabelid_yidtokens
count709.000000709.000000709.000000709.000000709.000000
mean673.6417490.438646673.641749673.641749932.351199
std461.1023810.496572461.102381461.102381348.072602
min2.0000000.0000002.0000002.000000628.000000
25%276.0000000.000000276.000000276.000000776.000000
50%634.0000000.000000634.000000634.000000860.000000
75%926.0000001.000000926.000000926.000000975.000000
max1690.0000001.0000001690.0000001690.0000004120.000000
\n", + "" + ], "text/plain": [ - "'magnus larsson
placerank - 1.0\"str\"0[\"4\", \"t5\", \"t8\"]
playername - 1.0\"str\"0[\"tony jacklin\", \"deane beman\", \"george knudson\"]
countrynationality - 1.0\"str\"0[\"england\", \"united states\", \"united states\"]
scoreweight - 0.98\"str\"0[\"68 + 69 = 137\", \"68 + 72 = 140\", \"70 + 70 = 140\"]
to parsex - 0.65\"str\"0[\"+ 1\", \"- 3\", \"e\"]
'" + " id_x label id_y id tokens\n", + "count 709.000000 709.000000 709.000000 709.000000 709.000000\n", + "mean 673.641749 0.438646 673.641749 673.641749 932.351199\n", + "std 461.102381 0.496572 461.102381 461.102381 348.072602\n", + "min 2.000000 0.000000 2.000000 2.000000 628.000000\n", + "25% 276.000000 0.000000 276.000000 276.000000 776.000000\n", + "50% 634.000000 0.000000 634.000000 634.000000 860.000000\n", + "75% 926.000000 1.000000 926.000000 926.000000 975.000000\n", + "max 1690.000000 1.000000 1690.000000 1690.000000 4120.000000" ] }, - "execution_count": 9, + "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "serialize_table(df,description=dataset[7747]['table_caption'],model=model)" + "prompt_len.describe()" ] }, { "cell_type": "code", - "execution_count": 7, - "id": "d9de7813-20c8-41e1-91d5-10dccf153f9e", + "execution_count": 73, + "id": "8fe223df-510c-4c19-b275-1af594e62b4a", "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", + " \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", + "
id_xtable_csvtable_textlabelstatementtable_captionnlsep_querysemtab_querynlsep_answnlsep_label...defgen_answ_correctidcossimsemtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_answsemtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_labelsemtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_answ_correcterrcodecode_executebletokens
2544392-12719328-2.html.csvname#team#laps#time / retired#grid#points\\nséb...0mechanical issue never prevent a racer from fi...2007 generac grand prixmechanical issue never prevent a racer from fi...mechanical issue never prevent a racer from fi...```\\n\"PANDA\": \"df.loc[df['retired'] != 'mechan...True...None439<TABLE DESCRIPTION=\"2007 generac grand prix\"><...Here is the single-line pandas expression that...TrueNoneSyntaxError: unterminated string literal (dete...all(df[df['time / retired'].str.contains('mech...False4120
3656612-18974097-2.html.csvschool#location#mascot#size#ihsaa class#county...0all of the mascot , include west washington 's...indiana high school athletics conferences : oh...all of the mascot , include west washington 's...all of the mascot , include west washington 's...Here is the single-line pandas expression that...False...None661<TABLE DESCRIPTION=\"indiana high school athlet...Here is the single-line pandas expression that...TrueNoneSyntaxError: unterminated string literal (dete...all(df['mascot'].str.contains('bluejackets|com...False4120
4127332-1122485-2.html.csvdriver#constructor#laps#time / retired#grid\\nm...1any driver below 75 lap care trouble of some k...1971 south african grand prixany driver below 75 lap care trouble of some k...any driver below 75 lap care trouble of some k...Here is the single-line pandas expression that...False...None733<TABLE DESCRIPTION=\"1971 south african grand p...```json\\n\"PANDA\": \"df[df['laps'] < 75]['time /...FalseNoneSyntaxError: unterminated string literal (dete...any(df[df['laps'] < 75]['time / retired'].str....False4120
4908292-17736890-2.html.csvtie no#home team#score 1#away team#attendance\\...1the game between ipswich town and leyton orien...2008 - 09 football league cupthe game between ipswich town and leyton orien...the game between ipswich town and leyton orien...The game between Ipswich Town and Leyton Orien...False...None829<TABLE DESCRIPTION=\"2008 - 09 football league ...```json\\n\"PANDA\": \"df[df['home team'] == 'ipsw...TrueThe error is due to the fact that the comparis...SyntaxError: unterminated string literal (dete...df.loc[df['attendance'].replace({'cheltenham t...False4120
\n", + "

4 rows × 26 columns

\n", + "
" + ], "text/plain": [ - "{'id': 0,\n", - " 'statement': 'haroldo be mention as a brazil scorer for 2 different game',\n", - " 'label': 1,\n", - " 'table_caption': '1919 in brazilian football',\n", - " 'table_text': 'date#result#score#brazil scorers#competition\\nmay 11 , 1919#w#6 - 0#friedenreich (3) , neco (2) , haroldo#south american championship\\nmay 18 , 1919#w#3 - 1#heitor , amílcar , millon#south american championship\\nmay 26 , 1919#d#2 - 2#neco (2)#south american championship\\nmay 29 , 1919#w#1 - 0#friedenreich#south american championship\\njune 1 , 1919#d#3 - 3#haroldo , arlindo (2)#taça roberto cherry\\n',\n", - " 'pandas_code': \"df['brazil scorers'].apply(lambda x: 'haroldo' in x).sum() == 2\",\n", - " 'pandas_eval': 'True'}" + " id_x table_csv \\\n", + "254 439 2-12719328-2.html.csv \n", + "365 661 2-18974097-2.html.csv \n", + "412 733 2-1122485-2.html.csv \n", + "490 829 2-17736890-2.html.csv \n", + "\n", + " table_text label \\\n", + "254 name#team#laps#time / retired#grid#points\\nséb... 0 \n", + "365 school#location#mascot#size#ihsaa class#county... 0 \n", + "412 driver#constructor#laps#time / retired#grid\\nm... 1 \n", + "490 tie no#home team#score 1#away team#attendance\\... 1 \n", + "\n", + " statement \\\n", + "254 mechanical issue never prevent a racer from fi... \n", + "365 all of the mascot , include west washington 's... \n", + "412 any driver below 75 lap care trouble of some k... \n", + "490 the game between ipswich town and leyton orien... \n", + "\n", + " table_caption \\\n", + "254 2007 generac grand prix \n", + "365 indiana high school athletics conferences : oh... \n", + "412 1971 south african grand prix \n", + "490 2008 - 09 football league cup \n", + "\n", + " nlsep_query \\\n", + "254 mechanical issue never prevent a racer from fi... \n", + "365 all of the mascot , include west washington 's... \n", + "412 any driver below 75 lap care trouble of some k... \n", + "490 the game between ipswich town and leyton orien... \n", + "\n", + " semtab_query \\\n", + "254 mechanical issue never prevent a racer from fi... \n", + "365 all of the mascot , include west washington 's... \n", + "412 any driver below 75 lap care trouble of some k... \n", + "490 the game between ipswich town and leyton orien... \n", + "\n", + " nlsep_answ nlsep_label ... \\\n", + "254 ```\\n\"PANDA\": \"df.loc[df['retired'] != 'mechan... True ... \n", + "365 Here is the single-line pandas expression that... False ... \n", + "412 Here is the single-line pandas expression that... False ... \n", + "490 The game between Ipswich Town and Leyton Orien... False ... \n", + "\n", + " defgen_answ_correct id \\\n", + "254 None 439 \n", + "365 None 661 \n", + "412 None 733 \n", + "490 None 829 \n", + "\n", + " cossim \\\n", + "254 <... \n", + "365
3500]" ] }, { "cell_type": "code", - "execution_count": 8, - "id": "01e6b976-836f-409c-873a-0ef4ebd819ba", + "execution_count": 74, + "id": "65678158-4f8d-40f4-8a69-ca6cbd2d7332", "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "'/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/tests'" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" + "ename": "NameError", + "evalue": "name 'data_true' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[74], line 5\u001b[0m\n\u001b[1;32m 2\u001b[0m sep_data_len_token \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m 3\u001b[0m sem_data_len_token \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m----> 5\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m data \u001b[38;5;129;01min\u001b[39;00m tqdm(\u001b[43mdata_true\u001b[49m):\n\u001b[1;32m 6\u001b[0m sep_data_len_token\u001b[38;5;241m.\u001b[39mappend(compute_tokens_lenghts(data[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnlsep_query\u001b[39m\u001b[38;5;124m'\u001b[39m],tokenizer))\n\u001b[1;32m 7\u001b[0m sem_data_len_token\u001b[38;5;241m.\u001b[39mappend(compute_tokens_lenghts(data[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msemtab_query\u001b[39m\u001b[38;5;124m'\u001b[39m],tokenizer))\n", + "\u001b[0;31mNameError\u001b[0m: name 'data_true' is not defined" + ] } ], "source": [ - "pwd" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "53d437d9-89e0-4b77-930a-627430530498", - "metadata": {}, - "outputs": [], - "source": [ - "import json\n", - "import pandas as pd\n", - "from io import StringIO\n", "from tqdm import tqdm\n", - "from utils.utils import serialize_table\n", - "from utils.doduo.doduo import Doduo\n", - "import argparse\n", - "from functools import partial\n", + "sep_data_len_token = []\n", + "sem_data_len_token = []\n", "\n", - "def convert_dataset_to_nlsep_format(model,data):\n", - " df = pd.read_csv(StringIO(data['table_text']), delimiter='#')\n", - " data['nlsep_query'] = data['statement'] + ' ' + serialize_table_to_tapex_format(df)\n", - " data['semtab_query'] = data['statement'] + ' ' + serialize_table(df,model=model, description=data['table_caption'],basedir='../utils/doduo/')\n", - " return data\n" + "for data in tqdm(data_true):\n", + " sep_data_len_token.append(compute_tokens_lenghts(data['nlsep_query'],tokenizer))\n", + " sem_data_len_token.append(compute_tokens_lenghts(data['semtab_query'],tokenizer))" ] }, { "cell_type": "code", - "execution_count": 42, - "id": "8a50d816-3284-4e2e-b658-2d3427f05a8f", + "execution_count": null, + "id": "3153ffcf-2eb9-494f-bdd7-761c8195290b", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Some weights of BertForMultiOutputClassification were not initialized from the model checkpoint at bert-base-uncased and are newly initialized: ['classifier.bias', 'classifier.weight']\n", - "You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n" - ] - } - ], + "outputs": [], "source": [ - "model_type = \"viznet\"\n", - "device = 'cpu'\n", - "model = Doduo(argparse.Namespace(**{'model': model_type, 'device': device}),basedir='../utils/doduo/')\n", - "doduo_convert_dataset_to_nlsep_format = partial(convert_dataset_to_nlsep_format,model)\n" + "count_columns = []\n", + "count_rows = []\n", + "for data in tqdm(data_true):\n", + " df = pd.read_csv(StringIO(data['table_text']), delimiter='#')\n", + " count_columns.append(df.shape[1])\n", + " count_rows.append(df.shape[0])" ] }, { "cell_type": "code", - "execution_count": 37, - "id": "8fb78845-833a-4204-9378-9036b45aa487", + "execution_count": 75, + "id": "946dcde4-200b-427f-a400-daad30ec2581", "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "47d94724-2e8f-4068-a593-8ed82f0538c2", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'doduo_convert_dataset_to_nlsep_format' is not defined", + "ename": "ValueError", + "evalue": "max() arg is an empty sequence", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[7], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m dataset2 \u001b[38;5;241m=\u001b[39m dataset\u001b[38;5;241m.\u001b[39mmap(\u001b[43mdoduo_convert_dataset_to_nlsep_format\u001b[49m)\n\u001b[1;32m 2\u001b[0m dataset2\u001b[38;5;241m.\u001b[39msave_to_disk(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m./new_dataset\u001b[39m\u001b[38;5;124m'\u001b[39m)\n", - "\u001b[0;31mNameError\u001b[0m: name 'doduo_convert_dataset_to_nlsep_format' is not defined" + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[75], line 5\u001b[0m\n\u001b[1;32m 3\u001b[0m sem_data_len_token \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39marray(sem_data_len_token)\n\u001b[1;32m 4\u001b[0m dif_token \u001b[38;5;241m=\u001b[39m sem_data_len_token \u001b[38;5;241m-\u001b[39m sep_data_len_token\n\u001b[0;32m----> 5\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;28;43mmax\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mdif_token\u001b[49m\u001b[43m)\u001b[49m,\u001b[38;5;28mmin\u001b[39m(dif_token),dif_token\u001b[38;5;241m.\u001b[39mmean(),dif_token\u001b[38;5;241m.\u001b[39mstd())\n", + "\u001b[0;31mValueError\u001b[0m: max() arg is an empty sequence" ] } ], "source": [ - "dataset2 = dataset.map(doduo_convert_dataset_to_nlsep_format)\n", - "dataset2.save_to_disk('./new_dataset')" + "import numpy as np \n", + "sep_data_len_token = np.array(sep_data_len_token)\n", + "sem_data_len_token = np.array(sem_data_len_token)\n", + "dif_token = sem_data_len_token - sep_data_len_token\n", + "print(max(dif_token),min(dif_token),dif_token.mean(),dif_token.std())" ] }, { "cell_type": "code", - "execution_count": 44, - "id": "fca864c2-b96f-4628-87ce-930fc4aa3acf", + "execution_count": 83, + "id": "a40669bb-a4a1-4420-82cb-7d6f98cbaeab", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "Saving the dataset (1/1 shards): 100%|██████████| 88223/88223 [00:00<00:00, 549715.04 examples/s]\n" + "100%|██████████| 12887/12887 [00:11<00:00, 1164.66it/s]\n" ] } ], "source": [ - "dataset2.save_to_disk('./new_dataset')" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "8757a358-ed02-430d-9232-9bd3f468ea45", - "metadata": {}, - "outputs": [], - "source": [ - "from datasets import load_from_disk" + "count_columns = []\n", + "count_rows = []\n", + "for data in tqdm(Dataset.from_pandas(data_sem_formats)):\n", + " df = pd.read_csv(StringIO(data['table_text']), delimiter='#')\n", + " count_columns.append(df.shape[1])\n", + " count_rows.append(df.shape[0])" ] }, { "cell_type": "code", - "execution_count": 9, - "id": "bb41e940-dd62-46ad-8916-54701b0a72b1", + "execution_count": 84, + "id": "bd5c5174-4c23-4ef2-b7aa-adc4fc1d4c8d", "metadata": {}, "outputs": [], "source": [ - "data = load_from_disk('new_dataset')" + "import numpy as np \n", + "sep_data_len_token = np.array(sep_data_len_token)\n", + "cossim_data_len_token = np.array(cossim_data_len_token)\n", + "defgen_data_len_token = np.array(defgen_data_len_token)\n", + "diff = np.array(diff)\n" ] }, { "cell_type": "code", - "execution_count": 12, - "id": "afb0fe7e-d90f-4dc0-80c7-5a08a3c95462", + "execution_count": 81, + "id": "e492d646-5d3f-4d11-a75a-f14eae8d47d9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "Dataset({\n", - " features: ['id', 'statement', 'label', 'table_caption', 'table_text', 'pandas_code', 'pandas_eval', 'nlsep_query', 'semtab_query'],\n", - " num_rows: 88223\n", - "})" + "np.float64(-10.829518119034686)" ] }, - "execution_count": 12, + "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "data" + "diff.mean()" ] }, { "cell_type": "code", - "execution_count": 13, - "id": "98bb02d7-1a3f-4d27-8483-cad70edd1d41", + "execution_count": 85, + "id": "2c01b3f7-7697-4466-b5fd-c9fd5c37c0e0", + "metadata": {}, + "outputs": [], + "source": [ + "df_dif = pd.DataFrame({'NL+sep':sep_data_len_token,'SemTab':cossim_data_len_token,'DefGen':defgen_data_len_token,\n", + " 'count columns':count_columns,'count rows':count_rows,'diff' : diff}) " + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "id": "8fc5c5b1-c923-4333-882b-175f6f71653c", "metadata": {}, "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Filter: 100%|██████████| 88223/88223 [00:00<00:00, 107486.06 examples/s]\n" - ] + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
NL+sepSemTabDefGencount columnscount rowsdiff
count12887.00000012887.00000012887.00000012887.00000012887.00000012887.000000
mean552.196477562.551874551.7223566.22278313.361838-10.829518
std368.802703138.530085155.9951601.5203988.36583858.830547
min106.000000338.000000256.0000005.0000004.000000-504.000000
25%295.000000462.000000453.0000005.0000007.000000-40.000000
50%420.000000531.000000525.0000006.00000011.000000-11.000000
75%712.000000637.000000619.0000007.00000017.00000017.000000
max2707.0000001891.0000002881.00000020.00000048.0000001231.000000
\n", + "" + ], + "text/plain": [ + " NL+sep SemTab DefGen count columns count rows \\\n", + "count 12887.000000 12887.000000 12887.000000 12887.000000 12887.000000 \n", + "mean 552.196477 562.551874 551.722356 6.222783 13.361838 \n", + "std 368.802703 138.530085 155.995160 1.520398 8.365838 \n", + "min 106.000000 338.000000 256.000000 5.000000 4.000000 \n", + "25% 295.000000 462.000000 453.000000 5.000000 7.000000 \n", + "50% 420.000000 531.000000 525.000000 6.000000 11.000000 \n", + "75% 712.000000 637.000000 619.000000 7.000000 17.000000 \n", + "max 2707.000000 1891.000000 2881.000000 20.000000 48.000000 \n", + "\n", + " diff \n", + "count 12887.000000 \n", + "mean -10.829518 \n", + "std 58.830547 \n", + "min -504.000000 \n", + "25% -40.000000 \n", + "50% -11.000000 \n", + "75% 17.000000 \n", + "max 1231.000000 " + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "data_false = data.filter(lambda x: True if x['semtab_query']=='None' else False)" + "df_dif.describe()" ] }, { "cell_type": "code", - "execution_count": 56, - "id": "687f6e57-fac8-4d21-bf55-379e07e98e24", + "execution_count": 244, + "id": "5c4b6c47-12c0-474f-83de-9ca535bb2295", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/bin/python\n" - ] + "data": { + "text/plain": [ + "38.45736013036393" + ] + }, + "execution_count": 244, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "import sys\n", - "print(sys.executable)" + "df_dif[df_dif['diff']>0].shape[0]/df_dif.shape[0]*100" ] }, { "cell_type": "code", - "execution_count": 16, - "id": "c1a94c7a-4dc3-4976-adf2-6be48af01691", + "execution_count": 245, + "id": "1e3c02fb-64ed-408f-b71b-b85fea9c56ad", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "0.12128356551012774" + "1.1018856211686194" ] }, - "execution_count": 16, + "execution_count": 245, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "data_false.shape[0]/data.shape[0] *100" + "df_dif[df_dif['diff']==0].shape[0]/df_dif.shape[0]*100" ] }, { "cell_type": "code", - "execution_count": 10, - "id": "44327594-d45c-4c02-8106-3a76152009b6", + "execution_count": 246, + "id": "046d72ac-2c8e-4e24-ad60-5ea5f5d0a612", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "60.44075424846744" + ] + }, + "execution_count": 246, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "data_true = data.filter(lambda x: True if x['semtab_query']!='None' else False)" + "df_dif[df_dif['diff']<0].shape[0]/df_dif.shape[0]*100" ] }, { "cell_type": "code", - "execution_count": 102, - "id": "494e8f05-4350-4fef-9eac-ecf32d473651", + "execution_count": 237, + "id": "70ee3b7d-9078-4748-9e1d-5ff23268a8cd", "metadata": {}, "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "Saving the dataset (1/1 shards): 100%|██████████| 88116/88116 [00:00<00:00, 96170.74 examples/s]\n" - ] + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 237, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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fuvz0Bq0OP78cUhFUn9niWAHOoAXXBDNTDMkcKsbgUAgsLmuug6tQQsA0Oq1fs4NIVghwgwh4CkpKUFqaipycnI4rhLRjUAgEG50iDDTTPBHl+5YyCAQCAQCwTcQYaYZQmxmCAQCgeAJmM44A9n7AxFmOKBpGgalkt9fYyP/sA7+hPoIMRgMWLp0Ke699150794dgwffhY1rlpuv5+XlYcSIEejRowf69OmDjz/+GA0NDebrzz//PGbMmMGK89OP38fXcz4x/x48eDAWL16MDz74ABkZGRg0aBDWrVtnvn733XcDAB577DGkpqbi+eeft5vfc+fO4dVXX0WvXr2QkZGBZ599FkVFReZn+frrr3HnnXeie/fuePTRR7Fnzx67cW3atAkv/N/dTb+MH9qOHTuQmppqDvPVV1/h0UcfxYYNGzBo0CBkZGRgypQp0Ov1WLp0Ke644w707dsXixYtYsWdmpqK9evX44033kDPnj0xZMgQ/P333+brNTU1eO+993D77bejR48eGDJkCDZu3Gg3rwQCgUDwPmQ1kxU0TePSs8PReOKET9MN6dUL7dd8z9sl/fz587F+/Xp88MEHuOWWW3D1Whn+PX4GAKBsVGLUqFHIyMjAhg0bUFlZiYkTJ2LatGm8dtpmzlktX74cY8aMwWuvvYbt27djypQpuPXWW3HTTTdh/fr1ePLJJ7FixQqkpKRAKuVehXDt2jU899xzuO2227By5UqEh4fj+PHj0Ol0AIBVq1Zh+fLl+OSTT9C1a1ds3LgRo0ePxm+//YYOHTrwKg8uioqKsGfPHnz33XcoKirCmDFjUFxcjOTkZKxevRonTpzAhx9+iH79+qFnz57m+77++mu8//77GD9+PFavXo1x48Zh586diIqKwhdffIHCwkIsXboU0dHRKCoqgkqlcjmPBEIgEcirVQgERxBhhosA3+Omvr4eq1atwqRJkzB06FAAQNvEJChapwAAtm/dCo1Ggzlz5iA0NBQAMGnSJLz22msYN24c4uLieKd15513Yvjw4QCAl19+GStWrMChQ4dw0003ISYmBgAQFRWF+Ph4u3GsWbMG4eHhWLBggVngSU5ONl9ftmwZXn75ZTz00EMAgPfffx+HDh3CypUrMXnyZN55tYamacycORPh4eFISUlBnz59cOHCBSxduhQikQg33XQTli5dikOHDrGE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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "data_true.save_to_disk('none_filtered_new_dataset')" + "df_dif.plot()" ] }, { "cell_type": "code", - "execution_count": null, - "id": "e6f22813-38be-4b5a-89ae-a4b578656c26", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 101, - "id": "bc9dcfa8-fc0b-4682-a564-313a4270bb87", + "execution_count": 88, + "id": "320ebb0e-c4b9-4159-9ee4-dcbb54ccc4f4", "metadata": {}, "outputs": [ { - "ename": "FileNotFoundError", - "evalue": "Directory none_filtered_new_dataset not found", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[101], line 4\u001b[0m\n\u001b[1;32m 2\u001b[0m entry[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mproto_query\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mentry[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mstatement\u001b[39m\u001b[38;5;124m\"\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mentry[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtable_text\u001b[39m\u001b[38;5;124m\"\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m entry\n\u001b[0;32m----> 4\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[43mload_from_disk\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mnone_filtered_new_dataset\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 5\u001b[0m data2 \u001b[38;5;241m=\u001b[39m data\u001b[38;5;241m.\u001b[39mmap(name_proto_query,num_proc\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m17\u001b[39m)\n", - "File \u001b[0;32m/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages/datasets/load.py:1471\u001b[0m, in \u001b[0;36mload_from_disk\u001b[0;34m(dataset_path, keep_in_memory, storage_options)\u001b[0m\n\u001b[1;32m 1469\u001b[0m fs, \u001b[38;5;241m*\u001b[39m_ \u001b[38;5;241m=\u001b[39m url_to_fs(dataset_path, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m(storage_options \u001b[38;5;129;01mor\u001b[39;00m {}))\n\u001b[1;32m 1470\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m fs\u001b[38;5;241m.\u001b[39mexists(dataset_path):\n\u001b[0;32m-> 1471\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mDirectory \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mdataset_path\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m not found\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 1472\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m fs\u001b[38;5;241m.\u001b[39misfile(posixpath\u001b[38;5;241m.\u001b[39mjoin(dataset_path, config\u001b[38;5;241m.\u001b[39mDATASET_INFO_FILENAME)) \u001b[38;5;129;01mand\u001b[39;00m fs\u001b[38;5;241m.\u001b[39misfile(\n\u001b[1;32m 1473\u001b[0m posixpath\u001b[38;5;241m.\u001b[39mjoin(dataset_path, config\u001b[38;5;241m.\u001b[39mDATASET_STATE_JSON_FILENAME)\n\u001b[1;32m 1474\u001b[0m ):\n\u001b[1;32m 1475\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m Dataset\u001b[38;5;241m.\u001b[39mload_from_disk(dataset_path, keep_in_memory\u001b[38;5;241m=\u001b[39mkeep_in_memory, storage_options\u001b[38;5;241m=\u001b[39mstorage_options)\n", - "\u001b[0;31mFileNotFoundError\u001b[0m: Directory none_filtered_new_dataset not found" - ] + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABdEAAAJOCAYAAABYwk4SAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xd4U9XjBvD3ZjcdKbSlQCnIkLIKZW8rWEAFQUEFhaICAgriF0FF9KciCKigIKAMRdmiMgVcOBiylTJlj5bRQkt32mbd3x8xoWmbktKkGX0/z9MHenOanNzce3Pue889RxBFUQQRERERERERERERERUjcXcFiIiIiIiIiIiIiIg8FUN0IiIiIiIiIiIiIiI7GKITEREREREREREREdnBEJ2IiIiIiIiIiIiIyA6G6EREREREREREREREdjBEJyIiIiIiIiIiIiKygyE6EREREREREREREZEdDNGJiIiIiIiIiIiIiOxgiE5EREREREREREREZAdDdCIiIiIn02q1uH79OjIzM91dFSIiIiIiIionmbsrQEREROQLfvzxR3zzzTc4evQotFotAGDkyJGYMGGCm2tGROR51qxZg+3bt+Pff/9FZmYmgoODUbduXTz++OPo27cvJBL29yIiIiLPIYiiKLq7EkR3gw1vIiLyFLNmzcKSJUvwwAMPoHfv3qhSpQoEQcA999yDGjVquLt6REQeZ+DAgQgLC0OHDh0QEBCArKwsHDlyBFu3bsXDDz+Mjz/+2N1VJCIiIrJiiE5eiw1vIiLyBAcOHEB8fDwmTJiAkSNHurs6REReQa/XQy6XF1s+depUrFy5Er/99htq1arlhpoRERERFceuuuS1Vq5cifnz52PIkCF49NFHMXToUMyePRuDBw/G1q1bceXKFXdXkYiIKoGlS5eiZcuWDNCJiMqgpAAdACIiIgDA5q7S7du3Y+TIkejSpQuaNWuGuLg4LFiwAEaj0eZv4+PjERUVZf1p3749Ro4ciTNnztiUi4qKwrx582yWffHFF4iKikJ8fLzN8oKCAsybNw+9evVCdHQ0unTpgrFjxyIxMREAcOXKFURFRWH9+vU2fzdlyhRERUVh0qRJ1mXr169HVFQUmjVrhlu3btmUP3z4sLXex44ds3nsxx9/RP/+/dG8eXO0b98eEydOREpKSrF1d/78ebz88svo0KEDmjdv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b731lkd39qGKx57o5LV27NhR4hdvRTa8d+/eja+++qrUhveff/6JVatW2UwsaqlP4b+zNLxnz57tUL0sDe8vvvii2BAmFoW/OB5//HHruL6WLw7L8AuFG97PPfecTYh0p4kMHXU3DW8Le+NAX716FYcPH8Y777xTasN71apVmD9/vs2EhJY6Wd6bpeFtL4y3KK3hXXRctrtl6eWzbds2a8+OsjS833nnHfTr1w9dunQBYG6MrV69Gp999lmxEzuDwQCtVougoKAy1TE2NhYff/wxli1bhvfee8+63FUN7/vuu8/6WVVEw7t37954//33rfujo/uSRVkb3nc6llhUq1YN1apVs/5eUsN73rx52LVrF7p27WrzmGXiLJlM5vB+UR6FG94KhaLcDW9n1bcs+9exY8eQmJhoHeu/tOdcunQp/vnnH7Rq1QqA+btjzZo1CAsLKzZRrCPKu/3b++4iIvIUEyZMQL169RAXF4fQ0FDcunULO3fuxP79+zF69Ghrb8KWLVtCo9Fg0qRJiI+PhyAI2LRpk91gIzU1FZs2bQJgvj1/7dq1kMlkxQKT3bt3o3PnzqX2+Hz00UexceNGzJgxw3qXa15eHvbu3YunnnoKcXFxNs/35JNP3vHCa2Evv/wyhg8fbrdzj1wux8SJE/HGG29gyJAh6N27N9LS0rB8+XJERETYnF+89dZbeOqpp/DYY49h4MCBqFWrFq5evYo///zTuj7KQqvVYufOnQDMwwWuWLECcrm82HosjwMHDqB+/fro37+/3TIdOnRAv379sGLFCly+fBldu3aFyWTC33//jfbt22PIkCFYvXo1Fi9eDD8/P8THx5f6mvfffz8WLFiAN954Ay1btsSZM2fwww8/2PSULq+BAwdi7dq1mDRpEk6cOIGIiAj8/PPP+OeffzB58mSbyRBL+tstW7bgnXfewZYtW+Dn54d27dph4MCBWLRoEf7991907twZcrkcly5dwk8//YQ333yz2OTtd9KoUSM89thjWLt2LbKystC2bVscO3YMGzZsQFxcXLGLEUlJSdbtKCUlBatWrUJAQECpQ0BWrVoVo0aNwvz58zFixAh0794dFy9exOrVqxEdHW2d4N3ZwsLC8Oqrr+Ktt95C3759ERsb6/C+dOzYMcydOxe7du3ClClTHGpjOnIscdTw4cPx+++/Y/To0XjsscfQtGlT5OXl4cyZM/j555/x22+/oWrVqg7tF2W1Z88eJCcnw2Aw4NixY/jhhx/QvXt363nP/fffj02bNiEgIAANGjRAQkIC9uzZ41DPclfUV6PR4Omnn0b//v2RlpaGZcuWoU6dOnjyyScBlO34WZRKpcLUqVPx7LPPYvXq1Rg8eHCZ60e+iSE6eS02vNnwZsO75L9lw7t82PD27Ya3o/vX/PnzsWLFCkRGRuLRRx8t9Tmff/55/PDDD3j++ecRHx+PKlWqYPPmzTh37hxmzZpVbF6Mf//9t9iwUUajESkpKThw4ADatWtX5u3f0e8uIiJPMWHCBPzxxx9YsWIFbt26BbVajebNm2Px4sU2FwqrVKmChQsX4oMPPsCcOXMQFBSEvn37omPHjiXerXjhwgXrBOFBQUFo0KABJk2ahOjoaJtygiBgwoQJpdZRKpViyZIl+Pzzz7Flyxb88ssvCA4ORqtWraznGhYqlarM4+cqFIpiw+oV1b9/f6hUKixZsgSzZs2CWq1GXFwcXn31VZtOEI0aNcK3336LuXPnYs2aNSgoKEDNmjXx0EMPlalOFlevXsXzzz8P4PZ6/Oyzz9C4ceO7ej57XnnllTt2spkxYwaioqLw/fff48MPP0RgYCCaNWtmnRtrw4YNaNGiBV5++WWEh4eX+lyjR49GXl4efvjhB2zbtg1NmjTBokWLHO7I5AiVSoUVK1Zg1qxZ2LBhA3JyclC3bl3MmDGj1PMWwLxdTp06Ff369cOcOXPwxhtvAADee+89NGvWDN988w0++eQTSKVSREREoG/fvtYL+GU1bdo01KpVCxs2bMD27dsRGhqKUaNGlbgdHzp0yDrcUJUqVdC0aVO89NJLqFGjRqmv8dJLL6Fq1apYuXIlZsyYAY1GgyeffBKvvPKKU4ZDteeJJ57Ali1b8O6772LLli3w9/d3aF/at28fMjIyMGvWrDvO5WXhyLHEUX5+flixYgUWLVqEn376CRs3bkRAQADuuecevPTSSwgMDLSWvdN+UVYLFy4EYO6sFx4ejsGDB2PcuHHWx998801IJBL88MMPKCgoQKtWrfDVV185PAyrs+s7evRonD59GosXL0Zubi46duyId955B35+ftYyjh4/S9KxY0f0798fH3/8MeLi4u54bKFKQiTyUqtXrxaff/55sUuXLmKTJk3ENm3aiMOGDRP//PPPYmX//vtv8cknnxSbN28udunSRfzwww/FXbt2iQ0bNhT37dtnLTdkyBCxYcOG1p82bdqIgwYNKvacDRs2FKOiosTjx4/bLB8yZIg4ZMgQm2V5eXnixx9/LHbv3l1s2rSp2LlzZ/Gll14SExMTRVEUxaSkJLFhw4Zi8+bNxeTkZJu/7datm/j6669bf1+3bp3YsGFD8ejRoyWuE3uPb926VXz00UfFZs2aie3atRMnTJhQ7LVEURTPnDkjjhkzRmzTpo0YHR0t9urVS5wzZ06Jr1W0bkXXQ0nrcceOHSWWvxPL+0pKSrJ5/YYNG4q//vqrTdnXX39d7Natm80yg8EgfvHFF+KDDz4oNm3aVOzQoYM4YsQI6+f3+OOPi+PGjRPPnz9f4nsp/JkWFBSIM2fOFDt37iw2b95cHDRokHj48OESP/uyvqfCUlNTxUmTJont27cXmzZtKvbp00dct26dTRnLtlN0+YULF8To6Ghx+vTpNsvXrl0rPvbYY2Lz5s3Fli1bin369BE//PBDMSUlxVqmW7du4siRI4vVZ8qUKWLDhg1tlun1enHevHnWbTs2NlacPXu2WFBQYFPO8llZftq3by8OGzZMPHz48B3XkyiK4sqVK62fXadOncR33nlHzMzMLLGsvXVSGnuf3dChQ8X7779fzMnJsS670760ePFiccCAAeLmzZuLPV9Jn3lZjiUlKWk/zMnJEWfPni326NFDbNq0qdi+fXtx4MCB4pdffinqdDpruTvtF3equ8W+fftsPt8mTZqI3bp1E6dOnWrzOWVmZlq36ZiYGHHYsGHi+fPnSz2WFOas+oqiY/vXfffdJ77xxhs2+4dFSXVOTEwUX3rpJbF169ZidHS0OGDAgGLHp6LrqqSfoscvR7Z/R7+7iIiIiIi8maU9/eOPP7q7KlQJCaLIAX6IiIiI3G39+vWYP38+fv/9d3dXhYiIiIjI4+zfvx9Dhw7F3Llzy3w3NVF5cWJRIiIiIiIiIiIiIiI7GKITEREReYDw8PBiEwcTERERERGR+3E4FyIiIiIiIiIiIiIiO9gTnYiIiIiIiIiIiIjIDoboRERERERERERERER2yNxdAW9gMplgMBggkUggCIK7q0NEREREXkYURZhMJshkMkgk7MdSVmyPExEREdHdckZbnCG6AwwGA44dO+buahARERGRl4uOjoZCoXB3NbwO2+NEREREVF7laYszRHeA5QpFdHQ0pFKpm2vjOYxGI44dO8b1cpe4/sqH6698uP7Kh+uvfLj+yofrr3zctf4sr8te6HeH7XHvxWMW3Qm3ESoNtw8qDbcPuhPLNtKkSROcPHmyXG1xhugOsNwyKpVKuVOWgOulfLj+yofrr3y4/sqH6698uP7Kh+uvfNy1/jgUyd1he9z78bOjO+E2QqXh9kGl4fZBd2LZPsrTFmdXGCIiIiIiIiIiIiIiOxiiExERERERERERERHZwRCdiIiIiIiIiIiIiMgOjolORERERERERERE5CCj0Qi9Xu/ualAhCoWiXBOH3glDdCIiIiIiIiIiIqI7EEURycnJyMjIcHdVqAiJRIK6detCoVC45PkZohMRERERERERERHdgSVAr1atGtRqNQRBcHeVCIDJZMK1a9dw/fp11K5d2yWfC0N0IiIiIiIiIiIiolIYjUZrgB4SEuLu6lARYWFhuHbtGgwGA+RyudOfnxOLEhEREREREREREZXCMga6Wq12c02oJJZhXIxGo0uenyE6ERERERERERERkQM4hItncvXnwhCdiIiIiIiIiIiIiMgOhuhERERERERERERERHYwRCciIiIiIiIiIiLyUZMmTUJUVBQWL15ss3z79u2IiooCAOzfvx9RUVHIyspyRxU9HkN0IiIiIiIiIiIiogpgMom4cDMHR5IycOFmDkwmsUJeV6lUYsmSJcjMzHTK802aNAnz5s1zynN5A4boRERERERERERERC52/Gompm49iXc2n8D7W//FO5tPYOrWkzh+1TnBdmk6deqE0NBQLFq0yOWvJYoi5s2bh/vvvx/NmjVDly5dMG3aNOvjOp0OH3zwAbp27YqYmBg88cQT2L9/v/Xx9evXo02bNti+fTt69uyJ6OhoDB8+HNevX3d53e1hiE5ERERERERERETkQsevZuLT387i2JVMBPspcE+oP4L9FDh2xbzc1UG6RCLBK6+8gpUrVyI5Odmlr/Xzzz/j66+/xpQpU/DLL7/gs88+Q8OGDa2Pv/feezh8+DA++eQTbN68GQ8++CBGjBiBS5cuWcvk5+fj888/xwcffIA1a9YgKysL48ePd2m9S8MQnYiIiOg/qZlaPPzJDrSe+gse/mQHUjO17q4SERERUaWUmqlFn093YdimZPT5dBfbZeTVTCYR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ihUr0K5dOwBAREQEmjdvblPmgw8+wG+//QadTodmzZph8uTJaNSoEQBg3rx52L59O+Lj4zF//nxkZmaiX79++L//+z8sXboUX3/9NUwmE4YOHYoXXngBCoUCYWFh1udXqVTQ6XTWZTt37sTnn3+Os2fPQiqVIiYmBm+++SZq165tU/cLFy5gypQpOHHiBOrUqYO3337b+h4qGicWJSIiIiIiIiIiInKl60eAHR8A1w8D6ipASH3zv9cP/7f8iEteVq1WQ61WY/v27dDpdCWWefnll5GWloYlS5Zg/fr1aNq0KZ555hmbnuqJiYnYuXMnvvjiC8yePRvff/89Ro4ciZSUFKxYsQITJ07EnDlzcOTInd9HXl4ennvuOaxbtw5ff/01BEHAmDFjYDKZbMp9+OGHeO6557Bx40bExMRg9OjRSE9PL9f6uFsM0YmIiIiIiIiIiIhcxWQy90DXpgGhUYAyEJBIzf+GRpmXH/nGXM7JZDIZZs6ciY0bN6JNmzYYNGgQPv74Y5w6dQoAcOjQIRw9ehSffvopoqOjcc899+D1119HUFAQfv75Z+vziKKI6dOno0GDBujevTvat2+PixcvYvLkyahXrx4GDBiAunXrYv/+/XesU69evdCzZ0/UqVMHjRs3xvTp03HmzBmcO3fOptzgwYPRq1cv1K9fH++++y4CAwPx/fffO3cFOYjDuRARERERERERERG5yq0L5iFcgiIAQbB9TBDMy2+cMpcLbeD0l+/Vqxfuv/9+HDp0CAkJCdi1axe++OILTJs2DXl5edBqtcUm+czPz0diYqL194iICAQEBFh/Dw0NhVQqhaTQeO6hoaFIS0u7Y30uXbqETz/9FEeOHEF6ejpEUQQAXL9+HQ0bNrSWa9mypfX/MpkMzZo1w4ULF8q+ApyAIToRERERERERERGRqxRkmsdAl6tLflzuBxium8u5iFKpROfOndG5c2eMGTMGb775JubNm4ennnoKYWFhWLFiRbG/CQwMtP5fJrONkQVBKHFZ0SFZSjJ69GhERERg2rRpqFatGkwmE/r06QO9Xn+X7871OJwLERERERERERERkasoNeZJRPXakh/X55kfV2oqrEoNGjSAVqtF06ZNkZqaCqlUijp16tj8VK1a1emvm56ejosXL+KFF15Ax44dUb9+fWRmlnzxICEhwfp/g8GAEydOoF69ek6vkyPYE52IiIiIiIiIiIjIVarWA8KizJOIhkbZDukiikDWVaBmK3M5J0tPT8fLL7+MAQMGICoqCv7+/jh+/Di++OILPPDAA+jUqRNiYmIwZswYvPrqq7jnnntw48YN7NixA3FxcYiOjnZqfTQaDYKDg7F27VqEhYXh2rVrmD17dollV69ejXvuuQf16tXDsmXLkJmZiQEDBji1Po5iiE5ERERERERERETkKhIJEPMUkJkIpP43Nrrcz9wDPesqoA4FWgwyl3Myf39/tGjRAsuWLUNiYiIMBgOqV6+OJ554AqNHj4YgCFi8eDHmzJmDN954A+np6QgNDUWbNm0QGhrq9PpIJBJ88sknmDZtGvr06YO6devirbfeQnx8fLGyEyZMwOLFi/Hvv/+iTp06+Pzzz13SO94RDNGJiIiIiIiIiIiIXKlGCyD2dSBhjXmSUcN18xAuNVuZA/QaLVzysgqFAhMmTMCECRPslgkICMBbb72Ft956q8THX3rpJbz00ks2y2bOnFmsXEnjqpdUtlOnTti2bZvNstOnT1v/X6tWLevvffr0sVvvisQQnYiIiIiIiIiIiMjVarQAwqOBWxfMk4gqNeYhXFzQA52ciyE6ERERERERERERUUWQSIDQBu6uBZURL3MQEREREREREREREdnBEJ2IiIiIiIiIiIiIyA6G6EREREREREREREREdjBEJyIiIiIiIiIiInKAyWRydxWoBKIouvT5ObEoERERERERERERUSkUCgUkEgmuXbuGsLAwKBQKCILg7moRzAH6zZs3IQgC5HK5S16DIToRERERERERERFRKSQSCerWrYvr16/j2rVr7q4OFSEIAmrVqgWpVOqS52eITkRERERERERERHQHCoUCtWvXhsFggNFodHd1qBC5XO6yAB1wc4i+aNEi/PLLL7hw4QJUKhVatmyJiRMnol69etYy8fHxOHDggM3fDRw4EO+9957192vXruHdd9/F/v37oVar8eijj2LChAmQyW6/vf3792PmzJk4e/YsatSogRdeeAH9+/d3/ZskIiIiIvJAbIsTERERlZ1lyBBXDRtCnsmtIfqBAwcwePBgREdHw2g04uOPP8bw4cOxdetWqNVqa7knn3wS48aNs/7u5+dn/b/RaMSoUaMQGhqKb775Bjdu3MDrr78OuVyOV155BQCQlJSEUaNGYdCg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RERERDYs5w5/nU/FzewChAUq0bl+KM8diIiIKhhDdCI3kMkk6HpvGAJzryLm3jBIpWwEExERERFRcTKZBLFR1dxdDSIiokqNyR0RERERERERERERkR0M0YmIiIiIiIiIiIiI7GCITkRERERERERERERkB0N0IiIiIiIiIiIiIiI7GKITEREREREREREREdnBEJ2IiIiIiIiIiIiIyA6G6EREREREREREREREdjBEJyIiIiIiIiIiIiKygyE6EREREREREREREZEdDNGJiIiIiIiIiIiIiOyQubsCRK6QmqnF0KUHkZJTgPAAJZYPa4tQjdrd1SIiIiIiIiIiIi/DnIkYopPP6TB9O5KzCqy/p+Xq0WbGH6gepMS+yXFurBkREREREREREXkT5kwEcDgX8jFFD2yFJWcVoMP07RVcIyIiIiIiIiIi8kbMmciCITr5jNRMrd0Dm0VyVgFSM7UVVCMiIiIiIiIiIvJGzJmoMIbo5DOGLj3o1HJERERERERERFQ5MWeiwhiik89IySn96mBZyxERERERERERUeXEnIkKY4hOPiM8QOnUckREREREREREVDkxZ6LCGKKTz1g+rK1TyxERERERERERUeXEnIkKY4hOPiNUo0b1oNKv/lUPUiJUo66gGhERERERERERkTdizkSFMUQnn7JvcpzdA1z1ICX2TY6r4BoREREREREREZE3Ys5EFjJ3V4DI2fZNjkNqphZDlx5ESk4BwgOUWD6sLa8MEhERERERERFRmTBnIoAhOvmoUI0a28bHursaRERERERERETk5ZgzEYdzISIiIiIiIiIiIiKygyE6EREREREREREREZEdDNGJiIiIiIiIiIiIiOxgiE5EREREREREREREZAdDdCIiIiIiIiIiIiIiOxiiExERERERERERERHZwRCdiIiIiIiIiIiIiMgOhuhERERERERERERERHYwRCciIiIiIiIiIiIisoMhOhERERERERERERGRHQzRiYiIiIiIiIiIiIjsYIhORERERERERERERGQHQ3QiIiIiIiIiIiIiIjsYohMRERERERERERER2cEQnYiIiIiIiIiIiIjIDpm7K0DkCvn5Bnzx10UkpWsRWUWNEZ3rQqXi5k5ERERERERERFTRvD2r856aEjno7U3HsPZgEgoMonXZvD/OYmDbSLzXL9qNNSMiIiIiIiIi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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "def name_proto_query(entry):\n", - " entry['proto_query'] = f'{entry[\"statement\"]} {entry[\"table_text\"]}'\n", - " return entry\n", - "data = load_from_disk('none_filtered_new_dataset')\n", - "data2 = data.map(name_proto_query,num_proc=17)\n" + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "\n", + "# Настройка стиля\n", + "sns.set_style(\"whitegrid\")\n", + "\n", + "# Создаем фигуру с двумя подграфиками\n", + "fig, axes = plt.subplots(1, 2, figsize=(15, 6))\n", + "\n", + "# Первый график с регрессионной линией\n", + "\n", + "sns.regplot(data=df_dif, x='count columns', y='NL+sep', \n", + " scatter_kws={'alpha': 0.6}, line_kws={'color': 'green'}, ax=axes[0],label = 'NL+sep')\n", + "sns.regplot(data=df_dif, x='count columns', y='SemTab', \n", + " scatter_kws={'alpha': 0.6}, line_kws={'color': 'red'}, ax=axes[0],label='SemTab')\n", + "#sns.regplot(data=df_dif, x='count columns', y='DefGen', \n", + "# scatter_kws={'alpha': 0.6}, line_kws={'color': 'blue'}, ax=axes[0],label='DefGen')\n", + "\n", + "axes[0].set_xlabel('Количество столбцов')\n", + "axes[0].set_ylabel('К-во токенов')\n", + "axes[0].set_title('Зависимость числа токенов от количества столбцов')\n", + "\n", + "# Второй график с регрессионной линией\n", + "\n", + "sns.regplot(data=df_dif, x='count rows', y='NL+sep', \n", + " scatter_kws={'alpha': 0.6}, line_kws={'color': 'green'}, ax=axes[1],label = 'NL+sep')\n", + "sns.regplot(data=df_dif, x='count rows', y='SemTab', \n", + " scatter_kws={'alpha': 0.6}, line_kws={'color': 'red'}, ax=axes[1],label='SemTab')\n", + "#sns.regplot(data=df_dif, x='count rows', y='DefGen', \n", + " # scatter_kws={'alpha': 0.6}, line_kws={'color': 'blue'}, ax=axes[0],label='DefGen')\n", + "\n", + "axes[1].set_xlabel('Количество строк')\n", + "axes[1].set_ylabel('К-во токенов')\n", + "axes[1].set_title('Зависимость числа токенов от количества строк')\n", + "plt.legend()\n", + "plt.tight_layout()\n", + "plt.savefig('./row_col_tokens.png',dpi=300)\n", + "plt.show()\n" ] }, { "cell_type": "code", - "execution_count": 103, - "id": "b64c7daf-d9d0-4823-83d1-3c5c53639480", + "execution_count": 161, + "id": "6bdc77aa-a676-472c-a4d8-236b5a191fe1", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Saving the dataset (1/1 shards): 100%|██████████| 88116/88116 [00:00<00:00, 152881.66 examples/s]\n" - ] - } - ], + "outputs": [], "source": [ - "data2.save_to_disk('none_filtered_new_dataset2')" + "process_data = load_from_disk('answer_gen_none_filtered_new_dataset')" ] }, { "cell_type": "code", - "execution_count": 105, - "id": "d32a76da-ccdf-4353-954f-a09bc1748a4e", + "execution_count": 164, + "id": "b2474a23-64a0-4217-92bf-fbaed1a6b7a9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{'id': 0,\n", - " 'statement': 'haroldo be mention as a brazil scorer for 2 different game',\n", - " 'label': 1,\n", - " 'table_caption': '1919 in brazilian football',\n", - " 'table_text': 'date#result#score#brazil scorers#competition\\nmay 11 , 1919#w#6 - 0#friedenreich (3) , neco (2) , haroldo#south american championship\\nmay 18 , 1919#w#3 - 1#heitor , amílcar , millon#south american championship\\nmay 26 , 1919#d#2 - 2#neco (2)#south american championship\\nmay 29 , 1919#w#1 - 0#friedenreich#south american championship\\njune 1 , 1919#d#3 - 3#haroldo , arlindo (2)#taça roberto cherry\\n',\n", - " 'pandas_code': \"df['brazil scorers'].apply(lambda x: 'haroldo' in x).sum() == 2\",\n", - " 'pandas_eval': 'True',\n", - " 'nlsep_query': 'haroldo be mention as a brazil scorer for 2 different game col : date | result | score | brazil scorers | competition row 1 : may 11 , 1919 | w | 6 - 0 | friedenreich (3) , neco (2) , haroldo | south american championship row 2 : may 18 , 1919 | w | 3 - 1 | heitor , amílcar , millon | south american championship row 3 : may 26 , 1919 | d | 2 - 2 | neco (2) | south american championship row 4 : may 29 , 1919 | w | 1 - 0 | friedenreich | south american championship row 5 : june 1 , 1919 | d | 3 - 3 | haroldo , arlindo (2) | taça roberto cherry',\n", - " 'semtab_query': 'haroldo be mention as a brazil scorer for 2 different game 1919 in brazilian football
datebirthDate - 1.0\"str\"0[\"may 26 , 1919\", \"may 29 , 1919\", \"june 1 , 1919\"]
resultcode - 0.6\"str\"0[\"d\", \"d\", \"w\"]
score\"str\"0[\"3 - 3\", \"6 - 0\", \"3 - 1\"]
brazil scorersresult - 1.0\"str\"0[\"neco (2)\", \"heitor , am\\\\u00edlcar , millon\", \"friedenreich (3) , neco (2) , haroldo\"]
competitionnotes - 0.98\"str\"0[\"south american championship\", \"south american championship\", \"ta\\\\u00e7a roberto cherry\"]
',\n", - " 'proto_query': 'haroldo be mention as a brazil scorer for 2 different game date#result#score#brazil scorers#competition\\nmay 11 , 1919#w#6 - 0#friedenreich (3) , neco (2) , haroldo#south american championship\\nmay 18 , 1919#w#3 - 1#heitor , amílcar , millon#south american championship\\nmay 26 , 1919#d#2 - 2#neco (2)#south american championship\\nmay 29 , 1919#w#1 - 0#friedenreich#south american championship\\njune 1 , 1919#d#3 - 3#haroldo , arlindo (2)#taça roberto cherry\\n'}" + "Dataset({\n", + " features: ['id', 'statement', 'label', 'table_caption', 'table_text', 'pandas_code', 'pandas_eval', 'nlsep_query', 'semtab_query'],\n", + " num_rows: 88116\n", + "})" ] }, - "execution_count": 105, + "execution_count": 164, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "data2[0]" + "process_data" ] }, { "cell_type": "code", - "execution_count": 104, - "id": "b7465871-bb60-4114-88eb-bd40ed16e622", + "execution_count": 20, + "id": "11557ee0-b797-47a3-94f3-8cdbffeba94a", "metadata": {}, "outputs": [ { "ename": "NameError", - "evalue": "name 'data_false' is not defined", + "evalue": "name 'process_data' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[104], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mdata_false\u001b[49m\n", - "\u001b[0;31mNameError\u001b[0m: name 'data_false' is not defined" + "Cell \u001b[0;32mIn[20], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mprocess_data\u001b[49m[\u001b[38;5;241m0\u001b[39m][\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msemtab_query\u001b[39m\u001b[38;5;124m'\u001b[39m]\n", + "\u001b[0;31mNameError\u001b[0m: name 'process_data' is not defined" ] } ], "source": [ - "data_false" + "process_data[0]['semtab_query']" ] }, { "cell_type": "code", - "execution_count": 11, - "id": "5afcb686-d897-47f0-b537-873aec267aa5", + "execution_count": null, + "id": "5ee81d89-0c04-4d5c-9e98-a69b66235af9", "metadata": {}, "outputs": [], "source": [ - "def get_count_df_columns(table_str):\n", - " df = pd.read_csv(StringIO(table_str), delimiter='#')\n", - " return df.shape[1]\n", - "dt = data_true.filter(lambda x: True if get_count_df_columns(x['table_text']) > 20 else False,num_proc=10)" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "e4263ff2-f0c7-477b-929f-802927fc7fdf", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "during 1993 - 94 victorian premier league season south melbourne fc did not participate south melbourne fc
competitionlocation - 0.72\"str\"0[\"ofc / afc champions league\", \"nsl / a - league\", \"ffv cup\"]
1993 - 94result - 0.81\"str\"0[\"did not participate\", \"2nd\", \"did not participate\"]
1994 - 95\"str\"0[\"did not participate\", \"sf\", \"sf\"]
1995 - 96result - 0.74\"str\"0[\"did not participate\", \"w\", \"w\"]
1996 - 97notes - 0.68\"str\"0[\"sf\", \"did not participate\", \"pf\"]
1997 - 98\"str\"0[\"1st\", \"did not participate\", \"competition not held\"]
1998 - 99result - 0.82\"str\"0[\"did not participate\", \"competition not held\", \"did not participate\"]
1999 - 2000notes - 0.88\"str\"0[\"did not participate\", \"did not participate\", \"competition not held\"]
2000 - 01notes - 0.83\"str\"0[\"competition not held\", \"1st\", \"competition not held\"]
2001 - 02rank - 0.81\"str\"0[\"5th\", \"did not participate\", \"did not participate\"]
2002 - 03\"str\"0[\"dnp\", \"did not participate\", \"competition not held\"]
2003 - 04status - 0.83\"str\"0[\"did not participate\", \"dnp\", \"did not participate\"]
2005status - 0.88\"str\"0[\"did not participate\", \"did not participate\", \"pf\"]
2006notes - 0.61\"str\"0[\"did not participate\", \"did not participate\", \"did not participate\"]
2007\"str\"0[\"did not participate\", \"did not participate\", \"competition not held\"]
2008\"str\"0[\"dnp\", \"competition not held\", \"did not participate\"]
2009result - 0.7\"str\"0[\"competition not held\", \"did not participate\", \"competition not held\"]
2010notes - 0.66\"str\"0[\"competition not held\", \"competition not held\", \"dnp\"]
2011notes - 0.85\"str\"0[\"did not participate\", \"did not participate\", \"4th\"]
2012\"str\"0[\"did not participate\", \"dnp\", \"6th\"]
2013notes - 0.55\"str\"0[\"competition not held\", \"did not participate\", \"sf\"]
2014\"str\"0[\"did not participate\", \"did not participate\", \"-\"]
\n" - ] - } - ], - "source": [ - "print(dt[0]['semtab_query'])" - ] - }, - { - "cell_type": "code", - "execution_count": 135, - "id": "85144c41-8eb5-4b2d-8697-6cd69851db45", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\n", - "\tsouth melbourne fc\n", - "\t
\n", - "\t\tcompetition\n", - "\t\tlocation - 0.72\n", - "\t\t"str"\n", - "\t\t0\n", - "\t\t["ofc / afc champions league", "nsl / a - league", "ffv cup"]\n", - "\t
\n", - "\t
\n", - "\t\t1993 - 94\n", - "\t\tresult - 0.81\n", - "\t\t"str"\n", - "\t\t0\n", - "\t\t["did not participate", "2nd", "did not participate"]\n", - "\t
\n", - "\t
\n", - "\t\t1994 - 95\n", - "\t\t\n", - "\t\t"str"\n", - "\t\t0\n", - "\t\t["did not participate", "sf", "sf"]\n", - "\t
\n", - "\t
\n", - "\t\t1995 - 96\n", - "\t\tresult - 0.74\n", - "\t\t"str"\n", - "\t\t0\n", - "\t\t["did not participate", "w", "w"]\n", - "\t
\n", - "\t
\n", - "\t\t1996 - 97\n", - "\t\tnotes - 0.68\n", - "\t\t"str"\n", - "\t\t0\n", - "\t\t["sf", "did not participate", "pf"]\n", - "\t
\n", - "\t
\n", - "\t\t1997 - 98\n", - "\t\t\n", - "\t\t"str"\n", - "\t\t0\n", - "\t\t["1st", "did not participate", "competition not held"]\n", - "\t
\n", - "\t
\n", - "\t\t1998 - 99\n", - "\t\tresult - 0.82\n", - "\t\t"str"\n", - "\t\t0\n", - "\t\t["did not participate", "competition not held", "did not participate"]\n", - "\t
\n", - "\t
\n", - "\t\t1999 - 2000\n", - "\t\tnotes - 0.88\n", - "\t\t"str"\n", - "\t\t0\n", - "\t\t["did not participate", "did not participate", "competition not held"]\n", - "\t
\n", - "\t
\n", - "\t\t2000 - 01\n", - "\t\tnotes - 0.83\n", - "\t\t"str"\n", - "\t\t0\n", - "\t\t["competition not held", "1st", "competition not held"]\n", - "\t
\n", - "\t
\n", - "\t\t2001 - 02\n", - "\t\trank - 0.81\n", - "\t\t"str"\n", - "\t\t0\n", - "\t\t["5th", "did not participate", "did not participate"]\n", - "\t
\n", - "\t
\n", - "\t\t2002 - 03\n", - "\t\t\n", - "\t\t"str"\n", - "\t\t0\n", - "\t\t["dnp", "did not participate", "competition not held"]\n", - "\t
\n", - "\t
\n", - "\t\t2003 - 04\n", - "\t\tstatus - 0.83\n", - "\t\t"str"\n", - "\t\t0\n", - "\t\t["did not participate", "dnp", "did not participate"]\n", - "\t
\n", - "\t
\n", - "\t\t2005\n", - "\t\tstatus - 0.88\n", - "\t\t"str"\n", - "\t\t0\n", - "\t\t["did not participate", "did not participate", "pf"]\n", - "\t
\n", - "\t
\n", - "\t\t2006\n", - "\t\tnotes - 0.61\n", - "\t\t"str"\n", - "\t\t0\n", - "\t\t["did not participate", "did not participate", "did not participate"]\n", - "\t
\n", - "\t
\n", - "\t\t2007\n", - "\t\t\n", - "\t\t"str"\n", - "\t\t0\n", - "\t\t["did not participate", "did not participate", "competition not held"]\n", - "\t
\n", - "\t
\n", - "\t\t2008\n", - "\t\t\n", - "\t\t"str"\n", - "\t\t0\n", - "\t\t["dnp", "competition not held", "did not participate"]\n", - "\t
\n", - "\t
\n", - "\t\t2009\n", - "\t\tresult - 0.7\n", - "\t\t"str"\n", - "\t\t0\n", - "\t\t["competition not held", "did not participate", "competition not held"]\n", - "\t
\n", - "\t
\n", - "\t\t2010\n", - "\t\tnotes - 0.66\n", - "\t\t"str"\n", - "\t\t0\n", - "\t\t["competition not held", "competition not held", "dnp"]\n", - "\t
\n", - "\t
\n", - "\t\t2011\n", - "\t\tnotes - 0.85\n", - "\t\t"str"\n", - "\t\t0\n", - "\t\t["did not participate", "did not participate", "4th"]\n", - "\t
\n", - "\t
\n", - "\t\t2012\n", - "\t\t\n", - "\t\t"str"\n", - "\t\t0\n", - "\t\t["did not participate", "dnp", "6th"]\n", - "\t
\n", - "\t
\n", - "\t\t2013\n", - "\t\tnotes - 0.55\n", - "\t\t"str"\n", - "\t\t0\n", - "\t\t["competition not held", "did not participate", "sf"]\n", - "\t
\n", - "\t
\n", - "\t\t2014\n", - "\t\t\n", - "\t\t"str"\n", - "\t\t0\n", - "\t\t["did not participate", "did not participate", "-"]\n", - "\t
\n", - "
\n", - "\n" - ] - } - ], - "source": [ - "import xml.dom.minidom\n", - "\n", - "xml_string = \"\"\"south melbourne fc
competitionlocation - 0.72\"str\"0[\"ofc / afc champions league\", \"nsl / a - league\", \"ffv cup\"]
1993 - 94result - 0.81\"str\"0[\"did not participate\", \"2nd\", \"did not participate\"]
1994 - 95\"str\"0[\"did not participate\", \"sf\", \"sf\"]
1995 - 96result - 0.74\"str\"0[\"did not participate\", \"w\", \"w\"]
1996 - 97notes - 0.68\"str\"0[\"sf\", \"did not participate\", \"pf\"]
1997 - 98\"str\"0[\"1st\", \"did not participate\", \"competition not held\"]
1998 - 99result - 0.82\"str\"0[\"did not participate\", \"competition not held\", \"did not participate\"]
1999 - 2000notes - 0.88\"str\"0[\"did not participate\", \"did not participate\", \"competition not held\"]
2000 - 01notes - 0.83\"str\"0[\"competition not held\", \"1st\", \"competition not held\"]
2001 - 02rank - 0.81\"str\"0[\"5th\", \"did not participate\", \"did not participate\"]
2002 - 03\"str\"0[\"dnp\", \"did not participate\", \"competition not held\"]
2003 - 04status - 0.83\"str\"0[\"did not participate\", \"dnp\", \"did not participate\"]
2005status - 0.88\"str\"0[\"did not participate\", \"did not participate\", \"pf\"]
2006notes - 0.61\"str\"0[\"did not participate\", \"did not participate\", \"did not participate\"]
2007\"str\"0[\"did not participate\", \"did not participate\", \"competition not held\"]
2008\"str\"0[\"dnp\", \"competition not held\", \"did not participate\"]
2009result - 0.7\"str\"0[\"competition not held\", \"did not participate\", \"competition not held\"]
2010notes - 0.66\"str\"0[\"competition not held\", \"competition not held\", \"dnp\"]
2011notes - 0.85\"str\"0[\"did not participate\", \"did not participate\", \"4th\"]
2012\"str\"0[\"did not participate\", \"dnp\", \"6th\"]
2013notes - 0.55\"str\"0[\"competition not held\", \"did not participate\", \"sf\"]
2014\"str\"0[\"did not participate\", \"did not participate\", \"-\"]
\"\"\"\n", + "corrects = 0\n", + "total = 0\n", "\n", - "# Парсим строку\n", - "dom = xml.dom.minidom.parseString(xml_string)\n", "\n", - "# Преобразуем в форматированную строку с отступами\n", - "pretty_xml_string = dom.toprettyxml()\n", + "# Validate entries\n", + "def get_accurate(dataset,answ_field):\n", + " corrects = 0\n", + " for entry in tqdm(dataset):\n", + " df = pd.read_csv(StringIO(entry['table_text']), delimiter='#')\n", + " pandas_eval = str(bool(eval(entry['answ_field'])))\n", + " if str(bool(entry['label'])) == str(pandas_eval):\n", + " corrects += 1\n", "\n", - "# Выводим на печать\n", - "print(pretty_xml_string)" + "print(corrects, total, corrects / total)" ] }, { "cell_type": "code", - "execution_count": 132, - "id": "6d295be4-a38f-4b45-a677-b3231f1e35a1", + "execution_count": 112, + "id": "fc60f1d7-68c7-4013-8471-65f187fcee97", "metadata": {}, "outputs": [], "source": [ - "import xml.etree.ElementTree as ET\n", - "root = ET.fromstring('south melbourne fc
competitionlocation - 0.72\"str\"0[\"ofc / afc champions league\", \"nsl / a - league\", \"ffv cup\"]
1993 - 94result - 0.81\"str\"0[\"did not participate\", \"2nd\", \"did not participate\"]
1994 - 95\"str\"0[\"did not participate\", \"sf\", \"sf\"]
1995 - 96result - 0.74\"str\"0[\"did not participate\", \"w\", \"w\"]
1996 - 97notes - 0.68\"str\"0[\"sf\", \"did not participate\", \"pf\"]
1997 - 98\"str\"0[\"1st\", \"did not participate\", \"competition not held\"]
1998 - 99result - 0.82\"str\"0[\"did not participate\", \"competition not held\", \"did not participate\"]
1999 - 2000notes - 0.88\"str\"0[\"did not participate\", \"did not participate\", \"competition not held\"]
2000 - 01notes - 0.83\"str\"0[\"competition not held\", \"1st\", \"competition not held\"]
2001 - 02rank - 0.81\"str\"0[\"5th\", \"did not participate\", \"did not participate\"]
2002 - 03\"str\"0[\"dnp\", \"did not participate\", \"competition not held\"]
2003 - 04status - 0.83\"str\"0[\"did not participate\", \"dnp\", \"did not participate\"]
2005status - 0.88\"str\"0[\"did not participate\", \"did not participate\", \"pf\"]
2006notes - 0.61\"str\"0[\"did not participate\", \"did not participate\", \"did not participate\"]
2007\"str\"0[\"did not participate\", \"did not participate\", \"competition not held\"]
2008\"str\"0[\"dnp\", \"competition not held\", \"did not participate\"]
2009result - 0.7\"str\"0[\"competition not held\", \"did not participate\", \"competition not held\"]
2010notes - 0.66\"str\"0[\"competition not held\", \"competition not held\", \"dnp\"]
2011notes - 0.85\"str\"0[\"did not participate\", \"did not participate\", \"4th\"]
2012\"str\"0[\"did not participate\", \"dnp\", \"6th\"]
2013notes - 0.55\"str\"0[\"competition not held\", \"did not participate\", \"sf\"]
2014\"str\"0[\"did not participate\", \"did not participate\", \"-\"]
')" + "p,t = (1,12)" ] }, { "cell_type": "code", - "execution_count": 134, - "id": "1be77a9c-921a-49fd-96e6-c5ff9ca0d31e", + "execution_count": 113, + "id": "9baa5180-c4b7-48e1-85fd-8d1460bd16dd", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 113, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print(root)" + "p" ] }, { - "cell_type": "code", - "execution_count": 22, - "id": "2bfd3701-f42b-45dd-a354-67b6fdb8834c", + "cell_type": "code", + "execution_count": 125, + "id": "bac0a54b-e587-45ff-980e-b3ba9b6be504", "metadata": {}, "outputs": [], "source": [ - "sep_data_len = []\n", - "sem_data_len = []\n", - "for data in data_true:\n", - " sep_data_len.append(len(data['nlsep_query']))\n", - " sem_data_len.append(len(data['semtab_query']))" + "serialization_type='ttyt'\n", + "notation=None\n", + "param_position=None\n", + "keys = [x for x in (serialization_type,notation,param_position) if x != None]" ] }, { "cell_type": "code", - "execution_count": 45, - "id": "0c8e8517-9c54-4ff5-b59c-02b7179dbec6", + "execution_count": 126, + "id": "96be132f-cc9e-41c5-87df-263c354431ed", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(30487,)" + "'ttyt'" ] }, - "execution_count": 45, + "execution_count": 126, "metadata": {}, "output_type": "execute_result" } ], "source": [ - " dif[dif<0].shape" + "'_'.join(keys)" ] }, { "cell_type": "code", - "execution_count": 23, - "id": "8f63e033-60e5-4947-87ce-5be353235904", + "execution_count": 68, + "id": "17908f7c-519a-41c3-b832-5a1ac35d1a07", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "2317 -6940 71.05049026283535 772.3828916818711\n" - ] + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['statement', 'table_text', 'pandas_code', 'pandas_eval', 'table_csv', 'label', 'table_caption', '__index_level_0__', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50'],\n", + " num_rows: 13167\n", + "})" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "import numpy as np \n", - "sep_data_len = np.array(sep_data_len)\n", - "sem_data_len = np.array(sem_data_len)\n", - "dif = sem_data_len - sep_data_len\n", - "print(max(dif),min(dif),dif.mean(),dif.std())\n" + "data = load_from_disk('pantab_fact_train_unique_tables_defgen')\n", + "data" ] }, { "cell_type": "code", - "execution_count": 46, - "id": "26906282-1dfb-4e3b-bb94-838c05f7a761", + "execution_count": 70, + "id": "81d8798b-5060-44c2-b22e-f5330d81a578", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Процент примеров превышающих соответствующее семантическое представление 34.598710790321846\n" - ] + "data": { + "text/plain": [ + "'date#result#score#brazil scorers#competition\\nmay 11 , 1919#w#6 - 0#friedenreich (3) , neco (2) , haroldo#south american championship\\nmay 18 , 1919#w#3 - 1#heitor , amílcar , millon#south american championship\\nmay 26 , 1919#d#2 - 2#neco (2)#south american championship\\nmay 29 , 1919#w#1 - 0#friedenreich#south american championship\\njune 1 , 1919#d#3 - 3#haroldo , arlindo (2)#taça roberto cherry\\n'" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print('Процент примеров превышающих соответствующее семантическое представление', \n", - " dif[dif<0].shape[0]/dif.shape[0]*100)" + "data[0]['table_text']" ] }, { "cell_type": "code", - "execution_count": 47, - "id": "355097ec-e455-43d8-9e98-07238719050d", + "execution_count": 71, + "id": "69431310-9077-4cb8-8c4a-c84bc2dcf206", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Процент примеров равных семантическое представление 0.06128285441917473\n" - ] - } - ], + "outputs": [], "source": [ - "print('Процент примеров равных семантическое представление', \n", - " dif[dif == 0].shape[0]/dif.shape[0]*100)" + "from sklearn.model_selection import train_test_split" ] }, { "cell_type": "code", - "execution_count": 51, - "id": "0fcec7d9-d074-4cb1-b867-f773e5752297", + "execution_count": 72, + "id": "84738994-c23d-4f6b-aae6-77757ab51e2c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Процент примеров отличающихся не более чем на окно в 50 символов от семантическое представление 9.173135412410913\n" + "Обучающая выборка: 10533 примеров\n", + "Тестовая выборка: 2634 примеров\n", + "\n", + "Распределение меток в train: Counter({1: 10248, 0: 285})\n", + "Распределение меток в test: Counter({1: 2563, 0: 71})\n" ] } ], "source": [ - "print('Процент примеров отличающихся не более чем на окно в 50 символов от семантическое представление', \n", - " dif[(dif <= 100) & (dif >= -100) ].shape[0]/dif.shape[0]*100)" - ] - }, - { - "cell_type": "code", - "execution_count": 55, - "id": "739ab108-4e3a-4729-b647-9f81a84b1bfb", - "metadata": {}, - "outputs": [], - "source": [ - "df_dif = pd.DataFrame({'NL+sep':sep_data_len,'Semantic headers':sem_data_len,'dif':dif}) " + "from datasets import load_from_disk, Dataset\n", + "from sklearn.model_selection import train_test_split\n", + "import numpy as np\n", + "\n", + "# Загружаем данные\n", + "data = load_from_disk('pantab_fact_train_unique_tables_defgen')\n", + "\n", + "# Получаем метки для стратификации\n", + "labels = data['label']\n", + "\n", + "# Создаем индексы для разбиения\n", + "train_indices, test_indices = train_test_split(\n", + " range(len(data)),\n", + " test_size=0.2,\n", + " random_state=42,\n", + " stratify=labels\n", + ")\n", + "\n", + "# Создаем обучающий и тестовый датасеты\n", + "train_dataset = data.select(train_indices)\n", + "test_dataset = data.select(test_indices)\n", + "\n", + "print(f\"Обучающая выборка: {len(train_dataset)} примеров\")\n", + "print(f\"Тестовая выборка: {len(test_dataset)} примеров\")\n", + "\n", + "# Проверяем распределение меток\n", + "from collections import Counter\n", + "print(f\"\\nРаспределение меток в train: {Counter(train_dataset['label'])}\")\n", + "print(f\"Распределение меток в test: {Counter(test_dataset['label'])}\")" ] }, { "cell_type": "code", - "execution_count": 57, - "id": "971d1b0a-1291-4253-93c2-67150fb2216d", + "execution_count": 73, + "id": "6a519a24-4c48-486b-8856-f2f823a596a6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "0.027701911822083494" ] }, - "execution_count": 57, + "execution_count": 73, "metadata": {}, "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ - "df_dif.plot()" + "71/2563" ] }, { "cell_type": "code", - "execution_count": 56, - "id": "fbcb71ff-23f5-4b9b-9b7b-082501f175e7", + "execution_count": 74, + "id": "8b222dce-b154-4db9-bdc6-e290e1df814d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "0.02781030444964871" ] }, - "execution_count": 56, + "execution_count": 74, "metadata": {}, "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ - "df_dif.rolling(window=100).mean().plot()" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "id": "c711723a-e62c-417f-aec4-ea690cf91c0e", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Collecting matplotlib\n", - " Using cached matplotlib-3.10.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (8.7 MB)\n", - "Requirement already satisfied: numpy>=1.23 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from matplotlib) (2.2.6)\n", - "Requirement already satisfied: packaging>=20.0 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from matplotlib) (25.0)\n", - "Collecting cycler>=0.10\n", - " Using cached cycler-0.12.1-py3-none-any.whl (8.3 kB)\n", - "Requirement already satisfied: pillow>=8 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from matplotlib) (12.0.0)\n", - "Collecting pyparsing>=3\n", - " Using cached pyparsing-3.2.5-py3-none-any.whl (113 kB)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from matplotlib) (2.9.0.post0)\n", - "Collecting kiwisolver>=1.3.1\n", - " Using cached kiwisolver-1.4.9-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.6 MB)\n", - "Collecting contourpy>=1.0.1\n", - " Using cached contourpy-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (325 kB)\n", - "Collecting fonttools>=4.22.0\n", - " Downloading fonttools-4.61.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (4.9 MB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.9/4.9 MB\u001b[0m \u001b[31m1.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n", - "\u001b[?25hRequirement already satisfied: six>=1.5 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from python-dateutil>=2.7->matplotlib) (1.17.0)\n", - "Installing collected packages: pyparsing, kiwisolver, fonttools, cycler, contourpy, matplotlib\n", - "Successfully installed contourpy-1.3.2 cycler-0.12.1 fonttools-4.61.0 kiwisolver-1.4.9 matplotlib-3.10.7 pyparsing-3.2.5\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], - "source": [ - "pip install matplotlib" + "285/10248" ] }, { "cell_type": "code", - "execution_count": 58, - "id": "ab1dbeca-2f47-440a-8188-205a5ca5b6dc", + "execution_count": 75, + "id": "5f0fa541-f0fd-44a1-990d-922db40b3b02", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: modelscope in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (1.31.0)\n", - "Requirement already satisfied: setuptools in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from modelscope) (59.6.0)\n", - "Requirement already satisfied: filelock in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from modelscope) (3.20.0)\n", - "Requirement already satisfied: tqdm>=4.64.0 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from modelscope) (4.67.1)\n", - "Requirement already satisfied: urllib3>=1.26 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from modelscope) (2.5.0)\n", - "Requirement already satisfied: requests>=2.25 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from modelscope) (2.32.5)\n", - "Requirement already satisfied: charset_normalizer<4,>=2 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from requests>=2.25->modelscope) (3.4.4)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from requests>=2.25->modelscope) (2025.11.12)\n", - "Requirement already satisfied: idna<4,>=2.5 in /media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/.myenv/lib/python3.10/site-packages (from requests>=2.25->modelscope) (3.11)\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['statement', 'table_text', 'pandas_code', 'pandas_eval', 'table_csv', 'label', 'table_caption', '__index_level_0__', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50'],\n", + " num_rows: 10533\n", + "})" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "pip install modelscope" + "train_dataset" ] }, { "cell_type": "code", - "execution_count": 13, - "id": "83b675e7-1cd7-4ff6-af1e-fc0c579b3018", + "execution_count": 81, + "id": "60dee700-c788-4523-903b-5e20987b525f", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Downloading Model from https://www.modelscope.cn to directory: /home/poddubny/.cache/modelscope/hub/models/deepseek-ai/deepseek-coder-7b-instruct-v1.5\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2025-12-05 14:42:29,424 - modelscope - INFO - Target directory already exists, skipping creation.\n" - ] + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['statement', 'table_text', 'pandas_code', 'pandas_eval', 'table_csv', 'label', 'table_caption', '__index_level_0__', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50'],\n", + " num_rows: 10533\n", + "})" + ] + }, + "execution_count": 81, + "metadata": {}, + "output_type": "execute_result" } ], - "source": [ - "from modelscope import AutoTokenizer, AutoModelForCausalLM\n", - "tokenizer = AutoTokenizer.from_pretrained(\"deepseek-ai/deepseek-coder-7b-instruct-v1.5\", trust_remote_code=True)" - ] + "source": [] }, { "cell_type": "code", - "execution_count": 14, - "id": "33b87b60-c858-4f67-ba58-de9d4ab10f32", + "execution_count": 102, + "id": "8d2b93c9-4a45-45c2-9be1-164bcde5012b", "metadata": {}, "outputs": [], "source": [ - "def compute_tokens_lenghts(text,tokenizer):\n", - " messages=[\n", - " { 'role': 'system', 'content': \"\"},\n", - " { 'role': 'user', 'content': text}\n", - " ]\n", - " return tokenizer.apply_chat_template(messages, add_generation_prompt=False, return_tensors=\"pt\").shape[1]" + "test_data_train = train_dataset.to_pandas().sample(n=500, random_state=42)\n", + "test_data_val = test_dataset.to_pandas().sample(n=100, random_state=42)" ] }, { "cell_type": "code", - "execution_count": 15, - "id": "5ff47f70-8568-4652-8118-c46ccf4b4f60", + "execution_count": 112, + "id": "54c42cae-159d-47dd-a267-6f8f3f6f4b3e", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 88116/88116 [04:48<00:00, 305.47it/s]\n" - ] - } - ], + "outputs": [], "source": [ - "from tqdm import tqdm\n", - "sep_data_len_token = []\n", - "sem_data_len_token = []\n", - "\n", - "for data in tqdm(data_true):\n", - " sep_data_len_token.append(compute_tokens_lenghts(data['nlsep_query'],tokenizer))\n", - " sem_data_len_token.append(compute_tokens_lenghts(data['semtab_query'],tokenizer))" + "data_train_all = train_dataset.to_pandas()\n", + "data_val_all = test_dataset.to_pandas()" ] }, { "cell_type": "code", - "execution_count": 16, - "id": "68123f44-9c19-4b8e-9939-03cb9ab65220", + "execution_count": 103, + "id": "6df2da06-e84c-4beb-afd4-7c7a32470bfc", "metadata": {}, "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "100%|██████████| 88116/88116 [01:12<00:00, 1215.26it/s]\n" - ] + "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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + "
statementtable_textpandas_codepandas_evaltable_csvlabeltable_caption__index_level_0__semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50
4228game 31 and 32 be both in january 1979 , on th...tie no#home team#score#away team#date\\n1#darli...all(df.loc[df['tie no'].isin(['31', '32']), 'd...True2-18657589-3.html.csv11978 - 79 fa cup39669<TABLE DESCRIPTION=\"1978 - 79 fa cup\"><HEADER ...
2128kyle eastmond 's cross code debut be 3 year la...player#int'l debut#year#cross code debut#date\\...(pd.to_datetime(df[df['player'] == 'kyle eastm...True2-18860278-2.html.csv1list of dual - code rugby internationals39336<TABLE DESCRIPTION=\"list of dual - code rugby ...
1408the republican party comprise 2 incumbent , si...district#incumbent#party#first elected#result#...len(df[(df['party'] == 'republican') & (df['in...True1-1341884-23.html.csv1united states house of representatives electio...28461<TABLE DESCRIPTION=\"united states house of rep...
5397the cosworth engine have a finish of 27year#chassis#engine#start#finish#entrant\\n1977...any((df['engine'] == 'cosworth') & (df['finish...True2-1228288-5.html.csv1danny ongais72660<TABLE DESCRIPTION=\"danny ongais\"><HEADER NAME...
2870banants - 2 be team 1 when ulisses be team 2team 1#agg#team 2#1st leg#2nd leg\\nbanants - 2...df[(df['team 1'] == 'banants - 2') & (df['team...True2-17372848-1.html.csv12008 armenian cup82907<TABLE DESCRIPTION=\"2008 armenian cup\"><HEADER...
..............................
9451a game at the sit of the pontiac silverdome ha...week#date#opponent#result#kickoff#game site#re...df[(df['game site'] == 'pontiac silverdome') &...True2-10659676-2.html.csv11999 st. louis rams season85642<TABLE DESCRIPTION=\"1999 st. louis rams season...
914sd eibar play 38 with a goal difference of - 7position#club#played#points#wins#draws#losses#...(df[df['club'] == 'sd eibar']['played'].values...True2-12107080-2.html.csv11989 - 90 segunda división63646<TABLE DESCRIPTION=\"1989 - 90 segunda división...
3025among soap opera actor , lesley saweard have b...rank#actor#character#soap opera#years#duration...df[df['actor'] == 'lesley saweard']['duration'...True2-18772558-1.html.csv1list of longest - serving soap opera actors5987<TABLE DESCRIPTION=\"list of longest - serving ...
3282the away team score be 6.16 (52) on august 24 ...home team#home team score#away team#away team ...df[df['date'] == '24 august 1940']['away team ...True2-10807253-17.html.csv11940 vfl season65308<TABLE DESCRIPTION=\"1940 vfl season\"><HEADER N...
5516breakout have a catalog number of pcr 502catalog#title#year#composer#released\\npcr 501#...df.loc[df['title'] == 'breakout', 'catalog'].i...True2-12187109-3.html.csv1prometheus records81420<TABLE DESCRIPTION=\"prometheus records\"><HEADE...
\n", + "

500 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " statement \\\n", + "4228 game 31 and 32 be both in january 1979 , on th... \n", + "2128 kyle eastmond 's cross code debut be 3 year la... \n", + "1408 the republican party comprise 2 incumbent , si... \n", + "5397 the cosworth engine have a finish of 27 \n", + "2870 banants - 2 be team 1 when ulisses be team 2 \n", + "... ... \n", + "9451 a game at the sit of the pontiac silverdome ha... \n", + "914 sd eibar play 38 with a goal difference of - 7 \n", + "3025 among soap opera actor , lesley saweard have b... \n", + "3282 the away team score be 6.16 (52) on august 24 ... \n", + "5516 breakout have a catalog number of pcr 502 \n", + "\n", + " table_text \\\n", + "4228 tie no#home team#score#away team#date\\n1#darli... \n", + "2128 player#int'l debut#year#cross code debut#date\\... \n", + "1408 district#incumbent#party#first elected#result#... \n", + "5397 year#chassis#engine#start#finish#entrant\\n1977... \n", + "2870 team 1#agg#team 2#1st leg#2nd leg\\nbanants - 2... \n", + "... ... \n", + "9451 week#date#opponent#result#kickoff#game site#re... \n", + "914 position#club#played#points#wins#draws#losses#... \n", + "3025 rank#actor#character#soap opera#years#duration... \n", + "3282 home team#home team score#away team#away team ... \n", + "5516 catalog#title#year#composer#released\\npcr 501#... \n", + "\n", + " pandas_code pandas_eval \\\n", + "4228 all(df.loc[df['tie no'].isin(['31', '32']), 'd... True \n", + "2128 (pd.to_datetime(df[df['player'] == 'kyle eastm... True \n", + "1408 len(df[(df['party'] == 'republican') & (df['in... True \n", + "5397 any((df['engine'] == 'cosworth') & (df['finish... True \n", + "2870 df[(df['team 1'] == 'banants - 2') & (df['team... True \n", + "... ... ... \n", + "9451 df[(df['game site'] == 'pontiac silverdome') &... True \n", + "914 (df[df['club'] == 'sd eibar']['played'].values... True \n", + "3025 df[df['actor'] == 'lesley saweard']['duration'... True \n", + "3282 df[df['date'] == '24 august 1940']['away team ... True \n", + "5516 df.loc[df['title'] == 'breakout', 'catalog'].i... True \n", + "\n", + " table_csv label \\\n", + "4228 2-18657589-3.html.csv 1 \n", + "2128 2-18860278-2.html.csv 1 \n", + "1408 1-1341884-23.html.csv 1 \n", + "5397 2-1228288-5.html.csv 1 \n", + "2870 2-17372848-1.html.csv 1 \n", + "... ... ... \n", + "9451 2-10659676-2.html.csv 1 \n", + "914 2-12107080-2.html.csv 1 \n", + "3025 2-18772558-1.html.csv 1 \n", + "3282 2-10807253-17.html.csv 1 \n", + "5516 2-12187109-3.html.csv 1 \n", + "\n", + " table_caption __index_level_0__ \\\n", + "4228 1978 - 79 fa cup 39669 \n", + "2128 list of dual - code rugby internationals 39336 \n", + "1408 united states house of representatives electio... 28461 \n", + "5397 danny ongais 72660 \n", + "2870 2008 armenian cup 82907 \n", + "... ... ... \n", + "9451 1999 st. louis rams season 85642 \n", + "914 1989 - 90 segunda división 63646 \n", + "3025 list of longest - serving soap opera actors 5987 \n", + "3282 1940 vfl season 65308 \n", + "5516 prometheus records 81420 \n", + "\n", + " semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50 \n", + "4228
\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", + " \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", + "
table_csvlabelstatementtable_captionpandas_codepandas_eval
02-15401676-3.html.csv1haroldo be mention as a brazil scorer for 2 di...1919 in brazilian footballdf['brazil scorers'].apply(lambda x: 'haroldo'...True
12-15401676-3.html.csv14 of the 5 game be for the south american cham...1919 in brazilian football(df['competition'].value_counts()['south ameri...True
22-15401676-3.html.csv1friedenreich be mention as a brazil scorer for...1919 in brazilian footballdf['brazil scorers'].str.contains('friedenreic...True
32-15401676-3.html.csv1there be 2 different game where the highest sc...1919 in brazilian footballlen(df[df['score'].str.extract(r'^(\\d+) - \\d+$...True
42-15401676-3.html.csv14 of the 5 game be play in may 19191919 in brazilian football(df['date'].str.contains('may') & df['date'].s...True
.....................
879691-20861261-4.html.csv1jerraud power , 192 pound (87 kg) , be choose ...2009 indianapolis colts seasondf[(df['player'] == 'jerraud powers') & (df['w...True
879701-20861261-4.html.csv0terrence taylor play for auburn2009 indianapolis colts seasondf[df['player'] == 'terrance taylor']['college...False
879711-20861261-4.html.csv0curtis painter 's position be quarterback and ...2009 indianapolis colts season(df[df['player'] == 'curtis painter']['positio...False
879721-20861261-4.html.csv0the player who weigh the most play in round 32009 indianapolis colts season(df.loc[df['weight'].str.extract('(\\\\d+)').ast...False
879731-28578233-1.html.csv1for 2007 / 08 , metal - volume (thousand tons)...iran mercantile exchangedf.loc[df['ime exchange (including spot , cred...True
\n", + "

87974 rows × 6 columns

\n", + "" + ], + "text/plain": [ + " table_csv label \\\n", + "0 2-15401676-3.html.csv 1 \n", + "1 2-15401676-3.html.csv 1 \n", + "2 2-15401676-3.html.csv 1 \n", + "3 2-15401676-3.html.csv 1 \n", + "4 2-15401676-3.html.csv 1 \n", + "... ... ... \n", + "87969 1-20861261-4.html.csv 1 \n", + "87970 1-20861261-4.html.csv 0 \n", + "87971 1-20861261-4.html.csv 0 \n", + "87972 1-20861261-4.html.csv 0 \n", + "87973 1-28578233-1.html.csv 1 \n", + "\n", + " statement \\\n", + "0 haroldo be mention as a brazil scorer for 2 di... \n", + "1 4 of the 5 game be for the south american cham... \n", + "2 friedenreich be mention as a brazil scorer for... \n", + "3 there be 2 different game where the highest sc... \n", + "4 4 of the 5 game be play in may 1919 \n", + "... ... \n", + "87969 jerraud power , 192 pound (87 kg) , be choose ... \n", + "87970 terrence taylor play for auburn \n", + "87971 curtis painter 's position be quarterback and ... \n", + "87972 the player who weigh the most play in round 3 \n", + "87973 for 2007 / 08 , metal - volume (thousand tons)... \n", + "\n", + " table_caption \\\n", + "0 1919 in brazilian football \n", + "1 1919 in brazilian football \n", + "2 1919 in brazilian football \n", + "3 1919 in brazilian football \n", + "4 1919 in brazilian football \n", + "... ... \n", + "87969 2009 indianapolis colts season \n", + "87970 2009 indianapolis colts season \n", + "87971 2009 indianapolis colts season \n", + "87972 2009 indianapolis colts season \n", + "87973 iran mercantile exchange \n", + "\n", + " pandas_code pandas_eval \n", + "0 df['brazil scorers'].apply(lambda x: 'haroldo'... True \n", + "1 (df['competition'].value_counts()['south ameri... True \n", + "2 df['brazil scorers'].str.contains('friedenreic... True \n", + "3 len(df[df['score'].str.extract(r'^(\\d+) - \\d+$... True \n", + "4 (df['date'].str.contains('may') & df['date'].s... True \n", + "... ... ... \n", + "87969 df[(df['player'] == 'jerraud powers') & (df['w... True \n", + "87970 df[df['player'] == 'terrance taylor']['college... False \n", + "87971 (df[df['player'] == 'curtis painter']['positio... False \n", + "87972 (df.loc[df['weight'].str.extract('(\\\\d+)').ast... False \n", + "87973 df.loc[df['ime exchange (including spot , cred... True \n", + "\n", + "[87974 rows x 6 columns]" + ] + }, + "execution_count": 116, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "import numpy as np \n", - "sep_data_len_token = np.array(sep_data_len_token)\n", - "sem_data_len_token = np.array(sem_data_len_token)\n", - "dif_token = sem_data_len_token - sep_data_len_token\n", - "print(max(dif_token),min(dif_token),dif_token.mean(),dif_token.std())" + "d2 = load_from_disk('pantab_fact_train/')\n", + "dd2 = d2.to_pandas()\n", + "dd2 = dd2[['table_csv','label','statement','table_caption','pandas_code','pandas_eval']]\n", + "dd2" ] }, { "cell_type": "code", - "execution_count": 117, - "id": "cc1671af-1451-47ea-b978-14509a88ac4e", + "execution_count": null, + "id": "733baffc-cc5b-4813-b4b2-5bf10e40162b", "metadata": {}, "outputs": [], - "source": [ - "k = sem_data_len_token/sep_data_len_token*100" - ] + "source": [] }, { "cell_type": "code", - "execution_count": 118, - "id": "a45ad8fd-d365-4f96-9900-f113084e1356", + "execution_count": 120, + "id": "e41a238d-6036-4723-9373-d81f343089f4", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "18.242894056847543 481.9742489270387\n" - ] + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
table_captiontable_csvtable_textsemtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50
0daniel gimeno - traver2-16965329-8.html.csvtournament#2005#2006#2007#2008#2009#2010#2011#...<TABLE DESCRIPTION=\"daniel gimeno - traver\"><H...
12007 - 08 portland trail blazers season1-11964047-9.html.csv#date#visitor#score#home#leading scorer#attend...<TABLE DESCRIPTION=\"2007 - 08 portland trail b...
2espn sunday night football results (1987 - 2005)2-13193466-15.html.csvdate#visiting team#final score#host team#stadi...<TABLE DESCRIPTION=\"espn sunday night football...
3volleyball at the 2008 summer olympics - men '...2-18499677-1.html.csvname#height#weight#spike#2008 club\\nevgeni iva...<TABLE DESCRIPTION=\"volleyball at the 2008 sum...
4united states house of representatives electio...1-1342013-12.html.csvdistrict#incumbent#party#first elected#result#...<TABLE DESCRIPTION=\"united states house of rep...
...............
26292008 - 09 dallas mavericks season2-17288869-9.html.csvgame#date#team#score#high points#high rebounds...<TABLE DESCRIPTION=\"2008 - 09 dallas mavericks...
2630alycia moulton2-15096003-5.html.csvoutcome#date#tournament#surface#partner#oppone...<TABLE DESCRIPTION=\"alycia moulton\"><HEADER NA...
26311921 grand prix season2-18269311-2.html.csvname#circuit#date#winning driver#winning const...<TABLE DESCRIPTION=\"1921 grand prix season\"><H...
2632force one iron league junior heavyweight champ...2-14738809-1.html.csvwrestler :#times :#date :#place :#successful d...<TABLE DESCRIPTION=\"force one iron league juni...
2633miller barber2-1552405-1.html.csvdate#tournament#winning score#margin of victor...<TABLE DESCRIPTION=\"miller barber\"><HEADER NAM...
\n", + "

2634 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " table_caption \\\n", + "0 daniel gimeno - traver \n", + "1 2007 - 08 portland trail blazers season \n", + "2 espn sunday night football results (1987 - 2005) \n", + "3 volleyball at the 2008 summer olympics - men '... \n", + "4 united states house of representatives electio... \n", + "... ... \n", + "2629 2008 - 09 dallas mavericks season \n", + "2630 alycia moulton \n", + "2631 1921 grand prix season \n", + "2632 force one iron league junior heavyweight champ... \n", + "2633 miller barber \n", + "\n", + " table_csv \\\n", + "0 2-16965329-8.html.csv \n", + "1 1-11964047-9.html.csv \n", + "2 2-13193466-15.html.csv \n", + "3 2-18499677-1.html.csv \n", + "4 1-1342013-12.html.csv \n", + "... ... \n", + "2629 2-17288869-9.html.csv \n", + "2630 2-15096003-5.html.csv \n", + "2631 2-18269311-2.html.csv \n", + "2632 2-14738809-1.html.csv \n", + "2633 2-1552405-1.html.csv \n", + "\n", + " table_text \\\n", + "0 tournament#2005#2006#2007#2008#2009#2010#2011#... \n", + "1 #date#visitor#score#home#leading scorer#attend... \n", + "2 date#visiting team#final score#host team#stadi... \n", + "3 name#height#weight#spike#2008 club\\nevgeni iva... \n", + "4 district#incumbent#party#first elected#result#... \n", + "... ... \n", + "2629 game#date#team#score#high points#high rebounds... \n", + "2630 outcome#date#tournament#surface#partner#oppone... \n", + "2631 name#circuit#date#winning driver#winning const... \n", + "2632 wrestler :#times :#date :#place :#successful d... \n", + "2633 date#tournament#winning score#margin of victor... \n", + "\n", + " semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50 \n", + "0
\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", + " \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", + "
table_csvlabelstatementtable_captionpandas_codepandas_eval
02-15401676-3.html.csv1haroldo be mention as a brazil scorer for 2 di...1919 in brazilian footballdf['brazil scorers'].apply(lambda x: 'haroldo'...True
12-15401676-3.html.csv14 of the 5 game be for the south american cham...1919 in brazilian football(df['competition'].value_counts()['south ameri...True
22-15401676-3.html.csv1friedenreich be mention as a brazil scorer for...1919 in brazilian footballdf['brazil scorers'].str.contains('friedenreic...True
32-15401676-3.html.csv1there be 2 different game where the highest sc...1919 in brazilian footballlen(df[df['score'].str.extract(r'^(\\d+) - \\d+$...True
42-15401676-3.html.csv14 of the 5 game be play in may 19191919 in brazilian football(df['date'].str.contains('may') & df['date'].s...True
.....................
879691-20861261-4.html.csv1jerraud power , 192 pound (87 kg) , be choose ...2009 indianapolis colts seasondf[(df['player'] == 'jerraud powers') & (df['w...True
879701-20861261-4.html.csv0terrence taylor play for auburn2009 indianapolis colts seasondf[df['player'] == 'terrance taylor']['college...False
879711-20861261-4.html.csv0curtis painter 's position be quarterback and ...2009 indianapolis colts season(df[df['player'] == 'curtis painter']['positio...False
879721-20861261-4.html.csv0the player who weigh the most play in round 32009 indianapolis colts season(df.loc[df['weight'].str.extract('(\\\\d+)').ast...False
879731-28578233-1.html.csv1for 2007 / 08 , metal - volume (thousand tons)...iran mercantile exchangedf.loc[df['ime exchange (including spot , cred...True
\n", + "

87974 rows × 6 columns

\n", + "" + ], + "text/plain": [ + " table_csv label \\\n", + "0 2-15401676-3.html.csv 1 \n", + "1 2-15401676-3.html.csv 1 \n", + "2 2-15401676-3.html.csv 1 \n", + "3 2-15401676-3.html.csv 1 \n", + "4 2-15401676-3.html.csv 1 \n", + "... ... ... \n", + "87969 1-20861261-4.html.csv 1 \n", + "87970 1-20861261-4.html.csv 0 \n", + "87971 1-20861261-4.html.csv 0 \n", + "87972 1-20861261-4.html.csv 0 \n", + "87973 1-28578233-1.html.csv 1 \n", + "\n", + " statement \\\n", + "0 haroldo be mention as a brazil scorer for 2 di... \n", + "1 4 of the 5 game be for the south american cham... \n", + "2 friedenreich be mention as a brazil scorer for... \n", + "3 there be 2 different game where the highest sc... \n", + "4 4 of the 5 game be play in may 1919 \n", + "... ... \n", + "87969 jerraud power , 192 pound (87 kg) , be choose ... \n", + "87970 terrence taylor play for auburn \n", + "87971 curtis painter 's position be quarterback and ... \n", + "87972 the player who weigh the most play in round 3 \n", + "87973 for 2007 / 08 , metal - volume (thousand tons)... \n", + "\n", + " table_caption \\\n", + "0 1919 in brazilian football \n", + "1 1919 in brazilian football \n", + "2 1919 in brazilian football \n", + "3 1919 in brazilian football \n", + "4 1919 in brazilian football \n", + "... ... \n", + "87969 2009 indianapolis colts season \n", + "87970 2009 indianapolis colts season \n", + "87971 2009 indianapolis colts season \n", + "87972 2009 indianapolis colts season \n", + "87973 iran mercantile exchange \n", + "\n", + " pandas_code pandas_eval \n", + "0 df['brazil scorers'].apply(lambda x: 'haroldo'... True \n", + "1 (df['competition'].value_counts()['south ameri... True \n", + "2 df['brazil scorers'].str.contains('friedenreic... True \n", + "3 len(df[df['score'].str.extract(r'^(\\d+) - \\d+$... True \n", + "4 (df['date'].str.contains('may') & df['date'].s... True \n", + "... ... ... \n", + "87969 df[(df['player'] == 'jerraud powers') & (df['w... True \n", + "87970 df[df['player'] == 'terrance taylor']['college... False \n", + "87971 (df[df['player'] == 'curtis painter']['positio... False \n", + "87972 (df.loc[df['weight'].str.extract('(\\\\d+)').ast... False \n", + "87973 df.loc[df['ime exchange (including spot , cred... True \n", + "\n", + "[87974 rows x 6 columns]" + ] + }, + "execution_count": 121, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print('Процент примеров превышающих соответствующее семантическое представление', \n", - " dif_token[dif_token<0].shape[0]/dif_token.shape[0]*100)\n", - "print('Процент примеров равных семантическое представление', \n", - " dif_token[dif_token == 0].shape[0]/dif_token.shape[0]*100)\n", - "print('Процент примеров отличающихся не более чем на окно в 50 токенов от семантическое представление', \n", - " dif_token[(dif_token <= 50) & (dif_token >= -50) ].shape[0]/dif_token.shape[0]*100)" - ] - }, - { - "cell_type": "code", - "execution_count": 74, - "id": "e7e25da6-5f9b-4985-900a-844f26a21bb8", - "metadata": {}, - "outputs": [], - "source": [ - "df_dif = pd.DataFrame({'NL+sep':sep_data_len_token,'Semantic headers':sem_data_len_token,\n", - " 'count columns':count_columns,'count rows':count_rows,'percent':100-sem_data_len_token/sep_data_len_token*100,\n", - " 'percent_sem':sep_data_len_token/sem_data_len_token*100}) " + "dd2" ] }, { "cell_type": "code", - "execution_count": 75, - "id": "1eca8ec9-268c-4f6d-867b-ab65a51c44cb", + "execution_count": 106, + "id": "44c3ebc1-0609-40c7-a194-f5e187e55d19", "metadata": {}, "outputs": [], "source": [ - "df_dif = df_dif[df_dif['count columns']<=15]" + "import pandas as pd" ] }, { "cell_type": "code", - "execution_count": 76, - "id": "02874c00-a4f2-4941-a629-356617d0c45b", + "execution_count": 123, + "id": "6a8fb3c7-4ed8-4159-b418-c8e799653749", "metadata": {}, "outputs": [ { @@ -1765,367 +10521,606 @@ " \n", " \n", " \n", - " NL+sep\n", - " Semantic headers\n", - " count columns\n", - " count rows\n", - " percent\n", - " percent_sem\n", + " table_caption\n", + " table_csv\n", + " table_text\n", + " semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50\n", " \n", " \n", " \n", " \n", - " count\n", - " 87968.000000\n", - " 87968.000000\n", - " 87968.000000\n", - " 87968.000000\n", - " 87968.000000\n", - " 87968.000000\n", + " 0\n", + " georgios theodoridis\n", + " 2-1115008-1.html.csv\n", + " year#tournament#venue#result#extra\\n1998#europ...\n", + " <TABLE DESCRIPTION=\"georgios theodoridis\"><HEA...\n", " \n", " \n", - " mean\n", - " 576.994703\n", - " 533.278942\n", - " 6.285161\n", - " 13.368861\n", - " -22.597923\n", - " 108.112814\n", + " 1\n", + " fady maalouf\n", + " 2-18490880-1.html.csv\n", + " date#topic of the show#song#original artist#pl...\n", + " <TABLE DESCRIPTION=\"fady maalouf\"><HEADER NAME...\n", " \n", " \n", - " std\n", - " 379.407588\n", - " 123.885545\n", - " 1.520930\n", - " 8.560545\n", - " 59.308091\n", - " 65.625147\n", + " 2\n", + " athletics at the 2008 summer olympics - women ...\n", + " 2-18569185-4.html.csv\n", + " name#nationality#4.30#4.45#4.55#result\\nyelena...\n", + " <TABLE DESCRIPTION=\"athletics at the 2008 summ...\n", " \n", " \n", - " min\n", - " 114.000000\n", - " 335.000000\n", - " 5.000000\n", - " 2.000000\n", - " -305.128205\n", - " 24.683544\n", + " 3\n", + " 1961 san diego chargers season\n", + " 2-15428670-1.html.csv\n", + " week#date#opponent#result#attendance\\n1#septem...\n", + " <TABLE DESCRIPTION=\"1961 san diego chargers se...\n", " \n", " \n", - " 25%\n", - " 317.000000\n", - " 440.000000\n", - " 5.000000\n", - " 7.000000\n", - " -65.555556\n", - " 60.402685\n", + " 4\n", + " 1995 open championship\n", + " 2-18103106-7.html.csv\n", + " place#player#country#score#to par#money\\nt1#jo...\n", + " <TABLE DESCRIPTION=\"1995 open championship\"><H...\n", " \n", " \n", - " 50%\n", - " 458.000000\n", - " 503.000000\n", - " 6.000000\n", - " 11.000000\n", - " -15.329358\n", - " 86.708192\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", " \n", " \n", - " 75%\n", - " 723.000000\n", - " 598.000000\n", - " 7.000000\n", - " 17.000000\n", - " 26.603870\n", - " 136.246966\n", + " 10528\n", + " 2006 asp world tour\n", + " 2-16135024-1.html.csv\n", + " date#location#country#event#winner#runner - up...\n", + " <TABLE DESCRIPTION=\"2006 asp world tour\"><HEAD...\n", " \n", " \n", - " max\n", - " 3872.000000\n", - " 1899.000000\n", - " 15.000000\n", - " 48.000000\n", - " 81.757106\n", - " 548.158640\n", + " 10529\n", + " mobile bay lpga classic\n", + " 2-17424546-2.html.csv\n", + " year#dates#champion#country#winning score#to p...\n", + " <TABLE DESCRIPTION=\"mobile bay lpga classic\"><...\n", + " \n", + " \n", + " 10530\n", + " none\n", + " 1-25920798-2.html.csv\n", + " episode#reward#leader battle#immunity#individu...\n", + " <TABLE DESCRIPTION=\"none\"><HEADER NAME=\"episod...\n", + " \n", + " \n", + " 10531\n", + " 1968 buffalo bills season\n", + " 2-16982985-1.html.csv\n", + " date#opponent#score#result#record\\naugust 5#de...\n", + " <TABLE DESCRIPTION=\"1968 buffalo bills season\"...\n", + " \n", + " \n", + " 10532\n", + " list of jag episodes\n", + " 1-228973-9.html.csv\n", + " no in series#no in season#title#directed by#wr...\n", + " <TABLE DESCRIPTION=\"list of jag episodes\"><HEA...\n", " \n", " \n", "\n", + "

10533 rows × 4 columns

\n", "" ], "text/plain": [ - " NL+sep Semantic headers count columns count rows \\\n", - "count 87968.000000 87968.000000 87968.000000 87968.000000 \n", - "mean 576.994703 533.278942 6.285161 13.368861 \n", - "std 379.407588 123.885545 1.520930 8.560545 \n", - "min 114.000000 335.000000 5.000000 2.000000 \n", - "25% 317.000000 440.000000 5.000000 7.000000 \n", - "50% 458.000000 503.000000 6.000000 11.000000 \n", - "75% 723.000000 598.000000 7.000000 17.000000 \n", - "max 3872.000000 1899.000000 15.000000 48.000000 \n", + " table_caption \\\n", + "0 georgios theodoridis \n", + "1 fady maalouf \n", + "2 athletics at the 2008 summer olympics - women ... \n", + "3 1961 san diego chargers season \n", + "4 1995 open championship \n", + "... ... \n", + "10528 2006 asp world tour \n", + "10529 mobile bay lpga classic \n", + "10530 none \n", + "10531 1968 buffalo bills season \n", + "10532 list of jag episodes \n", "\n", - " percent percent_sem \n", - "count 87968.000000 87968.000000 \n", - "mean -22.597923 108.112814 \n", - "std 59.308091 65.625147 \n", - "min -305.128205 24.683544 \n", - "25% -65.555556 60.402685 \n", - "50% -15.329358 86.708192 \n", - "75% 26.603870 136.246966 \n", - "max 81.757106 548.158640 " + " table_csv \\\n", + "0 2-1115008-1.html.csv \n", + "1 2-18490880-1.html.csv \n", + "2 2-18569185-4.html.csv \n", + "3 2-15428670-1.html.csv \n", + "4 2-18103106-7.html.csv \n", + "... ... \n", + "10528 2-16135024-1.html.csv \n", + "10529 2-17424546-2.html.csv \n", + "10530 1-25920798-2.html.csv \n", + "10531 2-16982985-1.html.csv \n", + "10532 1-228973-9.html.csv \n", + "\n", + " table_text \\\n", + "0 year#tournament#venue#result#extra\\n1998#europ... \n", + "1 date#topic of the show#song#original artist#pl... \n", + "2 name#nationality#4.30#4.45#4.55#result\\nyelena... \n", + "3 week#date#opponent#result#attendance\\n1#septem... \n", + "4 place#player#country#score#to par#money\\nt1#jo... \n", + "... ... \n", + "10528 date#location#country#event#winner#runner - up... \n", + "10529 year#dates#champion#country#winning score#to p... \n", + "10530 episode#reward#leader battle#immunity#individu... \n", + "10531 date#opponent#score#result#record\\naugust 5#de... \n", + "10532 no in series#no in season#title#directed by#wr... \n", + "\n", + " semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50 \n", + "0
<... \n", + "10530
\"\n", + "\n", + "### Table schema\n", + "{table}\n", + "### Query\n", + "{query}\n", + "### Response:\n", + "\"\"\".format(table=table, query=query).lstrip()" ] }, { "cell_type": "code", - "execution_count": 69, - "id": "23d4feb9-0667-44af-975f-73a860dbc63f", + "execution_count": 175, + "id": "e14298dc-2f13-4766-860d-ecad3cb7ef31", "metadata": {}, "outputs": [], "source": [ - "mask = p<10\n", - "p[ p<5] = p*2" + "def formatting_prompts_func(example,table_col_name='semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50'):\n", + " #output_texts = []\n", + " #print(example)\n", + " # Важно: example содержит списки, так как SFTTrainer передает батчи\n", + " #for i in range(len(example['statement'])):\n", + " # prompt = build_instruction_prompt(example[table_col_name][i], example['statement'][i])\n", + " # response = f'\"PANDA\": {example[\"pandas_code\"][i]}\\n{EOT_TOKEN}'\n", + " # output_texts.append(prompt + response)\n", + " #return output_texts\n", + " text = build_instruction_prompt(example[table_col_name], example['statement'])+ f'\"PANDA\": {example[\"pandas_code\"]}\\n'\n", + " example['len'] = len(tokenizer(text ,truncation=False)[\"input_ids\"]) \n", + " return example" ] }, { "cell_type": "code", - "execution_count": 70, - "id": "08541ba3-5a66-4c5e-afa7-531762a0f505", + "execution_count": 176, + "id": "6e91f022-915e-4888-93e1-456d2e6b34ec", "metadata": {}, "outputs": [ { "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "b5c60daf60ba4febaffad5c210ada40b", + "version_major": 2, + "version_minor": 0 + }, "text/plain": [ - "np.int64(4)" + "Map (num_proc=16): 0%| | 0/70254 [00:00 800). Running this sequence through the model will result in indexing errors\n", + "Token indices sequence length is longer than the specified maximum sequence length for this model (1016 > 800). Running this sequence through the model will result in indexing errors\n", + "Token indices sequence length is longer than the specified maximum sequence length for this model (847 > 800). Running this sequence through the model will result in indexing errors\n", + "Token indices sequence length is longer than the specified maximum sequence length for this model (1103 > 800). Running this sequence through the model will result in indexing errors\n", + "Token indices sequence length is longer than the specified maximum sequence length for this model (1228 > 800). Running this sequence through the model will result in indexing errors\n", + "Token indices sequence length is longer than the specified maximum sequence length for this model (854 > 800). Running this sequence through the model will result in indexing errors\n", + "Token indices sequence length is longer than the specified maximum sequence length for this model (813 > 800). Running this sequence through the model will result in indexing errors\n", + "Token indices sequence length is longer than the specified maximum sequence length for this model (935 > 800). Running this sequence through the model will result in indexing errors\n", + "Token indices sequence length is longer than the specified maximum sequence length for this model (1006 > 800). Running this sequence through the model will result in indexing errors\n", + "Token indices sequence length is longer than the specified maximum sequence length for this model (1002 > 800). Running this sequence through the model will result in indexing errors\n", + "Token indices sequence length is longer than the specified maximum sequence length for this model (810 > 800). Running this sequence through the model will result in indexing errors\n", + "Token indices sequence length is longer than the specified maximum sequence length for this model (812 > 800). Running this sequence through the model will result in indexing errors\n", + "Token indices sequence length is longer than the specified maximum sequence length for this model (884 > 800). Running this sequence through the model will result in indexing errors\n", + "Token indices sequence length is longer than the specified maximum sequence length for this model (864 > 800). Running this sequence through the model will result in indexing errors\n", + "Token indices sequence length is longer than the specified maximum sequence length for this model (877 > 800). Running this sequence through the model will result in indexing errors\n", + "Token indices sequence length is longer than the specified maximum sequence length for this model (825 > 800). Running this sequence through the model will result in indexing errors\n" + ] + } + ], + "source": [ + "r2 = train.map(formatting_prompts_func,num_proc=16)" + ] + }, + { + "cell_type": "code", + "execution_count": 153, + "id": "8a44202d-e20c-4521-8064-c7a6f6af02f3", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 179, + "id": "5fd76cb0-7e11-4a48-9801-44bc1aba7738", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "np.float64(1349.0)" + ] + }, + "execution_count": 179, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "p.min()" + "np.percentile(r['len'], 99)" ] }, { "cell_type": "code", - "execution_count": 99, - "id": "e80cf02d-23f6-4d2f-9fbb-c0df6c8efed7", + "execution_count": 152, + "id": "bc874524-3afd-42a6-b737-3a81c46d524d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "(490, 3474)" ] }, - "execution_count": 99, + "execution_count": 152, "metadata": {}, "output_type": "execute_result" - }, + } + ], + "source": [ + "min(r['len']),max(r['len'])" + ] + }, + { + "cell_type": "code", + "execution_count": 177, + "id": "de4adee6-492d-47f4-8c7a-b97d5eccc03f", + "metadata": {}, + "outputs": [ { "data": { - "image/png": "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", "text/plain": [ - "
" + "(464, 6220)" ] }, + "execution_count": 177, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ - "df_dif.plot()" + "min(r2['len']),max(r2['len'])" ] }, { "cell_type": "code", - "execution_count": 101, - "id": "32c6a929-b165-4ff3-9961-188423c2c84e", + "execution_count": 180, + "id": "93bff876-70e2-4e98-9509-f2b9abd990d8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "np.float64(1348.0)" ] }, - "execution_count": 101, + "execution_count": 180, "metadata": {}, "output_type": "execute_result" - }, + } + ], + "source": [ + "np.percentile(r2['len'], 99)" + ] + }, + { + "cell_type": "code", + "execution_count": 181, + "id": "9475e71c-cec9-4c5a-a176-30ab4dece2f4", + "metadata": {}, + "outputs": [ { "data": { - "image/png": "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", "text/plain": [ - "
" + "800" ] }, + "execution_count": 181, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ - "df_dif.rolling(window=500).mean().plot()" + "tokenizer.model_max_length" ] }, { "cell_type": "code", - "execution_count": 29, - "id": "0953311e-6a1b-4590-980a-33d805e48a99", + "execution_count": 132, + "id": "c484585f-6205-4d3c-8956-97cd739bb211", "metadata": {}, "outputs": [ { "data": { - "image/png": "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usTIkSOZOXMms2fPNj8fEhLCzp07SU9PV9T75eOPP6Z9+/Y2h4GWFhoaSocOHXj++eepV68e/fr147///rOKqe7X3mg08vHHH3PjjTfSrVs3u3G33347CQkJfP7553z00Uf4+fnxyiuvVEkbhBBCCHFtkfNxOR+3JOfjcj4uRF0nNdGFELVOUVERu3btwsXFxTycsGfPngwYMMD8r/ikfcSIEaSlpfHrr7+W2U5lexts3bqV/Px8+vXrZzfG3kn3Tz/9ZHedjz/+mB49ejB8+PBKtcuRyrSpOuh0OqveGYWFhSxevJj69eubJwwaMmQISUlJrFu3zmq9hQsX4unpSe/eva22WTwJUMOGDXn55Zf5888/2blzp/n5ESNGYDQa+fzzz8u0p/TnIDw8nK1bt/Lyyy8rrtM5duxYTp48yZgxY2yuU92v/bp16zh58iQvvvhiuXFHjx5l/vz5vPTSS9xyyy0MGDDA7jBlIYQQQgh75Hy8cuR8XM7H5XxciNpLeqILIZze9u3bzT0eUlNTWb16NefOnePRRx+1WevO0h133MHKlSuZOXMmR44coWfPnuTl5bFnzx7uvvtubrjhBsXtyMvL47PPPmPRokV0796dQYMG2Y319vamd+/efPfddxQVFdGwYUN27dpFXFyc3XV27tzJokWLFLenoirTpuoQFBTEt99+S3x8PC1atGDdunUcP36cGTNmmHsnTZgwgcWLF/P6669z9OhRgoOD2bhxIwcPHuTNN98s932fMGECa9asYfr06axZswYPDw/69evH6NGjWbhwIefPn2fw4MEYDAYOHDhA3759rSa62rlzJwMHDizTu6g848eP5+abb8bHx8fm85V57ffu3Wt1nOfPnwfg1KlTnDx50mrI586dOxk/fjytWrWyu728vDxeeukl+vTpw/3336/42IQQQggh5Hy8asj5uJyPy/m4ELWXJNGFEE7vs88+M//s5uZGq1ateOedd5g4caLDdTUaDd9++y1ffvkla9asYdOmTfj7+9OjR48K153LzMxk/fr1jB8/nmeffbbMJDulffzxx8yYMYPffvsNo9HIwIED+fbbb+0OOx0+fDg9evSoUJsqqqJtqg5+fn7MmjWL999/nz/++IMGDRowbdo0xo8fb45xd3dn4cKFzJkzhxUrVpCdnU3Lli2ZOXMmY8aMKXf7KpWKGTNm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IvTFF1+oVq1a8vEp+RX6AIDK78qSao0CPPVrfKrSsmzyrmZReLC3jl3I1Oqdp9Wqbg2ZzaZr7xBA5RYQkJNEv3Ilut1+eSV648aSif8rAAAAKgtqopcjjWp5q2mwj84mZeQpgWIYhs4mZahZsK8a1Sq4Zvn1yMzM1CeffKL/+7//U2xsrBISEhy3lJQUGYahhIQEhYaGymq1atmyZTp58qTWrl2rDz/8sERjuZrValVWVpZOnz6tf/3rX2rWrFmePr169VLNmjU1dOhQ7dixQydPntS2bds0efJk/f7776UaHwCgcsgtqXY+JVOrfzqrPaeTdeR8mvacTtbqn87qfEqmo6QaADguLpqeLmVl5dw/c+by/caNXRMXAAAASgUr0csRs9mkvjEhOv1HhqM2updHzlfJzyZlKMDbQ31i6pf4Cri4uDi99NJLkqSJEydq4sSJefrExsbqq6++0gsvvKAFCxZo5syZateunUaNGqWxY8eWaDxXuu+++yRJNWrU0A033KCXX345Tx8vLy8tX75cM2bM0NNPP620tDTVrl1bHTt2ZGU6AKBIUjIv6cDZZCWkZudps0s6diFDadm2UiupBqCCufrionXqXC7lIklNmpR9TAAAACg1JNHLmcj6fhrevZnjombnknMuatYmxF99YuqXWi3W9u3ba9myZQW2h4eHS5L69++v/v37O7X9/e9/d9zv06eP+vTp49QeEhKiX3/91fG4Q4cOTo9zXbktJCRE+/btk8ViyXORVUnasWOH0+OgoCC99tprBcYPAEBh3N2k8/kk0K90PjVb7sycAEiXV6JLOSVdrk6isxIdAACgUuFPwXIosr6fWtWtoWOJaUrJvCRfTzc1quVdajVYPT095edXeHI+MDCwwNrmAABUdF/9Ei/jGn2M//VrVde/DCICUK5dmUSPj5datSKJDgAAUIlVmJroQ4YM0V/+8he1bt1asbGxeu6553Tu3DmnPgcOHNBDDz2k1q1bq0uXLlqwYEGe/XzxxRe644471Lp1a/Xq1UvffPNNWb2EYjGbTWoc5KO2DfzVOMinVC9iduedd+qtt94qtM/mzZtVt27dUosBAABXOl7EWudF7Qegkmva9PL9X37J+ZckOgAAQKVVYZLoN910k2bNmqV//etfmjNnjk6ePKlnnnnG0Z6amqqBAweqXr16Wr16tcaMGaO33npLH330kaPPzp07NXr0aN1zzz1au3atunfvrqeeekq//fabK14SAAAoJ2y2a61DL14/AJVcmzaX7+/enfPvlUn0Ro3KNBwAAACUrgqTRO/fv7+ioqJUv359xcTEaPDgwdq1a5esVqskad26dbJarZo6daqaNWumnj17ql+/flq8eLFjH0uXLtXNN9+sQYMGqUmTJhoxYoRatWql5cuXu+plAQCAcsCvunuJ9gNQyUVGXr5/dRK9Xj3Jy6vsYwIAAECpqTBJ9CtdvHhR69evV3R0tNzdc/6Y3bVrl9q1aycPDw9Hv9jYWB09elRJSUmOPh07dnTaV2xsrHbt2lVmsQMAgPLHXMQZUVH7Aajk/Pwurzbfs0dKSZFyS01SygUAAKDSqVAXFn3jjTe0YsUKZWRkKCoqSu+++66j7fz58woJCXHqHxgY6Gjz8/PT+fPnHdty1apVS+fPny92LIZhyDCMPNsKasP1470suoowBnNjK6/x4c/h/FZulfn8+nt5XLvT//pVxtdfmc9tecL7W8m0aSMdOyalpkr//e/l7U2auCwkAAAAlA6XJtFnzJiR78U/rxQXF6cm/5uIDhw4UPfcc4/OnDmjt956S2PHjtX8+fNlMpXeRTcLkpycLPNVy9Gys7Nlt9tls9lks9nKPKbKxm63uzqECsdms8lutyslJUVZWVmuDidfhmEoPT1dklzys4vSxfmt3Crz+fV1L9rvHF93u+MbbpVJZT635Qlzm0qmdWtp3bqc+2vXXt7OSnQAAIBKx6VJ9Mcff1y9e/cutE+DBg0c9wMCAhQQEKCwsDA1adJEXbp00a5duxQdHa3AwMA8K8pzH+euPs+vT2JiYp7V6UVRo0YNWSwWp22ZmZlKTEyUxWLJ04brw/tYPBaLRWazWb6+vvL09HR1OPnKXYXn5+dHoqYS4vxWbpX5/IYGZxaxX035+fmVcjRlrzKf2/KERRaVzJUXF12z5vJ9kugAAACVjkuT6LlJ8euRu5InOztbkhQVFaVZs2bJarU66qRv2bJFYWFhjj92o6KitHXrVvXv39+xny1btigqKqrYxzeZTHn+yMx9nF8biufKrzvzXhZdRRmDufGV5xhx/Ti/lVtlPb+ZRUxuZtpsle6156qs57Y84b2tZK5Mol+8ePl+eHiZhwIAAIDSVSEuj/Xzzz9r+fLl2r9/v06fPq3vv/9eo0aNUsOGDRUdHS1J6tWrl9zd3fXiiy/q4MGDiouL09KlSzVgwADHfh599FF9++23WrRokQ4fPqy5c+dq7969euSRR1z10lDCpk+frrVr18owDL3++utavnx5ie171qxZevnllx2P+/XrpylTppTY/q/l0KFDuuWWWxxftwcAlJx1P50p0X4AqoCmTaWrv/nXvr10ww2uiQcAAAClpkJcWNTT01P//ve/NXfuXKWnpysoKEg333yzhg0bJg+PnAuB+fr6auHChZo0aZL69OmjmjVratiwYbr//vsd+4mJidGMGTM0a9YszZw5U40aNdK8efPUvHlzV720cuP555/Xmiu+hurv76/IyEg999xzatGihQsjK56+ffuqf//+evHFF1W/fn19+OGHJbLfhIQELV26VOvXry+R/eVn/Pjx2rJli+Lj41W9enVFR0fr2WefdVwToGnTpoqKitLixYv11FNPlVocAFAVpWUVbSV6UfsBqALc3KTataXjxy9vmzNHMleIdUoAAAAohgqRRA8PD9fSpUuv2a9FixZauXJloX169OihHj16lFRolcrNN9+sadOmScqpJz9r1iwNGTJEX3/9tWsDK4ZmzZrpm2++UWJiooKCgvJc/PV6ffLJJ4qOjlb9+vVLZH/5iYiIUK9evVS3bl0lJSVp7ty5GjhwoL766itHbfg+ffropZde0pNPPik3twrx4wsAFUKgt0eJ9gNQRXTocDmJfscdOY8BAABQ6bBMAg4eHh4KCgpSUFCQWrZsqcGDB+vs2bO6cOFCoc87ePCgnnzyScXExCg6OloPPfSQTpw4ISlnhXt4eHieW7t27Zz2cerUKaf2Fi1aKCIiQsnJyZKkEydOaOjQoerUqZOio6PVt29fbdmyxWkf3bp105IlS+Tm5qbatWtr27ZtCg8P17Bhwxx98ivBMnfuXN19992Fvsa4uDh169at0D5ff/21brjhBq1bt67QfgW5//77deONNyokJEQREREaMWKEzp49q9OnTzv6dOrUSUlJSfrhhx+u6xgAgPy1a1y0a7QUtR+AKuKZZ3JWnjdrJi1a5OpoAAAAUEpYyloWPvlEGj9eSkkpu2P6+kqvvirdc891PT0tLU3r1q1TaGio/P39C+x37tw5PfLII2rfvr0++OAD+fj4aOfOnbp06ZKjz5Ur3KWchPTcuXOd9pN7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VB3NmjXTd99957itXLnS0VZi48AAyok33njDePDBB10dBkrJE088YbzwwgtO255++mlj9OjRLooIJaV58+bGxo0bHY/tdrvRuXNn4/3333dsS05ONiIjI43PP//cFSHiOl19bvPz888/G82bNzdOnz5dRlGhpBR0fn///Xfj5ptvNn777Teja9euxuLFi8s+OKAI7rnnHmPixImOxzabzYiNjTXmz5/vwqhQlpiDwDAMIzEx0WjevLmxfft2wzByznlERITxxRdfOPocOnTIaN68ufHTTz+5KEqUhRtvvNH4+OOPGQNVTGpqqnHbbbcZmzdvNh555BFj8uTJhmHwf0FVMmfOHONvf/tbvm0lOQ5YiY5y4z//+Y8iIyM1fPhwdezYUX//+9/18ccfuzoslJDo6Ght3bpVR48elSQdOHBAP/74o2655RYXR4aSdurUKSUkJKhTp06Obb6+vmrbtq1++uknF0aG0pCamiqTyaQaNWq4OhSUALvdrueee04DBw5Us2bNXB0OUKDs7Gzt27fP6XeN2WxWp06d+F1ThTEHqZpSUlIkyfEN5r1798pqtTqNgyZNmqhevXratWuXK0JEKbPZbNqwYYPS09MVHR3NGKhiJk2apC5dujidb4n/C6qa48ePKzY2Vt27d9fo0aN15swZSSU7DtxKMmDgzzh58qRWrVqlAQMGaMiQIdqzZ48mT54sd3d39e7d29Xh4U964oknlJqaqh49eshischms2nkyJH629/+5urQUMISEhIkSbVq1XLaXqtWLerPVTJZWVmaMWOGevbsKR8fH1eHgxKwYMECubm56dFHH3V1KECh/vjjD9lstnx/11xdGxlVB3OQqsdut2vq1KmKiYlR8+bNJUnnz5+Xu7t7ng/4a9Wq5RgjqBx+/fVXPfDAA8rKylL16tU1b948NW3aVPv372cMVBEbNmzQL7/8ok8//TRPG/8XVB1t2rTRtGnTFBYWpoSEBM2bN08PP/yw1q9fX6LjgCQ6yg3DMBQZGalRo0ZJklq1aqWDBw/qww8/JIleCXzxxRdav369/vnPfzomNtOmTVNwcDDnF6iArFarnnnmGRmGoYkTJ7o6HJSAvXv3aunSpVq9erVMJpOrwwEA4JomTpyogwcPOtW+RdURFhamtWvXKiUlRV9++aXGjh2r5cuXuzoslJGzZ89qypQpWrRo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eerQoYNuuOEGp+3NmzfXrl27dPLkyXyfd+DAAZ04cUIxMTGKjo5WdHS0OnTooKysLJ04cUKJiYmKj49Xx44di/z68zNq1ChFR0frxhtvVFpamkaNGiUp571wc3NzTIQlqWbNmgoLC9Phw4fz3df+/ftVp04dx+S7uI4cOeKY7OeKiYnR8ePHZbPZHNtSU1NVvXr1Qvd15X5yV9EUFHd+ivr6U1JSFB0drTZt2ui+++7T4MGD87wGAAAAXD/m8HmVpzm8JLm5ual169aOx02aNFGNGjUcxyxonn91TMuXL9e7776rsLAwhYSEXHc8AHAtrEQHgEI0aNBAS5YsUUBAgCZMmKDnnntOXbp0UYsWLYq1n/j4eJnN5muujDh27Jg+/fRTrV27Vr///rtTW9++fbVx40bdeuut+SaE09PTFRERoRkzZuRpCwgIcKxs+bNeeOEFderUScnJyZo1a5ZeeOEFvfvuu9e1L09PzxKJ6Vri4+MVHBycb1thK4pK6j27kre3t9asWSPDMHTo0CGNGzdOERERuv3220v8WAAAAFURc/i8KuIcvih2796t9957Ty+88II+/PBDPfDAA64OCUAlxUp0AChE8+bNHV+R7NGjh2677TaNHTvWUQqkSZMm+v33350ugnPo0CElJyerSZMmjm179uxR48aNVa1atUKPN2PGDN1zzz0KDQ3N0+bp6aklS5Zo8+bNWrt2bZ4L60REROj48eOqVauWQkNDnW6+vr7y8fFR/fr19f3331/v2yEp5+uYoaGhat26tR555BF9/fXXslqtatKkiS5duqSff/7Z0fePP/7Q0aNH1bRp03z3FR4ert9//11Hjx69rlgaN26snTt3Om3buXOnGjVqJIvFIimnXMsvv/yili1b5ruPBg0ayM3NzWk/drtdP/30k9M5vJaivn6z2azQ0FA1atRIt956q2666SZt3LixyMcBAABA4ZjD51We5vBSTqmcvXv3Oh4fOXLE6f0vaJ5/dUzjxo1Tly5dNGHCBL3++us6c+bMdccEAIUhiQ4AxTB+/HglJiZq3rx5kqROnTqpefPmevbZZ7Vv3z7t3r1bY8aMUfv27dW6dWtlZ2dr7dq1WrJkiVON7vycOHFC27dvd9T3LkhgYKBjYn2lXr16qWbNmho6dKh27NihkydPatu2bZo8ebJjRcw//vEPLV68WEuXLtWxY8e0b98+LVu2rFjvQXJyshISEnTkyBF9+umnatCggdzd3dWoUSN1795dL7/8snbs2KEDBw7oueeeU+3atdW9e/d899W+fXu1a9dOw4cP1+bNm3Xy5El98803+r//+78ixfL444/r+++/17x583T06FGtWbNGK1as0OOPPy5JOnv2rF566SUlJiY6XVjpSt7e3rr33nv1+uuv65tvvtHhw4f1yiuvKD4+Xg899JBT3+zsbGVlZTluUk49R7vdXuTXbxiGEhISFB8fr61bt2r79u1q3LhxkV4vAAAAio85fPmaw0uSu7u7Xn31Vf3888/au3evXnjhBUVFRTlqvQ8aNEhr1qzRypUrdezYMS1evFgbN250zPNz+fv7S5Juv/12denSRS+99FKx3hcAKCrKuQBAMfj7+2vy5MkaNmyYunXrprZt2+rtt9/Wq6++qkceeUQmk0k333yzXn75ZUnSb7/9prfeekvDhg3TgAEDCt13enq6xo4d65gIFpeXl5eWL1+uGTNm6Omnn1ZaWppq166tjh07Oi6m1Lt3b2VlZWnJkiV6/fXX5e/vrzvuuKNYx3nhhRck5SSfIyIiNGfOHEfbtGnTNGXKFA0ZMkRWq1Xt2rXTe++9J3d39wL3N3fuXL322msaNWqUMjIyFBoaqtGjRxcploiICM2aNUtz5szRO++8o6CgIA0fPtzxx87SpUt14sQJLVy4UPXq1StwP2PHjpXJZNLYsWOVmpqqiIgIvf/++3lKwHTu3DnPc0eMGKGlS5eqQ4cORXr9qampio2NlclkUmBgoO644w4NGjSoSK8XAAAAxcccvnzN4aWcFfqDBw/W6NGjde7cObVr105TpkxxtN96660aN26cFi1apKlTp6p+/fqaOnWqOnToUOA+X375Zd1111366KOPdP/99xc5FgAoCpNhGIargwAAoKIaNmyYHnvssUIn9AAAAAByrF69WlOnTtWOHTtcHQoAFBnlXAAA+BPc3d1lNvPrFAAAAACAyopyLgAA/AmzZ892dQgAAAAAAKAUUc4FAAAAAAAAAIAC8P1zAAAAAAAAAAAKQBIdAAAAAAAAAIACkEQHAAAAAAAAAKAAJNEBAAAAAAAAACgASXQAAAAAAAAAAApAEh0AAAAAAAAAgAKQRAcAAAAAAAAAoAAk0QEAAAAAAAAAKABJdAAAAAAAAAAACvD/AdeqNHevcgVoAAAAAElFTkSuQmCC", + "application/vnd.jupyter.widget-view+json": { + "model_id": "4016d00e61344949bf3abc6cb362f1b3", + "version_major": 2, + "version_minor": 0 + }, "text/plain": [ - "
" + "Filter: 0%| | 0/17720 [00:00= 4: # B-сплайн требует минимум k+1 точек\n", - " spline1 = make_interp_spline(x1_unique, y1_unique, k=2) # k=3 для кубического сплайна\n", - " x1_fine = np.linspace(x1_unique.min(), x1_unique.max(), 300)\n", - " \n", - " axes[0].scatter(x1, y1, alpha=0.6, label='Данные')\n", - " axes[0].plot(x1_fine, spline1(x1_fine), 'r-', linewidth=2, label='B-сплайн (k=3)')\n", - "else:\n", - " axes[0].scatter(x1, y1, alpha=0.6, label='Данные (недостаточно для сплайна)')\n", - "\n", - "axes[0].set_xlabel('Количество столбцов')\n", - "axes[0].set_ylabel('Процент (%)')\n", - "axes[0].set_title('B-сплайн аппроксимация')\n", - "axes[0].legend()\n", - "axes[0].grid(True, alpha=0.3)\n", - "\n", - "# График 2\n", - "x2 = df_dif['count rows'].values\n", - "y2 = df_dif['percent'].values\n", - "\n", - "sort_idx2 = np.argsort(x2)\n", - "x2_sorted = x2[sort_idx2]\n", - "y2_sorted = y2[sort_idx2]\n", - "\n", - "x2_unique, idx2 = np.unique(x2_sorted, return_index=True)\n", - "y2_unique = y2_sorted[idx2]\n", - "\n", - "if len(x2_unique) >= 4:\n", - " spline2 = make_interp_spline(x2_unique, y2_unique, k=4)\n", - " x2_fine = np.linspace(x2_unique.min(), x2_unique.max(), 300)\n", - " \n", - " axes[1].scatter(x2, y2, alpha=0.6, label='Данные')\n", - " axes[1].plot(x2_fine, spline2(x2_fine), 'r-', linewidth=2, label='B-сплайн (k=3)')\n", - "else:\n", - " axes[1].scatter(x2, y2, alpha=0.6, label='Данные (недостаточно для сплайна)')\n", - "\n", - "axes[1].set_xlabel('Количество строк')\n", - "axes[1].set_ylabel('Процент (%)')\n", - "axes[1].set_title('B-сплайн аппроксимация')\n", - "axes[1].legend()\n", - "axes[1].grid(True, alpha=0.3)\n", - "\n", - "plt.tight_layout()\n", - "plt.show()\n" + "test.filter(lambda x: True if x[\"pandas_code\"] is not None and x[\"pandas_code\"] != \"\" else False)" ] }, { "cell_type": "code", - "execution_count": 110, - "id": "a4476a9f-0418-43fe-a1d1-ae8191394a2d", + "execution_count": 130, + "id": "3cd05d58-c111-472f-8edd-0dc6467329b0", "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABdEAAAJOCAYAAABYwk4SAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xl83HWdP/DX95grM5NJc/VIWkKapgVLL1CgFMq5rIK4tCq4gCurHLpYV1REVgVWFFFUhEU5VHYFBdFyCCq4oFss1w8pvYDSpqE0SdvcmXvme31+f3wz05mc37RJJpm+ng9KOzPv78xn5nvMZ97fz/f9kYQQAkRERERERERERERENIhc6AYQEREREREREREREU1VTKITEREREREREREREQ2DSXQiIiIiIiIiIiIiomEwiU5ERERERERERERENAwm0YmIiIiIiIiIiIiIhsEkOhERERERERERERHRMJhEJyIiIiIiIiIiIiIaBpPoRERERERERERERETDYBKdiIiIqMhZloWenh60tLQUuilERERERETTjlroBhARERHR+Ovs7MR9992H5557Du3t7TBNE263Gy+//DICgUChm0dERERERDRtMIlOAICHH34Yzz33HN5++22Ew2GUlZXh6KOPxkc/+lFccMEFkGVetHAkOf/88zFjxgw8+OCDY1ruqquuwq5du/CXv/xlglpGREROvPfee/jkJz8JwzBw2WWX4dhjj4WqqvB4PPD5fIVuHhGNM/blKRf78kREROOPSXQCADzxxBOoqqrC5z73OQQCAUQiEWzZsgXXX389XnjhBfzwhz8sdBOJiIjIoW9+85twuVx49NFHMXPmzEI3h4gmGPvyRERERBOLSXQCADz00ENwuVyD7i8rK8NDDz2Ea6+9FrW1tQVoGREREY3F9u3b8corr+AXv/gFE+hERwj25YmIiIgmFq/rIwAYstMNADU1NQCQdwnoc889hyuvvBKrVq3C4sWLcfbZZ+Puu++GaZp5y1522WVYuHBh9s+JJ56IK6+8Ejt37syLW7hwIe666668+372s59h4cKFuOyyy/LuT6fTuOuuu3DuuefiuOOOw6pVq3DNNddg7969AIDW1lYsXLgQjz32WN5yN998MxYuXIjrr78+e99jjz2GhQsXYvHixejp6cmLf+ONN7Lt3rZtW95jf/rTn7BmzRosWbIEJ554Ir785S+jvb190Ge3e/dufOELX8BJJ52EJUuW4Nxzz8WPfvQjAMBdd92V99kM9efVV1/Nfo7nn3/+oOcfza5du3D11Vdj5cqVWLx4MT74wQ/ipz/9KXRdHxT785//HCeddBJWrlyZ99n9z//8Dz7wgQ/gtNNOw+OPPz5ouSeeeAKrV6/GCSecgHvvvTd7/x//+EesWrUKJ554Iu67775By0UiEXz729/G6tWrsXjxYpxzzjm47777YFlWNmaodRmLxbBmzRqceeaZ6OjoyMaM9CezzjPru7W1Nft8lmXhwx/+8KDXuf766/Oe4/3vfz8uu+wy/P3vf897H2eeeSauuuqqQe/vP//zP7Fw4cK8+wzDwN13342zzz4bixcvxplnnokf/vCH0DRt0PIbNmzApZdeiuXLl2PFihVYu3YtnnrqKQCD96uh/mSMZd8aSub5/vu//3vQY//4j/+IhQsX4j//8z/z7h9t3Y5lnQFAS0sL1q1bhw984ANYunQpPv7xj+P//u//hmzvcPvVwPf697//HevWrcPpp5+OxYsXY/Xq1fjOd76DVCo16mfipE2vvvrqqO9x4HrJlVk+cwwAgPb2dpx55plYs2YN4vF49v7u7m7ccMMNWLlyJY477jhccMEFQ+6rI30+uZ93JiZXPB7HKaecMqhNQ72PofYzwN6m//mf/xnLli3D8uXLceWVV2LXrl2D2jiex00n3z/r16/HJz/5SZx88slYvHgxPvShD+HXv/71kJ/fUMarvYDz75bMZz/Un8znvmXLFng8HuzduxfnnXceFi9ejFNOOQXf/OY30dfXl/dcw33H/PznPx9yXTrZJwfuA4sXL8a5556Le++9F0IIx58vETnHvjz78uzLsy8/EPvyQ2Nf3sa+/Pgf57dv346LL74YS5YswZlnnomHH3540Gs6WedOjp9UGByJTnkikQgMw0A8Hsebb76JX/ziFzjvvPMwZ86cbMzjjz+OkpISXH755SgpKcErr7yCO++8E7FYDF/96lfznq++vh5XX301hBBoaWnBAw88gCuvvHLYL85MG4bqrJmmiauuugovv/wyzjvvPHzyk59EPB7Hiy++iJ07d2LevHlDPt97772H3/72t8O+nizL+P3vf49PfepT2fsee+wxeDwepNPpvNjHHnsMX/va13Dcccfh2muvRXd3N375y19i06ZNeOKJJ1BaWgoA2LFjBy655BKoqoqLLroINTU12Lt3L/7yl7/gi1/8Is4555y89t56662YP38+Pv7xj2fvmz9//rBtduLtt9+GJEn49Kc/DZ/Ph23btuHOO+/EG2+8gXvuuSf7Y+rpp5/G9773PZxxxhk49dRT8Ytf/ALt7e3o7OxEPB7HF77wBfzhD3/A1772NcybNw/HH388AOD111/H9ddfj+XLl+P888/Hk08+iZaWFqRSKdx99924+uqrsXHjRvzgBz/AnDlzsj8ekskkLr30UrS3t+Piiy/G7Nmz8cYbb+CHP/whOjs78R//8R9Dvh9d17Fu3Trs27cPDz/8MKqrq5FIJPC9730vG/O///u/+N///d+8+4bbLgDgySefHPRFnDFjxgx87WtfA2B3en75y1/iiiuuwIYNG7LreSy+/vWv4/HHH8e5556Lyy+/HFu3bsW9996L3bt34+67787GPfbYY7jhhhuwYMECXHXVVQgGg3j77bfxt7/9DR/+8Idx9dVX46Mf/SgAoLe3F7feeisuuuii7HoZyXD71kg8Hg8ee+yxvP1j06ZN2Ldv36BYJ+u2vLzc8Trr6urCxRdfjGQyicsuuwwzZszA448/js9+9rO48847cc455wzZ5ptuugklJSUAMOTl68888wxSqRQ+8YlPoKysDFu3bsVDDz2EAwcO4M477xzx83DSpvnz5+e9n0cffRS7d+/Obk8ABnVuRxKNRnHFFVdAVVXcf//98Pv9AIBUKoXLLrsMe/fuxSWXXILa2lo888wzuP766xGJRPAv//IvQz5fbttuvfXWUV//gQceQFdXl+P2DvTEE0/g+uuvx6pVq/DlL38ZyWQSDz/8MP75n/8Zjz/+eHZk5HgfN518/zz88MNYsGABzjzzTKiqir/+9a+4+eabIYTAJZdcMuL7Gs/2Ov1uyXXOOedk94HXX38dv/nNb7KP9fb2Ip1O46abbsJJJ52Eiy++GHv37sWvf/1rbNmyBb/97W/hdrtHfH9DGes+efXVV6O+vh7pdBp//OMf8cMf/hDl5eX42Mc+NubXJiJn2Je3sS/Pvjz78jb25fOxLz927Ms7a284HMaVV16JD37wgzjvvPPwpz/9CTfddBNcLld2nz/UdT7U8ZMKRBDlOPfcc0VjY2P2z3XXXSd0Xc+LSSaTg5b7xje+IZYuXSrS6XT2vksvvVRceumleXE//OEPRWNjo+ju7s7e19jYKO68887s7e9973vi5JNPFhdeeGHe8r/73e9EY2OjeOCBBwa9vmVZQgghWlpaRGNjo1i/fn32sS984Qvi/PPPF6tXrxZf/epXs/evX79eNDY2imuvvVacf/752fsTiYRYsWKFuPbaa0VjY6PYunWrEEIITdPEySefLM4//3yRSqWy8X/9619FY2Oj+PGPf5y975JLLhHLly8XbW1tQ7ZzoDPOOCOvbbkuvfRScd555w352Fg9+uijorGxUTz++OPZ+y644AJx8cUXZ9t24MABcfzxx4tTTjlFhMNhIYQQ6XRanHHGGeKzn/1sdrmrr75anHnmmdl1HovFxJlnnimWLl0q9u7dK4Sw3+/FF18sLrjgguxyd999t1i2bJl4991389p2++23i2OOOUbs27dPCJG/Li3LEl/60pfE0qVLxZYtW4Z9f3feeadobGwc8rHM+m5pacm+p9NPP1185jOfGbTNfPWrXxVnnHFG3vK/+c1vRGNjY97rn3HGGeLKK68c9Fo333xzXjvefvtt0djYKP7jP/4jL+673/2uaGxsFC+//LIQQohIJCKWL18uPvaxj+VtY0IMve0Mtb3ncrpvDaexsVF8/vOfF8cee6zYtm1b9v4bbrghu3/cfPPN2fudrttcI62zb3/726KxsVG89tpr2fsy29kZZ5whTNPMi88cX3p6erL3nXfeeYPe61DHsHvvvVcsXLhw0D57uG0SYujtaSSvvPKKaGxsFK+88opIp9Pi0ksvFSeffLJ477338uL++7//WzQ2Noonn3wye5+maeKiiy4Sy5YtE9FoNC/+hz/8oVi4cGHefQOPPQPXR3d3t1i+fHl2P3nllVeyjy1cuDDvuCfE4P0sFouJE044QXz961/Pi+vs7BTHH3983v3jfdx08v0z1Lbwr//6r+Kss84a8nlzjVd7x/LdIoQQuq6LxsZGcdddd2XvG/i5Z9bjv/zLvwjDMAbFPfjgg9n7hvuO+dnPfpb3nEI43/5zt+GMdDotFi1aJG666aYhPx8iGh/sy7Mvz748+/K5y7Mvf3htEoJ9efblnbW3sbFR/OIXv8jel06nxUc+8hFx8sknC03ThBDO1/mhHD9pcrCcC+W59dZb8cADD+D222/HRz/6UTz11FP4xje+kRfj9Xqz/47FYujp6cEJJ5yAZDKJ5ubmvFhd19HT04Oenh688cYb+N///V8sXLgQM2bMGPL129vb8dBDD+Fzn/tc9gxtxp///GfMmDEDl1566aDlJEka8vm2b9+OZ555Btdee23eZay5LrjgArz77rvZSz2fffZZBINBnHzyyYOeq7u7G5/4xCfg8Xiy959++umor6/PnhHt6enBa6+9hrVr1+aN+hmpnaMxTTP7OQ51yeBwNE3LLtfT04OzzjoLlZWVeOaZZ7Jt3bFjB84+++xs22bOnIlZs2bh6KOPzo7ScLvdOP300/Hyyy9nn/uVV17B6tWrs6MZ/X4/GhoaUF5ejrlz52bf79lnn40dO3agt7cXgD1y4Pjjj0dpaWle21auXAnTNPHaa68Neh/f+9738NRTT+GOO+7AkiVLDuETHOxXv/oV+vr6cM011wz5uGVZ2ba9/fbb2Qm7Bo4qMgwj73309PQMGvW0YcMGAMDll1+ed/+//uu/5j3+4osvIh6P48orr8zbxoBD33YyRtq3RlJZWYnVq1dnLyVLJpP405/+hLVr1w6KPZR1O5INGzZgyZIlOOGEE7L3+f1+XHTRRWhra0NTU1NefOZzH/jZDZR7DEskEujp6cHy5cshhMBbb701rm06HJZl4brrrsOWLVtw3333DRqJ9cILL6CqqirvEnGXy4XLLrsMiURi0Oet6/qYRx//5Cc/QTAYHPKS4YqKChw4cGDE5V966SVEIhGcd955eduELMtYunRp9hLIiThuOvn+yd0WotEoenp68IEPfAAtLS2IRqPDPvd4ttfpd0vu+wLgaF1efvnlUBQle/sjH/kIKisrRxxBOpKxbv+Zz3Tfvn24//77YVkWTjrppEN6bSJyhn159uXZl7exL29jX/7w2nQ42Je3FXtfPiMzoj3D7XbjoosuQnd3N958800AY1/nwMQcP+nQsZwL5Vm+fHn23x/+8Icxd+5c/OhHP8JHP/rR7CVmu3btwh133IFXXnkFsVgsb/mBB6o33ngjrwNbV1eHu+++e9gD05133onq6mpcdNFFePbZZ/Me27t3L44++mioqvPN9gc/+AFOOOEEnHHGGfjWt741ZEx5eTlWr16N9evX47jjjsP69evxT//0T4M66plL3o4++uhBz1FfX4/XX38dgF1jDQAaGxsdt3M0zc3N2c9RlmXMmzcP11xzDT784Q+PuNzTTz+dd9lZRqbuZOZL08nEczNnzkQikUAkEoEQAolEwvFymdeaMWMG3nvvPbzzzjuDfthkDKxp+Zvf/AabN28GYF8iNR6i0SjuuecefOpTn0JFRcWQMfv3789rY1VVFe66665BndaNGzcO+14y2trasustV1VVFUpLS9HW1gbg4HpZsGDBmN/TaEbat0azZs0a3HDDDbj++uvxzDPPIBQKDZkIG+u6Hc2+ffuwdOnSQffX19dnH8/dz3p7e+FyueDz+UZ93jvvvBN/+ctfBm1TA49ph9umw3HHHXdg8+bNkCRpyBqPbW1tOOqoowYdqzI/DgdephuNRrOXxjrR0tKCRx55BDfddNOQP2aWL1+OZ599Fh/84Afxvve9D4D9QybXnj17AGDYSxMDgUD2tYDxPW46+f55/fXXcdddd2Hz5s1IJpN5y0ejUQSDwSGfezzb6/S7JSMSiQDAiD+gM+8xs11mKIqCo446KnvMOZS2jmX7/7d/+7fsv2VZxmc/+1mce+65h/TaROQM+/Lsyw+HfXn25dmXZ18+F/vy49ve6urqQeunrq4OgL2uly1bNuZ1PhHHTzo8TKLTiDITK2zduhXHH388IpEILr30UgQCAaxbtw7z5s2Dx+PBm2++idtvvz1vMhkAeRNd9PT04MEHH8Rll12Gxx9/HFVVVXmxu3fvxuOPP47vf//7w06ONBYbN27ESy+9lFcndjhr167FV7/61eyEM9/+9rcHTTxTSDU1NbjlllsAAH19ffjlL3+J6667DnPnzsWyZcuGXW7VqlV44IEH8u779re/nZ3YbeAoCyecTtgy3HKWZeGUU07BZz7zmSHjMl80GZs3b8YXv/hFbNu2DbfeeitOPfVUlJeXH1IbMu6//37IsoxPf/rTgybZy6isrMT3v/99APYX8Pr16/GZz3wGv/71r/Nq4C1duhT//u//nrfsQw89hOeff37Qcx7uCJRDdbj71umnnw6Xy4XnnnsOjz322JA/TIGxr9vx1tbWhtmzZ4/4OZumicsvvxzhcBif+cxnUF9fj5KSErS3t+P6668fdAwrpC1btuC73/0uHnroIXzjG9/Ak08+eUh1rDM6OzsHHXdHcscdd6Curg4XXnjhkMfDr3zlK7jyyiuHXd8Assea733ve0O+du4o6fE22vfP3r178alPfQr19fW4/vrrMXv2bLhcLmzYsAH//d//PaW2hVyZmpaVlZXDxow2gmuyfPWrX8WiRYug6zq2bduGe+65B6qqDjtqkIjGH/vyUwP78uzLHw725Q9iX559+enelx+LiTh+0uFhEp1GlOmYZb5k/9//+3/o6+vDf/3Xf+H9739/Nm7g7M0ZoVAIK1euzN7+wAc+gFNPPRWPPfbYoJnQf/CDH2DRokX40Ic+NORzzZs3D1u2bIGu66N2HoQQ+MEPfoBzzjlnxI5pxmmnnQaPx4MvfvGLOP744zFv3rxBXzSZy3zefffdQWfn33333ezjmcsfh5vk5lCUlJTkfY7HH388TjvtNGzcuHHE91ddXZ036YRpmujs7MSKFSsAIPtF6GR25/b2drhcruzlUy6Xy/FymbYA9npMJBJ572cka9euxdVXX4329nacd955uPXWW7Md4kPR0dGBX/7yl7j22msRCASG7Xh7PJ68Np555pn4wAc+gF/96ld5s9jPmDFj0Ht57rnn8m7X1NTAsiy89957eZeQdnV1IRKJoKamBsDBSXh27dqFo4466pDf40Cj7VujUVUVF1xwAX7605+iqakJ3/nOd4aMG+u6Hc2cOXPw7rvvDro/c6l57qV3hmFgx44dOPXUU0d8zp07d2LPnj247bbb8E//9E/Z+1988cVxb9Ph+vznP48LL7wQxxxzDNauXYuf/OQneT/yampq8M4778CyrLwfQsO1Zffu3Tj22GMdvfZbb72FP/zhD7j77ruH7RwfddRRePrpp7Fz587syIiNGzfi5z//eTYmczysqKgYcbuYiOPmaN8/f/nLX6BpGn7605/mfVaZy1JHMp7tdfrdkpG5zHikCesyEzw1Nzdn2wogexw65phjDrmtY9n+3/e+9+HEE08EAKxevRodHR24//778bnPfW7YsgxENL7Ylz+IfXn25dmXZ1+effmD2Jcf3/Z2dHQgkUjkjUbPjOTPHCPGus7H+/hJh4+/YAjAwTpuAz366KOQJCl7uVdmR8+ckQTsWn2//vWvHb1OpiM/sBbg5s2b8fzzz+PLX/7ysGee/+Ef/gG9vb341a9+Neix3PYAwB//+Ee88847uPbaax21S1VVfOQjH8E777wzZH04AFi8eDEqKirwyCOP5LV/w4YN2L17N04//XQA9iWl73//+7F+/fpBl+MMbOehyjzPSGd+TdMcdN+vf/1rhMPh7EzotbW1mDNnDp5//vnsc7a3t+PAgQPYs2dPtmyApmnYsGEDli1bBpfLBZfLhaVLl2LDhg3ZzyIej6OpqQk9PT3ZH2JCCDz//POYM2dO9ovjgx/8IN544w387W9/G9S+SCQCwzDy7svUq5s5cya+/OUv4/e//z02btzo/MMa4O6770ZFRQUuvvjiMS2n6zpM0xxTHcuM1atXAwD+53/+J+/+zMiizOOrVq2C3+/HvffeO2hk0aFuO072LSc++tGPYufOnTjhhBPyknK5xrpuR7N69Wps3boVb7zxRva+RCKBRx99FDU1NWhoaMje/+KLLyIajeKss84a8TmHOoYJIfDLX/5y3Nt0uDLb/qJFi/Cv//qv+NnPfpbX0TvttNPQ2dmJP/7xj9n7DMPAgw8+iJKSkrzkyLZt27B3717H9ah/8IMfYMWKFaN+ni6XC+973/uwcuVKrFy5ctD7P/XUUxEIBHDvvfdma3nnylwWPBnHzYHfP5njZ+7zZ0aqjWY82+v0uyXjT3/605A1XXOdfPLJcLvdePDBB/NG4fz+979HV1cXzjjjjDG1MeNwt/9UKgXTNMd8LCCi0bEvz748+/IjY1+effmxtulwsS9vK/a+fIZhGHlXTmmaht/85jcoLy/PlssZyzoHxv/4SYePI9EJAPClL30J9fX1OPvss1FZWYmenh688MILePXVV3H11VdnL3lbvnw5QqEQrr/+elx22WWQJAlPPvnksAearq4uPPnkkwDsGme/+c1voKrqoKTAxo0bccopp4x4dvOf/umf8MQTT+DWW2/NXpKaTCbx8ssv4xOf+ATOPvvsvOf7+Mc/Pqge7Ei+8IUv4NOf/jRCodCQj7tcLnz5y1/G1772NVx66aU477zz0N3djV/+8peoqanBpz71qWzs17/+dXziE5/AhRdeiIsuugi1tbVoa2vD//3f/2U/j7FIJBJ44YUXANi1sB588EG4XK5Bn2Ou3//+93jqqaewcuVKlJSU4JVXXsGzzz6LE088Me+s/VVXXYUbb7wRn/3sZ3HqqafikUcegSRJ0HUdl19+OdasWYM//elPaG1txY033pi33BVXXIHLL78cH/rQh/Dkk08ikUhAlmVcffXV+MQnPoGNGzfi9ddfx80335xd7tOf/jT+8pe/4Oqrr8aFF16I973vfUgmk9i5cyeeffZZPP/888NeonTRRRfh6aefxo033oinn3561Hp5Q9m4cSNuv/32US+lSyQS2XUVi8Xw5JNPIp1O521nTi1atAgXXnghfvOb3yASieD9738/tm3bhscffxxnn312tjMUCATwta99DV//+tfx0Y9+FOeffz5KS0uxY8cOpFIp3HbbbYf0fkfbt5yYP38+XnnllbzJWwY6nHU7lCuvvBJ/+MMfcMUVV+Cyyy5DKBTCE088gdbWVtx1113ZTvQf//hH3HbbbXC73UilUnn7WDQahWmaeO6553D22Wejvr4e8+bNw2233Yb29nYEAgE8++yz2R+Z49Wm8XbNNdfgz3/+M77xjW/g4YcfhizLuOiii/Cb3/wG119/Pd58803U1NTg2WefxaZNm3DDDTdkaxT+13/9Fx588EHMnTs3b98fycaNG/Hwww8fdrsDgQBuuukmXHfddVizZg0+9KEPoby8HPv27cOGDRuwYsUKfPOb3wQw/sfN0b5/TjnlFLhcLlx99dW4+OKLEY/H8dvf/hYVFRXo7Owc9fnHq71Ov1u2bduGH//4x/jb3/6Gm2++ecQf0mVlZfjsZz+LH//4x/j0pz+Ns846Cy0tLfjVr36FRYsW4WMf+1hefO53TEZmlNZrr70Gl8uFmTNnjnn7f+mll3DgwAEYhoFt27bhqaeewplnnnlYlzIT0dDYl2dfnn35fOzL52NffmxtGm/syxdvXz6juroa999/P9ra2lBXV4c//vGPePvtt/Gtb30re/WV03U+lPE4ftLhYxKdANgd77/+9a948MEH0dPTg5KSEixZsgT33Xdf9sw6YF/uds899+C2227DHXfcgdLSUlxwwQU4+eST8elPf3rQ8zY3N+O6664DAJSWlqKhoQHXX389jjvuuLw4SZLwpS99acQ2KoqC+++/Hz/96U/x9NNP489//jPKysqwYsWKvLp2gD1L81hrrrrd7lE7BWvWrIHX68X999+P22+/HSUlJTj77LPxla98BaWlpdm4RYsW4dFHH8WPf/xjPPzww0in05gzZw4++MEPjqlNGW1tbbjiiisAHPwcf/KTn4x4Sf5xxx2HP//5z3jggQcQDocxc+ZMXH311fjsZz+bN+rl4osvRjgcxi9+8Qts3boV1113HX72s59hxowZOOecc/DjH/8Ybrcbt9xyC0477bTscqeddhq+/e1v484778SPfvQjXHnllXj99dexa9cufO5zn8N3vvMd6LqOdevW5Y0U8fl8ePDBB3HvvffimWeewRNPPIFAIIC6ujp8/vOfH3byD8DeTr71rW/hIx/5CO64444hJ1oazTHHHJM3G/Zwent7s9tuSUkJjj76aHzve987pI43ANxyyy2ora3F448/jueeew6VlZW46qqrBm2nH/vYx1BRUYH77rsPP/nJT6CqKurr6/N+2I2Fk33LqdyZ0IdyOOt2KJWVlXjkkUfw/e9/Hw899BDS6TQWLlyIe+65J+9H5+23356dWOs//uM/hnyu73znOzj77LPhcrlwzz334JZbbsG9994Lj8eDc845B5dccgk+8pGPjFubxpvH48G3vvUtfPKTn8RDDz2ET37yk/B6vXjwwQdx++234/HHH0csFsPRRx+NW2+9FWvWrMku+9vf/hZnnXUW/v3f/91xZ+uss87KXip+uD784Q+juroa9913H37+859D0zTMnDkTJ5xwQl47x/u4Odr3T319Pe68807ccccduO2221BZWYlPfOITKC8vxw033DDq849ne518t7zyyivo6+vD7bffPupEdADwuc99DqFQCA899BC++93vIhQKYc2aNbj22msHJR5yv2MGuv7667Pb1Fi3/3vuuQeAPUJ05syZuOSSS7Bu3boxfjpE5AT78uzLsy+fj335wdiXZ1/+ULAv70woFMJ3v/td3HLLLXj00UdRWVmJb37zm/j4xz+ejXG6zocyHsdPOnySGK9rK4ioaJx//vmYMWMGHnzwwTEtd9VVV2HXrl34y1/+MkEtIxrszDPPxDXXXDNsx+PVV1/F1772NW6XRIdgtP2LiIimHvblaTphX56mu8suuwy9vb14+umnC90UmmCsiU5ERERERERERERENAwm0YmIaFo7++yzMW/evGEfr6ysPORLd4mOdO9///sxc+bMQjeDiIiIihT78kQ0XbAmOhERTWuj1bybP3++o7p4RDTYoUyCRkREROQU+/JENF2wJjoRERERERERERER0TBYzoWIiIiIiIiIiIiIaBhMohMRERERERERERERDYNJdCIiIiIiIiIiIiKiYXBiUQCWZcEwDMiyDEmSCt0cIiIiIipCQghYlgVVVSHLHMuSwb44EREREU20w+2LM4kOwDAMbNu2rdDNICIiIqIjwHHHHQe3213oZkwZ7IsTERER0WQ51L44k+hA9uzDcccdB0VRCtya4maaJrZt28bPushxPRc/ruMjA9dz8eM6nlyZz5uj0PMN7Itzu6SBuE1QLm4PlIvbA+Xi9kC5Bm4Ph9sXZxIdyF42qigKd7JJws/6yMD1XPy4jo8MXM/Fj+t4crFkSb7h+uLcLmkgbhOUi9sD5eL2QLm4PVCugdvDofbFOQyGiIiIiIiIiIiIiGgYTKITEREREREREREREQ2DSXQiIiIiIiIiIiIiomEwiU5ERERERERERERENAwm0YmIiIiIiIiIiIiIhsEkOhERERERERERERHRMJhEJyIiIiIiIiIiIiIaBpPoRERERERERERERETDYBKdiIiIiIiIiIiIiGgYTKITEREREREREREREQ2DSXQiIiIiIiIiIiIiomEwiU5ERERERERERERENAwm0YmIiIiIiIiIiIiIhsEkOhERERERERERERHRMNRCN4ComFmWwJ7uOKIpA0GviroKP2RZKnSziIiIiIiIiIiIJtV0zpMxiU40Qba3hbF+UyuaOmJI6xY8LhkN1QGsXVGLxTWhQjePiIiIiIiIiIhoUkz3PBmT6EQTYHtbGHc+vws9cQ2zQz74QgqSmoltrWG09Sax7qwF0+IAQUREREREREREdDiKIU/GmuhE48yyBNZvakVPXENDdQABrwpFlhDwqmioDqAnruGxTW2wLFHophIREREREREREU2YYsmTMYlONM72dMfR1BHD7JAPABBJ6uiOpRFJ6gCA2SEfdnVEsac7XshmEhERERERERERTahiyZOxnAvROIumDKR1CymXiXfaI4gkDZiWgCJLKPWpOKrCj7RuIZoyCt1UIiIiIiIiIiKiCVMseTIm0YnGWdCrQjctbG0Nw7QslLhVqLIEwxLoiWsIJw3MCXkR9HL3IyIiIiIiIiKi4lUseTKWcyEaZ/NmlCBtmIindJR6VbgUGZIkwaXIKPWqiKd0aIaFeTNKCt1UIiIiIiIiIiKiCVMseTIm0YnG2d7eBDyqgoBHRSRlQDctCCGgmxYiKQMBjwq3KmNvb6LQTSUiIiIiIiIiIpowxZInYxKdaJxFUwZciowltWUo97uhGXZdJ82wUOH34LjaMrgUecrXeiIiIiIiIiIiIjocxZInm9rFZoimoaBXhcclw+NScPy8GYimDeiGBZcqI+hREUubSBnmlK/1REREREREREREdDiKJU/GkehE46yuwo+G6gD2h5MQAIJeF8oDHgS9LggA+8NJLKgOoq7CX+imEhERERERERERTZhiyZMxiU40zmRZwtoVtSj3u9HUEUMsZcC0BGIpA00dMZT73VizogayLBW6qURERERERERERBOmWPJkTKITTYDFNSGsO2sBjqsNoS+pYU9XHH1JDUtqy7DurAVYXBMqdBOJiIiIiIiIiIgmXDHkyaZ2sRmiaWxxTQjHzi7Fnu44oikDQa+Kugr/lD+zRkRERERERERENJ6me56MSXSiCSTLEuqrAoVuBhERERERERERUUFN5zwZy7kQEREREREREREREQ2DSXQiIiIiIiIiIiIiomEwiU5ERERERERERERENAwm0YmIiIiIiIiIiIiIhsEkOhERERERERERERHRMJhEJyIiIiIiIiIiIiIaBpPoRERERERERERERETDYBKdiIiIiIiIiIiIiGgYTKITEREREREREREREQ2DSXQiIiIiIiIiIiIiomGohW4AHTksS+DdrjiaenSEuuKorwpClqVCN4uIiIiIiIiIiMgRyxLY0x1HNGUg6FVRV+FnfusIwCQ6TYrtbWGs39SKXe1R9PRF8NR7b2HBzCDWrqjF4ppQoZtHREREREREREQ0okx+q6kjhrRuweOS0VAdYH7rCMAkOk247W1h3Pn8LvTENcwq9cBjKvD5XNjWGkZbbxLrzlrAAw0REREREREREU1Zufmt2SEffCEFSc1kfusIwZroNKEsS2D9plb0xDU0VAcQ8KqQJQkBr4qG6gB64hoe29QGyxKFbioREREREREREdEgQ+W3FJn5rSMJk+g0ofZ0x9HUEcPskA+SlF8fSpIkzA75sKsjij3d8QK1kIiIiIiIiIiIaHjMbxGT6DShoikDad2Cz60M+bjPrSCtW4imjEluGRERERERERER0eiY3yIm0WlCBb0qPC4ZSc0EhEA0ZSCc6j+oCIGkZsLjkhH0sjw/ERERERERERFNPXn5rSFMlfyWZQk0d8awpaUPzZ0xlpcZR8xc0oSqq/CjoTqAV5u7oZt28jyl6dgb60XQq8KlyDipvhJ1Ff5CN5WIiIiIiIiIiGiQTH5rW2sYDZ5AXkkXIQT2h5NYUltW0PzW9rYw1m9qRVNHDGndgsclo6E6gLUrajnh6ThgEp0mlCxLWDa3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/LXXXot77rkHmZmZ6NevH9577z3U1NRg0qRJQtvLsgy9Xt/CrSQiIiIiUqeTOR7nsTgRERERtXWqSKKfc845KC4uxksvvYTCwkL07t0b8+bNEy7nQkREREREzcfjcSIiIiJSM0nhzEZERERERERERERERB7JgW4AEREREREREREREVFbxSQ6EREREREREREREZEXTKITEREREREREREREXnBJDoRERERERERERERkRdMohMRERERERERERERecEkOrWKo0eP4s4778TQoUPRr18/nHfeedi8eXOgm0V+ZLPZ8MILL2Ds2LHo168fxo8fj7lz50JRlEA3jU7CmjVrcMMNN2DUqFHIyMjATz/95LZeURS8+OKLGDVqFPr164d//etfyM3NDUxjqdkae58tFguefvppnHfeecjOzsaoUaNw99134+jRowFsMTWVr/9lV/fffz8yMjLw7rvvtl4DiVx89NFHGDt2LLKysjBlyhRs2rQp0E2iVsBjDnL1xhtvYPLkyRgwYACGDx+OGTNmYO/evW4xJpMJDz30EIYOHYoBAwbg5ptvxrFjxwLUYmpJH3/8Mc477zzk5OQgJycHl1xyCX777Tfneu4L7dubb76JjIwMPProo85l3Cfal5dffhkZGRluP2eddZZzvb/2BybRqcWVlZXhsssug06nw1tvvYXFixfjnnvuQVRUVKCbRn701ltv4ZNPPsH999+PJUuW4M4778S8efPwwQcfBLppdBKqq6uRkZGBBx54wOP6t956Cx988AEefPBBfP755wgJCcHUqVNhMplauaV0Mhp7n2tra7Ft2zbceOONWLhwIV555RXs27cPN954YwBaSs3l63+5ztKlS7Fx40YkJia2UsuI3C1ZsgSPP/44Zs6cia+++gq9evXC1KlTUVRUFOimUQvjMQe5Wr16Na644gp8/vnnmD9/PqxWK6ZOnYrq6mpnzGOPPYZly5bhhRdewAcffICCggLcdNNNAWw1tZSOHTvizjvvxMKFC/Hll19i2LBhmDlzJnbt2gWA+0J7tmnTJnz66afIyMhwW859ov1JS0vD8uXLnT8ff/yxc53f9geFqIU9/fTTymWXXRboZlALmz59unLvvfe6LbvpppuUO+64I0AtIn9LT09Xli5d6rxtt9uVkSNHKvPmzXMuKy8vVzIzM5Vvv/02EE0kP6j/PnuyceNGJT09XcnPz2+lVpE/eXuPjxw5opxyyinKzp07lTFjxijz589v/cZRu3fRRRcpDz30kPO2zWZTRo0apbzxxhsBbBW1Nh5zUH1FRUVKenq6snr1akVRHO9/3759le+++84Zs3v3biU9PV35+++/A9RKak2DBw9WPv/8c+4L7VhlZaVyxhlnKCtWrFCuvPJKZc6cOYqi8POhPXrppZeU888/3+M6f+4P7IlOLe6XX35BZmYmbrnlFgwfPhwXXHABPv/880A3i/xswIABWLVqFfbt2wcA2LFjB9atW4dTTz01wC2jlpKXl4fCwkKMGDHCuSwiIgL9+/fH33//HcCWUUurrKyEJEmIjIwMdFPIT+x2O+666y5MnToVaWlpgW4OtVNmsxlbt251+16RZRkjRozg90o7x2MOqqioAADnaOYtW7bAYrG47RM9evRAp06dsGHDhkA0kVqJzWbD4sWLUV1djQEDBnBfaMcefvhhjB492u29B/j50F7t378fo0aNwrhx43DHHXfg0KFDAPy7P2j92WAiTw4ePIhPPvkE1157LW644QZs3rwZc+bMgU6nw4UXXhjo5pGfTJ8+HZWVlTj77LOh0Whgs9lw22234fzzzw9006iFFBYWAgDi4uLclsfFxbHenIqZTCY888wzmDBhAsLDwwPdHPKTt956C1qtFldffXWgm0LtWElJCWw2m8fvlfq1kKl94TFH+2a32/HYY48hJycH6enpAIBjx45Bp9M1uKAfFxfn3F9IXf755x9ceumlMJlMCA0Nxdy5c9GzZ09s376d+0I7tHjxYmzbtg0LFixosI6fD+1Pv3798Pjjj6N79+4oLCzE3LlzccUVV+Cbb77x6/7AJDq1OEVRkJmZidtvvx0A0KdPH+zatQuffvopk+gq8t133+Gbb77Bs88+6zyYefzxx5GYmMj3mUglLBYLbr31ViiKgoceeijQzSE/2bJlC95//30sXLgQkiQFujlERERuHnroIezatcutvi21P927d8eiRYtQUVGBH374Affccw8+/PDDQDeLAuDw4cN49NFH8c4778BgMAS6OdQGjB492vl3r1690L9/f4wZMwbfffcdjEaj3x6H5VyoxSUkJKBHjx5uy1JTU51DK0gdnnrqKUyfPh0TJkxARkYGLrjgAlxzzTV44403At00aiEJCQkA0GCyt6KiIsTHxweiSdSCLBYL/vOf/+DQoUN455132AtdRdauXYuioiKMGTMGffr0QZ8+fZCfn48nn3wSY8eODXTzqB2JiYmBRqPh9wo1wGOO9uvhhx/Gr7/+ivfeew8dO3Z0Lo+Pj4fFYkF5eblbfFFRkXN/IXXR6/Xo2rUrMjMzcccdd6BXr154//33uS+0Q1u3bkVRUREmTZrkPHZdvXo1PvjgA/Tp04f7BCEyMhLdunXDgQMH/Lo/MIlOLS4nJ8dZJ7tObm4ukpOTA9Qiagm1tbUNejBqNBooihKgFlFLS0lJQUJCAlauXOlcVllZiY0bN2LAgAEBbBn5W10Cff/+/Xj33XcRExMT6CaRH02cOBH/+9//sGjRIudPYmIipk6dinnz5gW6edSO6PV69O3b1+17xW63Y+XKlfxeaed4zNH+KIqChx9+GEuXLsV7772Hzp07u63PzMyETqdz2yf27t2LQ4cOITs7u5VbS4Fgt9thNpu5L7RDw4YNwzfffON27JqZmYnzzjvP+Tf3ifatqqoKBw8eREJCgl/3B5ZzoRZ3zTXX4LLLLsPrr7+Os88+G5s2bcLnn3+Ohx9+ONBNIz8aM2YMXn/9dXTq1MlZzmX+/PmYPHlyoJtGJ6GqqgoHDhxw3s7Ly8P27dsRFRWFTp064eqrr8Zrr72Grl27IiUlBS+++CISExMxfvz4ALaamqqx9zkhIQG33HILtm3bhjfeeAM2m81ZOy4qKgp6vT5QzaYm8PW/XP/CiE6nQ3x8PFJTU1u7qdTOXXvttbjnnnuQmZmJfv364b333kNNTQ0mTZoU6KZRC+MxB7l66KGH8O233+LVV19FWFiY89gjIiICRqMRERERmDx5Mp544glERUUhPDwcc+bMwYABA5gkU6Fnn30Wp556KpKSklBVVYVvv/0Wq1evxttvv819oR0KDw93zo9QJzQ0FNHR0c7l3CfalyeffBJjxoxBp06dUFBQgJdffhmyLOPcc8/162eEpLCbKLWCZcuW4bnnnkNubi5SUlJw7bXX4uKLLw50s8iPKisr8eKLL+Knn35CUVEREhMTMWHCBMycOZNJtiD2119/eZxo8MILL8QTTzwBRVHw0ksv4fPPP0d5eTkGDhyIBx54AN27dw9Aa6m5Gnufb7rpJowbN87jdu+//z6GDh3a0s0jP/D1v1zf2LFjcfXVV+Nf//pXK7SOyN2HH36It99+G4WFhejduzdmz56N/v37B7pZ1MJ4zEGuMjIyPC5//PHHnRfVTCYTnnjiCSxevBhmsxmjRo3CAw88wHINKjRr1iysWrUKBQUFiIiIQEZGBqZNm4aRI0cC4L5AwFVXXYVevXrh//7v/wBwn2hvbrvtNqxZswalpaWIjY3FwIEDcdttt6FLly4A/Lc/MIlOREREREREREREROQFa6ITEREREREREREREXnBJDoRERERERERERERkRdMohMRERERERERERERecEkOhERERERERERERGRF0yiExERERERERERERF5wSQ6EREREREREREREZEXTKITEREREREREREREXnBJDoREbVrFosl0E0gIiIiIiIiojZMG+gGEBERtabt27fj3XffxYYNG1BcXAyTyYQVK1YgIiIi0E0jIiIiIiIiojaIPdGJqN3773//ixkzZrgtKy4uxrnnnospU6agoqIiQC0jf/vrr79w+eWXIz4+Hs899xwWLFiApUuXMoFOREREFGR4DE9ERK2JPdGJiOopLi7GNddcA4PBgHfeeYcJVpVQFAX33XcfZs2ahSlTpgS6OURERETkRzyGJyKilsSe6ERELuoOvnU6HebPn+928H3o0CHceOONGDBgAHJycnDrrbfi2LFjbtvn5eUhIyOjwU95eTkA4OWXX8bEiROd8WazGaeffrpbjKdeNRkZGfjpp5+ctw8fPoxbb70VgwYNwpAhQ3DjjTciLy/PbZsFCxZgwoQJyMzMxKhRo/Dwww8DAMaOHeuxjRkZGVi4cKHz8ep+cnJycO211+LAgQPO+y4rK8Pdd9+NwYMHo3///rjuuuuQm5vb6GtbXl6O+++/HyNGjEBWVhbOPfdcLFu2DH/99ZfX9mRkZDi3/+GHH5zPZ+zYsXjnnXcaPMbLL7/cYPu613Lv3r04dOgQ9u/fjzFjxiArKwsXX3wx1q5d69y+ri1174W319/X81+4cKHz8Xv37o1Ro0bh6aefht1ub/Q1IiIiIqKm4zF82zyGX7hwIQYNGoSffvoJZ5xxBrKysjB16lQcPnzY7TE+/vhjjB8/HpmZmTjzzDOxaNEir6+joii4++67cd5556GsrKzRthMR+ROT6EREx5WUlODaa6+FVqvF/PnzERkZ6Vxnt9sxY8YMlJWV4YMPPsD8+fNx8OBB3HbbbW73oSgKAODdd9/F8uXL8fLLLzf6mB999FGDg3hfLBYLpk6dirCwMHz00Uf45JNPEBoaiuuuuw5msxmA40D04YcfxsUXX4xvvvkGr776Krp06QLAcWC+fPlyLF++HB07dsSsWbOct8855xzn4zz++ONYvnw5PvroIxQVFeG5555zrvvvf/+LLVu24LXXXsNnn30GRVEwffp0r5N02u12TJs2DevXr8fTTz+NJUuW4I477oAsyxgwYIDz8eter7rby5cvBwBs2bIF//nPf3DOOefgm2++wU033YQXX3zRecJQR1EUpKWlObc9++yzneuKi4thsVjw9ddf48EHH8SiRYvQq1cvTJs2DQUFBU16D0Sef3h4OJYvX45ff/0Vs2bNwrx58/DHH3806XGIiIiIqHE8hm+7x/AAUFtbi9deew1PPvkkPvnkE5SXl7u9/kuXLsVjjz2Ga6+9Ft988w0uvfRSzJo1C6tWrfLYpjlz5uDvv//GO++8g6ioqCa9B0REJ4PlXIiI4Ohhce2112LPnj3o27cvwsPD3davXLkSO3fuxM8//4ykpCQAwFNPPYUJEyZg06ZN6NevHwDAarUCAOLj45GQkNDogV1paSlee+01TJs2DS+++KJzucFggMlk8rrdkiVLYLfb8eijj0KSJACOg+XBgwdj9erVGDVqFF577TVce+21uOaaa5zb1bUxNjbWuUyj0SAiIgIJCQkNHicyMhIJCQkwGo0ICwtz9ujJzc3FL7/8gk8++QQ5OTkAgGeeeQannXYafvrpJ7fEdZ0///wTmzZtwpIlS9C9e3cAQOfOnZ3r6x6/7vWq35758+dj+PDhmDlzJgCge/fu2L17N95++21MmjTJGWe1WmEwGJzbG41G50lJXS/wu+++G6NHjwYAPPjgg/jrr7/w0UcfNTiZ8kb0+UuS5GxHSkoKZFnmsGIiIiIiP+IxfNs+hgccFw/uv/9+9O/fHwDwxBNP4JxzznG+/m+//TYuvPBCXHHFFQAcx/kbNmzAO++8g2HDhrnd1/PPP4+lS5fi448/9vhYREQtiT3RiYgArFmzBna7HYsWLcL+/fsxb948t/V79uxBx44dnQffANCzZ09ERkZi7969zmWVlZUAgJCQEJ+POXfuXAwdOhQDBw50W56eno4NGzbg4MGDHrfbsWMHDhw4gJycHAwYMAADBgzA0KFDYTKZcODAARQVFaGgoADDhw8Xfv6e3H777RgwYAAGDx6Mqqoq3H777QAcr4VWq3UeCANATEwMunfvjj179ni8r+3bt6Njx47Og++m2rt3r/Ngv05OTg72798Pm83mXFZZWYnQ0NBG78v1fup60Xhrtyeiz7+iogIDBgxAv379cPHFF2PatGkNngMRERERNR+P4RtqS8fwAKDVapGVleW83aNHD0RGRjof09txfv02ffjhh3j99dfRvXt3pKSkNLs9RETNxZ7oRERw9Kh49913ERsbiwceeAB33XUXRo8ejV69ejXpfgoKCiDLss+eEbm5uViwYAEWLVqEI0eOuK2bPHkyli5divHjx3tMCFdXV6Nv37545plnGqyLjY119mw5Wffeey9GjBiB8vJyvPDCC7j33nvx+uuvN+u+jEajX9rkS0FBARITEz2ua6xHkb9eM1dhYWH46quvoCgKdu/ejVmzZqFv374488wz/f5YRERERO0Rj+EbCsZjeBGbNm3Cm2++iXvvvReffvopLr300kA3iYjaGfZEJyKCo+dI3RDJs88+G2eccQbuueceZymQHj164MiRI26T4OzevRvl5eXo0aOHc9nmzZuRmpoKg8HQ6OM988wzuOiii9C1a9cG64xGI959912sWLECixYtajCxTt++fbF//37ExcWha9eubj8REREIDw9HcnIyVq5c2dyXA4BjOGbXrl2RlZWFK6+8Er/++issFgt69OgBq9WKjRs3OmNLSkqwb98+9OzZ0+N9ZWRk4MiRI9i3b1+z2pKamor169e7LVu/fj26desGjUYDwFGuZdu2bejdu7fH++jcuTO0Wq3b/djtdvz9999u76Evos9flmV07doV3bp1w/jx4zFs2DAsXbpU+HGIiIiIqHE8hm+oLR3DA45SOVu2bHHe3rt3r9vr7+04v36bZs2ahdGjR+OBBx7AU089hUOHDjW7TUREzcEkOhGRB/fffz+Kioowd+5cAMCIESOQnp6OO++8E1u3bsWmTZtw9913Y8iQIcjKyoLZbMaiRYvw7rvvutXo9uTAgQNYvXq1s763N/Hx8c4Da1fnnXceYmJicOONN2Lt2rU4ePAg/vrrL8yZM8fZI+bmm2/G/Pnz8f777yM3Nxdbt27FBx980KTXoLy8HIWFhdi7dy8WLFiAzp07Q6fToVu3bhg3bhzuu+8+rF27Fjt27MBdd92FDh06YNy4cR7va8iQIRg0aBBuueUWrFixAgcPHsRvv/2G33//Xagt//73v7Fy5UrMnTsX+/btw1dffYWPPvoI//73vwEAhw8fxuzZs1FUVOQ2sZKrsLAwTJkyBU899RR+++037NmzBw8++CAKCgpw+eWXu8WazWaYTCbnD+Co52i324Wfv6IoKCwsREFBAVatWoXVq1cjNTVV6PkSERERUdPxGL5tHcMDgE6nwyOPPIKNGzdiy5YtuPfee5Gdne2s9X7dddfhq6++wscff4zc3FzMnz8fS5cudR7n14mOjgYAnHnmmRg9ejRmz57dpNeFiOhksZwLEZEH0dHRmDNnDmbMmIGxY8eif//+ePXVV/HII4/gyiuvhCRJOOWUU3DfffcBAHbu3IlXXnkFM2bMwLXXXtvofVdXV+Oee+5xHgg2VUhICD788EM888wzuOmmm1BVVYUOHTpg+PDhzsmULrzwQphMJrz77rt46qmnEB0djbPOOqtJj3PvvfcCcCSf+/bti5deesm57vHHH8ejjz6KG264ARaLBYMGDcKbb74JnU7n9f5efvllPPnkk7j99ttRU1ODrl274o477hBqS9++ffHCCy/gpZdewmuvvYaEhATccsstzpOd999/HwcOHMDbb7+NTp06eb2fe+65B5Ik4Z577kFlZSX69u2LefPmNSgBM3LkyAbb/uc//8H777+PoUOHCj3/yspKjBo1CpIkIT4+HmeddRauu+46oedLRERERE3HY/i2dQwPOHroT5s2DXfccQeOHj2KQYMG4dFHH3WuHz9+PGbNmoV33nkHjz32GJKTk/HYY49h6NChXu/zvvvuw7nnnovPPvsMl1xyiXBbiIhOhqQoihLoRhAREbV1M2bMwDXXXNPoAT0RERERETksXLgQjz32GNauXRvophARnTSWcyEiIhKg0+kgy/zaJCIiIiIiImpvWM6FiIhIwIsvvhjoJhARERERERFRALCcCxERERERERERERGRFxyXTkRERERERERERETkBZPoREREREREREREREReMIlOREREREREREREROQFk+hERERERERERERERF4wiU5ERERERERERERE5AWT6EREREREREREREREXjCJTkRERERERERERETkBZPoREREREREREREREReMIlOREREREREREREROTF/wOh5U9VeFBJ4QAAAABJRU5ErkJggg==", "text/plain": [ - "
" + "DatasetDict({\n", + " train: Dataset({\n", + " features: ['table_caption', 'table_csv', 'table_text', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'label', 'statement', 'pandas_code', 'pandas_eval'],\n", + " num_rows: 70254\n", + " })\n", + " val: Dataset({\n", + " features: ['table_caption', 'table_csv', 'table_text', 'semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', 'label', 'statement', 'pandas_code', 'pandas_eval'],\n", + " num_rows: 17720\n", + " })\n", + "})" ] }, + "execution_count": 130, "metadata": {}, - "output_type": "display_data" + "output_type": "execute_result" } ], "source": [ - "import matplotlib.pyplot as plt\n", - "import seaborn as sns\n", - "\n", - "# Настройка стиля\n", - "sns.set_style(\"whitegrid\")\n", - "\n", - "# Создаем фигуру с двумя подграфиками\n", - "fig, axes = plt.subplots(1, 2, figsize=(15, 6))\n", - "\n", - "# Первый график с регрессионной линией\n", - "sns.regplot(data=df_dif, x='count columns', y='percent_sem', \n", - " scatter_kws={'alpha': 0.6}, line_kws={'color': 'red'}, ax=axes[0])\n", - "axes[0].set_xlabel('Количество столбцов')\n", - "axes[0].set_ylabel('Эффективность (%)')\n", - "axes[0].set_title('Зависимость эффективности метода от количества столбцов')\n", - "\n", - "# Второй график с регрессионной линией\n", - "sns.regplot(data=df_dif, x='count rows', y='percent_sem', \n", - " scatter_kws={'alpha': 0.6}, line_kws={'color': 'red'}, ax=axes[1])\n", - "axes[1].set_xlabel('Количество строк')\n", - "axes[1].set_ylabel('Эффективность (%)')\n", - "axes[1].set_title('Зависимость эффективности метода от количества строк')\n", - "\n", - "plt.tight_layout()\n", - "plt.savefig('./row_col_efficent.png',dpi=300)\n", - "plt.show()\n" + "data" ] }, { "cell_type": "code", - "execution_count": 109, - "id": "320ebb0e-c4b9-4159-9ee4-dcbb54ccc4f4", + "execution_count": 107, + "id": "49da57b4-ca24-4f94-a27b-b9c68c73f80c", "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABdEAAAJOCAYAAABYwk4SAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3XlcVFX/B/DPnYVNEBdQEUFRBBdQ3BMx01zqcUstsVzq16KVZmmWWj5qZmqlpanl1uZuj2tmZtniruVCQq6ACqKyyjoMzMy9vz9oRoZ10GE2Pu/Xi5fOnTMz59577sz3fu+55wiSJEkgIiIiIiIiIiIiIqJSZNauABERERERERERERGRrWISnYiIiIiIiIiIiIioHEyiExERERERERERERGVg0l0IiIiIiIiIiIiIqJyMIlORERERERERERERFQOJtGJiIiIiIiIiIiIiMrBJDoRERERERERERERUTmYRCciIiIiIiIiIiIiKgeT6ERERERERERERERE5WASnYiIiMjMVCoVbt++jaysLGtXhYiIiIiIiB6QwtoVICIiInIE+/fvx9atW3H+/HmoVCoAwPjx4/Hmm29auWZERLZny5YtOHjwIC5evIisrCzUqVMHAQEBePLJJzFkyBDIZOzvRURERLZDkCRJsnYliO4HA28iIrIVixcvxtq1a/Hoo49i4MCBqFu3LgRBQLNmzeDj42Pt6hER2ZzIyEh4e3vjoYcegru7O7Kzs/H3339j3759+M9//oNPPvnE2lUkIiIiMmASnewWA28iIrIFf/75J8aOHYs333wT48ePt3Z1iIjsgkajgVKpLLX8/fffx8aNG/Hrr7+iSZMmVqgZERERUWnsqkt2a+PGjVixYgXGjBmDJ554AuPGjcOSJUswevRo7Nu3Dzdv3rR2FYmIqAb46quv0KFDBybQiYiqoKwEOgD4+voCgNFdpQcPHsT48eMRERGBkJAQ9O3bFytXroROpzN67dixYxEcHGz469atG8aPH48rV64YlQsODsby5cuNlq1btw7BwcEYO3as0fKCggIsX74cAwYMQGhoKCIiIjBp0iQkJCQAAG7evIng4GDs3LnT6HXvvfcegoODMWPGDMOynTt3Ijg4GCEhIcjIyDAqf+7cOUO9o6OjjZ7bv38/hg8fjnbt2qFbt26YNm0akpOTS227uLg4vP7663jo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q3ko00INigwTzp9xPm+c8wabven8xXSzLw40sRQThmDKlGi0S5liKo6dqOpiEcXb7laCRnq7v/53tqtG++5lVPCsszuvU03n0V436Ti1dqq6SMz5ced1Kdlqbey6cUeptbHrcsertbHrzv+vWhu7ruQYcKVF17vSQgcFfCr5w9vpNEV7066rVwyesOsO/a1aG7tuxplqbey6fS9Sa2PX6Yrmtl13wt1qbey6CYoDPXbd925Wa6Oq6yPERBf6jLOMX3erThAEQRC6iqaYzV5VF+8U58e4memkLt4ZmZParTpB6C7+s3QHx927hJ888Q2//+9KfvLENxx37xL+s3RHX3dNiR21O/jTx39iP2c9k/UGbtJa2djOOE8y4STTydNGCju8GTxywiMcXnQ4jn5oJfYEXam50mt1WroQbNiVlOjrNLXIYlWdChEC0buJtujl6PvpJ7UPTrqr87oMRYPWrjv4SpRGYA6+su3hIVdGltppr3Mmq7Wz6zTFD4RdVzgJCmNE+g6abOkCTDxebT923bxL1drYdUUL1drYdam5kD0muj57jKUL4HDC8XdFNnh1l7XdYd+uOmJm06nWzrDrNMX92HUHXqbWxq6bdb51nNHQXZYuwALFc9uu68oAzNBZ4I7Rzp1t6QKc9De1/dh1k0+K/RnSnJYujhETXegzGslnuzc3qma7N5dGJDepIAiC0LPkp6lNAVXVxTt/On1at+rinfPnxLjh66ROELqD/yzdwXX/Xcm63XU0tnpp8fhobPWybncd1/13Zdwa6dWY/INWDnc0MOIvI7jyzStZqoVGz2smLDAdPGC42WVm8JyZyqm4SOkj47y3soWoziGw6941Jii1seveNcYptlHTRcKp+H6F6jTFVCZtgpGLHlbaT4guY6RSm1BdFyz+LEUz2K5TzW8doutC33IU+2bXObPV2th1U04hdv90v87PJa+r7ceuc7lhdozo29kXWboA+SVq+2mvS1VMgWHXjT1crY1dp+tw0n2QHeF8zR4FJ95n6QIUHwbpg6LvI32QpQvQFbO+WNFEb6/72dLIRnr2GGt7e6aeBifdD7kTQHNhfRG4IHei9fpMPS1Un6QY1GDXTThWrY1dV6D4HWnXOZPg0N9H1x/6+9AC4c4kWPAbopY9XvCb0DYuN8y+OPp+Zl8c+nlQLUpu1+k6nPdfcKWH17rSre32czQ5HcYuiL6PsQssXQCHE06+n6g/Diff324wJf4QE13oUw7y/TWikb7dm8tBvr/2co8EQRCEgcjps4d3qy7eue/Djd2qi3cWThxEhjv6RXmm28nCiTFuWgWhm/B6De58ay3VjR68JngN8Pn/95pQ3ejhrrfW9Ulql3B7bMbkOTycojUyWKvjYr2Z93QfZrtY55mmzu1mMlvMdN4207iIJHJsN8y7bZG3XTW2u2JUf2iq5XxV1UXij4ZaBJ1d9xPjZ0pt7LqfGFcotmnTrTHVciGH6Pa/BC2Gj65pli7I1EXWWREpDN70b5q6KLgqvWg2lVp21P1UaNmkF81uW1GoaCDbdYNnqLWx67qSz7lAcUDWrutK/uMDFNM92HWFiqazXedwwikPRNef8kCo+dWViGWAo++wjEG9nRmoJ1vrj74jdP3Y+TAoRp7uwdMsXUi7Q2Kn/9B0SxfgMMU0Hu11Q6bDGf+GfS+GnLGQVmj9v+8P4IzHrO12HE448qbIKVBc6dZ2++vdJbP+UMgcEf1YskZYuvb8bCn8ahMMnw2Zw6z/f7UpvIEeYOppcOlHcPZTcOK91v+XLulooEOo2R8Nu+57N6q1sevO+Jdam/a6g67wG+Xtot+dmdb6g8J8Rx90BRz6O3Dn0GYka+DOhUOvCd8m8HnoYDxr4T8P6QVqx9NeN2Q6/N+rMOMCSM4GR7L1/8z/s9a3P0cBzn0xspE+doG1vT1TT4NTHvQP7Nleg9wSa324cyHOiG+LXxgQHOT7K6m+cp7Q/8QgvYo9Rg5nGVdIBLogCILQa5wzeww3vbIGX5S57w7N0iUCH6+t7FZdvON06tx44hR++ewyWsOYkklOnT+cOAWnU+JLhN5hyYYytlU2RvMZ2VrZwJINZRxSYg3ulJlOBitYz2WmkyH+5WpDI88RO6lHtaEFr7yfMA7gXMen+DB5Dx+LNQ/P46Emgpk6JnsM+1cZ/M4sZ2KMKfhfGVMJDEV+Y47lAGIP1H1jjuVA2+Ol5hD2Y1fMdkvNIQQs18fNIziMlTHbPG4egWKsaVgeMU7gN7wQNVLN8Ouu8T9uIZOvvMXs41wfsc1X3mJayAw+HpqZyVcNsdsMzWxrc6XxU17lhpjHcKXxU14LPDjsWvjsb21eh/1Usp8Ph10bXKw/9CZSl/07agy7aULDoTcRjFHUdfJ++F9q/n4UmWbHAt61Whr5P2wXCTnhGNjwVszjCcnJe/Av4OlzYrc5+Bdty8P3tdIsGFFqouguSxfgezfBgzGiNAO6AOMWwMpnY7cZZ3vefS6A/10NZpTvBc1p6QI0xP7shNUFzK23boUa23mXNQ4Ouyq8+fWzpXDnDKje1HFbpIhlsIzBw2+Ej/8K1ZshezTMuSw04jaAwwnzfgqv/xaa68DbgokPDYeVisWdAXMv7xjdWrTQMn9rohRQzxwWmspk0GTILYLKDZHb5BZZuvYMmQ5HT4XKjdBSYxX4zB0bek7bCbyeH/zFev0Mr5UOJWcsHPSz8K93wKz/6jHY8Da01kNSOhQdBvucE96sP/xaePkX0FLb8fmSM63PdqTI4NRcuOjNiC9FWBxOGBfGlG/PUbfAg4eo6QIkpVqpQFa+EFk/+aTQ6PWUbCiYBGWrIrcpmBQ+TcpBV8CBP4Fvn4LarZA5EqafET0avCttOvN5GDQZdnwR+bnsuvYMmQ7H/xnmXaZ2joJllLfUwyu/tM7T7DFwzO2hEejtmXoaTDoJNr4PDbshbbA1yBXnEegB+kcvhYSnkXxOMG5RDy0RBEEQhG4kKcnBL44Yz+2vr42o+cUR40lK6qaqZn2Mz1TLlKuq6w+cMMPKpXvfu+vZWNGIzzBx6BpFean8aEFxcLsg9AYrdtQQK8jca1i6gInepKUAdTGf29JZHGbcxDdcHbPNYcZNLAVM0+QacyHfau/xFB52auG/AwpMDQdH8/yFv+WA4Qfw0O/OZKLjfzH3U6q3Rb9dZ5zH/7g2irpNZ08Mcb95KvtxT8x295unBk30D4yZVJjp5Gn1EfUVZjofGDODj1cZg5jq2BNzP6uMQQQSX/lI4g7vGfzS+VRYE9kE7vCega9dLuxTfTfwLL9nlnN9SDsT+NpbzKm+UPM7PTWVU2tjt5ma2mYWrTbHU22kkK03RTyWaiOF1aYtctvlpmzSeeSv+mfHyHIT0KBs0nkU2Myca/63gQXeAzje+WnE/bzkPYB3/7eBO8/cp23lkOlk/fA1Wpb8g6aVL+CiGQ9uUqacTNbc/+toAM48B16/GryRjwdniqULUHKUFcXriXwe4Eq3dAHyimHSCZYxZ/o66jUHTD7R0gWPZQakFUBDlKKFaQWWLsDxd6mZ6Mfb8o47k2Dh1fD2Hwgf+q9Z2+0GXVeKLwboivn1s6XQWAmLz4DaHZYxffZTHSPQ2+Nyw3zFnNABQ3nJXVC7HcPTgsOVbEVRz708vOHscFoG8cu/sMxm0yR4UmsaJGV0NJB1HU57BB4/A+rDDEZkDLG2RzIddR3yi8Nvi3RcnX2998qs32Iz60dHNut7gyHTrYj9htLImrTCjt8Lpz1q/R/OSJ98Utt2O5d+AvceGN5IL5hkbY+EMwn2+X7k7d3VRvXzMPti+PpRNV04OnuOgmWYn3xf59qoDqbEIWKixxHNgEr5rmYgyriOIAiC0AMcOyGLl1fXKOkSgSlD01mxM8pNpk2XKFy6wMp3eN87a6m3BZxluOBHC8cHtycC+4/OYXNlFOPBpkskTpgxjGOmDOGjDeWU1bVQkJHM3KJ8iUAXep0dVY2d1lmRyLFNdHvEcjWjafI6SHGGMf/8NHkdlGnJ/OH9P/D48sfZ7l7DX8Lo0kw4ERdnm06avHO5wncJB46wYsS3G/mYjuglAU2/LsBas4hSI4tCPfJv6x4ji7VmUci694z9qDeTSddaIrarM5N5z9gv+NjAyfXe87nV+QCpWmsHfaOZxPXe8zFst8dnGr9lJZdHOaI2nd16uc93AgAXOp8mBxMN69gr0XjYe3pwe3tO9d1Asq+WP+sPMUIvZZtRyC+Mi0LezwArdjcqtQnoAEx0zvH+jqdc15EW5jVoMJM4x/s7TFscvWGYfH/HKZzh2cUZzrdIsUU8NaHzlOcwntpxCq8aJrpuvftfbKriRZ/1uh3t/DTEcPACr3oP4Ke+yxm2qarjizBkOsmn3EnygstjG4DOJJj/S3jnpsjm9vxfhhrIDiccfye8cEn4yHLdZW1vb5zOvRzqd0PZWmiqAsOw1qfkQEEJzPlJaB91Hc55Dh49HlqqO+4nOdvaHi7H8MZ3O+oDtM8xDG0pID66B5qrCRrB7myY+5OOKSKKDoevHoy8D7suHF0xv7oSsdxZ/IazseEdtq36gpGT9sNRtDC64Rw03++Eqs02A3mMFd0eKdp70VPw1b9g7f+gtQGS0qyBl1nfD5/2Ym/oyuvdG2Z9T6PrcM6zkT9D7mxre7jvhtMehRP+hvHW9dRs+ZasUdNxHHZt9Dzrl34CTdXw9HnW7ISsEXD6P9ULdcYLgdz4pVFmXrXPjS90CjHR44gnjIO4yPGhki5GeQFBEAShm1lXEWUabxd08Y5mqEUgq+r6C5cuGMfFc8fywtId7KhuYlh2CifNGJYwEegBzp83lqe+3qmkSzScTp35JYV93Q1hgFNW19HEjKV7ydiPCY7YxUZfMvZjou3xJN9jrOL7HYz0Ugz+bfi42jmEVv1ifv9ex+dymnAkTs42XRyPk2Q0XvUewBW+UHN5iTmVJpJIoTViBHYjSSwxp9rW6fyf9yr+7bqRbK3joEK1mcaF3qtCTF2wDPGrvRdzu/M+krWO5mmL6eC33otDDHHrdZkDXvih80XGsAenZuA1dTYymAe8J1jbbTSSz3ZvLsOdkdNabffmhk1BeZ/vBB7wHcXJ+scM1crYaRbwvDGnQwR6h76TyaXGL2LOzrX/8kZrY9c5gZXmaM7wXMdpjjc4Ufsct9ZCs5nMi+b+POM7nJXm6JBXbfWeGtbsqed6zucm35n8QP8fI/VSthqFPGB8Dy9utD31rN5Tw6Qh2QC4HNb79VPf5Vzpu4hf6s8xUt/DVmMQtxun4CE1RNeBzhiAQQP5r34D2QB0y/iac1n4HMPByNs/Q8W6NkM8bzwc/PPIxumRN8PSxbBzKXgawZUKQ2fCjLPCG6dDpsP5/4XPH4XV/wFPE7hSYOKJsN95kXMM/+vE8EZ6pBzDgddBNUXEkTeomehHxk79E3c4nFB0KJV1eYwsmgEOhWu3Lkd73w4HXKKe9iLeicfI4MBn6ItH4TvbZ2jSibBvhM9QgKRUOPJmNi1dyowZM9TOhZRsOO8/3dP3viKQG/+pc6B6a8ft4XLjC51CTPQ44o/GefwfH8bMofdH4zwx0QVBEHqZXXXN3aqLd7LSkoCOeUnD6xKLpCQHZ8yOUJgpQSgZnMmEwems3h15tsGEwemUDO4YASkIwt5T36w24GrXPWAcz895MeoNnNev+1W79ZN8j5Ht28yL+g2846jncd3LO5oXnAawpsPzZOqTSfMegrtlJsfrb5Kr72FxOxPUzkZzGJ/7JjDPsQKdQFqEABoGGp/7JrDRDE2btNIczTmeazjN8RbHaF+SorXQZCbzirkfz/gOZaU5Ouxx2g3xYnbj0Hz4TAfrGMwD3hM7GOL2dq+0zmauvooCqigjh4+MSR0M9wAH+f7Kh1wW1kjf7s3lIN9fw7YDK7XLM8YhEbcHSNKhVSGlZdJeeh55aRp7GkxWmqNZ5b2If2rHkUEjdaSy2RwUHKzIS2sbBnn8063Bd9LQ3NxvngiBcQt/iL3p1910UjYAx00bxD3vbQbAQyo3G98Pa/AfN62bCjn7DWRj6WJ2r/2SweP3xTHj7Og5hrtqnA7qRJqMQJvj/gRzL+3ZHMOgniKiK3mjE53eiPYWusaQ6XDsn2BOJz5DA51Abvwv/bnxPXXgyoDiCLnxhU4hJnoc4SGVl2Pkj3vZe0DYC1dBEAShZ3Hp0Sapd14X77hUIjY6oRPiC13XuOO0GVzy2Jdsq+448DMi280dp80ITs8XBKF7GZabCpur1XR+vLj5t/cIznO+ETHa+9/eI/DibrfeQ5P+NWWO9xjrqMGMkAZlUsEkFk1dxH2vDcZhWAanARFN0NB96NzhO5Nc7UGK9R248KFhYqLRioMNxjD+5DuzQ1Q54Dd1/49/aseENXUj0VlDPICBkw+NaVE1dg7y/ZVUXzlP6H9ikF7FHiOHs4wrwkagd4XCTDfbw3wPh9MFSAJU5jLYbWSfGUgsY71fm8whYdtYOovKRrUZE3bdpYeUBE30aFx6SInScyvhTIKZ32e3NpXBqlGnvWWc9laO4c4QzBv9Ih2qxU4+MXzeaEHoK2TAovMMmQ7HdHLQT1BCTPQ446cK+eMEQRCE3mdUbioVjbFz0Y7KTYyBzrx0tQhzVZ0Qf0wZlsV939+Xpz/fwnvryqlpaCYrzc0h4ws4fb+RTBmWGPn9BSEeOWrqYJ5TSKl01NTBIY+v950PwBnOt3HjC+bbbsbBU95Dg9sN0+CjrR9R4bqXRscSDC3871eyVkA2h+BqOZgVl1yKpmk88MorXTqmleZorvZezMmO99hPW0sazTTg5nNzPC/4DokYVQ7RTd1odNYQ7yqN5HOCcUvMwYSu8OwP9+eA295X0gX4yZGj+dPrm2O2+cmRo4PL6e5kyhtj18JIdycHlycNzuS15bGLq06yzVpyu52ce+BI/vVJmFQCfs49cCRut1gRfcppj8IJjVZR0qpNVh7wQ383sCLQBSGRkcGHHkF+ueKQWPnjBEEQhN5nSJYbtsc20YdkuWNq+gNHTR7CsyoGz+TOmx5C/DBlWBaTTpjKxrI6vlq2in2mTWJsQYZEoAtCD3PIuEEUpCdRVh850rcgPYlDxnVMeXG9z8pPfbH+v2AxyQf9+albtc00ON5jzF0/ZmvN1rB3e07SydEOJql1Pg7vRDR/xLem7f3n3ooqP5fR2p5ORZUPZAbnpJPi1GnyRnboU5w6g3Pa0nmMyM5Qem677tgZg/nrO5titjl2RtvAzcVzx3L3O+vx+EwM08rgomlgmm3xyy6HxsVzQ+tn3HCClfv+359sDRl3cACLDhwZ3C70MUmpcNQtfd0LQRCEfoOY6HFKtPxxgiAIQu8zqiADKFPU9X/mlxTGNHgKM5ISskBjbX0LVz63jG3VTYzITuGOU6aRmZ4cu2E/Rdc1xuSnUZPrYkx+mhjoguCnJ78LnE6da46dxG+eX05ja8fimKlJDq45dhJOZ3jz2Yub+4wTwQCvVkqD82UaHO/h0Tdbfa8J1eskkaMfSLLnYJyts9BwdctxhKOrUeWJwIKidN7dELnWhF0XwOs1SHc7aYrye5vuduH1GsHz4cH3YpvhAd2JM60aH5cdPF7JRL/s4PHBZbfbyVmzR/DYJ1uDme5NW/YPDThr9oiwUeU3nDCVq4+cyEMfbWJbVSMjclK5aO4YiUAXBEEQ+i3yCyYIgiAICpwwbRh//2AjviiDmw7d0iUCsQyetCQHvz0mssHTXznx3iUs3dbmPn23q45pN77FjBFZvHjpvD7smSAIvUlvfBecMGMY26saeeD9DdQ0t33PZrkd/GB+ESfMiPx74qOWRscSGhzv0+JYGVajazqZ2kxSvfNxtByALrNae5wz9h/Huxu+UdIFeH9tadQBa4Cy+hbeX1vKoZOsKPHd9eHz2rfHrutqmpVA1PhTX2yjxdvmoCc7Nc7Yb0TUqHK328llh46LuF0QBEEQ+hNioguCIAiCAuMGZzB9eDZfb62OqJkxIptxgxMjEh0IGjj3v7eBLZUNtHoNkpw6o3LT+NEh0Q2e/kh708zO0m01nHjvEjHSBWEA0FvfBSt21PDhunJcDp1Mt4bPMHHoGi6Hxofrypk/vjCkNoFBM02Oz2hwvE+T/jVo3rDPm6GX8IfDL+H0yadz4E1f73U/BXXqwww6x9K9umKXUptXV+wKmuhNrR6lNu11AcP7ic+24rEFBbh0OGv/yGlWJKpcEARBEMREFwRBEAQldF3jhhOm8LOnvmFTWQM+23Rmhw5j8tO4/vgpCZcK44QZwzhmyhCWrC/ly5Xr2XdyMfOKCxMuAr22viWiaRZg6bYaautbEjq1iyAMdHrru8AwTB74YCOrd9WhadDY6sMwTHRdw+F2snpXHQ9+sJHbT5vCO5vf5vHlj7Pd/Sym1hz2+VK0YWSaC3C1HozDN5SfHnBMl/smdJ3MZLXba7tuZ3X497Q9dl2yDo0KbZLD/FR31RCXqHJBEARhoCMmuiAIgiAoMmVYFneeMZNnvtjGxxsraGj1kpbkZE5RHqftOyIkYjCRcDp1DhpXQEbDDmaMK8DhSCwDHeDSxz9T1j32w4N7uDeCIPQVvfVdsLG8ni+3VFLdFBopbBgmlY2ttGpreXrDhzz+54+oaPLX42g3RuvScsjhEJJb56N5i9DaC4Re5+MN5cq6I6ZaeeOHKhYkt+uKB2XzRZSZcXZdOMQQFwRBEITOIya6IAiCIHSCKcOymDQkk80VDdQ1e8lwOxmdJ8UY+zsfb67rVp0gCP2T3vouWLunjl3tIpA92nYaHO/R4Hgfr74LfEBTaDsHqeTo83B7DkZvnYqGY6/6IXQv22vUosrtuqOnDuG5b3bGbHP01LZirb87ZiLH3/dJzDa/O2aiUn8EQRAEQYiNmOiCIAjdhAaYMVUdAsn6LQ6s+3sVXaKh6xpjC9L7uhtCN2KqfHg7oRMEoX/SW98FtQ0tmICXChqdH9DgeI9WfUNYbZIjiaOLj+aLVZPQW/dBR1JKdZb0JIhRuzOoCzA4XWd3fZRq4jZdgJE5asVb7br54wspSE+KWly0MD2J+eMLg4+njMghPz2J8ihtCtKTmDIiR6k/giAIgiDEJvHmYwuCIPQRM4dndqsu3ikpVJt+rKoThL5kaGZSbFEndIIg9E9647ugprmGK1++kz1Jv2WH+3yqXP8IY6BrZOnTGctP2X3Fbl448wWcrXPEQO8i580Z2WmdqamFAdh1Vx42nlgT03TN0gVwOnWuOXYSqUnh95eW5OC3x04KqUWi6xqPXjCbzAh5zDPdTh65YLbMkhMEQRCEbkRMdEEQhG7ihFnDulUX7xw/Y3i36gShL3n2kgO7VScIQv+kp74Lmr3NPP/d85zy9CkMumMQO1x30+z4FrTQkPZ0vYghXMTIlkfJbrgJX9Ph5KRINLGdfYZndFr3+IdbldrYdWlJLqU2dl1qqoujpg6Oqj9q6mBSU0Of+4QZw7jl5KlMHJxOapJOkkMjNUln4uAMbj55KifM6HjtOGVYFosvPoBFs0eQl5ZESpJOXloS58weweKLD0jYOi2CIAiC0FdIOhdBEHqEJEBh1iyJFNN51r6juOmV1bT6Is/xTnJonLXvqF7sVc/x/vpKZd2PFvZwZwRhLxmck06W20lNszeiJsvtZHCOpPERhESmO78LfIaP97e8z+PLHue5756jpqUmrM6tDSLLXGgVCPXJwHMs/nHebGbc9LaSLkC1Sv65drpzDxjJda+sjtnm3ANCo9zvPXsf4CteW74bw3ZJqGuWgW5t78gJM4ZxzJQhfLShnLK6FgoykplblB8Sgd6eKcOy+MOJU7nwoLFSp0UQBEEQehgx0QVB6BGyU6G0UU2XKCQlOThz9gj+9UnkaKczZ48gKcJ03f6Gx4idJ7QzOkHoa7697kimX/d6WPMsy+3k2+uO7INeCYLQ2+zNd4Fpmnyz+xsWL1/MEyueYGdd+IKRLrLI0Q4m2TMfzVOCljAVU3qe7Aw34wels3ZPfUTN+EHpZGe0pZPrSt2as/cfzR9eXU2U2AgcmqVrz71n70Njo4c73lrL1qpGRuakcuVh4ztEoLfH6dSZX1IYVdMeqdMiCIIgCL2DmOiCIPQI6SkplDY2KekSBcMwceg6Q7Pd7K5uxm4d68DgbDdO3YFhmAkRIXRQUR5fbq5W0glCf+Hb645kd1U9p/39MyobW8lNTeKZH+4vEeiCMMDo7HfBxqqNLF6+mMeXP87q8vDRy6muVE4sOZFF0xZx6T88mAq3YpJ7Mzxv/Hw+R/zl/bBG+vhB6bzx8/kh6yYNTmPl7oaYzztpcFpwOSnJwS+OGM8dr68Na8BrwC+OGB8xOCI11cXvj58cc5+CIAiCIPQPxEQXBKFHOGh8Phs/2aakSxQ2VzSwvrSefUbmklKksamikcZWH6lJDsbkpdLkMVlXWsfmioaEiBj64UHF3P3OhpgRWj88qLj3OiUI3cDgnHQ+/PWhfd0NQRD6mFjfBaUNpTy98mkeX/44n27/NKzGoTk4suhIFk1bxPElx5OeZP3+56e9TllD5JQxAfLSEvd2TQdU5qpFGkh44+fzqa5r5sdPfM2mPTWMGZTF386aFRKBHuA3R03inEe+iLmv3xw1KeTxpQvGAfDgB5uoafJgYpnn2akuLjpoTHC7IAiCIAiJT+JelQmC0KdcdfhE/qlgol91+MRe6E3vUNfspcVjkJLlwKFrFBeGFr5K0Uz21BrURcmz2p9wu50sOmBk1PQ1iw4YidstPzWCIAhCYlDfWs+Lq19k8fLFvLHhDXxm+GTbBw4/kHOmncNpk06jIK2gw/YxBemUNVTH3N+YBBh0j4RKepVYuuwMN49duD9Lly5lxowZOBzho8KH5qaSmuSgsTVycvTUJAdDczvmGbx0wTgunjuWF5buYEd1E8OyUzhpxrCESc8nCIIgCIIa4mwIgtAjpKa6OGbaYF5Ztjui5phpg2PmhuxPZLidJLt0mlp9pIcxjptafSS7dDISyFS+4YSpADz5+Vbs96VJDjhz9sjgdkEQBEHor3h8Hl7f8DqLly/mP2v+Q6MnfNGXCfkTOGfqOZw99WzG5IyJ+pzXHDWR4+/7JOa+rzmqfwQbdKWgvFMDj4KT7uyGDHij89I4Y78RPPH5Vpo9HePf3S6dM/cbyei8tDCtrdQuZ8weGXabIAiCIAgDg8RxcgRBiDvuPXsf4CteW7a7Q37wo6YN9m9PHEbnpVFcmM7y7TUUJ6ejaW13faZpsqumiWnDsyPeoPVXbjhhKlcfOZEHl2xg6frtzCgezsXziiQCXRAEQejXeHwern//eu7/8n4qmirCaoZlDOOsKWexaNoipg+aHvLbH40pI3LIT0+ivD6y9VyQnsSUETld6ntvk5Ss09oSOzlLUnJbcpah2W62VDXHbDM0u2N6ls6i6xqnzBrOjqomyuqa2VrZRLPHh9vlYGRuCgUZbk6eNSwhatYIgiAIgtAziMMhCEKPcu/Z+9B4oofb31zNis27mTJ6ML88fEJCRaAHsN+grS+tZ0hWCilJDppafeyqaSI3LSlhb9Dcbic/XlDM0px6ZswojjidWhAEQRD6Cy+sfoGbPrypw/psdzanTjyVRdMWcfCog9G1zpf/1HWNRy+YzdkPfkptmDRvmW4nj1wwu0+uGRaMzeDdjXVKugAjslL4rjR24c4RWW0F5edPKOBfCqn/5k/omA6nK0wZlsXlh47jua+3k+520eIxSHbpjCvM4ORZw5gyLKtb9iMIgiAIQmIiJrog9BKjspLYUhN7ouuorKSYmv5GaqqLa46dxNKlrcyYMSmhDVb7Ddr60nr21Fo3aNOGZ8sNmiAIgiD0I4ZlDAsuJzuSOW78cSyatoijio8i2Zm8188/ZVgWiy8+gCc+3cxrK/fQ5PGR4nJw9ORBnHnA6D67Zrji2Km8e/fHSroAlx5ezGWPfxuzzaWHtxUb//XhE5VM9F93Y/2cKcOymDQkk80VDdQ1e8lwOxmdl5aQAQ6CIAiCIHQvYqILQi/xzCVzmH3re0o6oX8jN2iCIAiC0P+ZO3Iun130GTvrdrJg9AKy3N1vak8ZlsUfTprGhQfHzzXDpMHZjM5NYXNlU0TN6NwUJg3ODj7+3sShuJ3LafZGTunidup8b+LQ4OO+qp+j6xpjE7hgqyAIgiAIPUPn5x4KgtAlCrPTyEuLfhOQl+aiMDux8mUPVAI3aNNHZDO2IF0MdEEQBEHoh8weNpsTJ5zYIwZ6gHi7ZtB1jb8u2odB6eFnRw5KT+Kvi/YJ6afTqXPbqdNwROi6Q4PbTp2G0xl6+3nv2ftwzLTBHW5KdSwDPdHq5wiCIAiC0H+RSHShz3j0wsmc/4+VSrpE4avfHcE+f3iDigZPh215aS6++t0RfdArQRAEQRAEIRE5ZkoBr6woU9LZmTIsi39cMJsnP9vE22vKaWzxkZrs4LCSAs7YP3yqmRNmWOlv/vrWGjZVNOEzLfN8bF4Klx5WEtzenkD9nDveWsvWqkZG5qRy5WHjE7J+jiAIgiAI/Rcx0YU+45Bxo4HYJrqlSxy++t0RlFY3cNaDn1Pe0EJ+WjJPXDxbItAFQRAEQRCEbuXSQ8crmeiXHjq+w7opw7K44cTp/F8n0tOdMGMYx0wZwkcbyimra6EgI5m5RfkdItDbk5rq4vfHJ07gjCAIgiAIiYeY6HHE6TPzefqbciVdorD51mMY/etXom5PRAqz03j7lwv6uhuCIAiCIAhCP+GMWQU89XVsQ/yMWW1R5RMGZTFhUDqr99RH1E8YlM6EQeHT1XQlf7jTqTO/pLBTbQRBEARBEOIdyYkeR9xwglrOP1Vdf2Hzrcd0SNny6IWTE9ZAFwRBEARBEITOcv3xszqt03WNO06fwYhsd1jtiGw3d5w+o8/zsAuCIAiCIMQ7EokeR7jdTs49cCT/+mRrRM25B47E7U68t+2QcaPZcNMIli5dyowZM3A4HH3dJUEQBEEQBEGIG7p6rzBlWBb3fX9fnv58C++vK6ehxUdasoP54/I5ffaosPnNBUEQBEEQhFASz43t59xwwlSAsBfH5x44MrhdEARBEARBEISBRVfvFaYMy2LSCVPZ3In85oIgCIIgCEIbYqLHITecMJWrj5zIQx9tYltVIyNyUrlo7piEjEAXBEEQBEEQBEGdrt4rdCW/uSAIgiAIgmAhrmyc4nY7uezQcX3dDUEQBEEQBEEQ4gy5VxAEQRAEQehdpLCoIAiCIAiCIAiCIAiCIAiCIERATHRBEARBEARBEARBEARBEARBiMCAMtEff/xxFi5cyNSpUznttNNYtmxZX3dJEARBEARBEAYEci0uCIIgCIIg9FcGjIn+6quvcsstt3DppZfywgsvMGHCBC688EIqKir6umuCIAiCIAiCkNDItbggCIIgCILQnxkwJvojjzzC6aefzimnnEJxcTHXX389breb5557rq+7JgiCIAiCIAgJjVyLC4IgCIIgCP2ZAWGit7a2snLlSubMmRNcp+s6c+bM4ZtvvunDngmCIAiCIAhCYiPX4oIgCIIgCEJ/x9nXHegNqqqq8Pl85OXlhazPy8tj48aNys/j8/m6u2uCjcDrK69zYiLvb+Ij73FiI+9vYiPvb+8wUF/f7roWh47n6kB9TYU25FwQQM4DwULOAyGAnAsCdP9144Aw0buL5cuX93UXBgTyOic28v4mPvIeJzby/iY28v4K8U77c1TOWSGAnAsCyHkgWMh5IASQc0GA7jsPBoSJnpOTg8Ph6FC4qKKigvz8fOXnmTp1Kg6Ho7u7J/jx+XwsX75cXucERd7fxEfe48RG3t/ERt7f3iHwOg80uutaHNqux+WcFQLIuSCAnAeChZwHQgA5FwToeB7s7bX4gDDRk5KSmDx5Mp988gmHHXYYAIZh8Mknn3DOOecoP4/D4ZAPXy8gr3NiI+9v4iPvcWIj729iI++v0BN017U4dDxH5ZwVAsi5IICcB4KFnAdCADkXBOi+82BAmOgAF1xwAVdddRVTpkxh2rRp/POf/6SpqYmTTz65r7smCIIgCIIgCAmNXIsLgiAIgiAI/ZkBY6IfffTRVFZWcvfdd1NWVsbEiRN56KGHOj2FVBAEQRAEQRCEziHX4oIgCIIgCEJ/ZsCY6ADnnHNOp6eMCoIgCIIgCIKw98i1uCAIgiAIgtBf0fu6A4IgCIIgCIIgCIIgCIIgCIIQr4iJLgiCIAiCIAiCIAiCIAiCIAgRGFDpXLqKaZoA+Hy+Pu5JYhN4feV1Tkzk/U185D1ObOT9TWzk/e0dAq9v4NpSUKf99bics0IAORcEkPNAsJDzQAgg54IAka8bu3otrplyFR+T1tZWli9f3tfdEARBEARBEBKAqVOnkpSU1Nfd6FfI9bggCIIgCILQHXT1WlxMdAUMw8Dr9aLrOpqm9XV3BEEQBEEQhH6IaZoYhoHT6UTXJatiZ5DrcUEQBEEQBGFv2NtrcTHRBUEQBEEQBEEQBEEQBEEQBCECEgIjCIIgCIIgCIIgCIIgCIIgCBEQE10QBEEQBEEQBEEQBEEQBEEQIiAmuiAIgiAIgiAIgiAIgiAIgiBEQEx0QRAEQRAEQRAEQRAEQRAEQYiAmOiCIAiCIAiCIAiCIAiCIAiCEAEx0QVBEARBEARBEARBEARBEAQhAmKiC4IgCIIgCIIgCIIgCIIgCEIExEQX4oI9e/Zw5ZVXsv/++zNt2jSOO+44li9f3tfdEroBn8/HnXfeycKFC5k2bRqHHXYY9957L6Zp9nXXhC7wxRdf8KMf/Yh58+ZRUlLCW2+9FbLdNE3uuusu5s2bx7Rp0zj//PPZvHlz33RW6DTR3l+Px8Ptt9/Occcdx4wZM5g3bx6/+tWv2LNnTx/2WOgMsT6/dn7/+99TUlLCo48+2nsdFIRO8Pjjj7Nw4UKmTp3KaaedxrJly/q6S0IPItcfAsDf//53TjnlFGbOnMmBBx7Ij3/8YzZu3BiiaWlp4frrr2f//fdn5syZ/OQnP6G8vLyPeiz0FIsXL+a4445j1qxZzJo1izPOOIP3338/uF3Og4HJAw88QElJCTfddFNwnZwLA4N77rmHkpKSkL/vfe97we3ddR6IiS70OTU1NZx11lm4XC4efPBBXnnlFa666iqysrL6umtCN/Dggw/yxBNP8Pvf/55XX32VK6+8koceeojHHnusr7smdIHGxkZKSkq49tprw25/8MEHeeyxx7juuut4+umnSUlJ4cILL6SlpaWXeyp0hWjvb3NzM6tWreKSSy7h+eef569//SubNm3ikksu6YOeCl0h1uc3wJtvvsm3335LYWFhL/VMEDrHq6++yi233MKll17KCy+8wIQJE7jwwgupqKjo664JPYRcfwgAn3/+OYsWLeLpp5/mkUcewev1cuGFF9LY2BjU3Hzzzbz77rvceeedPPbYY5SWlnLZZZf1Ya+FnmDw4MFceeWVPP/88zz33HMccMABXHrppaxbtw6Q82AgsmzZMp588klKSkpC1su5MHAYN24cS5YsCf4tXrw4uK3bzgNTEPqY22+/3TzrrLP6uhtCD/GDH/zA/M1vfhOy7rLLLjOvuOKKPuqR0F2MHz/efPPNN4OPDcMw586daz700EPBdbW1teaUKVPMl19+uS+6KOwF7d/fcHz77bfm+PHjzR07dvRSr4TuItL7u3v3bvOggw4y165day5YsMB85JFHer9zghCDU0891bz++uuDj30+nzlv3jzz73//ex/2Sugt5PpDCFBRUWGOHz/e/Pzzz03TtN73yZMnm6+99lpQs379enP8+PHmN99800e9FHqL/fbbz3z66aflPBiA1NfXm0cccYT50Ucfmeecc4554403mqYp3wkDibvvvts8/vjjw27rzvNAItGFPuedd95hypQpXH755Rx44IGceOKJPP30033dLaGbmDlzJp9++imbNm0CYPXq1Xz11VccfPDBfdwzobvZvn07ZWVlzJkzJ7guIyOD6dOn88033/Rhz4Seor6+Hk3TyMzM7OuuCN2AYRj88pe/5MILL2TcuHF93R1BCEtraysrV64M+a3RdZ05c+bIb80ARa4/Bi51dXUAwRnMK1aswOPxhJwLRUVFDB06lKVLl/ZFF4VewOfz8corr9DY2MjMmTPlPBiA3HDDDcyfPz/kPQf5ThhobNmyhXnz5nHooYdyxRVXsHPnTqB7zwNnd3ZYELrCtm3beOKJJ7jgggv40Y9+xPLly7nxxhtxuVycdNJJfd09YS/5wQ9+QH19PUcddRQOhwOfz8fPf/5zjj/++L7umtDNlJWVAZCXlxeyPi8vT/LOJSAtLS3ccccdHHPMMaSnp/d1d4Ru4MEHH8TpdHLuuef2dVcEISJVVVX4fL6wvzXtcyMLAwO5/hiYGIbBzTffzKxZsxg/fjwA5eXluFyuDoP7eXl5wfNESBzWrFnDmWeeSUtLC6mpqdx7770UFxfz3XffyXkwgHjllVdYtWoVzz77bIdt8p0wcJg2bRq33HILY8aMoaysjHvvvZdFixbx0ksvdet5ICa60OeYpsmUKVP4xS9+AcCkSZNYt24dTz75pJjoCcBrr73GSy+9xJ/+9KfgRc0tt9xCYWGhvL+C0E/xeDz89Kc/xTRNrr/++r7ujtANrFixgn/96188//zzaJrW190RBEEQhKhcf/31rFu3LiTnrTCwGDNmDC+++CJ1dXW8/vrrXHXVVfz73//u624JvciuXbu46aabePjhh0lOTu7r7gh9yPz584PLEyZMYPr06SxYsIDXXnsNt9vd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", + "application/vnd.jupyter.widget-view+json": { + "model_id": "1bbfe416c84249598d2b7b7136cad746", + "version_major": 2, + "version_minor": 0 + }, "text/plain": [ - "
" + "Saving the dataset (0/1 shards): 0%| | 0/3292 [00:00 1\u001b[0m \u001b[43mprocess_data\u001b[49m[\u001b[38;5;241m0\u001b[39m][\u001b[38;5;124m'\u001b[39m\u001b[38;5;124msemtab_query\u001b[39m\u001b[38;5;124m'\u001b[39m]\n", - "\u001b[0;31mNameError\u001b[0m: name 'process_data' is not defined" - ] + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "eb67f1b60143423dac2c721905b78e08", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Saving the dataset (0/1 shards): 0%| | 0/3292 [00:00\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", + " \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", + "
table_csvtable_textlabelstatementtable_caption
02-15401676-3.html.csvdate#result#score#brazil scorers#competition\\n...1haroldo be mention as a brazil scorer for 2 di...1919 in brazilian football
12-15401676-3.html.csvdate#result#score#brazil scorers#competition\\n...14 of the 5 game be for the south american cham...1919 in brazilian football
22-15401676-3.html.csvdate#result#score#brazil scorers#competition\\n...1friedenreich be mention as a brazil scorer for...1919 in brazilian football
32-15401676-3.html.csvdate#result#score#brazil scorers#competition\\n...1there be 2 different game where the highest sc...1919 in brazilian football
42-15401676-3.html.csvdate#result#score#brazil scorers#competition\\n...14 of the 5 game be play in may 19191919 in brazilian football
..................
922781-20861261-4.html.csvround#choice#player#position#height#weight#col...1jerraud power , 192 pound (87 kg) , be choose ...2009 indianapolis colts season
922791-20861261-4.html.csvround#choice#player#position#height#weight#col...0terrence taylor play for auburn2009 indianapolis colts season
922801-20861261-4.html.csvround#choice#player#position#height#weight#col...0curtis painter 's position be quarterback and ...2009 indianapolis colts season
922811-20861261-4.html.csvround#choice#player#position#height#weight#col...0the player who weigh the most play in round 32009 indianapolis colts season
922821-28578233-1.html.csvime exchange (including spot , credit and forw...1for 2007 / 08 , metal - volume (thousand tons)...iran mercantile exchange
\n", + "

92022 rows × 5 columns

\n", + "" + ], + "text/plain": [ + " table_csv \\\n", + "0 2-15401676-3.html.csv \n", + "1 2-15401676-3.html.csv \n", + "2 2-15401676-3.html.csv \n", + "3 2-15401676-3.html.csv \n", + "4 2-15401676-3.html.csv \n", + "... ... \n", + "92278 1-20861261-4.html.csv \n", + "92279 1-20861261-4.html.csv \n", + "92280 1-20861261-4.html.csv \n", + "92281 1-20861261-4.html.csv \n", + "92282 1-28578233-1.html.csv \n", + "\n", + " table_text label \\\n", + "0 date#result#score#brazil scorers#competition\\n... 1 \n", + "1 date#result#score#brazil scorers#competition\\n... 1 \n", + "2 date#result#score#brazil scorers#competition\\n... 1 \n", + "3 date#result#score#brazil scorers#competition\\n... 1 \n", + "4 date#result#score#brazil scorers#competition\\n... 1 \n", + "... ... ... \n", + "92278 round#choice#player#position#height#weight#col... 1 \n", + "92279 round#choice#player#position#height#weight#col... 0 \n", + "92280 round#choice#player#position#height#weight#col... 0 \n", + "92281 round#choice#player#position#height#weight#col... 0 \n", + "92282 ime exchange (including spot , credit and forw... 1 \n", + "\n", + " statement \\\n", + "0 haroldo be mention as a brazil scorer for 2 di... \n", + "1 4 of the 5 game be for the south american cham... \n", + "2 friedenreich be mention as a brazil scorer for... \n", + "3 there be 2 different game where the highest sc... \n", + "4 4 of the 5 game be play in may 1919 \n", + "... ... \n", + "92278 jerraud power , 192 pound (87 kg) , be choose ... \n", + "92279 terrence taylor play for auburn \n", + "92280 curtis painter 's position be quarterback and ... \n", + "92281 the player who weigh the most play in round 3 \n", + "92282 for 2007 / 08 , metal - volume (thousand tons)... \n", + "\n", + " table_caption \n", + "0 1919 in brazilian football \n", + "1 1919 in brazilian football \n", + "2 1919 in brazilian football \n", + "3 1919 in brazilian football \n", + "4 1919 in brazilian football \n", + "... ... \n", + "92278 2009 indianapolis colts season \n", + "92279 2009 indianapolis colts season \n", + "92280 2009 indianapolis colts season \n", + "92281 2009 indianapolis colts season \n", + "92282 iran mercantile exchange \n", + "\n", + "[92022 rows x 5 columns]" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "p,t = (1,12)" + "dd2_unique = dd2.drop_duplicates(subset=['table_text', 'statement'])\n", + "dd2_unique" ] }, { "cell_type": "code", - "execution_count": 113, - "id": "9baa5180-c4b7-48e1-85fd-8d1460bd16dd", + "execution_count": 60, + "id": "456c8ce2-20a3-48b5-88dd-83703c8265d3", "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
statementtable_textpandas_codepandas_eval
0haroldo be mention as a brazil scorer for 2 di...date#result#score#brazil scorers#competition\\n...df['brazil scorers'].apply(lambda x: 'haroldo'...True
14 of the 5 game be for the south american cham...date#result#score#brazil scorers#competition\\n...(df['competition'].value_counts()['south ameri...True
2friedenreich be mention as a brazil scorer for...date#result#score#brazil scorers#competition\\n...df['brazil scorers'].str.contains('friedenreic...True
3there be 2 different game where the highest sc...date#result#score#brazil scorers#competition\\n...len(df[df['score'].str.extract(r'^(\\d+) - \\d+$...True
44 of the 5 game be play in may 1919date#result#score#brazil scorers#competition\\n...(df['date'].str.contains('may') & df['date'].s...True
...............
88215jerraud power , 192 pound (87 kg) , be choose ...round#choice#player#position#height#weight#col...df[(df['player'] == 'jerraud powers') & (df['w...True
88216terrence taylor play for auburnround#choice#player#position#height#weight#col...df[df['player'] == 'terrance taylor']['college...False
88217curtis painter 's position be quarterback and ...round#choice#player#position#height#weight#col...(df[df['player'] == 'curtis painter']['positio...False
88218the player who weigh the most play in round 3round#choice#player#position#height#weight#col...(df.loc[df['weight'].str.extract('(\\\\d+)').ast...False
88219for 2007 / 08 , metal - volume (thousand tons)...ime exchange (including spot , credit and forw...df.loc[df['ime exchange (including spot , cred...True
\n", + "

87974 rows × 4 columns

\n", + "
" + ], "text/plain": [ - "1" + " statement \\\n", + "0 haroldo be mention as a brazil scorer for 2 di... \n", + "1 4 of the 5 game be for the south american cham... \n", + "2 friedenreich be mention as a brazil scorer for... \n", + "3 there be 2 different game where the highest sc... \n", + "4 4 of the 5 game be play in may 1919 \n", + "... ... \n", + "88215 jerraud power , 192 pound (87 kg) , be choose ... \n", + "88216 terrence taylor play for auburn \n", + "88217 curtis painter 's position be quarterback and ... \n", + "88218 the player who weigh the most play in round 3 \n", + "88219 for 2007 / 08 , metal - volume (thousand tons)... \n", + "\n", + " table_text \\\n", + "0 date#result#score#brazil scorers#competition\\n... \n", + "1 date#result#score#brazil scorers#competition\\n... \n", + "2 date#result#score#brazil scorers#competition\\n... \n", + "3 date#result#score#brazil scorers#competition\\n... \n", + "4 date#result#score#brazil scorers#competition\\n... \n", + "... ... \n", + "88215 round#choice#player#position#height#weight#col... \n", + "88216 round#choice#player#position#height#weight#col... \n", + "88217 round#choice#player#position#height#weight#col... \n", + "88218 round#choice#player#position#height#weight#col... \n", + "88219 ime exchange (including spot , credit and forw... \n", + "\n", + " pandas_code pandas_eval \n", + "0 df['brazil scorers'].apply(lambda x: 'haroldo'... True \n", + "1 (df['competition'].value_counts()['south ameri... True \n", + "2 df['brazil scorers'].str.contains('friedenreic... True \n", + "3 len(df[df['score'].str.extract(r'^(\\d+) - \\d+$... True \n", + "4 (df['date'].str.contains('may') & df['date'].s... True \n", + "... ... ... \n", + "88215 df[(df['player'] == 'jerraud powers') & (df['w... True \n", + "88216 df[df['player'] == 'terrance taylor']['college... False \n", + "88217 (df[df['player'] == 'curtis painter']['positio... False \n", + "88218 (df.loc[df['weight'].str.extract('(\\\\d+)').ast... False \n", + "88219 df.loc[df['ime exchange (including spot , cred... True \n", + "\n", + "[87974 rows x 4 columns]" ] }, - "execution_count": 113, + "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "p" + "dd_unique = dd.drop_duplicates(subset=['table_text', 'statement'])\n", + "dd_unique" ] }, { "cell_type": "code", - "execution_count": 125, - "id": "bac0a54b-e587-45ff-980e-b3ba9b6be504", + "execution_count": 66, + "id": "2d0b4dc2-b824-4278-a76f-13716462f2cd", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['statement', 'table_text', 'pandas_code', 'pandas_eval', 'table_csv', 'label', 'table_caption'],\n", + " num_rows: 87974\n", + "})" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "serialization_type='ttyt'\n", - "notation=None\n", - "param_position=None\n", - "keys = [x for x in (serialization_type,notation,param_position) if x != None]" + "res = pd.merge(dd_unique, dd2_unique, on=['table_text', 'statement'], how='inner')\n", + "res2 = Dataset.from_pandas(res)\n", + "res2" ] }, { "cell_type": "code", - "execution_count": 126, - "id": "96be132f-cc9e-41c5-87df-263c354431ed", + "execution_count": 67, + "id": "56333032-f3d8-4195-b8f3-4fa8e5e09d78", "metadata": {}, "outputs": [ { "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "53b51c7144174ff6a2e2f92dd82dc929", + "version_major": 2, + "version_minor": 0 + }, "text/plain": [ - "'ttyt'" + "Saving the dataset (0/1 shards): 0%| | 0/87974 [00:00 pantabfact_log.txt\n", + "python add_column_defenition.py --inputdata pantab_fact_train_unique_tables_exem --outputdata pantab_fact_train_unique_tables_def --num_proc 16 &> log_pantabfact_def_add.txt" + ] } ], "metadata": { diff --git a/tests/study_error.py b/tests/study_error.py new file mode 100644 index 0000000..070eccf --- /dev/null +++ b/tests/study_error.py @@ -0,0 +1,223 @@ +import yaml +import json +import base64 +import inspect +from typing import List, Dict, Any, Callable +from concurrent.futures import ThreadPoolExecutor, as_completed +import re +from openai import OpenAI +from datasets import load_from_disk, Dataset +from tqdm import tqdm + +# ========================================== +# 1. Исправленные классы и функции обертки +# ========================================== + +def get_kwargs(kwargs: Dict[str, Any], func: Callable) -> Dict[str, Any]: + ''' + Вытаскивает аргументы из kwargs по сигнатуре функции func. + ''' + sig = inspect.signature(func) + return {key: value for key, value in kwargs.items() if key in sig.parameters} + +class ModelMessageDict(dict): + ''' + Класс - словарь для удобного форматирования запроса к модели. + Формирует словарь для передачи в клиента openai и в модель. + ''' + def __init__(self, role: str = 'user'): + super().__init__() + self['role'] = role + self['content'] = '' + + def add_text_content(self, content: str): + self['content'] += content + + def add_img_content(self, source: str = 'image_url', path_to_img: str = None, url: str = None): + match source: + case 'image_url': + if path_to_img is not None: + with open(path_to_img, "rb") as f: + base64_image = base64.b64encode(f.read()).decode() + self['content'].append({ + 'type': 'image_url', + 'image_url': {'url': f"data:image/jpeg;base64,{base64_image}"} + }) + elif url is not None: + self['content'].append({ + 'type': 'image_url', + 'image_url': {'url': url} + }) + +def send_message(messages: List[ModelMessageDict], base_url: str = "http://127.0.0.1:8880/v1", + api_key: str = 'EMPTY', model_name: str = 'Qwen/Qwen3-VL-32B-Thinking', **kwargs) -> tuple[bool, List[str]]: + ''' + Функция для отправки сообщений в удаленную модель. + ''' + client = OpenAI(api_key=api_key, base_url=base_url, **get_kwargs(kwargs, OpenAI)) + try: + response = client.chat.completions.create( + messages=messages, + model=model_name, + **get_kwargs(kwargs, client.chat.completions.create) + ) + return True, [answ.message.content for answ in response.choices] + + except Exception as e: + print("Failed to call LLM: " + str(e)) + if hasattr(e, 'response') and e.response is not None: + try: + error_info = e.response.json() + code_value = error_info.get('error', {}).get('code', 'unknown_error') + print(f"API Error Code: {code_value}") + except Exception: + print("Could not parse error response.") + else: + print("context_length_exceeded or connection error") + return False, [] + +# ========================================== +# 2. Логика обработки и промпт +# ========================================== + +PROMPT_TEMPLATE = """You are an expert Data Scientist and a specialist in Error Analysis for LLM-generated code. +Your task is to analyze a failed Table Fact Verification attempt. + +A previous model generated a one-line Python Pandas code to verify a `Statement` against a `Table`. However, the execution of this code produced an `Actual Result` that does not match the `Ground Truth Label`. + +Your goal is to identify and describe the exact reason WHY the code failed to produce the correct answer. +Think about which one-line pandas code would give the correct answer. +Think about how the correct code differs from the incorrect code given to you. Provide a brief description of why the given code produces an incorrect result. This description may include errors in logic, syntax, and errors in referencing table entities. +### CONSTRAINTS (CRITICAL): +1. You MUST output ONLY a valid JSON object. Do not add any conversational text, greetings, or explanations outside the JSON. +2. DO NOT wrap the JSON in markdown formatting (like ```json ... ```). Output the raw JSON string directly. +4. DO NOT give recommendations or step-by-step instructions on how to fix it. +5. The "error_description" must be concise (1-3 sentences maximum). + +### INPUT DATA: + +{table_caption} + + + +{table_text} + + + +{statement} + + + +{pandas_code} + + + +{execution_result} + + + +{label} + + +### REQUIRED JSON FORMAT: +{{ + "reasoning": "Step-by-step analysis of the table data, the statement, and why the pandas code failed. Think through the problem here.", + "error_category": "Choose exactly one: [Column Mismatch, Row Filtering Error, Aggregation/Math Error, Logic/Comparison Error, Data Type Error, Syntax/Execution Error]", + "error_description": "Brief explanation (max 3 sentences) of why the code logic does not correctly verify the statement." +}}""" + +def remove_think_tags(text: str) -> str: + """Удаляет тег ... из ответов моделей reasoning.""" + try: + match = re.search(r"<\/think>", text) + if match: + return text[match.end():].strip() + except Exception as e: + print(f"Error removing tags: {e}") + return text.strip() + +def process_row(row: Dict[str, Any], config: Dict[str, Any]) -> Dict[str, Any]: + """ + Обрабатывает одну строку датасета: формирует промпт, вызывает модель, записывает ответ. + """ + # Формируем промпт + prompt = PROMPT_TEMPLATE.format( + table_caption=row.get('table_caption', ''), + table_text=row.get('table_text', ''), + schema=row.get('semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50', ''), + statement=row.get('statement', ''), + pandas_code=row.get('pandas_code', ''), + execution_result=row.get('semtab_xml_attributes_semantic_datatype_exampples_description_top1_tresh50_label', ''), + label=row.get('label', '') + ) + + # Создаем сообщение + msg = ModelMessageDict(role='user') + msg.add_text_content(prompt) + + # Отправляем запрос + api_cfg = config['api'] + success, result = send_message( + messages=[msg], + base_url=api_cfg['base_url'], + api_key=api_cfg['api_key'], + model_name=api_cfg['model_name'], + temperature=api_cfg.get('temperature', 0.2), + + ) + + # Сохраняем результат в строку датасета + if success and len(result) > 0: + row['llm_analysis_raw'] = result[0] + else: + row['llm_analysis_raw'] = None + + return row + +# ========================================== +# 3. Основной цикл выполнения +# ========================================== + +def main(): + # 1. Загрузка конфигурации + with open('study_err_conf.yaml', 'r', encoding='utf-8') as f: + config = yaml.safe_load(f) + + print(f"Loaded config. Using model: {config['api']['model_name']}") + + # 2. Загрузка датасета + # Если датасет локальный, можно использовать load_from_disk или передать путь к CSV/JSON + # В данном примере предполагается, что он загружается из локальной директории или хаба + dataset = load_from_disk(config['data']['input_path']) + #dataset= dataset.select(range(5)) + print(f"Dataset loaded. Total rows: {len(dataset)}") + + processed_data = [] + max_workers = config['processing']['max_workers'] + + # 3. Многопоточная обработка + with ThreadPoolExecutor(max_workers=max_workers) as executor: + # Запускаем задачи в пуле потоков + futures = {executor.submit(process_row, row, config): row for row in dataset} + + # tqdm для отображения прогресса по мере завершения потоков + for future in tqdm(as_completed(futures), total=len(dataset), desc="Processing instances"): + try: + result_row = future.result() + processed_data.append(result_row) + except Exception as exc: + print(f"Row generated an exception: {exc}") + + # 4. Преобразование обратно в HF Dataset и сохранение + print("Processing complete. Saving results...") + result_dataset = Dataset.from_list(processed_data) + + # Сохраняем в JSON или Parquet + output_path = config['data']['output_path_json'] + result_dataset.to_json(output_path, force_ascii=False) + print('json save') + result_dataset.save_to_disk(config['data']['output_path']) + print(f"Done! Saved to {output_path}") + +if __name__ == "__main__": + main() diff --git a/tests/summaries_err_descr.py b/tests/summaries_err_descr.py new file mode 100644 index 0000000..5d56273 --- /dev/null +++ b/tests/summaries_err_descr.py @@ -0,0 +1,238 @@ +import re +import json +import logging +import asyncio +import httpx +import pandas as pd +from typing import List, Dict, Optional +from openai import AsyncOpenAI + +# Настройка логирования +logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') +logger = logging.getLogger(__name__) + +def remove_think_tags(text: str) -> str: + """Удаляет тег ... из ответов моделей reasoning.""" + try: + match = re.search(r"<\/think>", text) + if match: + return text[match.end():].strip() + except Exception as e: + print(f"Error removing tags: {e}") + return text.strip() + +class LLMClient: + def __init__(self, base_url: str, tokenizer_url: str, api_key: str = 'EMPTY'): + # 1. ДОБАВЛЕН ТАЙМАУТ: Если локальная модель зависла, скрипт отвалится через 10 минут, а не зависнет навсегда. + self.client = AsyncOpenAI(api_key=api_key, base_url=base_url, timeout=600.0) + self.tokenizer_url = tokenizer_url + + # 2. ОГРАНИЧЕНИЕ ПУЛА: Не даем httpx создавать бесконечное число соединений. + limits = httpx.Limits(max_connections=50, max_keepalive_connections=10) + self.http_client = httpx.AsyncClient(timeout=10.0, limits=limits) + + # 3. СЕМАФОР ТОКЕНИЗАТОРА: Отправляем не более 30 запросов к токенизатору одновременно. + self.token_semaphore = asyncio.Semaphore(30) + + async def generate(self, messages: List[Dict[str, str]], model: str, **kwargs) -> Optional[str]: + try: + response = await self.client.chat.completions.create( + messages=messages, + model=model, + **kwargs + ) + raw_content = response.choices[0].message.content + return remove_think_tags(raw_content) + except Exception as e: + logger.error(f"Failed to call LLM: {e}") + return None + + async def count_tokens(self, text: str, model: str) -> int: + # ЗАЩИТА: Строго ограничиваем конкурентность запросов к токенизатору + async with self.token_semaphore: + try: + response = await self.http_client.post( + self.tokenizer_url, + json={"model": model, "prompt": text} + ) + response.raise_for_status() + return response.json().get('count', len(text) // 4) + except Exception as e: + # Убрала логирование ошибки, чтобы не спамить консоль тысячами сообщений при таймауте + return len(text) // 4 + 1 + + async def close(self): + await self.http_client.aclose() + await self.client.close() + +class AsyncErrorSummarizer: + def __init__(self, client: LLMClient, model: str, max_chunk_tokens: int = 6000, max_len: int = 20000, max_concurrent_tasks: int = 5): + self.client = client + self.model = model + self.max_chunk_tokens = max_chunk_tokens + self.max_len = max_len + self.semaphore = asyncio.Semaphore(max_concurrent_tasks) + + def _extract_description(self, row) -> Optional[str]: + try: + data = json.loads(row['llm_analysis']) + desc = data.get('error_description', '') + err_type = row.get('err_type', 'UNKNOWN') + if not desc: + return None + return f"<{err_type}>: {desc}" + except Exception: + return None + + async def _get_chunks(self, descriptions: List[str]) -> List[str]: + chunks = [] + current_batch = [] + current_tokens = 0 + + logger.info(f"Counting tokens for {len(descriptions)} items...") + + async def fetch_tokens(desc: str) -> int: + return await self.client.count_tokens(desc, self.model) + + # Разбиваем на батчи встроенными средствами asyncio, чтобы не повесить Event Loop + token_counts = await asyncio.gather(*(fetch_tokens(desc) for desc in descriptions)) + + logger.info("Token counting completed. Building chunks...") + + for desc, tokens in zip(descriptions, token_counts): + if tokens > self.max_chunk_tokens: + logger.warning(f"Skipping single item: size ({tokens} tokens) exceeds max_chunk_tokens.") + continue + + if current_tokens + tokens > self.max_chunk_tokens: + chunks.append("\n\n".join(current_batch)) + current_batch = [desc] + current_tokens = tokens + else: + current_batch.append(desc) + current_tokens += tokens + + if current_batch: + chunks.append("\n\n".join(current_batch)) + + return chunks + + async def summarize_chunk(self, chunk_text: str, chunk_index: int, total_chunks: int) -> Optional[str]: + prompt = f"""You are a helpful assistant. Summarize the following error descriptions into a concise technical report. + Maintain all key details about error patterns. + + -Data- + {chunk_text} + + Output:""" + + async with self.semaphore: + logger.info(f"Generating summary for chunk {chunk_index + 1}/{total_chunks}...") + res = await self.client.generate( + [{"role": "user", "content": prompt}], + self.model, + temperature=0 + ) + logger.info(f"Chunk {chunk_index + 1}/{total_chunks} completed.") + return res + + async def process_group(self, df: pd.DataFrame, group_name: str) -> str: + logger.info(f"[{group_name}] Extracting data...") + descriptions = df.apply(self._extract_description, axis=1).dropna().tolist() + if not descriptions: + return group_name, "No valid data to summarize." + + chunks = await self._get_chunks(descriptions) + logger.info(f"[{group_name}] Total chunks to process: {len(chunks)}") + + if not chunks: + return "All items were too large and were skipped." + + tasks = [self.summarize_chunk(c, i, len(chunks)) for i, c in enumerate(chunks)] + intermediate_summaries = await asyncio.gather(*tasks) + + valid_summaries = [s for s in intermediate_summaries if s] + if not valid_summaries: + return "Failed to generate intermediate summaries." + + logger.info(f"[{group_name}] Intermediate map step done. Preparing final reduce...") + + base_prompt = """You are a technical expert. Based on the intermediate summaries below, perform two tasks: + 1. Identify a comprehensive name for this error group. + 2. Write a single, cohesive summary of all errors in the third person. + + Constraints: + - The summary must NOT exceed 5 sentences. + - Resolve any contradictions. + - Address the error group by the name you identified. + + -Intermediate Summaries- + {DATA} + + Output format: + Group Name: [Your generated name] + Summary: [Your 5-sentence summary]""" + + base_tokens = await self.client.count_tokens(base_prompt, self.model) + available_tokens = self.max_len - base_tokens - 1000 + + final_summaries_to_include = [] + current_combined_tokens = 0 + + summary_tokens = await asyncio.gather( + *(self.client.count_tokens(s, self.model) for s in valid_summaries) + ) + + for summary, tokens in zip(valid_summaries, summary_tokens): + if current_combined_tokens + tokens > available_tokens: + logger.warning(f"[{group_name}] Reached max_len limit. Skipping remaining summaries.") + break + + final_summaries_to_include.append(summary) + current_combined_tokens += tokens + + if not final_summaries_to_include: + return "Error: Initial summaries are too large to fit in max_len." + + combined_summaries_text = "\n---\n".join(final_summaries_to_include) + final_prompt = base_prompt.replace("{DATA}", combined_summaries_text) + + logger.info(f"[{group_name}] Sending final prompt to LLM...") + async with self.semaphore: + final_result = await self.client.generate( + [{"role": "user", "content": final_prompt}], + self.model, + temperature=0.2 + ) + + logger.info(f"[{group_name}] Final summary completed.") + return group_name,final_result or "Failed to generate final summary." + +async def main(): + client = LLMClient(base_url="http://localhost:9124/v1", tokenizer_url="http://localhost:9124/tokenize") + + # ВАЖНО: Если у вас локально запущена тяжелая модель (30B), + # параллельная обработка 3 запросов с большим контекстом требует огромного объема VRAM. + # Если скрипт все еще висит - поставьте max_concurrent_tasks=1 + summarizer = AsyncErrorSummarizer(client, model="Qwen/Qwen3-30B-A3B-Thinking-2507", max_concurrent_tasks=16) + + try: + logger.info("Loading parquet file...") + df = pd.read_parquet('data4_80ac.parquet') + + logger.info("Starting parallel group processing...") + results = await asyncio.gather( + *[summarizer.process_group(group, name) for name,group in df.groupby('cluster')] + ) + print(results) + for i, res in results : + + print(f"\n--- RESULT GROUP {i} ---\n{res}") + + except FileNotFoundError: + logger.error("File 'data.parquet' not found.") + finally: + await client.close() + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/tests/wtq_tests.ipynb b/tests/wtq_tests.ipynb new file mode 100644 index 0000000..9203313 --- /dev/null +++ b/tests/wtq_tests.ipynb @@ -0,0 +1,489 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "385306d1-701f-4c75-8d6a-db2ee91f0f26", + "metadata": {}, + "source": [ + "# Evaluete wtq test" + ] + }, + { + "cell_type": "markdown", + "id": "4618186f-0615-4798-98d9-b244ef7b7d61", + "metadata": {}, + "source": [ + "## Functions" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "f10e5c31-f85b-40a8-a182-f4ce2c83268c", + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "import os\n", + "import pandas as pd\n", + "import numpy as np\n", + "# Добавляем корневую директорию проекта в sys.path\n", + "sys.path.append(os.path.dirname(os.path.abspath('/media/research/yrl_aida_users/poddubny/poddubnyy/postgraduate/semtab_serializer/tests')))\n", + "from utils.utils import load_config\n", + "from datasets import load_from_disk,Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e77429f3-73b8-4444-a80d-33aba1641361", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "7de1fae3-50eb-4770-b014-6c29a9babf8b", + "metadata": {}, + "outputs": [], + "source": [ + "def evaluate(res,gt:str):\n", + " if '|' in gt:\n", + " gt = '|'.join(sorted(gt.split('|')))\n", + " if res is not None:\n", + " if isinstance(res, list):\n", + " res = '|'.join(sorted([str(x) for x in res]))\n", + " elif isinstance(res, pd.Series):\n", + " if len(res) == 1:\n", + " res = str(res.iloc[0])\n", + " else:\n", + " res = '|'.join(sorted([str(x) for x in result.tolist()]))\n", + " return res == gt" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "053e1345-8cdf-4fac-b515-6986ed0e7322", + "metadata": {}, + "outputs": [], + "source": [ + "def get_accuracy_wtq(data_path,conf_path,tests = None):\n", + " data = load_from_disk(data_path)\n", + " config = load_config(conf_path)\n", + " tests = list(config.keys()) if tests==None else tests\n", + " acc_old = None\n", + " for test in tests:\n", + " print(test)\n", + " process_data = data.filter(lambda x : x[f'{test}_answ_correct'] != 'None',num_proc=17)\n", + " dd = data.filter(lambda x: True if x[f'{test}_label']!='None' else False,num_proc=17)\n", + " print('Процент корректируемых ответов',process_data.shape[0]/data.shape[0]*100)\n", + " cor = process_data.filter(lambda x : True if x[f'{test}_label']==str(bool(x['label'])) else False,num_proc=17)\n", + " print('успешно скорректированные отноосительно корректируемых ',cor.shape[0]/process_data.shape[0]*100)\n", + " print('выполнимость',dd.shape[0]/data.shape[0]*100)\n", + " true = dd.filter(lambda x : True if evaluate(x[f'{test}_label'],x['label']) else False,num_proc=17)\n", + " print('коректность вывыполняемых ',true.shape[0]/dd.shape[0]*100)\n", + " full = data.filter(lambda x : True if evaluate(x[f'{test}_label'],x['label']) else False,num_proc=17)\n", + " acc = full.shape[0]/data.shape[0]*100\n", + " without_corr = data.filter(lambda x : x[f'{test}_answ_correct'] == 'None',num_proc=17)\n", + " full_wo_corr = without_corr.filter(lambda x : True if evaluate(x[f'{test}_label'],x['label']) else False,num_proc=17)\n", + " print('Общая точность',acc)\n", + " print('точность без учета коррекции',full_wo_corr.shape[0]/data.shape[0]*100)\n", + " if acc_old == None:\n", + " acc_old = acc\n", + " print('different',acc-acc_old)\n", + " acc_old = acc" + ] + }, + { + "cell_type": "markdown", + "id": "c588261d-4456-4112-9578-ec42ead82962", + "metadata": {}, + "source": [ + "## Бейзлайн wtq" + ] + }, + { + "cell_type": "markdown", + "id": "5c3899db-6926-4e1b-9e1b-50252777b558", + "metadata": {}, + "source": [ + "#### чистый deep seek coder 7b 1/5 train prompt" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "6891d3d6-794b-4010-baf0-10787c2e6512", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "semtab_xml_attributes_semantic_datatype_exampples_top1_tresh50\n", + "Процент корректируемых ответов 14.957363447799032\n", + "успешно скорректированные отноосительно корректируемых 0.46224961479198773\n", + "выполнимость 86.19497580087577\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "30ce7341338949308985eb7d47b4979a", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Filter (num_proc=17): 0%| | 0/3740 [00:00" +''' + +def send_message(message,max_tokens=1000,top_p=0.9,temperature=0.5,server_url="http://127.0.0.1:8800/v1",api_key="dummy", + model_name='deepseek-ai/deepseek-coder-7b-instruct-v1.5',system_prompt='', stop = ["Observation:","\n\n\n\n","\n \n \n"]): + client = OpenAI(base_url=server_url, api_key=api_key) + model_input = [ + { 'role': 'system', 'content': system_prompt}, + { 'role': 'user', 'content': message} + ] + try: + print(f"Generating content with model: {model_name}",) + + response = client.chat.completions.create( + model=model_name, + messages=model_input, + temperature=temperature, + max_tokens=max_tokens, + top_p=top_p, + stop = stop + ) + + return True, response.choices[0].message.content + + except Exception as e: + print("Failed to call LLM: " + str(e)) + time.sleep(3) + if hasattr(e, 'response'): + error_info = e.response.json() + code_value = error_info['error']['code'] + else: + code_value = "context_length_exceeded" + print("Retrying ...") + return False, None + +def parse_panda_code(input_string): + """ + Парсит строку и извлекает код, который находится внутри конструкции "PANDA": <код> + Поддерживает различные форматы: JSON, простой текст, Markdown + + Args: + input_string (str): Входная строка для парсинга + + Returns: + str: Извлеченный код или пустая строка, если код не найден + """ + # Сначала попробуем найти JSON объект с PANDA + json_pattern = r'\{[^{}]*PANDA":\s*(.+?)(?:\n|$)?\}' + json_match = re.search(json_pattern, input_string, re.DOTALL) + code = None + pattern = r'"PANDA":\s*(.+?)(?:\n|$)' + if json_match: + code = json_match.group(1).strip() + else: + match = re.search(pattern, input_string, re.DOTALL) + if match: + # Извлекаем код и убираем лишние пробелы по краям + code = match.group(1).strip() + # Заменяем одинарные кавычки внутри строки для корректного парсинга JSON + + # Если JSON не найден или не распарсился, используем старый метод + # Паттерн для поиска кода после "PANDA": + # Ищет "PANDA": за которым следует пробел, затем код до конца строки или до следующего символа + if code != None: + # Убираем возможные кавычки вокруг кода + if code.startswith('"') and code.endswith('"'): + code = code[1:-1] + elif code.startswith("'") and code.endswith("'"): + code = code[1:-1] + + return code + + return "" +def dataset_processing(entry,query_field=None): + df = pd.read_csv(StringIO(entry['table_text']), delimiter='#') + success,response_sep = send_message(entry[f"{query_field}_query"], + system_prompt=system_prompt) + + entry[f'{query_field}_answ'] = 'None' + entry[f'{query_field}_label'] = 'None' + + if success: + entry[f'{query_field}_answ'] = response_sep + try: + pandas_eval = str(bool(eval(parse_panda_code(response_sep)))) + entry[f'{query_field}_label'] = str(pandas_eval) + except Exception as e: + print('EEEERRRRRRR', entry['id']) + print(e) + return entry +def main(): + parser = argparse.ArgumentParser(description='Скрипт с настраиваемыми параметрами') + parser.add_argument('--query-field', type=str, default='semtab', + choices=['semtab', 'nlsep','proto'], help='Тип query field') + parser.add_argument('--input_data', type=str, default='none_filtered_new_dataset2', + help='путь к набору данных для обработки') + parser.add_argument('--output_data', type=str, default='none_filtered_new_dataset2_new', + help='путь к выходному набору данных') + parser.add_argument('--num-proc', type=int, default=2, + help='Количество процессов') + + args = parser.parse_args() + in_dataset = args.input_data + out_dataset = args.output_data + query_field = args.query_field + NUM_PROC = args.num_proc + + print(f"query_field: {query_field}") + print(f"NUM_PROC: {NUM_PROC}") + print(f"in_dataset: {in_dataset}") + print(f"out_dataset: {out_dataset}") + + + # Ваш основной код здесь + dataset = load_from_disk(in_dataset) + dataset2 = dataset.map(partial(dataset_processing,query_field=query_field),num_proc=NUM_PROC) + dataset2.save_to_disk(out_dataset) + +if __name__ == "__main__": + main() diff --git a/utils/cossim/cossim.py b/utils/cossim/cossim.py new file mode 100644 index 0000000..9120055 --- /dev/null +++ b/utils/cossim/cossim.py @@ -0,0 +1,183 @@ +import torch +import faiss +import numpy as np +from transformers import AutoModel, AutoTokenizer +from typing import List, Dict, Tuple, Optional +import re +import pandas as pd + +class Qwen3EmbeddingMatcher: + """ + Поиск определений по косинусному сходству с использованием: + - Qwen3 Embedding для получения векторов + - FAISS для хранения и быстрого поиска + """ + + def __init__( + self, + definitions: List[str] = None, + index_name: str = None, + cossim_model_name: str = "Qwen/Qwen3-Embedding-0.6B", # Можно также 4B или 8B + device: Optional[str] = None, + use_faiss_ip: bool = True,# True = косинусное сходство (Inner Product на нормализованных векторах) + **kwargs + ): + """ + Args: + definitions: список определений + cossim_model_name: название модели Qwen3 Embedding + device: 'cuda' или 'cpu' (auto-detect если None) + use_faiss_ip: использовать IndexFlatIP (косинусное сходство) или IndexFlatL2 + + """ + + self.definitions = definitions + self.device = device or ('cuda' if torch.cuda.is_available() else 'cpu') + + print(f"Загрузка модели {cossim_model_name} на {self.device}...") + self.tokenizer = AutoTokenizer.from_pretrained(cossim_model_name, trust_remote_code=True) + self.model = AutoModel.from_pretrained( + cossim_model_name, + trust_remote_code=True + ).to(self.device) + self.model.eval() + + # Получаем размерность эмбеддингов + self.embedding_dim = self.model.config.hidden_size + print(f"Размерность эмбеддингов: {self.embedding_dim}") + if index_name != None: + self.load_index(index_name) + elif self.definitions != None: + + # Создаем FAISS индекс + if use_faiss_ip: + # IndexFlatIP = Inner Product = косинусное сходство для нормализованных векторов + self.index = faiss.IndexFlatIP(self.embedding_dim) + else: + # IndexFlatL2 = Евклидово расстояние + self.index = faiss.IndexFlatL2(self.embedding_dim) + + # Индекс для быстрого доступа к оригинальным определениям + self.index_to_def = {i: def_text for i, def_text in enumerate(definitions)} + + # Создаем эмбеддинги для всех определений + self._build_index() + else: + raise ValueError('definitions or index files not found') + + def _preprocess_text(self, text: str) -> str: + """Предобработка текста (опционально)""" + # Удаляем лишние пробелы + text = re.sub(r'\s+', ' ', text.strip()) + return text + + @torch.no_grad() + def encode(self, texts: List[str]) -> np.ndarray: + """ + Получение эмбеддингов через Qwen3 Embedding + + Args: + texts: список текстов + + Returns: + numpy array с эмбеддингами + """ + # Токенизация + inputs = self.tokenizer( + texts, + padding=True, + truncation=True, + max_length=512, # Можно увеличить до 32768 + return_tensors="pt" + ).to(self.device) + + # Получение эмбеддингов + outputs = self.model(**inputs) + + # Qwen3 Embedding использует последний скрытый состояние для [EOS] токена + # как семантическое представление [citation:1] + embeddings = outputs.last_hidden_state[:, -1, :].cpu().numpy() + + # Нормализация для косинусного сходства + faiss.normalize_L2(embeddings) + + return embeddings + + def _build_index(self): + """Создание FAISS индекса из определений""" + print("Создание эмбеддингов для определений...") + + # Обрабатываем определения батчами для экономии памяти + batch_size = 1 + all_embeddings = [] + + for i in range(0, len(self.definitions), batch_size): + batch_defs = self.definitions[i:i+batch_size] + batch_embeddings = self.encode(batch_defs) + all_embeddings.append(batch_embeddings) + print(f"Обработано {min(i+batch_size, len(self.definitions))}/{len(self.definitions)}") + + # Объединяем все эмбеддинги + embeddings = np.vstack(all_embeddings) + + # Добавляем в FAISS индекс + self.index.add(embeddings.astype(np.float32)) + print(f"Индекс создан. Всего векторов: {self.index.ntotal}") + + def find_similar( + self, + query: str, + top_k: int = 5, + threshold: float = 0.0 + ) -> List[Dict]: + """ + Поиск наиболее похожих определений + + Args: + query: поисковый запрос (новый термин) + top_k: количество результатов + threshold: минимальный порог сходства + + Returns: + список словарей с результатами + """ + # Получаем эмбеддинг запроса + query_embedding = self.encode([query]) + + # Поиск в FAISS + similarities, indices = self.index.search( + query_embedding.astype(np.float32), + top_k + ) + + # Форматирование результатов + results = [] + for sim, idx in zip(similarities[0], indices[0]): + if idx != -1 and sim >= threshold: + results.append({ + 'index': int(idx), + 'definition': self.index_to_def[idx], + 'similarity': float(sim) + }) + + return results + + def save_index(self, path: str): + """Сохранение FAISS индекса""" + faiss.write_index(self.index, f"{path}.faiss") + # Сохраняем также определения + np.save(f"{path}_defs.npy", self.definitions) + print(f"Индекс сохранён в {path}.faiss") + + def load_index(self, path: str): + """Загрузка FAISS индекса""" + self.index = faiss.read_index(f"{path}.faiss") + self.definitions = np.load(f"{path}_defs.npy", allow_pickle=True).tolist() + self.index_to_def = {i: def_text for i, def_text in enumerate(self.definitions)} + print(f"Индекс загружен. Всего векторов: {self.index.ntotal}") + + def annotate_columns(self, df: pd.DataFrame, top_k: int= 1, threshold: float = 0.5,add_data = None)-> List[List[Tuple[str,float]]]: + + return [[(res['definition'],round(res['similarity'],4)) + for res in self.find_similar(col_name,top_k=top_k,threshold=threshold)] + for col_name in df.columns] \ No newline at end of file diff --git a/utils/defgen/.ipynb_checkpoints/__init__-checkpoint.py b/utils/defgen/.ipynb_checkpoints/__init__-checkpoint.py new file mode 100644 index 0000000..2283f1f --- /dev/null +++ b/utils/defgen/.ipynb_checkpoints/__init__-checkpoint.py @@ -0,0 +1 @@ +from .defgen import * \ No newline at end of file diff --git a/utils/defgen/.ipynb_checkpoints/defgen-checkpoint.py b/utils/defgen/.ipynb_checkpoints/defgen-checkpoint.py new file mode 100644 index 0000000..8d4b5bb --- /dev/null +++ b/utils/defgen/.ipynb_checkpoints/defgen-checkpoint.py @@ -0,0 +1,47 @@ +import pandas as pd +import json + +from typing import List, Dict, Tuple, Optional +import re +class ColumnDefGenerator: + """ + + """ + + def __init__( + self, + ): + """ + Args: + + """ + pass + + + def _get_table_columns_defenitions(self,table_name: str): + if table_name == None: + return None + table_def = pd.read_parquet("/home/poddubny/notebooks/poddubnyy/postgraduate/semtab_serializer/utils/defgen/df_pantabfact_train.parquet.gzip") + return json.loads(table_def[table_def['table_csv']==table_name]['column_defenition_json'].to_list()[0]) + + def annotate_columns(self, df: pd.DataFrame, top_k: int= 1, threshold: float = 0.5, add_data = None)-> List[List[Tuple[str,float]]]: + if add_data != None: + col_def = self._get_table_columns_defenitions(add_data.get('table_csv', None)) + + # Создаем новый словарь с нормализованными ключами + normalized_col_def = {} + for key, value in col_def.items(): + normalized_key = re.sub(' ', '', key).lower() + normalized_col_def[normalized_key] = value + # Сохраняем и оригинальный ключ, если нужно + normalized_col_def[key] = value + + return [[(normalized_col_def.get(re.sub(' ', '', col_name).lower(), ''), None)] + for col_name in df.columns] + else: + #print('!'*50) + return [[(None, None)] + for col_name in df.columns] + + + diff --git a/utils/defgen/.ipynb_checkpoints/prompts-checkpoint.py b/utils/defgen/.ipynb_checkpoints/prompts-checkpoint.py new file mode 100644 index 0000000..0daa03e --- /dev/null +++ b/utils/defgen/.ipynb_checkpoints/prompts-checkpoint.py @@ -0,0 +1,67 @@ +system_prompt = '''You're an expert linguist. You are provided with a table schema with a description in XML format. +Your task is to analyze the tabular context and, based on the information received, give a brief but semantically succinct definition for each HEADER, +its format features (how to interpret signs, abbreviations, or complex strings, such as "A - B"). +If there are units of measurement in the EXAMPLES, then include them in the answer. + +The output must be in json in the dictionary format {
:
}. + +###################### +-Examples- +###################### +Example 1: + +
+
+
+
+
+
+###################### +Output: +{ +"planet": "The proper name of a celestial body in the Solar system, presented in text format.", +"type": "Classification of a planet by its physical and chemical composition (for example, 'terrestrial' — rocky or 'gas giant' — gas giant).", +"moons": "Quantitative indicator indicating the total number of confirmed natural satellites of the planet (integer).", +"diameter_km""The equatorial diameter of a celestial body, expressed in numerical terms. Unit of measurement: kilometers (km).", +"gravity_ms2": "Acceleration of gravity on the surface of the planet. Unit of measurement: meters per second squared ($$m/s^2$$)." +} +###################### +Example 2: + +
+
+
+###################### +Output: +{ + "title": "The official name of a literary work, written in text form.", + "author": "The first and last name of the author (creator) of the work, presented as a string." +} +###################### +Example 3: + +
+
+
+
+
+
+###################### +Output: +{ + "model": "The commercial name of a specific device, including the series name and serial number.", +"brand": "The name of the manufacturing company (brand) responsible for the release of the device.", +"screen_size": "The diagonal size of the device's display, represented as a decimal. Unit of measurement: inches.", +"ram_gb": "The amount of RAM available for the system and applications. Unit of measurement: gigabytes (GB).", +"battery_mah": "The electrical capacity of the device's battery, which determines the battery life. Unit of measurement: milliampere-hours (mAh)." +} + +''' +prompt = ''' +###################### +-Real Data- +###################### +{input_text} +###################### +Output: +''' \ No newline at end of file diff --git a/utils/defgen/__init__.py b/utils/defgen/__init__.py new file mode 100644 index 0000000..2283f1f --- /dev/null +++ b/utils/defgen/__init__.py @@ -0,0 +1 @@ +from .defgen import * \ No newline at end of file diff --git a/utils/defgen/__pycache__/__init__.cpython-310.pyc b/utils/defgen/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000..a12f13b Binary files /dev/null and b/utils/defgen/__pycache__/__init__.cpython-310.pyc differ diff --git a/utils/defgen/__pycache__/defgen.cpython-310.pyc b/utils/defgen/__pycache__/defgen.cpython-310.pyc new file mode 100644 index 0000000..058d732 Binary files /dev/null and b/utils/defgen/__pycache__/defgen.cpython-310.pyc differ diff --git a/utils/defgen/defgen.py b/utils/defgen/defgen.py new file mode 100644 index 0000000..c6c6eda --- /dev/null +++ b/utils/defgen/defgen.py @@ -0,0 +1,51 @@ +import pandas as pd +import json + +from typing import List, Dict, Tuple, Optional +import re +class ColumnDefGenerator: + """ + + """ + + def __init__( + self, + ): + """ + Args: + + """ + pass + + + def _get_table_columns_defenitions(self,table_name: str): + if table_name == None: + return None + #table_def = pd.read_parquet("/home/poddubny/notebooks/poddubnyy/postgraduate/semtab_serializer/utils/defgen/df.parquet.gzip") + table_def = pd.read_parquet("/home/poddubny/notebooks/poddubnyy/postgraduate/semtab_serializer/utils/defgen/df_wtq_train.parquet.gzip") + #return json.loads(table_def[table_def['table_csv']==table_name]['column_defenition_json'].to_list()[0]) + return json.loads(table_def[table_def['context']==table_name]['column_defenition_json'].to_list()[0]) + + def annotate_columns(self, df: pd.DataFrame, top_k: int= 1, threshold: float = 0.5, add_data = None)-> List[List[Tuple[str,float]]]: + if add_data != None: + #col_def = self._get_table_columns_defenitions(add_data.get('table_csv', None)) + col_def = self._get_table_columns_defenitions(add_data.get('context', None)) + # Создаем новый словарь с нормализованными ключами + normalized_col_def = {} + for key, value in col_def.items(): + #normalized_key = re.sub(' ', '', key).lower() + normalized_key = re.sub('\\n','',re.sub('\\\\n','',re.sub(' ','',key))).lower() + normalized_col_def[normalized_key] = value + # Сохраняем и оригинальный ключ, если нужно + normalized_col_def[key] = value + + #return [[(normalized_col_def.get(re.sub(' ', '', col_name).lower(), ''), None)] + return [[(normalized_col_def.get(re.sub('\\n','',re.sub('\\\\n','',re.sub(' ','',col_name))).lower(), ''), None)] + for col_name in df.columns] + else: + #print('!'*50) + return [[(None, None)] + for col_name in df.columns] + + + diff --git a/utils/defgen/df.parquet.gzip b/utils/defgen/df.parquet.gzip new file mode 100644 index 0000000..4ad9b32 Binary files /dev/null and b/utils/defgen/df.parquet.gzip differ diff --git a/utils/defgen/df_pantabfact_train.parquet.gzip b/utils/defgen/df_pantabfact_train.parquet.gzip new file mode 100644 index 0000000..eebb251 Binary files /dev/null and b/utils/defgen/df_pantabfact_train.parquet.gzip differ diff --git a/utils/defgen/prompts.py b/utils/defgen/prompts.py new file mode 100644 index 0000000..0daa03e --- /dev/null +++ b/utils/defgen/prompts.py @@ -0,0 +1,67 @@ +system_prompt = '''You're an expert linguist. You are provided with a table schema with a description in XML format. +Your task is to analyze the tabular context and, based on the information received, give a brief but semantically succinct definition for each HEADER, +its format features (how to interpret signs, abbreviations, or complex strings, such as "A - B"). +If there are units of measurement in the EXAMPLES, then include them in the answer. + +The output must be in json in the dictionary format {
:
}. + +###################### +-Examples- +###################### +Example 1: + +
+
+
+
+
+
+###################### +Output: +{ +"planet": "The proper name of a celestial body in the Solar system, presented in text format.", +"type": "Classification of a planet by its physical and chemical composition (for example, 'terrestrial' — rocky or 'gas giant' — gas giant).", +"moons": "Quantitative indicator indicating the total number of confirmed natural satellites of the planet (integer).", +"diameter_km""The equatorial diameter of a celestial body, expressed in numerical terms. Unit of measurement: kilometers (km).", +"gravity_ms2": "Acceleration of gravity on the surface of the planet. Unit of measurement: meters per second squared ($$m/s^2$$)." +} +###################### +Example 2: + +
+
+
+###################### +Output: +{ + "title": "The official name of a literary work, written in text form.", + "author": "The first and last name of the author (creator) of the work, presented as a string." +} +###################### +Example 3: + +
+
+
+
+
+
+###################### +Output: +{ + "model": "The commercial name of a specific device, including the series name and serial number.", +"brand": "The name of the manufacturing company (brand) responsible for the release of the device.", +"screen_size": "The diagonal size of the device's display, represented as a decimal. Unit of measurement: inches.", +"ram_gb": "The amount of RAM available for the system and applications. Unit of measurement: gigabytes (GB).", +"battery_mah": "The electrical capacity of the device's battery, which determines the battery life. Unit of measurement: milliampere-hours (mAh)." +} + +''' +prompt = ''' +###################### +-Real Data- +###################### +{input_text} +###################### +Output: +''' \ No newline at end of file diff --git a/utils/doduo/doduo.py b/utils/doduo/doduo.py index 191a03c..a91097b 100644 --- a/utils/doduo/doduo.py +++ b/utils/doduo/doduo.py @@ -213,7 +213,7 @@ def rename_func(self,key): return key.replace("bert.", "") - def annotate_columns(self, df: pd.DataFrame, top_k: int= 1, threshold: float = 0.5)-> List[List[Tuple[str,float]]]: + def annotate_columns(self, df: pd.DataFrame, top_k: int= 1, threshold: float = 0.5,add_data = None)-> List[List[Tuple[str,float]]]: ## Dataset input_dataset = DFColTypeTablewiseDataset(df, self.tokenizer,device=self.device) diff --git a/utils/utils.py b/utils/utils.py index 2339fad..5a101f4 100644 --- a/utils/utils.py +++ b/utils/utils.py @@ -10,6 +10,7 @@ import pandas as pd from concurrent.futures import ThreadPoolExecutor import yaml +from utils.type_check import analyze_dataset_parallel def load_config(config_file_path): with open(config_file_path, 'r') as stream: @@ -52,15 +53,16 @@ def serialize_table_to_tapex_format(df:pd.DataFrame) -> str: return lin_table -def make_semantic_columns_name(table: DataFrame, model: Doduo = None, top_k: int = 1, - threshold: float = 0.5) -> List[Tuple[str, Dict[str, float]]]: - columns_annotations = model.annotate_columns(table, top_k=top_k, threshold=threshold) +def make_semantic_columns_name(table: DataFrame, model: Any = None, top_k: int = 1, + threshold: float = 0.5,add_data=None) -> List[Tuple[str, Dict[str, float]]]: + #print(add_data) + columns_annotations = model.annotate_columns(table, top_k=top_k, threshold=threshold,add_data = add_data) semantic_columns_name = [] for col_id, col_name in enumerate(table.columns): sem_col_types = get_item(columns_annotations, col_id) sem_col_types = sem_col_types if sem_col_types is not None else [(None, None)] semantic_columns_name.append((col_name, {col_types[0]: col_types[1] for col_types in sem_col_types})) - + #print(semantic_columns_name) return semantic_columns_name @@ -232,8 +234,8 @@ def get_elements_xml_serialization(table: pd.DataFrame,include_data_types: bool if include_semantic_types: sem_t = ET.SubElement(head, "SEMANTIC_TYPE") sem_t.text = 'NO TYPE' - sem_t.text = " ; ".join([" - ".join([type_,str(round(prop,2))]) for type_,prop in sem_types[col_idx][1].items()]) - + sem_t.text = " ; ".join([" - ".join([type_,str(round(prop,2) if prop != None else '')]) for type_,prop in sem_types[col_idx][1].items()]) + if include_data_types: data_t = ET.SubElement(head, "DATA_TYPE") #print('data_type',column_name,data_types[column_name][0]) @@ -264,9 +266,10 @@ def get_attributes_xml_serialization(table: pd.DataFrame,include_data_types: boo head.set("NAME",column_name) if include_semantic_types: - head.set("SEMANTIC_TYPE"," ; ".join([" - ".join([type_,str(round(prop,2))]) + #head.set("SEMANTIC_TYPE"," ; ".join([" - ".join([type_,str(round(prop,2) if prop != None else '')]) + # for type_,prop in sem_types[col_idx][1].items()])) + head.set("COLUMN_DESCRIPTION"," ; ".join([" - ".join([type_,str(round(prop,2) if prop != None else '')]) for type_,prop in sem_types[col_idx][1].items()])) - if include_data_types: head.set("DATA_TYPE",json.dumps(data_types[column_name][0])) head.set("HAS_NONE",'1' if data_types[column_name][1] else '0') @@ -296,7 +299,7 @@ def get_html_serialization(table: pd.DataFrame,include_data_types: bool = True,i th.text = column_name if include_semantic_types: - th.set("SEMANTIC_TYPE"," ; ".join([" - ".join([type_,str(round(prop,2))]) + th.set("SEMANTIC_TYPE"," ; ".join([" - ".join([type_,str(round(prop,2) if prop != None else '')]) for type_,prop in sem_types[col_idx][1].items()])) if include_data_types: